From 958df2f1f8a6032acdb3d41281eb9f569a2952ef Mon Sep 17 00:00:00 2001 From: "Justin \"J.R.\" Hill" Date: Mon, 21 Aug 2023 13:08:24 -0700 Subject: [PATCH 1/5] feat(java): Introduce Java SDK --- .github/workflows/main.yml | 26 + .github/workflows/semgrep.yaml | 17 + .openapi-generator-ignore | 8 + .openapi-generator/FILES | 206 ++ .openapi-generator/VERSION | 1 + README.md | 218 +- VERSION.txt | 1 + api/openapi.yaml | 1912 ++++++++++++++ build.gradle | 121 + docs/Any.md | 13 + docs/Assertion.md | 14 + docs/AuthorizationModel.md | 15 + docs/CheckRequest.md | 16 + docs/CheckResponse.md | 14 + docs/Computed.md | 13 + docs/ContextualTupleKeys.md | 13 + docs/CreateStoreRequest.md | 13 + docs/CreateStoreResponse.md | 16 + docs/Difference.md | 14 + docs/ErrorCode.md | 107 + docs/ExpandRequest.md | 14 + docs/ExpandResponse.md | 13 + docs/GetStoreResponse.md | 16 + docs/InternalErrorCode.md | 33 + docs/InternalErrorMessageResponse.md | 14 + docs/Leaf.md | 16 + docs/ListObjectsRequest.md | 17 + docs/ListObjectsResponse.md | 13 + docs/ListStoresResponse.md | 14 + docs/Metadata.md | 13 + docs/Node.md | 17 + docs/Nodes.md | 13 + docs/NotFoundErrorCode.md | 19 + docs/ObjectRelation.md | 14 + docs/OpenFgaApi.md | 2333 +++++++++++++++++ docs/PathUnknownErrorMessageResponse.md | 14 + docs/ReadAssertionsResponse.md | 14 + docs/ReadAuthorizationModelResponse.md | 13 + docs/ReadAuthorizationModelsResponse.md | 14 + docs/ReadChangesResponse.md | 14 + docs/ReadRequest.md | 15 + docs/ReadResponse.md | 14 + docs/RelationMetadata.md | 13 + docs/RelationReference.md | 16 + docs/Status.md | 15 + docs/Store.md | 17 + docs/Tuple.md | 14 + docs/TupleChange.md | 15 + docs/TupleKey.md | 15 + docs/TupleKeys.md | 13 + docs/TupleOperation.md | 15 + docs/TupleToUserset.md | 14 + docs/TypeDefinition.md | 15 + docs/Users.md | 13 + docs/Userset.md | 18 + docs/UsersetTree.md | 14 + docs/UsersetTreeDifference.md | 14 + docs/UsersetTreeTupleToUserset.md | 14 + docs/Usersets.md | 13 + docs/ValidationErrorMessageResponse.md | 14 + docs/WriteAssertionsRequest.md | 13 + docs/WriteAuthorizationModelRequest.md | 14 + docs/WriteAuthorizationModelResponse.md | 13 + docs/WriteRequest.md | 15 + gradle.properties | 0 gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 234 ++ gradlew.bat | 89 + settings.gradle | 1 + .../java/dev/openfga/sdk/api/OpenFgaApi.java | 1666 ++++++++++++ .../sdk/api/client/ApiBearerToken.java | 29 + .../dev/openfga/sdk/api/client/ApiClient.java | 327 +++ .../openfga/sdk/api/client/ApiException.java | 92 + .../openfga/sdk/api/client/ApiResponse.java | 64 + .../sdk/api/client/BaseConfiguration.java | 28 + .../sdk/api/client/ClientCredentials.java | 80 + .../openfga/sdk/api/client/Configuration.java | 179 ++ .../sdk/api/client/CredentialsMethod.java | 41 + .../java/dev/openfga/sdk/api/client/JSON.java | 254 ++ .../java/dev/openfga/sdk/api/client/Pair.java | 58 + .../sdk/api/client/RFC3339DateFormat.java | 55 + .../sdk/api/model/AbstractOpenApiSchema.java | 147 ++ .../java/dev/openfga/sdk/api/model/Any.java | 196 ++ .../dev/openfga/sdk/api/model/Assertion.java | 174 ++ .../sdk/api/model/AuthorizationModel.java | 239 ++ .../openfga/sdk/api/model/CheckRequest.java | 248 ++ .../openfga/sdk/api/model/CheckResponse.java | 179 ++ .../dev/openfga/sdk/api/model/Computed.java | 142 + .../sdk/api/model/ContextualTupleKeys.java | 157 ++ .../sdk/api/model/CreateStoreRequest.java | 142 + .../sdk/api/model/CreateStoreResponse.java | 259 ++ .../dev/openfga/sdk/api/model/Difference.java | 166 ++ .../dev/openfga/sdk/api/model/ErrorCode.java | 159 ++ .../openfga/sdk/api/model/ExpandRequest.java | 176 ++ .../openfga/sdk/api/model/ExpandResponse.java | 135 + .../sdk/api/model/GetStoreResponse.java | 259 ++ .../sdk/api/model/InternalErrorCode.java | 85 + .../model/InternalErrorMessageResponse.java | 180 ++ .../java/dev/openfga/sdk/api/model/Leaf.java | 201 ++ .../sdk/api/model/ListObjectsRequest.java | 295 +++ .../sdk/api/model/ListObjectsResponse.java | 155 ++ .../sdk/api/model/ListStoresResponse.java | 198 ++ .../dev/openfga/sdk/api/model/Metadata.java | 157 ++ .../java/dev/openfga/sdk/api/model/Node.java | 276 ++ .../java/dev/openfga/sdk/api/model/Nodes.java | 157 ++ .../sdk/api/model/NotFoundErrorCode.java | 71 + .../openfga/sdk/api/model/ObjectRelation.java | 179 ++ .../PathUnknownErrorMessageResponse.java | 182 ++ .../sdk/api/model/ReadAssertionsResponse.java | 201 ++ .../model/ReadAuthorizationModelResponse.java | 137 + .../ReadAuthorizationModelsResponse.java | 203 ++ .../sdk/api/model/ReadChangesResponse.java | 198 ++ .../openfga/sdk/api/model/ReadRequest.java | 217 ++ .../openfga/sdk/api/model/ReadResponse.java | 198 ++ .../sdk/api/model/RelationMetadata.java | 159 ++ .../sdk/api/model/RelationReference.java | 220 ++ .../dev/openfga/sdk/api/model/Status.java | 231 ++ .../java/dev/openfga/sdk/api/model/Store.java | 297 +++ .../java/dev/openfga/sdk/api/model/Tuple.java | 174 ++ .../openfga/sdk/api/model/TupleChange.java | 216 ++ .../dev/openfga/sdk/api/model/TupleKey.java | 216 ++ .../dev/openfga/sdk/api/model/TupleKeys.java | 157 ++ .../openfga/sdk/api/model/TupleOperation.java | 67 + .../openfga/sdk/api/model/TupleToUserset.java | 169 ++ .../openfga/sdk/api/model/TypeDefinition.java | 232 ++ .../java/dev/openfga/sdk/api/model/Users.java | 155 ++ .../dev/openfga/sdk/api/model/Userset.java | 313 +++ .../openfga/sdk/api/model/UsersetTree.java | 135 + .../sdk/api/model/UsersetTreeDifference.java | 167 ++ .../api/model/UsersetTreeTupleToUserset.java | 196 ++ .../dev/openfga/sdk/api/model/Usersets.java | 157 ++ .../model/ValidationErrorMessageResponse.java | 182 ++ .../sdk/api/model/WriteAssertionsRequest.java | 157 ++ .../model/WriteAuthorizationModelRequest.java | 201 ++ .../WriteAuthorizationModelResponse.java | 144 + .../openfga/sdk/api/model/WriteRequest.java | 212 ++ .../errors/FgaInvalidParameterException.java | 15 + .../java/dev/openfga/util/StringUtil.java | 34 + .../sdk/api/OpenFgaApiIntegrationTest.java | 331 +++ .../dev/openfga/sdk/api/OpenFgaApiTest.java | 1762 +++++++++++++ .../sdk/api/client/ClientCredentialsTest.java | 112 + .../sdk/api/client/ConfigurationTest.java | 87 + .../dev/openfga/sdk/api/model/AnyTest.java | 38 + .../openfga/sdk/api/model/AssertionTest.java | 46 + .../sdk/api/model/AuthorizationModelTest.java | 54 + .../sdk/api/model/CheckRequestTest.java | 62 + .../sdk/api/model/CheckResponseTest.java | 46 + .../openfga/sdk/api/model/ComputedTest.java | 38 + .../api/model/ContextualTupleKeysTest.java | 38 + .../sdk/api/model/CreateStoreRequestTest.java | 38 + .../api/model/CreateStoreResponseTest.java | 62 + .../openfga/sdk/api/model/DifferenceTest.java | 46 + .../openfga/sdk/api/model/ErrorCodeTest.java | 28 + .../sdk/api/model/ExpandRequestTest.java | 46 + .../sdk/api/model/ExpandResponseTest.java | 38 + .../sdk/api/model/GetStoreResponseTest.java | 62 + .../sdk/api/model/InternalErrorCodeTest.java | 28 + .../InternalErrorMessageResponseTest.java | 46 + .../dev/openfga/sdk/api/model/LeafTest.java | 54 + .../sdk/api/model/ListObjectsRequestTest.java | 70 + .../api/model/ListObjectsResponseTest.java | 38 + .../sdk/api/model/ListStoresResponseTest.java | 46 + .../openfga/sdk/api/model/MetadataTest.java | 38 + .../dev/openfga/sdk/api/model/NodeTest.java | 70 + .../dev/openfga/sdk/api/model/NodesTest.java | 38 + .../sdk/api/model/NotFoundErrorCodeTest.java | 28 + .../sdk/api/model/ObjectRelationTest.java | 46 + .../PathUnknownErrorMessageResponseTest.java | 46 + .../api/model/ReadAssertionsResponseTest.java | 46 + .../ReadAuthorizationModelResponseTest.java | 38 + .../ReadAuthorizationModelsResponseTest.java | 46 + .../api/model/ReadChangesResponseTest.java | 46 + .../sdk/api/model/ReadRequestTest.java | 54 + .../sdk/api/model/ReadResponseTest.java | 46 + .../sdk/api/model/RelationMetadataTest.java | 38 + .../sdk/api/model/RelationReferenceTest.java | 54 + .../dev/openfga/sdk/api/model/StatusTest.java | 54 + .../dev/openfga/sdk/api/model/StoreTest.java | 70 + .../sdk/api/model/TupleChangeTest.java | 54 + .../openfga/sdk/api/model/TupleKeyTest.java | 54 + .../openfga/sdk/api/model/TupleKeysTest.java | 38 + .../sdk/api/model/TupleOperationTest.java | 28 + .../dev/openfga/sdk/api/model/TupleTest.java | 46 + .../sdk/api/model/TupleToUsersetTest.java | 46 + .../sdk/api/model/TypeDefinitionTest.java | 54 + .../dev/openfga/sdk/api/model/UsersTest.java | 38 + .../openfga/sdk/api/model/UsersetTest.java | 78 + .../api/model/UsersetTreeDifferenceTest.java | 46 + .../sdk/api/model/UsersetTreeTest.java | 38 + .../model/UsersetTreeTupleToUsersetTest.java | 46 + .../openfga/sdk/api/model/UsersetsTest.java | 38 + .../ValidationErrorMessageResponseTest.java | 46 + .../api/model/WriteAssertionsRequestTest.java | 38 + .../WriteAuthorizationModelRequestTest.java | 46 + .../WriteAuthorizationModelResponseTest.java | 38 + .../sdk/api/model/WriteRequestTest.java | 54 + .../java/dev/openfga/util/StringUtilTest.java | 50 + 198 files changed, 23850 insertions(+), 208 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/semgrep.yaml create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION create mode 100644 VERSION.txt create mode 100644 api/openapi.yaml create mode 100644 build.gradle create mode 100644 docs/Any.md create mode 100644 docs/Assertion.md create mode 100644 docs/AuthorizationModel.md create mode 100644 docs/CheckRequest.md create mode 100644 docs/CheckResponse.md create mode 100644 docs/Computed.md create mode 100644 docs/ContextualTupleKeys.md create mode 100644 docs/CreateStoreRequest.md create mode 100644 docs/CreateStoreResponse.md create mode 100644 docs/Difference.md create mode 100644 docs/ErrorCode.md create mode 100644 docs/ExpandRequest.md create mode 100644 docs/ExpandResponse.md create mode 100644 docs/GetStoreResponse.md create mode 100644 docs/InternalErrorCode.md create mode 100644 docs/InternalErrorMessageResponse.md create mode 100644 docs/Leaf.md create mode 100644 docs/ListObjectsRequest.md create mode 100644 docs/ListObjectsResponse.md create mode 100644 docs/ListStoresResponse.md create mode 100644 docs/Metadata.md create mode 100644 docs/Node.md create mode 100644 docs/Nodes.md create mode 100644 docs/NotFoundErrorCode.md create mode 100644 docs/ObjectRelation.md create mode 100644 docs/OpenFgaApi.md create mode 100644 docs/PathUnknownErrorMessageResponse.md create mode 100644 docs/ReadAssertionsResponse.md create mode 100644 docs/ReadAuthorizationModelResponse.md create mode 100644 docs/ReadAuthorizationModelsResponse.md create mode 100644 docs/ReadChangesResponse.md create mode 100644 docs/ReadRequest.md create mode 100644 docs/ReadResponse.md create mode 100644 docs/RelationMetadata.md create mode 100644 docs/RelationReference.md create mode 100644 docs/Status.md create mode 100644 docs/Store.md create mode 100644 docs/Tuple.md create mode 100644 docs/TupleChange.md create mode 100644 docs/TupleKey.md create mode 100644 docs/TupleKeys.md create mode 100644 docs/TupleOperation.md create mode 100644 docs/TupleToUserset.md create mode 100644 docs/TypeDefinition.md create mode 100644 docs/Users.md create mode 100644 docs/Userset.md create mode 100644 docs/UsersetTree.md create mode 100644 docs/UsersetTreeDifference.md create mode 100644 docs/UsersetTreeTupleToUserset.md create mode 100644 docs/Usersets.md create mode 100644 docs/ValidationErrorMessageResponse.md create mode 100644 docs/WriteAssertionsRequest.md create mode 100644 docs/WriteAuthorizationModelRequest.md create mode 100644 docs/WriteAuthorizationModelResponse.md create mode 100644 docs/WriteRequest.md create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/dev/openfga/sdk/api/OpenFgaApi.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/ApiBearerToken.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/ApiClient.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/ApiException.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/ApiResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/Configuration.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/JSON.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/Pair.java create mode 100644 src/main/java/dev/openfga/sdk/api/client/RFC3339DateFormat.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Any.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Assertion.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/CheckRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/CheckResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Computed.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Difference.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ErrorCode.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/InternalErrorCode.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Leaf.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Metadata.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Node.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Nodes.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/NotFoundErrorCode.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ReadResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/RelationReference.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Status.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Store.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Tuple.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TupleChange.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TupleKey.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TupleKeys.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TupleOperation.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Users.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Userset.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/UsersetTree.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/Usersets.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java create mode 100644 src/main/java/dev/openfga/sdk/api/model/WriteRequest.java create mode 100644 src/main/java/dev/openfga/sdk/errors/FgaInvalidParameterException.java create mode 100644 src/main/java/dev/openfga/util/StringUtil.java create mode 100644 src/test-integration/java/dev/openfga/sdk/api/OpenFgaApiIntegrationTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/client/ClientCredentialsTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/AnyTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/AssertionTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/AuthorizationModelTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/CheckRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/CheckResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ComputedTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ContextualTupleKeysTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/CreateStoreRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/CreateStoreResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/DifferenceTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ErrorCodeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ExpandRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ExpandResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/GetStoreResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/InternalErrorCodeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/InternalErrorMessageResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/LeafTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ListObjectsRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ListObjectsResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ListStoresResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/MetadataTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/NodeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/NodesTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/NotFoundErrorCodeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ObjectRelationTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadAssertionsResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadChangesResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ReadResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/RelationMetadataTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/RelationReferenceTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/StatusTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/StoreTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleChangeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleKeyTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleKeysTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleOperationTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TupleToUsersetTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/TypeDefinitionTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersetTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersetTreeDifferenceTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersetTreeTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUsersetTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/UsersetsTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/WriteAssertionsRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequestTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponseTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/model/WriteRequestTest.java create mode 100644 src/test/java/dev/openfga/util/StringUtilTest.java diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..3404612 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,26 @@ +name: Java CI with Gradle + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + name: Build OpenFGA + runs-on: ubuntu-latest + strategy: + matrix: + java: [ '11', '17' ] + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: actions/setup-java@v2 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: gradle + - name: Build with Gradle + run: | + ./gradlew build diff --git a/.github/workflows/semgrep.yaml b/.github/workflows/semgrep.yaml new file mode 100644 index 0000000..66e24d3 --- /dev/null +++ b/.github/workflows/semgrep.yaml @@ -0,0 +1,17 @@ +name: Semgrep +on: + push: + branches: + - main +jobs: + semgrep: + name: Scan + runs-on: ubuntu-latest + container: + image: returntocorp/semgrep + if: (github.actor != 'dependabot[bot]' && github.actor != 'snyk-bot') + steps: + - uses: actions/checkout@v3 + - run: semgrep ci + env: + SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 0000000..f50ab21 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,8 @@ +**/ServerConfiguration.java +**/ServerVariable.java +src/main/AndroidManifest.xml +build.sbt +pom.xml +.github/workflows/maven.yml +git_push.sh +.travis.yml diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 0000000..503fc48 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,206 @@ +.fossa.yml +.github/CODEOWNERS +.github/ISSUE_TEMPLATE/bug_report.md +.github/ISSUE_TEMPLATE/feature_request.md +.github/workflows/main.yml +.github/workflows/semgrep.yaml +.gitignore +CHANGELOG.md +CONTRIBUTING.md +LICENSE +NOTICE.txt +README.md +VERSION.txt +api/openapi.yaml +build.gradle +docs/Any.md +docs/Assertion.md +docs/AuthorizationModel.md +docs/CheckRequest.md +docs/CheckResponse.md +docs/Computed.md +docs/ContextualTupleKeys.md +docs/CreateStoreRequest.md +docs/CreateStoreResponse.md +docs/Difference.md +docs/ErrorCode.md +docs/ExpandRequest.md +docs/ExpandResponse.md +docs/GetStoreResponse.md +docs/InternalErrorCode.md +docs/InternalErrorMessageResponse.md +docs/Leaf.md +docs/ListObjectsRequest.md +docs/ListObjectsResponse.md +docs/ListStoresResponse.md +docs/Metadata.md +docs/Node.md +docs/Nodes.md +docs/NotFoundErrorCode.md +docs/ObjectRelation.md +docs/OpenFgaApi.md +docs/PathUnknownErrorMessageResponse.md +docs/ReadAssertionsResponse.md +docs/ReadAuthorizationModelResponse.md +docs/ReadAuthorizationModelsResponse.md +docs/ReadChangesResponse.md +docs/ReadRequest.md +docs/ReadResponse.md +docs/RelationMetadata.md +docs/RelationReference.md +docs/Status.md +docs/Store.md +docs/Tuple.md +docs/TupleChange.md +docs/TupleKey.md +docs/TupleKeys.md +docs/TupleOperation.md +docs/TupleToUserset.md +docs/TypeDefinition.md +docs/Users.md +docs/Userset.md +docs/UsersetTree.md +docs/UsersetTreeDifference.md +docs/UsersetTreeTupleToUserset.md +docs/Usersets.md +docs/ValidationErrorMessageResponse.md +docs/WriteAssertionsRequest.md +docs/WriteAuthorizationModelRequest.md +docs/WriteAuthorizationModelResponse.md +docs/WriteRequest.md +gradle.properties +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +gradlew +gradlew.bat +settings.gradle +src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +src/main/java/dev/openfga/sdk/api/client/ApiBearerToken.java +src/main/java/dev/openfga/sdk/api/client/ApiClient.java +src/main/java/dev/openfga/sdk/api/client/ApiException.java +src/main/java/dev/openfga/sdk/api/client/ApiResponse.java +src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java +src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java +src/main/java/dev/openfga/sdk/api/client/Configuration.java +src/main/java/dev/openfga/sdk/api/client/Configuration.java +src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java +src/main/java/dev/openfga/sdk/api/client/JSON.java +src/main/java/dev/openfga/sdk/api/client/Pair.java +src/main/java/dev/openfga/sdk/api/client/RFC3339DateFormat.java +src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java +src/main/java/dev/openfga/sdk/api/model/Any.java +src/main/java/dev/openfga/sdk/api/model/Assertion.java +src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java +src/main/java/dev/openfga/sdk/api/model/CheckRequest.java +src/main/java/dev/openfga/sdk/api/model/CheckResponse.java +src/main/java/dev/openfga/sdk/api/model/Computed.java +src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java +src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java +src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java +src/main/java/dev/openfga/sdk/api/model/Difference.java +src/main/java/dev/openfga/sdk/api/model/ErrorCode.java +src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java +src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java +src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java +src/main/java/dev/openfga/sdk/api/model/InternalErrorCode.java +src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java +src/main/java/dev/openfga/sdk/api/model/Leaf.java +src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java +src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java +src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java +src/main/java/dev/openfga/sdk/api/model/Metadata.java +src/main/java/dev/openfga/sdk/api/model/Node.java +src/main/java/dev/openfga/sdk/api/model/Nodes.java +src/main/java/dev/openfga/sdk/api/model/NotFoundErrorCode.java +src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java +src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java +src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java +src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java +src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java +src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java +src/main/java/dev/openfga/sdk/api/model/ReadRequest.java +src/main/java/dev/openfga/sdk/api/model/ReadResponse.java +src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java +src/main/java/dev/openfga/sdk/api/model/RelationReference.java +src/main/java/dev/openfga/sdk/api/model/Status.java +src/main/java/dev/openfga/sdk/api/model/Store.java +src/main/java/dev/openfga/sdk/api/model/Tuple.java +src/main/java/dev/openfga/sdk/api/model/TupleChange.java +src/main/java/dev/openfga/sdk/api/model/TupleKey.java +src/main/java/dev/openfga/sdk/api/model/TupleKeys.java +src/main/java/dev/openfga/sdk/api/model/TupleOperation.java +src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java +src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java +src/main/java/dev/openfga/sdk/api/model/Users.java +src/main/java/dev/openfga/sdk/api/model/Userset.java +src/main/java/dev/openfga/sdk/api/model/UsersetTree.java +src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java +src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java +src/main/java/dev/openfga/sdk/api/model/Usersets.java +src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java +src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java +src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java +src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java +src/main/java/dev/openfga/sdk/api/model/WriteRequest.java +src/main/java/dev/openfga/sdk/errors/FgaInvalidParameterException.java +src/main/java/dev/openfga/util/StringUtil.java +src/test-integration/java/dev/openfga/sdk/api/OpenFgaApiIntegrationTest.java +src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java +src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java +src/test/java/dev/openfga/sdk/api/client/ClientCredentialsTest.java +src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java +src/test/java/dev/openfga/sdk/api/model/AnyTest.java +src/test/java/dev/openfga/sdk/api/model/AssertionTest.java +src/test/java/dev/openfga/sdk/api/model/AuthorizationModelTest.java +src/test/java/dev/openfga/sdk/api/model/CheckRequestTest.java +src/test/java/dev/openfga/sdk/api/model/CheckResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ComputedTest.java +src/test/java/dev/openfga/sdk/api/model/ContextualTupleKeysTest.java +src/test/java/dev/openfga/sdk/api/model/CreateStoreRequestTest.java +src/test/java/dev/openfga/sdk/api/model/CreateStoreResponseTest.java +src/test/java/dev/openfga/sdk/api/model/DifferenceTest.java +src/test/java/dev/openfga/sdk/api/model/ErrorCodeTest.java +src/test/java/dev/openfga/sdk/api/model/ExpandRequestTest.java +src/test/java/dev/openfga/sdk/api/model/ExpandResponseTest.java +src/test/java/dev/openfga/sdk/api/model/GetStoreResponseTest.java +src/test/java/dev/openfga/sdk/api/model/InternalErrorCodeTest.java +src/test/java/dev/openfga/sdk/api/model/InternalErrorMessageResponseTest.java +src/test/java/dev/openfga/sdk/api/model/LeafTest.java +src/test/java/dev/openfga/sdk/api/model/ListObjectsRequestTest.java +src/test/java/dev/openfga/sdk/api/model/ListObjectsResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ListStoresResponseTest.java +src/test/java/dev/openfga/sdk/api/model/MetadataTest.java +src/test/java/dev/openfga/sdk/api/model/NodeTest.java +src/test/java/dev/openfga/sdk/api/model/NodesTest.java +src/test/java/dev/openfga/sdk/api/model/NotFoundErrorCodeTest.java +src/test/java/dev/openfga/sdk/api/model/ObjectRelationTest.java +src/test/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ReadAssertionsResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ReadChangesResponseTest.java +src/test/java/dev/openfga/sdk/api/model/ReadRequestTest.java +src/test/java/dev/openfga/sdk/api/model/ReadResponseTest.java +src/test/java/dev/openfga/sdk/api/model/RelationMetadataTest.java +src/test/java/dev/openfga/sdk/api/model/RelationReferenceTest.java +src/test/java/dev/openfga/sdk/api/model/StatusTest.java +src/test/java/dev/openfga/sdk/api/model/StoreTest.java +src/test/java/dev/openfga/sdk/api/model/TupleChangeTest.java +src/test/java/dev/openfga/sdk/api/model/TupleKeyTest.java +src/test/java/dev/openfga/sdk/api/model/TupleKeysTest.java +src/test/java/dev/openfga/sdk/api/model/TupleOperationTest.java +src/test/java/dev/openfga/sdk/api/model/TupleTest.java +src/test/java/dev/openfga/sdk/api/model/TupleToUsersetTest.java +src/test/java/dev/openfga/sdk/api/model/TypeDefinitionTest.java +src/test/java/dev/openfga/sdk/api/model/UsersTest.java +src/test/java/dev/openfga/sdk/api/model/UsersetTest.java +src/test/java/dev/openfga/sdk/api/model/UsersetTreeDifferenceTest.java +src/test/java/dev/openfga/sdk/api/model/UsersetTreeTest.java +src/test/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUsersetTest.java +src/test/java/dev/openfga/sdk/api/model/UsersetsTest.java +src/test/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponseTest.java +src/test/java/dev/openfga/sdk/api/model/WriteAssertionsRequestTest.java +src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequestTest.java +src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponseTest.java +src/test/java/dev/openfga/sdk/api/model/WriteRequestTest.java +src/test/java/dev/openfga/util/StringUtilTest.java diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 0000000..c0be8a7 --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +6.4.0 \ No newline at end of file diff --git a/README.md b/README.md index 395c95d..5610756 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# .NET SDK for OpenFGA +# Java SDK for OpenFGA [![Release](https://img.shields.io/github/v/release/openfga/java-sdk?sort=semver&color=green)](https://github.com/openfga/java-sdk/releases) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenfga%2Fjava-sdk.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenfga%2Fjava-sdk?ref=badge_shield) -[![Discord Server](https://img.shields.io/discord/759188666072825867?color=7289da&logo=discord "Discord Server")](https://discord.com/channels/759188666072825867/930524706854031421) +[![Discord Server](https://img.shields.io/discord/759188666072825867?color=7289da&logo=discord "Discord Server")](https://discord.gg/8naAwJfWN6) [![Twitter](https://img.shields.io/twitter/follow/openfga?color=%23179CF0&logo=twitter&style=flat-square "@openfga on Twitter")](https://twitter.com/openfga) -This is an autogenerated SDK for OpenFGA. It provides a wrapper around the [OpenFGA API definition](https://openfga.dev/api). +This is an autogenerated java SDK for OpenFGA. It provides a wrapper around the [OpenFGA API definition](https://openfga.dev/api). ## Table of Contents @@ -65,28 +65,14 @@ OpenFGA is designed to make it easy for application builders to model their perm ## Installation + + ## Getting Started ### Initializing the API Client [Learn how to initialize your SDK](https://openfga.dev/docs/getting-started/setup-sdk-client) -> The SdkClient will by default retry API requests up to 15 times on 429 and 5xx errors. - -#### No Credentials - -```java -``` - -#### API Token - -```java -``` - -#### Client Credentials - -```java -``` ### Get your Store ID @@ -97,201 +83,16 @@ If your server is configured with [authentication enabled](https://openfga.dev/d ### Calling the API -#### Stores - -##### List Stores - -Get a paginated list of stores. - -[API Documentation](https://openfga.dev/api/service/docs/api#/Stores/ListStores) - -```java -``` - -##### Create Store - -Initialize a store. - -[API Documentation](https://openfga.dev/api/service/docs/api#/Stores/CreateStore) - -```java -``` - -##### Get Store - -Get information about the current store. - -[API Documentation](https://openfga.dev/api/service/docs/api#/Stores/GetStore) - -> Requires a client initialized with a storeId - -```java -``` - -##### Delete Store - -Delete a store. - -[API Documentation](https://openfga.dev/api/service/docs/api#/Stores/DeleteStore) - -> Requires a client initialized with a storeId - -```java -``` - -#### Authorization Models - -##### Read Authorization Models - -Read all authorization models in the store. - -[API Documentation](https://openfga.dev/api/service#/Authorization%20Models/ReadAuthorizationModels) - -```java -``` - -##### Write Authorization Model - -Create a new authorization model. - -[API Documentation](https://openfga.dev/api/service#/Authorization%20Models/WriteAuthorizationModel) - -> Note: To learn how to build your authorization model, check the Docs at https://openfga.dev/docs. - -> Learn more about [the OpenFGA configuration language](https://openfga.dev/docs/configuration-language). - -> You can use the [OpenFGA Syntax Transformer](https://github.com/openfga/syntax-transformer) to convert between the friendly DSL and the JSON authorization model. - -```java -``` - -#### Read a Single Authorization Model - -Read a particular authorization model. - -[API Documentation](https://openfga.dev/api/service#/Authorization%20Models/ReadAuthorizationModel) - -```java -``` - -##### Read the Latest Authorization Model - -Reads the latest authorization model (note: this ignores the model id in configuration). - -[API Documentation](https://openfga.dev/api/service#/Authorization%20Models/ReadAuthorizationModel) - -```java -``` - -#### Relationship Tuples -##### Read Relationship Tuple Changes (Watch) -Reads the list of historical relationship tuple writes and deletes. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Tuples/ReadChanges) - -```java -``` - -##### Read Relationship Tuples - -Reads the relationship tuples stored in the database. It does not evaluate nor exclude invalid tuples according to the authorization model. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Tuples/Read) - -```java -``` - -##### Write (Create and Delete) Relationship Tuples - -Create and/or delete relationship tuples to update the system state. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Tuples/Write) - -###### Transaction mode (default) - -By default, write runs in a transaction mode where any invalid operation (deleting a non-existing tuple, creating an existing tuple, one of the tuples was invalid) or a server error will fail the entire operation. - -```java -``` - -Convenience `WriteTuples` and `DeleteTuples` methods are also available. - -###### Non-transaction mode - -The SDK will split the writes into separate requests and send them sequentially to avoid violating rate limits. - -```java -``` - -#### Relationship Queries - -##### Check - -Check if a user has a particular relation with an object. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Queries/Check) - -```java -``` - -##### Batch Check - -Run a set of [checks](#check). Batch Check will return `allowed: false` if it encounters an error, and will return the error in the body. -If 429s or 5xxs are encountered, the underlying check will retry up to 15 times before giving up. - -```java -``` - -##### Expand - -Expands the relationships in userset tree format. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Queries/Expand) - -```java -``` - -#### List Objects - -List the objects of a particular type a user has access to. - -[API Documentation](https://openfga.dev/api/service#/Relationship%20Queries/ListObjects) - -```java -``` - -#### List Relations - -List the relations a user has on an object. - -```java -``` - -### Assertions - -#### Read Assertions - -Read assertions for a particular authorization model. - -[API Documentation](https://openfga.dev/api/service#/Assertions/Read%20Assertions) - -```java -``` - -#### Write Assertions +### API Endpoints -Update the assertions for a particular authorization model. -[API Documentation](https://openfga.dev/api/service#/Assertions/Write%20Assertions) -```java -``` +### Models -### API Endpoints +[Models](https://github.com/openfga/java-sdk/blob/main/apiModel.ts) -### Models ## Contributing @@ -311,4 +112,5 @@ All changes made to this repo will be overwritten on the next generation, so we This project is licensed under the Apache-2.0 license. See the [LICENSE](https://github.com/openfga/java-sdk/blob/main/LICENSE) file for more info. -The code in this repo was auto generated by [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) from a template based on the [java template](https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/Java), licensed under the [Apache License 2.0](https://github.com/OpenAPITools/openapi-generator/blob/master/LICENSE). \ No newline at end of file +The code in this repo was auto generated by [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) from a template based on the [Java template](https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/Java), licensed under the [Apache License 2.0](https://github.com/OpenAPITools/openapi-generator/blob/master/LICENSE). + diff --git a/VERSION.txt b/VERSION.txt new file mode 100644 index 0000000..8acdd82 --- /dev/null +++ b/VERSION.txt @@ -0,0 +1 @@ +0.0.1 diff --git a/api/openapi.yaml b/api/openapi.yaml new file mode 100644 index 0000000..8507247 --- /dev/null +++ b/api/openapi.yaml @@ -0,0 +1,1912 @@ +openapi: 3.0.1 +info: + contact: + email: community@openfga.dev + name: OpenFGA + url: https://openfga.dev + description: A high performance and flexible authorization/permission engine built + for developers and inspired by Google Zanzibar. + license: + name: Apache-2.0 + url: https://github.com/openfga/openfga/blob/main/LICENSE + title: OpenFGA + version: "0.1" +servers: +- url: / +tags: +- name: OpenFga +paths: + /stores: + get: + description: | + Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. + The continuation token will be empty if there are no more stores. + operationId: ListStores + parameters: + - in: query + name: page_size + schema: + format: int32 + type: integer + - in: query + name: continuation_token + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ListStoresResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: List all stores + tags: + - OpenFga + x-accepts: application/json + post: + description: Create a unique OpenFGA store which will be used to store authorization + models and relationship tuples. + operationId: CreateStore + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateStoreRequest' + required: true + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/CreateStoreResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Create a store + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}: + delete: + description: "Delete an OpenFGA store. This does not delete the data associated\ + \ with the store, like tuples or authorization models." + operationId: DeleteStore + parameters: + - in: path + name: store_id + required: true + schema: + type: string + responses: + "204": + content: {} + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Delete a store + tags: + - OpenFga + x-accepts: application/json + get: + description: Returns an OpenFGA store by its identifier + operationId: GetStore + parameters: + - in: path + name: store_id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/GetStoreResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Get a store + tags: + - OpenFga + x-accepts: application/json + /stores/{store_id}/assertions/{authorization_model_id}: + get: + description: "The ReadAssertions API will return, for a given authorization\ + \ model id, all the assertions stored for it. An assertion is an object that\ + \ contains a tuple key, and the expectation of whether a call to the Check\ + \ API of that tuple key will return true or false. " + operationId: ReadAssertions + parameters: + - in: path + name: store_id + required: true + schema: + type: string + - in: path + name: authorization_model_id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ReadAssertionsResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Read assertions for an authorization model ID + tags: + - OpenFga + x-accepts: application/json + put: + description: "The WriteAssertions API will upsert new assertions for an authorization\ + \ model id, or overwrite the existing ones. An assertion is an object that\ + \ contains a tuple key, and the expectation of whether a call to the Check\ + \ API of that tuple key will return true or false. " + operationId: WriteAssertions + parameters: + - in: path + name: store_id + required: true + schema: + type: string + - in: path + name: authorization_model_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WriteAssertions_request' + required: true + responses: + "204": + content: {} + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Upsert assertions for an authorization model ID + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/authorization-models: + get: + description: | + The ReadAuthorizationModels API will return all the authorization models for a certain store. + OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. + + ## Example + Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: + ```json + { + "authorization_models": [ + { + "id": "01G50QVV17PECNVAHX1GG4Y5NC", + "type_definitions": [...] + }, + { + "id": "01G4ZW8F4A07AKQ8RHSVG9RW04", + "type_definitions": [...] + }, + ], + "continuation_token": "eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==" + } + ``` + If there are no more authorization models available, the `continuation_token` field will be empty + ```json + { + "authorization_models": [ + { + "id": "01G50QVV17PECNVAHX1GG4Y5NC", + "type_definitions": [...] + }, + { + "id": "01G4ZW8F4A07AKQ8RHSVG9RW04", + "type_definitions": [...] + }, + ], + "continuation_token": "" + } + ``` + operationId: ReadAuthorizationModels + parameters: + - in: path + name: store_id + required: true + schema: + type: string + - in: query + name: page_size + schema: + format: int32 + type: integer + - in: query + name: continuation_token + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ReadAuthorizationModelsResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Return all the authorization models for a particular store + tags: + - OpenFga + x-accepts: application/json + post: + description: "The WriteAuthorizationModel API will add a new authorization model\ + \ to a store.\nEach item in the `type_definitions` array is a type definition\ + \ as specified in the field `type_definition`.\nThe response will return the\ + \ authorization model's ID in the `id` field.\n\n## Example\nTo add an authorization\ + \ model with `user` and `document` type definitions, call POST authorization-models\ + \ API with the body: \n```json\n{\n \"type_definitions\":[\n {\n \ + \ \"type\":\"user\"\n },\n {\n \"type\":\"document\",\n \"\ + relations\":{\n \"reader\":{\n \"union\":{\n \"\ + child\":[\n {\n \"this\":{}\n },\n\ + \ {\n \"computedUserset\":{\n \ + \ \"object\":\"\",\n \"relation\":\"writer\"\n \ + \ }\n }\n ]\n }\n },\n \ + \ \"writer\":{\n \"this\":{}\n }\n }\n }\n ]\n\ + }\n```\nOpenFGA's response will include the version id for this authorization\ + \ model, which will look like \n```\n{\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"\ + }\n```\n" + operationId: WriteAuthorizationModel + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WriteAuthorizationModel_request' + required: true + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/WriteAuthorizationModelResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Create a new authorization model + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/authorization-models/{id}: + get: + description: |- + The ReadAuthorizationModel API returns an authorization model by its identifier. + The response will return the authorization model for the particular version. + + ## Example + To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: + ```json + { + "authorization_model":{ + "id":"01G5JAVJ41T49E9TT3SKVS7X1J", + "type_definitions":[ + { + "type":"user" + }, + { + "type":"document", + "relations":{ + "reader":{ + "union":{ + "child":[ + { + "this":{} + }, + { + "computedUserset":{ + "object":"", + "relation":"writer" + } + } + ] + } + }, + "writer":{ + "this":{} + } + } + } + ] + } + } + ``` + In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + operationId: ReadAuthorizationModel + parameters: + - in: path + name: store_id + required: true + schema: + type: string + - in: path + name: id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ReadAuthorizationModelResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Return a particular version of an authorization model + tags: + - OpenFga + x-accepts: application/json + /stores/{store_id}/changes: + get: + description: | + The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. + You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + operationId: ReadChanges + parameters: + - in: path + name: store_id + required: true + schema: + type: string + - in: query + name: type + schema: + type: string + - in: query + name: page_size + schema: + format: int32 + type: integer + - in: query + name: continuation_token + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ReadChangesResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Return a list of all the tuple changes + tags: + - OpenFga + x-accepts: application/json + /stores/{store_id}/check: + post: + description: |- + The Check API queries to check if the user has a certain relationship with an object in a certain store. + A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. + You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. + The response will return whether the relationship exists in the field `allowed`. + + ## Example + In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple + ```json + { + "user": "user:anne", + "relation": "member", + "object": "time_slot:office_hours" + } + ``` + the Check API can be used with the following request body: + ```json + { + "tuple_key": { + "user": "user:anne", + "relation": "reader", + "object": "document:2021-budget" + }, + "contextual_tuples": { + "tuple_keys": [ + { + "user": "user:anne", + "relation": "member", + "object": "time_slot:office_hours" + } + ] + }, + "authorization_model_id": "01G50QVV17PECNVAHX1GG4Y5NC" + } + ``` + OpenFGA's response will include `{ "allowed": true }` if there is a relationship and `{ "allowed": false }` if there isn't. + operationId: Check + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Check_request' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/CheckResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Check whether a user is authorized to access an object + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/expand: + post: + description: |- + The Expand API will return all users and usersets that have certain relationship with an object in a certain store. + This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. + Body parameters `tuple_key.object` and `tuple_key.relation` are all required. + The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. + + ## Example + To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body + ```json + { + "tuple_key": { + "object": "document:2021-budget", + "relation": "reader" + }, + "authorization_model_id": "01G50QVV17PECNVAHX1GG4Y5NC" + } + ``` + OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. + ```json + { + "tree":{ + "root":{ + "type":"document:2021-budget#reader", + "union":{ + "nodes":[ + { + "type":"document:2021-budget#reader", + "leaf":{ + "users":{ + "users":[ + "user:bob" + ] + } + } + }, + { + "type":"document:2021-budget#reader", + "leaf":{ + "computed":{ + "userset":"document:2021-budget#writer" + } + } + } + ] + } + } + } + } + ``` + The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + operationId: Expand + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Expand_request' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ExpandResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: "Expand all relationships in userset tree format, and following userset\ + \ rewrite rules. Useful to reason about and debug a certain relationship" + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/list-objects: + post: + description: |- + The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. + An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. + You may also specify `contextual_tuples` that will be treated as regular tuples. + The response will contain the related objects in an array in the "objects" field of the response and they will be strings in the object format `:` (e.g. "document:roadmap"). + The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + operationId: ListObjects + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ListObjects_request' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ListObjectsResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: List all objects of the given type that the user has a relation with + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/read: + post: + description: "The Read API will return the tuples for a certain store that match\ + \ a query filter specified in the body of the request. It is different from\ + \ the `/stores/{store_id}/expand` API in that it only returns relationship\ + \ tuples that are stored in the system and satisfy the query. \nIn the body:\n\ + 1. `tuple_key` is optional. If not specified, it will return all tuples in\ + \ the store.\n2. `tuple_key.object` is mandatory if `tuple_key` is specified.\ + \ It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`).\n\ + 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the\ + \ `tuple_key.object` is a type only.\n## Examples\n### Query for all objects\ + \ in a type definition\nTo query for all objects that `user:bob` has `reader`\ + \ relationship in the `document` type definition, call read API with body\ + \ of\n```json\n{\n \"tuple_key\": {\n \"user\": \"user:bob\",\n \"\ + relation\": \"reader\",\n \"object\": \"document:\"\n }\n}\n```\nThe\ + \ API will return tuples and a continuation token, something like\n```json\n\ + {\n \"tuples\": [\n {\n \"key\": {\n \"user\": \"user:bob\"\ + ,\n \"relation\": \"reader\",\n \"object\": \"document:2021-budget\"\ + \n },\n \"timestamp\": \"2021-10-06T15:32:11.128Z\"\n }\n ],\n\ + \ \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\ + \n}\n```\nThis means that `user:bob` has a `reader` relationship with 1 document\ + \ `document:2021-budget`. Note that this API, unlike the List Objects API,\ + \ does not evaluate the tuples in the store.\nThe continuation token will\ + \ be empty if there are no more tuples to query.### Query for all stored relationship\ + \ tuples that have a particular relation and object\nTo query for all users\ + \ that have `reader` relationship with `document:2021-budget`, call read API\ + \ with body of \n```json\n{\n \"tuple_key\": {\n \"object\": \"document:2021-budget\"\ + ,\n \"relation\": \"reader\"\n }\n}\n```\nThe API will return something\ + \ like \n```json\n{\n \"tuples\": [\n {\n \"key\": {\n \"\ + user\": \"user:bob\",\n \"relation\": \"reader\",\n \"object\"\ + : \"document:2021-budget\"\n },\n \"timestamp\": \"2021-10-06T15:32:11.128Z\"\ + \n }\n ],\n \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\ + \n}\n```\nThis means that `document:2021-budget` has 1 `reader` (`user:bob`).\ + \ Note that, even if the model said that all `writers` are also `readers`,\ + \ the API will not return writers such as `user:anne` because it only returns\ + \ tuples and does not evaluate them.\n### Query for all users with all relationships\ + \ for a particular document\nTo query for all users that have any relationship\ + \ with `document:2021-budget`, call read API with body of \n```json\n{\n \ + \ \"tuple_key\": {\n \"object\": \"document:2021-budget\"\n }\n}\n\ + ```\nThe API will return something like \n```json\n{\n \"tuples\": [\n \ + \ {\n \"key\": {\n \"user\": \"user:anne\",\n \"relation\"\ + : \"writer\",\n \"object\": \"document:2021-budget\"\n },\n \ + \ \"timestamp\": \"2021-10-05T13:42:12.356Z\"\n },\n {\n \"\ + key\": {\n \"user\": \"user:bob\",\n \"relation\": \"reader\"\ + ,\n \"object\": \"document:2021-budget\"\n },\n \"timestamp\"\ + : \"2021-10-06T15:32:11.128Z\"\n }\n ],\n \"continuation_token\": \"\ + eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\ + \n}\n```\nThis means that `document:2021-budget` has 1 `reader` (`user:bob`)\ + \ and 1 `writer` (`user:anne`).\n" + operationId: Read + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Read_request' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ReadResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: "Get tuples from the store that matches a query, without following\ + \ userset rewrite rules" + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json + /stores/{store_id}/write: + post: + description: "The Write API will update the tuples for a certain store. Tuples\ + \ and type definitions allow OpenFGA to determine whether a relationship exists\ + \ between an object and an user.\nIn the body, `writes` adds new tuples while\ + \ `deletes` removes existing tuples. The API is not idempotent: if, later\ + \ on, you try to add the same tuple, or if you try to delete a non-existing\ + \ tuple, it will throw an error.\nAn `authorization_model_id` may be specified\ + \ in the body. If it is, it will be used to assert that each written tuple\ + \ (not deleted) is valid for the model specified. If it is not specified,\ + \ the latest authorization model ID will be used.\n## Example\n### Adding\ + \ relationships\nTo add `user:anne` as a `writer` for `document:2021-budget`,\ + \ call write API with the following \n```json\n{\n \"writes\": {\n \"\ + tuple_keys\": [\n {\n \"user\": \"user:anne\",\n \"relation\"\ + : \"writer\",\n \"object\": \"document:2021-budget\"\n }\n \ + \ ]\n },\n \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"\n\ + }\n```\n### Removing relationships\nTo remove `user:bob` as a `reader` for\ + \ `document:2021-budget`, call write API with the following \n```json\n{\n\ + \ \"deletes\": {\n \"tuple_keys\": [\n {\n \"user\": \"user:bob\"\ + ,\n \"relation\": \"reader\",\n \"object\": \"document:2021-budget\"\ + \n }\n ]\n }\n}\n```\n" + operationId: Write + parameters: + - in: path + name: store_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Write_request' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/WriteResponse' + description: A successful response. + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationErrorMessageResponse' + description: Request failed due to invalid input. + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/PathUnknownErrorMessageResponse' + description: Request failed due to incorrect path. + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/InternalErrorMessageResponse' + description: Request failed due to internal server error. + summary: Add or delete tuples from the store + tags: + - OpenFga + x-codegen-request-body-name: body + x-content-type: application/json + x-accepts: application/json +components: + schemas: + Any: + additionalProperties: + type: object + properties: + '@type': + type: string + type: object + Assertion: + example: + tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + expectation: true + properties: + tuple_key: + $ref: '#/components/schemas/TupleKey' + expectation: + type: boolean + required: + - expectation + - tuple_key + type: object + AuthorizationModel: + example: + schema_version: schema_version + type_definitions: + - type: user + - type: document + relations: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + metadata: + relations: + reader: + directly_related_user_types: + - type: user + writer: + directly_related_user_types: + - type: user + id: 01G5JAVJ41T49E9TT3SKVS7X1J + properties: + id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + schema_version: + type: string + type_definitions: + example: + - type: user + - type: document + relations: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + metadata: + relations: + reader: + directly_related_user_types: + - type: user + writer: + directly_related_user_types: + - type: user + items: + $ref: '#/components/schemas/TypeDefinition' + type: array + required: + - schema_version + type: object + CheckResponse: + example: + allowed: true + resolution: resolution + properties: + allowed: + example: true + type: boolean + resolution: + description: For internal use only. + type: string + type: object + Computed: + example: + userset: userset + properties: + userset: + type: string + type: object + ContextualTupleKeys: + properties: + tuple_keys: + items: + $ref: '#/components/schemas/TupleKey' + type: array + required: + - tuple_keys + type: object + CreateStoreRequest: + example: + name: my-store-name + properties: + name: + example: my-store-name + type: string + required: + - name + type: object + CreateStoreResponse: + example: + updated_at: 2000-01-23T04:56:07.000+00:00 + name: name + created_at: 2000-01-23T04:56:07.000+00:00 + id: 01YCP46JKYM8FJCQ37NMBYHE5X + properties: + id: + example: 01YCP46JKYM8FJCQ37NMBYHE5X + type: string + name: + type: string + created_at: + format: date-time + type: string + updated_at: + format: date-time + type: string + type: object + DeleteStoreResponse: + type: object + DirectUserset: + description: |- + A DirectUserset is a sentinel message for referencing + the direct members specified by an object/relation mapping. + type: object + ErrorCode: + default: no_error + enum: + - no_error + - validation_error + - authorization_model_not_found + - authorization_model_resolution_too_complex + - invalid_write_input + - cannot_allow_duplicate_tuples_in_one_request + - cannot_allow_duplicate_types_in_one_request + - cannot_allow_multiple_references_to_one_relation + - invalid_continuation_token + - invalid_tuple_set + - invalid_check_input + - invalid_expand_input + - unsupported_user_set + - invalid_object_format + - write_failed_due_to_invalid_input + - authorization_model_assertions_not_found + - latest_authorization_model_not_found + - type_not_found + - relation_not_found + - empty_relation_definition + - invalid_user + - invalid_tuple + - unknown_relation + - store_id_invalid_length + - assertions_too_many_items + - id_too_long + - authorization_model_id_too_long + - tuple_key_value_not_specified + - tuple_keys_too_many_or_too_few_items + - page_size_invalid + - param_missing_value + - difference_base_missing_value + - subtract_base_missing_value + - object_too_long + - relation_too_long + - type_definitions_too_few_items + - type_invalid_length + - type_invalid_pattern + - relations_too_few_items + - relations_too_long + - relations_invalid_pattern + - object_invalid_pattern + - query_string_type_continuation_token_mismatch + - exceeded_entity_limit + - invalid_contextual_tuple + - duplicate_contextual_tuple + - invalid_authorization_model + - unsupported_schema_version + type: string + ExpandResponse: + example: + tree: + root: + intersection: + nodes: + - null + - null + name: name + difference: + subtract: null + base: null + union: + nodes: + - null + - null + leaf: + computed: + userset: userset + tupleToUserset: + computed: + - userset: userset + - userset: userset + tupleset: tupleset + users: + users: + - users + - users + properties: + tree: + $ref: '#/components/schemas/UsersetTree' + type: object + GetStoreResponse: + example: + updated_at: 2000-01-23T04:56:07.000+00:00 + name: name + created_at: 2000-01-23T04:56:07.000+00:00 + id: 01YCP46JKYM8FJCQ37NMBYHE5X + properties: + id: + example: 01YCP46JKYM8FJCQ37NMBYHE5X + type: string + name: + type: string + created_at: + format: date-time + type: string + updated_at: + format: date-time + type: string + type: object + InternalErrorCode: + default: no_internal_error + enum: + - no_internal_error + - internal_error + - cancelled + - deadline_exceeded + - already_exists + - resource_exhausted + - failed_precondition + - aborted + - out_of_range + - unavailable + - data_loss + type: string + InternalErrorMessageResponse: + example: + code: internal_error + message: Internal Server Error + properties: + code: + $ref: '#/components/schemas/InternalErrorCode' + message: + type: string + type: object + Leaf: + description: |- + A leaf node contains either + - a set of users (which may be individual users, or usersets + referencing other relations) + - a computed node, which is the result of a computed userset + value in the authorization model + - a tupleToUserset nodes, containing the result of expanding + a tupleToUserset value in a authorization model. + example: + computed: + userset: userset + tupleToUserset: + computed: + - userset: userset + - userset: userset + tupleset: tupleset + users: + users: + - users + - users + properties: + users: + $ref: '#/components/schemas/Users' + computed: + $ref: '#/components/schemas/Computed' + tupleToUserset: + $ref: '#/components/schemas/UsersetTree.TupleToUserset' + type: object + ListObjectsResponse: + example: + objects: + - document:roadmap + - document:planning + properties: + objects: + example: + - document:roadmap + - document:planning + items: + type: string + type: array + type: object + ListStoresResponse: + example: + continuation_token: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + stores: + - updated_at: 2000-01-23T04:56:07.000+00:00 + name: name + created_at: 2000-01-23T04:56:07.000+00:00 + id: id + deleted_at: 2000-01-23T04:56:07.000+00:00 + - updated_at: 2000-01-23T04:56:07.000+00:00 + name: name + created_at: 2000-01-23T04:56:07.000+00:00 + id: id + deleted_at: 2000-01-23T04:56:07.000+00:00 + properties: + stores: + items: + $ref: '#/components/schemas/Store' + type: array + continuation_token: + description: The continuation token will be empty if there are no more stores. + example: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + type: string + type: object + Metadata: + properties: + relations: + additionalProperties: + $ref: '#/components/schemas/RelationMetadata' + type: object + type: object + Node: + example: + intersection: + nodes: + - null + - null + name: name + difference: + subtract: null + base: null + union: + nodes: + - null + - null + leaf: + computed: + userset: userset + tupleToUserset: + computed: + - userset: userset + - userset: userset + tupleset: tupleset + users: + users: + - users + - users + properties: + name: + type: string + leaf: + $ref: '#/components/schemas/Leaf' + difference: + $ref: '#/components/schemas/UsersetTree.Difference' + union: + $ref: '#/components/schemas/Nodes' + intersection: + $ref: '#/components/schemas/Nodes' + type: object + Nodes: + example: + nodes: + - null + - null + properties: + nodes: + items: + $ref: '#/components/schemas/Node' + type: array + type: object + NotFoundErrorCode: + default: no_not_found_error + enum: + - no_not_found_error + - undefined_endpoint + - store_id_not_found + - unimplemented + type: string + ObjectRelation: + properties: + object: + type: string + relation: + type: string + type: object + PathUnknownErrorMessageResponse: + example: + code: undefined_endpoint + message: Endpoint not enabled + properties: + code: + $ref: '#/components/schemas/NotFoundErrorCode' + message: + type: string + type: object + ReadAssertionsResponse: + example: + assertions: + - tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + expectation: true + - tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + expectation: true + authorization_model_id: 01G5JAVJ41T49E9TT3SKVS7X1J + properties: + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + assertions: + items: + $ref: '#/components/schemas/Assertion' + type: array + type: object + ReadAuthorizationModelResponse: + example: + authorization_model: + schema_version: schema_version + type_definitions: + - type: user + - type: document + relations: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + metadata: + relations: + reader: + directly_related_user_types: + - type: user + writer: + directly_related_user_types: + - type: user + id: 01G5JAVJ41T49E9TT3SKVS7X1J + properties: + authorization_model: + $ref: '#/components/schemas/AuthorizationModel' + type: object + ReadAuthorizationModelsResponse: + example: + continuation_token: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + authorization_models: + - schema_version: schema_version + type_definitions: + - type: user + - type: document + relations: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + metadata: + relations: + reader: + directly_related_user_types: + - type: user + writer: + directly_related_user_types: + - type: user + id: 01G5JAVJ41T49E9TT3SKVS7X1J + - schema_version: schema_version + type_definitions: + - type: user + - type: document + relations: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + metadata: + relations: + reader: + directly_related_user_types: + - type: user + writer: + directly_related_user_types: + - type: user + id: 01G5JAVJ41T49E9TT3SKVS7X1J + properties: + authorization_models: + items: + $ref: '#/components/schemas/AuthorizationModel' + type: array + continuation_token: + description: The continuation token will be empty if there are no more models. + example: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + type: string + type: object + ReadChangesResponse: + example: + continuation_token: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + changes: + - tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + operation: null + timestamp: 2000-01-23T04:56:07.000+00:00 + - tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + operation: null + timestamp: 2000-01-23T04:56:07.000+00:00 + properties: + changes: + items: + $ref: '#/components/schemas/TupleChange' + type: array + continuation_token: + description: The continuation token will be identical if there are no new + changes. + example: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + type: string + type: object + ReadResponse: + example: + continuation_token: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + tuples: + - key: + user: user:anne + object: document:2021-budget + relation: reader + timestamp: 2000-01-23T04:56:07.000+00:00 + - key: + user: user:anne + object: document:2021-budget + relation: reader + timestamp: 2000-01-23T04:56:07.000+00:00 + properties: + tuples: + items: + $ref: '#/components/schemas/Tuple' + type: array + continuation_token: + description: The continuation token will be empty if there are no more tuples. + example: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + type: string + type: object + RelationMetadata: + properties: + directly_related_user_types: + items: + $ref: '#/components/schemas/RelationReference' + type: array + type: object + RelationReference: + description: RelationReference represents a relation of a particular object + type (e.g. 'document#viewer'). + properties: + type: + example: group + type: string + relation: + example: member + type: string + wildcard: + type: object + required: + - type + type: object + Status: + properties: + code: + format: int32 + type: integer + message: + type: string + details: + items: + $ref: '#/components/schemas/Any' + type: array + type: object + Store: + example: + updated_at: 2000-01-23T04:56:07.000+00:00 + name: name + created_at: 2000-01-23T04:56:07.000+00:00 + id: id + deleted_at: 2000-01-23T04:56:07.000+00:00 + properties: + id: + type: string + name: + type: string + created_at: + format: date-time + type: string + updated_at: + format: date-time + type: string + deleted_at: + format: date-time + type: string + type: object + Tuple: + example: + key: + user: user:anne + object: document:2021-budget + relation: reader + timestamp: 2000-01-23T04:56:07.000+00:00 + properties: + key: + $ref: '#/components/schemas/TupleKey' + timestamp: + format: date-time + type: string + type: object + TupleChange: + example: + tuple_key: + user: user:anne + object: document:2021-budget + relation: reader + operation: null + timestamp: 2000-01-23T04:56:07.000+00:00 + properties: + tuple_key: + $ref: '#/components/schemas/TupleKey' + operation: + $ref: '#/components/schemas/TupleOperation' + timestamp: + format: date-time + type: string + type: object + TupleKey: + example: + user: user:anne + object: document:2021-budget + relation: reader + properties: + object: + example: document:2021-budget + maxLength: 256 + type: string + relation: + example: reader + maxLength: 50 + type: string + user: + example: user:anne + maxLength: 512 + type: string + type: object + TupleKeys: + properties: + tuple_keys: + items: + $ref: '#/components/schemas/TupleKey' + type: array + required: + - tuple_keys + type: object + TupleOperation: + default: TUPLE_OPERATION_WRITE + enum: + - TUPLE_OPERATION_WRITE + - TUPLE_OPERATION_DELETE + title: buf:lint:ignore ENUM_ZERO_VALUE_SUFFIX + type: string + TypeDefinition: + properties: + type: + example: document + type: string + relations: + additionalProperties: + $ref: '#/components/schemas/Userset' + example: + reader: + union: + child: + - this: {} + - computedUserset: + object: "" + relation: writer + writer: + this: {} + type: object + metadata: + $ref: '#/components/schemas/Metadata' + required: + - type + type: object + Users: + example: + users: + - users + - users + properties: + users: + items: + type: string + type: array + type: object + Userset: + properties: + this: + description: |- + A DirectUserset is a sentinel message for referencing + the direct members specified by an object/relation mapping. + type: object + computedUserset: + $ref: '#/components/schemas/ObjectRelation' + tupleToUserset: + $ref: '#/components/schemas/TupleToUserset' + union: + $ref: '#/components/schemas/Usersets' + intersection: + $ref: '#/components/schemas/Usersets' + difference: + $ref: '#/components/schemas/Difference' + type: object + UsersetTree: + description: A UsersetTree contains the result of an Expansion. + example: + root: + intersection: + nodes: + - null + - null + name: name + difference: + subtract: null + base: null + union: + nodes: + - null + - null + leaf: + computed: + userset: userset + tupleToUserset: + computed: + - userset: userset + - userset: userset + tupleset: tupleset + users: + users: + - users + - users + properties: + root: + $ref: '#/components/schemas/Node' + type: object + UsersetTree.Difference: + example: + subtract: null + base: null + properties: + base: + $ref: '#/components/schemas/Node' + subtract: + $ref: '#/components/schemas/Node' + type: object + UsersetTree.TupleToUserset: + example: + computed: + - userset: userset + - userset: userset + tupleset: tupleset + properties: + tupleset: + type: string + computed: + items: + $ref: '#/components/schemas/Computed' + type: array + type: object + Usersets: + properties: + child: + items: + $ref: '#/components/schemas/Userset' + type: array + type: object + ValidationErrorMessageResponse: + example: + code: validation_error + message: Generic validation error + properties: + code: + $ref: '#/components/schemas/ErrorCode' + message: + type: string + type: object + Wildcard: + type: object + WriteAssertionsResponse: + type: object + WriteAuthorizationModelResponse: + example: + authorization_model_id: 01G5JAVJ41T49E9TT3SKVS7X1J + properties: + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + type: object + WriteResponse: + type: object + Difference: + properties: + base: + $ref: '#/components/schemas/Userset' + subtract: + $ref: '#/components/schemas/Userset' + required: + - base + - subtract + type: object + TupleToUserset: + properties: + tupleset: + $ref: '#/components/schemas/ObjectRelation' + computedUserset: + $ref: '#/components/schemas/ObjectRelation' + type: object + WriteAssertions_request: + properties: + assertions: + items: + $ref: '#/components/schemas/Assertion' + type: array + required: + - assertions + type: object + WriteAuthorizationModel_request: + properties: + type_definitions: + items: + $ref: '#/components/schemas/TypeDefinition' + type: array + schema_version: + type: string + required: + - type_definitions + type: object + Check_request: + properties: + tuple_key: + $ref: '#/components/schemas/TupleKey' + contextual_tuples: + $ref: '#/components/schemas/ContextualTupleKeys' + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + trace: + description: Defaults to false. Making it true has performance implications. + example: false + readOnly: true + type: boolean + required: + - tuple_key + type: object + Expand_request: + properties: + tuple_key: + $ref: '#/components/schemas/TupleKey' + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + required: + - tuple_key + type: object + ListObjects_request: + properties: + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + type: + example: document + type: string + relation: + example: reader + type: string + user: + example: user:anne + maxLength: 512 + minLength: 1 + type: string + contextual_tuples: + $ref: '#/components/schemas/ContextualTupleKeys' + required: + - relation + - type + - user + type: object + Read_request: + properties: + tuple_key: + $ref: '#/components/schemas/TupleKey' + page_size: + example: 50 + format: int32 + type: integer + continuation_token: + example: eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ== + type: string + type: object + Write_request: + properties: + writes: + $ref: '#/components/schemas/TupleKeys' + deletes: + $ref: '#/components/schemas/TupleKeys' + authorization_model_id: + example: 01G5JAVJ41T49E9TT3SKVS7X1J + type: string + type: object +x-original-swagger-version: "2.0" + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..9da6117 --- /dev/null +++ b/build.gradle @@ -0,0 +1,121 @@ +plugins { + id 'java' + id 'jvm-test-suite' + id 'maven-publish' + id 'idea' + id 'eclipse' + id 'com.diffplug.spotless' version '6.20.0' +} + +group = 'dev.openfga' +version = '0.1' + +repositories { + mavenCentral() +} + +publishing { + publications { + maven(MavenPublication) { + artifactId = 'openfga-sdk' + from components.java + } + } +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + + withJavadocJar() + withSourcesJar() +} + +javadoc { + // Ignore warnings. + options.addStringOption('Xdoclint:none', '-quiet') +} + +ext { + jackson_version = "2.14.1" + jakarta_annotation_version = "1.3.5" + junit_version = "5.7.1" +} + +dependencies { + implementation "com.google.code.findbugs:jsr305:3.0.2" + implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version" + implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version" + implementation "org.openapitools:jackson-databind-nullable:0.2.1" + implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" +} + +testing { + suites { + test { + useJUnitJupiter() + + dependencies { + implementation project() + implementation "org.junit.jupiter:junit-jupiter:$junit_version" + implementation "org.mockito:mockito-core:3.+" + runtimeOnly "org.junit.platform:junit-platform-launcher" + + // This test-only dependency is convenient but not widely used. + // Review project activity before updating the version here. + // See also: https://github.com/PGSSoft/HttpClientMock/issues/3 + implementation "com.pgs-soft:HttpClientMock:1.0.0" + } + } + integration(JvmTestSuite) { + testType = TestSuiteType.INTEGRATION_TEST + useJUnitJupiter() + + dependencies { + implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version" + implementation project() + } + + sources { + java { + srcDirs = ['src/test-integration/java'] + } + } + } + } +} + +// Use spotless plugin to automatically format code, remove unused import, etc +// To apply changes directly to the file, run `gradlew spotlessApply` +// Ref: https://github.com/diffplug/spotless/tree/main/plugin-gradle +spotless { + // comment out below to run spotless as part of the `check` task + enforceCheck false + format 'misc', { + // define the files (e.g. '*.gradle', '*.md') to apply `misc` to + target '.gitignore' + // define the steps to apply to those files + trimTrailingWhitespace() + indentWithSpaces() // Takes an integer argument if you don't like 4 + endWithNewline() + } + java { + palantirJavaFormat() + removeUnusedImports() + importOrder() + } +} + +// Use spotless plugin to automatically format code, remove unused import, etc +// To apply changes directly to the file, run `gradlew spotlessApply` +// Ref: https://github.com/diffplug/spotless/tree/main/plugin-gradle +tasks.register('fmt') { + dependsOn 'spotlessApply' +} + +tasks.register('test-integration') { + dependsOn testing.suites.integration +} diff --git a/docs/Any.md b/docs/Any.md new file mode 100644 index 0000000..4d330a7 --- /dev/null +++ b/docs/Any.md @@ -0,0 +1,13 @@ + + +# Any + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**atType** | **String** | | [optional] | + + + diff --git a/docs/Assertion.md b/docs/Assertion.md new file mode 100644 index 0000000..3b41516 --- /dev/null +++ b/docs/Assertion.md @@ -0,0 +1,14 @@ + + +# Assertion + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKey** | [**TupleKey**](TupleKey.md) | | | +|**expectation** | **Boolean** | | | + + + diff --git a/docs/AuthorizationModel.md b/docs/AuthorizationModel.md new file mode 100644 index 0000000..88ffd2b --- /dev/null +++ b/docs/AuthorizationModel.md @@ -0,0 +1,15 @@ + + +# AuthorizationModel + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **String** | | [optional] | +|**schemaVersion** | **String** | | | +|**typeDefinitions** | [**List<TypeDefinition>**](TypeDefinition.md) | | [optional] | + + + diff --git a/docs/CheckRequest.md b/docs/CheckRequest.md new file mode 100644 index 0000000..bdce51d --- /dev/null +++ b/docs/CheckRequest.md @@ -0,0 +1,16 @@ + + +# CheckRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKey** | [**TupleKey**](TupleKey.md) | | | +|**contextualTuples** | [**ContextualTupleKeys**](ContextualTupleKeys.md) | | [optional] | +|**authorizationModelId** | **String** | | [optional] | +|**trace** | **Boolean** | Defaults to false. Making it true has performance implications. | [optional] [readonly] | + + + diff --git a/docs/CheckResponse.md b/docs/CheckResponse.md new file mode 100644 index 0000000..c9434da --- /dev/null +++ b/docs/CheckResponse.md @@ -0,0 +1,14 @@ + + +# CheckResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**allowed** | **Boolean** | | [optional] | +|**resolution** | **String** | For internal use only. | [optional] | + + + diff --git a/docs/Computed.md b/docs/Computed.md new file mode 100644 index 0000000..5d388e9 --- /dev/null +++ b/docs/Computed.md @@ -0,0 +1,13 @@ + + +# Computed + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**userset** | **String** | | [optional] | + + + diff --git a/docs/ContextualTupleKeys.md b/docs/ContextualTupleKeys.md new file mode 100644 index 0000000..0935cfa --- /dev/null +++ b/docs/ContextualTupleKeys.md @@ -0,0 +1,13 @@ + + +# ContextualTupleKeys + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKeys** | [**List<TupleKey>**](TupleKey.md) | | | + + + diff --git a/docs/CreateStoreRequest.md b/docs/CreateStoreRequest.md new file mode 100644 index 0000000..8ae7b55 --- /dev/null +++ b/docs/CreateStoreRequest.md @@ -0,0 +1,13 @@ + + +# CreateStoreRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | | | + + + diff --git a/docs/CreateStoreResponse.md b/docs/CreateStoreResponse.md new file mode 100644 index 0000000..0a080bb --- /dev/null +++ b/docs/CreateStoreResponse.md @@ -0,0 +1,16 @@ + + +# CreateStoreResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **String** | | [optional] | +|**name** | **String** | | [optional] | +|**createdAt** | **OffsetDateTime** | | [optional] | +|**updatedAt** | **OffsetDateTime** | | [optional] | + + + diff --git a/docs/Difference.md b/docs/Difference.md new file mode 100644 index 0000000..0b9203b --- /dev/null +++ b/docs/Difference.md @@ -0,0 +1,14 @@ + + +# Difference + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**base** | [**Userset**](Userset.md) | | | +|**subtract** | [**Userset**](Userset.md) | | | + + + diff --git a/docs/ErrorCode.md b/docs/ErrorCode.md new file mode 100644 index 0000000..995351b --- /dev/null +++ b/docs/ErrorCode.md @@ -0,0 +1,107 @@ + + +# ErrorCode + +## Enum + + +* `NO_ERROR` (value: `"no_error"`) + +* `VALIDATION_ERROR` (value: `"validation_error"`) + +* `AUTHORIZATION_MODEL_NOT_FOUND` (value: `"authorization_model_not_found"`) + +* `AUTHORIZATION_MODEL_RESOLUTION_TOO_COMPLEX` (value: `"authorization_model_resolution_too_complex"`) + +* `INVALID_WRITE_INPUT` (value: `"invalid_write_input"`) + +* `CANNOT_ALLOW_DUPLICATE_TUPLES_IN_ONE_REQUEST` (value: `"cannot_allow_duplicate_tuples_in_one_request"`) + +* `CANNOT_ALLOW_DUPLICATE_TYPES_IN_ONE_REQUEST` (value: `"cannot_allow_duplicate_types_in_one_request"`) + +* `CANNOT_ALLOW_MULTIPLE_REFERENCES_TO_ONE_RELATION` (value: `"cannot_allow_multiple_references_to_one_relation"`) + +* `INVALID_CONTINUATION_TOKEN` (value: `"invalid_continuation_token"`) + +* `INVALID_TUPLE_SET` (value: `"invalid_tuple_set"`) + +* `INVALID_CHECK_INPUT` (value: `"invalid_check_input"`) + +* `INVALID_EXPAND_INPUT` (value: `"invalid_expand_input"`) + +* `UNSUPPORTED_USER_SET` (value: `"unsupported_user_set"`) + +* `INVALID_OBJECT_FORMAT` (value: `"invalid_object_format"`) + +* `WRITE_FAILED_DUE_TO_INVALID_INPUT` (value: `"write_failed_due_to_invalid_input"`) + +* `AUTHORIZATION_MODEL_ASSERTIONS_NOT_FOUND` (value: `"authorization_model_assertions_not_found"`) + +* `LATEST_AUTHORIZATION_MODEL_NOT_FOUND` (value: `"latest_authorization_model_not_found"`) + +* `TYPE_NOT_FOUND` (value: `"type_not_found"`) + +* `RELATION_NOT_FOUND` (value: `"relation_not_found"`) + +* `EMPTY_RELATION_DEFINITION` (value: `"empty_relation_definition"`) + +* `INVALID_USER` (value: `"invalid_user"`) + +* `INVALID_TUPLE` (value: `"invalid_tuple"`) + +* `UNKNOWN_RELATION` (value: `"unknown_relation"`) + +* `STORE_ID_INVALID_LENGTH` (value: `"store_id_invalid_length"`) + +* `ASSERTIONS_TOO_MANY_ITEMS` (value: `"assertions_too_many_items"`) + +* `ID_TOO_LONG` (value: `"id_too_long"`) + +* `AUTHORIZATION_MODEL_ID_TOO_LONG` (value: `"authorization_model_id_too_long"`) + +* `TUPLE_KEY_VALUE_NOT_SPECIFIED` (value: `"tuple_key_value_not_specified"`) + +* `TUPLE_KEYS_TOO_MANY_OR_TOO_FEW_ITEMS` (value: `"tuple_keys_too_many_or_too_few_items"`) + +* `PAGE_SIZE_INVALID` (value: `"page_size_invalid"`) + +* `PARAM_MISSING_VALUE` (value: `"param_missing_value"`) + +* `DIFFERENCE_BASE_MISSING_VALUE` (value: `"difference_base_missing_value"`) + +* `SUBTRACT_BASE_MISSING_VALUE` (value: `"subtract_base_missing_value"`) + +* `OBJECT_TOO_LONG` (value: `"object_too_long"`) + +* `RELATION_TOO_LONG` (value: `"relation_too_long"`) + +* `TYPE_DEFINITIONS_TOO_FEW_ITEMS` (value: `"type_definitions_too_few_items"`) + +* `TYPE_INVALID_LENGTH` (value: `"type_invalid_length"`) + +* `TYPE_INVALID_PATTERN` (value: `"type_invalid_pattern"`) + +* `RELATIONS_TOO_FEW_ITEMS` (value: `"relations_too_few_items"`) + +* `RELATIONS_TOO_LONG` (value: `"relations_too_long"`) + +* `RELATIONS_INVALID_PATTERN` (value: `"relations_invalid_pattern"`) + +* `OBJECT_INVALID_PATTERN` (value: `"object_invalid_pattern"`) + +* `QUERY_STRING_TYPE_CONTINUATION_TOKEN_MISMATCH` (value: `"query_string_type_continuation_token_mismatch"`) + +* `EXCEEDED_ENTITY_LIMIT` (value: `"exceeded_entity_limit"`) + +* `INVALID_CONTEXTUAL_TUPLE` (value: `"invalid_contextual_tuple"`) + +* `DUPLICATE_CONTEXTUAL_TUPLE` (value: `"duplicate_contextual_tuple"`) + +* `INVALID_AUTHORIZATION_MODEL` (value: `"invalid_authorization_model"`) + +* `UNSUPPORTED_SCHEMA_VERSION` (value: `"unsupported_schema_version"`) + +* `UNKNOWN_DEFAULT_OPEN_API` (value: `"unknown_default_open_api"`) + + + diff --git a/docs/ExpandRequest.md b/docs/ExpandRequest.md new file mode 100644 index 0000000..c5b6442 --- /dev/null +++ b/docs/ExpandRequest.md @@ -0,0 +1,14 @@ + + +# ExpandRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKey** | [**TupleKey**](TupleKey.md) | | | +|**authorizationModelId** | **String** | | [optional] | + + + diff --git a/docs/ExpandResponse.md b/docs/ExpandResponse.md new file mode 100644 index 0000000..c01fbb1 --- /dev/null +++ b/docs/ExpandResponse.md @@ -0,0 +1,13 @@ + + +# ExpandResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tree** | [**UsersetTree**](UsersetTree.md) | | [optional] | + + + diff --git a/docs/GetStoreResponse.md b/docs/GetStoreResponse.md new file mode 100644 index 0000000..d802015 --- /dev/null +++ b/docs/GetStoreResponse.md @@ -0,0 +1,16 @@ + + +# GetStoreResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **String** | | [optional] | +|**name** | **String** | | [optional] | +|**createdAt** | **OffsetDateTime** | | [optional] | +|**updatedAt** | **OffsetDateTime** | | [optional] | + + + diff --git a/docs/InternalErrorCode.md b/docs/InternalErrorCode.md new file mode 100644 index 0000000..0b14c21 --- /dev/null +++ b/docs/InternalErrorCode.md @@ -0,0 +1,33 @@ + + +# InternalErrorCode + +## Enum + + +* `NO_INTERNAL_ERROR` (value: `"no_internal_error"`) + +* `INTERNAL_ERROR` (value: `"internal_error"`) + +* `CANCELLED` (value: `"cancelled"`) + +* `DEADLINE_EXCEEDED` (value: `"deadline_exceeded"`) + +* `ALREADY_EXISTS` (value: `"already_exists"`) + +* `RESOURCE_EXHAUSTED` (value: `"resource_exhausted"`) + +* `FAILED_PRECONDITION` (value: `"failed_precondition"`) + +* `ABORTED` (value: `"aborted"`) + +* `OUT_OF_RANGE` (value: `"out_of_range"`) + +* `UNAVAILABLE` (value: `"unavailable"`) + +* `DATA_LOSS` (value: `"data_loss"`) + +* `UNKNOWN_DEFAULT_OPEN_API` (value: `"unknown_default_open_api"`) + + + diff --git a/docs/InternalErrorMessageResponse.md b/docs/InternalErrorMessageResponse.md new file mode 100644 index 0000000..258ac23 --- /dev/null +++ b/docs/InternalErrorMessageResponse.md @@ -0,0 +1,14 @@ + + +# InternalErrorMessageResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**code** | **InternalErrorCode** | | [optional] | +|**message** | **String** | | [optional] | + + + diff --git a/docs/Leaf.md b/docs/Leaf.md new file mode 100644 index 0000000..46664c5 --- /dev/null +++ b/docs/Leaf.md @@ -0,0 +1,16 @@ + + +# Leaf + +A leaf node contains either - a set of users (which may be individual users, or usersets referencing other relations) - a computed node, which is the result of a computed userset value in the authorization model - a tupleToUserset nodes, containing the result of expanding a tupleToUserset value in a authorization model. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**users** | [**Users**](Users.md) | | [optional] | +|**computed** | [**Computed**](Computed.md) | | [optional] | +|**tupleToUserset** | [**UsersetTreeTupleToUserset**](UsersetTreeTupleToUserset.md) | | [optional] | + + + diff --git a/docs/ListObjectsRequest.md b/docs/ListObjectsRequest.md new file mode 100644 index 0000000..2919fe3 --- /dev/null +++ b/docs/ListObjectsRequest.md @@ -0,0 +1,17 @@ + + +# ListObjectsRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**authorizationModelId** | **String** | | [optional] | +|**type** | **String** | | | +|**relation** | **String** | | | +|**user** | **String** | | | +|**contextualTuples** | [**ContextualTupleKeys**](ContextualTupleKeys.md) | | [optional] | + + + diff --git a/docs/ListObjectsResponse.md b/docs/ListObjectsResponse.md new file mode 100644 index 0000000..68a8566 --- /dev/null +++ b/docs/ListObjectsResponse.md @@ -0,0 +1,13 @@ + + +# ListObjectsResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**objects** | **List<String>** | | [optional] | + + + diff --git a/docs/ListStoresResponse.md b/docs/ListStoresResponse.md new file mode 100644 index 0000000..3088fb4 --- /dev/null +++ b/docs/ListStoresResponse.md @@ -0,0 +1,14 @@ + + +# ListStoresResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**stores** | [**List<Store>**](Store.md) | | [optional] | +|**continuationToken** | **String** | The continuation token will be empty if there are no more stores. | [optional] | + + + diff --git a/docs/Metadata.md b/docs/Metadata.md new file mode 100644 index 0000000..f3c8d45 --- /dev/null +++ b/docs/Metadata.md @@ -0,0 +1,13 @@ + + +# Metadata + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**relations** | [**Map<String, RelationMetadata>**](RelationMetadata.md) | | [optional] | + + + diff --git a/docs/Node.md b/docs/Node.md new file mode 100644 index 0000000..6f89e9e --- /dev/null +++ b/docs/Node.md @@ -0,0 +1,17 @@ + + +# Node + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | | [optional] | +|**leaf** | [**Leaf**](Leaf.md) | | [optional] | +|**difference** | [**UsersetTreeDifference**](UsersetTreeDifference.md) | | [optional] | +|**union** | [**Nodes**](Nodes.md) | | [optional] | +|**intersection** | [**Nodes**](Nodes.md) | | [optional] | + + + diff --git a/docs/Nodes.md b/docs/Nodes.md new file mode 100644 index 0000000..d637207 --- /dev/null +++ b/docs/Nodes.md @@ -0,0 +1,13 @@ + + +# Nodes + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**nodes** | [**List<Node>**](Node.md) | | [optional] | + + + diff --git a/docs/NotFoundErrorCode.md b/docs/NotFoundErrorCode.md new file mode 100644 index 0000000..5ff45b1 --- /dev/null +++ b/docs/NotFoundErrorCode.md @@ -0,0 +1,19 @@ + + +# NotFoundErrorCode + +## Enum + + +* `NO_NOT_FOUND_ERROR` (value: `"no_not_found_error"`) + +* `UNDEFINED_ENDPOINT` (value: `"undefined_endpoint"`) + +* `STORE_ID_NOT_FOUND` (value: `"store_id_not_found"`) + +* `UNIMPLEMENTED` (value: `"unimplemented"`) + +* `UNKNOWN_DEFAULT_OPEN_API` (value: `"unknown_default_open_api"`) + + + diff --git a/docs/ObjectRelation.md b/docs/ObjectRelation.md new file mode 100644 index 0000000..d73bd14 --- /dev/null +++ b/docs/ObjectRelation.md @@ -0,0 +1,14 @@ + + +# ObjectRelation + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**_object** | **String** | | [optional] | +|**relation** | **String** | | [optional] | + + + diff --git a/docs/OpenFgaApi.md b/docs/OpenFgaApi.md new file mode 100644 index 0000000..9b9fc08 --- /dev/null +++ b/docs/OpenFgaApi.md @@ -0,0 +1,2333 @@ +# OpenFgaApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**check**](OpenFgaApi.md#check) | **POST** /stores/{store_id}/check | Check whether a user is authorized to access an object | +| [**checkWithHttpInfo**](OpenFgaApi.md#checkWithHttpInfo) | **POST** /stores/{store_id}/check | Check whether a user is authorized to access an object | +| [**createStore**](OpenFgaApi.md#createStore) | **POST** /stores | Create a store | +| [**createStoreWithHttpInfo**](OpenFgaApi.md#createStoreWithHttpInfo) | **POST** /stores | Create a store | +| [**deleteStore**](OpenFgaApi.md#deleteStore) | **DELETE** /stores/{store_id} | Delete a store | +| [**deleteStoreWithHttpInfo**](OpenFgaApi.md#deleteStoreWithHttpInfo) | **DELETE** /stores/{store_id} | Delete a store | +| [**expand**](OpenFgaApi.md#expand) | **POST** /stores/{store_id}/expand | Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship | +| [**expandWithHttpInfo**](OpenFgaApi.md#expandWithHttpInfo) | **POST** /stores/{store_id}/expand | Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship | +| [**getStore**](OpenFgaApi.md#getStore) | **GET** /stores/{store_id} | Get a store | +| [**getStoreWithHttpInfo**](OpenFgaApi.md#getStoreWithHttpInfo) | **GET** /stores/{store_id} | Get a store | +| [**listObjects**](OpenFgaApi.md#listObjects) | **POST** /stores/{store_id}/list-objects | List all objects of the given type that the user has a relation with | +| [**listObjectsWithHttpInfo**](OpenFgaApi.md#listObjectsWithHttpInfo) | **POST** /stores/{store_id}/list-objects | List all objects of the given type that the user has a relation with | +| [**listStores**](OpenFgaApi.md#listStores) | **GET** /stores | List all stores | +| [**listStoresWithHttpInfo**](OpenFgaApi.md#listStoresWithHttpInfo) | **GET** /stores | List all stores | +| [**read**](OpenFgaApi.md#read) | **POST** /stores/{store_id}/read | Get tuples from the store that matches a query, without following userset rewrite rules | +| [**readWithHttpInfo**](OpenFgaApi.md#readWithHttpInfo) | **POST** /stores/{store_id}/read | Get tuples from the store that matches a query, without following userset rewrite rules | +| [**readAssertions**](OpenFgaApi.md#readAssertions) | **GET** /stores/{store_id}/assertions/{authorization_model_id} | Read assertions for an authorization model ID | +| [**readAssertionsWithHttpInfo**](OpenFgaApi.md#readAssertionsWithHttpInfo) | **GET** /stores/{store_id}/assertions/{authorization_model_id} | Read assertions for an authorization model ID | +| [**readAuthorizationModel**](OpenFgaApi.md#readAuthorizationModel) | **GET** /stores/{store_id}/authorization-models/{id} | Return a particular version of an authorization model | +| [**readAuthorizationModelWithHttpInfo**](OpenFgaApi.md#readAuthorizationModelWithHttpInfo) | **GET** /stores/{store_id}/authorization-models/{id} | Return a particular version of an authorization model | +| [**readAuthorizationModels**](OpenFgaApi.md#readAuthorizationModels) | **GET** /stores/{store_id}/authorization-models | Return all the authorization models for a particular store | +| [**readAuthorizationModelsWithHttpInfo**](OpenFgaApi.md#readAuthorizationModelsWithHttpInfo) | **GET** /stores/{store_id}/authorization-models | Return all the authorization models for a particular store | +| [**readChanges**](OpenFgaApi.md#readChanges) | **GET** /stores/{store_id}/changes | Return a list of all the tuple changes | +| [**readChangesWithHttpInfo**](OpenFgaApi.md#readChangesWithHttpInfo) | **GET** /stores/{store_id}/changes | Return a list of all the tuple changes | +| [**write**](OpenFgaApi.md#write) | **POST** /stores/{store_id}/write | Add or delete tuples from the store | +| [**writeWithHttpInfo**](OpenFgaApi.md#writeWithHttpInfo) | **POST** /stores/{store_id}/write | Add or delete tuples from the store | +| [**writeAssertions**](OpenFgaApi.md#writeAssertions) | **PUT** /stores/{store_id}/assertions/{authorization_model_id} | Upsert assertions for an authorization model ID | +| [**writeAssertionsWithHttpInfo**](OpenFgaApi.md#writeAssertionsWithHttpInfo) | **PUT** /stores/{store_id}/assertions/{authorization_model_id} | Upsert assertions for an authorization model ID | +| [**writeAuthorizationModel**](OpenFgaApi.md#writeAuthorizationModel) | **POST** /stores/{store_id}/authorization-models | Create a new authorization model | +| [**writeAuthorizationModelWithHttpInfo**](OpenFgaApi.md#writeAuthorizationModelWithHttpInfo) | **POST** /stores/{store_id}/authorization-models | Create a new authorization model | + + + +## check + +> CompletableFuture check(storeId, body) + +Check whether a user is authorized to access an object + +The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + CheckRequest body = new CheckRequest(); // CheckRequest | + try { + CompletableFuture result = apiInstance.check(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#check"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**CheckRequest**](CheckRequest.md)| | | + +### Return type + +CompletableFuture<[**CheckResponse**](CheckResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## checkWithHttpInfo + +> CompletableFuture> check checkWithHttpInfo(storeId, body) + +Check whether a user is authorized to access an object + +The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + CheckRequest body = new CheckRequest(); // CheckRequest | + try { + CompletableFuture> response = apiInstance.checkWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#check"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#check"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**CheckRequest**](CheckRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## createStore + +> CompletableFuture createStore(body) + +Create a store + +Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + CreateStoreRequest body = new CreateStoreRequest(); // CreateStoreRequest | + try { + CompletableFuture result = apiInstance.createStore(body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#createStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **body** | [**CreateStoreRequest**](CreateStoreRequest.md)| | | + +### Return type + +CompletableFuture<[**CreateStoreResponse**](CreateStoreResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## createStoreWithHttpInfo + +> CompletableFuture> createStore createStoreWithHttpInfo(body) + +Create a store + +Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + CreateStoreRequest body = new CreateStoreRequest(); // CreateStoreRequest | + try { + CompletableFuture> response = apiInstance.createStoreWithHttpInfo(body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#createStore"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#createStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **body** | [**CreateStoreRequest**](CreateStoreRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## deleteStore + +> CompletableFuture deleteStore(storeId) + +Delete a store + +Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + try { + CompletableFuture result = apiInstance.deleteStore(storeId); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#deleteStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | + +### Return type + + +CompletableFuture (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## deleteStoreWithHttpInfo + +> CompletableFuture> deleteStore deleteStoreWithHttpInfo(storeId) + +Delete a store + +Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + try { + CompletableFuture> response = apiInstance.deleteStoreWithHttpInfo(storeId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#deleteStore"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#deleteStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | + +### Return type + + +CompletableFuture> + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## expand + +> CompletableFuture expand(storeId, body) + +Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + +The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ExpandRequest body = new ExpandRequest(); // ExpandRequest | + try { + CompletableFuture result = apiInstance.expand(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#expand"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ExpandRequest**](ExpandRequest.md)| | | + +### Return type + +CompletableFuture<[**ExpandResponse**](ExpandResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## expandWithHttpInfo + +> CompletableFuture> expand expandWithHttpInfo(storeId, body) + +Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + +The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ExpandRequest body = new ExpandRequest(); // ExpandRequest | + try { + CompletableFuture> response = apiInstance.expandWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#expand"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#expand"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ExpandRequest**](ExpandRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## getStore + +> CompletableFuture getStore(storeId) + +Get a store + +Returns an OpenFGA store by its identifier + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + try { + CompletableFuture result = apiInstance.getStore(storeId); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#getStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | + +### Return type + +CompletableFuture<[**GetStoreResponse**](GetStoreResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## getStoreWithHttpInfo + +> CompletableFuture> getStore getStoreWithHttpInfo(storeId) + +Get a store + +Returns an OpenFGA store by its identifier + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + try { + CompletableFuture> response = apiInstance.getStoreWithHttpInfo(storeId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#getStore"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#getStore"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## listObjects + +> CompletableFuture listObjects(storeId, body) + +List all objects of the given type that the user has a relation with + +The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ListObjectsRequest body = new ListObjectsRequest(); // ListObjectsRequest | + try { + CompletableFuture result = apiInstance.listObjects(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#listObjects"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ListObjectsRequest**](ListObjectsRequest.md)| | | + +### Return type + +CompletableFuture<[**ListObjectsResponse**](ListObjectsResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## listObjectsWithHttpInfo + +> CompletableFuture> listObjects listObjectsWithHttpInfo(storeId, body) + +List all objects of the given type that the user has a relation with + +The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ListObjectsRequest body = new ListObjectsRequest(); // ListObjectsRequest | + try { + CompletableFuture> response = apiInstance.listObjectsWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#listObjects"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#listObjects"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ListObjectsRequest**](ListObjectsRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## listStores + +> CompletableFuture listStores(pageSize, continuationToken) + +List all stores + +Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture result = apiInstance.listStores(pageSize, continuationToken); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#listStores"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture<[**ListStoresResponse**](ListStoresResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## listStoresWithHttpInfo + +> CompletableFuture> listStores listStoresWithHttpInfo(pageSize, continuationToken) + +List all stores + +Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture> response = apiInstance.listStoresWithHttpInfo(pageSize, continuationToken); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#listStores"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#listStores"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## read + +> CompletableFuture read(storeId, body) + +Get tuples from the store that matches a query, without following userset rewrite rules + +The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ReadRequest body = new ReadRequest(); // ReadRequest | + try { + CompletableFuture result = apiInstance.read(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#read"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ReadRequest**](ReadRequest.md)| | | + +### Return type + +CompletableFuture<[**ReadResponse**](ReadResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## readWithHttpInfo + +> CompletableFuture> read readWithHttpInfo(storeId, body) + +Get tuples from the store that matches a query, without following userset rewrite rules + +The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + ReadRequest body = new ReadRequest(); // ReadRequest | + try { + CompletableFuture> response = apiInstance.readWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#read"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#read"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**ReadRequest**](ReadRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## readAssertions + +> CompletableFuture readAssertions(storeId, authorizationModelId) + +Read assertions for an authorization model ID + +The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String authorizationModelId = "authorizationModelId_example"; // String | + try { + CompletableFuture result = apiInstance.readAssertions(storeId, authorizationModelId); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAssertions"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **authorizationModelId** | **String**| | | + +### Return type + +CompletableFuture<[**ReadAssertionsResponse**](ReadAssertionsResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## readAssertionsWithHttpInfo + +> CompletableFuture> readAssertions readAssertionsWithHttpInfo(storeId, authorizationModelId) + +Read assertions for an authorization model ID + +The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String authorizationModelId = "authorizationModelId_example"; // String | + try { + CompletableFuture> response = apiInstance.readAssertionsWithHttpInfo(storeId, authorizationModelId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#readAssertions"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAssertions"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **authorizationModelId** | **String**| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## readAuthorizationModel + +> CompletableFuture readAuthorizationModel(storeId, id) + +Return a particular version of an authorization model + +The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String id = "id_example"; // String | + try { + CompletableFuture result = apiInstance.readAuthorizationModel(storeId, id); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModel"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **id** | **String**| | | + +### Return type + +CompletableFuture<[**ReadAuthorizationModelResponse**](ReadAuthorizationModelResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## readAuthorizationModelWithHttpInfo + +> CompletableFuture> readAuthorizationModel readAuthorizationModelWithHttpInfo(storeId, id) + +Return a particular version of an authorization model + +The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String id = "id_example"; // String | + try { + CompletableFuture> response = apiInstance.readAuthorizationModelWithHttpInfo(storeId, id); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModel"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModel"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **id** | **String**| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## readAuthorizationModels + +> CompletableFuture readAuthorizationModels(storeId, pageSize, continuationToken) + +Return all the authorization models for a particular store + +The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture result = apiInstance.readAuthorizationModels(storeId, pageSize, continuationToken); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModels"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture<[**ReadAuthorizationModelsResponse**](ReadAuthorizationModelsResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## readAuthorizationModelsWithHttpInfo + +> CompletableFuture> readAuthorizationModels readAuthorizationModelsWithHttpInfo(storeId, pageSize, continuationToken) + +Return all the authorization models for a particular store + +The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture> response = apiInstance.readAuthorizationModelsWithHttpInfo(storeId, pageSize, continuationToken); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModels"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readAuthorizationModels"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## readChanges + +> CompletableFuture readChanges(storeId, type, pageSize, continuationToken) + +Return a list of all the tuple changes + +The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String type = "type_example"; // String | + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture result = apiInstance.readChanges(storeId, type, pageSize, continuationToken); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readChanges"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **type** | **String**| | [optional] | +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture<[**ReadChangesResponse**](ReadChangesResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## readChangesWithHttpInfo + +> CompletableFuture> readChanges readChangesWithHttpInfo(storeId, type, pageSize, continuationToken) + +Return a list of all the tuple changes + +The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String type = "type_example"; // String | + Integer pageSize = 56; // Integer | + String continuationToken = "continuationToken_example"; // String | + try { + CompletableFuture> response = apiInstance.readChangesWithHttpInfo(storeId, type, pageSize, continuationToken); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#readChanges"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#readChanges"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **type** | **String**| | [optional] | +| **pageSize** | **Integer**| | [optional] | +| **continuationToken** | **String**| | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## write + +> CompletableFuture write(storeId, body) + +Add or delete tuples from the store + +The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + WriteRequest body = new WriteRequest(); // WriteRequest | + try { + CompletableFuture result = apiInstance.write(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#write"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**WriteRequest**](WriteRequest.md)| | | + +### Return type + +CompletableFuture<**Object**> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## writeWithHttpInfo + +> CompletableFuture> write writeWithHttpInfo(storeId, body) + +Add or delete tuples from the store + +The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + WriteRequest body = new WriteRequest(); // WriteRequest | + try { + CompletableFuture> response = apiInstance.writeWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#write"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#write"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**WriteRequest**](WriteRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## writeAssertions + +> CompletableFuture writeAssertions(storeId, authorizationModelId, body) + +Upsert assertions for an authorization model ID + +The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String authorizationModelId = "authorizationModelId_example"; // String | + WriteAssertionsRequest body = new WriteAssertionsRequest(); // WriteAssertionsRequest | + try { + CompletableFuture result = apiInstance.writeAssertions(storeId, authorizationModelId, body); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#writeAssertions"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **authorizationModelId** | **String**| | | +| **body** | [**WriteAssertionsRequest**](WriteAssertionsRequest.md)| | | + +### Return type + + +CompletableFuture (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## writeAssertionsWithHttpInfo + +> CompletableFuture> writeAssertions writeAssertionsWithHttpInfo(storeId, authorizationModelId, body) + +Upsert assertions for an authorization model ID + +The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + String authorizationModelId = "authorizationModelId_example"; // String | + WriteAssertionsRequest body = new WriteAssertionsRequest(); // WriteAssertionsRequest | + try { + CompletableFuture> response = apiInstance.writeAssertionsWithHttpInfo(storeId, authorizationModelId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#writeAssertions"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#writeAssertions"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **authorizationModelId** | **String**| | | +| **body** | [**WriteAssertionsRequest**](WriteAssertionsRequest.md)| | | + +### Return type + + +CompletableFuture> + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + + +## writeAuthorizationModel + +> CompletableFuture writeAuthorizationModel(storeId, body) + +Create a new authorization model + +The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + WriteAuthorizationModelRequest body = new WriteAuthorizationModelRequest(); // WriteAuthorizationModelRequest | + try { + CompletableFuture result = apiInstance.writeAuthorizationModel(storeId, body); + System.out.println(result.get()); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#writeAuthorizationModel"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**WriteAuthorizationModelRequest**](WriteAuthorizationModelRequest.md)| | | + +### Return type + +CompletableFuture<[**WriteAuthorizationModelResponse**](WriteAuthorizationModelResponse.md)> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + +## writeAuthorizationModelWithHttpInfo + +> CompletableFuture> writeAuthorizationModel writeAuthorizationModelWithHttpInfo(storeId, body) + +Create a new authorization model + +The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + +### Example + +```java +// Import classes: +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.models.*; +import dev.openfga.sdk.api.OpenFgaApi; +import java.util.concurrent.CompletableFuture; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + OpenFgaApi apiInstance = new OpenFgaApi(defaultClient); + String storeId = "storeId_example"; // String | + WriteAuthorizationModelRequest body = new WriteAuthorizationModelRequest(); // WriteAuthorizationModelRequest | + try { + CompletableFuture> response = apiInstance.writeAuthorizationModelWithHttpInfo(storeId, body); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling OpenFgaApi#writeAuthorizationModel"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } catch (ApiException e) { + System.err.println("Exception when calling OpenFgaApi#writeAuthorizationModel"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Response headers: " + e.getResponseHeaders()); + System.err.println("Reason: " + e.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **storeId** | **String**| | | +| **body** | [**WriteAuthorizationModelRequest**](WriteAuthorizationModelRequest.md)| | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | A successful response. | - | +| **400** | Request failed due to invalid input. | - | +| **404** | Request failed due to incorrect path. | - | +| **500** | Request failed due to internal server error. | - | + diff --git a/docs/PathUnknownErrorMessageResponse.md b/docs/PathUnknownErrorMessageResponse.md new file mode 100644 index 0000000..4958e74 --- /dev/null +++ b/docs/PathUnknownErrorMessageResponse.md @@ -0,0 +1,14 @@ + + +# PathUnknownErrorMessageResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**code** | **NotFoundErrorCode** | | [optional] | +|**message** | **String** | | [optional] | + + + diff --git a/docs/ReadAssertionsResponse.md b/docs/ReadAssertionsResponse.md new file mode 100644 index 0000000..48c60ad --- /dev/null +++ b/docs/ReadAssertionsResponse.md @@ -0,0 +1,14 @@ + + +# ReadAssertionsResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**authorizationModelId** | **String** | | [optional] | +|**assertions** | [**List<Assertion>**](Assertion.md) | | [optional] | + + + diff --git a/docs/ReadAuthorizationModelResponse.md b/docs/ReadAuthorizationModelResponse.md new file mode 100644 index 0000000..b2d7dd7 --- /dev/null +++ b/docs/ReadAuthorizationModelResponse.md @@ -0,0 +1,13 @@ + + +# ReadAuthorizationModelResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**authorizationModel** | [**AuthorizationModel**](AuthorizationModel.md) | | [optional] | + + + diff --git a/docs/ReadAuthorizationModelsResponse.md b/docs/ReadAuthorizationModelsResponse.md new file mode 100644 index 0000000..616b47c --- /dev/null +++ b/docs/ReadAuthorizationModelsResponse.md @@ -0,0 +1,14 @@ + + +# ReadAuthorizationModelsResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**authorizationModels** | [**List<AuthorizationModel>**](AuthorizationModel.md) | | [optional] | +|**continuationToken** | **String** | The continuation token will be empty if there are no more models. | [optional] | + + + diff --git a/docs/ReadChangesResponse.md b/docs/ReadChangesResponse.md new file mode 100644 index 0000000..fca87b4 --- /dev/null +++ b/docs/ReadChangesResponse.md @@ -0,0 +1,14 @@ + + +# ReadChangesResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**changes** | [**List<TupleChange>**](TupleChange.md) | | [optional] | +|**continuationToken** | **String** | The continuation token will be identical if there are no new changes. | [optional] | + + + diff --git a/docs/ReadRequest.md b/docs/ReadRequest.md new file mode 100644 index 0000000..f8f7047 --- /dev/null +++ b/docs/ReadRequest.md @@ -0,0 +1,15 @@ + + +# ReadRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKey** | [**TupleKey**](TupleKey.md) | | [optional] | +|**pageSize** | **Integer** | | [optional] | +|**continuationToken** | **String** | | [optional] | + + + diff --git a/docs/ReadResponse.md b/docs/ReadResponse.md new file mode 100644 index 0000000..55c981b --- /dev/null +++ b/docs/ReadResponse.md @@ -0,0 +1,14 @@ + + +# ReadResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tuples** | [**List<Tuple>**](Tuple.md) | | [optional] | +|**continuationToken** | **String** | The continuation token will be empty if there are no more tuples. | [optional] | + + + diff --git a/docs/RelationMetadata.md b/docs/RelationMetadata.md new file mode 100644 index 0000000..428f9b0 --- /dev/null +++ b/docs/RelationMetadata.md @@ -0,0 +1,13 @@ + + +# RelationMetadata + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**directlyRelatedUserTypes** | [**List<RelationReference>**](RelationReference.md) | | [optional] | + + + diff --git a/docs/RelationReference.md b/docs/RelationReference.md new file mode 100644 index 0000000..ed98991 --- /dev/null +++ b/docs/RelationReference.md @@ -0,0 +1,16 @@ + + +# RelationReference + +RelationReference represents a relation of a particular object type (e.g. 'document#viewer'). + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **String** | | | +|**relation** | **String** | | [optional] | +|**wildcard** | **Object** | | [optional] | + + + diff --git a/docs/Status.md b/docs/Status.md new file mode 100644 index 0000000..f2905b6 --- /dev/null +++ b/docs/Status.md @@ -0,0 +1,15 @@ + + +# Status + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**code** | **Integer** | | [optional] | +|**message** | **String** | | [optional] | +|**details** | **List<Any>** | | [optional] | + + + diff --git a/docs/Store.md b/docs/Store.md new file mode 100644 index 0000000..b2b74ca --- /dev/null +++ b/docs/Store.md @@ -0,0 +1,17 @@ + + +# Store + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **String** | | [optional] | +|**name** | **String** | | [optional] | +|**createdAt** | **OffsetDateTime** | | [optional] | +|**updatedAt** | **OffsetDateTime** | | [optional] | +|**deletedAt** | **OffsetDateTime** | | [optional] | + + + diff --git a/docs/Tuple.md b/docs/Tuple.md new file mode 100644 index 0000000..04d434b --- /dev/null +++ b/docs/Tuple.md @@ -0,0 +1,14 @@ + + +# Tuple + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**key** | [**TupleKey**](TupleKey.md) | | [optional] | +|**timestamp** | **OffsetDateTime** | | [optional] | + + + diff --git a/docs/TupleChange.md b/docs/TupleChange.md new file mode 100644 index 0000000..f6751f6 --- /dev/null +++ b/docs/TupleChange.md @@ -0,0 +1,15 @@ + + +# TupleChange + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKey** | [**TupleKey**](TupleKey.md) | | [optional] | +|**operation** | **TupleOperation** | | [optional] | +|**timestamp** | **OffsetDateTime** | | [optional] | + + + diff --git a/docs/TupleKey.md b/docs/TupleKey.md new file mode 100644 index 0000000..fc35d4b --- /dev/null +++ b/docs/TupleKey.md @@ -0,0 +1,15 @@ + + +# TupleKey + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**_object** | **String** | | [optional] | +|**relation** | **String** | | [optional] | +|**user** | **String** | | [optional] | + + + diff --git a/docs/TupleKeys.md b/docs/TupleKeys.md new file mode 100644 index 0000000..72dbe13 --- /dev/null +++ b/docs/TupleKeys.md @@ -0,0 +1,13 @@ + + +# TupleKeys + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleKeys** | [**List<TupleKey>**](TupleKey.md) | | | + + + diff --git a/docs/TupleOperation.md b/docs/TupleOperation.md new file mode 100644 index 0000000..fa6a9f6 --- /dev/null +++ b/docs/TupleOperation.md @@ -0,0 +1,15 @@ + + +# TupleOperation + +## Enum + + +* `WRITE` (value: `"TUPLE_OPERATION_WRITE"`) + +* `DELETE` (value: `"TUPLE_OPERATION_DELETE"`) + +* `UNKNOWN_DEFAULT_OPEN_API` (value: `"unknown_default_open_api"`) + + + diff --git a/docs/TupleToUserset.md b/docs/TupleToUserset.md new file mode 100644 index 0000000..40802b3 --- /dev/null +++ b/docs/TupleToUserset.md @@ -0,0 +1,14 @@ + + +# TupleToUserset + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleset** | [**ObjectRelation**](ObjectRelation.md) | | [optional] | +|**computedUserset** | [**ObjectRelation**](ObjectRelation.md) | | [optional] | + + + diff --git a/docs/TypeDefinition.md b/docs/TypeDefinition.md new file mode 100644 index 0000000..f384cc4 --- /dev/null +++ b/docs/TypeDefinition.md @@ -0,0 +1,15 @@ + + +# TypeDefinition + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **String** | | | +|**relations** | [**Map<String, Userset>**](Userset.md) | | [optional] | +|**metadata** | [**Metadata**](Metadata.md) | | [optional] | + + + diff --git a/docs/Users.md b/docs/Users.md new file mode 100644 index 0000000..5fa6b79 --- /dev/null +++ b/docs/Users.md @@ -0,0 +1,13 @@ + + +# Users + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**users** | **List<String>** | | [optional] | + + + diff --git a/docs/Userset.md b/docs/Userset.md new file mode 100644 index 0000000..a5a04c3 --- /dev/null +++ b/docs/Userset.md @@ -0,0 +1,18 @@ + + +# Userset + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**_this** | **Object** | A DirectUserset is a sentinel message for referencing the direct members specified by an object/relation mapping. | [optional] | +|**computedUserset** | [**ObjectRelation**](ObjectRelation.md) | | [optional] | +|**tupleToUserset** | [**TupleToUserset**](TupleToUserset.md) | | [optional] | +|**union** | [**Usersets**](Usersets.md) | | [optional] | +|**intersection** | [**Usersets**](Usersets.md) | | [optional] | +|**difference** | [**Difference**](Difference.md) | | [optional] | + + + diff --git a/docs/UsersetTree.md b/docs/UsersetTree.md new file mode 100644 index 0000000..f97d8d3 --- /dev/null +++ b/docs/UsersetTree.md @@ -0,0 +1,14 @@ + + +# UsersetTree + +A UsersetTree contains the result of an Expansion. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**root** | [**Node**](Node.md) | | [optional] | + + + diff --git a/docs/UsersetTreeDifference.md b/docs/UsersetTreeDifference.md new file mode 100644 index 0000000..4370408 --- /dev/null +++ b/docs/UsersetTreeDifference.md @@ -0,0 +1,14 @@ + + +# UsersetTreeDifference + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**base** | [**Node**](Node.md) | | [optional] | +|**subtract** | [**Node**](Node.md) | | [optional] | + + + diff --git a/docs/UsersetTreeTupleToUserset.md b/docs/UsersetTreeTupleToUserset.md new file mode 100644 index 0000000..3cf3f37 --- /dev/null +++ b/docs/UsersetTreeTupleToUserset.md @@ -0,0 +1,14 @@ + + +# UsersetTreeTupleToUserset + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**tupleset** | **String** | | [optional] | +|**computed** | [**List<Computed>**](Computed.md) | | [optional] | + + + diff --git a/docs/Usersets.md b/docs/Usersets.md new file mode 100644 index 0000000..6ddd670 --- /dev/null +++ b/docs/Usersets.md @@ -0,0 +1,13 @@ + + +# Usersets + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**child** | [**List<Userset>**](Userset.md) | | [optional] | + + + diff --git a/docs/ValidationErrorMessageResponse.md b/docs/ValidationErrorMessageResponse.md new file mode 100644 index 0000000..de28998 --- /dev/null +++ b/docs/ValidationErrorMessageResponse.md @@ -0,0 +1,14 @@ + + +# ValidationErrorMessageResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**code** | **ErrorCode** | | [optional] | +|**message** | **String** | | [optional] | + + + diff --git a/docs/WriteAssertionsRequest.md b/docs/WriteAssertionsRequest.md new file mode 100644 index 0000000..0b655f1 --- /dev/null +++ b/docs/WriteAssertionsRequest.md @@ -0,0 +1,13 @@ + + +# WriteAssertionsRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**assertions** | [**List<Assertion>**](Assertion.md) | | | + + + diff --git a/docs/WriteAuthorizationModelRequest.md b/docs/WriteAuthorizationModelRequest.md new file mode 100644 index 0000000..a99da15 --- /dev/null +++ b/docs/WriteAuthorizationModelRequest.md @@ -0,0 +1,14 @@ + + +# WriteAuthorizationModelRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**typeDefinitions** | [**List<TypeDefinition>**](TypeDefinition.md) | | | +|**schemaVersion** | **String** | | [optional] | + + + diff --git a/docs/WriteAuthorizationModelResponse.md b/docs/WriteAuthorizationModelResponse.md new file mode 100644 index 0000000..5ba44eb --- /dev/null +++ b/docs/WriteAuthorizationModelResponse.md @@ -0,0 +1,13 @@ + + +# WriteAuthorizationModelResponse + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**authorizationModelId** | **String** | | [optional] | + + + diff --git a/docs/WriteRequest.md b/docs/WriteRequest.md new file mode 100644 index 0000000..4b6b36c --- /dev/null +++ b/docs/WriteRequest.md @@ -0,0 +1,15 @@ + + +# WriteRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**writes** | [**TupleKeys**](TupleKeys.md) | | [optional] | +|**deletes** | [**TupleKeys**](TupleKeys.md) | | [optional] | +|**authorizationModelId** | **String** | | [optional] | + + + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..033e24c4cdf41af1ab109bc7f253b2b887023340 GIT binary patch literal 63375 zcmb5VV{~QRw)Y#`wrv{~+qP{x72B%VwzFc}c2cp;N~)5ZbDrJayPv(!dGEd-##*zr z)#n-$y^sH|_dchh3@8{H5D*j;5D<{i*8l5IFJ|DjL!e)upfGNX(kojugZ3I`oH1PvW`wFW_ske0j@lB9bX zO;2)`y+|!@X(fZ1<2n!Qx*)_^Ai@Cv-dF&(vnudG?0CsddG_&Wtae(n|K59ew)6St z#dj7_(Cfwzh$H$5M!$UDd8=4>IQsD3xV=lXUq($;(h*$0^yd+b{qq63f0r_de#!o_ zXDngc>zy`uor)4A^2M#U*DC~i+dc<)Tb1Tv&~Ev@oM)5iJ4Sn#8iRw16XXuV50BS7 zdBL5Mefch(&^{luE{*5qtCZk$oFr3RH=H!c3wGR=HJ(yKc_re_X9pD` zJ;uxPzUfVpgU>DSq?J;I@a+10l0ONXPcDkiYcihREt5~T5Gb}sT0+6Q;AWHl`S5dV>lv%-p9l#xNNy7ZCr%cyqHY%TZ8Q4 zbp&#ov1*$#grNG#1vgfFOLJCaNG@K|2!W&HSh@3@Y%T?3YI75bJp!VP*$*!< z;(ffNS_;@RJ`=c7yX04!u3JP*<8jeqLHVJu#WV&v6wA!OYJS4h<_}^QI&97-;=ojW zQ-1t)7wnxG*5I%U4)9$wlv5Fr;cIizft@&N+32O%B{R1POm$oap@&f| zh+5J{>U6ftv|vAeKGc|zC=kO(+l7_cLpV}-D#oUltScw})N>~JOZLU_0{Ka2e1evz z{^a*ZrLr+JUj;)K&u2CoCAXLC2=fVScI(m_p~0FmF>>&3DHziouln?;sxW`NB}cSX z8?IsJB)Z=aYRz!X=yJn$kyOWK%rCYf-YarNqKzmWu$ZvkP12b4qH zhS9Q>j<}(*frr?z<%9hl*i^#@*O2q(Z^CN)c2c z>1B~D;@YpG?G!Yk+*yn4vM4sO-_!&m6+`k|3zd;8DJnxsBYtI;W3We+FN@|tQ5EW= z!VU>jtim0Mw#iaT8t_<+qKIEB-WwE04lBd%Letbml9N!?SLrEG$nmn7&W(W`VB@5S zaY=sEw2}i@F_1P4OtEw?xj4@D6>_e=m=797#hg}f*l^`AB|Y0# z9=)o|%TZFCY$SzgSjS|8AI-%J4x}J)!IMxY3_KYze`_I=c1nmrk@E8c9?MVRu)7+Ue79|)rBX7tVB7U|w4*h(;Gi3D9le49B38`wuv zp7{4X^p+K4*$@gU(Tq3K1a#3SmYhvI42)GzG4f|u zwQFT1n_=n|jpi=70-yE9LA+d*T8u z`=VmmXJ_f6WmZveZPct$Cgu^~gFiyL>Lnpj*6ee>*0pz=t$IJ}+rE zsf@>jlcG%Wx;Cp5x)YSVvB1$yyY1l&o zvwX=D7k)Dn;ciX?Z)Pn8$flC8#m`nB&(8?RSdBvr?>T9?E$U3uIX7T?$v4dWCa46 z+&`ot8ZTEgp7G+c52oHJ8nw5}a^dwb_l%MOh(ebVj9>_koQP^$2B~eUfSbw9RY$_< z&DDWf2LW;b0ZDOaZ&2^i^g+5uTd;GwO(-bbo|P^;CNL-%?9mRmxEw~5&z=X^Rvbo^WJW=n_%*7974RY}JhFv46> zd}`2|qkd;89l}R;i~9T)V-Q%K)O=yfVKNM4Gbacc7AOd>#^&W&)Xx!Uy5!BHnp9kh z`a(7MO6+Ren#>R^D0K)1sE{Bv>}s6Rb9MT14u!(NpZOe-?4V=>qZ>}uS)!y~;jEUK z&!U7Fj&{WdgU#L0%bM}SYXRtM5z!6M+kgaMKt%3FkjWYh=#QUpt$XX1!*XkpSq-pl zhMe{muh#knk{9_V3%qdDcWDv}v)m4t9 zQhv{;} zc{}#V^N3H>9mFM8`i`0p+fN@GqX+kl|M94$BK3J-X`Hyj8r!#x6Vt(PXjn?N)qedP z=o1T^#?1^a{;bZ&x`U{f?}TMo8ToN zkHj5v|}r}wDEi7I@)Gj+S1aE-GdnLN+$hw!=DzglMaj#{qjXi_dwpr|HL(gcCXwGLEmi|{4&4#OZ4ChceA zKVd4K!D>_N=_X;{poT~4Q+!Le+ZV>=H7v1*l%w`|`Dx8{)McN@NDlQyln&N3@bFpV z_1w~O4EH3fF@IzJ9kDk@7@QctFq8FbkbaH7K$iX=bV~o#gfh?2JD6lZf(XP>~DACF)fGFt)X%-h1yY~MJU{nA5 ze2zxWMs{YdX3q5XU*9hOH0!_S24DOBA5usB+Ws$6{|AMe*joJ?RxfV}*7AKN9V*~J zK+OMcE@bTD>TG1*yc?*qGqjBN8mgg@h1cJLDv)0!WRPIkC` zZrWXrceVw;fB%3`6kq=a!pq|hFIsQ%ZSlo~)D z|64!aCnw-?>}AG|*iOl44KVf8@|joXi&|)1rB;EQWgm+iHfVbgllP$f!$Wf42%NO5b(j9Bw6L z;0dpUUK$5GX4QbMlTmLM_jJt!ur`_0~$b#BB7FL*%XFf<b__1o)Ao3rlobbN8-(T!1d-bR8D3S0@d zLI!*GMb5s~Q<&sjd}lBb8Nr0>PqE6_!3!2d(KAWFxa{hm`@u|a(%#i(#f8{BP2wbs zt+N_slWF4IF_O|{w`c~)Xvh&R{Au~CFmW#0+}MBd2~X}t9lz6*E7uAD`@EBDe$>7W zzPUkJx<`f$0VA$=>R57^(K^h86>09?>_@M(R4q($!Ck6GG@pnu-x*exAx1jOv|>KH zjNfG5pwm`E-=ydcb+3BJwuU;V&OS=6yM^4Jq{%AVqnTTLwV`AorIDD}T&jWr8pB&j28fVtk_y*JRP^t@l*($UZ z6(B^-PBNZ+z!p?+e8@$&jCv^EWLb$WO=}Scr$6SM*&~B95El~;W_0(Bvoha|uQ1T< zO$%_oLAwf1bW*rKWmlD+@CP&$ObiDy=nh1b2ejz%LO9937N{LDe7gle4i!{}I$;&Y zkexJ9Ybr+lrCmKWg&}p=`2&Gf10orS?4$VrzWidT=*6{KzOGMo?KI0>GL0{iFWc;C z+LPq%VH5g}6V@-tg2m{C!-$fapJ9y}c$U}aUmS{9#0CM*8pC|sfer!)nG7Ji>mfRh z+~6CxNb>6eWKMHBz-w2{mLLwdA7dA-qfTu^A2yG1+9s5k zcF=le_UPYG&q!t5Zd_*E_P3Cf5T6821bO`daa`;DODm8Ih8k89=RN;-asHIigj`n=ux>*f!OC5#;X5i;Q z+V!GUy0|&Y_*8k_QRUA8$lHP;GJ3UUD08P|ALknng|YY13)}!!HW@0z$q+kCH%xet zlWf@BXQ=b=4}QO5eNnN~CzWBbHGUivG=`&eWK}beuV*;?zt=P#pM*eTuy3 zP}c#}AXJ0OIaqXji78l;YrP4sQe#^pOqwZUiiN6^0RCd#D271XCbEKpk`HI0IsN^s zES7YtU#7=8gTn#lkrc~6)R9u&SX6*Jk4GFX7){E)WE?pT8a-%6P+zS6o&A#ml{$WX zABFz#i7`DDlo{34)oo?bOa4Z_lNH>n;f0nbt$JfAl~;4QY@}NH!X|A$KgMmEsd^&Y zt;pi=>AID7ROQfr;MsMtClr5b0)xo|fwhc=qk33wQ|}$@?{}qXcmECh>#kUQ-If0$ zseb{Wf4VFGLNc*Rax#P8ko*=`MwaR-DQ8L8V8r=2N{Gaips2_^cS|oC$+yScRo*uF zUO|5=?Q?{p$inDpx*t#Xyo6=s?bbN}y>NNVxj9NZCdtwRI70jxvm3!5R7yiWjREEd zDUjrsZhS|P&|Ng5r+f^kA6BNN#|Se}_GF>P6sy^e8kBrgMv3#vk%m}9PCwUWJg-AD zFnZ=}lbi*mN-AOm zCs)r=*YQAA!`e#1N>aHF=bb*z*hXH#Wl$z^o}x##ZrUc=kh%OHWhp=7;?8%Xj||@V?1c ziWoaC$^&04;A|T)!Zd9sUzE&$ODyJaBpvqsw19Uiuq{i#VK1!htkdRWBnb z`{rat=nHArT%^R>u#CjjCkw-7%g53|&7z-;X+ewb?OLWiV|#nuc8mp*LuGSi3IP<<*Wyo9GKV7l0Noa4Jr0g3p_$ z*R9{qn=?IXC#WU>48-k5V2Oc_>P;4_)J@bo1|pf=%Rcbgk=5m)CJZ`caHBTm3%!Z9 z_?7LHr_BXbKKr=JD!%?KhwdYSdu8XxPoA{n8^%_lh5cjRHuCY9Zlpz8g+$f@bw@0V z+6DRMT9c|>1^3D|$Vzc(C?M~iZurGH2pXPT%F!JSaAMdO%!5o0uc&iqHx?ImcX6fI zCApkzc~OOnfzAd_+-DcMp&AOQxE_EsMqKM{%dRMI5`5CT&%mQO?-@F6tE*xL?aEGZ z8^wH@wRl`Izx4sDmU>}Ym{ybUm@F83qqZPD6nFm?t?(7>h*?`fw)L3t*l%*iw0Qu#?$5eq!Qc zpQvqgSxrd83NsdO@lL6#{%lsYXWen~d3p4fGBb7&5xqNYJ)yn84!e1PmPo7ChVd%4 zHUsV0Mh?VpzZD=A6%)Qrd~i7 z96*RPbid;BN{Wh?adeD_p8YU``kOrGkNox3D9~!K?w>#kFz!4lzOWR}puS(DmfjJD z`x0z|qB33*^0mZdM&6$|+T>fq>M%yoy(BEjuh9L0>{P&XJ3enGpoQRx`v6$txXt#c z0#N?b5%srj(4xmPvJxrlF3H%OMB!jvfy z;wx8RzU~lb?h_}@V=bh6p8PSb-dG|-T#A?`c&H2`_!u+uenIZe`6f~A7r)`9m8atC zt(b|6Eg#!Q*DfRU=Ix`#B_dK)nnJ_+>Q<1d7W)eynaVn`FNuN~%B;uO2}vXr5^zi2 z!ifIF5@Zlo0^h~8+ixFBGqtweFc`C~JkSq}&*a3C}L?b5Mh-bW=e)({F_g4O3 zb@SFTK3VD9QuFgFnK4Ve_pXc3{S$=+Z;;4+;*{H}Rc;845rP?DLK6G5Y-xdUKkA6E3Dz&5f{F^FjJQ(NSpZ8q-_!L3LL@H* zxbDF{gd^U3uD;)a)sJwAVi}7@%pRM&?5IaUH%+m{E)DlA_$IA1=&jr{KrhD5q&lTC zAa3c)A(K!{#nOvenH6XrR-y>*4M#DpTTOGQEO5Jr6kni9pDW`rvY*fs|ItV;CVITh z=`rxcH2nEJpkQ^(;1c^hfb8vGN;{{oR=qNyKtR1;J>CByul*+=`NydWnSWJR#I2lN zTvgnR|MBx*XFsfdA&;tr^dYaqRZp*2NwkAZE6kV@1f{76e56eUmGrZ>MDId)oqSWw z7d&r3qfazg+W2?bT}F)4jD6sWaw`_fXZGY&wnGm$FRPFL$HzVTH^MYBHWGCOk-89y zA+n+Q6EVSSCpgC~%uHfvyg@ufE^#u?JH?<73A}jj5iILz4Qqk5$+^U(SX(-qv5agK znUkfpke(KDn~dU0>gdKqjTkVk`0`9^0n_wzXO7R!0Thd@S;U`y)VVP&mOd-2 z(hT(|$=>4FY;CBY9#_lB$;|Wd$aOMT5O_3}DYXEHn&Jrc3`2JiB`b6X@EUOD zVl0S{ijm65@n^19T3l%>*;F(?3r3s?zY{thc4%AD30CeL_4{8x6&cN}zN3fE+x<9; zt2j1RRVy5j22-8U8a6$pyT+<`f+x2l$fd_{qEp_bfxfzu>ORJsXaJn4>U6oNJ#|~p z`*ZC&NPXl&=vq2{Ne79AkQncuxvbOG+28*2wU$R=GOmns3W@HE%^r)Fu%Utj=r9t` zd;SVOnA(=MXgnOzI2@3SGKHz8HN~Vpx&!Ea+Df~`*n@8O=0!b4m?7cE^K*~@fqv9q zF*uk#1@6Re_<^9eElgJD!nTA@K9C732tV~;B`hzZ321Ph=^BH?zXddiu{Du5*IPg} zqDM=QxjT!Rp|#Bkp$(mL)aar)f(dOAXUiw81pX0DC|Y4;>Vz>>DMshoips^8Frdv} zlTD=cKa48M>dR<>(YlLPOW%rokJZNF2gp8fwc8b2sN+i6&-pHr?$rj|uFgktK@jg~ zIFS(%=r|QJ=$kvm_~@n=ai1lA{7Z}i+zj&yzY+!t$iGUy|9jH#&oTNJ;JW-3n>DF+ z3aCOzqn|$X-Olu_p7brzn`uk1F*N4@=b=m;S_C?#hy{&NE#3HkATrg?enaVGT^$qIjvgc61y!T$9<1B@?_ibtDZ{G zeXInVr5?OD_nS_O|CK3|RzzMmu+8!#Zb8Ik;rkIAR%6?$pN@d<0dKD2c@k2quB%s( zQL^<_EM6ow8F6^wJN1QcPOm|ehA+dP(!>IX=Euz5qqIq}Y3;ibQtJnkDmZ8c8=Cf3 zu`mJ!Q6wI7EblC5RvP*@)j?}W=WxwCvF3*5Up_`3*a~z$`wHwCy)2risye=1mSp%p zu+tD6NAK3o@)4VBsM!@);qgsjgB$kkCZhaimHg&+k69~drbvRTacWKH;YCK(!rC?8 zP#cK5JPHSw;V;{Yji=55X~S+)%(8fuz}O>*F3)hR;STU`z6T1aM#Wd+FP(M5*@T1P z^06O;I20Sk!bxW<-O;E081KRdHZrtsGJflFRRFS zdi5w9OVDGSL3 zNrC7GVsGN=b;YH9jp8Z2$^!K@h=r-xV(aEH@#JicPy;A0k1>g1g^XeR`YV2HfmqXY zYbRwaxHvf}OlCAwHoVI&QBLr5R|THf?nAevV-=~V8;gCsX>jndvNOcFA+DI+zbh~# zZ7`qNk&w+_+Yp!}j;OYxIfx_{f0-ONc?mHCiCUak=>j>~>YR4#w# zuKz~UhT!L~GfW^CPqG8Lg)&Rc6y^{%3H7iLa%^l}cw_8UuG;8nn9)kbPGXS}p3!L_ zd#9~5CrH8xtUd?{d2y^PJg+z(xIfRU;`}^=OlehGN2=?}9yH$4Rag}*+AWotyxfCJ zHx=r7ZH>j2kV?%7WTtp+-HMa0)_*DBBmC{sd$)np&GEJ__kEd`xB5a2A z*J+yx>4o#ZxwA{;NjhU*1KT~=ZK~GAA;KZHDyBNTaWQ1+;tOFFthnD)DrCn`DjBZ% zk$N5B4^$`n^jNSOr=t(zi8TN4fpaccsb`zOPD~iY=UEK$0Y70bG{idLx@IL)7^(pL z{??Bnu=lDeguDrd%qW1)H)H`9otsOL-f4bSu};o9OXybo6J!Lek`a4ff>*O)BDT_g z<6@SrI|C9klY(>_PfA^qai7A_)VNE4c^ZjFcE$Isp>`e5fLc)rg@8Q_d^Uk24$2bn z9#}6kZ2ZxS9sI(RqT7?El2@B+($>eBQrNi_k#CDJ8D9}8$mmm z4oSKO^F$i+NG)-HE$O6s1--6EzJa?C{x=QgK&c=)b(Q9OVoAXYEEH20G|q$}Hue%~ zO3B^bF=t7t48sN zWh_zA`w~|){-!^g?6Mqf6ieV zFx~aPUOJGR=4{KsW7I?<=J2|lY`NTU=lt=%JE9H1vBpkcn=uq(q~=?iBt_-r(PLBM zP-0dxljJO>4Wq-;stY)CLB4q`-r*T$!K2o}?E-w_i>3_aEbA^MB7P5piwt1dI-6o!qWCy0 ztYy!x9arGTS?kabkkyv*yxvsPQ7Vx)twkS6z2T@kZ|kb8yjm+^$|sEBmvACeqbz)RmxkkDQX-A*K!YFziuhwb|ym>C$}U|J)4y z$(z#)GH%uV6{ec%Zy~AhK|+GtG8u@c884Nq%w`O^wv2#A(&xH@c5M`Vjk*SR_tJnq z0trB#aY)!EKW_}{#L3lph5ow=@|D5LzJYUFD6 z7XnUeo_V0DVSIKMFD_T0AqAO|#VFDc7c?c-Q%#u00F%!_TW1@JVnsfvm@_9HKWflBOUD~)RL``-!P;(bCON_4eVdduMO>?IrQ__*zE@7(OX zUtfH@AX*53&xJW*Pu9zcqxGiM>xol0I~QL5B%Toog3Jlenc^WbVgeBvV8C8AX^Vj& z^I}H})B=VboO%q1;aU5ACMh{yK4J;xlMc`jCnZR^!~LDs_MP&8;dd@4LDWw~*>#OT zeZHwdQWS!tt5MJQI~cw|Ka^b4c|qyd_ly(+Ql2m&AAw^ zQeSXDOOH!!mAgzAp0z)DD>6Xo``b6QwzUV@w%h}Yo>)a|xRi$jGuHQhJVA%>)PUvK zBQ!l0hq<3VZ*RnrDODP)>&iS^wf64C;MGqDvx>|p;35%6(u+IHoNbK z;Gb;TneFo*`zUKS6kwF*&b!U8e5m4YAo03a_e^!5BP42+r)LFhEy?_7U1IR<; z^0v|DhCYMSj<-;MtY%R@Fg;9Kky^pz_t2nJfKWfh5Eu@_l{^ph%1z{jkg5jQrkvD< z#vdK!nku*RrH~TdN~`wDs;d>XY1PH?O<4^U4lmA|wUW{Crrv#r%N>7k#{Gc44Fr|t z@UZP}Y-TrAmnEZ39A*@6;ccsR>)$A)S>$-Cj!=x$rz7IvjHIPM(TB+JFf{ehuIvY$ zsDAwREg*%|=>Hw$`us~RP&3{QJg%}RjJKS^mC_!U;E5u>`X`jW$}P`Mf}?7G7FX#{ zE(9u1SO;3q@ZhDL9O({-RD+SqqPX)`0l5IQu4q)49TUTkxR(czeT}4`WV~pV*KY&i zAl3~X%D2cPVD^B43*~&f%+Op)wl<&|D{;=SZwImydWL6@_RJjxP2g)s=dH)u9Npki zs~z9A+3fj0l?yu4N0^4aC5x)Osnm0qrhz@?nwG_`h(71P znbIewljU%T*cC=~NJy|)#hT+lx#^5MuDDnkaMb*Efw9eThXo|*WOQzJ*#3dmRWm@! zfuSc@#kY{Um^gBc^_Xdxnl!n&y&}R4yAbK&RMc+P^Ti;YIUh|C+K1|=Z^{nZ}}rxH*v{xR!i%qO~o zTr`WDE@k$M9o0r4YUFFeQO7xCu_Zgy)==;fCJ94M_rLAv&~NhfvcLWCoaGg2ao~3e zBG?Ms9B+efMkp}7BhmISGWmJsKI@a8b}4lLI48oWKY|8?zuuNc$lt5Npr+p7a#sWu zh!@2nnLBVJK!$S~>r2-pN||^w|fY`CT{TFnJy`B|e5;=+_v4l8O-fkN&UQbA4NKTyntd zqK{xEKh}U{NHoQUf!M=2(&w+eef77VtYr;xs%^cPfKLObyOV_9q<(%76-J%vR>w9!us-0c-~Y?_EVS%v!* z15s2s3eTs$Osz$JayyH|5nPAIPEX=U;r&p;K14G<1)bvn@?bM5kC{am|C5%hyxv}a z(DeSKI5ZfZ1*%dl8frIX2?);R^^~LuDOpNpk-2R8U1w92HmG1m&|j&J{EK=|p$;f9 z7Rs5|jr4r8k5El&qcuM+YRlKny%t+1CgqEWO>3;BSRZi(LA3U%Jm{@{y+A+w(gzA< z7dBq6a1sEWa4cD0W7=Ld9z0H7RI^Z7vl(bfA;72j?SWCo`#5mVC$l1Q2--%V)-uN* z9ha*s-AdfbDZ8R8*fpwjzx=WvOtmSzGFjC#X)hD%Caeo^OWjS(3h|d9_*U)l%{Ab8 zfv$yoP{OuUl@$(-sEVNt{*=qi5P=lpxWVuz2?I7Dc%BRc+NGNw+323^ z5BXGfS71oP^%apUo(Y#xkxE)y?>BFzEBZ}UBbr~R4$%b7h3iZu3S(|A;&HqBR{nK& z$;GApNnz=kNO^FL&nYcfpB7Qg;hGJPsCW44CbkG1@l9pn0`~oKy5S777uH)l{irK!ru|X+;4&0D;VE*Ii|<3P zUx#xUqvZT5kVQxsF#~MwKnv7;1pR^0;PW@$@T7I?s`_rD1EGUdSA5Q(C<>5SzE!vw z;{L&kKFM-MO>hy#-8z`sdVx})^(Dc-dw;k-h*9O2_YZw}|9^y-|8RQ`BWJUJL(Cer zP5Z@fNc>pTXABbTRY-B5*MphpZv6#i802giwV&SkFCR zGMETyUm(KJbh+&$8X*RB#+{surjr;8^REEt`2&Dubw3$mx>|~B5IKZJ`s_6fw zKAZx9&PwBqW1Oz0r0A4GtnZd7XTKViX2%kPfv+^X3|_}RrQ2e3l=KG_VyY`H?I5&CS+lAX5HbA%TD9u6&s#v!G> zzW9n4J%d5ye7x0y`*{KZvqyXUfMEE^ZIffzI=Hh|3J}^yx7eL=s+TPH(Q2GT-sJ~3 zI463C{(ag7-hS1ETtU;_&+49ABt5!A7CwLwe z=SoA8mYZIQeU;9txI=zcQVbuO%q@E)JI+6Q!3lMc=Gbj(ASg-{V27u>z2e8n;Nc*pf}AqKz1D>p9G#QA+7mqqrEjGfw+85Uyh!=tTFTv3|O z+)-kFe_8FF_EkTw!YzwK^Hi^_dV5x-Ob*UWmD-})qKj9@aE8g240nUh=g|j28^?v7 zHRTBo{0KGaWBbyX2+lx$wgXW{3aUab6Bhm1G1{jTC7ota*JM6t+qy)c5<@ zpc&(jVdTJf(q3xB=JotgF$X>cxh7k*(T`-V~AR+`%e?YOeALQ2Qud( zz35YizXt(aW3qndR}fTw1p()Ol4t!D1pitGNL95{SX4ywzh0SF;=!wf=?Q?_h6!f* zh7<+GFi)q|XBsvXZ^qVCY$LUa{5?!CgwY?EG;*)0ceFe&=A;!~o`ae}Z+6me#^sv- z1F6=WNd6>M(~ z+092z>?Clrcp)lYNQl9jN-JF6n&Y0mp7|I0dpPx+4*RRK+VQI~>en0Dc;Zfl+x z_e_b7s`t1_A`RP3$H}y7F9_na%D7EM+**G_Z0l_nwE+&d_kc35n$Fxkd4r=ltRZhh zr9zER8>j(EdV&Jgh(+i}ltESBK62m0nGH6tCBr90!4)-`HeBmz54p~QP#dsu%nb~W z7sS|(Iydi>C@6ZM(Us!jyIiszMkd)^u<1D+R@~O>HqZIW&kearPWmT>63%_t2B{_G zX{&a(gOYJx!Hq=!T$RZ&<8LDnxsmx9+TBL0gTk$|vz9O5GkK_Yx+55^R=2g!K}NJ3 zW?C;XQCHZl7H`K5^BF!Q5X2^Mj93&0l_O3Ea3!Ave|ixx+~bS@Iv18v2ctpSt4zO{ zp#7pj!AtDmti$T`e9{s^jf(ku&E|83JIJO5Qo9weT6g?@vX!{7)cNwymo1+u(YQ94 zopuz-L@|5=h8A!(g-MXgLJC0MA|CgQF8qlonnu#j z;uCeq9ny9QSD|p)9sp3ebgY3rk#y0DA(SHdh$DUm^?GI<>%e1?&}w(b zdip1;P2Z=1wM+$q=TgLP$}svd!vk+BZ@h<^4R=GS2+sri7Z*2f`9 z5_?i)xj?m#pSVchk-SR!2&uNhzEi+#5t1Z$o0PoLGz*pT64%+|Wa+rd5Z}60(j?X= z{NLjtgRb|W?CUADqOS@(*MA-l|E342NxRaxLTDqsOyfWWe%N(jjBh}G zm7WPel6jXijaTiNita+z(5GCO0NM=Melxud57PP^d_U## zbA;9iVi<@wr0DGB8=T9Ab#2K_#zi=$igyK48@;V|W`fg~7;+!q8)aCOo{HA@vpSy-4`^!ze6-~8|QE||hC{ICKllG9fbg_Y7v z$jn{00!ob3!@~-Z%!rSZ0JO#@>|3k10mLK0JRKP-Cc8UYFu>z93=Ab-r^oL2 zl`-&VBh#=-?{l1TatC;VweM^=M7-DUE>m+xO7Xi6vTEsReyLs8KJ+2GZ&rxw$d4IT zPXy6pu^4#e;;ZTsgmG+ZPx>piodegkx2n0}SM77+Y*j^~ICvp#2wj^BuqRY*&cjmL zcKp78aZt>e{3YBb4!J_2|K~A`lN=u&5j!byw`1itV(+Q_?RvV7&Z5XS1HF)L2v6ji z&kOEPmv+k_lSXb{$)of~(BkO^py&7oOzpjdG>vI1kcm_oPFHy38%D4&A4h_CSo#lX z2#oqMCTEP7UvUR3mwkPxbl8AMW(e{ARi@HCYLPSHE^L<1I}OgZD{I#YH#GKnpRmW3 z2jkz~Sa(D)f?V?$gNi?6)Y;Sm{&?~2p=0&BUl_(@hYeX8YjaRO=IqO7neK0RsSNdYjD zaw$g2sG(>JR=8Iz1SK4`*kqd_3-?;_BIcaaMd^}<@MYbYisWZm2C2|Np_l|8r9yM|JkUngSo@?wci(7&O9a z%|V(4C1c9pps0xxzPbXH=}QTxc2rr7fXk$9`a6TbWKPCz&p=VsB8^W96W=BsB|7bc zf(QR8&Ktj*iz)wK&mW`#V%4XTM&jWNnDF56O+2bo<3|NyUhQ%#OZE8$Uv2a@J>D%t zMVMiHh?es!Ex19q&6eC&L=XDU_BA&uR^^w>fpz2_`U87q_?N2y;!Z!bjoeKrzfC)} z?m^PM=(z{%n9K`p|7Bz$LuC7!>tFOuN74MFELm}OD9?%jpT>38J;=1Y-VWtZAscaI z_8jUZ#GwWz{JqvGEUmL?G#l5E=*m>`cY?m*XOc*yOCNtpuIGD+Z|kn4Xww=BLrNYS zGO=wQh}Gtr|7DGXLF%|`G>J~l{k^*{;S-Zhq|&HO7rC_r;o`gTB7)uMZ|WWIn@e0( zX$MccUMv3ABg^$%_lNrgU{EVi8O^UyGHPNRt%R!1#MQJn41aD|_93NsBQhP80yP<9 zG4(&0u7AtJJXLPcqzjv`S~5;Q|5TVGccN=Uzm}K{v)?f7W!230C<``9(64}D2raRU zAW5bp%}VEo{4Rko`bD%Ehf=0voW?-4Mk#d3_pXTF!-TyIt6U+({6OXWVAa;s-`Ta5 zTqx&8msH3+DLrVmQOTBOAj=uoxKYT3DS1^zBXM?1W+7gI!aQNPYfUl{3;PzS9*F7g zWJN8x?KjBDx^V&6iCY8o_gslO16=kh(|Gp)kz8qlQ`dzxQv;)V&t+B}wwdi~uBs4? zu~G|}y!`3;8#vIMUdyC7YEx6bb^1o}G!Jky4cN?BV9ejBfN<&!4M)L&lRKiuMS#3} z_B}Nkv+zzxhy{dYCW$oGC&J(Ty&7%=5B$sD0bkuPmj7g>|962`(Q{ZZMDv%YMuT^KweiRDvYTEop3IgFv#)(w>1 zSzH>J`q!LK)c(AK>&Ib)A{g`Fdykxqd`Yq@yB}E{gnQV$K!}RsgMGWqC3DKE(=!{}ekB3+(1?g}xF>^icEJbc z5bdxAPkW90atZT+&*7qoLqL#p=>t-(-lsnl2XMpZcYeW|o|a322&)yO_8p(&Sw{|b zn(tY$xn5yS$DD)UYS%sP?c|z>1dp!QUD)l;aW#`%qMtQJjE!s2z`+bTSZmLK7SvCR z=@I4|U^sCwZLQSfd*ACw9B@`1c1|&i^W_OD(570SDLK`MD0wTiR8|$7+%{cF&){$G zU~|$^Ed?TIxyw{1$e|D$050n8AjJvvOWhLtLHbSB|HIfhMpqVf>AF&}ZQHhOJ14Bz zww+XL+qP}nww+W`F>b!by|=&a(cM4JIDhsTXY8@|ntQG}-}jm0&Bcj|LV(#sc=BNS zRjh;k9l>EdAFdd)=H!U`~$WP*}~^3HZ_?H>gKw>NBa;tA8M1{>St|)yDF_=~{KEPAGkg3VB`QCHol!AQ0|?e^W?81f{@()Wy!vQ$bY; z0ctx)l7VK83d6;dp!s{Nu=SwXZ8lHQHC*J2g@P0a={B8qHdv(+O3wV=4-t4HK1+smO#=S; z3cSI#Nh+N@AqM#6wPqjDmQM|x95JG|l1#sAU|>I6NdF*G@bD?1t|ytHlkKD+z9}#j zbU+x_cR-j9yX4s{_y>@zk*ElG1yS({BInGJcIT>l4N-DUs6fufF#GlF2lVUNOAhJT zGZThq54GhwCG(h4?yWR&Ax8hU<*U)?g+HY5-@{#ls5CVV(Wc>Bavs|l<}U|hZn z_%m+5i_gaakS*Pk7!v&w3&?R5Xb|AkCdytTY;r+Z7f#Id=q+W8cn)*9tEet=OG+Y} z58U&!%t9gYMx2N=8F?gZhIjtkH!`E*XrVJ?$2rRxLhV1z82QX~PZi8^N5z6~f-MUE zLKxnNoPc-SGl7{|Oh?ZM$jq67sSa)Wr&3)0YxlJt(vKf!-^L)a|HaPv*IYXb;QmWx zsqM>qY;tpK3RH-omtta+Xf2Qeu^$VKRq7`e$N-UCe1_2|1F{L3&}M0XbJ@^xRe&>P zRdKTgD6601x#fkDWkoYzRkxbn#*>${dX+UQ;FbGnTE-+kBJ9KPn)501#_L4O_k`P3 zm+$jI{|EC?8BXJY{P~^f-{**E53k%kVO$%p+=H5DiIdwMmUo>2euq0UzU90FWL!>; z{5@sd0ecqo5j!6AH@g6Mf3keTP$PFztq}@)^ZjK;H6Go$#SV2|2bAFI0%?aXgVH$t zb4Kl`$Xh8qLrMbZUS<2*7^F0^?lrOE=$DHW+O zvLdczsu0^TlA6RhDy3=@s!k^1D~Awulk!Iyo#}W$xq8{yTAK!CLl={H0@YGhg-g~+ z(u>pss4k#%8{J%~%8=H5!T`rqK6w^es-cNVE}=*lP^`i&K4R=peg1tdmT~UAbDKc& zg%Y*1E{hBf<)xO>HDWV7BaMWX6FW4ou1T2m^6{Jb!Su1UaCCYY8RR8hAV$7ho|FyEyP~ zEgK`@%a$-C2`p zV*~G>GOAs*3KN;~IY_UR$ISJxB(N~K>=2C2V6>xTmuX4klRXdrJd&UPAw7&|KEwF8Zcy2j-*({gSNR1^p02Oj88GN9a_Hq;Skdp}kO0;FLbje%2ZvPiltDZgv^ z#pb4&m^!79;O8F+Wr9X71laPY!CdNXG?J6C9KvdAE2xWW1>U~3;0v≫L+crb^Bz zc+Nw%zgpZ6>!A3%lau!Pw6`Y#WPVBtAfKSsqwYDWQK-~ zz(mx=nJ6-8t`YXB{6gaZ%G}Dmn&o500Y}2Rd?e&@=hBEmB1C=$OMBfxX__2c2O4K2#(0ksclP$SHp*8jq-1&(<6(#=6&H`Nlc2RVC4->r6U}sTY<1? zn@tv7XwUs-c>Lcmrm5AE0jHI5={WgHIow6cX=UK)>602(=arbuAPZ37;{HTJSIO%9EL`Et5%J7$u_NaC(55x zH^qX^H}*RPDx)^c46x>js=%&?y?=iFs^#_rUl@*MgLD92E5y4B7#EDe9yyn*f-|pQ zi>(!bIg6zY5fLSn@;$*sN|D2A{}we*7+2(4&EhUV%Qqo5=uuN^xt_hll7=`*mJq6s zCWUB|s$)AuS&=)T&_$w>QXHqCWB&ndQ$y4-9fezybZb0bYD^zeuZ>WZF{rc>c4s`` zgKdppTB|o>L1I1hAbnW%H%EkFt%yWC|0~+o7mIyFCTyb?@*Ho)eu(x`PuO8pLikN> z6YeI`V?AUWD(~3=8>}a6nZTu~#QCK(H0+4!ql3yS`>JX;j4+YkeG$ZTm33~PLa3L} zksw7@%e-mBM*cGfz$tS4LC^SYVdBLsR}nAprwg8h2~+Cv*W0%izK+WPVK}^SsL5R_ zpA}~G?VNhJhqx2he2;2$>7>DUB$wN9_-adL@TqVLe=*F8Vsw-yho@#mTD6*2WAr6B zjtLUh`E(;#p0-&$FVw(r$hn+5^Z~9J0}k;j$jL1;?2GN9s?}LASm?*Rvo@?E+(}F& z+=&M-n`5EIz%%F^e)nnWjkQUdG|W^~O|YeY4Fz}>qH2juEere}vN$oJN~9_Th^&b{ z%IBbET*E8%C@jLTxV~h#mxoRrJCF{!CJOghjuKOyl_!Jr?@4Upo7u>fTGtfm|CH2v z&9F+>;6aFbYXLj3{yZ~Yn1J2%!)A3~j2$`jOy{XavW@t)g}}KUVjCWG0OUc7aBc=2 zR3^u=dT47=5SmT{K1aGaVZkOx|24T-J0O$b9dfB25J|7yb6frwS6wZ1^y%EWOm}S< zc1SdYhfsdLG*FB-;!QLV3D!d~hnXTGVQVck9x%=B(Kk8c3y%f0nR95_TbY;l=obSl zEE@fp0|8Q$b3(+DXh?d0FEloGhO0#11CLQT5qtEckBLe-VN-I>9ys}PVK0r;0!jIG zH_q$;a`3Xv9P_V2ekV1SMzd#SKo<1~Dq2?M{(V;AwhH_2x@mN$=|=cG0<3o^j_0OF z7|WJ-f2G=7sA4NVGU2X5`o*D2T7(MbmZ2(oipooE{R?9!{WxX!%ofhsrPAxoIk!Kr z>I$a{Zq=%KaLrDCIL^gmA3z{2z%Wkr)b$QHcNUA^QwydWMJmxymO0QS22?mo%4(Md zgME(zE}ub--3*wGjV`3eBMCQG-@Gel1NKZDGuqobN|mAt0{@ZC9goI|BSmGBTUZ(`Xt z^e2LiMg?6E?G*yw(~K8lO(c4)RY7UWxrXzW^iCg-P41dUiE(i+gDmmAoB?XOB}+Ln z_}rApiR$sqNaT4frw69Wh4W?v(27IlK$Toy<1o)GeF+sGzYVeJ`F)3`&2WDi^_v67 zg;@ehwl3=t+}(DJtOYO!s`jHyo-}t@X|U*9^sIfaZfh;YLqEFmZ^E;$_XK}%eq;>0 zl?+}*kh)5jGA}3daJ*v1knbW0GusR1+_xD`MFPZc3qqYMXd>6*5?%O5pC7UVs!E-` zuMHc6igdeFQ`plm+3HhP)+3I&?5bt|V8;#1epCsKnz0%7m9AyBmz06r90n~9o;K30 z=fo|*`Qq%dG#23bVV9Jar*zRcV~6fat9_w;x-quAwv@BkX0{9e@y0NB(>l3#>82H6 z^US2<`=M@6zX=Pz>kb8Yt4wmeEo%TZ=?h+KP2e3U9?^Nm+OTx5+mVGDvgFee%}~~M zK+uHmj44TVs}!A}0W-A92LWE%2=wIma(>jYx;eVB*%a>^WqC7IVN9{o?iw{e4c=CG zC#i=cRJZ#v3 zF^9V+7u?W=xCY%2dvV_0dCP%5)SH*Xm|c#rXhwEl*^{Ar{NVoK*H6f5qCSy`+|85e zjGaKqB)p7zKNKI)iWe6A9qkl=rTjs@W1Crh(3G57qdT0w2ig^{*xerzm&U>YY{+fZbkQ#;^<$JniUifmAuEd^_M(&?sTrd(a*cD! zF*;`m80MrZ^> zaF{}rDhEFLeH#`~rM`o903FLO?qw#_Wyb5}13|0agjSTVkSI6Uls)xAFZifu@N~PM zQ%o?$k)jbY0u|45WTLAirUg3Zi1E&=G#LnSa89F3t3>R?RPcmkF}EL-R!OF_r1ZN` z?x-uHH+4FEy>KrOD-$KHg3$-Xl{Cf0;UD4*@eb~G{CK-DXe3xpEEls?SCj^p z$Uix(-j|9f^{z0iUKXcZQen}*`Vhqq$T?^)Ab2i|joV;V-qw5reCqbh(8N)c%!aB< zVs+l#_)*qH_iSZ_32E~}>=wUO$G_~k0h@ch`a6Wa zsk;<)^y=)cPpHt@%~bwLBy;>TNrTf50BAHUOtt#9JRq1ro{w80^sm-~fT>a$QC;<| zZIN%&Uq>8`Js_E((_1sewXz3VlX|-n8XCfScO`eL|H&2|BPZhDn}UAf_6s}|!XpmUr90v|nCutzMjb9|&}#Y7fj_)$alC zM~~D6!dYxhQof{R;-Vp>XCh1AL@d-+)KOI&5uKupy8PryjMhTpCZnSIQ9^Aq+7=Mb zCYCRvm4;H=Q8nZWkiWdGspC_Wvggg|7N`iED~Eap)Th$~wsxc(>(KI>{i#-~Dd8iQ zzonqc9DW1w4a*}k`;rxykUk+~N)|*I?@0901R`xy zN{20p@Ls<%`1G1Bx87Vm6Z#CA`QR(x@t8Wc?tpaunyV^A*-9K9@P>hAWW9Ev)E$gb z<(t?Te6GcJX2&0% z403pe>e)>m-^qlJU^kYIH)AutgOnq!J>FoMXhA-aEx-((7|(*snUyxa+5$wx8FNxS zKuVAVWArlK#kDzEM zqR?&aXIdyvxq~wF?iYPho*(h?k zD(SBpRDZ}z$A})*Qh!9&pZZRyNixD!8)B5{SK$PkVET(yd<8kImQ3ILe%jhx8Ga-1 zE}^k+Eo^?c4Y-t2_qXiVwW6i9o2qosBDj%DRPNT*UXI0=D9q{jB*22t4HHcd$T&Xi zT=Vte*Gz2E^qg%b7ev04Z&(;=I4IUtVJkg<`N6i7tjUn-lPE(Y4HPyJKcSjFnEzCH zPO(w%LmJ_=D~}PyfA91H4gCaf-qur3_KK}}>#9A}c5w@N;-#cHph=x}^mQ3`oo`Y$ope#)H9(kQK zGyt<7eNPuSAs$S%O>2ElZ{qtDIHJ!_THqTwcc-xfv<@1>IJ;YTv@!g-zDKBKAH<

Zet1e^8c}8fE97XH}+lF{qbF<`Y%dU|I!~Y`ZrVfKX82i z)(%!Tcf~eE^%2_`{WBPGPU@1NB5SCXe1sAI<4&n1IwO{&S$ThWn37heGOSW%nW7*L zxh0WK!E7zh%6yF-7%~l@I~b`2=*$;RYbi(I#zp$gL_d39U4A)KuB( zcS0bt48&%G_I~( zL(}w&2NA6#$=|g)J+-?ehHflD^lr77ngdz=dszFI;?~ZxeJv=gsm?4$$6#V==H{fa zqO!EkT>1-OQSJoX)cN}XsB;shvrHRwTH(I2^Ah4|rizn!V7T7fLh~Z<`Q+?zEMVxh z$=-x^RR*PlhkV_8mshTvs+zmZWY&Jk{9LX0Nx|+NAEq-^+Rh|ZlinVZ=e8=`WQt;e@= zPU}^1cG*O;G7l{Y#nl znp`y%CO_SC7gk0i0gY&phM04Y)~vU0!3$V$2T+h(1ZS+cCgc zaC?3M;B48^faGo>h~--#FNFauH?0BJJ6_nG5qOlr>k~%DCSJaOfl%KWHusw>tGrTxAhlEVDxc8R2C-)LCt&$Rt9IKor=ml7jirX@?WW+M z^I{b}MD5r$s>^^sN@&g`cXD~S_u09xo;{;noKZatIuzqd zW1e7oTl9>g8opPBT(p+&fo0F#!c{NFYYpIZ6u8hOB{F#{nP)@})X20$3iJtG$cO zJ$Oxl_qH{sL5d?=D$2M4C3Ajc;GN0(B-HVT;@pJ-LvIrN%|SY?t}g!J>ufQrR%hoY z!nr$tq~N%)9}^tEip93XW=MQ1@XovSvn`PTqXeT9@_7hGv4%LK1M**Q%UKi|(v@1_ zKGe*@+1%Y4v&`;5vUL`C&{tc+_7HFs7*OtjY8@Gg`C4O&#An{0xOvgNSehTHS~_1V z=daxCMzI5b_ydM5$z zZl`a{mM}i@x;=QyaqJY&{Q^R*^1Yzq!dHH~UwCCga+Us~2wk59ArIYtSw9}tEmjbo z5!JA=`=HP*Ae~Z4Pf7sC^A3@Wfa0Ax!8@H_&?WVe*)9B2y!8#nBrP!t1fqhI9jNMd zM_5I)M5z6Ss5t*f$Eh{aH&HBeh310Q~tRl3wCEcZ>WCEq%3tnoHE)eD=)XFQ7NVG5kM zaUtbnq2LQomJSWK)>Zz1GBCIHL#2E>T8INWuN4O$fFOKe$L|msB3yTUlXES68nXRX zP6n*zB+kXqqkpQ3OaMc9GqepmV?Ny!T)R@DLd`|p5ToEvBn(~aZ%+0q&vK1)w4v0* zgW44F2ixZj0!oB~^3k|vni)wBh$F|xQN>~jNf-wFstgiAgB!=lWzM&7&&OYS=C{ce zRJw|)PDQ@3koZfm`RQ$^_hEN$GuTIwoTQIDb?W&wEo@c75$dW(ER6q)qhF`{#7UTuPH&)w`F!w z0EKs}=33m}_(cIkA2rBWvApydi0HSOgc>6tu&+hmRSB%)s`v_NujJNhKLS3r6hv~- z)Hm@?PU{zd0Tga)cJWb2_!!9p3sP%Z zAFT|jy;k>4X)E>4fh^6=SxV5w6oo`mus&nWo*gJL zZH{SR!x)V)y=Qc7WEv-xLR zhD4OcBwjW5r+}pays`o)i$rcJb2MHLGPmeOmt5XJDg@(O3PCbxdDn{6qqb09X44T zh6I|s=lM6Nr#cGaA5-eq*T=LQ6SlRq*`~`b+dVi5^>el1p;#si6}kK}>w;1 z6B1dz{q_;PY{>DBQ+v@1pfXTd5a*^H9U*;qdj@XBF}MoSSQxVXeUpEM5Z0909&8$pRfR|B(t0ox&xl8{8mUNd#(zWONW{oycv$VjP1>q;jU@ z@+8E~fjz*I54OFFaQ{A5jn1w>r;l!NRlI(8q3*%&+tM?lov_G3wB`<}bQ>1=&xUht zmti5VZzV1Cx006Yzt|%Vwid>QPX8Nfa8|sue7^un@C+!3h!?-YK>lSfNIHh|0kL8v zbv_BklQ4HOqje|@Fyxn%IvL$N&?m(KN;%`I$N|muStjSsgG;gP4Smgz$2u(mG;DXP zf~uQ z212x^l6!MW>V@ORUGSFLAAjz3i5zO$=UmD_zhIk2OXUz^LkDLWjla*PW?l;`LLos> z7FBvCr)#)XBByDm(=n%{D>BcUq>0GOV9`i-(ZSI;RH1rdrAJ--f0uuAQ4odl z_^$^U_)0BBJwl@6R#&ZtJN+@a(4~@oYF)yG+G#3=)ll8O#Zv3SjV#zSXTW3h9kqn* z@AHL=vf~KMas}6{+u=}QFumr-!c=(BFP_dwvrdehzTyqco)m@xRc=6b#Dy+KD*-Bq zK=y*1VAPJ;d(b?$2cz{CUeG(0`k9_BIuUki@iRS5lp3=1#g)A5??1@|p=LOE|FNd; z-?5MLKd-5>yQ7n__5W^3C!_`hP(o%_E3BKEmo1h=H(7;{6$XRRW6{u+=oQX<((xAJ zNRY`Egtn#B1EBGHLy^eM5y}Jy0h!GAGhb7gZJoZI-9WuSRw)GVQAAcKd4Qm)pH`^3 zq6EIM}Q zxZGx%aLnNP1an=;o8p9+U^>_Bi`e23E^X|}MB&IkS+R``plrRzTE%ncmfvEW#AHJ~ znmJ`x&ez6eT21aLnoI`%pYYj zzQ?f^ob&Il;>6Fe>HPhAtTZa*B*!;;foxS%NGYmg!#X%)RBFe-acahHs3nkV61(E= zhekiPp1d@ACtA=cntbjuv+r-Zd`+lwKFdqZuYba_ey`&H<Psu;Tzwt;-LQxvv<_D5;ik7 zwETZe`+voUhk%$s2-7Rqfl`Ti_{(fydI(DAHKr<66;rYa6p8AD+NEc@Fd@%m`tiK% z=Mebzrtp=*Q%a}2UdK4J&5#tCN5PX>W=(9rUEXZ8yjRu+7)mFpKh{6;n%!bI(qA9kfyOtstGtOl zX!@*O0fly*L4k##fsm&V0j9Lj<_vu1)i?!#xTB7@2H&)$Kzt@r(GH=xRZlIimTDd_o(%9xO388LwC#;vQ?7OvRU_s< zDS@6@g}VnvQ+tn(C#sx0`J^T4WvFxYI17;uPs-Ub{R`J-NTdtBGl+Q>e81Z3#tDUr ztnVc*p{o|RNnMYts4pdw=P!uJkF@8~h)oV4dXu5F7-j0AW|=mt!QhP&ZV!!82*c7t zuOm>B*2gFtq;A8ynZ~Ms?!gEi5<{R_8tRN%aGM!saR4LJQ|?9w>Ff_61(+|ol_vL4 z-+N>fushRbkB4(e{{SQ}>6@m}s1L!-#20N&h%srA=L50?W9skMF9NGfQ5wU*+0<@> zLww8%f+E0Rc81H3e_5^DB@Dn~TWYk}3tqhO{7GDY;K7b*WIJ-tXnYM@z4rn(LGi?z z8%$wivs)fC#FiJh?(SbH-1bgdmHw&--rn7zBWe1xAhDdv#IRB@DGy}}zS%M0(F_3_ zLb-pWsdJ@xXE;=tpRAw?yj(Gz=i$;bsh&o2XN%24b6+?_gJDBeY zws3PE2u!#Cec>aFMk#ECxDlAs;|M7@LT8)Y4(`M}N6IQ{0YtcA*8e42!n^>`0$LFU zUCq2IR2(L`f++=85M;}~*E($nE&j;p{l%xchiTau*tB9bI= zn~Ygd@<+9DrXxoGPq}@vI1Q3iEfKRleuy*)_$+hg?+GOgf1r?d@Or42|s|D>XMa;ebr1uiTNUq@heusd6%WwJqyCCv!L*qou9l!B22H$bQ z)<)IA>Yo77S;|`fqBk!_PhLJEQb0wd1Z|`pCF;hol!34iQYtqu3K=$QxLW7(HFx~v>`vVRr zyqk^B4~!3F8t8Q_D|GLRrAbbQDf??D&Jd|mgw*t1YCd)CM2$76#Cqj1bD*vADwavp zS<`n@gLU4pwCqNPsIfHKl{5}gu9t-o+O< z??!fMqMrt$s}02pdBbOScUrc1T*{*-ideR6(1q4@oC6mxg8v8Y^h^^hfx6| z|Mld6Ax1CuSlmSJmHwdOix?$8emihK#&8&}u8m!#T1+c5u!H)>QW<7&R$eih)xkov zHvvEIJHbkt+2KQ<-bMR;2SYX?8SI=_<-J!GD5@P2FJ}K z5u82YFotCJF(dUeJFRX_3u8%iIYbRS??A?;iVO?84c}4Du9&jG<#urlZ_Unrcg8dR z!5I3%9F*`qwk#joKG_Q%5_xpU7|jm4h0+l$p;g%Tr>i74#3QnMXdz|1l2MQN$yw|5 zThMw15BxjWf2{KM)XtZ+e#N)ihlkxPe=5ymT9>@Ym%_LF}o z1XhCP`3E1A{iVoHA#|O|&5=w;=j*Qf`;{mBAK3={y-YS$`!0UmtrvzHBfR*s{z<0m zW>4C=%N98hZlUhwAl1X`rR)oL0&A`gv5X79??p_==g*n4$$8o5g9V<)F^u7v0Vv^n z1sp8{W@g6eWv2;A31Rhf5j?KJhITYfXWZsl^`7z`CFtnFrHUWiD?$pwU6|PQjs|7RA0o9ARk^9$f`u3&C|#Z3iYdh<0R`l2`)6+ z6tiDj@xO;Q5PDTYSxsx6n>bj+$JK8IPJ=U5#dIOS-zwyK?+t^V`zChdW|jpZuReE_ z)e~ywgFe!0q|jzsBn&(H*N`%AKpR@qM^|@qFai0};6mG_TvXjJ`;qZ{lGDZHScZk( z>pO+%icp)SaPJUwtIPo1BvGyP8E@~w2y}=^PnFJ$iHod^JH%j1>nXl<3f!nY9K$e` zq-?XYl)K`u*cVXM=`ym{N?z=dHQNR23M8uA-(vsA$6(xn+#B-yY!CB2@`Uz({}}w+ z0sni*39>rMC!Ay|1B@;al%T&xE(wCf+`3w>N)*LxZZZYi{5sqiVWgbNd>W*X?V}C- zjQ4F7e_uCUOHbtewQkq?m$*#@ZvWbu{4i$`aeKM8tc^ zL5!GL8gX}c+qNUtUIcps1S)%Gsx*MQLlQeoZz2y2OQb(A73Jc3`LmlQf0N{RTt;wa`6h|ljX1V7UugML=W5-STDbeWTiEMjPQ$({hn_s&NDXzs6?PLySp$?L`0ilH3vCUO{JS0Dp`z;Ry$6}R@1NdY7rxccbm$+;ApSe=2q!0 z()3$vYN0S$Cs)#-OBs{_2uFf}L4h$;7^2w20=l%5r9ui&pTEgg4U!FoCqyA6r2 zC5s72l}i*9y|KTjDE5gVlYe4I2gGZD)e`Py2gq7cK4at{bT~DSbQQ4Z4sl)kqXbbr zqvXtSqMrDdT2qt-%-HMoqeFEMsv~u)-NJ%Z*ipSJUm$)EJ+we|4*-Mi900K{K|e0; z1_j{X5)a%$+vM7;3j>skgrji92K1*Ip{SfM)=ob^E374JaF!C(cZ$R_E>Wv+?Iy9M z?@`#XDy#=z%3d9&)M=F8Xq5Zif%ldIT#wrlw(D_qOKo4wD(fyDHM5(wm1%7hy6euJ z%Edg!>Egs;ZC6%ktLFtyN0VvxN?*4C=*tOEw`{KQvS7;c514!FP98Nf#d#)+Y-wsl zP3N^-Pnk*{o(3~m=3DX$b76Clu=jMf9E?c^cbUk_h;zMF&EiVz*4I(rFoaHK7#5h0 zW7CQx+xhp}Ev+jw;SQ6P$QHINCxeF8_VX=F3&BWUd(|PVViKJl@-sYiUp@xLS2NuF z8W3JgUSQ&lUp@2E(7MG`sh4X!LQFa6;lInWqx}f#Q z4xhgK1%}b(Z*rZn=W{wBOe7YQ@1l|jQ|9ELiXx+}aZ(>{c7Ltv4d>PJf7f+qjRU8i%XZZFJkj&6D^s;!>`u%OwLa*V5Js9Y$b-mc!t@{C415$K38iVu zP7!{3Ff%i_e!^LzJWhBgQo=j5k<<($$b&%%Xm_f8RFC_(97&nk83KOy@I4k?(k<(6 zthO$3yl&0x!Pz#!79bv^?^85K5e7uS$ zJ33yka2VzOGUhQXeD{;?%?NTYmN3{b0|AMtr(@bCx+c=F)&_>PXgAG}4gwi>g82n> zL3DlhdL|*^WTmn;XPo62HhH-e*XIPSTF_h{#u=NY8$BUW=5@PD{P5n~g5XDg?Fzvb_u ziK&CJqod4srfY2T?+4x@)g9%3%*(Q2%YdCA3yM{s=+QD0&IM`8k8N&-6%iIL3kon> z0>p3BUe!lrz&_ZX2FiP%MeuQY-xVV%K?=bGPOM&XM0XRd7or< zy}jn_eEzuQ>t2fM9ict#ZNxD7HUycsq76IavfoNl$G1|t*qpUSX;YgpmJrr_8yOJ2 z(AwL;Ugi{gJ29@!G-mD82Z)46T`E+s86Qw|YSPO*OoooraA!8x_jQXYq5vUw!5f_x zubF$}lHjIWxFar8)tTg8z-FEz)a=xa`xL~^)jIdezZsg4%ePL$^`VN#c!c6`NHQ9QU zkC^<0f|Ksp45+YoX!Sv>+57q}Rwk*2)f{j8`d8Ctz^S~me>RSakEvxUa^Pd~qe#fb zN7rnAQc4u$*Y9p~li!Itp#iU=*D4>dvJ{Z~}kqAOBcL8ln3YjR{Sp!O`s=5yM zWRNP#;2K#+?I&?ZSLu)^z-|*$C}=0yi7&~vZE$s``IE^PY|dj^HcWI$9ZRm>3w(u` z-1%;;MJbzHFNd^!Ob!^PLO-xhhj@XrI81Y)x4@FdsI( za`o4Gy(`T$P?PB?s>o+eIOtuirMykbuAi65Y_UN1(?jTCy@J8Px`%;bcNmPm#Fr!= z5V!YViFJ!FBfEq>nJFk0^RAV1(7w+X`HRgP;nJHJdMa!}&vvduCMoslwHTes_I76|h>;(-9lbfGnt zoZomakOt759AuTX4b$)G8TzJ&m*BV8!vMs9#=e0tWa z%)84R=3?tfh72~=Rc;fXwj+x z+25xapYK@2@;}6)@8IL+F6iuJ_B{&A-0=U=U6WMbY>~ykVFp$XkH)f**b>TE5)shN z39E2L@JPCSl!?pkvFeh@6dCv9oE}|{GbbVM!XIgByN#md&tXy@>QscU0#z!I&X4;d z&B&ZA4lbrHJ!x4lCN4KC-)u#gT^cE{Xnhu`0RXVKn|j$vz8m}v^%*cQ{(h%FW8_8a zFM{$PirSI8@#*xg2T){A+EKX(eTC66Fb})w{vg%Vw)hvV-$tttI^V5wvU?a{(G}{G z@ob7Urk1@hDN&C$N!Nio9YrkiUC{5qA`KH*7CriaB;2~2Od>2l=WytBRl#~j`EYsj}jqK2xD*3 ztEUiPZzEJC??#Tj^?f)=sRXOJ_>5aO(|V#Yqro05p6)F$j5*wYr1zz|T4qz$0K(5! zr`6Pqd+)%a9Xq3aNKrY9843)O56F%=j_Yy_;|w8l&RU1+B4;pP*O_}X8!qD?IMiyT zLXBOOPg<*BZtT4LJ7DfyghK|_*mMP7a1>zS{8>?}#_XXaLoUBAz(Wi>$Q!L;oQ&cL z6O|T6%Dxq3E35$0g5areq9$2+R(911!Z9=wRPq-pju7DnN9LAfOu3%&onnfx^Px5( zT2^sU>Y)88F5#ATiVoS$jzC-M`vY8!{8#9O#3c&{7J1lo-rcNK7rlF0Zt*AKE(WN* z*o?Tv?Sdz<1v6gfCok8MG6Pzecx9?C zrQG5j^2{V556Hj=xTiU-seOCr2ni@b<&!j>GyHbv!&uBbHjH-U5Ai-UuXx0lcz$D7%=! z&zXD#Jqzro@R=hy8bv>D_CaOdqo6)vFjZldma5D+R;-)y1NGOFYqEr?h zd_mTwQ@K2veZTxh1aaV4F;YnaWA~|<8$p}-eFHashbWW6Dzj=3L=j-C5Ta`w-=QTw zA*k9!Ua~-?eC{Jc)xa;PzkUJ#$NfGJOfbiV^1au;`_Y8|{eJ(~W9pP9q?gLl5E6|e{xkT@s|Ac;yk01+twk_3nuk|lRu{7-zOjLAGe!)j?g+@-;wC_=NPIhk(W zfEpQrdRy z^Q$YBs%>$=So>PAMkrm%yc28YPi%&%=c!<}a=)sVCM51j+x#<2wz?2l&UGHhOv-iu z64x*^E1$55$wZou`E=qjP1MYz0xErcpMiNYM4+Qnb+V4MbM;*7vM_Yp^uXUuf`}-* z_2CnbQ);j5;Rz?7q)@cGmwE^P>4_u9;K|BFlOz_|c^1n~%>!uO#nA?5o4A>XLO{X2 z=8M%*n=IdnXQ}^+`DXRKM;3juVrXdgv79;E=ovQa^?d7wuw~nbu%%lsjUugE8HJ9zvZIM^nWvjLc-HKc2 zbj{paA}ub~4N4Vw5oY{wyop9SqPbWRq=i@Tbce`r?6e`?`iOoOF;~pRyJlKcIJf~G z)=BF$B>YF9>qV#dK^Ie#{0X(QPnOuu((_-u?(mxB7c9;LSS-DYJ8Wm4gz1&DPQ8;0 z=Wao(zb1RHXjwbu_Zv<=9njK28sS}WssjOL!3-E5>d17Lfnq0V$+IU84N z-4i$~!$V-%Ik;`Z3MOqYZdiZ^3nqqzIjLE+zpfQC+LlomQu-uNCStj%MsH(hsimN# z%l4vpJBs_2t7C)x@6*-k_2v0FOk<1nIRO3F{E?2DnS}w> z#%9Oa{`RB5FL5pKLkg59#x~)&I7GzfhiVC@LVFSmxZuiRUPVW*&2ToCGST0K`kRK) z02#c8W{o)w1|*YmjGSUO?`}ukX*rHIqGtFH#!5d1Jd}&%4Kc~Vz`S7_M;wtM|6PgI zNb-Dy-GI%dr3G3J?_yBX#NevuYzZgzZ!vN>$-aWOGXqX!3qzCIOzvA5PLC6GLIo|8 zQP^c)?NS29hPmk5WEP>cHV!6>u-2rR!tit#F6`_;%4{q^6){_CHGhvAs=1X8Fok+l zt&mk>{4ARXVvE-{^tCO?inl{)o}8(48az1o=+Y^r*AIe%0|{D_5_e>nUu`S%zR6|1 zu0$ov7c`pQEKr0sIIdm7hm{4K_s0V%M-_Mh;^A0*=$V9G1&lzvN9(98PEo=Zh$`Vj zXh?fZ;9$d!6sJRSjTkOhb7@jgSV^2MOgU^s2Z|w*e*@;4h?A8?;v8JaLPCoKP_1l- z=Jp0PYDf(d2Z`;O7mb6(_X_~z0O2yq?H`^c=h|8%gfywg#}wIyv&_uW{-e8e)YmGR zI0NNSDoJWa%0ztGzkwl>IYW*DesPRY?oH+ow^(>(47XUm^F`fAa0B~ja-ae$e>4-A z64lb_;|W0ppKI+ zxu2VLZzv4?Mr~mi?WlS-1L4a^5k+qb5#C)ktAYGUE1H?Vbg9qsRDHAvwJUN=w~AuT zUXYioFg2Dx-W)}w9VdFK#vpjoSc!WcvRZ_;TgHu;LSY*i7K_>Px{%C4-IL?6q?Qa_ zL7l=EEo|@X&$gX;fYP02qJF~LN9?E-OL2G(Fo4hW)G{`qnW zTIuc+-1VJvKgph0jAc(LzM);Pg$MPln?U|ek{_5nNJHfm-Y#ec+n#Yf_e>XfbLbN)eqHEDr0#?<;TskL5-0JGv|Ut{=$Xk8hlwbaMXdcI3GL zY-hykR{zX9liy$Z2F3!z346uu%9@-y6Gda`X2*ixlD_P@<}K?AoV?(%lM%* z(xNk=|A()443aGj)-~IDf3J+UA2p2lh6ei^pG*HL#SiThnIr5WZDXebI)F7X zGmP-3bH$i$+(IwqgbM7h%G5oJ@4{Z~qZ#Zs*k7eXJIqg;@0kAGV|b=F#hZs)2BYu1 zr8sj#Zd+Iu^G}|@-dR5S*U-;DqzkX3V0@q-k8&VHW?h0b0?tJ-Atqmg^J8iF7DP6k z)W{g?5~F*$5x?6W)3YKcrNu8%%(DglnzMx5rsU{#AD+WPpRBf``*<8F-x75D$$13U zcaNXYC0|;r&(F@!+E=%+;bFKwKAB$?6R%E_QG5Yn5xX#h+zeI-=mdXD5+D+lEuM`M ze+*G!zX^xbnA?~LnPI=D2`825Ax8rM()i*{G0gcV5MATV?<7mh+HDA7-f6nc@95st zzC_si${|&=$MUj@nLxl_HwEXb2PDH+V?vg zA^DJ%dn069O9TNK-jV}cQKh|$L4&Uh`?(z$}#d+{X zm&=KTJ$+KvLZv-1GaHJm{>v=zXW%NSDr8$0kSQx(DQ)6S?%sWSHUazXSEg_g3agt2@0nyD?A?B%9NYr(~CYX^&U#B4XwCg{%YMYo%e68HVJ7`9KR`mE*Wl7&5t71*R3F>*&hVIaZXaI;2a$?;{Ew{e3Hr1* zbf$&Fyhnrq7^hNC+0#%}n^U2{ma&eS)7cWH$bA@)m59rXlh96piJu@lcKl<>+!1#s zW#6L5Ov%lS(?d66-(n`A%UuiIqs|J|Ulq0RYq-m&RR0>wfA1?<34tI?MBI#a8lY{m z{F2m|A@=`DpZpwdIH#4)9$#H3zr4kn2OX!UE=r8FEUFAwq6VB?DJ8h59z$GXud$#+ zjneIq8uSi&rnG0IR8}UEn5OcZC?@-;$&Ry9hG{-1ta`8aAcOe1|82R7EH`$Qd3sf* zbrOk@G%H7R`j;hOosRVIP_2_-TuyB@rdj?(+k-qQwnhV3niH+CMl>ELX(;X3VzZVJ ztRais0C^L*lmaE(nmhvep+peCqr!#|F?iVagZcL>NKvMS_=*Yl%*OASDl3(mMOY9! z=_J$@nWpA-@><43m4olSQV8(PwhsO@+7#qs@0*1fDj70^UfQ(ORV0N?H{ceLX4<43 zEn)3CGoF&b{t2hbIz;Og+$+WiGf+x5mdWASEWIA*HQ9K9a?-Pf9f1gO6LanVTls)t z^f6_SD|>2Kx8mdQuiJwc_SmZOZP|wD7(_ti#0u=io|w~gq*Odv>@8JBblRCzMKK_4 zM-uO0Ud9>VD>J;zZzueo#+jbS7k#?W%`AF1@ZPI&q%}beZ|ThISf-ly)}HsCS~b^g zktgqOZ@~}1h&x50UQD~!xsW-$K~whDQNntLW=$oZDClUJeSr2$r3}94Wk1>co3beS zoY-7t{rGv|6T?5PNkY zj*XjF()ybvnVz5=BFnLO=+1*jG>E7F%&vm6up*QgyNcJJPD|pHoZ!H6?o3Eig0>-! zt^i-H@bJ;^!$6ZSH}@quF#RO)j>7A5kq4e+7gK=@g;POXcGV28Zv$jybL1J`g@wC# z_DW1ck}3+n@h2LFQhwVfaV@D+-kff4celZC0;0ef?pA#*PPd8Kk8sO1wza&BHQFblVU8P1=-qScHff^^fR zycH!hlHQs7iejITpc4UaBxzqTJ}Z#^lk{W(cr`qtW~Ap;HvuUf#MxgEG?tEU+B?G% znub0I(s@XvI(lva}$Z7<}Qg=rWd5n)}rX{nb+Aw;}?l9LZI-`N-*hts=c6XgjfJs ztp>-686v6ug{glEZ}K=jVG|N1WSWrU*&ue|4Q|O@;s0#L5P*U%Vx;)w7S0ZmLuvwA z@zs2Kut)n1K7qaywO#TbBR`Q~%mdr`V)D`|gN0!07C1!r3{+!PYf9*;h?;dE@#z(k z;o`g~<>P|Sy$ldHTUR3v=_X0Iw6F>3GllrFXVW?gU0q6|ocjd!glA)#f0G7i20ly>qxRljgfO2)RVpvmg#BSrN)GbGsrIb}9 z1t+r;Q>?MGLk#LI5*vR*C8?McB|=AoAjuDk&Pn`KQo z`!|mi{Cz@BGJ!TwMUUTkKXKNtS#OVNxfFI_Gfq3Kpw0`2AsJv9PZPq9x?~kNNR9BR zw#2jp%;FJNoOzW>tE#zskPICp>XSs?|B0E%DaJH)rtLA}$Y>?P+vEOvr#8=pylh zch;H3J`RE1{97O+1(1msdshZx$it^VfM$`-Gw>%NN`K|Tr$0}U`J?EBgR%bg=;et0 z_en)!x`~3so^V9-jffh3G*8Iy6sUq=uFq%=OkYvHaL~#3jHtr4sGM?&uY&U8N1G}QTMdqBM)#oLTLdKYOdOY%{5#Tgy$7QA! zWQmP!Wny$3YEm#Lt8TA^CUlTa{Cpp=x<{9W$A9fyKD0ApHfl__Dz4!HVVt(kseNzV z5Fb`|7Mo>YDTJ>g;7_MOpRi?kl>n(ydAf7~`Y6wBVEaxqK;l;}6x8(SD7}Tdhe2SR zncsdn&`eI}u}@^~_9(0^r!^wuKTKbs-MYjXy#-_#?F=@T*vUG@p4X+l^SgwF>TM}d zr2Ree{TP5x@ZtVcWd3++o|1`BCFK(ja-QP?zj6=ZOq)xf$CfSv{v;jCcNt4{r8f+m zz#dP|-~weHla%rsyYhB_&LHkwuj83RuCO0p;wyXsxW5o6{)zFAC~2%&NL? z=mA}szjHKsVSSnH#hM|C%;r0D$7)T`HQ1K5vZGOyUbgXjxD%4xbs$DAEz)-;iO?3& zXcyU*Z8zm?pP}w&9ot_5I;x#jIn^Joi5jBDOBP1)+p@G1U)pL6;SIO>Nhw?9St2UN zMedM(m(T6bNcPPD`%|9dvXAB&IS=W4?*7-tqldqALH=*UapL!4`2TM_{`W&pm*{?| z0DcsaTdGA%RN={Ikvaa&6p=Ux5ycM){F1OgOh(^Yk-T}a5zHH|=%Jk)S^vv9dY~`x zG+!=lsDjp!D}7o94RSQ-o_g#^CnBJlJ@?saH&+j0P+o=eKqrIApyR7ttQu*0 z1f;xPyH2--)F9uP2#Mw}OQhOFqXF#)W#BAxGP8?an<=JBiokg;21gKG_G8X!&Hv;7 zP9Vpzm#@;^-lf=6POs>UrGm-F>-! zm;3qp!Uw?VuXW~*Fw@LC)M%cvbe9!F(Oa^Y6~mb=8%$lg=?a0KcGtC$5y?`L5}*-j z7KcU8WT>2PpKx<58`m((l9^aYa3uP{PMb)nvu zgt;ia9=ZofxkrW7TfSrQf4(2juZRBgcE1m;WF{v1Fbm}zqsK^>sj=yN(x}v9#_{+C zR4r7abT2cS%Wz$RVt!wp;9U7FEW&>T>YAjpIm6ZSM4Q<{Gy+aN`Vb2_#Q5g@62uR_>II@eiHaay+JU$J=#>DY9jX*2A=&y8G%b zIY6gcJ@q)uWU^mSK$Q}?#Arq;HfChnkAOZ6^002J>fjPyPGz^D5p}o;h2VLNTI{HGg!obo3K!*I~a7)p-2Z3hCV_hnY?|6i`29b zoszLpkmch$mJeupLbt4_u-<3k;VivU+ww)a^ekoIRj4IW4S z{z%4_dfc&HAtm(o`d{CZ^AAIE5XCMvwQSlkzx3cLi?`4q8;iFTzuBAddTSWjfcZp* zn{@Am!pl&fv#k|kj86e$2%NK1G4kU=E~z9L^`@%2<%Dx%1TKk_hb-K>tq8A9bCDfW z@;Dc3KqLafkhN6414^46Hl8Tcv1+$q_sYjj%oHz)bsoGLEY1)ia5p=#eii(5AM|TW zA8=;pt?+U~>`|J(B85BKE0cB4n> zWrgZ)Rbu}^A=_oz65LfebZ(1xMjcj_g~eeoj74-Ex@v-q9`Q{J;M!mITVEfk6cn!u zn;Mj8C&3^8Kn%<`Di^~Y%Z$0pb`Q3TA}$TiOnRd`P1XM=>5)JN9tyf4O_z}-cN|i> zwpp9g`n%~CEa!;)nW@WUkF&<|wcWqfL35A}<`YRxV~$IpHnPQs2?+Fg3)wOHqqAA* zPv<6F6s)c^o%@YqS%P{tB%(Lxm`hsKv-Hb}MM3=U|HFgh8R-|-K(3m(eU$L@sg=uW zB$vAK`@>E`iM_rSo;Cr*?&wss@UXi19B9*0m3t3q^<)>L%4j(F85Ql$i^;{3UIP0c z*BFId*_mb>SC)d#(WM1%I}YiKoleKqQswkdhRt9%_dAnDaKM4IEJ|QK&BnQ@D;i-ame%MR5XbAfE0K1pcxt z{B5_&OhL2cx9@Sso@u2T56tE0KC`f4IXd_R3ymMZ%-!e^d}v`J?XC{nv1mAbaNJX| zXau+s`-`vAuf+&yi2bsd5%xdqyi&9o;h&fcO+W|XsKRFOD+pQw-p^pnwwYGu=hF7& z{cZj$O5I)4B1-dEuG*tU7wgYxNEhqAxH?p4Y1Naiu8Lt>FD%AxJ811`W5bveUp%*e z9H+S}!nLI;j$<*Dn~I*_H`zM^j;!rYf!Xf#X;UJW<0gic?y>NoFw}lBB6f#rl%t?k zm~}eCw{NR_%aosL*t$bmlf$u|U2hJ*_rTcTwgoi_N=wDhpimYnf5j!bj0lQ*Go`F& z6Wg+xRv55a(|?sCjOIshTEgM}2`dN-yV>)Wf$J58>lNVhjRagGZw?U9#2p!B5C3~Nc%S>p`H4PK z7vX@|Uo^*F4GXiFnMf4gwHB;Uk8X4TaLX4A>B&L?mw4&`XBnLCBrK2FYJLrA{*))0 z$*~X?2^Q0KS?Yp##T#ohH1B)y4P+rR7Ut^7(kCwS8QqgjP!aJ89dbv^XBbLhTO|=A z|3FNkH1{2Nh*j{p-58N=KA#6ZS}Ir&QWV0CU)a~{P%yhd-!ehF&~gkMh&Slo9gAT+ zM_&3ms;1Um8Uy0S|0r{{8xCB&Tg{@xotF!nU=YOpug~QlZRKR{DHGDuk(l{)d$1VD zj)3zgPeP%wb@6%$zYbD;Uhvy4(D|u{Q_R=fC+9z#sJ|I<$&j$|kkJiY?AY$ik9_|% z?Z;gOQG5I%{2{-*)Bk|Tia8n>TbrmjnK+8u*_cS%*;%>R|K|?urtIdgTM{&}Yn1;| zk`xq*Bn5HP5a`ANv`B$IKaqA4e-XC`sRn3Z{h!hN0=?x(kTP+fE1}-<3eL+QDFXN- z1JmcDt0|7lZN8sh^=$e;P*8;^33pN>?S7C0BqS)ow4{6ODm~%3018M6P^b~(Gos!k z2AYScAdQf36C)D`w&p}V89Lh1s88Dw@zd27Rv0iE7k#|U4jWDqoUP;-He5cd4V7Ql)4S+t>u9W;R-8#aee-Ct1{fPD+jv&zV(L&k z)!65@R->DB?K6Aml57?psj5r;%w9Vc3?zzGs&kTA>J9CmtMp^Wm#1a@cCG!L46h-j z8ZUL4#HSfW;2DHyGD|cXHNARk*{ql-J2W`9DMxzI0V*($9{tr|O3c;^)V4jwp^RvW z2wzIi`B8cYISb;V5lK}@xtm3NB;88)Kn}2fCH(WRH1l@3XaO7{R*Lc7{ZN1m+#&diI7_qzE z?BS+v<)xVMwt{IJ4yS2Q4(77II<>kqm$Jc3yWL42^gG6^Idg+y3)q$-(m2>E49-fV zyvsCzJ5EM4hyz1r#cOh5vgrzNGCBS}(Bupe`v6z{e z)cP*a8VCbRuhPp%BUwIRvj-$`3vrbp;V3wmAUt{?F z0OO?Mw`AS?y@>w%(pBO=0lohnxFWx`>Hs}V$j{XI2?}BtlvIl7!ZMZukDF7 z^6Rq2H*36KHxJ1xWm5uTy@%7;N0+|<>Up>MmxKhb;WbH1+=S94nOS-qN(IKDIw-yr zi`Ll^h%+%k`Yw?o3Z|ObJWtfO|AvPOc96m5AIw;4;USG|6jQKr#QP}+BLy*5%pnG2 zyN@VMHkD`(66oJ!GvsiA`UP;0kTmUST4|P>jTRfbf&Wii8~a`wMwVZoJ@waA{(t(V zwoc9l*4F>YUM8!aE1{?%{P4IM=;NUF|8YkmG0^Y_jTJtKClDV3D3~P7NSm7BO^r7& zWn!YrNc-ryEvhN$$!P%l$Y_P$s8E>cdAe3=@!Igo^0diL6`y}enr`+mQD;RC?w zb8}gXT!aC`%rdxx2_!`Qps&&w4i0F95>;6;NQ-ys;?j#Gt~HXzG^6j=Pv{3l1x{0( z4~&GNUEbH=9_^f@%o&BADqxb54EAq=8rKA~4~A!iDp9%eFHeA1L!Bb8Lz#kF(p#)X zn`CglEJ(+tr=h4bIIHlLkxP>exGw~{Oe3@L^zA)|Vx~2yNuPKtF^cV6X^5lw8hU*b zK-w6x4l&YWVB%0SmN{O|!`Sh6H45!7}oYPOc+a#a|n3f%G@eO)N>W!C|!FNXV3taFdpEK*A1TFGcRK zV$>xN%??ii7jx5D69O>W6O`$M)iQU7o!TPG*+>v6{TWI@p)Yg$;8+WyE9DVBMB=vnONSQ6k1v z;u&C4wZ_C`J-M0MV&MpOHuVWbq)2LZGR0&@A!4fZwTM^i;GaN?xA%0)q*g(F0PIB( zwGrCC#}vtILC_irDXI5{vuVO-(`&lf2Q4MvmXuU8G0+oVvzZp0Y)zf}Co0D+mUEZz zgwR+5y!d(V>s1} zji+mrd_6KG;$@Le2Ic&am6O+Rk1+QS?urB4$FQNyg2%9t%!*S5Ts{8j*&(H1+W;0~ z$frd%jJjlV;>bXD7!a-&!n52H^6Yp}2h3&v=}xyi>EXXZDtOIq@@&ljEJG{D`7Bjr zaibxip6B6Mf3t#-*Tn7p z96yx1Qv-&r3)4vg`)V~f8>>1_?E4&$bR~uR;$Nz=@U(-vyap|Jx zZ;6Ed+b#GXN+gN@ICTHx{=c@J|97TIPWs(_kjEIwZFHfc!rl8Ep-ZALBEZEr3^R-( z7ER1YXOgZ)&_=`WeHfWsWyzzF&a;AwTqzg~m1lOEJ0Su=C2<{pjK;{d#;E zr2~LgXN?ol2ua5Y*1)`(be0tpiFpKbRG+IK(`N?mIgdd9&e6vxzqxzaa`e7zKa3D_ zHi+c1`|720|dn(z4Qos^e7sn(PU%NYLv$&!|4kEse%DK;YAD06@XO3!EpKpz!^*?(?-Ip zC_Zlb(-_as+-D?0Ag9`|4?)bN)5o(J=&udAY|YgV(YuK9k=E>0z`$dSaL(wmxd!1f zME&3wwv@#{dgeMlZ4}GL!I`VZxtdQY$lmauCN_|mGXqEEj@i~du$|>5UvLjsbq!{; z@jEf;21iC1jFEmIPE^4gykHQzCMLj=2Ek4&FvlpqTlS(0YT%*W<>XgH$4ww`D`aihBGkPM(&EG};Cl&wzg8!jL z`rkqPzvH(0Kd{2n=?Bt8aAU&0IyiA+V-qnXVId^qG!SWZ7%_f&i!D{R#7Jo$%tICxY%j)ebORE>3H_c|to}c#HX;HAC?~B;2mmQrMp2;8T zmzde!k7BYg^Z1r|DUvSD3@{6S<1kndb%Qt%GA# z+sB2&F5L`R&fLRdAlpU_pVsJsYDEz{^ zKGaAz#%W+MPGT+D$+xowMY0=ipM)0p?zym&Aoi)qL(pO_weO(k?s|ELHl^W zviJiFUXRL&?`;3_;mvc02A@sbsW9}#{anvGafZ#ST;}za?XS3}ZG3B4m(SW{>w}Fh z)T5Yi*``Tstmi9SHXmuWSND@cj}qtY!`tuD29Dpu+-D3$h<5FY>jE>YJvqBmhw?oll`x7Ono(}R~P zle_eBwYy0Rr7kmf_SEt_gn4)AO-r`}^Z5Y%Rm8)K-?X>rvDL+QT?#)QwDsQ2c$tc* z&#hbgkL6}GnBDH;+lREM6MGIskRa@r>5Iq(ll2IepuhW86w@14=E{6$cz*cBDQ)CT>}v-DLM-v8)xaPBnmGBKM63RgDGqh!<*j90tSE4|G^+r@#-7g2 zs8KE8eZPZhQuN>wBU%8CmkE9LH1%O;-*ty0&K~01>F3XB>6sAm*m3535)9T&Fz}A4 zwGjZYVea@Fesd=Rv?ROE#q=}yfvQEP8*4zoEw4@^Qvw54utUfaR1T6gLmq?c9sON> z>Np6|0hdP_VURy81;`8{ZYS)EpU9-3;huFq)N3r{yP1ZBCHH7=b?Ig6OFK~%!GwtQ z3`RLKe8O&%^V`x=J4%^Oqg4ZN9rW`UQN^rslcr_Utzd-@u-Sm{rphS-y}{k41)Y4E zfzu}IC=J0JmRCV6a3E38nWl1G495grsDDc^H0Fn%^E0FZ=CSHB4iG<6jW1dY`2gUr zF>nB!y@2%rouAUe9m0VQIg$KtA~k^(f{C*Af_tOl=>vz>$>7qh+fPrSD0YVUnTt)? z;@1E0a*#AT{?oUs#bol@SPm0U5g<`AEF^=b-~&4Er)MsNnPsLb^;fL2kwp|$dwiE3 zNc5VDOQ%Q8j*d5vY##)PGXx51s8`0}2_X9u&r(k?s7|AgtW0LYbtlh!KJ;C9QZuz< zq>??uxAI1YP|JpN$+{X=97Cdu^mkwlB={`aUp+Uyu1P139=t%pSVKo7ZGi_v(0z>l zHLGxV%0w&#xvev)KCQ{7GC$nc3H?1VOsYGgjTK;Px(;o0`lerxB<+EJX9G9f8b+)VJdm(Ia)xjD&5ZL45Np?9 zB%oU;z05XN7zt{Q!#R~gcV^5~Y^gn+Lbad7C{UDX2Nznj8e{)TLH|zEc|{a#idm@z z6(zon+{a>FopmQsCXIs*4-dLGgTc)iOhO3r=l?imNUR-pWl!ktO0r_a0Nqo@bu8MzyjSq9zkqPe*`Sxz75rZ zr9X%(=PVqCRB=zfX+_u&*k4#s1k4OV11YgkCrlr6V;vz<{99HKC@qQ+H8xv5)sc63 z69;U4O&{fb5(fN``jJH#3=GHsV56@{d@7`VhA$K^;GU+R-V%%cnmjYs?>c5^6Ugv} zn<}L&i;2`zzW@(kxf$$gVH@7nh}2%G%ciQ_B?r{13?Q@=Q+6msQGtnyY%Gkjeor?g z7F*tMqLdhcq+LCCo^D;CtOACCBhXgK-M&w{*dcUdmtv@XFTofmmpcWKtCn^`#?oZC zUOm52 z7sK$hR|Vh6y&pfIUK&!`8HH*>12$nWA)Ynp+XwOj=jNLD z{QA4gezbe>wiP?`jJO;c&EId;=2u80s_r97;TX!6@*(<%WL+^bmxheMB3pKx0OpH^ zPs}knV+jpJ4TaD@r^V`mTsjf`7!z^H}eHQ#Rp z72(>Dm#QO!ZYR*O@yHic`3*T^t7jc=d`Jz6Lk@Y-bL%cOp_~=#xzIJl?`{Qu;$uC~NkePE+7wSW_FM`&V{gFN zl;lq@;FtAsl!h;tnOvj z#gYx!q$5MdZ0Jxjy=t*q)HFeeyI-vgaGdh1QNhqGRy8qS)|6S0QK7Gj9R?Co{Knh> za>xkQZ0}bBx!9@EUxRBYGm25^G}&j-`0VWX04E|J!kJ8^WoZ(jbhU_twFwWIH32fv zi=pg~(b#ajW=`)Vikwwe39lpML?|sY$?*6*kYBxku_<=#$gfTqQ_F!9F0=OkHnzBo zEwR!H_h|MNjuG$Tj6zaaouO}HYWCF8vN4C%EX-%Iu%ho;q$G#ErnafhXR*4J2Rp5* zhsi0;wlSwE*inVFO>{(8?N~82zijpt+9Y_-^>xnE%T*zk9gi|j7b@s<5{|qEquUD( zS;-%RySZOCOEh*>!kvbsQ265* z>X8*_Wy&~FB@aDHz%glyiAujXq-|2kDUjFTn9Rafsl+XNyFP%PG|l&ZGWBcEXxy=9 zeDn2PIoVuL$gX0RgVK1O$x3%pOzS7x^U5Pi;mtT)%cY;&e&M7GLM}zP+IPbqLt=^5 z7qLfri8myf;~2psc@^cA6mG&{C%e_(M$$!wC^5p^T1QzrS%I?(U{qcd+oJJkQxe10 zON{Q*?iz%F4MbEsoEc+x3E?&2wVR^v3|Q0lDaMvgS7mNjI{2w! z9|~=!83T%GW*iaChSS!`Xd^beFp9N4%K+k*j#jFumk}U?=WKL_kJAltxnxp~+lZzT zp@&&kSPTg3oSGos`rVBhK0|4NdHM_hnKuw1#0JV{gi_dKDJLB+ix~~HpU9%jD)@YY zOK)L7kgbLyN2%Dx#fuY}8swh4ACk7%BpP-n5(RhDq{gEHP*Fo4IviX{C49|B5h~SC zFr`=0)=h2^F5UpCAgt?R5u{6VvpUf#*nC zCQ`$!|C;L2lpjlG?(>T$(_$O3_YNNbPT~(?!j3aD8k=yu^ogw4bkjvgF|3BOq(hB& zG;^cPXmcUP$ox8zElCJ-zMbK9q^8{rri#8Cek5Ydr0YT-KTh@J z6^AcB9ejew8BY5kzZUZX(7Po==eW<(;uV~E7(BY5c0^xr`cuRwn)47bN?zOb!0?cw z#v}R$z66&m#+AHfo@(^V2#S~bhoUkkTArg+6w>JzZ52r96^({1W!?>4$h0l|-jDfj z>7(<+%67#(A|4hZ3>Y;hd&S?}F;`Vtqz|pK&B>NJ=Faci;gkf-+GmfQR8^zo_vul2 zB!)kfu4Dq_g)8TBBo52*sB6F`qa&JCR=_A$QWgX_K}fZm{Cb2#1q`^S3+WaS>sS#@ z-4k*G=#?z6d_e7JJ+Z8^(t0tNdL{K5F;2nfQbXgld}a(X)Gr;WojOy`^?es~AClT$ z5^lD{WJek0!p-QEH5E7n6DKQ0%_ZBZ=|jfV_MM{VmL8y-Wd|>OmeemP=C@xI@@M~1 zW2S*im@Rc=O>V886_UJ@oh1!2H$Ku&U*Hh_oxd{32)vf1$cRiepv28ricM;}#p!+k zaK{z1I=9Y%3m4|Pj*BD*Fn5Vh?O@oD^1UcjyeNh0fbhh~V6xb#4njlGW8OehUe!MnoR(wn#nsoyL1m!Rov)Nv4~&JEVl7L z#^qYdTpNI#u`N0UbVMiDmD>g2VQcG3>4D6gErgddZnSQTs){BExxRJRB?bIxTdZa z;!S8FHJPPiIDQ*FAUiWSYnjILFjDvxvSC zk z=j4Kx@Pg~&2Z?cmMDa;)#xVeorJrxDBqy{+`kG+ZPQqC@#ku-c3ucU+69$#q_*se` z-H#PFW^>-C0>++|6r=<$Z8)ZFaK=ZjwsNYXqRpl9G|yme@Eld5B-*I69Nx_TResHi z!5nm+>6zaJYQO#%D{~o-oOJ;q`fa5}l!8G*U-E$OM&7@dqciBCWtd}|SrDXz$TB($&m*=Epuolu2k`KUwO7maP3P0ok zmF57lSh0Ba@&sO1iZ5^+3s8{B8t|M;Pg&O+{tZJCiLWd6H@{b~9{CLF9s3Kn zt5)Rs9ejne?o{%f>B$Dl%X7fd~KY)I|(pxUeHj;gNsK6;ZR>`ciu;GxvhDUt!+31Knss2U(%ts8K z18)8;<2ax9RG?!|Lwdt^i5L^&O788roKmVAB)=EdK~HqR2Q=)H_VW}xY=95MP_Ov< zPEz3%DRK}+(aUBwsr83H8>`H^v~|A_t}0vPmRwKPt1{|qOY|PZu}j9+{ZhF&-H_TB zU9xWLpNTc`enI|)h9jQeqf5RfGLFk_vfX`40iMpd%KZF!lKbZTdBw$<^G6nuS+$fT zrbK)xo&;buPJcpOZ=x>n+bRXVFDs(23Xr=rDE&!)pVXZ;;A07NXGl_0m`{Z)DQIu$ zFDvY4xu-ifTe_$|n2B83eI;KUg6pVbw+N!nyLj~wnRi{4mNy{WDV)G1!6$y=+x6U{ z%4_9=Q^L!x_gAYp?J3+u5hA5cO8aHeI=6AC8^S{mzhqCBvBLYEutUC(X0>hKg|AvN zvkmJCQNA45_KjW{aEcyrBppcO6G0zTy%v1&@~+2!n?kA9?>0>AjFN|JdCnHQ8$hEU zw#mwGifHppLP?89LMb(Y3Li9iCPx7W%ek}2FgD2YSzjsR4Xj<=zN{Yo@7s7(k%mP4 znT2p&4EQ@q_chd-E z78uvD*C@oba`U3W2Iw`M#`5C8jOHv8^Li<|j^SI>>>`77Dp71Vtz=J?4Zck4SdRbd zfF}C_>Y(#)r@y!Q0`tMlG#b9>5`fAI$B&tWJfbGlYW$J4V+-s=HH!`+;1XeL@USdx zR0$G&&XBf9lQtkH5)p=U!8J!1{oc4E!N-~Abxl6E;;=3-hMYZ+44?u}zabmCE)yB?*_w91m$n1Yskp&@ z;kxeJX-#ioX^{elyLu~gzx|_KxLpX62MF%Axq3$!Z_P`pBWR?zP8OI`PV~6Aa0Oi0 zv_Ot1m&plf-ZF{e(z(Ms3*S5q$e|j;gOwGrmWsCHfLi(h8y?gc$(2H{884C1FvHQQ12tX=qFUsK~zM!W=K>;zaRsu4Xmcc@8nSs!vK+{ z?}bq}-m&p5jRSam67n>yG9ez=I^|J1O;Np8s=P~9MXYLxD+cFQK7PhG=bkjo{Naae zjp3NWWrlFWDb3Z5D07Q|WjZ=wOQ=aKA%en=O@hL$QCKpIXNZE=InFk|Fhq-&H!6&X z*MVy8=hL7Aw&pQjHrFf27C%3B<>FX{@fOLNhUoxL4*@nY}&M3G*T-p67a zo}~_&yGOB)#vbU|Q3FA8S^X)c-yBlmN(_%}`7Ha3uWFe?>9f=3hlO{^gv~$p`v?vk z_P*r43|(S{%ihs;)YH|jAMpP=-Ms7Ne75_YZZiL3CHVjSU`X1|?Ehh&gA=Xn7W7d@ zf8bM9Y>lG!`PWFDDA9G;x*{1Eh^55u66*9D+-4^dYZ{xXP@?sQLVrY%(azM;C^4FuN7CQ%$!3sr1JL=!Be& zuOZL^bLp$Qo2rL=WDzQIls%s!Go z{s}Q0b#+#8bKga|01t%^9Z=wEsevvXM_{$dCR97ed3@1kX)mtSS!JN^rtqKOj}p~> zfpCI@DX*DqcB6ZnBcl~}sGO~1s$AtfkX6fy3N8*ebvZc*KBW;dA=)?#BE&}-or74i zZUt5;{FBPnkZD8YUXDsx&2LvSziAlec3oc>&Lf1Doc3g?H9{OO_$M4B0qTat0UsWP zTlxUeQ3B;oJ%en4n?zQB6*Fb#wH7`$SQN5GI|=DnJKiYm{?-?#-H;#sIjz7kQ4&VW zN9d1(1$_W~S=<%qDD!mwRytas=eqX^iW}YSx3;wJ#)Xp_`Qk1DFiXac$-3;jQbCif zLA-T_s~5yP@Q@W>pXKl^gipQ>gp@HlBB>WDVpW199;V%?N1`U$ovLE;NI2?|_q2~5 zlg>xT9NADWkv5-*FjS~nP^7$k!N2z?dr!)&l0+4xDK7=-6Rkd$+_^`{bVx!5LgC#N z-dv-k@OlYCEvBfcr1*RsNwcV?QT0bm(q-IyJJ$hm2~mq{6zIn!D20k5)fe(+iM6DJ ze-w_*F|c%@)HREgpRrl@W5;_J5vB4c?UW8~%o0)(A4`%-yNk1(H z5CGuzH(uHQ`&j+IRmTOKoJ?#Ct$+1grR|IitpDGt!~ZdqSJ?cOtw-R=EQ+q4UvclH zdX=xlK-fhQKoKCPBoFAZ*(~11O6-tXo>i0w!T$u{lg!#itEUX3V{$S*naW!C@%rll zS{L(1t%xz(*B`{1NL!*aMc<~fE=g;gXi&Gb$HpD!P)8?JzfN;4F&wv(5HH<=c>>)n z({271)xREH89=C(5YKL{mmJJ_d>qHz;;gTvTlgM*vz9@YTTYZ#%_2A zS0G-t9oMQEpvfv(UjfQ8T$vAHi)zOj3>D*{xSRiu3acc=7cvLyD?_ZObdu$5@b*!y zaZ#u?7uF}SrHVQa=sTOhGW{6WUlq#RhPPm^GsRH#qlX8{Kq-i~98l;eq>KdCnWyKl zUu&UWBqu#Tt9jQ97U4}3)&(p2-eCLznXMEm!>i^EMpeVzPg%p;?@O;dJBQQY(vV;d z3v+-3oTPC!2LTUAx^S2t{v;S_h(EZ^0_dS5g^F*m{TEIy^Qal~%mu3h7*o`jWOH}i ztv8M)3X3a*+ry_KkYXYE4dB0?M|t}#Tp+(}6CQ zBbq;xhoHj}b@j-@koDB#XcCY~>_x&Y;i%MH|3tF^X2h{36UCVfQ-;oEA+4ZkJ`^Qi zQf^8}6eFO$Z+Dj-F1wkG##tTx>FjR2oOXFmbKFj6K3+=kePQ<4d7%z5R5cOB;zO6| zm9^m#U4lcA;7t&*=q|a-!`!)}SgYXT#i8hnxtx@kaoBF$QAS-hT7N5kH^l zB^i+})V>L;9_0Qqf-dyF%ky8Mp-dp#%!Nls3vCt}q3QLM3M-(Zs1k}1bqQ9PVU)U` ztE=?;^6=x}_VD%N@${>qhpkU*)AuUBu_cqYiY&@;O$HV*z@~#Tzh?#=CK`=KwBv+o zh%zu%0xPKYtyC)DaQ zpDW}*86g%>BH3IcWMq`g$j()0kWE(qkIL8A&A0mf&+BzxpKF}=`#jG% z&*wa!&pGFLs5_b#QTZE4Bp+})qzyPQ7B4Z7Y*&?0PSX&|FIR;WBP1|coF9ZeP*$9w z!6aJ_3%Sh=HY3FAt8V144|yfu}IAyYHr1OYKIZ51F>_uY^%N#!k~eU53at-_E-Gh?ahmM5y* z+BTIbeH;%v1}Cjo{8d%UeSMWg(nphxEU`sL< zQR~LrTq>Da(FqSP2%&^1ZL#DTo5Sbl9;&57tQ-@U&I#lj)aNSkcfEJwQD!33?anVU z?pw2q7WtMvfji493`rSFnyp7{w87cW`ak=UEYlk5PCB1K6UDVKXyozOChH4yHh~Q< zv>yvKw6WLfi!PZUx60JZcTNM7jo{ww9b8Q+S7C3WA5&llSwdwh$=Q(*(f3ofqcz=nwOmOy z(J!K=*wNoRU*${{Mbwapi9pTB(&VVKefqd-qrUb9*Eyr2E@oZ9Cgf}Mc;QP<0D)R4 zz=!*^VIG4T*7Xl=sJxrWv9hW^eJ%qYp5(d0?E6LZzJ}=7E+1{?GQA;z+!^VBD81}O z0kJ^dKy&WMw+1+aGVYY-v@i28@Gm+sX5=@U%F=Z?W)oar}2~Rc&F|+3A)n-U2GF10+QdxDb^iA@7eL$c7yhBtL z>lABrh^qy9XZ${E1}Ss5!N4;ig0-pUh6@|RPCHOWvgG{|l}2enRgJftsN%D|ck0YO zuAQd2aMPSyGuJ~jm)aY=+p~mGudw4erwE%P^)5f<*$$2C-4^I=e8-}7##ZQ!8!Tep z+Z_!}CAI~sry$|XK$ktXaxP*x<_ijCPp`2=6sNLZU<@9Sz-rz7^BCE9yh0jV4(I!Z zxmA4d;>B-!vD}Xp*&*N%`b^e&R;D97WS}{~{O-EtXeZNfdf51tw!WR6Noo4hjHPv5 z?heYYRSBPjMc}tFEU^|U8a1CxxK%)WTcn9P%`wR^I$QSeMn6=w>Z9OoVvcrl`zYlZ z2y`mAu0bV(Scc>G_EmIo_4 zm*~h`mxYZC&+U>C5G1FZH5L^U>Cq-9UDRQa35jz&NBj*0{uJKfZs5=Fn@&)Xh6aX(H3w9m9BGLePqVotxTeSPh5-mc7$# z-80t6yB0$Nx<54ohdO*QL7m_(&+#*=eoNiYDB4rE4Cag@qfyZS};Fx;Vf1;oync2k z9v#-w?d6R& zOI`CCS_d=tf3|?g3Z}b6-_Rdg3y~enQhmgkni0Cvf9m6%Ft8r;NC5|b%t&?lkl*4{ z8Ui^;Ds^gq6ti(1xB7y_$zA!i-M~#!!tl$ErTR>P~>T=Yky)8(uvPbvLmB=UfoD zrfl}8<1OQrm?8#j1!?s*T>AoectQl&m!o&*^JcIW`_&bk3tN}k^0rjl=HL$z*uIYt z?7l?^Dqr?q1210Sp$xoAy!&{2^{^Anl460 zI&7urrc&|Y{rjv04VOl{y7c82N6xzg5ueYmQ(q(zC3w_C#x*~%yf5j7MI{W`tsoxzA*PrmK)cTskU| zf2C}Bq$>S$-1JgIh0aW@LxI|-8(OGuD#^M01ghh}&#ObO>tZgSw_LW`zdf&IN$YO# z)|X_9m#JwLW5pErZB3ScggKcNzxA9(hyKkK9I#pR&79&*+SV_eu={00{HF=Bb+AEe znaSof+r1jZ!EL5XgqXWkckaFSSyEk}o!%p8XsD}O>borZ6x%X2b&q!s&1-O(>`kZ$ zB2l^5Cx9xQx9)PXN1xPM)@+LxACH_iZ8zGc(>wnFS_O|@hKsxpMjXOzLEa7OvSlM&&G9ioQw9~RsD4F zK7Q+_&|Q6{eZ^8Rx@pKL`le6kH+(fLc{=V&{b%I5=n}VHV4)X_2Y!pYxgC8wU)yP! zPF3t$?(jsC>Ge=&{kmPGUEETpaw(QTAl)m#{qR3_aq9!wK%6XHfV4C>Y^>Z|%ns7j z{Ja?^IA{+@;kR#IjHxkar%3$eJT4?xNBKUVmoO z`A8Zo-{~_;vcikZ(p}EZzU4kO6WPqkMyE{VvS?;44Z@lj zz^fKX9UL!8Wc(9VgI?P4*zpis8dzl};I>yr1>dtXU=FTAlx}Eht4-*7RACL^AflGh zyZb1hTf(~CkMo%#Q%NMgM9tE2D+)joqbtHYA89Ql1nqVTt+MxZ^*FRd&n5YlIi!8m z>$Ysd!l{+C)y;Wa(ZV-=<+NZKV;v4mt}v2m>`v$-$3b;GsLxf= zd~f(rmfpl``{0aVwN7y!>eGyJFP`L+TxHjHTOS{K^$L2`@6(Rli`{EFwpH@R%eZ6g zwf7rc43Yk!=k;{ z-Rn%~B3amGr}}SxfE$vS8FIPL=Qt57$|R#sSoFgdNUT?fYOYjPl%ZBFpi=jq=DWby7Zxm@y;B<89!9= zbgEH*Uy)~iq5kJLX$+ps$kV`#6jW#|9BGz^`ivNeid(wVbk4jl)VBpW&~;eXNi{#` zwx?{DXR~*sqQcFhY0XCfQ4-*2aN1BGX>$_swtKEqnd>j6vcZ!#0)pXRi?<{!P?tGw z2x_`RD$W)qD{?z}VDPt?+)8*rqLWFIPQ(9-VbBdf{7ff?w9CZ{sIi_gnuC$I0(+P8 zms9XB%}VQ>>pve##}jog6+cD?v~n4Pa9Vmc zg#K$|+`adO=B7`uj35Y}6EZ z{dY`x@w8;R-7zrsr1O_~Jvl*|o-x%jF=Rr1C}GXP^|IYN`1sqmG-oI@R#%X66c#5W z$$tQB)sqwiVm;Y^`Dw3mo|firP{*HsOQJre5%Dm^H@we0FN88VWJ0dja?_U38z73f zrCV!b3qNP0kM#%9T!W5`ynGcg%BL28FW1J-J1_S`BJGCaReQ!am(2%qZ3lLgzq|ns z!!fF@`0=*z)J2BwZ*hO|Yu^cI_nF$9l-Pb3jE7=P8gZ#!xiuZ7-cSa`gb`6mxGTgg z-DLdID?M!Z%+hHB#{?&0$GFRpf+_}q<_wbzX6K?w;%6szz1RbySDSr2r^h_qi$khs zXdZ9A0!_Bf)TR2-^-K~q`FQ!#1x(U4VbV%AA@Ei{%cA(EwC{XfjRi?`&9rav5;Q5% zO1`Rn@OA_ZB@N*mC#)?d3P!}Eh;=NgpIKsy{(yr`hv=aouwt@r&P&}Z3DNWo9ro30 zX52~(aTV$*HHlgB66-4GQru!_AZ|)V*I5X=WG)`N@U&D>e@@C#V@JwEL*L`7#$yes z62C^5%Qniaow2$3HrAc7U{qzpb&FA*xLI1JSWR@`RF=JCcvTI)%dH7;sWInt9JLu# z|Ao|Q?K)cDg_JKsym=joo5gR80wtv01N`um1nQ@Ms0Y*bVzxL34} zo?gizp?`=Y{*W>^Hy2%Jl)y?A+&7s1UVHFixuIy~sawXjcDCL`129cK7|ZQS0u;A} zTJC#WNmqkIrnHpAhHVcM(U^vJA~dl@jf_bs*3?i+=&vuC?Aiy_pcB~=1syDni4 zw+FLuz>F773u#$;NUQ9WDtUPY@+rA3WBhQdKFKOyzkA(URa7;4tW>3jQIfi8v0h3g zJC_HVDXS#>DWb|&se7FHnr=q&l#xg9o02}}u=b-R>@sw={Z zHF*?t2FmhqZ=|qa>x=A!*$S+0T zhO*D*M?NTf-eX`eO)9TIQu{7Dm77Acnj4b1jI9@c*ZL8wL%8kLEhd$KM8=Y!fbN@9 zC7B5#y>JM1n5M)!&im==EgHs2j+xCZG~+~QWCi?s!QyFo2kqx{%jE2n3^N*Ayz6Lp zhg5g^3# z+5FoJ@$u@9WJgPKpUWEd4}4AK9TJKU8W%ms!d0p%OIOX+bY+55zl!vIaz$XFI9Ep+ z;bL_}7PDI2Y`Ng*XY(65 zh0%`@Lve%fc;)N4_g12bNrt6gH=N#OHtxO`$lpWlw=Z6MF+E@;>GkZ#lAZTn`aHwf z&I1|aV#b_VHMIgBN*RzU9i@Z@m}0i>o?({&%fpEfaOpFeaJ7V37;m0?kzd}}Lk@9$ zL}8TEo7WZAcRi%zFZxkr6<0k#X-;lTD`Oc~cDb@olwgWCewvk{GJ}hCXbF!AdiLpd z|Cck$ZTKI?Ack{34Lva7+k=H8K2HTZiurox6F+>dy+@R9T^awxj590D$|kXUg+Ygc z(f)jlRwN(4z$#%PnOVc;#Fv{nAi{#UcXPNcmP#5O{zh_*`=q^JCeia{sN4zHjk2*y zqUVh{Ya{j>SPmP^i#Qfcq_MTqo8g52Fi^F zKBc$$HVI!xFx*4Y9l+nt)$AoZORD}%5I10oI3kx`-N30QueiwIw#0VV2E*Fb-nKW% z=+r^hos`Y-7~{cA1FVbK$_=~*z53+Q8KGjg;>ztg((H12%QTf4OYU8y)C}h5yo#$% z&Q$`vMM*g?ZcatAn2j!hFv8KuN(dw)T*}sF#THDHxo8xC^?vJ zc`U6bVo~hOr6I!8*GTZ<^D~;unKjK=!IR|GB4E>Mcvt*2GK);93jIDd<(nNjHO z4Hi@2^%Uyx=^Z~5eZ!5rO5%4H|eFoNjD#+Kcu%_57zZb4Z@Ak#X6txD^{U3wBl^r+W- zLorkK;uc;NgTj7dGxHQS+@T*T>Q*j4^Ll$ejQqWrwcHyG9y%Mk%m8nBVG5hvSaYm5 zJN^#-Q46kZG)@T8n2^QCjxIwxUVi%s>EY`E?#@_(A~njFrTiDq;8v|W-1jT|ROlNI zU$h|YoD4PVTE^&NC6_m{EAFBVqsM`P*`-AcDGWQygURzM32Xeq2xng~XQsYeTZ5v$ zQLaa2M_Iplw}4eL6fLPu`6`PYcVMysO>`{8CB~glD=TX7?JZcHfHNmykBM?QD)#D) zGp>R*<^D?WhFQKRc^}22l6F=D2RPrxaX2ZF!b1X0XF*d4%=!sbNcS1q2WOUE(7e4$ z^L8f;F)__d3>&KQFE8%$I4h^y5FYBfB&fWzn71_OSrPe-DHV{O#Q;GP z+Tw!J?eVjX19RKH?*hKQWQt8r7B#lYX8xoSHFGCW-*DSQ4EM4M3Mw%gkSYNK18@(e zfzMF}WWaCyS@1y%-~Xg0ry~tkQkUmKuI5lGAua{{vn22V!2T()AU5FpKh@Nv)s^Js zv~@VuUG;=CnLmQR{PeUBQf2;lAV!vG>^Z0N zL88rrjL-*J!43;7C=w9xhcw`yjRKq7o4L9=0SmR9PA-nX12@#h(iIu-0N_xm2OV)( zU_raT0y>$wm^oMi2|U3N;OhF9uy}`<-xVka#DV*l{O0yHzi9vUxa1Qtpi$buR*8cU zd4~lS1pT$L^!0=6qUKOpM+XPsy{f7W#1bjrEwaeN!Ik9(zySIT^pEHvHgJUneFN4) zk=k|$55(g8slmS|@+*4fr2urd3LwjIIZA**g+%l(SZNn4HwQ}y6o`vw>2&mR1X+&q zDa1Af0B;4rAMZMOlHbAqK|R_xuwJ7ANARtFE({-P2o{tJJR<>2KVp)ZK-M;)ejx zd*E~Mka<{OL7%CAhk4n|1qg?97-I!l0rOinjVi#arbgg4bi5;nY5oFL`UWtPk5&L#grSxv zE3!}=1px!ZTLT90aYc^s`~{VojjJml&<`@e41dFP+XU6D0AOkbn2rlI3>^LcqauG& zc$m3Z{!u8LvUrm^fT{qX5yD9{?r(CCiUdck%!T`KIZd2oQJz1joB&M(Teg_>;yS<2-5>BWfSPpG`Rt{!j6>kqMAvl^zk0JUEfy$HVJMkxP-GkwZuxL62me2#pj_5*ZIU zP~#C^OZLfl$HO)v;~~c&JHivn|1I9H5y_CDkt0JLLGKm(4*KLVhJ2jh2#vJuM6`b& zE==-lvME^Oj022xF&IV*? '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..6a68175 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS=-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..a9ad0d1 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'openfga-sdk' \ No newline at end of file diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java new file mode 100644 index 0000000..0192838 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -0,0 +1,1666 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.ApiException; +import dev.openfga.sdk.api.client.ApiResponse; +import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.Pair; +import dev.openfga.sdk.api.model.CheckRequest; +import dev.openfga.sdk.api.model.CheckResponse; +import dev.openfga.sdk.api.model.CreateStoreRequest; +import dev.openfga.sdk.api.model.CreateStoreResponse; +import dev.openfga.sdk.api.model.ExpandRequest; +import dev.openfga.sdk.api.model.ExpandResponse; +import dev.openfga.sdk.api.model.GetStoreResponse; +import dev.openfga.sdk.api.model.ListObjectsRequest; +import dev.openfga.sdk.api.model.ListObjectsResponse; +import dev.openfga.sdk.api.model.ListStoresResponse; +import dev.openfga.sdk.api.model.ReadAssertionsResponse; +import dev.openfga.sdk.api.model.ReadAuthorizationModelResponse; +import dev.openfga.sdk.api.model.ReadAuthorizationModelsResponse; +import dev.openfga.sdk.api.model.ReadChangesResponse; +import dev.openfga.sdk.api.model.ReadRequest; +import dev.openfga.sdk.api.model.ReadResponse; +import dev.openfga.sdk.api.model.WriteAssertionsRequest; +import dev.openfga.sdk.api.model.WriteAuthorizationModelRequest; +import dev.openfga.sdk.api.model.WriteAuthorizationModelResponse; +import dev.openfga.sdk.api.model.WriteRequest; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.StringJoiner; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; + +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class OpenFgaApi { + private final HttpClient memberVarHttpClient; + private final ObjectMapper memberVarObjectMapper; + private final Configuration memberVarConfiguration; + private final String memberVarBaseUri; + private final Duration memberVarReadTimeout; + private final Consumer memberVarInterceptor; + private final Consumer> memberVarResponseInterceptor; + private final Consumer> memberVarAsyncResponseInterceptor; + + public OpenFgaApi(ApiClient apiClient, Configuration configuration) { + memberVarHttpClient = apiClient.getHttpClient(); + memberVarObjectMapper = apiClient.getObjectMapper(); + memberVarConfiguration = configuration; + memberVarBaseUri = configuration.getApiUrl(); + memberVarReadTimeout = configuration.getReadTimeout(); + memberVarInterceptor = apiClient.getRequestInterceptor(); + memberVarResponseInterceptor = apiClient.getResponseInterceptor(); + memberVarAsyncResponseInterceptor = apiClient.getAsyncResponseInterceptor(); + } + + private ApiException getApiException(String operationId, HttpResponse response) { + String message = formatExceptionMessage(operationId, response.statusCode(), response.body()); + return new ApiException(response.statusCode(), message, response.headers(), response.body()); + } + + private String formatExceptionMessage(String operationId, int statusCode, String body) { + if (body == null || body.isEmpty()) { + body = "[no body]"; + } + return operationId + " call failed with: " + statusCode + " - " + body; + } + + /** + * Check whether a user is authorized to access an object + * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<CheckResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture check(String storeId, CheckRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("check", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Check whether a user is authorized to access an object + * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<CheckResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> checkWithHttpInfo(String storeId, CheckRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("check", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling check"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling check"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/check".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Create a store + * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + * @param body (required) + * @return CompletableFuture<CreateStoreResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture createStore(CreateStoreRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("createStore", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Create a store + * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + * @param body (required) + * @return CompletableFuture<ApiResponse<CreateStoreResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> createStoreWithHttpInfo(CreateStoreRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("createStore", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body) throws ApiException { + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling createStore"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Delete a store + * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + * @param storeId (required) + * @return CompletableFuture<Void> + * @throws ApiException if fails to make API call + */ + public CompletableFuture deleteStore(String storeId) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("deleteStore", localVarResponse)); + } + return CompletableFuture.completedFuture(null); + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Delete a store + * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + * @param storeId (required) + * @return CompletableFuture<ApiResponse<Void>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> deleteStoreWithHttpInfo(String storeId) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("deleteStore", localVarResponse)); + } + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + null)); + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder deleteStoreRequestBuilder(String storeId) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling deleteStore"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ExpandResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture expand(String storeId, ExpandRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("expand", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<ExpandResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> expandWithHttpInfo(String storeId, ExpandRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("expand", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling expand"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling expand"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/stores/{store_id}/expand".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Get a store + * Returns an OpenFGA store by its identifier + * @param storeId (required) + * @return CompletableFuture<GetStoreResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture getStore(String storeId) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("getStore", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Get a store + * Returns an OpenFGA store by its identifier + * @param storeId (required) + * @return CompletableFuture<ApiResponse<GetStoreResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> getStoreWithHttpInfo(String storeId) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("getStore", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder getStoreRequestBuilder(String storeId) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling getStore"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * List all objects of the given type that the user has a relation with + * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ListObjectsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture listObjects(String storeId, ListObjectsRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("listObjects", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * List all objects of the given type that the user has a relation with + * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<ListObjectsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> listObjectsWithHttpInfo( + String storeId, ListObjectsRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("listObjects", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder listObjectsRequestBuilder(String storeId, ListObjectsRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling listObjects"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling listObjects"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/stores/{store_id}/list-objects".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * List all stores + * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ListStoresResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture listStores(Integer pageSize, String continuationToken) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = listStoresRequestBuilder(pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("listStores", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * List all stores + * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ApiResponse<ListStoresResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> listStoresWithHttpInfo( + Integer pageSize, String continuationToken) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = listStoresRequestBuilder(pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("listStores", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder listStoresRequestBuilder(Integer pageSize, String continuationToken) + throws ApiException { + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores"; + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "page_size"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page_size", pageSize)); + localVarQueryParameterBaseName = "continuation_token"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("continuation_token", continuationToken)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Get tuples from the store that matches a query, without following userset rewrite rules + * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ReadResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture read(String storeId, ReadRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("read", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Get tuples from the store that matches a query, without following userset rewrite rules + * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<ReadResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readWithHttpInfo(String storeId, ReadRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("read", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling read"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling read"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/read".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Read assertions for an authorization model ID + * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @return CompletableFuture<ReadAssertionsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAssertions(String storeId, String authorizationModelId) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readAssertionsRequestBuilder(storeId, authorizationModelId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("readAssertions", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Read assertions for an authorization model ID + * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @return CompletableFuture<ApiResponse<ReadAssertionsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAssertionsWithHttpInfo( + String storeId, String authorizationModelId) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readAssertionsRequestBuilder(storeId, authorizationModelId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("readAssertions", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder readAssertionsRequestBuilder(String storeId, String authorizationModelId) + throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAssertions"); + } + // verify the required parameter 'authorizationModelId' is set + if (authorizationModelId == null) { + throw new ApiException( + 400, "Missing the required parameter 'authorizationModelId' when calling readAssertions"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/assertions/{authorization_model_id}" + .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) + .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Return a particular version of an authorization model + * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + * @param storeId (required) + * @param id (required) + * @return CompletableFuture<ReadAuthorizationModelResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAuthorizationModel(String storeId, String id) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelRequestBuilder(storeId, id); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("readAuthorizationModel", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Return a particular version of an authorization model + * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + * @param storeId (required) + * @param id (required) + * @return CompletableFuture<ApiResponse<ReadAuthorizationModelResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAuthorizationModelWithHttpInfo( + String storeId, String id) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelRequestBuilder(storeId, id); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("readAuthorizationModel", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder readAuthorizationModelRequestBuilder(String storeId, String id) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAuthorizationModel"); + } + // verify the required parameter 'id' is set + if (id == null) { + throw new ApiException(400, "Missing the required parameter 'id' when calling readAuthorizationModel"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/authorization-models/{id}" + .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) + .replace("{id}", ApiClient.urlEncode(id.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Return all the authorization models for a particular store + * The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + * @param storeId (required) + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ReadAuthorizationModelsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAuthorizationModels( + String storeId, Integer pageSize, String continuationToken) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("readAuthorizationModels", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Return all the authorization models for a particular store + * The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + * @param storeId (required) + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ApiResponse<ReadAuthorizationModelsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAuthorizationModelsWithHttpInfo( + String storeId, Integer pageSize, String continuationToken) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("readAuthorizationModels", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder readAuthorizationModelsRequestBuilder( + String storeId, Integer pageSize, String continuationToken) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException( + 400, "Missing the required parameter 'storeId' when calling readAuthorizationModels"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/authorization-models" + .replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "page_size"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page_size", pageSize)); + localVarQueryParameterBaseName = "continuation_token"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("continuation_token", continuationToken)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Return a list of all the tuple changes + * The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + * @param storeId (required) + * @param type (optional) + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ReadChangesResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readChanges( + String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + readChangesRequestBuilder(storeId, type, pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("readChanges", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Return a list of all the tuple changes + * The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + * @param storeId (required) + * @param type (optional) + * @param pageSize (optional) + * @param continuationToken (optional) + * @return CompletableFuture<ApiResponse<ReadChangesResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readChangesWithHttpInfo( + String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + readChangesRequestBuilder(storeId, type, pageSize, continuationToken); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("readChanges", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder readChangesRequestBuilder( + String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling readChanges"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/stores/{store_id}/changes".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "type"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("type", type)); + localVarQueryParameterBaseName = "page_size"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page_size", pageSize)); + localVarQueryParameterBaseName = "continuation_token"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("continuation_token", continuationToken)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Add or delete tuples from the store + * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<Object> + * @throws ApiException if fails to make API call + */ + public CompletableFuture write(String storeId, WriteRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("write", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Add or delete tuples from the store + * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<Object>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeWithHttpInfo(String storeId, WriteRequest body) + throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("write", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling write"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling write"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/write".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Upsert assertions for an authorization model ID + * The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param body (required) + * @return CompletableFuture<Void> + * @throws ApiException if fails to make API call + */ + public CompletableFuture writeAssertions( + String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + writeAssertionsRequestBuilder(storeId, authorizationModelId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("writeAssertions", localVarResponse)); + } + return CompletableFuture.completedFuture(null); + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Upsert assertions for an authorization model ID + * The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<Void>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeAssertionsWithHttpInfo( + String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = + writeAssertionsRequestBuilder(storeId, authorizationModelId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture(getApiException("writeAssertions", localVarResponse)); + } + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + null)); + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder writeAssertionsRequestBuilder( + String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException(400, "Missing the required parameter 'storeId' when calling writeAssertions"); + } + // verify the required parameter 'authorizationModelId' is set + if (authorizationModelId == null) { + throw new ApiException( + 400, "Missing the required parameter 'authorizationModelId' when calling writeAssertions"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling writeAssertions"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/assertions/{authorization_model_id}" + .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) + .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("PUT", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Create a new authorization model + * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<WriteAuthorizationModelResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture writeAuthorizationModel( + String storeId, WriteAuthorizationModelRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = writeAuthorizationModelRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("writeAuthorizationModel", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {})); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + /** + * Create a new authorization model + * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + * @param storeId (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<WriteAuthorizationModelResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeAuthorizationModelWithHttpInfo( + String storeId, WriteAuthorizationModelRequest body) throws ApiException { + try { + HttpRequest.Builder localVarRequestBuilder = writeAuthorizationModelRequestBuilder(storeId, body); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync(localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("writeAuthorizationModel", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture(new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder writeAuthorizationModelRequestBuilder( + String storeId, WriteAuthorizationModelRequest body) throws ApiException { + // verify the required parameter 'storeId' is set + if (storeId == null) { + throw new ApiException( + 400, "Missing the required parameter 'storeId' when calling writeAuthorizationModel"); + } + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling writeAuthorizationModel"); + } + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/stores/{store_id}/authorization-models" + .replace("{store_id}", ApiClient.urlEncode(storeId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiBearerToken.java b/src/main/java/dev/openfga/sdk/api/client/ApiBearerToken.java new file mode 100644 index 0000000..03108eb --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ApiBearerToken.java @@ -0,0 +1,29 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +public class ApiBearerToken { + private String token; + + public ApiBearerToken(String token) { + this.token = token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getToken() { + return this.token; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java new file mode 100644 index 0000000..82d76f2 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java @@ -0,0 +1,327 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import java.io.InputStream; +import java.net.URLEncoder; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.StringJoiner; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import org.openapitools.jackson.nullable.JsonNullableModule; + +/** + * Configuration and utility class for API clients. + * + *

This class can be constructed and modified, then used to instantiate the + * various API classes. The API classes use the settings in this class to + * configure themselves, but otherwise do not store a link to this class.

+ * + *

This class is mutable and not synchronized, so it is not thread-safe. + * The API classes generated from this are immutable and thread-safe.

+ * + *

The setter methods of this class return the current object to facilitate + * a fluent style of configuration.

+ */ +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ApiClient { + + private HttpClient.Builder builder; + private ObjectMapper mapper; + private Consumer interceptor; + private Consumer> responseInterceptor; + private Consumer> asyncResponseInterceptor; + + /** + * Create an instance of ApiClient. + */ + public ApiClient() { + this.builder = createDefaultHttpClientBuilder(); + this.mapper = createDefaultObjectMapper(); + interceptor = null; + responseInterceptor = null; + asyncResponseInterceptor = null; + } + + /** + * Create an instance of ApiClient. + *

+ * In other contexts, note that any settings in a {@link Configuration} + * will take precedence over equivalent settings in the + * {@link HttpClient.Builder} here. + * + * @param builder Http client builder. + * @param mapper Object mapper. + */ + public ApiClient(HttpClient.Builder builder, ObjectMapper mapper) { + this.builder = builder; + this.mapper = mapper; + interceptor = null; + responseInterceptor = null; + asyncResponseInterceptor = null; + } + + private static String valueToString(Object value) { + if (value == null) { + return ""; + } + if (value instanceof OffsetDateTime) { + return ((OffsetDateTime) value).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + return value.toString(); + } + + /** + * URL encode a string in the UTF-8 encoding. + * + * @param s String to encode. + * @return URL-encoded representation of the input string. + */ + public static String urlEncode(String s) { + return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20"); + } + + /** + * Convert a URL query name/value parameter to a list of encoded {@link Pair} + * objects. + * + *

The value can be null, in which case an empty list is returned.

+ * + * @param name The query name parameter. + * @param value The query value, which may not be a collection but may be + * null. + * @return A singleton list of the {@link Pair} objects representing the input + * parameters, which is encoded for use in a URL. If the value is null, an + * empty list is returned. + */ + public static List parameterToPairs(String name, Object value) { + if (name == null || name.isEmpty() || value == null) { + return Collections.emptyList(); + } + return Collections.singletonList(new Pair(urlEncode(name), urlEncode(valueToString(value)))); + } + + /** + * Convert a URL query name/collection parameter to a list of encoded + * {@link Pair} objects. + * + * @param collectionFormat The swagger collectionFormat string (csv, tsv, etc). + * @param name The query name parameter. + * @param values A collection of values for the given query name, which may be + * null. + * @return A list of {@link Pair} objects representing the input parameters, + * which is encoded for use in a URL. If the values collection is null, an + * empty list is returned. + */ + public static List parameterToPairs(String collectionFormat, String name, Collection values) { + if (name == null || name.isEmpty() || values == null || values.isEmpty()) { + return Collections.emptyList(); + } + + // get the collection format (default: csv) + String format = collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat; + + // create the params based on the collection format + if ("multi".equals(format)) { + return values.stream() + .map(value -> new Pair(urlEncode(name), urlEncode(valueToString(value)))) + .collect(Collectors.toList()); + } + + String delimiter; + switch (format) { + case "csv": + delimiter = urlEncode(","); + break; + case "ssv": + delimiter = urlEncode(" "); + break; + case "tsv": + delimiter = urlEncode("\t"); + break; + case "pipes": + delimiter = urlEncode("|"); + break; + default: + throw new IllegalArgumentException("Illegal collection format: " + collectionFormat); + } + + StringJoiner joiner = new StringJoiner(delimiter); + for (Object value : values) { + joiner.add(urlEncode(valueToString(value))); + } + + return Collections.singletonList(new Pair(urlEncode(name), joiner.toString())); + } + + protected ObjectMapper createDefaultObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); + mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); + mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); + mapper.registerModule(new JavaTimeModule()); + mapper.registerModule(new JsonNullableModule()); + return mapper; + } + + protected String getDefaultBaseUri() { + return "http://localhost"; + } + + protected HttpClient.Builder createDefaultHttpClientBuilder() { + return HttpClient.newBuilder(); + } + + /** + * Set a custom {@link HttpClient.Builder} object to use when creating the + * {@link HttpClient} that is used by the API client. + *

+ * In other contexts, note that any settings in a {@link Configuration} + * will take precedence over equivalent settings in the + * {@link HttpClient.Builder} here. + * + * @param builder Custom client builder. + * @return This object. + */ + public ApiClient setHttpClientBuilder(HttpClient.Builder builder) { + this.builder = builder; + return this; + } + + /** + * Get an {@link HttpClient} based on the current {@link HttpClient.Builder}. + * + *

The returned object is immutable and thread-safe.

+ * + * @return The HTTP client. + */ + public HttpClient getHttpClient() { + return builder.build(); + } + + /** + * Set a custom {@link ObjectMapper} to serialize and deserialize the request + * and response bodies. + * + * @param mapper Custom object mapper. + * @return This object. + */ + public ApiClient setObjectMapper(ObjectMapper mapper) { + this.mapper = mapper; + return this; + } + + /** + * Get a copy of the current {@link ObjectMapper}. + * + * @return A copy of the current object mapper. + */ + public ObjectMapper getObjectMapper() { + return mapper.copy(); + } + + /** + * Set a custom request interceptor. + * + *

A request interceptor is a mechanism for altering each request before it + * is sent. After the request has been fully configured but not yet built, the + * request builder is passed into this function for further modification, + * after which it is sent out.

+ * + *

This is useful for altering the requests in a custom manner, such as + * adding headers. It could also be used for logging and monitoring.

+ * + * @param interceptor A function invoked before creating each request. A value + * of null resets the interceptor to a no-op. + * @return This object. + */ + public ApiClient setRequestInterceptor(Consumer interceptor) { + this.interceptor = interceptor; + return this; + } + + /** + * Get the custom interceptor. + * + * @return The custom interceptor that was set, or null if there isn't any. + */ + public Consumer getRequestInterceptor() { + return interceptor; + } + + /** + * Set a custom response interceptor. + * + *

This is useful for logging, monitoring or extraction of header variables

+ * + * @param interceptor A function invoked before creating each request. A value + * of null resets the interceptor to a no-op. + * @return This object. + */ + public ApiClient setResponseInterceptor(Consumer> interceptor) { + this.responseInterceptor = interceptor; + return this; + } + + /** + * Get the custom response interceptor. + * + * @return The custom interceptor that was set, or null if there isn't any. + */ + public Consumer> getResponseInterceptor() { + return responseInterceptor; + } + + /** + * Set a custom async response interceptor. Use this interceptor when asyncNative is set to 'true'. + * + *

This is useful for logging, monitoring or extraction of header variables

+ * + * @param interceptor A function invoked before creating each request. A value + * of null resets the interceptor to a no-op. + * @return This object. + */ + public ApiClient setAsyncResponseInterceptor(Consumer> interceptor) { + this.asyncResponseInterceptor = interceptor; + return this; + } + + /** + * Get the custom async response interceptor. Use this interceptor when asyncNative is set to 'true'. + * + * @return The custom interceptor that was set, or null if there isn't any. + */ + public Consumer> getAsyncResponseInterceptor() { + return asyncResponseInterceptor; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiException.java b/src/main/java/dev/openfga/sdk/api/client/ApiException.java new file mode 100644 index 0000000..d08528d --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ApiException.java @@ -0,0 +1,92 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import java.net.http.HttpHeaders; + +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ApiException extends Exception { + private int code = 0; + private HttpHeaders responseHeaders = null; + private String responseBody = null; + + public ApiException() {} + + public ApiException(Throwable throwable) { + super(throwable); + } + + public ApiException(String message) { + super(message); + } + + public ApiException( + String message, Throwable throwable, int code, HttpHeaders responseHeaders, String responseBody) { + super(message, throwable); + this.code = code; + this.responseHeaders = responseHeaders; + this.responseBody = responseBody; + } + + public ApiException(String message, int code, HttpHeaders responseHeaders, String responseBody) { + this(message, (Throwable) null, code, responseHeaders, responseBody); + } + + public ApiException(String message, Throwable throwable, int code, HttpHeaders responseHeaders) { + this(message, throwable, code, responseHeaders, null); + } + + public ApiException(int code, HttpHeaders responseHeaders, String responseBody) { + this((String) null, (Throwable) null, code, responseHeaders, responseBody); + } + + public ApiException(int code, String message) { + super(message); + this.code = code; + } + + public ApiException(int code, String message, HttpHeaders responseHeaders, String responseBody) { + this(code, message); + this.responseHeaders = responseHeaders; + this.responseBody = responseBody; + } + + /** + * Get the HTTP status code. + * + * @return HTTP status code + */ + public int getCode() { + return code; + } + + /** + * Get the HTTP response headers. + * + * @return Headers as an HttpHeaders object + */ + public HttpHeaders getResponseHeaders() { + return responseHeaders; + } + + /** + * Get the HTTP response body. + * + * @return Response body in the form of string + */ + public String getResponseBody() { + return responseBody; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiResponse.java b/src/main/java/dev/openfga/sdk/api/client/ApiResponse.java new file mode 100644 index 0000000..143a9c5 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ApiResponse.java @@ -0,0 +1,64 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +/** + * API response returned by API call. + * + * @param The type of data that is deserialized from response body + */ +public class ApiResponse { + private final int statusCode; + private final Map> headers; + private final T data; + + /** + * @param statusCode The status code of HTTP response + * @param headers The headers of HTTP response + */ + public ApiResponse(int statusCode, Map> headers) { + this(statusCode, headers, null); + } + + /** + * @param statusCode The status code of HTTP response + * @param headers The headers of HTTP response + * @param data The object deserialized from response bod + */ + public ApiResponse(int statusCode, Map> headers, T data) { + this.statusCode = statusCode; + Map> responseHeaders = new TreeMap>(String.CASE_INSENSITIVE_ORDER); + for (Entry> entry : headers.entrySet()) { + responseHeaders.put(entry.getKey().toLowerCase(), entry.getValue()); + } + this.headers = responseHeaders; + this.data = data; + } + + public int getStatusCode() { + return statusCode; + } + + public Map> getHeaders() { + return headers; + } + + public T getData() { + return data; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java b/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java new file mode 100644 index 0000000..d1f4ce0 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java @@ -0,0 +1,28 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import dev.openfga.sdk.errors.FgaInvalidParameterException; +import java.time.Duration; + +public interface BaseConfiguration { + void assertValid() throws FgaInvalidParameterException; + + String getApiUrl(); + + String getUserAgent(); + + Duration getReadTimeout(); + + Duration getConnectTimeout(); +} diff --git a/src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java b/src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java new file mode 100644 index 0000000..dcf859a --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java @@ -0,0 +1,80 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import static dev.openfga.util.StringUtil.isNullOrWhitespace; + +import dev.openfga.sdk.errors.FgaInvalidParameterException; + +public class ClientCredentials { + private String clientId; + private String clientSecret; + private String apiTokenIssuer; + private String apiAudience; + + public ClientCredentials() {} + + public ClientCredentials clientId(String clientId) { + this.clientId = clientId; + return this; + } + + public void assertValid() throws FgaInvalidParameterException { + if (isNullOrWhitespace(clientId)) { + throw new FgaInvalidParameterException("clientId", "ClientCredentials"); + } + + if (isNullOrWhitespace(clientSecret)) { + throw new FgaInvalidParameterException("clientSecret", "ClientCredentials"); + } + + if (isNullOrWhitespace(apiTokenIssuer)) { + throw new FgaInvalidParameterException("apiTokenIssuer", "ClientCredentials"); + } + + if (isNullOrWhitespace(apiAudience)) { + throw new FgaInvalidParameterException("apiAudience", "ClientCredentials"); + } + } + + public String getClientId() { + return this.clientId; + } + + public ClientCredentials clientSecret(String clientSecret) { + this.clientSecret = clientSecret; + return this; + } + + public String getClientSecret() { + return this.clientSecret; + } + + public ClientCredentials apiTokenIssuer(String apiTokenIssuer) { + this.apiTokenIssuer = apiTokenIssuer; + return this; + } + + public String getApiTokenIssuer() { + return this.apiTokenIssuer; + } + + public ClientCredentials apiAudience(String apiAudience) { + this.apiAudience = apiAudience; + return this; + } + + public String getApiAudience() { + return this.apiAudience; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/Configuration.java b/src/main/java/dev/openfga/sdk/api/client/Configuration.java new file mode 100644 index 0000000..aa9af11 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/Configuration.java @@ -0,0 +1,179 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import static dev.openfga.util.StringUtil.isNullOrWhitespace; + +import dev.openfga.sdk.errors.FgaInvalidParameterException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.net.http.HttpClient; +import java.net.http.HttpConnectTimeoutException; +import java.net.http.HttpRequest; +import java.time.Duration; + +/** + * Configurations for an ApiClient. + */ +public class Configuration implements BaseConfiguration { + public static final String VERSION = "0.0.1"; + + private static final String DEFAULT_API_URL = "http://localhost:8080"; + private static final String DEFAULT_USER_AGENT = "openfga-sdk java/0.0.1"; + private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofSeconds(10); + private static final Duration DEFAULT_CONNECT_TIMEOUT = Duration.ofSeconds(10); + + private String apiUrl; + private String userAgent; + private Duration readTimeout; + private Duration connectTimeout; + + public Configuration(String apiUrl) { + this.apiUrl = apiUrl; + this.userAgent = DEFAULT_USER_AGENT; + this.readTimeout = DEFAULT_READ_TIMEOUT; + this.connectTimeout = DEFAULT_CONNECT_TIMEOUT; + } + + /** + * Assert that the configuration is valid. + */ + @Override + public void assertValid() throws FgaInvalidParameterException { + // If apiUrl is null/empty/whitespace it will resolve to + // DEFAULT_API_URL when getApiUrl is called. + if (!isNullOrWhitespace(apiUrl)) { + URI uri; + + try { + uri = URI.create(apiUrl); + URL _url = uri.toURL(); + } catch (MalformedURLException | IllegalArgumentException cause) { + throw new FgaInvalidParameterException("apiUrl", "Configuration", cause); + } + + if (isNullOrWhitespace(uri.getScheme())) { + throw new FgaInvalidParameterException("scheme", "Configuration"); + } + + if (isNullOrWhitespace(uri.getHost())) { + throw new FgaInvalidParameterException("hostname", "Configuration"); + } + } + } + + /** + * Set the API URL for the http client. + * + * @param apiUrl The URL. + * @return This object. + */ + public BaseConfiguration apiUrl(String apiUrl) { + this.apiUrl = apiUrl; + return this; + } + + /** + * Get the API URL that was set. + * + * @return The url. + */ + @Override + public String getApiUrl() { + if (isNullOrWhitespace(apiUrl)) { + return DEFAULT_API_URL; + } + + return apiUrl; + } + + /** + * Set the user agent. + * + * @param userAgent The user agent. + * @return This object. + */ + public BaseConfiguration userAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + + /** + * Get the user agent. + * + * @return The user agent. + */ + @Override + public String getUserAgent() { + return userAgent; + } + + /** + * Set the read timeout for the http client. + * + *

This is the value used by default for each request, though it can be + * overridden on a per-request basis with a request interceptor.

+ * + * @param readTimeout The read timeout used by default by the http client. + * Setting this value to null resets the timeout to an + * effectively infinite value. + * @return This object. + */ + public BaseConfiguration readTimeout(Duration readTimeout) { + this.readTimeout = readTimeout; + return this; + } + + /** + * Get the read timeout that was set. + * + * @return The read timeout, or null if no timeout was set. Null represents + * an infinite wait time. + */ + @Override + public Duration getReadTimeout() { + return readTimeout; + } + + /** + * Sets the connect timeout (in milliseconds) for the http client. + * + *

In the case where a new connection needs to be established, if + * the connection cannot be established within the given {@code + * duration}, then {@link HttpClient#send(HttpRequest, BodyHandler) + * HttpClient::send} throws an {@link HttpConnectTimeoutException}, or + * {@link HttpClient#sendAsync(HttpRequest, BodyHandler) + * HttpClient::sendAsync} completes exceptionally with an + * {@code HttpConnectTimeoutException}. If a new connection does not + * need to be established, for example if a connection can be reused + * from a previous request, then this timeout duration has no effect. + * + * @param connectTimeout connection timeout in milliseconds + * @return This object. + */ + public BaseConfiguration connectTimeout(Duration connectTimeout) { + this.connectTimeout = connectTimeout; + return this; + } + + /** + * Get connection timeout (in milliseconds). + * + * @return Timeout in milliseconds + */ + @Override + public Duration getConnectTimeout() { + return connectTimeout; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java b/src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java new file mode 100644 index 0000000..5bec856 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java @@ -0,0 +1,41 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +/** + * + */ +public enum CredentialsMethod { + NONE, + API_BEARER_TOKEN, + CLIENT_CREDENTIALS; + + private ApiBearerToken apiBearerToken; + private ClientCredentials clientCredentials; + + public static CredentialsMethod none() { + return NONE; + } + + public static CredentialsMethod apiBearerToken(ApiBearerToken apiBearerToken) { + CredentialsMethod it = API_BEARER_TOKEN; + it.apiBearerToken = apiBearerToken; + return it; + } + + public static CredentialsMethod clientCredentials(ClientCredentials clientCredentials) { + CredentialsMethod it = CLIENT_CREDENTIALS; + it.clientCredentials = clientCredentials; + return it; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/JSON.java b/src/main/java/dev/openfga/sdk/api/client/JSON.java new file mode 100644 index 0000000..e4c9f44 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/JSON.java @@ -0,0 +1,254 @@ +package dev.openfga.sdk.api.client; + +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import dev.openfga.sdk.api.model.*; +import java.text.DateFormat; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import org.openapitools.jackson.nullable.JsonNullableModule; + +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class JSON { + private ObjectMapper mapper; + + public JSON() { + mapper = JsonMapper.builder() + .configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true) + .configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, true) + .build(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); + mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); + mapper.setDateFormat(new RFC3339DateFormat()); + mapper.registerModule(new JavaTimeModule()); + JsonNullableModule jnm = new JsonNullableModule(); + mapper.registerModule(jnm); + } + + /** + * Set the date format for JSON (de)serialization with Date properties. + * + * @param dateFormat Date format + */ + public void setDateFormat(DateFormat dateFormat) { + mapper.setDateFormat(dateFormat); + } + + /** + * Get the object mapper + * + * @return object mapper + */ + public ObjectMapper getMapper() { + return mapper; + } + + /** + * Returns the target model class that should be used to deserialize the input data. + * The discriminator mappings are used to determine the target model class. + * + * @param node The input data. + * @param modelClass The class that contains the discriminator mappings. + * + * @return the target model class. + */ + public static Class getClassForElement(JsonNode node, Class modelClass) { + ClassDiscriminatorMapping cdm = modelDiscriminators.get(modelClass); + if (cdm != null) { + return cdm.getClassForElement(node, new HashSet>()); + } + return null; + } + + /** + * Helper class to register the discriminator mappings. + */ + private static class ClassDiscriminatorMapping { + // The model class name. + Class modelClass; + // The name of the discriminator property. + String discriminatorName; + // The discriminator mappings for a model class. + Map> discriminatorMappings; + + // Constructs a new class discriminator. + ClassDiscriminatorMapping(Class cls, String propertyName, Map> mappings) { + modelClass = cls; + discriminatorName = propertyName; + discriminatorMappings = new HashMap>(); + if (mappings != null) { + discriminatorMappings.putAll(mappings); + } + } + + // Return the name of the discriminator property for this model class. + String getDiscriminatorPropertyName() { + return discriminatorName; + } + + // Return the discriminator value or null if the discriminator is not + // present in the payload. + String getDiscriminatorValue(JsonNode node) { + // Determine the value of the discriminator property in the input data. + if (discriminatorName != null) { + // Get the value of the discriminator property, if present in the input payload. + node = node.get(discriminatorName); + if (node != null && node.isValueNode()) { + String discrValue = node.asText(); + if (discrValue != null) { + return discrValue; + } + } + } + return null; + } + + /** + * Returns the target model class that should be used to deserialize the input data. + * This function can be invoked for anyOf/oneOf composed models with discriminator mappings. + * The discriminator mappings are used to determine the target model class. + * + * @param node The input data. + * @param visitedClasses The set of classes that have already been visited. + * + * @return the target model class. + */ + Class getClassForElement(JsonNode node, Set> visitedClasses) { + if (visitedClasses.contains(modelClass)) { + // Class has already been visited. + return null; + } + // Determine the value of the discriminator property in the input data. + String discrValue = getDiscriminatorValue(node); + if (discrValue == null) { + return null; + } + Class cls = discriminatorMappings.get(discrValue); + // It may not be sufficient to return this cls directly because that target class + // may itself be a composed schema, possibly with its own discriminator. + visitedClasses.add(modelClass); + for (Class childClass : discriminatorMappings.values()) { + ClassDiscriminatorMapping childCdm = modelDiscriminators.get(childClass); + if (childCdm == null) { + continue; + } + if (!discriminatorName.equals(childCdm.discriminatorName)) { + discrValue = getDiscriminatorValue(node); + if (discrValue == null) { + continue; + } + } + if (childCdm != null) { + // Recursively traverse the discriminator mappings. + Class childDiscr = childCdm.getClassForElement(node, visitedClasses); + if (childDiscr != null) { + return childDiscr; + } + } + } + return cls; + } + } + + /** + * Returns true if inst is an instance of modelClass in the OpenAPI model hierarchy. + * + * The Java class hierarchy is not implemented the same way as the OpenAPI model hierarchy, + * so it's not possible to use the instanceof keyword. + * + * @param modelClass A OpenAPI model class. + * @param inst The instance object. + * @param visitedClasses The set of classes that have already been visited. + * + * @return true if inst is an instance of modelClass in the OpenAPI model hierarchy. + */ + public static boolean isInstanceOf(Class modelClass, Object inst, Set> visitedClasses) { + if (modelClass.isInstance(inst)) { + // This handles the 'allOf' use case with single parent inheritance. + return true; + } + if (visitedClasses.contains(modelClass)) { + // This is to prevent infinite recursion when the composed schemas have + // a circular dependency. + return false; + } + visitedClasses.add(modelClass); + + // Traverse the oneOf/anyOf composed schemas. + Map> descendants = modelDescendants.get(modelClass); + if (descendants != null) { + for (Class childType : descendants.values()) { + if (isInstanceOf(childType, inst, visitedClasses)) { + return true; + } + } + } + return false; + } + + /** + * A map of discriminators for all model classes. + */ + private static Map, ClassDiscriminatorMapping> modelDiscriminators = new HashMap<>(); + + /** + * A map of oneOf/anyOf descendants for each model class. + */ + private static Map, Map>> modelDescendants = new HashMap<>(); + + /** + * Register a model class discriminator. + * + * @param modelClass the model class + * @param discriminatorPropertyName the name of the discriminator property + * @param mappings a map with the discriminator mappings. + */ + public static void registerDiscriminator( + Class modelClass, String discriminatorPropertyName, Map> mappings) { + ClassDiscriminatorMapping m = new ClassDiscriminatorMapping(modelClass, discriminatorPropertyName, mappings); + modelDiscriminators.put(modelClass, m); + } + + /** + * Register the oneOf/anyOf descendants of the modelClass. + * + * @param modelClass the model class + * @param descendants a map of oneOf/anyOf descendants. + */ + public static void registerDescendants(Class modelClass, Map> descendants) { + modelDescendants.put(modelClass, descendants); + } + + private static JSON json; + + static { + json = new JSON(); + } + + /** + * Get the default JSON instance. + * + * @return the default JSON instance + */ + public static JSON getDefault() { + return json; + } + + /** + * Set the default JSON instance. + * + * @param json JSON instance to be used + */ + public static void setDefault(JSON json) { + JSON.json = json; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/Pair.java b/src/main/java/dev/openfga/sdk/api/client/Pair.java new file mode 100644 index 0000000..acf13bb --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/Pair.java @@ -0,0 +1,58 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Pair { + private String name = ""; + private String value = ""; + + public Pair(String name, String value) { + setName(name); + setValue(value); + } + + private void setName(String name) { + if (!isValidString(name)) { + return; + } + + this.name = name; + } + + private void setValue(String value) { + if (!isValidString(value)) { + return; + } + + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } + + private boolean isValidString(String arg) { + if (arg == null) { + return false; + } + + return true; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/RFC3339DateFormat.java b/src/main/java/dev/openfga/sdk/api/client/RFC3339DateFormat.java new file mode 100644 index 0000000..eb342be --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/RFC3339DateFormat.java @@ -0,0 +1,55 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import com.fasterxml.jackson.databind.util.StdDateFormat; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class RFC3339DateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); + + private final StdDateFormat fmt = + new StdDateFormat().withTimeZone(TIMEZONE_Z).withColonInTimeZone(true); + + public RFC3339DateFormat() { + this.calendar = new GregorianCalendar(); + this.numberFormat = new DecimalFormat(); + } + + @Override + public Date parse(String source) { + return parse(source, new ParsePosition(0)); + } + + @Override + public Date parse(String source, ParsePosition pos) { + return fmt.parse(source, pos); + } + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + return fmt.format(date, toAppendTo, fieldPosition); + } + + @Override + public Object clone() { + return super.clone(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java new file mode 100644 index 0000000..d24ecce --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java @@ -0,0 +1,147 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Map; +import java.util.Objects; + +/** + * Abstract class for oneOf,anyOf schemas defined in OpenAPI spec + */ +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public abstract class AbstractOpenApiSchema { + + // store the actual instance of the schema/object + private Object instance; + + // is nullable + private Boolean isNullable; + + // schema type (e.g. oneOf, anyOf) + private final String schemaType; + + public AbstractOpenApiSchema(String schemaType, Boolean isNullable) { + this.schemaType = schemaType; + this.isNullable = isNullable; + } + + /** + * Get the list of oneOf/anyOf composed schemas allowed to be stored in this object + * + * @return an instance of the actual schema/object + */ + public abstract Map> getSchemas(); + + /** + * Get the actual instance + * + * @return an instance of the actual schema/object + */ + @JsonValue + public Object getActualInstance() { + return instance; + } + + /** + * Set the actual instance + * + * @param instance the actual instance of the schema/object + */ + public void setActualInstance(Object instance) { + this.instance = instance; + } + + /** + * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well + * + * @return an instance of the actual schema/object + */ + public Object getActualInstanceRecursively() { + return getActualInstanceRecursively(this); + } + + private Object getActualInstanceRecursively(AbstractOpenApiSchema object) { + if (object.getActualInstance() == null) { + return null; + } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) { + return getActualInstanceRecursively((AbstractOpenApiSchema) object.getActualInstance()); + } else { + return object.getActualInstance(); + } + } + + /** + * Get the schema type (e.g. anyOf, oneOf) + * + * @return the schema type + */ + public String getSchemaType() { + return schemaType; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ").append(getClass()).append(" {\n"); + sb.append(" instance: ").append(toIndentedString(instance)).append("\n"); + sb.append(" isNullable: ").append(toIndentedString(isNullable)).append("\n"); + sb.append(" schemaType: ").append(toIndentedString(schemaType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AbstractOpenApiSchema a = (AbstractOpenApiSchema) o; + return Objects.equals(this.instance, a.instance) + && Objects.equals(this.isNullable, a.isNullable) + && Objects.equals(this.schemaType, a.schemaType); + } + + @Override + public int hashCode() { + return Objects.hash(instance, isNullable, schemaType); + } + + /** + * Is nullable + * + * @return true if it's nullable + */ + public Boolean isNullable() { + if (Boolean.TRUE.equals(isNullable)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Any.java b/src/main/java/dev/openfga/sdk/api/model/Any.java new file mode 100644 index 0000000..76a9abc --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Any.java @@ -0,0 +1,196 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Any + */ +@JsonPropertyOrder({Any.JSON_PROPERTY_AT_TYPE}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Any extends HashMap { + public static final String JSON_PROPERTY_AT_TYPE = "@type"; + private String atType; + + public Any() {} + + public Any atType(String atType) { + this.atType = atType; + return this; + } + + /** + * Get atType + * @return atType + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AT_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAtType() { + return atType; + } + + @JsonProperty(JSON_PROPERTY_AT_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAtType(String atType) { + this.atType = atType; + } + + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. + * If the property does not already exist, create it otherwise replace it. + * @param key the name of the property + * @param value the value of the property + * @return self reference + */ + @JsonAnySetter + public Any putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) properties. + * @return the additional (undeclared) properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * @param key the name of the property + * @return the additional (undeclared) property with the specified name + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** + * Return true if this Any object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Any any = (Any) o; + return Objects.equals(this.atType, any.atType) + && Objects.equals(this.additionalProperties, any.additionalProperties) + && super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(atType, super.hashCode(), additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Any {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" atType: ").append(toIndentedString(atType)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `@type` to the URL query string + if (getAtType() != null) { + joiner.add(String.format( + "%s@type%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAtType()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Assertion.java b/src/main/java/dev/openfga/sdk/api/model/Assertion.java new file mode 100644 index 0000000..e38c124 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Assertion.java @@ -0,0 +1,174 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Assertion + */ +@JsonPropertyOrder({Assertion.JSON_PROPERTY_TUPLE_KEY, Assertion.JSON_PROPERTY_EXPECTATION}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Assertion { + public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; + private TupleKey tupleKey; + + public static final String JSON_PROPERTY_EXPECTATION = "expectation"; + private Boolean expectation; + + public Assertion() {} + + public Assertion tupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + return this; + } + + /** + * Get tupleKey + * @return tupleKey + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TupleKey getTupleKey() { + return tupleKey; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + } + + public Assertion expectation(Boolean expectation) { + this.expectation = expectation; + return this; + } + + /** + * Get expectation + * @return expectation + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPECTATION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Boolean getExpectation() { + return expectation; + } + + @JsonProperty(JSON_PROPERTY_EXPECTATION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExpectation(Boolean expectation) { + this.expectation = expectation; + } + + /** + * Return true if this Assertion object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Assertion assertion = (Assertion) o; + return Objects.equals(this.tupleKey, assertion.tupleKey) + && Objects.equals(this.expectation, assertion.expectation); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKey, expectation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Assertion {\n"); + sb.append(" tupleKey: ").append(toIndentedString(tupleKey)).append("\n"); + sb.append(" expectation: ").append(toIndentedString(expectation)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_key` to the URL query string + if (getTupleKey() != null) { + joiner.add(getTupleKey().toUrlQueryString(prefix + "tuple_key" + suffix)); + } + + // add `expectation` to the URL query string + if (getExpectation() != null) { + joiner.add(String.format( + "%sexpectation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getExpectation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java new file mode 100644 index 0000000..1f490eb --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java @@ -0,0 +1,239 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * AuthorizationModel + */ +@JsonPropertyOrder({ + AuthorizationModel.JSON_PROPERTY_ID, + AuthorizationModel.JSON_PROPERTY_SCHEMA_VERSION, + AuthorizationModel.JSON_PROPERTY_TYPE_DEFINITIONS +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class AuthorizationModel { + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_SCHEMA_VERSION = "schema_version"; + private String schemaVersion; + + public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; + private List typeDefinitions = new ArrayList<>(); + + public AuthorizationModel() {} + + public AuthorizationModel id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(String id) { + this.id = id; + } + + public AuthorizationModel schemaVersion(String schemaVersion) { + this.schemaVersion = schemaVersion; + return this; + } + + /** + * Get schemaVersion + * @return schemaVersion + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SCHEMA_VERSION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSchemaVersion() { + return schemaVersion; + } + + @JsonProperty(JSON_PROPERTY_SCHEMA_VERSION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSchemaVersion(String schemaVersion) { + this.schemaVersion = schemaVersion; + } + + public AuthorizationModel typeDefinitions(List typeDefinitions) { + this.typeDefinitions = typeDefinitions; + return this; + } + + public AuthorizationModel addTypeDefinitionsItem(TypeDefinition typeDefinitionsItem) { + if (this.typeDefinitions == null) { + this.typeDefinitions = new ArrayList<>(); + } + this.typeDefinitions.add(typeDefinitionsItem); + return this; + } + + /** + * Get typeDefinitions + * @return typeDefinitions + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TYPE_DEFINITIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getTypeDefinitions() { + return typeDefinitions; + } + + @JsonProperty(JSON_PROPERTY_TYPE_DEFINITIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTypeDefinitions(List typeDefinitions) { + this.typeDefinitions = typeDefinitions; + } + + /** + * Return true if this AuthorizationModel object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuthorizationModel authorizationModel = (AuthorizationModel) o; + return Objects.equals(this.id, authorizationModel.id) + && Objects.equals(this.schemaVersion, authorizationModel.schemaVersion) + && Objects.equals(this.typeDefinitions, authorizationModel.typeDefinitions); + } + + @Override + public int hashCode() { + return Objects.hash(id, schemaVersion, typeDefinitions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AuthorizationModel {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" schemaVersion: ").append(toIndentedString(schemaVersion)).append("\n"); + sb.append(" typeDefinitions: ") + .append(toIndentedString(typeDefinitions)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format( + "%sid%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `schema_version` to the URL query string + if (getSchemaVersion() != null) { + joiner.add(String.format( + "%sschema_version%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getSchemaVersion()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `type_definitions` to the URL query string + if (getTypeDefinitions() != null) { + for (int i = 0; i < getTypeDefinitions().size(); i++) { + if (getTypeDefinitions().get(i) != null) { + joiner.add(getTypeDefinitions() + .get(i) + .toUrlQueryString(String.format( + "%stype_definitions%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java new file mode 100644 index 0000000..9647bad --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java @@ -0,0 +1,248 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * CheckRequest + */ +@JsonPropertyOrder({ + CheckRequest.JSON_PROPERTY_TUPLE_KEY, + CheckRequest.JSON_PROPERTY_CONTEXTUAL_TUPLES, + CheckRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID, + CheckRequest.JSON_PROPERTY_TRACE +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class CheckRequest { + public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; + private TupleKey tupleKey; + + public static final String JSON_PROPERTY_CONTEXTUAL_TUPLES = "contextual_tuples"; + private ContextualTupleKeys contextualTuples; + + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public static final String JSON_PROPERTY_TRACE = "trace"; + private Boolean trace; + + public CheckRequest() {} + + @JsonCreator + public CheckRequest(@JsonProperty(JSON_PROPERTY_TRACE) Boolean trace) { + this(); + this.trace = trace; + } + + public CheckRequest tupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + return this; + } + + /** + * Get tupleKey + * @return tupleKey + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TupleKey getTupleKey() { + return tupleKey; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + } + + public CheckRequest contextualTuples(ContextualTupleKeys contextualTuples) { + this.contextualTuples = contextualTuples; + return this; + } + + /** + * Get contextualTuples + * @return contextualTuples + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTEXTUAL_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ContextualTupleKeys getContextualTuples() { + return contextualTuples; + } + + @JsonProperty(JSON_PROPERTY_CONTEXTUAL_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContextualTuples(ContextualTupleKeys contextualTuples) { + this.contextualTuples = contextualTuples; + } + + public CheckRequest authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + /** + * Defaults to false. Making it true has performance implications. + * @return trace + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TRACE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getTrace() { + return trace; + } + + /** + * Return true if this Check_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CheckRequest checkRequest = (CheckRequest) o; + return Objects.equals(this.tupleKey, checkRequest.tupleKey) + && Objects.equals(this.contextualTuples, checkRequest.contextualTuples) + && Objects.equals(this.authorizationModelId, checkRequest.authorizationModelId) + && Objects.equals(this.trace, checkRequest.trace); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKey, contextualTuples, authorizationModelId, trace); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CheckRequest {\n"); + sb.append(" tupleKey: ").append(toIndentedString(tupleKey)).append("\n"); + sb.append(" contextualTuples: ") + .append(toIndentedString(contextualTuples)) + .append("\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append(" trace: ").append(toIndentedString(trace)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_key` to the URL query string + if (getTupleKey() != null) { + joiner.add(getTupleKey().toUrlQueryString(prefix + "tuple_key" + suffix)); + } + + // add `contextual_tuples` to the URL query string + if (getContextualTuples() != null) { + joiner.add(getContextualTuples().toUrlQueryString(prefix + "contextual_tuples" + suffix)); + } + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `trace` to the URL query string + if (getTrace() != null) { + joiner.add(String.format( + "%strace%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getTrace()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java new file mode 100644 index 0000000..c0bc142 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java @@ -0,0 +1,179 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * CheckResponse + */ +@JsonPropertyOrder({CheckResponse.JSON_PROPERTY_ALLOWED, CheckResponse.JSON_PROPERTY_RESOLUTION}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class CheckResponse { + public static final String JSON_PROPERTY_ALLOWED = "allowed"; + private Boolean allowed; + + public static final String JSON_PROPERTY_RESOLUTION = "resolution"; + private String resolution; + + public CheckResponse() {} + + public CheckResponse allowed(Boolean allowed) { + this.allowed = allowed; + return this; + } + + /** + * Get allowed + * @return allowed + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ALLOWED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getAllowed() { + return allowed; + } + + @JsonProperty(JSON_PROPERTY_ALLOWED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAllowed(Boolean allowed) { + this.allowed = allowed; + } + + public CheckResponse resolution(String resolution) { + this.resolution = resolution; + return this; + } + + /** + * For internal use only. + * @return resolution + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RESOLUTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getResolution() { + return resolution; + } + + @JsonProperty(JSON_PROPERTY_RESOLUTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setResolution(String resolution) { + this.resolution = resolution; + } + + /** + * Return true if this CheckResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CheckResponse checkResponse = (CheckResponse) o; + return Objects.equals(this.allowed, checkResponse.allowed) + && Objects.equals(this.resolution, checkResponse.resolution); + } + + @Override + public int hashCode() { + return Objects.hash(allowed, resolution); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CheckResponse {\n"); + sb.append(" allowed: ").append(toIndentedString(allowed)).append("\n"); + sb.append(" resolution: ").append(toIndentedString(resolution)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `allowed` to the URL query string + if (getAllowed() != null) { + joiner.add(String.format( + "%sallowed%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAllowed()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `resolution` to the URL query string + if (getResolution() != null) { + joiner.add(String.format( + "%sresolution%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getResolution()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Computed.java b/src/main/java/dev/openfga/sdk/api/model/Computed.java new file mode 100644 index 0000000..b1f3e0d --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Computed.java @@ -0,0 +1,142 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Computed + */ +@JsonPropertyOrder({Computed.JSON_PROPERTY_USERSET}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Computed { + public static final String JSON_PROPERTY_USERSET = "userset"; + private String userset; + + public Computed() {} + + public Computed userset(String userset) { + this.userset = userset; + return this; + } + + /** + * Get userset + * @return userset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUserset() { + return userset; + } + + @JsonProperty(JSON_PROPERTY_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserset(String userset) { + this.userset = userset; + } + + /** + * Return true if this Computed object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Computed computed = (Computed) o; + return Objects.equals(this.userset, computed.userset); + } + + @Override + public int hashCode() { + return Objects.hash(userset); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Computed {\n"); + sb.append(" userset: ").append(toIndentedString(userset)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `userset` to the URL query string + if (getUserset() != null) { + joiner.add(String.format( + "%suserset%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUserset()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java new file mode 100644 index 0000000..f8efba5 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ContextualTupleKeys + */ +@JsonPropertyOrder({ContextualTupleKeys.JSON_PROPERTY_TUPLE_KEYS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ContextualTupleKeys { + public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; + private List tupleKeys = new ArrayList<>(); + + public ContextualTupleKeys() {} + + public ContextualTupleKeys tupleKeys(List tupleKeys) { + this.tupleKeys = tupleKeys; + return this; + } + + public ContextualTupleKeys addTupleKeysItem(TupleKey tupleKeysItem) { + if (this.tupleKeys == null) { + this.tupleKeys = new ArrayList<>(); + } + this.tupleKeys.add(tupleKeysItem); + return this; + } + + /** + * Get tupleKeys + * @return tupleKeys + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TUPLE_KEYS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getTupleKeys() { + return tupleKeys; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEYS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTupleKeys(List tupleKeys) { + this.tupleKeys = tupleKeys; + } + + /** + * Return true if this ContextualTupleKeys object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ContextualTupleKeys contextualTupleKeys = (ContextualTupleKeys) o; + return Objects.equals(this.tupleKeys, contextualTupleKeys.tupleKeys); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKeys); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ContextualTupleKeys {\n"); + sb.append(" tupleKeys: ").append(toIndentedString(tupleKeys)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_keys` to the URL query string + if (getTupleKeys() != null) { + for (int i = 0; i < getTupleKeys().size(); i++) { + if (getTupleKeys().get(i) != null) { + joiner.add(getTupleKeys() + .get(i) + .toUrlQueryString(String.format( + "%stuple_keys%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java new file mode 100644 index 0000000..2de7c01 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java @@ -0,0 +1,142 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * CreateStoreRequest + */ +@JsonPropertyOrder({CreateStoreRequest.JSON_PROPERTY_NAME}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class CreateStoreRequest { + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public CreateStoreRequest() {} + + public CreateStoreRequest name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(String name) { + this.name = name; + } + + /** + * Return true if this CreateStoreRequest object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CreateStoreRequest createStoreRequest = (CreateStoreRequest) o; + return Objects.equals(this.name, createStoreRequest.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CreateStoreRequest {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format( + "%sname%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getName()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java new file mode 100644 index 0000000..18e1245 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java @@ -0,0 +1,259 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * CreateStoreResponse + */ +@JsonPropertyOrder({ + CreateStoreResponse.JSON_PROPERTY_ID, + CreateStoreResponse.JSON_PROPERTY_NAME, + CreateStoreResponse.JSON_PROPERTY_CREATED_AT, + CreateStoreResponse.JSON_PROPERTY_UPDATED_AT +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class CreateStoreResponse { + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + private OffsetDateTime createdAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updated_at"; + private OffsetDateTime updatedAt; + + public CreateStoreResponse() {} + + public CreateStoreResponse id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(String id) { + this.id = id; + } + + public CreateStoreResponse name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(String name) { + this.name = name; + } + + public CreateStoreResponse createdAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * Get createdAt + * @return createdAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getCreatedAt() { + return createdAt; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCreatedAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + } + + public CreateStoreResponse updatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * Get updatedAt + * @return updatedAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpdatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + } + + /** + * Return true if this CreateStoreResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CreateStoreResponse createStoreResponse = (CreateStoreResponse) o; + return Objects.equals(this.id, createStoreResponse.id) + && Objects.equals(this.name, createStoreResponse.name) + && Objects.equals(this.createdAt, createStoreResponse.createdAt) + && Objects.equals(this.updatedAt, createStoreResponse.updatedAt); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, createdAt, updatedAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CreateStoreResponse {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format( + "%sid%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format( + "%sname%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getName()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `created_at` to the URL query string + if (getCreatedAt() != null) { + joiner.add(String.format( + "%screated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCreatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `updated_at` to the URL query string + if (getUpdatedAt() != null) { + joiner.add(String.format( + "%supdated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUpdatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Difference.java b/src/main/java/dev/openfga/sdk/api/model/Difference.java new file mode 100644 index 0000000..5517504 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Difference.java @@ -0,0 +1,166 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Difference + */ +@JsonPropertyOrder({Difference.JSON_PROPERTY_BASE, Difference.JSON_PROPERTY_SUBTRACT}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Difference { + public static final String JSON_PROPERTY_BASE = "base"; + private Userset base; + + public static final String JSON_PROPERTY_SUBTRACT = "subtract"; + private Userset subtract; + + public Difference() {} + + public Difference base(Userset base) { + this.base = base; + return this; + } + + /** + * Get base + * @return base + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_BASE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Userset getBase() { + return base; + } + + @JsonProperty(JSON_PROPERTY_BASE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setBase(Userset base) { + this.base = base; + } + + public Difference subtract(Userset subtract) { + this.subtract = subtract; + return this; + } + + /** + * Get subtract + * @return subtract + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SUBTRACT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Userset getSubtract() { + return subtract; + } + + @JsonProperty(JSON_PROPERTY_SUBTRACT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSubtract(Userset subtract) { + this.subtract = subtract; + } + + /** + * Return true if this Difference object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Difference difference = (Difference) o; + return Objects.equals(this.base, difference.base) && Objects.equals(this.subtract, difference.subtract); + } + + @Override + public int hashCode() { + return Objects.hash(base, subtract); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Difference {\n"); + sb.append(" base: ").append(toIndentedString(base)).append("\n"); + sb.append(" subtract: ").append(toIndentedString(subtract)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `base` to the URL query string + if (getBase() != null) { + joiner.add(getBase().toUrlQueryString(prefix + "base" + suffix)); + } + + // add `subtract` to the URL query string + if (getSubtract() != null) { + joiner.add(getSubtract().toUrlQueryString(prefix + "subtract" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ErrorCode.java b/src/main/java/dev/openfga/sdk/api/model/ErrorCode.java new file mode 100644 index 0000000..4c1a235 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ErrorCode.java @@ -0,0 +1,159 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets ErrorCode + */ +public enum ErrorCode { + NO_ERROR("no_error"), + + VALIDATION_ERROR("validation_error"), + + AUTHORIZATION_MODEL_NOT_FOUND("authorization_model_not_found"), + + AUTHORIZATION_MODEL_RESOLUTION_TOO_COMPLEX("authorization_model_resolution_too_complex"), + + INVALID_WRITE_INPUT("invalid_write_input"), + + CANNOT_ALLOW_DUPLICATE_TUPLES_IN_ONE_REQUEST("cannot_allow_duplicate_tuples_in_one_request"), + + CANNOT_ALLOW_DUPLICATE_TYPES_IN_ONE_REQUEST("cannot_allow_duplicate_types_in_one_request"), + + CANNOT_ALLOW_MULTIPLE_REFERENCES_TO_ONE_RELATION("cannot_allow_multiple_references_to_one_relation"), + + INVALID_CONTINUATION_TOKEN("invalid_continuation_token"), + + INVALID_TUPLE_SET("invalid_tuple_set"), + + INVALID_CHECK_INPUT("invalid_check_input"), + + INVALID_EXPAND_INPUT("invalid_expand_input"), + + UNSUPPORTED_USER_SET("unsupported_user_set"), + + INVALID_OBJECT_FORMAT("invalid_object_format"), + + WRITE_FAILED_DUE_TO_INVALID_INPUT("write_failed_due_to_invalid_input"), + + AUTHORIZATION_MODEL_ASSERTIONS_NOT_FOUND("authorization_model_assertions_not_found"), + + LATEST_AUTHORIZATION_MODEL_NOT_FOUND("latest_authorization_model_not_found"), + + TYPE_NOT_FOUND("type_not_found"), + + RELATION_NOT_FOUND("relation_not_found"), + + EMPTY_RELATION_DEFINITION("empty_relation_definition"), + + INVALID_USER("invalid_user"), + + INVALID_TUPLE("invalid_tuple"), + + UNKNOWN_RELATION("unknown_relation"), + + STORE_ID_INVALID_LENGTH("store_id_invalid_length"), + + ASSERTIONS_TOO_MANY_ITEMS("assertions_too_many_items"), + + ID_TOO_LONG("id_too_long"), + + AUTHORIZATION_MODEL_ID_TOO_LONG("authorization_model_id_too_long"), + + TUPLE_KEY_VALUE_NOT_SPECIFIED("tuple_key_value_not_specified"), + + TUPLE_KEYS_TOO_MANY_OR_TOO_FEW_ITEMS("tuple_keys_too_many_or_too_few_items"), + + PAGE_SIZE_INVALID("page_size_invalid"), + + PARAM_MISSING_VALUE("param_missing_value"), + + DIFFERENCE_BASE_MISSING_VALUE("difference_base_missing_value"), + + SUBTRACT_BASE_MISSING_VALUE("subtract_base_missing_value"), + + OBJECT_TOO_LONG("object_too_long"), + + RELATION_TOO_LONG("relation_too_long"), + + TYPE_DEFINITIONS_TOO_FEW_ITEMS("type_definitions_too_few_items"), + + TYPE_INVALID_LENGTH("type_invalid_length"), + + TYPE_INVALID_PATTERN("type_invalid_pattern"), + + RELATIONS_TOO_FEW_ITEMS("relations_too_few_items"), + + RELATIONS_TOO_LONG("relations_too_long"), + + RELATIONS_INVALID_PATTERN("relations_invalid_pattern"), + + OBJECT_INVALID_PATTERN("object_invalid_pattern"), + + QUERY_STRING_TYPE_CONTINUATION_TOKEN_MISMATCH("query_string_type_continuation_token_mismatch"), + + EXCEEDED_ENTITY_LIMIT("exceeded_entity_limit"), + + INVALID_CONTEXTUAL_TUPLE("invalid_contextual_tuple"), + + DUPLICATE_CONTEXTUAL_TUPLE("duplicate_contextual_tuple"), + + INVALID_AUTHORIZATION_MODEL("invalid_authorization_model"), + + UNSUPPORTED_SCHEMA_VERSION("unsupported_schema_version"), + + UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); + + private String value; + + ErrorCode(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static ErrorCode fromValue(String value) { + for (ErrorCode b : ErrorCode.values()) { + if (b.value.equals(value)) { + return b; + } + } + return UNKNOWN_DEFAULT_OPEN_API; + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java new file mode 100644 index 0000000..2f6ce27 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java @@ -0,0 +1,176 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ExpandRequest + */ +@JsonPropertyOrder({ExpandRequest.JSON_PROPERTY_TUPLE_KEY, ExpandRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ExpandRequest { + public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; + private TupleKey tupleKey; + + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public ExpandRequest() {} + + public ExpandRequest tupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + return this; + } + + /** + * Get tupleKey + * @return tupleKey + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TupleKey getTupleKey() { + return tupleKey; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + } + + public ExpandRequest authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + /** + * Return true if this Expand_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ExpandRequest expandRequest = (ExpandRequest) o; + return Objects.equals(this.tupleKey, expandRequest.tupleKey) + && Objects.equals(this.authorizationModelId, expandRequest.authorizationModelId); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKey, authorizationModelId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ExpandRequest {\n"); + sb.append(" tupleKey: ").append(toIndentedString(tupleKey)).append("\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_key` to the URL query string + if (getTupleKey() != null) { + joiner.add(getTupleKey().toUrlQueryString(prefix + "tuple_key" + suffix)); + } + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java new file mode 100644 index 0000000..520aa69 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java @@ -0,0 +1,135 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ExpandResponse + */ +@JsonPropertyOrder({ExpandResponse.JSON_PROPERTY_TREE}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ExpandResponse { + public static final String JSON_PROPERTY_TREE = "tree"; + private UsersetTree tree; + + public ExpandResponse() {} + + public ExpandResponse tree(UsersetTree tree) { + this.tree = tree; + return this; + } + + /** + * Get tree + * @return tree + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TREE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UsersetTree getTree() { + return tree; + } + + @JsonProperty(JSON_PROPERTY_TREE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTree(UsersetTree tree) { + this.tree = tree; + } + + /** + * Return true if this ExpandResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ExpandResponse expandResponse = (ExpandResponse) o; + return Objects.equals(this.tree, expandResponse.tree); + } + + @Override + public int hashCode() { + return Objects.hash(tree); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ExpandResponse {\n"); + sb.append(" tree: ").append(toIndentedString(tree)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tree` to the URL query string + if (getTree() != null) { + joiner.add(getTree().toUrlQueryString(prefix + "tree" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java new file mode 100644 index 0000000..d57f06d --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java @@ -0,0 +1,259 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * GetStoreResponse + */ +@JsonPropertyOrder({ + GetStoreResponse.JSON_PROPERTY_ID, + GetStoreResponse.JSON_PROPERTY_NAME, + GetStoreResponse.JSON_PROPERTY_CREATED_AT, + GetStoreResponse.JSON_PROPERTY_UPDATED_AT +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class GetStoreResponse { + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + private OffsetDateTime createdAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updated_at"; + private OffsetDateTime updatedAt; + + public GetStoreResponse() {} + + public GetStoreResponse id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(String id) { + this.id = id; + } + + public GetStoreResponse name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(String name) { + this.name = name; + } + + public GetStoreResponse createdAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * Get createdAt + * @return createdAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getCreatedAt() { + return createdAt; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCreatedAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + } + + public GetStoreResponse updatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * Get updatedAt + * @return updatedAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpdatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + } + + /** + * Return true if this GetStoreResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetStoreResponse getStoreResponse = (GetStoreResponse) o; + return Objects.equals(this.id, getStoreResponse.id) + && Objects.equals(this.name, getStoreResponse.name) + && Objects.equals(this.createdAt, getStoreResponse.createdAt) + && Objects.equals(this.updatedAt, getStoreResponse.updatedAt); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, createdAt, updatedAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GetStoreResponse {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format( + "%sid%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format( + "%sname%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getName()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `created_at` to the URL query string + if (getCreatedAt() != null) { + joiner.add(String.format( + "%screated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCreatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `updated_at` to the URL query string + if (getUpdatedAt() != null) { + joiner.add(String.format( + "%supdated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUpdatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorCode.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorCode.java new file mode 100644 index 0000000..e0b5b0e --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorCode.java @@ -0,0 +1,85 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets InternalErrorCode + */ +public enum InternalErrorCode { + NO_INTERNAL_ERROR("no_internal_error"), + + INTERNAL_ERROR("internal_error"), + + CANCELLED("cancelled"), + + DEADLINE_EXCEEDED("deadline_exceeded"), + + ALREADY_EXISTS("already_exists"), + + RESOURCE_EXHAUSTED("resource_exhausted"), + + FAILED_PRECONDITION("failed_precondition"), + + ABORTED("aborted"), + + OUT_OF_RANGE("out_of_range"), + + UNAVAILABLE("unavailable"), + + DATA_LOSS("data_loss"), + + UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); + + private String value; + + InternalErrorCode(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static InternalErrorCode fromValue(String value) { + for (InternalErrorCode b : InternalErrorCode.values()) { + if (b.value.equals(value)) { + return b; + } + } + return UNKNOWN_DEFAULT_OPEN_API; + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java new file mode 100644 index 0000000..65a9a24 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java @@ -0,0 +1,180 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * InternalErrorMessageResponse + */ +@JsonPropertyOrder({InternalErrorMessageResponse.JSON_PROPERTY_CODE, InternalErrorMessageResponse.JSON_PROPERTY_MESSAGE +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class InternalErrorMessageResponse { + public static final String JSON_PROPERTY_CODE = "code"; + private InternalErrorCode code = InternalErrorCode.NO_INTERNAL_ERROR; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + private String message; + + public InternalErrorMessageResponse() {} + + public InternalErrorMessageResponse code(InternalErrorCode code) { + this.code = code; + return this; + } + + /** + * Get code + * @return code + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public InternalErrorCode getCode() { + return code; + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCode(InternalErrorCode code) { + this.code = code; + } + + public InternalErrorMessageResponse message(String message) { + this.message = message; + return this; + } + + /** + * Get message + * @return message + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getMessage() { + return message; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMessage(String message) { + this.message = message; + } + + /** + * Return true if this InternalErrorMessageResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalErrorMessageResponse internalErrorMessageResponse = (InternalErrorMessageResponse) o; + return Objects.equals(this.code, internalErrorMessageResponse.code) + && Objects.equals(this.message, internalErrorMessageResponse.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, message); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class InternalErrorMessageResponse {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `code` to the URL query string + if (getCode() != null) { + joiner.add(String.format( + "%scode%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCode()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `message` to the URL query string + if (getMessage() != null) { + joiner.add(String.format( + "%smessage%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getMessage()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Leaf.java b/src/main/java/dev/openfga/sdk/api/model/Leaf.java new file mode 100644 index 0000000..d996e0e --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Leaf.java @@ -0,0 +1,201 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * A leaf node contains either - a set of users (which may be individual users, or usersets referencing other relations) - a computed node, which is the result of a computed userset value in the authorization model - a tupleToUserset nodes, containing the result of expanding a tupleToUserset value in a authorization model. + */ +@JsonPropertyOrder({Leaf.JSON_PROPERTY_USERS, Leaf.JSON_PROPERTY_COMPUTED, Leaf.JSON_PROPERTY_TUPLE_TO_USERSET}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Leaf { + public static final String JSON_PROPERTY_USERS = "users"; + private Users users; + + public static final String JSON_PROPERTY_COMPUTED = "computed"; + private Computed computed; + + public static final String JSON_PROPERTY_TUPLE_TO_USERSET = "tupleToUserset"; + private UsersetTreeTupleToUserset tupleToUserset; + + public Leaf() {} + + public Leaf users(Users users) { + this.users = users; + return this; + } + + /** + * Get users + * @return users + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Users getUsers() { + return users; + } + + @JsonProperty(JSON_PROPERTY_USERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUsers(Users users) { + this.users = users; + } + + public Leaf computed(Computed computed) { + this.computed = computed; + return this; + } + + /** + * Get computed + * @return computed + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_COMPUTED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Computed getComputed() { + return computed; + } + + @JsonProperty(JSON_PROPERTY_COMPUTED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComputed(Computed computed) { + this.computed = computed; + } + + public Leaf tupleToUserset(UsersetTreeTupleToUserset tupleToUserset) { + this.tupleToUserset = tupleToUserset; + return this; + } + + /** + * Get tupleToUserset + * @return tupleToUserset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLE_TO_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UsersetTreeTupleToUserset getTupleToUserset() { + return tupleToUserset; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_TO_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleToUserset(UsersetTreeTupleToUserset tupleToUserset) { + this.tupleToUserset = tupleToUserset; + } + + /** + * Return true if this Leaf object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Leaf leaf = (Leaf) o; + return Objects.equals(this.users, leaf.users) + && Objects.equals(this.computed, leaf.computed) + && Objects.equals(this.tupleToUserset, leaf.tupleToUserset); + } + + @Override + public int hashCode() { + return Objects.hash(users, computed, tupleToUserset); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Leaf {\n"); + sb.append(" users: ").append(toIndentedString(users)).append("\n"); + sb.append(" computed: ").append(toIndentedString(computed)).append("\n"); + sb.append(" tupleToUserset: ") + .append(toIndentedString(tupleToUserset)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `users` to the URL query string + if (getUsers() != null) { + joiner.add(getUsers().toUrlQueryString(prefix + "users" + suffix)); + } + + // add `computed` to the URL query string + if (getComputed() != null) { + joiner.add(getComputed().toUrlQueryString(prefix + "computed" + suffix)); + } + + // add `tupleToUserset` to the URL query string + if (getTupleToUserset() != null) { + joiner.add(getTupleToUserset().toUrlQueryString(prefix + "tupleToUserset" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java new file mode 100644 index 0000000..f7d4610 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java @@ -0,0 +1,295 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ListObjectsRequest + */ +@JsonPropertyOrder({ + ListObjectsRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID, + ListObjectsRequest.JSON_PROPERTY_TYPE, + ListObjectsRequest.JSON_PROPERTY_RELATION, + ListObjectsRequest.JSON_PROPERTY_USER, + ListObjectsRequest.JSON_PROPERTY_CONTEXTUAL_TUPLES +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ListObjectsRequest { + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public static final String JSON_PROPERTY_TYPE = "type"; + private String type; + + public static final String JSON_PROPERTY_RELATION = "relation"; + private String relation; + + public static final String JSON_PROPERTY_USER = "user"; + private String user; + + public static final String JSON_PROPERTY_CONTEXTUAL_TUPLES = "contextual_tuples"; + private ContextualTupleKeys contextualTuples; + + public ListObjectsRequest() {} + + public ListObjectsRequest authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + public ListObjectsRequest type(String type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(String type) { + this.type = type; + } + + public ListObjectsRequest relation(String relation) { + this.relation = relation; + return this; + } + + /** + * Get relation + * @return relation + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getRelation() { + return relation; + } + + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRelation(String relation) { + this.relation = relation; + } + + public ListObjectsRequest user(String user) { + this.user = user; + return this; + } + + /** + * Get user + * @return user + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_USER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getUser() { + return user; + } + + @JsonProperty(JSON_PROPERTY_USER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setUser(String user) { + this.user = user; + } + + public ListObjectsRequest contextualTuples(ContextualTupleKeys contextualTuples) { + this.contextualTuples = contextualTuples; + return this; + } + + /** + * Get contextualTuples + * @return contextualTuples + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTEXTUAL_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ContextualTupleKeys getContextualTuples() { + return contextualTuples; + } + + @JsonProperty(JSON_PROPERTY_CONTEXTUAL_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContextualTuples(ContextualTupleKeys contextualTuples) { + this.contextualTuples = contextualTuples; + } + + /** + * Return true if this ListObjects_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListObjectsRequest listObjectsRequest = (ListObjectsRequest) o; + return Objects.equals(this.authorizationModelId, listObjectsRequest.authorizationModelId) + && Objects.equals(this.type, listObjectsRequest.type) + && Objects.equals(this.relation, listObjectsRequest.relation) + && Objects.equals(this.user, listObjectsRequest.user) + && Objects.equals(this.contextualTuples, listObjectsRequest.contextualTuples); + } + + @Override + public int hashCode() { + return Objects.hash(authorizationModelId, type, relation, user, contextualTuples); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListObjectsRequest {\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" relation: ").append(toIndentedString(relation)).append("\n"); + sb.append(" user: ").append(toIndentedString(user)).append("\n"); + sb.append(" contextualTuples: ") + .append(toIndentedString(contextualTuples)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format( + "%stype%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getType()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `relation` to the URL query string + if (getRelation() != null) { + joiner.add(String.format( + "%srelation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getRelation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `user` to the URL query string + if (getUser() != null) { + joiner.add(String.format( + "%suser%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUser()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `contextual_tuples` to the URL query string + if (getContextualTuples() != null) { + joiner.add(getContextualTuples().toUrlQueryString(prefix + "contextual_tuples" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java new file mode 100644 index 0000000..ab4e2c7 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java @@ -0,0 +1,155 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ListObjectsResponse + */ +@JsonPropertyOrder({ListObjectsResponse.JSON_PROPERTY_OBJECTS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ListObjectsResponse { + public static final String JSON_PROPERTY_OBJECTS = "objects"; + private List objects = new ArrayList<>(); + + public ListObjectsResponse() {} + + public ListObjectsResponse objects(List objects) { + this.objects = objects; + return this; + } + + public ListObjectsResponse addObjectsItem(String objectsItem) { + if (this.objects == null) { + this.objects = new ArrayList<>(); + } + this.objects.add(objectsItem); + return this; + } + + /** + * Get objects + * @return objects + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OBJECTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getObjects() { + return objects; + } + + @JsonProperty(JSON_PROPERTY_OBJECTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setObjects(List objects) { + this.objects = objects; + } + + /** + * Return true if this ListObjectsResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListObjectsResponse listObjectsResponse = (ListObjectsResponse) o; + return Objects.equals(this.objects, listObjectsResponse.objects); + } + + @Override + public int hashCode() { + return Objects.hash(objects); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListObjectsResponse {\n"); + sb.append(" objects: ").append(toIndentedString(objects)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `objects` to the URL query string + if (getObjects() != null) { + for (int i = 0; i < getObjects().size(); i++) { + joiner.add(String.format( + "%sobjects%s%s=%s", + prefix, + suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf(getObjects().get(i)), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java new file mode 100644 index 0000000..61fb9a2 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java @@ -0,0 +1,198 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ListStoresResponse + */ +@JsonPropertyOrder({ListStoresResponse.JSON_PROPERTY_STORES, ListStoresResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ListStoresResponse { + public static final String JSON_PROPERTY_STORES = "stores"; + private List stores = new ArrayList<>(); + + public static final String JSON_PROPERTY_CONTINUATION_TOKEN = "continuation_token"; + private String continuationToken; + + public ListStoresResponse() {} + + public ListStoresResponse stores(List stores) { + this.stores = stores; + return this; + } + + public ListStoresResponse addStoresItem(Store storesItem) { + if (this.stores == null) { + this.stores = new ArrayList<>(); + } + this.stores.add(storesItem); + return this; + } + + /** + * Get stores + * @return stores + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_STORES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getStores() { + return stores; + } + + @JsonProperty(JSON_PROPERTY_STORES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStores(List stores) { + this.stores = stores; + } + + public ListStoresResponse continuationToken(String continuationToken) { + this.continuationToken = continuationToken; + return this; + } + + /** + * The continuation token will be empty if there are no more stores. + * @return continuationToken + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getContinuationToken() { + return continuationToken; + } + + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + /** + * Return true if this ListStoresResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListStoresResponse listStoresResponse = (ListStoresResponse) o; + return Objects.equals(this.stores, listStoresResponse.stores) + && Objects.equals(this.continuationToken, listStoresResponse.continuationToken); + } + + @Override + public int hashCode() { + return Objects.hash(stores, continuationToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListStoresResponse {\n"); + sb.append(" stores: ").append(toIndentedString(stores)).append("\n"); + sb.append(" continuationToken: ") + .append(toIndentedString(continuationToken)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `stores` to the URL query string + if (getStores() != null) { + for (int i = 0; i < getStores().size(); i++) { + if (getStores().get(i) != null) { + joiner.add(getStores() + .get(i) + .toUrlQueryString(String.format( + "%sstores%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `continuation_token` to the URL query string + if (getContinuationToken() != null) { + joiner.add(String.format( + "%scontinuation_token%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getContinuationToken()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Metadata.java b/src/main/java/dev/openfga/sdk/api/model/Metadata.java new file mode 100644 index 0000000..667d413 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Metadata.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Metadata + */ +@JsonPropertyOrder({Metadata.JSON_PROPERTY_RELATIONS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Metadata { + public static final String JSON_PROPERTY_RELATIONS = "relations"; + private Map relations = new HashMap<>(); + + public Metadata() {} + + public Metadata relations(Map relations) { + this.relations = relations; + return this; + } + + public Metadata putRelationsItem(String key, RelationMetadata relationsItem) { + if (this.relations == null) { + this.relations = new HashMap<>(); + } + this.relations.put(key, relationsItem); + return this; + } + + /** + * Get relations + * @return relations + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RELATIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getRelations() { + return relations; + } + + @JsonProperty(JSON_PROPERTY_RELATIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelations(Map relations) { + this.relations = relations; + } + + /** + * Return true if this Metadata object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Metadata metadata = (Metadata) o; + return Objects.equals(this.relations, metadata.relations); + } + + @Override + public int hashCode() { + return Objects.hash(relations); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Metadata {\n"); + sb.append(" relations: ").append(toIndentedString(relations)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `relations` to the URL query string + if (getRelations() != null) { + for (String _key : getRelations().keySet()) { + if (getRelations().get(_key) != null) { + joiner.add(getRelations() + .get(_key) + .toUrlQueryString(String.format( + "%srelations%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Node.java b/src/main/java/dev/openfga/sdk/api/model/Node.java new file mode 100644 index 0000000..c1886fd --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Node.java @@ -0,0 +1,276 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Node + */ +@JsonPropertyOrder({ + Node.JSON_PROPERTY_NAME, + Node.JSON_PROPERTY_LEAF, + Node.JSON_PROPERTY_DIFFERENCE, + Node.JSON_PROPERTY_UNION, + Node.JSON_PROPERTY_INTERSECTION +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Node { + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_LEAF = "leaf"; + private Leaf leaf; + + public static final String JSON_PROPERTY_DIFFERENCE = "difference"; + private UsersetTreeDifference difference; + + public static final String JSON_PROPERTY_UNION = "union"; + private Nodes union; + + public static final String JSON_PROPERTY_INTERSECTION = "intersection"; + private Nodes intersection; + + public Node() {} + + public Node name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(String name) { + this.name = name; + } + + public Node leaf(Leaf leaf) { + this.leaf = leaf; + return this; + } + + /** + * Get leaf + * @return leaf + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_LEAF) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Leaf getLeaf() { + return leaf; + } + + @JsonProperty(JSON_PROPERTY_LEAF) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setLeaf(Leaf leaf) { + this.leaf = leaf; + } + + public Node difference(UsersetTreeDifference difference) { + this.difference = difference; + return this; + } + + /** + * Get difference + * @return difference + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DIFFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UsersetTreeDifference getDifference() { + return difference; + } + + @JsonProperty(JSON_PROPERTY_DIFFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDifference(UsersetTreeDifference difference) { + this.difference = difference; + } + + public Node union(Nodes union) { + this.union = union; + return this; + } + + /** + * Get union + * @return union + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UNION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Nodes getUnion() { + return union; + } + + @JsonProperty(JSON_PROPERTY_UNION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUnion(Nodes union) { + this.union = union; + } + + public Node intersection(Nodes intersection) { + this.intersection = intersection; + return this; + } + + /** + * Get intersection + * @return intersection + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_INTERSECTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Nodes getIntersection() { + return intersection; + } + + @JsonProperty(JSON_PROPERTY_INTERSECTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setIntersection(Nodes intersection) { + this.intersection = intersection; + } + + /** + * Return true if this Node object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Node node = (Node) o; + return Objects.equals(this.name, node.name) + && Objects.equals(this.leaf, node.leaf) + && Objects.equals(this.difference, node.difference) + && Objects.equals(this.union, node.union) + && Objects.equals(this.intersection, node.intersection); + } + + @Override + public int hashCode() { + return Objects.hash(name, leaf, difference, union, intersection); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Node {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" leaf: ").append(toIndentedString(leaf)).append("\n"); + sb.append(" difference: ").append(toIndentedString(difference)).append("\n"); + sb.append(" union: ").append(toIndentedString(union)).append("\n"); + sb.append(" intersection: ").append(toIndentedString(intersection)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format( + "%sname%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getName()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `leaf` to the URL query string + if (getLeaf() != null) { + joiner.add(getLeaf().toUrlQueryString(prefix + "leaf" + suffix)); + } + + // add `difference` to the URL query string + if (getDifference() != null) { + joiner.add(getDifference().toUrlQueryString(prefix + "difference" + suffix)); + } + + // add `union` to the URL query string + if (getUnion() != null) { + joiner.add(getUnion().toUrlQueryString(prefix + "union" + suffix)); + } + + // add `intersection` to the URL query string + if (getIntersection() != null) { + joiner.add(getIntersection().toUrlQueryString(prefix + "intersection" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Nodes.java b/src/main/java/dev/openfga/sdk/api/model/Nodes.java new file mode 100644 index 0000000..578e8f7 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Nodes.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Nodes + */ +@JsonPropertyOrder({Nodes.JSON_PROPERTY_NODES}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Nodes { + public static final String JSON_PROPERTY_NODES = "nodes"; + private List nodes = new ArrayList<>(); + + public Nodes() {} + + public Nodes nodes(List nodes) { + this.nodes = nodes; + return this; + } + + public Nodes addNodesItem(Node nodesItem) { + if (this.nodes == null) { + this.nodes = new ArrayList<>(); + } + this.nodes.add(nodesItem); + return this; + } + + /** + * Get nodes + * @return nodes + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NODES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getNodes() { + return nodes; + } + + @JsonProperty(JSON_PROPERTY_NODES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNodes(List nodes) { + this.nodes = nodes; + } + + /** + * Return true if this Nodes object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Nodes nodes = (Nodes) o; + return Objects.equals(this.nodes, nodes.nodes); + } + + @Override + public int hashCode() { + return Objects.hash(nodes); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Nodes {\n"); + sb.append(" nodes: ").append(toIndentedString(nodes)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `nodes` to the URL query string + if (getNodes() != null) { + for (int i = 0; i < getNodes().size(); i++) { + if (getNodes().get(i) != null) { + joiner.add(getNodes() + .get(i) + .toUrlQueryString(String.format( + "%snodes%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/NotFoundErrorCode.java b/src/main/java/dev/openfga/sdk/api/model/NotFoundErrorCode.java new file mode 100644 index 0000000..d6cfdab --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/NotFoundErrorCode.java @@ -0,0 +1,71 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets NotFoundErrorCode + */ +public enum NotFoundErrorCode { + NO_NOT_FOUND_ERROR("no_not_found_error"), + + UNDEFINED_ENDPOINT("undefined_endpoint"), + + STORE_ID_NOT_FOUND("store_id_not_found"), + + UNIMPLEMENTED("unimplemented"), + + UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); + + private String value; + + NotFoundErrorCode(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static NotFoundErrorCode fromValue(String value) { + for (NotFoundErrorCode b : NotFoundErrorCode.values()) { + if (b.value.equals(value)) { + return b; + } + } + return UNKNOWN_DEFAULT_OPEN_API; + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java new file mode 100644 index 0000000..977c887 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java @@ -0,0 +1,179 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ObjectRelation + */ +@JsonPropertyOrder({ObjectRelation.JSON_PROPERTY_OBJECT, ObjectRelation.JSON_PROPERTY_RELATION}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ObjectRelation { + public static final String JSON_PROPERTY_OBJECT = "object"; + private String _object; + + public static final String JSON_PROPERTY_RELATION = "relation"; + private String relation; + + public ObjectRelation() {} + + public ObjectRelation _object(String _object) { + this._object = _object; + return this; + } + + /** + * Get _object + * @return _object + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getObject() { + return _object; + } + + @JsonProperty(JSON_PROPERTY_OBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setObject(String _object) { + this._object = _object; + } + + public ObjectRelation relation(String relation) { + this.relation = relation; + return this; + } + + /** + * Get relation + * @return relation + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getRelation() { + return relation; + } + + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelation(String relation) { + this.relation = relation; + } + + /** + * Return true if this ObjectRelation object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObjectRelation objectRelation = (ObjectRelation) o; + return Objects.equals(this._object, objectRelation._object) + && Objects.equals(this.relation, objectRelation.relation); + } + + @Override + public int hashCode() { + return Objects.hash(_object, relation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObjectRelation {\n"); + sb.append(" _object: ").append(toIndentedString(_object)).append("\n"); + sb.append(" relation: ").append(toIndentedString(relation)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `object` to the URL query string + if (getObject() != null) { + joiner.add(String.format( + "%sobject%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getObject()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `relation` to the URL query string + if (getRelation() != null) { + joiner.add(String.format( + "%srelation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getRelation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java new file mode 100644 index 0000000..1dbd369 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java @@ -0,0 +1,182 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * PathUnknownErrorMessageResponse + */ +@JsonPropertyOrder({ + PathUnknownErrorMessageResponse.JSON_PROPERTY_CODE, + PathUnknownErrorMessageResponse.JSON_PROPERTY_MESSAGE +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class PathUnknownErrorMessageResponse { + public static final String JSON_PROPERTY_CODE = "code"; + private NotFoundErrorCode code = NotFoundErrorCode.NO_NOT_FOUND_ERROR; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + private String message; + + public PathUnknownErrorMessageResponse() {} + + public PathUnknownErrorMessageResponse code(NotFoundErrorCode code) { + this.code = code; + return this; + } + + /** + * Get code + * @return code + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public NotFoundErrorCode getCode() { + return code; + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCode(NotFoundErrorCode code) { + this.code = code; + } + + public PathUnknownErrorMessageResponse message(String message) { + this.message = message; + return this; + } + + /** + * Get message + * @return message + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getMessage() { + return message; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMessage(String message) { + this.message = message; + } + + /** + * Return true if this PathUnknownErrorMessageResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PathUnknownErrorMessageResponse pathUnknownErrorMessageResponse = (PathUnknownErrorMessageResponse) o; + return Objects.equals(this.code, pathUnknownErrorMessageResponse.code) + && Objects.equals(this.message, pathUnknownErrorMessageResponse.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, message); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PathUnknownErrorMessageResponse {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `code` to the URL query string + if (getCode() != null) { + joiner.add(String.format( + "%scode%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCode()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `message` to the URL query string + if (getMessage() != null) { + joiner.add(String.format( + "%smessage%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getMessage()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java new file mode 100644 index 0000000..31d03da --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java @@ -0,0 +1,201 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadAssertionsResponse + */ +@JsonPropertyOrder({ + ReadAssertionsResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID, + ReadAssertionsResponse.JSON_PROPERTY_ASSERTIONS +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadAssertionsResponse { + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; + private List assertions = new ArrayList<>(); + + public ReadAssertionsResponse() {} + + public ReadAssertionsResponse authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + public ReadAssertionsResponse assertions(List assertions) { + this.assertions = assertions; + return this; + } + + public ReadAssertionsResponse addAssertionsItem(Assertion assertionsItem) { + if (this.assertions == null) { + this.assertions = new ArrayList<>(); + } + this.assertions.add(assertionsItem); + return this; + } + + /** + * Get assertions + * @return assertions + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ASSERTIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getAssertions() { + return assertions; + } + + @JsonProperty(JSON_PROPERTY_ASSERTIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAssertions(List assertions) { + this.assertions = assertions; + } + + /** + * Return true if this ReadAssertionsResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadAssertionsResponse readAssertionsResponse = (ReadAssertionsResponse) o; + return Objects.equals(this.authorizationModelId, readAssertionsResponse.authorizationModelId) + && Objects.equals(this.assertions, readAssertionsResponse.assertions); + } + + @Override + public int hashCode() { + return Objects.hash(authorizationModelId, assertions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadAssertionsResponse {\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append(" assertions: ").append(toIndentedString(assertions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `assertions` to the URL query string + if (getAssertions() != null) { + for (int i = 0; i < getAssertions().size(); i++) { + if (getAssertions().get(i) != null) { + joiner.add(getAssertions() + .get(i) + .toUrlQueryString(String.format( + "%sassertions%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java new file mode 100644 index 0000000..3ba4423 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java @@ -0,0 +1,137 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadAuthorizationModelResponse + */ +@JsonPropertyOrder({ReadAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadAuthorizationModelResponse { + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL = "authorization_model"; + private AuthorizationModel authorizationModel; + + public ReadAuthorizationModelResponse() {} + + public ReadAuthorizationModelResponse authorizationModel(AuthorizationModel authorizationModel) { + this.authorizationModel = authorizationModel; + return this; + } + + /** + * Get authorizationModel + * @return authorizationModel + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AuthorizationModel getAuthorizationModel() { + return authorizationModel; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModel(AuthorizationModel authorizationModel) { + this.authorizationModel = authorizationModel; + } + + /** + * Return true if this ReadAuthorizationModelResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadAuthorizationModelResponse readAuthorizationModelResponse = (ReadAuthorizationModelResponse) o; + return Objects.equals(this.authorizationModel, readAuthorizationModelResponse.authorizationModel); + } + + @Override + public int hashCode() { + return Objects.hash(authorizationModel); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadAuthorizationModelResponse {\n"); + sb.append(" authorizationModel: ") + .append(toIndentedString(authorizationModel)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `authorization_model` to the URL query string + if (getAuthorizationModel() != null) { + joiner.add(getAuthorizationModel().toUrlQueryString(prefix + "authorization_model" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java new file mode 100644 index 0000000..582f6c2 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java @@ -0,0 +1,203 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadAuthorizationModelsResponse + */ +@JsonPropertyOrder({ + ReadAuthorizationModelsResponse.JSON_PROPERTY_AUTHORIZATION_MODELS, + ReadAuthorizationModelsResponse.JSON_PROPERTY_CONTINUATION_TOKEN +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadAuthorizationModelsResponse { + public static final String JSON_PROPERTY_AUTHORIZATION_MODELS = "authorization_models"; + private List authorizationModels = new ArrayList<>(); + + public static final String JSON_PROPERTY_CONTINUATION_TOKEN = "continuation_token"; + private String continuationToken; + + public ReadAuthorizationModelsResponse() {} + + public ReadAuthorizationModelsResponse authorizationModels(List authorizationModels) { + this.authorizationModels = authorizationModels; + return this; + } + + public ReadAuthorizationModelsResponse addAuthorizationModelsItem(AuthorizationModel authorizationModelsItem) { + if (this.authorizationModels == null) { + this.authorizationModels = new ArrayList<>(); + } + this.authorizationModels.add(authorizationModelsItem); + return this; + } + + /** + * Get authorizationModels + * @return authorizationModels + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODELS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getAuthorizationModels() { + return authorizationModels; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODELS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModels(List authorizationModels) { + this.authorizationModels = authorizationModels; + } + + public ReadAuthorizationModelsResponse continuationToken(String continuationToken) { + this.continuationToken = continuationToken; + return this; + } + + /** + * The continuation token will be empty if there are no more models. + * @return continuationToken + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getContinuationToken() { + return continuationToken; + } + + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + /** + * Return true if this ReadAuthorizationModelsResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadAuthorizationModelsResponse readAuthorizationModelsResponse = (ReadAuthorizationModelsResponse) o; + return Objects.equals(this.authorizationModels, readAuthorizationModelsResponse.authorizationModels) + && Objects.equals(this.continuationToken, readAuthorizationModelsResponse.continuationToken); + } + + @Override + public int hashCode() { + return Objects.hash(authorizationModels, continuationToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadAuthorizationModelsResponse {\n"); + sb.append(" authorizationModels: ") + .append(toIndentedString(authorizationModels)) + .append("\n"); + sb.append(" continuationToken: ") + .append(toIndentedString(continuationToken)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `authorization_models` to the URL query string + if (getAuthorizationModels() != null) { + for (int i = 0; i < getAuthorizationModels().size(); i++) { + if (getAuthorizationModels().get(i) != null) { + joiner.add(getAuthorizationModels() + .get(i) + .toUrlQueryString(String.format( + "%sauthorization_models%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `continuation_token` to the URL query string + if (getContinuationToken() != null) { + joiner.add(String.format( + "%scontinuation_token%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getContinuationToken()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java new file mode 100644 index 0000000..dd8458b --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java @@ -0,0 +1,198 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadChangesResponse + */ +@JsonPropertyOrder({ReadChangesResponse.JSON_PROPERTY_CHANGES, ReadChangesResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadChangesResponse { + public static final String JSON_PROPERTY_CHANGES = "changes"; + private List changes = new ArrayList<>(); + + public static final String JSON_PROPERTY_CONTINUATION_TOKEN = "continuation_token"; + private String continuationToken; + + public ReadChangesResponse() {} + + public ReadChangesResponse changes(List changes) { + this.changes = changes; + return this; + } + + public ReadChangesResponse addChangesItem(TupleChange changesItem) { + if (this.changes == null) { + this.changes = new ArrayList<>(); + } + this.changes.add(changesItem); + return this; + } + + /** + * Get changes + * @return changes + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CHANGES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getChanges() { + return changes; + } + + @JsonProperty(JSON_PROPERTY_CHANGES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setChanges(List changes) { + this.changes = changes; + } + + public ReadChangesResponse continuationToken(String continuationToken) { + this.continuationToken = continuationToken; + return this; + } + + /** + * The continuation token will be identical if there are no new changes. + * @return continuationToken + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getContinuationToken() { + return continuationToken; + } + + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + /** + * Return true if this ReadChangesResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadChangesResponse readChangesResponse = (ReadChangesResponse) o; + return Objects.equals(this.changes, readChangesResponse.changes) + && Objects.equals(this.continuationToken, readChangesResponse.continuationToken); + } + + @Override + public int hashCode() { + return Objects.hash(changes, continuationToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadChangesResponse {\n"); + sb.append(" changes: ").append(toIndentedString(changes)).append("\n"); + sb.append(" continuationToken: ") + .append(toIndentedString(continuationToken)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `changes` to the URL query string + if (getChanges() != null) { + for (int i = 0; i < getChanges().size(); i++) { + if (getChanges().get(i) != null) { + joiner.add(getChanges() + .get(i) + .toUrlQueryString(String.format( + "%schanges%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `continuation_token` to the URL query string + if (getContinuationToken() != null) { + joiner.add(String.format( + "%scontinuation_token%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getContinuationToken()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java new file mode 100644 index 0000000..a66f4b5 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java @@ -0,0 +1,217 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadRequest + */ +@JsonPropertyOrder({ + ReadRequest.JSON_PROPERTY_TUPLE_KEY, + ReadRequest.JSON_PROPERTY_PAGE_SIZE, + ReadRequest.JSON_PROPERTY_CONTINUATION_TOKEN +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadRequest { + public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; + private TupleKey tupleKey; + + public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; + private Integer pageSize; + + public static final String JSON_PROPERTY_CONTINUATION_TOKEN = "continuation_token"; + private String continuationToken; + + public ReadRequest() {} + + public ReadRequest tupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + return this; + } + + /** + * Get tupleKey + * @return tupleKey + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleKey getTupleKey() { + return tupleKey; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + } + + public ReadRequest pageSize(Integer pageSize) { + this.pageSize = pageSize; + return this; + } + + /** + * Get pageSize + * @return pageSize + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getPageSize() { + return pageSize; + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public ReadRequest continuationToken(String continuationToken) { + this.continuationToken = continuationToken; + return this; + } + + /** + * Get continuationToken + * @return continuationToken + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getContinuationToken() { + return continuationToken; + } + + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + /** + * Return true if this Read_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadRequest readRequest = (ReadRequest) o; + return Objects.equals(this.tupleKey, readRequest.tupleKey) + && Objects.equals(this.pageSize, readRequest.pageSize) + && Objects.equals(this.continuationToken, readRequest.continuationToken); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKey, pageSize, continuationToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadRequest {\n"); + sb.append(" tupleKey: ").append(toIndentedString(tupleKey)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" continuationToken: ") + .append(toIndentedString(continuationToken)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_key` to the URL query string + if (getTupleKey() != null) { + joiner.add(getTupleKey().toUrlQueryString(prefix + "tuple_key" + suffix)); + } + + // add `page_size` to the URL query string + if (getPageSize() != null) { + joiner.add(String.format( + "%spage_size%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getPageSize()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `continuation_token` to the URL query string + if (getContinuationToken() != null) { + joiner.add(String.format( + "%scontinuation_token%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getContinuationToken()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java new file mode 100644 index 0000000..c047bb5 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java @@ -0,0 +1,198 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ReadResponse + */ +@JsonPropertyOrder({ReadResponse.JSON_PROPERTY_TUPLES, ReadResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ReadResponse { + public static final String JSON_PROPERTY_TUPLES = "tuples"; + private List tuples = new ArrayList<>(); + + public static final String JSON_PROPERTY_CONTINUATION_TOKEN = "continuation_token"; + private String continuationToken; + + public ReadResponse() {} + + public ReadResponse tuples(List tuples) { + this.tuples = tuples; + return this; + } + + public ReadResponse addTuplesItem(Tuple tuplesItem) { + if (this.tuples == null) { + this.tuples = new ArrayList<>(); + } + this.tuples.add(tuplesItem); + return this; + } + + /** + * Get tuples + * @return tuples + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getTuples() { + return tuples; + } + + @JsonProperty(JSON_PROPERTY_TUPLES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTuples(List tuples) { + this.tuples = tuples; + } + + public ReadResponse continuationToken(String continuationToken) { + this.continuationToken = continuationToken; + return this; + } + + /** + * The continuation token will be empty if there are no more tuples. + * @return continuationToken + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getContinuationToken() { + return continuationToken; + } + + @JsonProperty(JSON_PROPERTY_CONTINUATION_TOKEN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + /** + * Return true if this ReadResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReadResponse readResponse = (ReadResponse) o; + return Objects.equals(this.tuples, readResponse.tuples) + && Objects.equals(this.continuationToken, readResponse.continuationToken); + } + + @Override + public int hashCode() { + return Objects.hash(tuples, continuationToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ReadResponse {\n"); + sb.append(" tuples: ").append(toIndentedString(tuples)).append("\n"); + sb.append(" continuationToken: ") + .append(toIndentedString(continuationToken)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuples` to the URL query string + if (getTuples() != null) { + for (int i = 0; i < getTuples().size(); i++) { + if (getTuples().get(i) != null) { + joiner.add(getTuples() + .get(i) + .toUrlQueryString(String.format( + "%stuples%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `continuation_token` to the URL query string + if (getContinuationToken() != null) { + joiner.add(String.format( + "%scontinuation_token%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getContinuationToken()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java new file mode 100644 index 0000000..bbeb096 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java @@ -0,0 +1,159 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * RelationMetadata + */ +@JsonPropertyOrder({RelationMetadata.JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class RelationMetadata { + public static final String JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES = "directly_related_user_types"; + private List directlyRelatedUserTypes = new ArrayList<>(); + + public RelationMetadata() {} + + public RelationMetadata directlyRelatedUserTypes(List directlyRelatedUserTypes) { + this.directlyRelatedUserTypes = directlyRelatedUserTypes; + return this; + } + + public RelationMetadata addDirectlyRelatedUserTypesItem(RelationReference directlyRelatedUserTypesItem) { + if (this.directlyRelatedUserTypes == null) { + this.directlyRelatedUserTypes = new ArrayList<>(); + } + this.directlyRelatedUserTypes.add(directlyRelatedUserTypesItem); + return this; + } + + /** + * Get directlyRelatedUserTypes + * @return directlyRelatedUserTypes + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getDirectlyRelatedUserTypes() { + return directlyRelatedUserTypes; + } + + @JsonProperty(JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDirectlyRelatedUserTypes(List directlyRelatedUserTypes) { + this.directlyRelatedUserTypes = directlyRelatedUserTypes; + } + + /** + * Return true if this RelationMetadata object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RelationMetadata relationMetadata = (RelationMetadata) o; + return Objects.equals(this.directlyRelatedUserTypes, relationMetadata.directlyRelatedUserTypes); + } + + @Override + public int hashCode() { + return Objects.hash(directlyRelatedUserTypes); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RelationMetadata {\n"); + sb.append(" directlyRelatedUserTypes: ") + .append(toIndentedString(directlyRelatedUserTypes)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `directly_related_user_types` to the URL query string + if (getDirectlyRelatedUserTypes() != null) { + for (int i = 0; i < getDirectlyRelatedUserTypes().size(); i++) { + if (getDirectlyRelatedUserTypes().get(i) != null) { + joiner.add(getDirectlyRelatedUserTypes() + .get(i) + .toUrlQueryString(String.format( + "%sdirectly_related_user_types%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java new file mode 100644 index 0000000..0171bea --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java @@ -0,0 +1,220 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * RelationReference represents a relation of a particular object type (e.g. 'document#viewer'). + */ +@JsonPropertyOrder({ + RelationReference.JSON_PROPERTY_TYPE, + RelationReference.JSON_PROPERTY_RELATION, + RelationReference.JSON_PROPERTY_WILDCARD +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class RelationReference { + public static final String JSON_PROPERTY_TYPE = "type"; + private String type; + + public static final String JSON_PROPERTY_RELATION = "relation"; + private String relation; + + public static final String JSON_PROPERTY_WILDCARD = "wildcard"; + private Object wildcard; + + public RelationReference() {} + + public RelationReference type(String type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(String type) { + this.type = type; + } + + public RelationReference relation(String relation) { + this.relation = relation; + return this; + } + + /** + * Get relation + * @return relation + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getRelation() { + return relation; + } + + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelation(String relation) { + this.relation = relation; + } + + public RelationReference wildcard(Object wildcard) { + this.wildcard = wildcard; + return this; + } + + /** + * Get wildcard + * @return wildcard + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_WILDCARD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Object getWildcard() { + return wildcard; + } + + @JsonProperty(JSON_PROPERTY_WILDCARD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setWildcard(Object wildcard) { + this.wildcard = wildcard; + } + + /** + * Return true if this RelationReference object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RelationReference relationReference = (RelationReference) o; + return Objects.equals(this.type, relationReference.type) + && Objects.equals(this.relation, relationReference.relation) + && Objects.equals(this.wildcard, relationReference.wildcard); + } + + @Override + public int hashCode() { + return Objects.hash(type, relation, wildcard); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RelationReference {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" relation: ").append(toIndentedString(relation)).append("\n"); + sb.append(" wildcard: ").append(toIndentedString(wildcard)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format( + "%stype%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getType()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `relation` to the URL query string + if (getRelation() != null) { + joiner.add(String.format( + "%srelation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getRelation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `wildcard` to the URL query string + if (getWildcard() != null) { + joiner.add(String.format( + "%swildcard%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getWildcard()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Status.java b/src/main/java/dev/openfga/sdk/api/model/Status.java new file mode 100644 index 0000000..d54cccf --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Status.java @@ -0,0 +1,231 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Status + */ +@JsonPropertyOrder({Status.JSON_PROPERTY_CODE, Status.JSON_PROPERTY_MESSAGE, Status.JSON_PROPERTY_DETAILS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Status { + public static final String JSON_PROPERTY_CODE = "code"; + private Integer code; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + private String message; + + public static final String JSON_PROPERTY_DETAILS = "details"; + private List details = new ArrayList<>(); + + public Status() {} + + public Status code(Integer code) { + this.code = code; + return this; + } + + /** + * Get code + * @return code + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getCode() { + return code; + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCode(Integer code) { + this.code = code; + } + + public Status message(String message) { + this.message = message; + return this; + } + + /** + * Get message + * @return message + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getMessage() { + return message; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMessage(String message) { + this.message = message; + } + + public Status details(List details) { + this.details = details; + return this; + } + + public Status addDetailsItem(Any detailsItem) { + if (this.details == null) { + this.details = new ArrayList<>(); + } + this.details.add(detailsItem); + return this; + } + + /** + * Get details + * @return details + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DETAILS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getDetails() { + return details; + } + + @JsonProperty(JSON_PROPERTY_DETAILS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDetails(List details) { + this.details = details; + } + + /** + * Return true if this Status object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Status status = (Status) o; + return Objects.equals(this.code, status.code) + && Objects.equals(this.message, status.message) + && Objects.equals(this.details, status.details); + } + + @Override + public int hashCode() { + return Objects.hash(code, message, details); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Status {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" details: ").append(toIndentedString(details)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `code` to the URL query string + if (getCode() != null) { + joiner.add(String.format( + "%scode%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCode()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `message` to the URL query string + if (getMessage() != null) { + joiner.add(String.format( + "%smessage%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getMessage()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `details` to the URL query string + if (getDetails() != null) { + for (int i = 0; i < getDetails().size(); i++) { + if (getDetails().get(i) != null) { + joiner.add(String.format( + "%sdetails%s%s=%s", + prefix, + suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf(getDetails().get(i)), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Store.java b/src/main/java/dev/openfga/sdk/api/model/Store.java new file mode 100644 index 0000000..2aa2ae3 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Store.java @@ -0,0 +1,297 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Store + */ +@JsonPropertyOrder({ + Store.JSON_PROPERTY_ID, + Store.JSON_PROPERTY_NAME, + Store.JSON_PROPERTY_CREATED_AT, + Store.JSON_PROPERTY_UPDATED_AT, + Store.JSON_PROPERTY_DELETED_AT +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Store { + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + private OffsetDateTime createdAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updated_at"; + private OffsetDateTime updatedAt; + + public static final String JSON_PROPERTY_DELETED_AT = "deleted_at"; + private OffsetDateTime deletedAt; + + public Store() {} + + public Store id(String id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(String id) { + this.id = id; + } + + public Store name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(String name) { + this.name = name; + } + + public Store createdAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * Get createdAt + * @return createdAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getCreatedAt() { + return createdAt; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCreatedAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + } + + public Store updatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * Get updatedAt + * @return updatedAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpdatedAt(OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + } + + public Store deletedAt(OffsetDateTime deletedAt) { + this.deletedAt = deletedAt; + return this; + } + + /** + * Get deletedAt + * @return deletedAt + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DELETED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getDeletedAt() { + return deletedAt; + } + + @JsonProperty(JSON_PROPERTY_DELETED_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeletedAt(OffsetDateTime deletedAt) { + this.deletedAt = deletedAt; + } + + /** + * Return true if this Store object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Store store = (Store) o; + return Objects.equals(this.id, store.id) + && Objects.equals(this.name, store.name) + && Objects.equals(this.createdAt, store.createdAt) + && Objects.equals(this.updatedAt, store.updatedAt) + && Objects.equals(this.deletedAt, store.deletedAt); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, createdAt, updatedAt, deletedAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Store {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append(" deletedAt: ").append(toIndentedString(deletedAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format( + "%sid%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format( + "%sname%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getName()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `created_at` to the URL query string + if (getCreatedAt() != null) { + joiner.add(String.format( + "%screated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCreatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `updated_at` to the URL query string + if (getUpdatedAt() != null) { + joiner.add(String.format( + "%supdated_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUpdatedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `deleted_at` to the URL query string + if (getDeletedAt() != null) { + joiner.add(String.format( + "%sdeleted_at%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getDeletedAt()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Tuple.java b/src/main/java/dev/openfga/sdk/api/model/Tuple.java new file mode 100644 index 0000000..d48439c --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Tuple.java @@ -0,0 +1,174 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Tuple + */ +@JsonPropertyOrder({Tuple.JSON_PROPERTY_KEY, Tuple.JSON_PROPERTY_TIMESTAMP}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Tuple { + public static final String JSON_PROPERTY_KEY = "key"; + private TupleKey key; + + public static final String JSON_PROPERTY_TIMESTAMP = "timestamp"; + private OffsetDateTime timestamp; + + public Tuple() {} + + public Tuple key(TupleKey key) { + this.key = key; + return this; + } + + /** + * Get key + * @return key + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleKey getKey() { + return key; + } + + @JsonProperty(JSON_PROPERTY_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setKey(TupleKey key) { + this.key = key; + } + + public Tuple timestamp(OffsetDateTime timestamp) { + this.timestamp = timestamp; + return this; + } + + /** + * Get timestamp + * @return timestamp + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TIMESTAMP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getTimestamp() { + return timestamp; + } + + @JsonProperty(JSON_PROPERTY_TIMESTAMP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTimestamp(OffsetDateTime timestamp) { + this.timestamp = timestamp; + } + + /** + * Return true if this Tuple object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Tuple tuple = (Tuple) o; + return Objects.equals(this.key, tuple.key) && Objects.equals(this.timestamp, tuple.timestamp); + } + + @Override + public int hashCode() { + return Objects.hash(key, timestamp); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Tuple {\n"); + sb.append(" key: ").append(toIndentedString(key)).append("\n"); + sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `key` to the URL query string + if (getKey() != null) { + joiner.add(getKey().toUrlQueryString(prefix + "key" + suffix)); + } + + // add `timestamp` to the URL query string + if (getTimestamp() != null) { + joiner.add(String.format( + "%stimestamp%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getTimestamp()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java new file mode 100644 index 0000000..b8fe4fc --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java @@ -0,0 +1,216 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * TupleChange + */ +@JsonPropertyOrder({ + TupleChange.JSON_PROPERTY_TUPLE_KEY, + TupleChange.JSON_PROPERTY_OPERATION, + TupleChange.JSON_PROPERTY_TIMESTAMP +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class TupleChange { + public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; + private TupleKey tupleKey; + + public static final String JSON_PROPERTY_OPERATION = "operation"; + private TupleOperation operation = TupleOperation.WRITE; + + public static final String JSON_PROPERTY_TIMESTAMP = "timestamp"; + private OffsetDateTime timestamp; + + public TupleChange() {} + + public TupleChange tupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + return this; + } + + /** + * Get tupleKey + * @return tupleKey + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleKey getTupleKey() { + return tupleKey; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleKey(TupleKey tupleKey) { + this.tupleKey = tupleKey; + } + + public TupleChange operation(TupleOperation operation) { + this.operation = operation; + return this; + } + + /** + * Get operation + * @return operation + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OPERATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleOperation getOperation() { + return operation; + } + + @JsonProperty(JSON_PROPERTY_OPERATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOperation(TupleOperation operation) { + this.operation = operation; + } + + public TupleChange timestamp(OffsetDateTime timestamp) { + this.timestamp = timestamp; + return this; + } + + /** + * Get timestamp + * @return timestamp + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TIMESTAMP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getTimestamp() { + return timestamp; + } + + @JsonProperty(JSON_PROPERTY_TIMESTAMP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTimestamp(OffsetDateTime timestamp) { + this.timestamp = timestamp; + } + + /** + * Return true if this TupleChange object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TupleChange tupleChange = (TupleChange) o; + return Objects.equals(this.tupleKey, tupleChange.tupleKey) + && Objects.equals(this.operation, tupleChange.operation) + && Objects.equals(this.timestamp, tupleChange.timestamp); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKey, operation, timestamp); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TupleChange {\n"); + sb.append(" tupleKey: ").append(toIndentedString(tupleKey)).append("\n"); + sb.append(" operation: ").append(toIndentedString(operation)).append("\n"); + sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_key` to the URL query string + if (getTupleKey() != null) { + joiner.add(getTupleKey().toUrlQueryString(prefix + "tuple_key" + suffix)); + } + + // add `operation` to the URL query string + if (getOperation() != null) { + joiner.add(String.format( + "%soperation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getOperation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `timestamp` to the URL query string + if (getTimestamp() != null) { + joiner.add(String.format( + "%stimestamp%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getTimestamp()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java new file mode 100644 index 0000000..069f509 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java @@ -0,0 +1,216 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * TupleKey + */ +@JsonPropertyOrder({TupleKey.JSON_PROPERTY_OBJECT, TupleKey.JSON_PROPERTY_RELATION, TupleKey.JSON_PROPERTY_USER}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class TupleKey { + public static final String JSON_PROPERTY_OBJECT = "object"; + private String _object; + + public static final String JSON_PROPERTY_RELATION = "relation"; + private String relation; + + public static final String JSON_PROPERTY_USER = "user"; + private String user; + + public TupleKey() {} + + public TupleKey _object(String _object) { + this._object = _object; + return this; + } + + /** + * Get _object + * @return _object + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getObject() { + return _object; + } + + @JsonProperty(JSON_PROPERTY_OBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setObject(String _object) { + this._object = _object; + } + + public TupleKey relation(String relation) { + this.relation = relation; + return this; + } + + /** + * Get relation + * @return relation + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getRelation() { + return relation; + } + + @JsonProperty(JSON_PROPERTY_RELATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelation(String relation) { + this.relation = relation; + } + + public TupleKey user(String user) { + this.user = user; + return this; + } + + /** + * Get user + * @return user + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USER) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUser() { + return user; + } + + @JsonProperty(JSON_PROPERTY_USER) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUser(String user) { + this.user = user; + } + + /** + * Return true if this TupleKey object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TupleKey tupleKey = (TupleKey) o; + return Objects.equals(this._object, tupleKey._object) + && Objects.equals(this.relation, tupleKey.relation) + && Objects.equals(this.user, tupleKey.user); + } + + @Override + public int hashCode() { + return Objects.hash(_object, relation, user); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TupleKey {\n"); + sb.append(" _object: ").append(toIndentedString(_object)).append("\n"); + sb.append(" relation: ").append(toIndentedString(relation)).append("\n"); + sb.append(" user: ").append(toIndentedString(user)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `object` to the URL query string + if (getObject() != null) { + joiner.add(String.format( + "%sobject%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getObject()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `relation` to the URL query string + if (getRelation() != null) { + joiner.add(String.format( + "%srelation%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getRelation()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `user` to the URL query string + if (getUser() != null) { + joiner.add(String.format( + "%suser%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getUser()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java new file mode 100644 index 0000000..1a45990 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * TupleKeys + */ +@JsonPropertyOrder({TupleKeys.JSON_PROPERTY_TUPLE_KEYS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class TupleKeys { + public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; + private List tupleKeys = new ArrayList<>(); + + public TupleKeys() {} + + public TupleKeys tupleKeys(List tupleKeys) { + this.tupleKeys = tupleKeys; + return this; + } + + public TupleKeys addTupleKeysItem(TupleKey tupleKeysItem) { + if (this.tupleKeys == null) { + this.tupleKeys = new ArrayList<>(); + } + this.tupleKeys.add(tupleKeysItem); + return this; + } + + /** + * Get tupleKeys + * @return tupleKeys + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TUPLE_KEYS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getTupleKeys() { + return tupleKeys; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_KEYS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTupleKeys(List tupleKeys) { + this.tupleKeys = tupleKeys; + } + + /** + * Return true if this TupleKeys object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TupleKeys tupleKeys = (TupleKeys) o; + return Objects.equals(this.tupleKeys, tupleKeys.tupleKeys); + } + + @Override + public int hashCode() { + return Objects.hash(tupleKeys); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TupleKeys {\n"); + sb.append(" tupleKeys: ").append(toIndentedString(tupleKeys)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tuple_keys` to the URL query string + if (getTupleKeys() != null) { + for (int i = 0; i < getTupleKeys().size(); i++) { + if (getTupleKeys().get(i) != null) { + joiner.add(getTupleKeys() + .get(i) + .toUrlQueryString(String.format( + "%stuple_keys%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleOperation.java b/src/main/java/dev/openfga/sdk/api/model/TupleOperation.java new file mode 100644 index 0000000..b1025ff --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TupleOperation.java @@ -0,0 +1,67 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets TupleOperation + */ +public enum TupleOperation { + WRITE("TUPLE_OPERATION_WRITE"), + + DELETE("TUPLE_OPERATION_DELETE"), + + UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); + + private String value; + + TupleOperation(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static TupleOperation fromValue(String value) { + for (TupleOperation b : TupleOperation.values()) { + if (b.value.equals(value)) { + return b; + } + } + return UNKNOWN_DEFAULT_OPEN_API; + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java new file mode 100644 index 0000000..8ff7334 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java @@ -0,0 +1,169 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * TupleToUserset + */ +@JsonPropertyOrder({TupleToUserset.JSON_PROPERTY_TUPLESET, TupleToUserset.JSON_PROPERTY_COMPUTED_USERSET}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class TupleToUserset { + public static final String JSON_PROPERTY_TUPLESET = "tupleset"; + private ObjectRelation tupleset; + + public static final String JSON_PROPERTY_COMPUTED_USERSET = "computedUserset"; + private ObjectRelation computedUserset; + + public TupleToUserset() {} + + public TupleToUserset tupleset(ObjectRelation tupleset) { + this.tupleset = tupleset; + return this; + } + + /** + * Get tupleset + * @return tupleset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLESET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObjectRelation getTupleset() { + return tupleset; + } + + @JsonProperty(JSON_PROPERTY_TUPLESET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleset(ObjectRelation tupleset) { + this.tupleset = tupleset; + } + + public TupleToUserset computedUserset(ObjectRelation computedUserset) { + this.computedUserset = computedUserset; + return this; + } + + /** + * Get computedUserset + * @return computedUserset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_COMPUTED_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObjectRelation getComputedUserset() { + return computedUserset; + } + + @JsonProperty(JSON_PROPERTY_COMPUTED_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComputedUserset(ObjectRelation computedUserset) { + this.computedUserset = computedUserset; + } + + /** + * Return true if this TupleToUserset object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TupleToUserset tupleToUserset = (TupleToUserset) o; + return Objects.equals(this.tupleset, tupleToUserset.tupleset) + && Objects.equals(this.computedUserset, tupleToUserset.computedUserset); + } + + @Override + public int hashCode() { + return Objects.hash(tupleset, computedUserset); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TupleToUserset {\n"); + sb.append(" tupleset: ").append(toIndentedString(tupleset)).append("\n"); + sb.append(" computedUserset: ") + .append(toIndentedString(computedUserset)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tupleset` to the URL query string + if (getTupleset() != null) { + joiner.add(getTupleset().toUrlQueryString(prefix + "tupleset" + suffix)); + } + + // add `computedUserset` to the URL query string + if (getComputedUserset() != null) { + joiner.add(getComputedUserset().toUrlQueryString(prefix + "computedUserset" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java new file mode 100644 index 0000000..6d452d8 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java @@ -0,0 +1,232 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * TypeDefinition + */ +@JsonPropertyOrder({ + TypeDefinition.JSON_PROPERTY_TYPE, + TypeDefinition.JSON_PROPERTY_RELATIONS, + TypeDefinition.JSON_PROPERTY_METADATA +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class TypeDefinition { + public static final String JSON_PROPERTY_TYPE = "type"; + private String type; + + public static final String JSON_PROPERTY_RELATIONS = "relations"; + private Map relations = new HashMap<>(); + + public static final String JSON_PROPERTY_METADATA = "metadata"; + private Metadata metadata; + + public TypeDefinition() {} + + public TypeDefinition type(String type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(String type) { + this.type = type; + } + + public TypeDefinition relations(Map relations) { + this.relations = relations; + return this; + } + + public TypeDefinition putRelationsItem(String key, Userset relationsItem) { + if (this.relations == null) { + this.relations = new HashMap<>(); + } + this.relations.put(key, relationsItem); + return this; + } + + /** + * Get relations + * @return relations + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RELATIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getRelations() { + return relations; + } + + @JsonProperty(JSON_PROPERTY_RELATIONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelations(Map relations) { + this.relations = relations; + } + + public TypeDefinition metadata(Metadata metadata) { + this.metadata = metadata; + return this; + } + + /** + * Get metadata + * @return metadata + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_METADATA) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Metadata getMetadata() { + return metadata; + } + + @JsonProperty(JSON_PROPERTY_METADATA) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMetadata(Metadata metadata) { + this.metadata = metadata; + } + + /** + * Return true if this TypeDefinition object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TypeDefinition typeDefinition = (TypeDefinition) o; + return Objects.equals(this.type, typeDefinition.type) + && Objects.equals(this.relations, typeDefinition.relations) + && Objects.equals(this.metadata, typeDefinition.metadata); + } + + @Override + public int hashCode() { + return Objects.hash(type, relations, metadata); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TypeDefinition {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" relations: ").append(toIndentedString(relations)).append("\n"); + sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format( + "%stype%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getType()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `relations` to the URL query string + if (getRelations() != null) { + for (String _key : getRelations().keySet()) { + if (getRelations().get(_key) != null) { + joiner.add(getRelations() + .get(_key) + .toUrlQueryString(String.format( + "%srelations%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + // add `metadata` to the URL query string + if (getMetadata() != null) { + joiner.add(getMetadata().toUrlQueryString(prefix + "metadata" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Users.java b/src/main/java/dev/openfga/sdk/api/model/Users.java new file mode 100644 index 0000000..3c9122f --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Users.java @@ -0,0 +1,155 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Users + */ +@JsonPropertyOrder({Users.JSON_PROPERTY_USERS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Users { + public static final String JSON_PROPERTY_USERS = "users"; + private List users = new ArrayList<>(); + + public Users() {} + + public Users users(List users) { + this.users = users; + return this; + } + + public Users addUsersItem(String usersItem) { + if (this.users == null) { + this.users = new ArrayList<>(); + } + this.users.add(usersItem); + return this; + } + + /** + * Get users + * @return users + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getUsers() { + return users; + } + + @JsonProperty(JSON_PROPERTY_USERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUsers(List users) { + this.users = users; + } + + /** + * Return true if this Users object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Users users = (Users) o; + return Objects.equals(this.users, users.users); + } + + @Override + public int hashCode() { + return Objects.hash(users); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Users {\n"); + sb.append(" users: ").append(toIndentedString(users)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `users` to the URL query string + if (getUsers() != null) { + for (int i = 0; i < getUsers().size(); i++) { + joiner.add(String.format( + "%susers%s%s=%s", + prefix, + suffix, + "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), + URLEncoder.encode(String.valueOf(getUsers().get(i)), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Userset.java b/src/main/java/dev/openfga/sdk/api/model/Userset.java new file mode 100644 index 0000000..799bced --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Userset.java @@ -0,0 +1,313 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Userset + */ +@JsonPropertyOrder({ + Userset.JSON_PROPERTY_THIS, + Userset.JSON_PROPERTY_COMPUTED_USERSET, + Userset.JSON_PROPERTY_TUPLE_TO_USERSET, + Userset.JSON_PROPERTY_UNION, + Userset.JSON_PROPERTY_INTERSECTION, + Userset.JSON_PROPERTY_DIFFERENCE +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Userset { + public static final String JSON_PROPERTY_THIS = "this"; + private Object _this; + + public static final String JSON_PROPERTY_COMPUTED_USERSET = "computedUserset"; + private ObjectRelation computedUserset; + + public static final String JSON_PROPERTY_TUPLE_TO_USERSET = "tupleToUserset"; + private TupleToUserset tupleToUserset; + + public static final String JSON_PROPERTY_UNION = "union"; + private Usersets union; + + public static final String JSON_PROPERTY_INTERSECTION = "intersection"; + private Usersets intersection; + + public static final String JSON_PROPERTY_DIFFERENCE = "difference"; + private Difference difference; + + public Userset() {} + + public Userset _this(Object _this) { + this._this = _this; + return this; + } + + /** + * A DirectUserset is a sentinel message for referencing the direct members specified by an object/relation mapping. + * @return _this + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_THIS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Object getThis() { + return _this; + } + + @JsonProperty(JSON_PROPERTY_THIS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setThis(Object _this) { + this._this = _this; + } + + public Userset computedUserset(ObjectRelation computedUserset) { + this.computedUserset = computedUserset; + return this; + } + + /** + * Get computedUserset + * @return computedUserset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_COMPUTED_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObjectRelation getComputedUserset() { + return computedUserset; + } + + @JsonProperty(JSON_PROPERTY_COMPUTED_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComputedUserset(ObjectRelation computedUserset) { + this.computedUserset = computedUserset; + } + + public Userset tupleToUserset(TupleToUserset tupleToUserset) { + this.tupleToUserset = tupleToUserset; + return this; + } + + /** + * Get tupleToUserset + * @return tupleToUserset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLE_TO_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleToUserset getTupleToUserset() { + return tupleToUserset; + } + + @JsonProperty(JSON_PROPERTY_TUPLE_TO_USERSET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleToUserset(TupleToUserset tupleToUserset) { + this.tupleToUserset = tupleToUserset; + } + + public Userset union(Usersets union) { + this.union = union; + return this; + } + + /** + * Get union + * @return union + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UNION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Usersets getUnion() { + return union; + } + + @JsonProperty(JSON_PROPERTY_UNION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUnion(Usersets union) { + this.union = union; + } + + public Userset intersection(Usersets intersection) { + this.intersection = intersection; + return this; + } + + /** + * Get intersection + * @return intersection + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_INTERSECTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Usersets getIntersection() { + return intersection; + } + + @JsonProperty(JSON_PROPERTY_INTERSECTION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setIntersection(Usersets intersection) { + this.intersection = intersection; + } + + public Userset difference(Difference difference) { + this.difference = difference; + return this; + } + + /** + * Get difference + * @return difference + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DIFFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Difference getDifference() { + return difference; + } + + @JsonProperty(JSON_PROPERTY_DIFFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDifference(Difference difference) { + this.difference = difference; + } + + /** + * Return true if this Userset object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Userset userset = (Userset) o; + return Objects.equals(this._this, userset._this) + && Objects.equals(this.computedUserset, userset.computedUserset) + && Objects.equals(this.tupleToUserset, userset.tupleToUserset) + && Objects.equals(this.union, userset.union) + && Objects.equals(this.intersection, userset.intersection) + && Objects.equals(this.difference, userset.difference); + } + + @Override + public int hashCode() { + return Objects.hash(_this, computedUserset, tupleToUserset, union, intersection, difference); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Userset {\n"); + sb.append(" _this: ").append(toIndentedString(_this)).append("\n"); + sb.append(" computedUserset: ") + .append(toIndentedString(computedUserset)) + .append("\n"); + sb.append(" tupleToUserset: ") + .append(toIndentedString(tupleToUserset)) + .append("\n"); + sb.append(" union: ").append(toIndentedString(union)).append("\n"); + sb.append(" intersection: ").append(toIndentedString(intersection)).append("\n"); + sb.append(" difference: ").append(toIndentedString(difference)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `this` to the URL query string + if (getThis() != null) { + joiner.add(String.format( + "%sthis%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getThis()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `computedUserset` to the URL query string + if (getComputedUserset() != null) { + joiner.add(getComputedUserset().toUrlQueryString(prefix + "computedUserset" + suffix)); + } + + // add `tupleToUserset` to the URL query string + if (getTupleToUserset() != null) { + joiner.add(getTupleToUserset().toUrlQueryString(prefix + "tupleToUserset" + suffix)); + } + + // add `union` to the URL query string + if (getUnion() != null) { + joiner.add(getUnion().toUrlQueryString(prefix + "union" + suffix)); + } + + // add `intersection` to the URL query string + if (getIntersection() != null) { + joiner.add(getIntersection().toUrlQueryString(prefix + "intersection" + suffix)); + } + + // add `difference` to the URL query string + if (getDifference() != null) { + joiner.add(getDifference().toUrlQueryString(prefix + "difference" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java new file mode 100644 index 0000000..1cff619 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java @@ -0,0 +1,135 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * A UsersetTree contains the result of an Expansion. + */ +@JsonPropertyOrder({UsersetTree.JSON_PROPERTY_ROOT}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class UsersetTree { + public static final String JSON_PROPERTY_ROOT = "root"; + private Node root; + + public UsersetTree() {} + + public UsersetTree root(Node root) { + this.root = root; + return this; + } + + /** + * Get root + * @return root + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ROOT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Node getRoot() { + return root; + } + + @JsonProperty(JSON_PROPERTY_ROOT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRoot(Node root) { + this.root = root; + } + + /** + * Return true if this UsersetTree object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UsersetTree usersetTree = (UsersetTree) o; + return Objects.equals(this.root, usersetTree.root); + } + + @Override + public int hashCode() { + return Objects.hash(root); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UsersetTree {\n"); + sb.append(" root: ").append(toIndentedString(root)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `root` to the URL query string + if (getRoot() != null) { + joiner.add(getRoot().toUrlQueryString(prefix + "root" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java new file mode 100644 index 0000000..f712e52 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java @@ -0,0 +1,167 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * UsersetTreeDifference + */ +@JsonPropertyOrder({UsersetTreeDifference.JSON_PROPERTY_BASE, UsersetTreeDifference.JSON_PROPERTY_SUBTRACT}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class UsersetTreeDifference { + public static final String JSON_PROPERTY_BASE = "base"; + private Node base; + + public static final String JSON_PROPERTY_SUBTRACT = "subtract"; + private Node subtract; + + public UsersetTreeDifference() {} + + public UsersetTreeDifference base(Node base) { + this.base = base; + return this; + } + + /** + * Get base + * @return base + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BASE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Node getBase() { + return base; + } + + @JsonProperty(JSON_PROPERTY_BASE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBase(Node base) { + this.base = base; + } + + public UsersetTreeDifference subtract(Node subtract) { + this.subtract = subtract; + return this; + } + + /** + * Get subtract + * @return subtract + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SUBTRACT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Node getSubtract() { + return subtract; + } + + @JsonProperty(JSON_PROPERTY_SUBTRACT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSubtract(Node subtract) { + this.subtract = subtract; + } + + /** + * Return true if this UsersetTree.Difference object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UsersetTreeDifference usersetTreeDifference = (UsersetTreeDifference) o; + return Objects.equals(this.base, usersetTreeDifference.base) + && Objects.equals(this.subtract, usersetTreeDifference.subtract); + } + + @Override + public int hashCode() { + return Objects.hash(base, subtract); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UsersetTreeDifference {\n"); + sb.append(" base: ").append(toIndentedString(base)).append("\n"); + sb.append(" subtract: ").append(toIndentedString(subtract)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `base` to the URL query string + if (getBase() != null) { + joiner.add(getBase().toUrlQueryString(prefix + "base" + suffix)); + } + + // add `subtract` to the URL query string + if (getSubtract() != null) { + joiner.add(getSubtract().toUrlQueryString(prefix + "subtract" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java new file mode 100644 index 0000000..56dc456 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java @@ -0,0 +1,196 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * UsersetTreeTupleToUserset + */ +@JsonPropertyOrder({UsersetTreeTupleToUserset.JSON_PROPERTY_TUPLESET, UsersetTreeTupleToUserset.JSON_PROPERTY_COMPUTED}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class UsersetTreeTupleToUserset { + public static final String JSON_PROPERTY_TUPLESET = "tupleset"; + private String tupleset; + + public static final String JSON_PROPERTY_COMPUTED = "computed"; + private List computed = new ArrayList<>(); + + public UsersetTreeTupleToUserset() {} + + public UsersetTreeTupleToUserset tupleset(String tupleset) { + this.tupleset = tupleset; + return this; + } + + /** + * Get tupleset + * @return tupleset + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TUPLESET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getTupleset() { + return tupleset; + } + + @JsonProperty(JSON_PROPERTY_TUPLESET) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTupleset(String tupleset) { + this.tupleset = tupleset; + } + + public UsersetTreeTupleToUserset computed(List computed) { + this.computed = computed; + return this; + } + + public UsersetTreeTupleToUserset addComputedItem(Computed computedItem) { + if (this.computed == null) { + this.computed = new ArrayList<>(); + } + this.computed.add(computedItem); + return this; + } + + /** + * Get computed + * @return computed + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_COMPUTED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getComputed() { + return computed; + } + + @JsonProperty(JSON_PROPERTY_COMPUTED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComputed(List computed) { + this.computed = computed; + } + + /** + * Return true if this UsersetTree.TupleToUserset object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UsersetTreeTupleToUserset usersetTreeTupleToUserset = (UsersetTreeTupleToUserset) o; + return Objects.equals(this.tupleset, usersetTreeTupleToUserset.tupleset) + && Objects.equals(this.computed, usersetTreeTupleToUserset.computed); + } + + @Override + public int hashCode() { + return Objects.hash(tupleset, computed); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UsersetTreeTupleToUserset {\n"); + sb.append(" tupleset: ").append(toIndentedString(tupleset)).append("\n"); + sb.append(" computed: ").append(toIndentedString(computed)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tupleset` to the URL query string + if (getTupleset() != null) { + joiner.add(String.format( + "%stupleset%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getTupleset()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `computed` to the URL query string + if (getComputed() != null) { + for (int i = 0; i < getComputed().size(); i++) { + if (getComputed().get(i) != null) { + joiner.add(getComputed() + .get(i) + .toUrlQueryString(String.format( + "%scomputed%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/Usersets.java b/src/main/java/dev/openfga/sdk/api/model/Usersets.java new file mode 100644 index 0000000..21556ab --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/Usersets.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Usersets + */ +@JsonPropertyOrder({Usersets.JSON_PROPERTY_CHILD}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class Usersets { + public static final String JSON_PROPERTY_CHILD = "child"; + private List child = new ArrayList<>(); + + public Usersets() {} + + public Usersets child(List child) { + this.child = child; + return this; + } + + public Usersets addChildItem(Userset childItem) { + if (this.child == null) { + this.child = new ArrayList<>(); + } + this.child.add(childItem); + return this; + } + + /** + * Get child + * @return child + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CHILD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getChild() { + return child; + } + + @JsonProperty(JSON_PROPERTY_CHILD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setChild(List child) { + this.child = child; + } + + /** + * Return true if this Usersets object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Usersets usersets = (Usersets) o; + return Objects.equals(this.child, usersets.child); + } + + @Override + public int hashCode() { + return Objects.hash(child); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Usersets {\n"); + sb.append(" child: ").append(toIndentedString(child)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `child` to the URL query string + if (getChild() != null) { + for (int i = 0; i < getChild().size(); i++) { + if (getChild().get(i) != null) { + joiner.add(getChild() + .get(i) + .toUrlQueryString(String.format( + "%schild%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java new file mode 100644 index 0000000..0328dcb --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java @@ -0,0 +1,182 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * ValidationErrorMessageResponse + */ +@JsonPropertyOrder({ + ValidationErrorMessageResponse.JSON_PROPERTY_CODE, + ValidationErrorMessageResponse.JSON_PROPERTY_MESSAGE +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class ValidationErrorMessageResponse { + public static final String JSON_PROPERTY_CODE = "code"; + private ErrorCode code = ErrorCode.NO_ERROR; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + private String message; + + public ValidationErrorMessageResponse() {} + + public ValidationErrorMessageResponse code(ErrorCode code) { + this.code = code; + return this; + } + + /** + * Get code + * @return code + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ErrorCode getCode() { + return code; + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCode(ErrorCode code) { + this.code = code; + } + + public ValidationErrorMessageResponse message(String message) { + this.message = message; + return this; + } + + /** + * Get message + * @return message + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getMessage() { + return message; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMessage(String message) { + this.message = message; + } + + /** + * Return true if this ValidationErrorMessageResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ValidationErrorMessageResponse validationErrorMessageResponse = (ValidationErrorMessageResponse) o; + return Objects.equals(this.code, validationErrorMessageResponse.code) + && Objects.equals(this.message, validationErrorMessageResponse.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, message); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ValidationErrorMessageResponse {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `code` to the URL query string + if (getCode() != null) { + joiner.add(String.format( + "%scode%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getCode()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + // add `message` to the URL query string + if (getMessage() != null) { + joiner.add(String.format( + "%smessage%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getMessage()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java new file mode 100644 index 0000000..4cd7453 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java @@ -0,0 +1,157 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * WriteAssertionsRequest + */ +@JsonPropertyOrder({WriteAssertionsRequest.JSON_PROPERTY_ASSERTIONS}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class WriteAssertionsRequest { + public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; + private List assertions = new ArrayList<>(); + + public WriteAssertionsRequest() {} + + public WriteAssertionsRequest assertions(List assertions) { + this.assertions = assertions; + return this; + } + + public WriteAssertionsRequest addAssertionsItem(Assertion assertionsItem) { + if (this.assertions == null) { + this.assertions = new ArrayList<>(); + } + this.assertions.add(assertionsItem); + return this; + } + + /** + * Get assertions + * @return assertions + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_ASSERTIONS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getAssertions() { + return assertions; + } + + @JsonProperty(JSON_PROPERTY_ASSERTIONS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAssertions(List assertions) { + this.assertions = assertions; + } + + /** + * Return true if this WriteAssertions_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WriteAssertionsRequest writeAssertionsRequest = (WriteAssertionsRequest) o; + return Objects.equals(this.assertions, writeAssertionsRequest.assertions); + } + + @Override + public int hashCode() { + return Objects.hash(assertions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class WriteAssertionsRequest {\n"); + sb.append(" assertions: ").append(toIndentedString(assertions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `assertions` to the URL query string + if (getAssertions() != null) { + for (int i = 0; i < getAssertions().size(); i++) { + if (getAssertions().get(i) != null) { + joiner.add(getAssertions() + .get(i) + .toUrlQueryString(String.format( + "%sassertions%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java new file mode 100644 index 0000000..26c0993 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java @@ -0,0 +1,201 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * WriteAuthorizationModelRequest + */ +@JsonPropertyOrder({ + WriteAuthorizationModelRequest.JSON_PROPERTY_TYPE_DEFINITIONS, + WriteAuthorizationModelRequest.JSON_PROPERTY_SCHEMA_VERSION +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class WriteAuthorizationModelRequest { + public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; + private List typeDefinitions = new ArrayList<>(); + + public static final String JSON_PROPERTY_SCHEMA_VERSION = "schema_version"; + private String schemaVersion; + + public WriteAuthorizationModelRequest() {} + + public WriteAuthorizationModelRequest typeDefinitions(List typeDefinitions) { + this.typeDefinitions = typeDefinitions; + return this; + } + + public WriteAuthorizationModelRequest addTypeDefinitionsItem(TypeDefinition typeDefinitionsItem) { + if (this.typeDefinitions == null) { + this.typeDefinitions = new ArrayList<>(); + } + this.typeDefinitions.add(typeDefinitionsItem); + return this; + } + + /** + * Get typeDefinitions + * @return typeDefinitions + **/ + @javax.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE_DEFINITIONS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getTypeDefinitions() { + return typeDefinitions; + } + + @JsonProperty(JSON_PROPERTY_TYPE_DEFINITIONS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTypeDefinitions(List typeDefinitions) { + this.typeDefinitions = typeDefinitions; + } + + public WriteAuthorizationModelRequest schemaVersion(String schemaVersion) { + this.schemaVersion = schemaVersion; + return this; + } + + /** + * Get schemaVersion + * @return schemaVersion + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SCHEMA_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getSchemaVersion() { + return schemaVersion; + } + + @JsonProperty(JSON_PROPERTY_SCHEMA_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSchemaVersion(String schemaVersion) { + this.schemaVersion = schemaVersion; + } + + /** + * Return true if this WriteAuthorizationModel_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WriteAuthorizationModelRequest writeAuthorizationModelRequest = (WriteAuthorizationModelRequest) o; + return Objects.equals(this.typeDefinitions, writeAuthorizationModelRequest.typeDefinitions) + && Objects.equals(this.schemaVersion, writeAuthorizationModelRequest.schemaVersion); + } + + @Override + public int hashCode() { + return Objects.hash(typeDefinitions, schemaVersion); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class WriteAuthorizationModelRequest {\n"); + sb.append(" typeDefinitions: ") + .append(toIndentedString(typeDefinitions)) + .append("\n"); + sb.append(" schemaVersion: ").append(toIndentedString(schemaVersion)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type_definitions` to the URL query string + if (getTypeDefinitions() != null) { + for (int i = 0; i < getTypeDefinitions().size(); i++) { + if (getTypeDefinitions().get(i) != null) { + joiner.add(getTypeDefinitions() + .get(i) + .toUrlQueryString(String.format( + "%stype_definitions%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `schema_version` to the URL query string + if (getSchemaVersion() != null) { + joiner.add(String.format( + "%sschema_version%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getSchemaVersion()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java new file mode 100644 index 0000000..7a98b5d --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java @@ -0,0 +1,144 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * WriteAuthorizationModelResponse + */ +@JsonPropertyOrder({WriteAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class WriteAuthorizationModelResponse { + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public WriteAuthorizationModelResponse() {} + + public WriteAuthorizationModelResponse authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + /** + * Return true if this WriteAuthorizationModelResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WriteAuthorizationModelResponse writeAuthorizationModelResponse = (WriteAuthorizationModelResponse) o; + return Objects.equals(this.authorizationModelId, writeAuthorizationModelResponse.authorizationModelId); + } + + @Override + public int hashCode() { + return Objects.hash(authorizationModelId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class WriteAuthorizationModelResponse {\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java new file mode 100644 index 0000000..8e0c60c --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java @@ -0,0 +1,212 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * WriteRequest + */ +@JsonPropertyOrder({ + WriteRequest.JSON_PROPERTY_WRITES, + WriteRequest.JSON_PROPERTY_DELETES, + WriteRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID +}) +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") +public class WriteRequest { + public static final String JSON_PROPERTY_WRITES = "writes"; + private TupleKeys writes; + + public static final String JSON_PROPERTY_DELETES = "deletes"; + private TupleKeys deletes; + + public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; + private String authorizationModelId; + + public WriteRequest() {} + + public WriteRequest writes(TupleKeys writes) { + this.writes = writes; + return this; + } + + /** + * Get writes + * @return writes + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_WRITES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleKeys getWrites() { + return writes; + } + + @JsonProperty(JSON_PROPERTY_WRITES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setWrites(TupleKeys writes) { + this.writes = writes; + } + + public WriteRequest deletes(TupleKeys deletes) { + this.deletes = deletes; + return this; + } + + /** + * Get deletes + * @return deletes + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DELETES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TupleKeys getDeletes() { + return deletes; + } + + @JsonProperty(JSON_PROPERTY_DELETES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeletes(TupleKeys deletes) { + this.deletes = deletes; + } + + public WriteRequest authorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + return this; + } + + /** + * Get authorizationModelId + * @return authorizationModelId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAuthorizationModelId() { + return authorizationModelId; + } + + @JsonProperty(JSON_PROPERTY_AUTHORIZATION_MODEL_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAuthorizationModelId(String authorizationModelId) { + this.authorizationModelId = authorizationModelId; + } + + /** + * Return true if this Write_request object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WriteRequest writeRequest = (WriteRequest) o; + return Objects.equals(this.writes, writeRequest.writes) + && Objects.equals(this.deletes, writeRequest.deletes) + && Objects.equals(this.authorizationModelId, writeRequest.authorizationModelId); + } + + @Override + public int hashCode() { + return Objects.hash(writes, deletes, authorizationModelId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class WriteRequest {\n"); + sb.append(" writes: ").append(toIndentedString(writes)).append("\n"); + sb.append(" deletes: ").append(toIndentedString(deletes)).append("\n"); + sb.append(" authorizationModelId: ") + .append(toIndentedString(authorizationModelId)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `writes` to the URL query string + if (getWrites() != null) { + joiner.add(getWrites().toUrlQueryString(prefix + "writes" + suffix)); + } + + // add `deletes` to the URL query string + if (getDeletes() != null) { + joiner.add(getDeletes().toUrlQueryString(prefix + "deletes" + suffix)); + } + + // add `authorization_model_id` to the URL query string + if (getAuthorizationModelId() != null) { + joiner.add(String.format( + "%sauthorization_model_id%s=%s", + prefix, + suffix, + URLEncoder.encode(String.valueOf(getAuthorizationModelId()), StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/dev/openfga/sdk/errors/FgaInvalidParameterException.java b/src/main/java/dev/openfga/sdk/errors/FgaInvalidParameterException.java new file mode 100644 index 0000000..49ad99d --- /dev/null +++ b/src/main/java/dev/openfga/sdk/errors/FgaInvalidParameterException.java @@ -0,0 +1,15 @@ +package dev.openfga.sdk.errors; + +public class FgaInvalidParameterException extends Exception { + public FgaInvalidParameterException(String paramName, String functionName) { + super(message(paramName, functionName)); + } + + public FgaInvalidParameterException(String paramName, String functionName, Throwable cause) { + super(message(paramName, functionName), cause); + } + + private static String message(String paramName, String functionName) { + return String.format("Required parameter %s was invalid when calling %s.", paramName, functionName); + } +} diff --git a/src/main/java/dev/openfga/util/StringUtil.java b/src/main/java/dev/openfga/util/StringUtil.java new file mode 100644 index 0000000..4528525 --- /dev/null +++ b/src/main/java/dev/openfga/util/StringUtil.java @@ -0,0 +1,34 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.util; + +import java.util.function.Predicate; +import java.util.regex.Pattern; + +public class StringUtil { + private StringUtil() {} // Instantiation prevented for utility class. + + private static final Predicate NULL_OR_WS = + Pattern.compile("^\\s*$").asMatchPredicate(); + + /** + * Returns true when the String is null, empty or contains only whitespace + * characters. + * + * @param str The String being tested. + * @return true iff str is null, empty or contains only whitespace. + */ + public static boolean isNullOrWhitespace(String str) { + return str == null || NULL_OR_WS.test(str); + } +} diff --git a/src/test-integration/java/dev/openfga/sdk/api/OpenFgaApiIntegrationTest.java b/src/test-integration/java/dev/openfga/sdk/api/OpenFgaApiIntegrationTest.java new file mode 100644 index 0000000..82f22d0 --- /dev/null +++ b/src/test-integration/java/dev/openfga/sdk/api/OpenFgaApiIntegrationTest.java @@ -0,0 +1,331 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api; + +import static org.junit.jupiter.api.Assertions.*; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import dev.openfga.sdk.api.client.*; +import dev.openfga.sdk.api.model.*; +import java.net.http.HttpClient; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class OpenFgaApiIntegrationTest { + private static final ObjectMapper mapper = new ObjectMapper().findAndRegisterModules(); + private static final String DEFAULT_AUTH_MODEL = + "{\"schema_version\":\"1.1\",\"type_definitions\":[{\"type\":\"user\"},{\"type\":\"document\",\"relations\":{\"reader\":{\"this\":{}},\"writer\":{\"this\":{}},\"owner\":{\"this\":{}}},\"metadata\":{\"relations\":{\"reader\":{\"directly_related_user_types\":[{\"type\":\"user\"}]},\"writer\":{\"directly_related_user_types\":[{\"type\":\"user\"}]},\"owner\":{\"directly_related_user_types\":[{\"type\":\"user\"}]}}}}]}"; + private static final String DEFAULT_USER = "user:81684243-9356-4421-8fbf-a4f8d36aa31b"; + private static final String DEFAULT_DOC = "document:2021-budget"; + public static final TupleKey DEFAULT_TUPLE_KEY = + new TupleKey().user(DEFAULT_USER).relation("reader")._object(DEFAULT_DOC); + public static final List DEFAULT_TUPLE_KEYS = List.of(DEFAULT_TUPLE_KEY); + + private OpenFgaApi api; + + @BeforeEach + public void initializeApi() { + Configuration apiConfig = new Configuration("http://localhost:8080"); + ApiClient apiClient = new ApiClient(HttpClient.newBuilder(), mapper); + api = new OpenFgaApi(apiClient, apiConfig); + } + + @Test + public void createStore() throws Exception { + // Given + String storeName = thisTestName(); + CreateStoreRequest createStoreRequest = new CreateStoreRequest().name(storeName); + + // When + CreateStoreResponse response = api.createStore(createStoreRequest).get(); + + // Then + assertEquals("OpenFgaApiIntegrationTest.createStore", response.getName()); + } + + @Test + public void deleteStore() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + + // When + api.deleteStore(storeId).get(); + + // Then + ListStoresResponse response = api.listStores(100, null).get(); + boolean itWasDeleted = response.getStores().stream().map(Store::getId).noneMatch(storeId::equals); + assertTrue(itWasDeleted, String.format("No stores should remain with the id %s.", storeId)); + } + + @Test + public void getStore() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + + // When + GetStoreResponse response = api.getStore(storeId).get(); + + // Then + assertEquals(storeName, response.getName()); + } + + @Test + public void listStores() throws Exception { + // Given + String testName = thisTestName(); + String store1 = testName + "-store1"; + String store2 = testName + "-store2"; + String store3 = testName + "-store3"; + List stores = List.of(store1, store2, store3); + for (String store : stores) { + createStore(store); + } + + // When + ListStoresResponse response = api.listStores(100, null).get(); + + // Then + for (String store : stores) { + boolean exists = response.getStores().stream().map(Store::getName).anyMatch(store::equals); + assertTrue(exists, String.format("Store %s should be in listStores response", store)); + } + } + + @Test + public void readAuthModel() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String authModelId = writeAuthModel(storeId); + + // When + ReadAuthorizationModelResponse response = + api.readAuthorizationModel(storeId, authModelId).get(); + + // Then + AuthorizationModel authModel = response.getAuthorizationModel(); + assertEquals(authModelId, authModel.getId()); + String typeDefsJson = mapper.writeValueAsString(authModel.getTypeDefinitions()); + assertEquals( + "[{\"type\":\"user\",\"relations\":{},\"metadata\":null},{\"type\":\"document\",\"relations\":{\"owner\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null},\"reader\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null},\"writer\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null}},\"metadata\":{\"relations\":{\"owner\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]},\"reader\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]},\"writer\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]}}}}]", + typeDefsJson); + } + + @Test + public void readAuthModels() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String authModelId = writeAuthModel(storeId); + + // When + ReadAuthorizationModelsResponse response = + api.readAuthorizationModels(storeId, 100, null).get(); + + // Then + response.getAuthorizationModels().stream() + .filter(authModel -> authModel.getId().equals(authModelId)) + .forEach(authModel -> { + assertEquals(authModelId, authModel.getId()); + try { + String typeDefsJson = mapper.writeValueAsString(authModel.getTypeDefinitions()); + + assertEquals( + "[{\"type\":\"user\",\"relations\":{},\"metadata\":null},{\"type\":\"document\",\"relations\":{\"owner\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null},\"reader\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null},\"writer\":{\"this\":{},\"computedUserset\":null,\"tupleToUserset\":null,\"union\":null,\"intersection\":null,\"difference\":null}},\"metadata\":{\"relations\":{\"owner\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]},\"reader\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]},\"writer\":{\"directly_related_user_types\":[{\"type\":\"user\",\"relation\":null,\"wildcard\":null}]}}}}]", + typeDefsJson); + } catch (JsonProcessingException ex) { + assertNull(ex); + } + }); + } + + @Test + public void writeAuthModel() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + WriteAuthorizationModelRequest request = + mapper.readValue(DEFAULT_AUTH_MODEL, WriteAuthorizationModelRequest.class); + + // When + WriteAuthorizationModelResponse response = + api.writeAuthorizationModel(storeId, request).get(); + + // Then + assertNotNull(response); + assertNotNull(response.getAuthorizationModelId()); + assertNotEquals("", response.getAuthorizationModelId()); + } + + @Test + public void write_and_read() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String _authModelId = writeAuthModel(storeId); + WriteRequest writeRequest = new WriteRequest().writes(new TupleKeys().tupleKeys(List.of(DEFAULT_TUPLE_KEY))); + ReadRequest readRequest = + new ReadRequest().tupleKey(new TupleKey().user(DEFAULT_USER)._object(DEFAULT_DOC)); + + // When + api.write(storeId, writeRequest).get(); + ReadResponse response = api.read(storeId, readRequest).get(); + + // Then + TupleKey key = response.getTuples().get(0).getKey(); + assertEquals(DEFAULT_USER, key.getUser()); + assertEquals("reader", key.getRelation()); + assertEquals(DEFAULT_DOC, key.getObject()); + } + + @Test + public void write_and_check() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String _authModelId = writeAuthModel(storeId); + WriteRequest writeRequest = new WriteRequest().writes(new TupleKeys().tupleKeys(DEFAULT_TUPLE_KEYS)); + CheckRequest checkRequest = new CheckRequest() + .tupleKey(new TupleKey().user(DEFAULT_USER).relation("reader")._object(DEFAULT_DOC)); + + // When + api.write(storeId, writeRequest).get(); + CheckResponse response = api.check(storeId, checkRequest).get(); + + // Then + assertTrue(response.getAllowed()); + } + + @Test + public void write_and_expand() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String _authModelId = writeAuthModel(storeId); + WriteRequest writeRequest = new WriteRequest().writes(new TupleKeys().tupleKeys(DEFAULT_TUPLE_KEYS)); + ExpandRequest expandRequest = + new ExpandRequest().tupleKey(new TupleKey()._object(DEFAULT_DOC).relation("reader")); + + // When + api.write(storeId, writeRequest).get(); + ExpandResponse response = api.expand(storeId, expandRequest).get(); + + // Then + assertNotNull(response.getTree()); + String responseJson = mapper.writeValueAsString(response); + assertEquals( + "{\"tree\":{\"root\":{\"name\":\"document:2021-budget#reader\",\"leaf\":{\"users\":{\"users\":[\"user:81684243-9356-4421-8fbf-a4f8d36aa31b\"]},\"computed\":null,\"tupleToUserset\":null},\"difference\":null,\"union\":null,\"intersection\":null}}}", + responseJson); + } + + @Test + public void write_and_listObjects() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String _authModelId = writeAuthModel(storeId); + WriteRequest writeRequest = new WriteRequest().writes(new TupleKeys().tupleKeys(DEFAULT_TUPLE_KEYS)); + ListObjectsRequest listObjectsRequest = + new ListObjectsRequest().user(DEFAULT_USER).relation("reader").type("document"); + + // When + api.write(storeId, writeRequest).get(); + ListObjectsResponse response = + api.listObjects(storeId, listObjectsRequest).get(); + + // Then + assertEquals(1, response.getObjects().size()); + assertEquals(DEFAULT_DOC, response.getObjects().get(0)); + } + + @Test + public void write_and_readChanges() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String _authModelId = writeAuthModel(storeId); + WriteRequest writeRequest = new WriteRequest().writes(new TupleKeys().tupleKeys(DEFAULT_TUPLE_KEYS)); + + // When + api.write(storeId, writeRequest).get(); + ReadChangesResponse response = + api.readChanges(storeId, null, null, null).get(); + + // Then + assertEquals(1, response.getChanges().size()); + String firstTupleKeyJson = + mapper.writeValueAsString(response.getChanges().get(0).getTupleKey()); + assertEquals( + "{\"object\":\"document:2021-budget\",\"relation\":\"reader\",\"user\":\"user:81684243-9356-4421-8fbf-a4f8d36aa31b\"}", + firstTupleKeyJson); + } + + @Test + public void write_readAssertions() throws Exception { + // Given + String storeName = thisTestName(); + String storeId = createStore(storeName); + String authModelId = writeAuthModel(storeId); + WriteAssertionsRequest writeRequest = new WriteAssertionsRequest() + .assertions(List.of(new Assertion().tupleKey(DEFAULT_TUPLE_KEY).expectation(true))); + + // When + api.writeAssertions(storeId, authModelId, writeRequest); + ReadAssertionsResponse response = + api.readAssertions(storeId, authModelId).get(); + + // Then + String responseJson = mapper.writeValueAsString(response.getAssertions()); + assertEquals( + "[{\"tuple_key\":{\"object\":\"document:2021-budget\",\"relation\":\"reader\",\"user\":\"user:81684243-9356-4421-8fbf-a4f8d36aa31b\"},\"expectation\":true}]", + responseJson); + } + + /** + * Create a store for a given name. If tests fail here, troubleshoot with the no-arguments + * test method createStore(). + * @return The created Store ID + */ + private String createStore(String storeName) throws Exception { + CreateStoreResponse response = + api.createStore(new CreateStoreRequest().name(storeName)).get(); + return response.getId(); + } + + /** + * Add a default authorization model to a store. If tests fail here, troubleshoot with the + * no-arguments @Test writeAuthModel() method. + * @return The created Authorization Model ID + */ + private String writeAuthModel(String storeId) throws Exception { + WriteAuthorizationModelRequest request = + mapper.readValue(DEFAULT_AUTH_MODEL, WriteAuthorizationModelRequest.class); + WriteAuthorizationModelResponse response = + api.writeAuthorizationModel(storeId, request).get(); + return response.getAuthorizationModelId(); + } + + /** Get the name of the test that invokes this function. Returned in the form: "$class.$fn" */ + private String thisTestName() { + // Tracing the stack gives an array of: + // 0: getStackTrace(), 1: getThisFunctionName(), 2: , 3: ... + StackTraceElement callingFn = Thread.currentThread().getStackTrace()[2]; + String callingClass = callingFn.getClassName().replace("dev.openfga.sdk.api.", ""); + + return String.format("%s.%s", callingClass, callingFn.getMethodName()); + } +} diff --git a/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java b/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java new file mode 100644 index 0000000..64826fe --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java @@ -0,0 +1,1762 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api; + +import static org.hamcrest.Matchers.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.pgssoft.httpclient.HttpClientMock; +import dev.openfga.sdk.api.client.*; +import dev.openfga.sdk.api.model.*; +import dev.openfga.sdk.errors.*; +import java.time.Duration; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** + * API tests for OpenFgaApi + */ +public class OpenFgaApiTest { + private static final String DEFAULT_STORE_ID = "01YCP46JKYM8FJCQ37NMBYHE5X"; + private static final String DEFAULT_STORE_NAME = "test_store"; + private static final String DEFAULT_AUTH_MODEL_ID = "01G5JAVJ41T49E9TT3SKVS7X1J"; + private static final String DEFAULT_USER = "user:81684243-9356-4421-8fbf-a4f8d36aa31b"; + private static final String DEFAULT_RELATION = "reader"; + private static final String DEFAULT_TYPE = "document"; + private static final String DEFAULT_OBJECT = "document:budget"; + private static final String DEFAULT_SCHEMA_VERSION = "1.1"; + public static final String EMPTY_RESPONSE_BODY = "{}"; + + private final ObjectMapper mapper = new ObjectMapper(); + private OpenFgaApi fga; + private Configuration mockConfiguration; + private ApiClient mockApiClient; + private HttpClientMock mockHttpClient; + + @BeforeEach + public void beforeEachTest() { + mockHttpClient = new HttpClientMock(); + + mockConfiguration = mock(Configuration.class); + when(mockConfiguration.getApiUrl()).thenReturn("https://localhost"); + when(mockConfiguration.getReadTimeout()).thenReturn(Duration.ofMillis(250)); + + mockApiClient = mock(ApiClient.class); + when(mockApiClient.getObjectMapper()).thenReturn(mapper); + when(mockApiClient.getHttpClient()).thenReturn(mockHttpClient); + + fga = new OpenFgaApi(mockApiClient, mockConfiguration); + } + + /** + * List all stores. + */ + @Test + public void listStoresTest() throws Exception { + // Given + String responseBody = + String.format("{\"stores\":[{\"id\":\"%s\",\"name\":\"%s\"}]}", DEFAULT_STORE_ID, DEFAULT_STORE_NAME); + mockHttpClient.onGet("https://localhost/stores").doReturn(200, responseBody); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ListStoresResponse response = + fga.listStores(pageSize, continuationToken).get(); + + // Then + mockHttpClient.verify().get("https://localhost/stores").called(1); + assertNotNull(response.getStores()); + assertEquals(1, response.getStores().size()); + assertEquals(DEFAULT_STORE_ID, response.getStores().get(0).getId()); + assertEquals(DEFAULT_STORE_NAME, response.getStores().get(0).getName()); + } + + @Test + public void listStores_400() { + // Given + mockHttpClient + .onGet("https://localhost/stores") + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listStores(pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void listStores_404() throws Exception { + // Given + mockHttpClient + .onGet("https://localhost/stores") + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listStores(pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void listStores_500() throws Exception { + // Given + mockHttpClient + .onGet("https://localhost/stores") + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listStores(pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Create a store. + */ + @Test + public void createStoreTest() throws Exception { + // Given + String expectedBody = String.format("{\"name\":\"%s\"}", DEFAULT_STORE_NAME); + String requestBody = String.format("{\"id\":\"%s\",\"name\":\"%s\"}", DEFAULT_STORE_ID, DEFAULT_STORE_NAME); + mockHttpClient + .onPost("https://localhost/stores") + .withBody(is(expectedBody)) + .doReturn(201, requestBody); + CreateStoreRequest request = new CreateStoreRequest().name(DEFAULT_STORE_NAME); + + // When + CreateStoreResponse response = fga.createStore(request).get(); + + // Then + mockHttpClient + .verify() + .post("https://localhost/stores") + .withBody(is(expectedBody)) + .called(1); + assertEquals(DEFAULT_STORE_ID, response.getId()); + assertEquals(DEFAULT_STORE_NAME, response.getName()); + } + + @Test + public void createStore_bodyRequired() { + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.createStore(null).get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling createStore", exception.getMessage()); + } + + @Test + public void createStore_400() throws Exception { + // Given + mockHttpClient + .onPost("https://localhost/stores") + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.createStore(new CreateStoreRequest()) + .get()); + + // Then + mockHttpClient.verify().post("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void createStore_404() throws Exception { + // Given + mockHttpClient + .onPost("https://localhost/stores") + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.createStore(new CreateStoreRequest()) + .get()); + + // Then + mockHttpClient.verify().post("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void createStore_500() throws Exception { + // Given + mockHttpClient + .onPost("https://localhost/stores") + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.createStore(new CreateStoreRequest()) + .get()); + + // Then + mockHttpClient.verify().post("https://localhost/stores").called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Get a store. + */ + @Test + public void getStoreTest() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + String responseBody = String.format("{\"id\":\"%s\",\"name\":\"%s\"}", DEFAULT_STORE_ID, DEFAULT_STORE_NAME); + mockHttpClient.onGet(getUrl).doReturn(200, responseBody); + + // When + GetStoreResponse response = fga.getStore(DEFAULT_STORE_ID).get(); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + assertEquals(DEFAULT_STORE_ID, response.getId()); + assertEquals(DEFAULT_STORE_NAME, response.getName()); + } + + @Test + public void getStore_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.getStore(null).get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling getStore", exception.getMessage()); + } + + @Test + public void getStore_400() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onGet(getUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.getStore(DEFAULT_STORE_ID).get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void getStore_404() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onGet(getUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.getStore(DEFAULT_STORE_ID).get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void getStore_500() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onGet(getUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.getStore(DEFAULT_STORE_ID).get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Delete a store. + */ + @Test + public void deleteStoreTest() throws Exception { + // Given + String deleteUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient.onDelete(deleteUrl).doReturn(204, EMPTY_RESPONSE_BODY); + + // When + fga.deleteStore(DEFAULT_STORE_ID); + + // Then + mockHttpClient.verify().delete(deleteUrl).called(1); + } + + @Test + public void deleteStore_storeIdRequired() { + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.deleteStore(null).get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling deleteStore", exception.getMessage()); + } + + @Test + public void deleteStore_400() throws Exception { + // Given + String deleteUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onDelete(deleteUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.deleteStore(DEFAULT_STORE_ID) + .get()); + + // Then + mockHttpClient.verify().delete(deleteUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void deleteStore_404() throws Exception { + // Given + String deleteUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onDelete(deleteUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.deleteStore(DEFAULT_STORE_ID) + .get()); + + // Then + mockHttpClient.verify().delete(deleteUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void deleteStore_500() throws Exception { + // Given + String deleteUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X"; + mockHttpClient + .onDelete(deleteUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.deleteStore(DEFAULT_STORE_ID) + .get()); + + // Then + mockHttpClient.verify().delete(deleteUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Return all the authorization models for a particular store. + */ + @Test + public void readAuthorizationModelsTest() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + String responseBody = String.format( + "{\"authorization_models\":[{\"id\":\"%s\",\"schema_version\":\"%s\"}]}", + DEFAULT_AUTH_MODEL_ID, DEFAULT_SCHEMA_VERSION); + mockHttpClient.onGet(getUrl).doReturn(200, responseBody); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ReadAuthorizationModelsResponse response = fga.readAuthorizationModels( + DEFAULT_STORE_ID, pageSize, continuationToken) + .get(); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + assertNotNull(response.getAuthorizationModels()); + assertEquals(1, response.getAuthorizationModels().size()); + AuthorizationModel authModel = response.getAuthorizationModels().get(0); + assertEquals(DEFAULT_AUTH_MODEL_ID, authModel.getId()); + assertEquals(DEFAULT_SCHEMA_VERSION, authModel.getSchemaVersion()); + } + + @Test + public void readAuthorizationModels_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAuthorizationModels(null, null, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'storeId' when calling readAuthorizationModels", + exception.getMessage()); + } + + @Test + public void readAuthorizationModels_400() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onGet(getUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.readAuthorizationModels( + DEFAULT_STORE_ID, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void readAuthorizationModels_404() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onGet(getUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.readAuthorizationModels( + DEFAULT_STORE_ID, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void readAuthorizationModels_500() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onGet(getUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.readAuthorizationModels( + DEFAULT_STORE_ID, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Create a new authorization model. + */ + @Test + public void writeAuthorizationModelTest() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + String expectedBody = + "{\"type_definitions\":[{\"type\":\"document\",\"relations\":{},\"metadata\":null}],\"schema_version\":\"1.1\"}"; + String responseBody = String.format("{\"authorization_model_id\":\"%s\"}", DEFAULT_AUTH_MODEL_ID); + mockHttpClient.onPost(postUrl).withBody(is(expectedBody)).doReturn(201, responseBody); + WriteAuthorizationModelRequest request = new WriteAuthorizationModelRequest() + .schemaVersion(DEFAULT_SCHEMA_VERSION) + .typeDefinitions(List.of(new TypeDefinition().type(DEFAULT_TYPE))); + + // When + WriteAuthorizationModelResponse response = + fga.writeAuthorizationModel(DEFAULT_STORE_ID, request).get(); + + // Then + mockHttpClient.verify().post(postUrl).withBody(is(expectedBody)).called(1); + assertEquals(DEFAULT_AUTH_MODEL_ID, response.getAuthorizationModelId()); + } + + @Test + public void writeAuthorizationModel_storeIdRequired() { + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.writeAuthorizationModel(null, new WriteAuthorizationModelRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'storeId' when calling writeAuthorizationModel", + exception.getMessage()); + } + + @Test + public void writeAuthorizationModel_bodyRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.writeAuthorizationModel(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'body' when calling writeAuthorizationModel", exception.getMessage()); + } + + @Test + public void writeAuthorizationModel_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAuthorizationModel( + DEFAULT_STORE_ID, new WriteAuthorizationModelRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void writeAuthorizationModel_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAuthorizationModel( + DEFAULT_STORE_ID, new WriteAuthorizationModelRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void writeAuthorizationModel_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAuthorizationModel( + DEFAULT_STORE_ID, new WriteAuthorizationModelRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Return a particular version of an authorization model. + */ + @Test + public void readAuthorizationModelTest() throws Exception { + // Given + String getUrl = + "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models/01G5JAVJ41T49E9TT3SKVS7X1J"; + String getResponse = String.format( + "{\"authorization_model\":{\"id\":\"%s\",\"schema_version\":\"%s\"}}", + DEFAULT_AUTH_MODEL_ID, DEFAULT_SCHEMA_VERSION); + mockHttpClient.onGet(getUrl).doReturn(200, getResponse); + + // When + ReadAuthorizationModelResponse response = fga.readAuthorizationModel(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get(); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + assertNotNull(response.getAuthorizationModel()); + assertEquals(DEFAULT_AUTH_MODEL_ID, response.getAuthorizationModel().getId()); + assertEquals(DEFAULT_SCHEMA_VERSION, response.getAuthorizationModel().getSchemaVersion()); + } + + @Test + public void readAuthorizationModel_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAuthorizationModel(null, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'storeId' when calling readAuthorizationModel", exception.getMessage()); + } + + @Test + public void readAuthorizationModel_idRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAuthorizationModel(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'id' when calling readAuthorizationModel", exception.getMessage()); + } + + @Test + public void readAuthorizationModel_400() throws Exception { + // Given + String getUrl = + "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readAuthorizationModel(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void readAuthorizationModel_404() throws Exception { + // Given + String getUrl = + "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readAuthorizationModel(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void readAuthorizationModel_500() throws Exception { + // Given + String getUrl = + "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/authorization-models/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readAuthorizationModel(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Return a list of all the tuple changes. + */ + @Test + public void readChangesTest() throws Exception { + // Given + String getPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/changes"; + String responseBody = String.format( + "{\"changes\":[{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"}}]}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER); + mockHttpClient.onGet(getPath).doReturn(200, responseBody); + String type = null; // Input is optional + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ReadChangesResponse response = fga.readChanges(DEFAULT_STORE_ID, type, pageSize, continuationToken) + .get(); + + // Then + mockHttpClient.verify().get(getPath).called(1); + assertNotNull(response.getChanges()); + assertEquals(1, response.getChanges().size()); + TupleChange change = response.getChanges().get(0); + assertNotNull(change.getTupleKey()); + assertEquals(DEFAULT_OBJECT, change.getTupleKey().getObject()); + assertEquals(DEFAULT_RELATION, change.getTupleKey().getRelation()); + assertEquals(DEFAULT_USER, change.getTupleKey().getUser()); + } + + @Test + public void readChanges_storeIdRequired() throws Exception { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readChanges(null, null, null, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling readChanges", exception.getMessage()); + } + + @Test + public void readChanges_400() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/changes"; + mockHttpClient + .onGet(getUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + String type = null; // Input is optional + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readChanges(DEFAULT_STORE_ID, type, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void readChanges_404() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/changes"; + mockHttpClient + .onGet(getUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + String type = null; // Input is optional + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readChanges(DEFAULT_STORE_ID, type, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void readChanges_500() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/changes"; + mockHttpClient + .onGet(getUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + String type = null; // Input is optional + Integer pageSize = null; // Input is optional + String continuationToken = null; // Input is optional + + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.readChanges(DEFAULT_STORE_ID, type, pageSize, continuationToken) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Get tuples from the store that matches a query, without following userset rewrite rules. + */ + @Test + public void readTest() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/read"; + String expectedBody = String.format( + "{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"},\"page_size\":null,\"continuation_token\":null}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER); + String responseBody = String.format( + "{\"tuples\":[{\"key\":{\"user\":\"%s\",\"relation\":\"%s\",\"object\":\"%s\"}}]}", + DEFAULT_USER, DEFAULT_RELATION, DEFAULT_OBJECT); + mockHttpClient.onPost(postUrl).withBody(is(expectedBody)).doReturn(200, responseBody); + ReadRequest request = new ReadRequest() + .tupleKey(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)); + + // When + ReadResponse response = fga.read(DEFAULT_STORE_ID, request).get(); + + // Then + mockHttpClient.verify().post(postUrl).withBody(is(expectedBody)).called(1); + assertNotNull(response.getTuples()); + assertEquals(1, response.getTuples().size()); + TupleKey key = response.getTuples().get(0).getKey(); + assertNotNull(key); + assertEquals(DEFAULT_USER, key.getUser()); + assertEquals(DEFAULT_RELATION, key.getRelation()); + assertEquals(DEFAULT_OBJECT, key.getObject()); + } + + @Test + public void read_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.read(null, new ReadRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling read", exception.getMessage()); + } + + @Test + public void read_bodyRequired() { + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.read(DEFAULT_STORE_ID, null).get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling read", exception.getMessage()); + } + + @Test + public void read_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/read"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.read(DEFAULT_STORE_ID, new ReadRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void read_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/read"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.read(DEFAULT_STORE_ID, new ReadRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void read_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/read"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.read(DEFAULT_STORE_ID, new ReadRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Add or delete tuples from the store. + */ + @Test + public void writeTest_writes() throws Exception { + // Given + String postPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/write"; + String expectedBody = String.format( + "{\"writes\":{\"tuple_keys\":[{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"}]},\"deletes\":null,\"authorization_model_id\":\"%s\"}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER, DEFAULT_AUTH_MODEL_ID); + mockHttpClient.onPost(postPath).withBody(is(expectedBody)).doReturn(200, EMPTY_RESPONSE_BODY); + WriteRequest request = new WriteRequest() + .authorizationModelId(DEFAULT_AUTH_MODEL_ID) + .writes(new TupleKeys() + .tupleKeys(List.of(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)))); + + // When + fga.write(DEFAULT_STORE_ID, request); + + // Then + mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1); + } + + /** + * Add or delete tuples from the store. + */ + @Test + public void writeTest_deletes() throws Exception { + // Given + String postPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/write"; + String expectedBody = String.format( + "{\"writes\":null,\"deletes\":{\"tuple_keys\":[{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"}]},\"authorization_model_id\":\"%s\"}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER, DEFAULT_AUTH_MODEL_ID); + mockHttpClient.onPost(postPath).withBody(is(expectedBody)).doReturn(200, EMPTY_RESPONSE_BODY); + WriteRequest request = new WriteRequest() + .authorizationModelId(DEFAULT_AUTH_MODEL_ID) + .deletes(new TupleKeys() + .tupleKeys(List.of(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)))); + + // When + fga.write(DEFAULT_STORE_ID, request); + + // Then + mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1); + } + + @Test + public void write_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.write(null, new WriteRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling write", exception.getMessage()); + } + + @Test + public void write_bodyRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.write(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling write", exception.getMessage()); + } + + @Test + public void write_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/write"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.write(DEFAULT_STORE_ID, new WriteRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void write_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/write"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.write(DEFAULT_STORE_ID, new WriteRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void write_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/write"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.write(DEFAULT_STORE_ID, new WriteRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Check whether a user is authorized to access an object. + */ + @Test + public void check() throws Exception { + // Given + String postPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/check"; + String expectedBody = String.format( + "{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"},\"contextual_tuples\":{\"tuple_keys\":[]},\"authorization_model_id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\",\"trace\":null}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER); + mockHttpClient.onPost(postPath).withBody(is(expectedBody)).doReturn(200, "{\"allowed\":true}"); + CheckRequest request = new CheckRequest() + .tupleKey(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)) + .contextualTuples(new ContextualTupleKeys()) + .authorizationModelId(DEFAULT_AUTH_MODEL_ID); + + // When + CheckResponse response = fga.check(DEFAULT_STORE_ID, request).get(); + + // Then + verify(mockConfiguration).getApiUrl(); + verify(mockConfiguration).getReadTimeout(); + mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1); + assertEquals(Boolean.TRUE, response.getAllowed()); + } + + @Test + public void check_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.check(null, new CheckRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling check", exception.getMessage()); + } + + @Test + public void check_bodyRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.check(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling check", exception.getMessage()); + } + + @Test + public void check_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/check"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.check(DEFAULT_STORE_ID, new CheckRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void check_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/check"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.check(DEFAULT_STORE_ID, new CheckRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void check_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/check"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.check(DEFAULT_STORE_ID, new CheckRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship. + */ + @Test + public void expandTest() throws Exception { + // Given + String postPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/expand"; + String expectedBody = String.format( + "{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"},\"authorization_model_id\":\"%s\"}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER, DEFAULT_AUTH_MODEL_ID); + String responseBody = String.format( + "{\"tree\":{\"root\":{\"union\":{\"nodes\":[{\"leaf\":{\"users\":{\"users\":[\"%s\"]}}}]}}}}", + DEFAULT_USER); + mockHttpClient.onPost(postPath).withBody(is(expectedBody)).doReturn(200, responseBody); + ExpandRequest request = new ExpandRequest() + .authorizationModelId(DEFAULT_AUTH_MODEL_ID) + .tupleKey(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)); + + // When + ExpandResponse response = fga.expand(DEFAULT_STORE_ID, request).get(); + + // Then + mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1); + assertNotNull(response.getTree()); + assertNotNull(response.getTree().getRoot()); + assertNotNull(response.getTree().getRoot().getUnion()); + assertNotNull(response.getTree().getRoot().getUnion().getNodes()); + assertEquals(1, response.getTree().getRoot().getUnion().getNodes().size()); + assertNotNull(response.getTree().getRoot().getUnion().getNodes().get(0)); + Node node = response.getTree().getRoot().getUnion().getNodes().get(0); + assertNotNull(node.getLeaf()); + assertNotNull(node.getLeaf().getUsers()); + assertNotNull(node.getLeaf().getUsers().getUsers()); + assertEquals(1, node.getLeaf().getUsers().getUsers().size()); + assertEquals(DEFAULT_USER, node.getLeaf().getUsers().getUsers().get(0)); + } + + @Test + public void expand_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.expand(null, new ExpandRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling expand", exception.getMessage()); + } + + @Test + public void expand_bodyRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.expand(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling expand", exception.getMessage()); + } + + @Test + public void expand_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/expand"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.expand(DEFAULT_STORE_ID, new ExpandRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void expand_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/expand"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.expand(DEFAULT_STORE_ID, new ExpandRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void expand_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/expand"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.expand(DEFAULT_STORE_ID, new ExpandRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * List all objects of the given type that the user has a relation with. + */ + @Test + public void listObjectsTest() throws Exception { + // Given + String postPath = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/list-objects"; + String expectedBody = String.format( + "{\"authorization_model_id\":\"%s\",\"type\":null,\"relation\":\"%s\",\"user\":\"%s\",\"contextual_tuples\":null}", + DEFAULT_AUTH_MODEL_ID, DEFAULT_RELATION, DEFAULT_USER); + mockHttpClient + .onPost(postPath) + .withBody(is(expectedBody)) + .doReturn(200, String.format("{\"objects\":[\"%s\"]}", DEFAULT_OBJECT)); + ListObjectsRequest request = new ListObjectsRequest() + .authorizationModelId(DEFAULT_AUTH_MODEL_ID) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER); + + // When + ListObjectsResponse response = + fga.listObjects(DEFAULT_STORE_ID, request).get(); + + // Then + mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1); + assertEquals(List.of(DEFAULT_OBJECT), response.getObjects()); + } + + @Test + public void listObjects_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listObjects(null, new ListObjectsRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling listObjects", exception.getMessage()); + } + + @Test + public void listObjects_bodyRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listObjects(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling listObjects", exception.getMessage()); + } + + @Test + public void listObjects_400() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/list-objects"; + mockHttpClient + .onPost(postUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listObjects(DEFAULT_STORE_ID, new ListObjectsRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void listObjects_404() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/list-objects"; + mockHttpClient + .onPost(postUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listObjects(DEFAULT_STORE_ID, new ListObjectsRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void listObjects_500() throws Exception { + // Given + String postUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/list-objects"; + mockHttpClient + .onPost(postUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.listObjects(DEFAULT_STORE_ID, new ListObjectsRequest()) + .get()); + + // Then + mockHttpClient.verify().post(postUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Read assertions for an authorization model ID. + */ + @Test + public void readAssertionsTest() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + String responseBody = String.format( + "{\"assertions\":[{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"},\"expectation\":true}]}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER); + mockHttpClient.onGet(getUrl).doReturn(200, responseBody); + + // When + ReadAssertionsResponse response = + fga.readAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID).get(); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + assertNotNull(response.getAssertions()); + assertEquals(1, response.getAssertions().size()); + Assertion assertion = response.getAssertions().get(0); + assertNotNull(assertion); + assertTrue(assertion.getExpectation()); + assertEquals(DEFAULT_OBJECT, assertion.getTupleKey().getObject()); + assertEquals(DEFAULT_RELATION, assertion.getTupleKey().getRelation()); + assertEquals(DEFAULT_USER, assertion.getTupleKey().getUser()); + } + + @Test + public void readAssertions_storeIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAssertions(null, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling readAssertions", exception.getMessage()); + } + + @Test + public void readAssertions_authModelIdRequired() { + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAssertions(DEFAULT_STORE_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'authorizationModelId' when calling readAssertions", + exception.getMessage()); + } + + @Test + public void readAssertions_400() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void readAssertions_404() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void readAssertions_500() throws Exception { + // Given + String getUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onGet(getUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = + assertThrows(ExecutionException.class, () -> fga.readAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID) + .get()); + + // Then + mockHttpClient.verify().get(getUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } + + /** + * Upsert assertions for an authorization model ID. + */ + @Test + public void writeAssertionsTest() throws Exception { + // Given + String putUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + String expectedBody = String.format( + "{\"assertions\":[{\"tuple_key\":{\"object\":\"%s\",\"relation\":\"%s\",\"user\":\"%s\"},\"expectation\":true}]}", + DEFAULT_OBJECT, DEFAULT_RELATION, DEFAULT_USER); + mockHttpClient.onPut(putUrl).withBody(is(expectedBody)).doReturn(200, EMPTY_RESPONSE_BODY); + WriteAssertionsRequest request = new WriteAssertionsRequest() + .assertions(List.of(new Assertion() + .tupleKey(new TupleKey() + ._object(DEFAULT_OBJECT) + .relation(DEFAULT_RELATION) + .user(DEFAULT_USER)) + .expectation(true))); + + // When + fga.writeAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID, request); + + // Then + mockHttpClient.verify().put(putUrl).withBody(is(expectedBody)).called(1); + } + + @Test + public void writeAssertions_storeIdRequired() { + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAssertions( + null, DEFAULT_AUTH_MODEL_ID, new WriteAssertionsRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'storeId' when calling writeAssertions", exception.getMessage()); + } + + @Test + public void writeAssertions_authModelIdRequired() { + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAssertions( + DEFAULT_STORE_ID, null, new WriteAssertionsRequest()) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals( + "Missing the required parameter 'authorizationModelId' when calling writeAssertions", + exception.getMessage()); + } + + @Test + public void writeAssertions_bodyRequired() { + // When + ExecutionException execException = assertThrows( + ExecutionException.class, () -> fga.writeAssertions(DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID, null) + .get()); + + // Then + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals("Missing the required parameter 'body' when calling writeAssertions", exception.getMessage()); + } + + @Test + public void writeAssertions_400() throws Exception { + // Given + String putUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onPut(putUrl) + .doReturn(400, "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAssertions( + DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID, new WriteAssertionsRequest()) + .get()); + + // Then + mockHttpClient.verify().put(putUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(400, exception.getCode()); + assertEquals( + "{\"code\":\"validation_error\",\"message\":\"Generic validation error\"}", + exception.getResponseBody()); + } + + @Test + public void writeAssertions_404() throws Exception { + // Given + String putUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onPut(putUrl) + .doReturn(404, "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAssertions( + DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID, new WriteAssertionsRequest()) + .get()); + + // Then + mockHttpClient.verify().put(putUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(404, exception.getCode()); + assertEquals( + "{\"code\":\"undefined_endpoint\",\"message\":\"Endpoint not enabled\"}", exception.getResponseBody()); + } + + @Test + public void writeAssertions_500() throws Exception { + // Given + String putUrl = "https://localhost/stores/01YCP46JKYM8FJCQ37NMBYHE5X/assertions/01G5JAVJ41T49E9TT3SKVS7X1J"; + mockHttpClient + .onPut(putUrl) + .doReturn(500, "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}"); + + // When + ExecutionException execException = assertThrows(ExecutionException.class, () -> fga.writeAssertions( + DEFAULT_STORE_ID, DEFAULT_AUTH_MODEL_ID, new WriteAssertionsRequest()) + .get()); + + // Then + mockHttpClient.verify().put(putUrl).called(1); + ApiException exception = assertInstanceOf(ApiException.class, execException.getCause()); + assertEquals(500, exception.getCode()); + assertEquals( + "{\"code\":\"internal_error\",\"message\":\"Internal Server Error\"}", exception.getResponseBody()); + } +} diff --git a/src/test/java/dev/openfga/sdk/api/client/ClientCredentialsTest.java b/src/test/java/dev/openfga/sdk/api/client/ClientCredentialsTest.java new file mode 100644 index 0000000..6ae5606 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/client/ClientCredentialsTest.java @@ -0,0 +1,112 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import static org.junit.jupiter.api.Assertions.*; + +import dev.openfga.sdk.errors.FgaInvalidParameterException; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class ClientCredentialsTest { + private static final List INVALID_IDENTIFIERS = Arrays.asList(null, "", "\t\r\n"); + private static final String VALID_CLIENT_ID = "client"; + private static final String VALID_CLIENT_SECRET = "secret"; + private static final String VALID_API_TOKEN_ISSUER = "tokenissuer.fga.example"; + private static final String VALID_API_AUDIENCE = "audience"; + + @Test + public void assertValid_allValid() throws FgaInvalidParameterException { + // When + ClientCredentials creds = new ClientCredentials() + .clientId(VALID_CLIENT_ID) + .clientSecret(VALID_CLIENT_SECRET) + .apiTokenIssuer(VALID_API_TOKEN_ISSUER) + .apiAudience(VALID_API_AUDIENCE); + + // Then + assertEquals(VALID_CLIENT_ID, creds.getClientId()); + assertEquals(VALID_CLIENT_SECRET, creds.getClientSecret()); + assertEquals(VALID_API_TOKEN_ISSUER, creds.getApiTokenIssuer()); + assertEquals(VALID_API_AUDIENCE, creds.getApiAudience()); + } + + @Test + public void assertValid_invalidClientId() { + INVALID_IDENTIFIERS.stream() + // Given + .map(invalid -> new ClientCredentials() + .clientId(invalid) + .clientSecret(VALID_CLIENT_SECRET) + .apiTokenIssuer(VALID_API_TOKEN_ISSUER) + .apiAudience(VALID_API_AUDIENCE)) + // When + .map(creds -> assertThrows(FgaInvalidParameterException.class, creds::assertValid)) + // Then + .forEach(exception -> assertEquals( + "Required parameter clientId was invalid when calling ClientCredentials.", + exception.getMessage())); + } + + @Test + public void assertValid_invalidClientSecret() { + INVALID_IDENTIFIERS.stream() + // Given + .map(invalid -> new ClientCredentials() + .clientId(VALID_CLIENT_ID) + .clientSecret(invalid) + .apiTokenIssuer(VALID_API_TOKEN_ISSUER) + .apiAudience(VALID_API_AUDIENCE)) + // When + .map(creds -> assertThrows(FgaInvalidParameterException.class, creds::assertValid)) + // Then + .forEach(exception -> assertEquals( + "Required parameter clientSecret was invalid when calling ClientCredentials.", + exception.getMessage())); + } + + @Test + public void assertValid_invalidApiTokenIssuer() { + INVALID_IDENTIFIERS.stream() + // Given + .map(invalid -> new ClientCredentials() + .clientId(VALID_CLIENT_ID) + .clientSecret(VALID_CLIENT_SECRET) + .apiTokenIssuer(invalid) + .apiAudience(VALID_API_AUDIENCE)) + // When + .map(creds -> assertThrows(FgaInvalidParameterException.class, creds::assertValid)) + // Then + .forEach(exception -> assertEquals( + "Required parameter apiTokenIssuer was invalid when calling ClientCredentials.", + exception.getMessage())); + } + + @Test + public void assertValid_invalidApiAudience() { + INVALID_IDENTIFIERS.stream() + // Given + .map(invalid -> new ClientCredentials() + .clientId(VALID_CLIENT_ID) + .clientSecret(VALID_CLIENT_SECRET) + .apiTokenIssuer(VALID_API_TOKEN_ISSUER) + .apiAudience(invalid)) + // When + .map(creds -> assertThrows(FgaInvalidParameterException.class, creds::assertValid)) + // Then + .forEach(exception -> assertEquals( + "Required parameter apiAudience was invalid when calling ClientCredentials.", + exception.getMessage())); + } +} diff --git a/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java b/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java new file mode 100644 index 0000000..6b5c33c --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java @@ -0,0 +1,87 @@ +package dev.openfga.sdk.api.client; + +import static org.junit.jupiter.api.Assertions.*; + +import dev.openfga.sdk.errors.*; +import org.junit.jupiter.api.Test; + +class ConfigurationTest { + @Test + void apiUrl_nullDefaults() throws FgaInvalidParameterException { + // Given + String apiUrl = null; + var config = new Configuration(apiUrl); + + // When + config.assertValid(); + + // Then + assertEquals("http://localhost:8080", config.getApiUrl()); + } + + @Test + void apiUrl_emptyStringDefaults() throws FgaInvalidParameterException { + // Given + String apiUrl = ""; + var config = new Configuration(apiUrl); + + // When + config.assertValid(); + + // Then + assertEquals("http://localhost:8080", config.getApiUrl()); + } + + @Test + void apiUrl_whitespaceStringDefaults() throws FgaInvalidParameterException { + // Given + String apiUrl = " \t\r\n"; + var config = new Configuration(apiUrl); + + // When + config.assertValid(); + + // Then + assertEquals("http://localhost:8080", config.getApiUrl()); + } + + @Test + void apiUrl_stringNoProtocolFails() { + String apiUrl = "localhost:8080"; + FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { + var config = new Configuration(apiUrl); + config.assertValid(); + }); + assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); + } + + @Test + void apiUrl_stringInvalidProtocolFails() { + String apiUrl = "zzz://localhost:8080"; + FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { + var config = new Configuration(apiUrl); + config.assertValid(); + }); + assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); + } + + @Test + void apiUrl_stringNoHostFails() { + String apiUrl = "http://"; + FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { + var config = new Configuration(apiUrl); + config.assertValid(); + }); + assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); + } + + @Test + void apiUrl_stringBadPortFails() { + String apiUrl = "http://localshost:abcd"; + FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { + var config = new Configuration(apiUrl); + config.assertValid(); + }); + assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/AnyTest.java b/src/test/java/dev/openfga/sdk/api/model/AnyTest.java new file mode 100644 index 0000000..c01467f --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/AnyTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Any + */ +public class AnyTest { + private final Any model = new Any(); + + /** + * Model tests for Any + */ + @Test + public void testAny() { + // TODO: test Any + } + + /** + * Test the property 'atType' + */ + @Test + public void atTypeTest() { + // TODO: test atType + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/AssertionTest.java b/src/test/java/dev/openfga/sdk/api/model/AssertionTest.java new file mode 100644 index 0000000..c2b1703 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/AssertionTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Assertion + */ +public class AssertionTest { + private final Assertion model = new Assertion(); + + /** + * Model tests for Assertion + */ + @Test + public void testAssertion() { + // TODO: test Assertion + } + + /** + * Test the property 'tupleKey' + */ + @Test + public void tupleKeyTest() { + // TODO: test tupleKey + } + + /** + * Test the property 'expectation' + */ + @Test + public void expectationTest() { + // TODO: test expectation + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/AuthorizationModelTest.java b/src/test/java/dev/openfga/sdk/api/model/AuthorizationModelTest.java new file mode 100644 index 0000000..1500a4e --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/AuthorizationModelTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for AuthorizationModel + */ +public class AuthorizationModelTest { + private final AuthorizationModel model = new AuthorizationModel(); + + /** + * Model tests for AuthorizationModel + */ + @Test + public void testAuthorizationModel() { + // TODO: test AuthorizationModel + } + + /** + * Test the property 'id' + */ + @Test + public void idTest() { + // TODO: test id + } + + /** + * Test the property 'schemaVersion' + */ + @Test + public void schemaVersionTest() { + // TODO: test schemaVersion + } + + /** + * Test the property 'typeDefinitions' + */ + @Test + public void typeDefinitionsTest() { + // TODO: test typeDefinitions + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/CheckRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/CheckRequestTest.java new file mode 100644 index 0000000..fec5bbd --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/CheckRequestTest.java @@ -0,0 +1,62 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for CheckRequest + */ +public class CheckRequestTest { + private final CheckRequest model = new CheckRequest(); + + /** + * Model tests for CheckRequest + */ + @Test + public void testCheckRequest() { + // TODO: test CheckRequest + } + + /** + * Test the property 'tupleKey' + */ + @Test + public void tupleKeyTest() { + // TODO: test tupleKey + } + + /** + * Test the property 'contextualTuples' + */ + @Test + public void contextualTuplesTest() { + // TODO: test contextualTuples + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } + + /** + * Test the property 'trace' + */ + @Test + public void traceTest() { + // TODO: test trace + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/CheckResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/CheckResponseTest.java new file mode 100644 index 0000000..4d02dfc --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/CheckResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for CheckResponse + */ +public class CheckResponseTest { + private final CheckResponse model = new CheckResponse(); + + /** + * Model tests for CheckResponse + */ + @Test + public void testCheckResponse() { + // TODO: test CheckResponse + } + + /** + * Test the property 'allowed' + */ + @Test + public void allowedTest() { + // TODO: test allowed + } + + /** + * Test the property 'resolution' + */ + @Test + public void resolutionTest() { + // TODO: test resolution + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ComputedTest.java b/src/test/java/dev/openfga/sdk/api/model/ComputedTest.java new file mode 100644 index 0000000..2bc4d98 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ComputedTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Computed + */ +public class ComputedTest { + private final Computed model = new Computed(); + + /** + * Model tests for Computed + */ + @Test + public void testComputed() { + // TODO: test Computed + } + + /** + * Test the property 'userset' + */ + @Test + public void usersetTest() { + // TODO: test userset + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ContextualTupleKeysTest.java b/src/test/java/dev/openfga/sdk/api/model/ContextualTupleKeysTest.java new file mode 100644 index 0000000..5b14e72 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ContextualTupleKeysTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ContextualTupleKeys + */ +public class ContextualTupleKeysTest { + private final ContextualTupleKeys model = new ContextualTupleKeys(); + + /** + * Model tests for ContextualTupleKeys + */ + @Test + public void testContextualTupleKeys() { + // TODO: test ContextualTupleKeys + } + + /** + * Test the property 'tupleKeys' + */ + @Test + public void tupleKeysTest() { + // TODO: test tupleKeys + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/CreateStoreRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/CreateStoreRequestTest.java new file mode 100644 index 0000000..4472a9b --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/CreateStoreRequestTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for CreateStoreRequest + */ +public class CreateStoreRequestTest { + private final CreateStoreRequest model = new CreateStoreRequest(); + + /** + * Model tests for CreateStoreRequest + */ + @Test + public void testCreateStoreRequest() { + // TODO: test CreateStoreRequest + } + + /** + * Test the property 'name' + */ + @Test + public void nameTest() { + // TODO: test name + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/CreateStoreResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/CreateStoreResponseTest.java new file mode 100644 index 0000000..143a3cd --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/CreateStoreResponseTest.java @@ -0,0 +1,62 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for CreateStoreResponse + */ +public class CreateStoreResponseTest { + private final CreateStoreResponse model = new CreateStoreResponse(); + + /** + * Model tests for CreateStoreResponse + */ + @Test + public void testCreateStoreResponse() { + // TODO: test CreateStoreResponse + } + + /** + * Test the property 'id' + */ + @Test + public void idTest() { + // TODO: test id + } + + /** + * Test the property 'name' + */ + @Test + public void nameTest() { + // TODO: test name + } + + /** + * Test the property 'createdAt' + */ + @Test + public void createdAtTest() { + // TODO: test createdAt + } + + /** + * Test the property 'updatedAt' + */ + @Test + public void updatedAtTest() { + // TODO: test updatedAt + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/DifferenceTest.java b/src/test/java/dev/openfga/sdk/api/model/DifferenceTest.java new file mode 100644 index 0000000..ca28ecd --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/DifferenceTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Difference + */ +public class DifferenceTest { + private final Difference model = new Difference(); + + /** + * Model tests for Difference + */ + @Test + public void testDifference() { + // TODO: test Difference + } + + /** + * Test the property 'base' + */ + @Test + public void baseTest() { + // TODO: test base + } + + /** + * Test the property 'subtract' + */ + @Test + public void subtractTest() { + // TODO: test subtract + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ErrorCodeTest.java b/src/test/java/dev/openfga/sdk/api/model/ErrorCodeTest.java new file mode 100644 index 0000000..56d0cde --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ErrorCodeTest.java @@ -0,0 +1,28 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ErrorCode + */ +public class ErrorCodeTest { + /** + * Model tests for ErrorCode + */ + @Test + public void testErrorCode() { + // TODO: test ErrorCode + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ExpandRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/ExpandRequestTest.java new file mode 100644 index 0000000..127a496 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ExpandRequestTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ExpandRequest + */ +public class ExpandRequestTest { + private final ExpandRequest model = new ExpandRequest(); + + /** + * Model tests for ExpandRequest + */ + @Test + public void testExpandRequest() { + // TODO: test ExpandRequest + } + + /** + * Test the property 'tupleKey' + */ + @Test + public void tupleKeyTest() { + // TODO: test tupleKey + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ExpandResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ExpandResponseTest.java new file mode 100644 index 0000000..24eeb39 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ExpandResponseTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ExpandResponse + */ +public class ExpandResponseTest { + private final ExpandResponse model = new ExpandResponse(); + + /** + * Model tests for ExpandResponse + */ + @Test + public void testExpandResponse() { + // TODO: test ExpandResponse + } + + /** + * Test the property 'tree' + */ + @Test + public void treeTest() { + // TODO: test tree + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/GetStoreResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/GetStoreResponseTest.java new file mode 100644 index 0000000..aad87d4 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/GetStoreResponseTest.java @@ -0,0 +1,62 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for GetStoreResponse + */ +public class GetStoreResponseTest { + private final GetStoreResponse model = new GetStoreResponse(); + + /** + * Model tests for GetStoreResponse + */ + @Test + public void testGetStoreResponse() { + // TODO: test GetStoreResponse + } + + /** + * Test the property 'id' + */ + @Test + public void idTest() { + // TODO: test id + } + + /** + * Test the property 'name' + */ + @Test + public void nameTest() { + // TODO: test name + } + + /** + * Test the property 'createdAt' + */ + @Test + public void createdAtTest() { + // TODO: test createdAt + } + + /** + * Test the property 'updatedAt' + */ + @Test + public void updatedAtTest() { + // TODO: test updatedAt + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/InternalErrorCodeTest.java b/src/test/java/dev/openfga/sdk/api/model/InternalErrorCodeTest.java new file mode 100644 index 0000000..0a74ca7 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/InternalErrorCodeTest.java @@ -0,0 +1,28 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for InternalErrorCode + */ +public class InternalErrorCodeTest { + /** + * Model tests for InternalErrorCode + */ + @Test + public void testInternalErrorCode() { + // TODO: test InternalErrorCode + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/InternalErrorMessageResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/InternalErrorMessageResponseTest.java new file mode 100644 index 0000000..a08a34d --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/InternalErrorMessageResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for InternalErrorMessageResponse + */ +public class InternalErrorMessageResponseTest { + private final InternalErrorMessageResponse model = new InternalErrorMessageResponse(); + + /** + * Model tests for InternalErrorMessageResponse + */ + @Test + public void testInternalErrorMessageResponse() { + // TODO: test InternalErrorMessageResponse + } + + /** + * Test the property 'code' + */ + @Test + public void codeTest() { + // TODO: test code + } + + /** + * Test the property 'message' + */ + @Test + public void messageTest() { + // TODO: test message + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/LeafTest.java b/src/test/java/dev/openfga/sdk/api/model/LeafTest.java new file mode 100644 index 0000000..5c2cb5c --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/LeafTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Leaf + */ +public class LeafTest { + private final Leaf model = new Leaf(); + + /** + * Model tests for Leaf + */ + @Test + public void testLeaf() { + // TODO: test Leaf + } + + /** + * Test the property 'users' + */ + @Test + public void usersTest() { + // TODO: test users + } + + /** + * Test the property 'computed' + */ + @Test + public void computedTest() { + // TODO: test computed + } + + /** + * Test the property 'tupleToUserset' + */ + @Test + public void tupleToUsersetTest() { + // TODO: test tupleToUserset + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ListObjectsRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/ListObjectsRequestTest.java new file mode 100644 index 0000000..a2f5337 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ListObjectsRequestTest.java @@ -0,0 +1,70 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ListObjectsRequest + */ +public class ListObjectsRequestTest { + private final ListObjectsRequest model = new ListObjectsRequest(); + + /** + * Model tests for ListObjectsRequest + */ + @Test + public void testListObjectsRequest() { + // TODO: test ListObjectsRequest + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } + + /** + * Test the property 'type' + */ + @Test + public void typeTest() { + // TODO: test type + } + + /** + * Test the property 'relation' + */ + @Test + public void relationTest() { + // TODO: test relation + } + + /** + * Test the property 'user' + */ + @Test + public void userTest() { + // TODO: test user + } + + /** + * Test the property 'contextualTuples' + */ + @Test + public void contextualTuplesTest() { + // TODO: test contextualTuples + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ListObjectsResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ListObjectsResponseTest.java new file mode 100644 index 0000000..67d15cd --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ListObjectsResponseTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ListObjectsResponse + */ +public class ListObjectsResponseTest { + private final ListObjectsResponse model = new ListObjectsResponse(); + + /** + * Model tests for ListObjectsResponse + */ + @Test + public void testListObjectsResponse() { + // TODO: test ListObjectsResponse + } + + /** + * Test the property 'objects' + */ + @Test + public void objectsTest() { + // TODO: test objects + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ListStoresResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ListStoresResponseTest.java new file mode 100644 index 0000000..1fb61eb --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ListStoresResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ListStoresResponse + */ +public class ListStoresResponseTest { + private final ListStoresResponse model = new ListStoresResponse(); + + /** + * Model tests for ListStoresResponse + */ + @Test + public void testListStoresResponse() { + // TODO: test ListStoresResponse + } + + /** + * Test the property 'stores' + */ + @Test + public void storesTest() { + // TODO: test stores + } + + /** + * Test the property 'continuationToken' + */ + @Test + public void continuationTokenTest() { + // TODO: test continuationToken + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/MetadataTest.java b/src/test/java/dev/openfga/sdk/api/model/MetadataTest.java new file mode 100644 index 0000000..b85bb35 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/MetadataTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Metadata + */ +public class MetadataTest { + private final Metadata model = new Metadata(); + + /** + * Model tests for Metadata + */ + @Test + public void testMetadata() { + // TODO: test Metadata + } + + /** + * Test the property 'relations' + */ + @Test + public void relationsTest() { + // TODO: test relations + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/NodeTest.java b/src/test/java/dev/openfga/sdk/api/model/NodeTest.java new file mode 100644 index 0000000..e7ca0e8 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/NodeTest.java @@ -0,0 +1,70 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Node + */ +public class NodeTest { + private final Node model = new Node(); + + /** + * Model tests for Node + */ + @Test + public void testNode() { + // TODO: test Node + } + + /** + * Test the property 'name' + */ + @Test + public void nameTest() { + // TODO: test name + } + + /** + * Test the property 'leaf' + */ + @Test + public void leafTest() { + // TODO: test leaf + } + + /** + * Test the property 'difference' + */ + @Test + public void differenceTest() { + // TODO: test difference + } + + /** + * Test the property 'union' + */ + @Test + public void unionTest() { + // TODO: test union + } + + /** + * Test the property 'intersection' + */ + @Test + public void intersectionTest() { + // TODO: test intersection + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/NodesTest.java b/src/test/java/dev/openfga/sdk/api/model/NodesTest.java new file mode 100644 index 0000000..12c0331 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/NodesTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Nodes + */ +public class NodesTest { + private final Nodes model = new Nodes(); + + /** + * Model tests for Nodes + */ + @Test + public void testNodes() { + // TODO: test Nodes + } + + /** + * Test the property 'nodes' + */ + @Test + public void nodesTest() { + // TODO: test nodes + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/NotFoundErrorCodeTest.java b/src/test/java/dev/openfga/sdk/api/model/NotFoundErrorCodeTest.java new file mode 100644 index 0000000..89a6a20 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/NotFoundErrorCodeTest.java @@ -0,0 +1,28 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for NotFoundErrorCode + */ +public class NotFoundErrorCodeTest { + /** + * Model tests for NotFoundErrorCode + */ + @Test + public void testNotFoundErrorCode() { + // TODO: test NotFoundErrorCode + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ObjectRelationTest.java b/src/test/java/dev/openfga/sdk/api/model/ObjectRelationTest.java new file mode 100644 index 0000000..4250939 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ObjectRelationTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ObjectRelation + */ +public class ObjectRelationTest { + private final ObjectRelation model = new ObjectRelation(); + + /** + * Model tests for ObjectRelation + */ + @Test + public void testObjectRelation() { + // TODO: test ObjectRelation + } + + /** + * Test the property '_object' + */ + @Test + public void _objectTest() { + // TODO: test _object + } + + /** + * Test the property 'relation' + */ + @Test + public void relationTest() { + // TODO: test relation + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponseTest.java new file mode 100644 index 0000000..587ba31 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for PathUnknownErrorMessageResponse + */ +public class PathUnknownErrorMessageResponseTest { + private final PathUnknownErrorMessageResponse model = new PathUnknownErrorMessageResponse(); + + /** + * Model tests for PathUnknownErrorMessageResponse + */ + @Test + public void testPathUnknownErrorMessageResponse() { + // TODO: test PathUnknownErrorMessageResponse + } + + /** + * Test the property 'code' + */ + @Test + public void codeTest() { + // TODO: test code + } + + /** + * Test the property 'message' + */ + @Test + public void messageTest() { + // TODO: test message + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadAssertionsResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadAssertionsResponseTest.java new file mode 100644 index 0000000..521492e --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadAssertionsResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadAssertionsResponse + */ +public class ReadAssertionsResponseTest { + private final ReadAssertionsResponse model = new ReadAssertionsResponse(); + + /** + * Model tests for ReadAssertionsResponse + */ + @Test + public void testReadAssertionsResponse() { + // TODO: test ReadAssertionsResponse + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } + + /** + * Test the property 'assertions' + */ + @Test + public void assertionsTest() { + // TODO: test assertions + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponseTest.java new file mode 100644 index 0000000..845a766 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponseTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadAuthorizationModelResponse + */ +public class ReadAuthorizationModelResponseTest { + private final ReadAuthorizationModelResponse model = new ReadAuthorizationModelResponse(); + + /** + * Model tests for ReadAuthorizationModelResponse + */ + @Test + public void testReadAuthorizationModelResponse() { + // TODO: test ReadAuthorizationModelResponse + } + + /** + * Test the property 'authorizationModel' + */ + @Test + public void authorizationModelTest() { + // TODO: test authorizationModel + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponseTest.java new file mode 100644 index 0000000..80d9821 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadAuthorizationModelsResponse + */ +public class ReadAuthorizationModelsResponseTest { + private final ReadAuthorizationModelsResponse model = new ReadAuthorizationModelsResponse(); + + /** + * Model tests for ReadAuthorizationModelsResponse + */ + @Test + public void testReadAuthorizationModelsResponse() { + // TODO: test ReadAuthorizationModelsResponse + } + + /** + * Test the property 'authorizationModels' + */ + @Test + public void authorizationModelsTest() { + // TODO: test authorizationModels + } + + /** + * Test the property 'continuationToken' + */ + @Test + public void continuationTokenTest() { + // TODO: test continuationToken + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadChangesResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadChangesResponseTest.java new file mode 100644 index 0000000..8b11f6c --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadChangesResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadChangesResponse + */ +public class ReadChangesResponseTest { + private final ReadChangesResponse model = new ReadChangesResponse(); + + /** + * Model tests for ReadChangesResponse + */ + @Test + public void testReadChangesResponse() { + // TODO: test ReadChangesResponse + } + + /** + * Test the property 'changes' + */ + @Test + public void changesTest() { + // TODO: test changes + } + + /** + * Test the property 'continuationToken' + */ + @Test + public void continuationTokenTest() { + // TODO: test continuationToken + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadRequestTest.java new file mode 100644 index 0000000..955310a --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadRequestTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadRequest + */ +public class ReadRequestTest { + private final ReadRequest model = new ReadRequest(); + + /** + * Model tests for ReadRequest + */ + @Test + public void testReadRequest() { + // TODO: test ReadRequest + } + + /** + * Test the property 'tupleKey' + */ + @Test + public void tupleKeyTest() { + // TODO: test tupleKey + } + + /** + * Test the property 'pageSize' + */ + @Test + public void pageSizeTest() { + // TODO: test pageSize + } + + /** + * Test the property 'continuationToken' + */ + @Test + public void continuationTokenTest() { + // TODO: test continuationToken + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ReadResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ReadResponseTest.java new file mode 100644 index 0000000..59fb83d --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ReadResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ReadResponse + */ +public class ReadResponseTest { + private final ReadResponse model = new ReadResponse(); + + /** + * Model tests for ReadResponse + */ + @Test + public void testReadResponse() { + // TODO: test ReadResponse + } + + /** + * Test the property 'tuples' + */ + @Test + public void tuplesTest() { + // TODO: test tuples + } + + /** + * Test the property 'continuationToken' + */ + @Test + public void continuationTokenTest() { + // TODO: test continuationToken + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/RelationMetadataTest.java b/src/test/java/dev/openfga/sdk/api/model/RelationMetadataTest.java new file mode 100644 index 0000000..82763ae --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/RelationMetadataTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for RelationMetadata + */ +public class RelationMetadataTest { + private final RelationMetadata model = new RelationMetadata(); + + /** + * Model tests for RelationMetadata + */ + @Test + public void testRelationMetadata() { + // TODO: test RelationMetadata + } + + /** + * Test the property 'directlyRelatedUserTypes' + */ + @Test + public void directlyRelatedUserTypesTest() { + // TODO: test directlyRelatedUserTypes + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/RelationReferenceTest.java b/src/test/java/dev/openfga/sdk/api/model/RelationReferenceTest.java new file mode 100644 index 0000000..a738757 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/RelationReferenceTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for RelationReference + */ +public class RelationReferenceTest { + private final RelationReference model = new RelationReference(); + + /** + * Model tests for RelationReference + */ + @Test + public void testRelationReference() { + // TODO: test RelationReference + } + + /** + * Test the property 'type' + */ + @Test + public void typeTest() { + // TODO: test type + } + + /** + * Test the property 'relation' + */ + @Test + public void relationTest() { + // TODO: test relation + } + + /** + * Test the property 'wildcard' + */ + @Test + public void wildcardTest() { + // TODO: test wildcard + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/StatusTest.java b/src/test/java/dev/openfga/sdk/api/model/StatusTest.java new file mode 100644 index 0000000..0262f9f --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/StatusTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Status + */ +public class StatusTest { + private final Status model = new Status(); + + /** + * Model tests for Status + */ + @Test + public void testStatus() { + // TODO: test Status + } + + /** + * Test the property 'code' + */ + @Test + public void codeTest() { + // TODO: test code + } + + /** + * Test the property 'message' + */ + @Test + public void messageTest() { + // TODO: test message + } + + /** + * Test the property 'details' + */ + @Test + public void detailsTest() { + // TODO: test details + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/StoreTest.java b/src/test/java/dev/openfga/sdk/api/model/StoreTest.java new file mode 100644 index 0000000..2ed2f53 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/StoreTest.java @@ -0,0 +1,70 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Store + */ +public class StoreTest { + private final Store model = new Store(); + + /** + * Model tests for Store + */ + @Test + public void testStore() { + // TODO: test Store + } + + /** + * Test the property 'id' + */ + @Test + public void idTest() { + // TODO: test id + } + + /** + * Test the property 'name' + */ + @Test + public void nameTest() { + // TODO: test name + } + + /** + * Test the property 'createdAt' + */ + @Test + public void createdAtTest() { + // TODO: test createdAt + } + + /** + * Test the property 'updatedAt' + */ + @Test + public void updatedAtTest() { + // TODO: test updatedAt + } + + /** + * Test the property 'deletedAt' + */ + @Test + public void deletedAtTest() { + // TODO: test deletedAt + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleChangeTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleChangeTest.java new file mode 100644 index 0000000..43a626f --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleChangeTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TupleChange + */ +public class TupleChangeTest { + private final TupleChange model = new TupleChange(); + + /** + * Model tests for TupleChange + */ + @Test + public void testTupleChange() { + // TODO: test TupleChange + } + + /** + * Test the property 'tupleKey' + */ + @Test + public void tupleKeyTest() { + // TODO: test tupleKey + } + + /** + * Test the property 'operation' + */ + @Test + public void operationTest() { + // TODO: test operation + } + + /** + * Test the property 'timestamp' + */ + @Test + public void timestampTest() { + // TODO: test timestamp + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleKeyTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleKeyTest.java new file mode 100644 index 0000000..ef9e315 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleKeyTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TupleKey + */ +public class TupleKeyTest { + private final TupleKey model = new TupleKey(); + + /** + * Model tests for TupleKey + */ + @Test + public void testTupleKey() { + // TODO: test TupleKey + } + + /** + * Test the property '_object' + */ + @Test + public void _objectTest() { + // TODO: test _object + } + + /** + * Test the property 'relation' + */ + @Test + public void relationTest() { + // TODO: test relation + } + + /** + * Test the property 'user' + */ + @Test + public void userTest() { + // TODO: test user + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleKeysTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleKeysTest.java new file mode 100644 index 0000000..a57d57b --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleKeysTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TupleKeys + */ +public class TupleKeysTest { + private final TupleKeys model = new TupleKeys(); + + /** + * Model tests for TupleKeys + */ + @Test + public void testTupleKeys() { + // TODO: test TupleKeys + } + + /** + * Test the property 'tupleKeys' + */ + @Test + public void tupleKeysTest() { + // TODO: test tupleKeys + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleOperationTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleOperationTest.java new file mode 100644 index 0000000..4bc1458 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleOperationTest.java @@ -0,0 +1,28 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TupleOperation + */ +public class TupleOperationTest { + /** + * Model tests for TupleOperation + */ + @Test + public void testTupleOperation() { + // TODO: test TupleOperation + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleTest.java new file mode 100644 index 0000000..c56c98c --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Tuple + */ +public class TupleTest { + private final Tuple model = new Tuple(); + + /** + * Model tests for Tuple + */ + @Test + public void testTuple() { + // TODO: test Tuple + } + + /** + * Test the property 'key' + */ + @Test + public void keyTest() { + // TODO: test key + } + + /** + * Test the property 'timestamp' + */ + @Test + public void timestampTest() { + // TODO: test timestamp + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TupleToUsersetTest.java b/src/test/java/dev/openfga/sdk/api/model/TupleToUsersetTest.java new file mode 100644 index 0000000..00d0944 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TupleToUsersetTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TupleToUserset + */ +public class TupleToUsersetTest { + private final TupleToUserset model = new TupleToUserset(); + + /** + * Model tests for TupleToUserset + */ + @Test + public void testTupleToUserset() { + // TODO: test TupleToUserset + } + + /** + * Test the property 'tupleset' + */ + @Test + public void tuplesetTest() { + // TODO: test tupleset + } + + /** + * Test the property 'computedUserset' + */ + @Test + public void computedUsersetTest() { + // TODO: test computedUserset + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/TypeDefinitionTest.java b/src/test/java/dev/openfga/sdk/api/model/TypeDefinitionTest.java new file mode 100644 index 0000000..f0b4f6b --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/TypeDefinitionTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for TypeDefinition + */ +public class TypeDefinitionTest { + private final TypeDefinition model = new TypeDefinition(); + + /** + * Model tests for TypeDefinition + */ + @Test + public void testTypeDefinition() { + // TODO: test TypeDefinition + } + + /** + * Test the property 'type' + */ + @Test + public void typeTest() { + // TODO: test type + } + + /** + * Test the property 'relations' + */ + @Test + public void relationsTest() { + // TODO: test relations + } + + /** + * Test the property 'metadata' + */ + @Test + public void metadataTest() { + // TODO: test metadata + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersTest.java new file mode 100644 index 0000000..a3fb034 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Users + */ +public class UsersTest { + private final Users model = new Users(); + + /** + * Model tests for Users + */ + @Test + public void testUsers() { + // TODO: test Users + } + + /** + * Test the property 'users' + */ + @Test + public void usersTest() { + // TODO: test users + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersetTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersetTest.java new file mode 100644 index 0000000..819e997 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersetTest.java @@ -0,0 +1,78 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Userset + */ +public class UsersetTest { + private final Userset model = new Userset(); + + /** + * Model tests for Userset + */ + @Test + public void testUserset() { + // TODO: test Userset + } + + /** + * Test the property '_this' + */ + @Test + public void _thisTest() { + // TODO: test _this + } + + /** + * Test the property 'computedUserset' + */ + @Test + public void computedUsersetTest() { + // TODO: test computedUserset + } + + /** + * Test the property 'tupleToUserset' + */ + @Test + public void tupleToUsersetTest() { + // TODO: test tupleToUserset + } + + /** + * Test the property 'union' + */ + @Test + public void unionTest() { + // TODO: test union + } + + /** + * Test the property 'intersection' + */ + @Test + public void intersectionTest() { + // TODO: test intersection + } + + /** + * Test the property 'difference' + */ + @Test + public void differenceTest() { + // TODO: test difference + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersetTreeDifferenceTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeDifferenceTest.java new file mode 100644 index 0000000..43a13ac --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeDifferenceTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for UsersetTreeDifference + */ +public class UsersetTreeDifferenceTest { + private final UsersetTreeDifference model = new UsersetTreeDifference(); + + /** + * Model tests for UsersetTreeDifference + */ + @Test + public void testUsersetTreeDifference() { + // TODO: test UsersetTreeDifference + } + + /** + * Test the property 'base' + */ + @Test + public void baseTest() { + // TODO: test base + } + + /** + * Test the property 'subtract' + */ + @Test + public void subtractTest() { + // TODO: test subtract + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTest.java new file mode 100644 index 0000000..9aea5c0 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for UsersetTree + */ +public class UsersetTreeTest { + private final UsersetTree model = new UsersetTree(); + + /** + * Model tests for UsersetTree + */ + @Test + public void testUsersetTree() { + // TODO: test UsersetTree + } + + /** + * Test the property 'root' + */ + @Test + public void rootTest() { + // TODO: test root + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUsersetTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUsersetTest.java new file mode 100644 index 0000000..d730491 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUsersetTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for UsersetTreeTupleToUserset + */ +public class UsersetTreeTupleToUsersetTest { + private final UsersetTreeTupleToUserset model = new UsersetTreeTupleToUserset(); + + /** + * Model tests for UsersetTreeTupleToUserset + */ + @Test + public void testUsersetTreeTupleToUserset() { + // TODO: test UsersetTreeTupleToUserset + } + + /** + * Test the property 'tupleset' + */ + @Test + public void tuplesetTest() { + // TODO: test tupleset + } + + /** + * Test the property 'computed' + */ + @Test + public void computedTest() { + // TODO: test computed + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/UsersetsTest.java b/src/test/java/dev/openfga/sdk/api/model/UsersetsTest.java new file mode 100644 index 0000000..b9fa799 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/UsersetsTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for Usersets + */ +public class UsersetsTest { + private final Usersets model = new Usersets(); + + /** + * Model tests for Usersets + */ + @Test + public void testUsersets() { + // TODO: test Usersets + } + + /** + * Test the property 'child' + */ + @Test + public void childTest() { + // TODO: test child + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponseTest.java new file mode 100644 index 0000000..43f6bd1 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponseTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for ValidationErrorMessageResponse + */ +public class ValidationErrorMessageResponseTest { + private final ValidationErrorMessageResponse model = new ValidationErrorMessageResponse(); + + /** + * Model tests for ValidationErrorMessageResponse + */ + @Test + public void testValidationErrorMessageResponse() { + // TODO: test ValidationErrorMessageResponse + } + + /** + * Test the property 'code' + */ + @Test + public void codeTest() { + // TODO: test code + } + + /** + * Test the property 'message' + */ + @Test + public void messageTest() { + // TODO: test message + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/WriteAssertionsRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/WriteAssertionsRequestTest.java new file mode 100644 index 0000000..feb1e5c --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/WriteAssertionsRequestTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for WriteAssertionsRequest + */ +public class WriteAssertionsRequestTest { + private final WriteAssertionsRequest model = new WriteAssertionsRequest(); + + /** + * Model tests for WriteAssertionsRequest + */ + @Test + public void testWriteAssertionsRequest() { + // TODO: test WriteAssertionsRequest + } + + /** + * Test the property 'assertions' + */ + @Test + public void assertionsTest() { + // TODO: test assertions + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequestTest.java new file mode 100644 index 0000000..de5bbcd --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequestTest.java @@ -0,0 +1,46 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for WriteAuthorizationModelRequest + */ +public class WriteAuthorizationModelRequestTest { + private final WriteAuthorizationModelRequest model = new WriteAuthorizationModelRequest(); + + /** + * Model tests for WriteAuthorizationModelRequest + */ + @Test + public void testWriteAuthorizationModelRequest() { + // TODO: test WriteAuthorizationModelRequest + } + + /** + * Test the property 'typeDefinitions' + */ + @Test + public void typeDefinitionsTest() { + // TODO: test typeDefinitions + } + + /** + * Test the property 'schemaVersion' + */ + @Test + public void schemaVersionTest() { + // TODO: test schemaVersion + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponseTest.java b/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponseTest.java new file mode 100644 index 0000000..815f06f --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponseTest.java @@ -0,0 +1,38 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for WriteAuthorizationModelResponse + */ +public class WriteAuthorizationModelResponseTest { + private final WriteAuthorizationModelResponse model = new WriteAuthorizationModelResponse(); + + /** + * Model tests for WriteAuthorizationModelResponse + */ + @Test + public void testWriteAuthorizationModelResponse() { + // TODO: test WriteAuthorizationModelResponse + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } +} diff --git a/src/test/java/dev/openfga/sdk/api/model/WriteRequestTest.java b/src/test/java/dev/openfga/sdk/api/model/WriteRequestTest.java new file mode 100644 index 0000000..85966ca --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/model/WriteRequestTest.java @@ -0,0 +1,54 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.model; + +import org.junit.jupiter.api.Test; + +/** + * Model tests for WriteRequest + */ +public class WriteRequestTest { + private final WriteRequest model = new WriteRequest(); + + /** + * Model tests for WriteRequest + */ + @Test + public void testWriteRequest() { + // TODO: test WriteRequest + } + + /** + * Test the property 'writes' + */ + @Test + public void writesTest() { + // TODO: test writes + } + + /** + * Test the property 'deletes' + */ + @Test + public void deletesTest() { + // TODO: test deletes + } + + /** + * Test the property 'authorizationModelId' + */ + @Test + public void authorizationModelIdTest() { + // TODO: test authorizationModelId + } +} diff --git a/src/test/java/dev/openfga/util/StringUtilTest.java b/src/test/java/dev/openfga/util/StringUtilTest.java new file mode 100644 index 0000000..0a92d00 --- /dev/null +++ b/src/test/java/dev/openfga/util/StringUtilTest.java @@ -0,0 +1,50 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.util; + +import static dev.openfga.util.StringUtil.isNullOrWhitespace; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class StringUtilTest { + @Test + public void isNullOrWhitespace_someContent_false() { + assertFalse(isNullOrWhitespace("abc")); + } + + @Test + public void isNullOrWhitespace_null_true() { + assertTrue(isNullOrWhitespace(null)); + } + + @Test + public void isNullOrWhitespace_empty_true() { + assertTrue(isNullOrWhitespace("")); + } + + @Test + public void isNullOrWhitespace_singleSpace_true() { + assertTrue(isNullOrWhitespace(" ")); + } + + @Test + public void isNullOrWhitespace_multipleSpace_true() { + assertTrue(isNullOrWhitespace(" ")); + } + + @Test + public void isNullOrWhitespace_multipleOtherWhitespace_true() { + assertTrue(isNullOrWhitespace(" \t\r\n")); + } +} From 2602c5b5ea357cba7a773b1baa691e0846d75da1 Mon Sep 17 00:00:00 2001 From: "Justin \"J.R.\" Hill" Date: Mon, 21 Aug 2023 16:50:40 -0700 Subject: [PATCH 2/5] feat(java): Allow overrides of Configuration --- .../java/dev/openfga/sdk/api/OpenFgaApi.java | 676 +++++++++++++++--- .../dev/openfga/sdk/api/client/ApiClient.java | 2 +- .../openfga/sdk/api/client/ApiException.java | 2 +- .../java/dev/openfga/sdk/api/client/JSON.java | 2 +- .../java/dev/openfga/sdk/api/client/Pair.java | 2 +- .../sdk/api/model/AbstractOpenApiSchema.java | 2 +- .../java/dev/openfga/sdk/api/model/Any.java | 2 +- .../dev/openfga/sdk/api/model/Assertion.java | 2 +- .../sdk/api/model/AuthorizationModel.java | 2 +- .../openfga/sdk/api/model/CheckRequest.java | 2 +- .../openfga/sdk/api/model/CheckResponse.java | 2 +- .../dev/openfga/sdk/api/model/Computed.java | 2 +- .../sdk/api/model/ContextualTupleKeys.java | 2 +- .../sdk/api/model/CreateStoreRequest.java | 2 +- .../sdk/api/model/CreateStoreResponse.java | 2 +- .../dev/openfga/sdk/api/model/Difference.java | 2 +- .../openfga/sdk/api/model/ExpandRequest.java | 2 +- .../openfga/sdk/api/model/ExpandResponse.java | 2 +- .../sdk/api/model/GetStoreResponse.java | 2 +- .../model/InternalErrorMessageResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/Leaf.java | 2 +- .../sdk/api/model/ListObjectsRequest.java | 2 +- .../sdk/api/model/ListObjectsResponse.java | 2 +- .../sdk/api/model/ListStoresResponse.java | 2 +- .../dev/openfga/sdk/api/model/Metadata.java | 2 +- .../java/dev/openfga/sdk/api/model/Node.java | 2 +- .../java/dev/openfga/sdk/api/model/Nodes.java | 2 +- .../openfga/sdk/api/model/ObjectRelation.java | 2 +- .../PathUnknownErrorMessageResponse.java | 2 +- .../sdk/api/model/ReadAssertionsResponse.java | 2 +- .../model/ReadAuthorizationModelResponse.java | 2 +- .../ReadAuthorizationModelsResponse.java | 2 +- .../sdk/api/model/ReadChangesResponse.java | 2 +- .../openfga/sdk/api/model/ReadRequest.java | 2 +- .../openfga/sdk/api/model/ReadResponse.java | 2 +- .../sdk/api/model/RelationMetadata.java | 2 +- .../sdk/api/model/RelationReference.java | 2 +- .../dev/openfga/sdk/api/model/Status.java | 2 +- .../java/dev/openfga/sdk/api/model/Store.java | 2 +- .../java/dev/openfga/sdk/api/model/Tuple.java | 2 +- .../openfga/sdk/api/model/TupleChange.java | 2 +- .../dev/openfga/sdk/api/model/TupleKey.java | 2 +- .../dev/openfga/sdk/api/model/TupleKeys.java | 2 +- .../openfga/sdk/api/model/TupleToUserset.java | 2 +- .../openfga/sdk/api/model/TypeDefinition.java | 2 +- .../java/dev/openfga/sdk/api/model/Users.java | 2 +- .../dev/openfga/sdk/api/model/Userset.java | 2 +- .../openfga/sdk/api/model/UsersetTree.java | 2 +- .../sdk/api/model/UsersetTreeDifference.java | 2 +- .../api/model/UsersetTreeTupleToUserset.java | 2 +- .../dev/openfga/sdk/api/model/Usersets.java | 2 +- .../model/ValidationErrorMessageResponse.java | 2 +- .../sdk/api/model/WriteAssertionsRequest.java | 2 +- .../model/WriteAuthorizationModelRequest.java | 2 +- .../WriteAuthorizationModelResponse.java | 2 +- .../openfga/sdk/api/model/WriteRequest.java | 2 +- 56 files changed, 631 insertions(+), 155 deletions(-) diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index 0192838..212bd0e 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -54,13 +54,11 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class OpenFgaApi { private final HttpClient memberVarHttpClient; private final ObjectMapper memberVarObjectMapper; private final Configuration memberVarConfiguration; - private final String memberVarBaseUri; - private final Duration memberVarReadTimeout; private final Consumer memberVarInterceptor; private final Consumer> memberVarResponseInterceptor; private final Consumer> memberVarAsyncResponseInterceptor; @@ -69,8 +67,6 @@ public OpenFgaApi(ApiClient apiClient, Configuration configuration) { memberVarHttpClient = apiClient.getHttpClient(); memberVarObjectMapper = apiClient.getObjectMapper(); memberVarConfiguration = configuration; - memberVarBaseUri = configuration.getApiUrl(); - memberVarReadTimeout = configuration.getReadTimeout(); memberVarInterceptor = apiClient.getRequestInterceptor(); memberVarResponseInterceptor = apiClient.getResponseInterceptor(); memberVarAsyncResponseInterceptor = apiClient.getAsyncResponseInterceptor(); @@ -97,8 +93,22 @@ private String formatExceptionMessage(String operationId, int statusCode, String * @throws ApiException if fails to make API call */ public CompletableFuture check(String storeId, CheckRequest body) throws ApiException { + return check(storeId, body, memberVarConfiguration); + } + + /** + * Check whether a user is authorized to access an object + * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<CheckResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture check(String storeId, CheckRequest body, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -131,8 +141,22 @@ public CompletableFuture check(String storeId, CheckRequest body) */ public CompletableFuture> checkWithHttpInfo(String storeId, CheckRequest body) throws ApiException { + return checkWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * Check whether a user is authorized to access an object + * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<CheckResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> checkWithHttpInfo( + String storeId, CheckRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -160,7 +184,8 @@ public CompletableFuture> checkWithHttpInfo(String st } } - private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest body) throws ApiException { + private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling check"); @@ -174,7 +199,7 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod String localVarPath = "/stores/{store_id}/check".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -185,14 +210,16 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Create a store * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. @@ -201,8 +228,21 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod * @throws ApiException if fails to make API call */ public CompletableFuture createStore(CreateStoreRequest body) throws ApiException { + return createStore(body, memberVarConfiguration); + } + + /** + * Create a store + * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<CreateStoreResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture createStore(CreateStoreRequest body, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body); + HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -234,8 +274,21 @@ public CompletableFuture createStore(CreateStoreRequest bod */ public CompletableFuture> createStoreWithHttpInfo(CreateStoreRequest body) throws ApiException { + return createStoreWithHttpInfo(body, memberVarConfiguration); + } + + /** + * Create a store + * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<CreateStoreResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> createStoreWithHttpInfo( + CreateStoreRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body); + HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -263,7 +316,8 @@ public CompletableFuture> createStoreWithHttpIn } } - private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body) throws ApiException { + private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'body' is set if (body == null) { throw new ApiException(400, "Missing the required parameter 'body' when calling createStore"); @@ -273,7 +327,7 @@ private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body) t String localVarPath = "/stores"; - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -284,14 +338,16 @@ private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body) t } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Delete a store * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. @@ -300,8 +356,20 @@ private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body) t * @throws ApiException if fails to make API call */ public CompletableFuture deleteStore(String storeId) throws ApiException { + return deleteStore(storeId, memberVarConfiguration); + } + + /** + * Delete a store + * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + * @param storeId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<Void> + * @throws ApiException if fails to make API call + */ + public CompletableFuture deleteStore(String storeId, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId); + HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -323,8 +391,21 @@ public CompletableFuture deleteStore(String storeId) throws ApiException { * @throws ApiException if fails to make API call */ public CompletableFuture> deleteStoreWithHttpInfo(String storeId) throws ApiException { + return deleteStoreWithHttpInfo(storeId, memberVarConfiguration); + } + + /** + * Delete a store + * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. + * @param storeId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<Void>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> deleteStoreWithHttpInfo(String storeId, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId); + HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -344,7 +425,8 @@ public CompletableFuture> deleteStoreWithHttpInfo(String store } } - private HttpRequest.Builder deleteStoreRequestBuilder(String storeId) throws ApiException { + private HttpRequest.Builder deleteStoreRequestBuilder(String storeId, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling deleteStore"); @@ -354,19 +436,21 @@ private HttpRequest.Builder deleteStoreRequestBuilder(String storeId) throws Api String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. @@ -376,8 +460,22 @@ private HttpRequest.Builder deleteStoreRequestBuilder(String storeId) throws Api * @throws ApiException if fails to make API call */ public CompletableFuture expand(String storeId, ExpandRequest body) throws ApiException { + return expand(storeId, body, memberVarConfiguration); + } + + /** + * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ExpandResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture expand(String storeId, ExpandRequest body, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -410,8 +508,22 @@ public CompletableFuture expand(String storeId, ExpandRequest bo */ public CompletableFuture> expandWithHttpInfo(String storeId, ExpandRequest body) throws ApiException { + return expandWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship + * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ExpandResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> expandWithHttpInfo( + String storeId, ExpandRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -439,7 +551,8 @@ public CompletableFuture> expandWithHttpInfo(String } } - private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest body) throws ApiException { + private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling expand"); @@ -454,7 +567,7 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b String localVarPath = "/stores/{store_id}/expand".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -465,14 +578,16 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Get a store * Returns an OpenFGA store by its identifier @@ -481,8 +596,21 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b * @throws ApiException if fails to make API call */ public CompletableFuture getStore(String storeId) throws ApiException { + return getStore(storeId, memberVarConfiguration); + } + + /** + * Get a store + * Returns an OpenFGA store by its identifier + * @param storeId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<GetStoreResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture getStore(String storeId, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId); + HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -513,8 +641,21 @@ public CompletableFuture getStore(String storeId) throws ApiEx * @throws ApiException if fails to make API call */ public CompletableFuture> getStoreWithHttpInfo(String storeId) throws ApiException { + return getStoreWithHttpInfo(storeId, memberVarConfiguration); + } + + /** + * Get a store + * Returns an OpenFGA store by its identifier + * @param storeId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<GetStoreResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> getStoreWithHttpInfo( + String storeId, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId); + HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -542,7 +683,8 @@ public CompletableFuture> getStoreWithHttpInfo(Str } } - private HttpRequest.Builder getStoreRequestBuilder(String storeId) throws ApiException { + private HttpRequest.Builder getStoreRequestBuilder(String storeId, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling getStore"); @@ -552,19 +694,21 @@ private HttpRequest.Builder getStoreRequestBuilder(String storeId) throws ApiExc String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * List all objects of the given type that the user has a relation with * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. @@ -575,8 +719,22 @@ private HttpRequest.Builder getStoreRequestBuilder(String storeId) throws ApiExc */ public CompletableFuture listObjects(String storeId, ListObjectsRequest body) throws ApiException { + return listObjects(storeId, body, memberVarConfiguration); + } + + /** + * List all objects of the given type that the user has a relation with + * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ListObjectsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture listObjects( + String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -609,8 +767,23 @@ public CompletableFuture listObjects(String storeId, ListOb */ public CompletableFuture> listObjectsWithHttpInfo( String storeId, ListObjectsRequest body) throws ApiException { + return listObjectsWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * List all objects of the given type that the user has a relation with + * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ListObjectsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> listObjectsWithHttpInfo( + String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = + listObjectsRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -638,7 +811,8 @@ public CompletableFuture> listObjectsWithHttpIn } } - private HttpRequest.Builder listObjectsRequestBuilder(String storeId, ListObjectsRequest body) throws ApiException { + private HttpRequest.Builder listObjectsRequestBuilder( + String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling listObjects"); @@ -653,7 +827,7 @@ private HttpRequest.Builder listObjectsRequestBuilder(String storeId, ListObject String localVarPath = "/stores/{store_id}/list-objects".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -664,14 +838,16 @@ private HttpRequest.Builder listObjectsRequestBuilder(String storeId, ListObject } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * List all stores * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. @@ -682,8 +858,23 @@ private HttpRequest.Builder listObjectsRequestBuilder(String storeId, ListObject */ public CompletableFuture listStores(Integer pageSize, String continuationToken) throws ApiException { + return listStores(pageSize, continuationToken, memberVarConfiguration); + } + + /** + * List all stores + * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ListStoresResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture listStores( + Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = listStoresRequestBuilder(pageSize, continuationToken); + HttpRequest.Builder localVarRequestBuilder = + listStoresRequestBuilder(pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -716,8 +907,23 @@ public CompletableFuture listStores(Integer pageSize, String */ public CompletableFuture> listStoresWithHttpInfo( Integer pageSize, String continuationToken) throws ApiException { + return listStoresWithHttpInfo(pageSize, continuationToken, memberVarConfiguration); + } + + /** + * List all stores + * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ListStoresResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> listStoresWithHttpInfo( + Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = listStoresRequestBuilder(pageSize, continuationToken); + HttpRequest.Builder localVarRequestBuilder = + listStoresRequestBuilder(pageSize, continuationToken, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -745,8 +951,8 @@ public CompletableFuture> listStoresWithHttpInfo } } - private HttpRequest.Builder listStoresRequestBuilder(Integer pageSize, String continuationToken) - throws ApiException { + private HttpRequest.Builder listStoresRequestBuilder( + Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); @@ -766,22 +972,25 @@ private HttpRequest.Builder listStoresRequestBuilder(Integer pageSize, String co if (localVarQueryStringJoiner.length() != 0) { queryJoiner.add(localVarQueryStringJoiner.toString()); } - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + localVarRequestBuilder.uri( + URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Get tuples from the store that matches a query, without following userset rewrite rules * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). @@ -791,8 +1000,22 @@ private HttpRequest.Builder listStoresRequestBuilder(Integer pageSize, String co * @throws ApiException if fails to make API call */ public CompletableFuture read(String storeId, ReadRequest body) throws ApiException { + return read(storeId, body, memberVarConfiguration); + } + + /** + * Get tuples from the store that matches a query, without following userset rewrite rules + * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ReadResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture read(String storeId, ReadRequest body, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -825,8 +1048,22 @@ public CompletableFuture read(String storeId, ReadRequest body) th */ public CompletableFuture> readWithHttpInfo(String storeId, ReadRequest body) throws ApiException { + return readWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * Get tuples from the store that matches a query, without following userset rewrite rules + * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ReadResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readWithHttpInfo( + String storeId, ReadRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -854,7 +1091,8 @@ public CompletableFuture> readWithHttpInfo(String stor } } - private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body) throws ApiException { + private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling read"); @@ -868,7 +1106,7 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body) String localVarPath = "/stores/{store_id}/read".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -879,14 +1117,16 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body) } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Read assertions for an authorization model ID * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. @@ -897,8 +1137,23 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body) */ public CompletableFuture readAssertions(String storeId, String authorizationModelId) throws ApiException { + return readAssertions(storeId, authorizationModelId, memberVarConfiguration); + } + + /** + * Read assertions for an authorization model ID + * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ReadAssertionsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAssertions( + String storeId, String authorizationModelId, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readAssertionsRequestBuilder(storeId, authorizationModelId); + HttpRequest.Builder localVarRequestBuilder = + readAssertionsRequestBuilder(storeId, authorizationModelId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -931,8 +1186,23 @@ public CompletableFuture readAssertions(String storeId, */ public CompletableFuture> readAssertionsWithHttpInfo( String storeId, String authorizationModelId) throws ApiException { + return readAssertionsWithHttpInfo(storeId, authorizationModelId, memberVarConfiguration); + } + + /** + * Read assertions for an authorization model ID + * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ReadAssertionsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAssertionsWithHttpInfo( + String storeId, String authorizationModelId, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readAssertionsRequestBuilder(storeId, authorizationModelId); + HttpRequest.Builder localVarRequestBuilder = + readAssertionsRequestBuilder(storeId, authorizationModelId, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -960,8 +1230,8 @@ public CompletableFuture> readAssertionsWith } } - private HttpRequest.Builder readAssertionsRequestBuilder(String storeId, String authorizationModelId) - throws ApiException { + private HttpRequest.Builder readAssertionsRequestBuilder( + String storeId, String authorizationModelId, Configuration configuration) throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAssertions"); @@ -978,19 +1248,21 @@ private HttpRequest.Builder readAssertionsRequestBuilder(String storeId, String .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Return a particular version of an authorization model * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). @@ -1001,8 +1273,23 @@ private HttpRequest.Builder readAssertionsRequestBuilder(String storeId, String */ public CompletableFuture readAuthorizationModel(String storeId, String id) throws ApiException { + return readAuthorizationModel(storeId, id, memberVarConfiguration); + } + + /** + * Return a particular version of an authorization model + * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + * @param storeId (required) + * @param id (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ReadAuthorizationModelResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAuthorizationModel( + String storeId, String id, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelRequestBuilder(storeId, id); + HttpRequest.Builder localVarRequestBuilder = + readAuthorizationModelRequestBuilder(storeId, id, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1037,8 +1324,23 @@ public CompletableFuture readAuthorizationModel( */ public CompletableFuture> readAuthorizationModelWithHttpInfo( String storeId, String id) throws ApiException { + return readAuthorizationModelWithHttpInfo(storeId, id, memberVarConfiguration); + } + + /** + * Return a particular version of an authorization model + * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). + * @param storeId (required) + * @param id (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ReadAuthorizationModelResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAuthorizationModelWithHttpInfo( + String storeId, String id, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelRequestBuilder(storeId, id); + HttpRequest.Builder localVarRequestBuilder = + readAuthorizationModelRequestBuilder(storeId, id, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1068,7 +1370,8 @@ public CompletableFuture> readAuthor } } - private HttpRequest.Builder readAuthorizationModelRequestBuilder(String storeId, String id) throws ApiException { + private HttpRequest.Builder readAuthorizationModelRequestBuilder( + String storeId, String id, Configuration configuration) throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAuthorizationModel"); @@ -1084,19 +1387,21 @@ private HttpRequest.Builder readAuthorizationModelRequestBuilder(String storeId, .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{id}", ApiClient.urlEncode(id.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Return all the authorization models for a particular store * The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` @@ -1108,9 +1413,25 @@ private HttpRequest.Builder readAuthorizationModelRequestBuilder(String storeId, */ public CompletableFuture readAuthorizationModels( String storeId, Integer pageSize, String continuationToken) throws ApiException { + return readAuthorizationModels(storeId, pageSize, continuationToken, memberVarConfiguration); + } + + /** + * Return all the authorization models for a particular store + * The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + * @param storeId (required) + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ReadAuthorizationModelsResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readAuthorizationModels( + String storeId, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken); + readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1146,9 +1467,25 @@ public CompletableFuture readAuthorizationModel */ public CompletableFuture> readAuthorizationModelsWithHttpInfo( String storeId, Integer pageSize, String continuationToken) throws ApiException { + return readAuthorizationModelsWithHttpInfo(storeId, pageSize, continuationToken, memberVarConfiguration); + } + + /** + * Return all the authorization models for a particular store + * The ReadAuthorizationModels API will return all the authorization models for a certain store. OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation. ## Example Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like: ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` If there are no more authorization models available, the `continuation_token` field will be empty ```json { \"authorization_models\": [ { \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\", \"type_definitions\": [...] }, { \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\", \"type_definitions\": [...] }, ], \"continuation_token\": \"\" } ``` + * @param storeId (required) + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ReadAuthorizationModelsResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readAuthorizationModelsWithHttpInfo( + String storeId, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken); + readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1179,7 +1516,8 @@ public CompletableFuture> readAutho } private HttpRequest.Builder readAuthorizationModelsRequestBuilder( - String storeId, Integer pageSize, String continuationToken) throws ApiException { + String storeId, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException( @@ -1205,22 +1543,25 @@ private HttpRequest.Builder readAuthorizationModelsRequestBuilder( if (localVarQueryStringJoiner.length() != 0) { queryJoiner.add(localVarQueryStringJoiner.toString()); } - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + localVarRequestBuilder.uri( + URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Return a list of all the tuple changes * The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. @@ -1233,9 +1574,26 @@ private HttpRequest.Builder readAuthorizationModelsRequestBuilder( */ public CompletableFuture readChanges( String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + return readChanges(storeId, type, pageSize, continuationToken, memberVarConfiguration); + } + + /** + * Return a list of all the tuple changes + * The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + * @param storeId (required) + * @param type (optional) + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ReadChangesResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture readChanges( + String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - readChangesRequestBuilder(storeId, type, pageSize, continuationToken); + readChangesRequestBuilder(storeId, type, pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1270,9 +1628,26 @@ public CompletableFuture readChanges( */ public CompletableFuture> readChangesWithHttpInfo( String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + return readChangesWithHttpInfo(storeId, type, pageSize, continuationToken, memberVarConfiguration); + } + + /** + * Return a list of all the tuple changes + * The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty. You can use the `type` parameter to only get the list of tuple changes that affect objects of that type. + * @param storeId (required) + * @param type (optional) + * @param pageSize (optional) + * @param continuationToken (optional) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<ReadChangesResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> readChangesWithHttpInfo( + String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - readChangesRequestBuilder(storeId, type, pageSize, continuationToken); + readChangesRequestBuilder(storeId, type, pageSize, continuationToken, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1301,7 +1676,8 @@ public CompletableFuture> readChangesWithHttpIn } private HttpRequest.Builder readChangesRequestBuilder( - String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { + String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readChanges"); @@ -1328,22 +1704,25 @@ private HttpRequest.Builder readChangesRequestBuilder( if (localVarQueryStringJoiner.length() != 0) { queryJoiner.add(localVarQueryStringJoiner.toString()); } - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + localVarRequestBuilder.uri( + URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Add or delete tuples from the store * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` @@ -1353,8 +1732,22 @@ private HttpRequest.Builder readChangesRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture write(String storeId, WriteRequest body) throws ApiException { + return write(storeId, body, memberVarConfiguration); + } + + /** + * Add or delete tuples from the store + * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<Object> + * @throws ApiException if fails to make API call + */ + public CompletableFuture write(String storeId, WriteRequest body, Configuration configuration) + throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1387,8 +1780,22 @@ public CompletableFuture write(String storeId, WriteRequest body) throws */ public CompletableFuture> writeWithHttpInfo(String storeId, WriteRequest body) throws ApiException { + return writeWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * Add or delete tuples from the store + * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<Object>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeWithHttpInfo( + String storeId, WriteRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1416,7 +1823,8 @@ public CompletableFuture> writeWithHttpInfo(String storeId, } } - private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest body) throws ApiException { + private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling write"); @@ -1430,7 +1838,7 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod String localVarPath = "/stores/{store_id}/write".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1441,14 +1849,16 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Upsert assertions for an authorization model ID * The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. @@ -1460,9 +1870,25 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod */ public CompletableFuture writeAssertions( String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + return writeAssertions(storeId, authorizationModelId, body, memberVarConfiguration); + } + + /** + * Upsert assertions for an authorization model ID + * The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<Void> + * @throws ApiException if fails to make API call + */ + public CompletableFuture writeAssertions( + String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - writeAssertionsRequestBuilder(storeId, authorizationModelId, body); + writeAssertionsRequestBuilder(storeId, authorizationModelId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1487,9 +1913,25 @@ public CompletableFuture writeAssertions( */ public CompletableFuture> writeAssertionsWithHttpInfo( String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + return writeAssertionsWithHttpInfo(storeId, authorizationModelId, body, memberVarConfiguration); + } + + /** + * Upsert assertions for an authorization model ID + * The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. + * @param storeId (required) + * @param authorizationModelId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<Void>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeAssertionsWithHttpInfo( + String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) + throws ApiException { try { HttpRequest.Builder localVarRequestBuilder = - writeAssertionsRequestBuilder(storeId, authorizationModelId, body); + writeAssertionsRequestBuilder(storeId, authorizationModelId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1510,7 +1952,8 @@ public CompletableFuture> writeAssertionsWithHttpInfo( } private HttpRequest.Builder writeAssertionsRequestBuilder( - String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { + String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) + throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling writeAssertions"); @@ -1531,7 +1974,7 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1542,14 +1985,16 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); } return localVarRequestBuilder; } + /** * Create a new authorization model * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` @@ -1560,8 +2005,23 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( */ public CompletableFuture writeAuthorizationModel( String storeId, WriteAuthorizationModelRequest body) throws ApiException { + return writeAuthorizationModel(storeId, body, memberVarConfiguration); + } + + /** + * Create a new authorization model + * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<WriteAuthorizationModelResponse> + * @throws ApiException if fails to make API call + */ + public CompletableFuture writeAuthorizationModel( + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = writeAuthorizationModelRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = + writeAuthorizationModelRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1596,8 +2056,23 @@ public CompletableFuture writeAuthorizationMode */ public CompletableFuture> writeAuthorizationModelWithHttpInfo( String storeId, WriteAuthorizationModelRequest body) throws ApiException { + return writeAuthorizationModelWithHttpInfo(storeId, body, memberVarConfiguration); + } + + /** + * Create a new authorization model + * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` + * @param storeId (required) + * @param body (required) + * @param configuration Override the configuration this OpenFgaApi was constructed with + * @return CompletableFuture<ApiResponse<WriteAuthorizationModelResponse>> + * @throws ApiException if fails to make API call + */ + public CompletableFuture> writeAuthorizationModelWithHttpInfo( + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { try { - HttpRequest.Builder localVarRequestBuilder = writeAuthorizationModelRequestBuilder(storeId, body); + HttpRequest.Builder localVarRequestBuilder = + writeAuthorizationModelRequestBuilder(storeId, body, memberVarConfiguration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1628,7 +2103,7 @@ public CompletableFuture> writeAuth } private HttpRequest.Builder writeAuthorizationModelRequestBuilder( - String storeId, WriteAuthorizationModelRequest body) throws ApiException { + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException( @@ -1644,7 +2119,7 @@ private HttpRequest.Builder writeAuthorizationModelRequestBuilder( String localVarPath = "/stores/{store_id}/authorization-models" .replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1655,8 +2130,9 @@ private HttpRequest.Builder writeAuthorizationModelRequestBuilder( } catch (IOException e) { throw new ApiException(e); } - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); + Duration readTimeout = memberVarConfiguration.getReadTimeout(); + if (readTimeout != null) { + localVarRequestBuilder.timeout(readTimeout); } if (memberVarInterceptor != null) { memberVarInterceptor.accept(localVarRequestBuilder); diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java index 82d76f2..4544bb9 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java @@ -49,7 +49,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ApiClient { private HttpClient.Builder builder; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiException.java b/src/main/java/dev/openfga/sdk/api/client/ApiException.java index d08528d..7a57dc3 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiException.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiException.java @@ -16,7 +16,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ApiException extends Exception { private int code = 0; private HttpHeaders responseHeaders = null; diff --git a/src/main/java/dev/openfga/sdk/api/client/JSON.java b/src/main/java/dev/openfga/sdk/api/client/JSON.java index e4c9f44..38e94ff 100644 --- a/src/main/java/dev/openfga/sdk/api/client/JSON.java +++ b/src/main/java/dev/openfga/sdk/api/client/JSON.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class JSON { private ObjectMapper mapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/Pair.java b/src/main/java/dev/openfga/sdk/api/client/Pair.java index acf13bb..a458742 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Pair.java +++ b/src/main/java/dev/openfga/sdk/api/client/Pair.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Pair { private String name = ""; private String value = ""; diff --git a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java index d24ecce..e964774 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java +++ b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java @@ -21,7 +21,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public abstract class AbstractOpenApiSchema { // store the actual instance of the schema/object diff --git a/src/main/java/dev/openfga/sdk/api/model/Any.java b/src/main/java/dev/openfga/sdk/api/model/Any.java index 76a9abc..f8e4195 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Any.java +++ b/src/main/java/dev/openfga/sdk/api/model/Any.java @@ -30,7 +30,7 @@ @JsonPropertyOrder({Any.JSON_PROPERTY_AT_TYPE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Any extends HashMap { public static final String JSON_PROPERTY_AT_TYPE = "@type"; private String atType; diff --git a/src/main/java/dev/openfga/sdk/api/model/Assertion.java b/src/main/java/dev/openfga/sdk/api/model/Assertion.java index e38c124..317ed27 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Assertion.java +++ b/src/main/java/dev/openfga/sdk/api/model/Assertion.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Assertion.JSON_PROPERTY_TUPLE_KEY, Assertion.JSON_PROPERTY_EXPECTATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Assertion { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java index 1f490eb..05d08e1 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java +++ b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class AuthorizationModel { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java index 9647bad..c182f4a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class CheckRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java index c0bc142..539804c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CheckResponse.JSON_PROPERTY_ALLOWED, CheckResponse.JSON_PROPERTY_RESOLUTION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class CheckResponse { public static final String JSON_PROPERTY_ALLOWED = "allowed"; private Boolean allowed; diff --git a/src/main/java/dev/openfga/sdk/api/model/Computed.java b/src/main/java/dev/openfga/sdk/api/model/Computed.java index b1f3e0d..d7f15bd 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Computed.java +++ b/src/main/java/dev/openfga/sdk/api/model/Computed.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Computed.JSON_PROPERTY_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Computed { public static final String JSON_PROPERTY_USERSET = "userset"; private String userset; diff --git a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java index f8efba5..d03509c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ContextualTupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ContextualTupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java index 2de7c01..a369c6a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CreateStoreRequest.JSON_PROPERTY_NAME}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class CreateStoreRequest { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java index 18e1245..9fafa32 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class CreateStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Difference.java b/src/main/java/dev/openfga/sdk/api/model/Difference.java index 5517504..6335cab 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Difference.java +++ b/src/main/java/dev/openfga/sdk/api/model/Difference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Difference.JSON_PROPERTY_BASE, Difference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Difference { public static final String JSON_PROPERTY_BASE = "base"; private Userset base; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java index 2f6ce27..a1baeeb 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ExpandRequest.JSON_PROPERTY_TUPLE_KEY, ExpandRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ExpandRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java index 520aa69..538c10b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ExpandResponse.JSON_PROPERTY_TREE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ExpandResponse { public static final String JSON_PROPERTY_TREE = "tree"; private UsersetTree tree; diff --git a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java index d57f06d..380a2f1 100644 --- a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class GetStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java index 65a9a24..78268a7 100644 --- a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java @@ -27,7 +27,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class InternalErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private InternalErrorCode code = InternalErrorCode.NO_INTERNAL_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/Leaf.java b/src/main/java/dev/openfga/sdk/api/model/Leaf.java index d996e0e..cd1b94a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Leaf.java +++ b/src/main/java/dev/openfga/sdk/api/model/Leaf.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Leaf.JSON_PROPERTY_USERS, Leaf.JSON_PROPERTY_COMPUTED, Leaf.JSON_PROPERTY_TUPLE_TO_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Leaf { public static final String JSON_PROPERTY_USERS = "users"; private Users users; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java index f7d4610..696b194 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ListObjectsRequest { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java index ab4e2c7..56c6ad8 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListObjectsResponse.JSON_PROPERTY_OBJECTS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ListObjectsResponse { public static final String JSON_PROPERTY_OBJECTS = "objects"; private List objects = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java index 61fb9a2..753fb8f 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListStoresResponse.JSON_PROPERTY_STORES, ListStoresResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ListStoresResponse { public static final String JSON_PROPERTY_STORES = "stores"; private List stores = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Metadata.java b/src/main/java/dev/openfga/sdk/api/model/Metadata.java index 667d413..4091a70 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Metadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/Metadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Metadata.JSON_PROPERTY_RELATIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Metadata { public static final String JSON_PROPERTY_RELATIONS = "relations"; private Map relations = new HashMap<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Node.java b/src/main/java/dev/openfga/sdk/api/model/Node.java index c1886fd..095fc14 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Node.java +++ b/src/main/java/dev/openfga/sdk/api/model/Node.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Node { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/Nodes.java b/src/main/java/dev/openfga/sdk/api/model/Nodes.java index 578e8f7..dee2f00 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Nodes.java +++ b/src/main/java/dev/openfga/sdk/api/model/Nodes.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Nodes.JSON_PROPERTY_NODES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Nodes { public static final String JSON_PROPERTY_NODES = "nodes"; private List nodes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java index 977c887..9374ac7 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java +++ b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ObjectRelation.JSON_PROPERTY_OBJECT, ObjectRelation.JSON_PROPERTY_RELATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ObjectRelation { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java index 1dbd369..c69051a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class PathUnknownErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private NotFoundErrorCode code = NotFoundErrorCode.NO_NOT_FOUND_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java index 31d03da..e919032 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadAssertionsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java index 3ba4423..d743e35 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ReadAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL = "authorization_model"; private AuthorizationModel authorizationModel; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java index 582f6c2..310a232 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadAuthorizationModelsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODELS = "authorization_models"; private List authorizationModels = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java index dd8458b..5408dbc 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadChangesResponse.JSON_PROPERTY_CHANGES, ReadChangesResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadChangesResponse { public static final String JSON_PROPERTY_CHANGES = "changes"; private List changes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java index a66f4b5..308c39c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java index c047bb5..4ab79b3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadResponse.JSON_PROPERTY_TUPLES, ReadResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ReadResponse { public static final String JSON_PROPERTY_TUPLES = "tuples"; private List tuples = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java index bbeb096..6451d42 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({RelationMetadata.JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class RelationMetadata { public static final String JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES = "directly_related_user_types"; private List directlyRelatedUserTypes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java index 0171bea..3adce54 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class RelationReference { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Status.java b/src/main/java/dev/openfga/sdk/api/model/Status.java index d54cccf..c2ee281 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Status.java +++ b/src/main/java/dev/openfga/sdk/api/model/Status.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Status.JSON_PROPERTY_CODE, Status.JSON_PROPERTY_MESSAGE, Status.JSON_PROPERTY_DETAILS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Status { public static final String JSON_PROPERTY_CODE = "code"; private Integer code; diff --git a/src/main/java/dev/openfga/sdk/api/model/Store.java b/src/main/java/dev/openfga/sdk/api/model/Store.java index 2aa2ae3..dc82bd1 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Store.java +++ b/src/main/java/dev/openfga/sdk/api/model/Store.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Store { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Tuple.java b/src/main/java/dev/openfga/sdk/api/model/Tuple.java index d48439c..109243d 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Tuple.java +++ b/src/main/java/dev/openfga/sdk/api/model/Tuple.java @@ -27,7 +27,7 @@ @JsonPropertyOrder({Tuple.JSON_PROPERTY_KEY, Tuple.JSON_PROPERTY_TIMESTAMP}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Tuple { public static final String JSON_PROPERTY_KEY = "key"; private TupleKey key; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java index b8fe4fc..68ac6ce 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class TupleChange { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java index 069f509..34e2b41 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKey.JSON_PROPERTY_OBJECT, TupleKey.JSON_PROPERTY_RELATION, TupleKey.JSON_PROPERTY_USER}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class TupleKey { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java index 1a45990..101c51a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class TupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java index 8ff7334..800d123 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({TupleToUserset.JSON_PROPERTY_TUPLESET, TupleToUserset.JSON_PROPERTY_COMPUTED_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class TupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private ObjectRelation tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java index 6d452d8..ccc5160 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java +++ b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class TypeDefinition { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Users.java b/src/main/java/dev/openfga/sdk/api/model/Users.java index 3c9122f..2e41362 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Users.java +++ b/src/main/java/dev/openfga/sdk/api/model/Users.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Users.JSON_PROPERTY_USERS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Users { public static final String JSON_PROPERTY_USERS = "users"; private List users = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Userset.java b/src/main/java/dev/openfga/sdk/api/model/Userset.java index 799bced..1e17f8d 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Userset.java +++ b/src/main/java/dev/openfga/sdk/api/model/Userset.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Userset { public static final String JSON_PROPERTY_THIS = "this"; private Object _this; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java index 1cff619..3ffe75c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTree.JSON_PROPERTY_ROOT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class UsersetTree { public static final String JSON_PROPERTY_ROOT = "root"; private Node root; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java index f712e52..79e23a2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTreeDifference.JSON_PROPERTY_BASE, UsersetTreeDifference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class UsersetTreeDifference { public static final String JSON_PROPERTY_BASE = "base"; private Node base; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java index 56dc456..b443ac3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({UsersetTreeTupleToUserset.JSON_PROPERTY_TUPLESET, UsersetTreeTupleToUserset.JSON_PROPERTY_COMPUTED}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class UsersetTreeTupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private String tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/Usersets.java b/src/main/java/dev/openfga/sdk/api/model/Usersets.java index 21556ab..dd9f2f2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Usersets.java +++ b/src/main/java/dev/openfga/sdk/api/model/Usersets.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Usersets.JSON_PROPERTY_CHILD}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class Usersets { public static final String JSON_PROPERTY_CHILD = "child"; private List child = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java index 0328dcb..b941280 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class ValidationErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private ErrorCode code = ErrorCode.NO_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java index 4cd7453..acb3eb0 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAssertionsRequest.JSON_PROPERTY_ASSERTIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class WriteAssertionsRequest { public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; private List assertions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java index 26c0993..6c530a5 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class WriteAuthorizationModelRequest { public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; private List typeDefinitions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java index 7a98b5d..690e1f1 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class WriteAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java index 8e0c60c..c19bf55 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T20:03:24.252549Z[Etc/UTC]") + date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") public class WriteRequest { public static final String JSON_PROPERTY_WRITES = "writes"; private TupleKeys writes; From 05ed244bfc38f6c18047a1b3003ca821fe75ee6e Mon Sep 17 00:00:00 2001 From: "Justin \"J.R.\" Hill" Date: Tue, 22 Aug 2023 16:48:11 -0700 Subject: [PATCH 3/5] feat(java): Introduce ConfigurationOverride class --- .openapi-generator/FILES | 1 + .../java/dev/openfga/sdk/api/OpenFgaApi.java | 663 +++++++++++++----- .../dev/openfga/sdk/api/client/ApiClient.java | 2 +- .../openfga/sdk/api/client/ApiException.java | 2 +- .../sdk/api/client/BaseConfiguration.java | 3 - .../openfga/sdk/api/client/Configuration.java | 37 +- .../sdk/api/client/ConfigurationOverride.java | 138 ++++ .../java/dev/openfga/sdk/api/client/JSON.java | 2 +- .../java/dev/openfga/sdk/api/client/Pair.java | 2 +- .../sdk/api/model/AbstractOpenApiSchema.java | 2 +- .../java/dev/openfga/sdk/api/model/Any.java | 2 +- .../dev/openfga/sdk/api/model/Assertion.java | 2 +- .../sdk/api/model/AuthorizationModel.java | 2 +- .../openfga/sdk/api/model/CheckRequest.java | 2 +- .../openfga/sdk/api/model/CheckResponse.java | 2 +- .../dev/openfga/sdk/api/model/Computed.java | 2 +- .../sdk/api/model/ContextualTupleKeys.java | 2 +- .../sdk/api/model/CreateStoreRequest.java | 2 +- .../sdk/api/model/CreateStoreResponse.java | 2 +- .../dev/openfga/sdk/api/model/Difference.java | 2 +- .../openfga/sdk/api/model/ExpandRequest.java | 2 +- .../openfga/sdk/api/model/ExpandResponse.java | 2 +- .../sdk/api/model/GetStoreResponse.java | 2 +- .../model/InternalErrorMessageResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/Leaf.java | 2 +- .../sdk/api/model/ListObjectsRequest.java | 2 +- .../sdk/api/model/ListObjectsResponse.java | 2 +- .../sdk/api/model/ListStoresResponse.java | 2 +- .../dev/openfga/sdk/api/model/Metadata.java | 2 +- .../java/dev/openfga/sdk/api/model/Node.java | 2 +- .../java/dev/openfga/sdk/api/model/Nodes.java | 2 +- .../openfga/sdk/api/model/ObjectRelation.java | 2 +- .../PathUnknownErrorMessageResponse.java | 2 +- .../sdk/api/model/ReadAssertionsResponse.java | 2 +- .../model/ReadAuthorizationModelResponse.java | 2 +- .../ReadAuthorizationModelsResponse.java | 2 +- .../sdk/api/model/ReadChangesResponse.java | 2 +- .../openfga/sdk/api/model/ReadRequest.java | 2 +- .../openfga/sdk/api/model/ReadResponse.java | 2 +- .../sdk/api/model/RelationMetadata.java | 2 +- .../sdk/api/model/RelationReference.java | 2 +- .../dev/openfga/sdk/api/model/Status.java | 2 +- .../java/dev/openfga/sdk/api/model/Store.java | 2 +- .../java/dev/openfga/sdk/api/model/Tuple.java | 2 +- .../openfga/sdk/api/model/TupleChange.java | 2 +- .../dev/openfga/sdk/api/model/TupleKey.java | 2 +- .../dev/openfga/sdk/api/model/TupleKeys.java | 2 +- .../openfga/sdk/api/model/TupleToUserset.java | 2 +- .../openfga/sdk/api/model/TypeDefinition.java | 2 +- .../java/dev/openfga/sdk/api/model/Users.java | 2 +- .../dev/openfga/sdk/api/model/Userset.java | 2 +- .../openfga/sdk/api/model/UsersetTree.java | 2 +- .../sdk/api/model/UsersetTreeDifference.java | 2 +- .../api/model/UsersetTreeTupleToUserset.java | 2 +- .../dev/openfga/sdk/api/model/Usersets.java | 2 +- .../model/ValidationErrorMessageResponse.java | 2 +- .../sdk/api/model/WriteAssertionsRequest.java | 2 +- .../model/WriteAuthorizationModelRequest.java | 2 +- .../WriteAuthorizationModelResponse.java | 2 +- .../openfga/sdk/api/model/WriteRequest.java | 2 +- 60 files changed, 694 insertions(+), 258 deletions(-) create mode 100644 src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 503fc48..08f0b5a 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -83,6 +83,7 @@ src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java src/main/java/dev/openfga/sdk/api/client/ClientCredentials.java src/main/java/dev/openfga/sdk/api/client/Configuration.java src/main/java/dev/openfga/sdk/api/client/Configuration.java +src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java src/main/java/dev/openfga/sdk/api/client/CredentialsMethod.java src/main/java/dev/openfga/sdk/api/client/JSON.java src/main/java/dev/openfga/sdk/api/client/Pair.java diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index 212bd0e..4a381f1 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -18,6 +18,7 @@ import dev.openfga.sdk.api.client.ApiException; import dev.openfga.sdk.api.client.ApiResponse; import dev.openfga.sdk.api.client.Configuration; +import dev.openfga.sdk.api.client.ConfigurationOverride; import dev.openfga.sdk.api.client.Pair; import dev.openfga.sdk.api.model.CheckRequest; import dev.openfga.sdk.api.model.CheckResponse; @@ -39,6 +40,7 @@ import dev.openfga.sdk.api.model.WriteAuthorizationModelRequest; import dev.openfga.sdk.api.model.WriteAuthorizationModelResponse; import dev.openfga.sdk.api.model.WriteRequest; +import dev.openfga.sdk.errors.FgaInvalidParameterException; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -54,11 +56,11 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class OpenFgaApi { private final HttpClient memberVarHttpClient; private final ObjectMapper memberVarObjectMapper; - private final Configuration memberVarConfiguration; + private final Configuration configuration; private final Consumer memberVarInterceptor; private final Consumer> memberVarResponseInterceptor; private final Consumer> memberVarAsyncResponseInterceptor; @@ -66,7 +68,7 @@ public class OpenFgaApi { public OpenFgaApi(ApiClient apiClient, Configuration configuration) { memberVarHttpClient = apiClient.getHttpClient(); memberVarObjectMapper = apiClient.getObjectMapper(); - memberVarConfiguration = configuration; + this.configuration = configuration; memberVarInterceptor = apiClient.getRequestInterceptor(); memberVarResponseInterceptor = apiClient.getResponseInterceptor(); memberVarAsyncResponseInterceptor = apiClient.getAsyncResponseInterceptor(); @@ -92,8 +94,9 @@ private String formatExceptionMessage(String operationId, int statusCode, String * @return CompletableFuture<CheckResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture check(String storeId, CheckRequest body) throws ApiException { - return check(storeId, body, memberVarConfiguration); + public CompletableFuture check(String storeId, CheckRequest body) + throws ApiException, FgaInvalidParameterException { + return check(storeId, body, this.configuration); } /** @@ -101,12 +104,18 @@ public CompletableFuture check(String storeId, CheckRequest body) * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<CheckResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture check(String storeId, CheckRequest body, Configuration configuration) - throws ApiException { + public CompletableFuture check( + String storeId, CheckRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return check(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture check(String storeId, CheckRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body, configuration); return memberVarHttpClient @@ -140,8 +149,8 @@ public CompletableFuture check(String storeId, CheckRequest body, * @throws ApiException if fails to make API call */ public CompletableFuture> checkWithHttpInfo(String storeId, CheckRequest body) - throws ApiException { - return checkWithHttpInfo(storeId, body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return checkWithHttpInfo(storeId, body, this.configuration); } /** @@ -149,14 +158,21 @@ public CompletableFuture> checkWithHttpInfo(String st * The Check API queries to check if the user has a certain relationship with an object in a certain store. A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance. The response will return whether the relationship exists in the field `allowed`. ## Example In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple ```json { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ``` the Check API can be used with the following request body: ```json { \"tuple_key\": { \"user\": \"user:anne\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"contextual_tuples\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"member\", \"object\": \"time_slot:office_hours\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will include `{ \"allowed\": true }` if there is a relationship and `{ \"allowed\": false }` if there isn't. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<CheckResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> checkWithHttpInfo( - String storeId, CheckRequest body, Configuration configuration) throws ApiException { + String storeId, CheckRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return checkWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> checkWithHttpInfo( + String storeId, CheckRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = checkRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -185,7 +201,7 @@ public CompletableFuture> checkWithHttpInfo( } private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling check"); @@ -195,11 +211,14 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod throw new ApiException(400, "Missing the required parameter 'body' when calling check"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/check".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -210,7 +229,7 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -227,20 +246,27 @@ private HttpRequest.Builder checkRequestBuilder(String storeId, CheckRequest bod * @return CompletableFuture<CreateStoreResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture createStore(CreateStoreRequest body) throws ApiException { - return createStore(body, memberVarConfiguration); + public CompletableFuture createStore(CreateStoreRequest body) + throws ApiException, FgaInvalidParameterException { + return createStore(body, this.configuration); } /** * Create a store * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<CreateStoreResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture createStore(CreateStoreRequest body, Configuration configuration) - throws ApiException { + public CompletableFuture createStore( + CreateStoreRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return createStore(body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture createStore(CreateStoreRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body, configuration); return memberVarHttpClient @@ -273,22 +299,28 @@ public CompletableFuture createStore(CreateStoreRequest bod * @throws ApiException if fails to make API call */ public CompletableFuture> createStoreWithHttpInfo(CreateStoreRequest body) - throws ApiException { - return createStoreWithHttpInfo(body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return createStoreWithHttpInfo(body, this.configuration); } /** * Create a store * Create a unique OpenFGA store which will be used to store authorization models and relationship tuples. * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<CreateStoreResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> createStoreWithHttpInfo( - CreateStoreRequest body, Configuration configuration) throws ApiException { + CreateStoreRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return createStoreWithHttpInfo(body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> createStoreWithHttpInfo( + CreateStoreRequest body, Configuration configuration) throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = createStoreRequestBuilder(body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -317,17 +349,20 @@ public CompletableFuture> createStoreWithHttpIn } private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'body' is set if (body == null) { throw new ApiException(400, "Missing the required parameter 'body' when calling createStore"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores"; - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -338,7 +373,7 @@ private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body, C } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -355,19 +390,25 @@ private HttpRequest.Builder createStoreRequestBuilder(CreateStoreRequest body, C * @return CompletableFuture<Void> * @throws ApiException if fails to make API call */ - public CompletableFuture deleteStore(String storeId) throws ApiException { - return deleteStore(storeId, memberVarConfiguration); + public CompletableFuture deleteStore(String storeId) throws ApiException, FgaInvalidParameterException { + return deleteStore(storeId, this.configuration); } /** * Delete a store * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. * @param storeId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<Void> * @throws ApiException if fails to make API call */ - public CompletableFuture deleteStore(String storeId, Configuration configuration) throws ApiException { + public CompletableFuture deleteStore(String storeId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return deleteStore(storeId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture deleteStore(String storeId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId, configuration); return memberVarHttpClient @@ -390,22 +431,29 @@ public CompletableFuture deleteStore(String storeId, Configuration configu * @return CompletableFuture<ApiResponse<Void>> * @throws ApiException if fails to make API call */ - public CompletableFuture> deleteStoreWithHttpInfo(String storeId) throws ApiException { - return deleteStoreWithHttpInfo(storeId, memberVarConfiguration); + public CompletableFuture> deleteStoreWithHttpInfo(String storeId) + throws ApiException, FgaInvalidParameterException { + return deleteStoreWithHttpInfo(storeId, this.configuration); } /** * Delete a store * Delete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models. * @param storeId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<Void>> * @throws ApiException if fails to make API call */ - public CompletableFuture> deleteStoreWithHttpInfo(String storeId, Configuration configuration) - throws ApiException { + public CompletableFuture> deleteStoreWithHttpInfo( + String storeId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return deleteStoreWithHttpInfo(storeId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> deleteStoreWithHttpInfo(String storeId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = deleteStoreRequestBuilder(storeId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -426,22 +474,25 @@ public CompletableFuture> deleteStoreWithHttpInfo(String store } private HttpRequest.Builder deleteStoreRequestBuilder(String storeId, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling deleteStore"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -459,8 +510,9 @@ private HttpRequest.Builder deleteStoreRequestBuilder(String storeId, Configurat * @return CompletableFuture<ExpandResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture expand(String storeId, ExpandRequest body) throws ApiException { - return expand(storeId, body, memberVarConfiguration); + public CompletableFuture expand(String storeId, ExpandRequest body) + throws ApiException, FgaInvalidParameterException { + return expand(storeId, body, this.configuration); } /** @@ -468,12 +520,18 @@ public CompletableFuture expand(String storeId, ExpandRequest bo * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ExpandResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture expand(String storeId, ExpandRequest body, Configuration configuration) - throws ApiException { + public CompletableFuture expand( + String storeId, ExpandRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return expand(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture expand(String storeId, ExpandRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body, configuration); return memberVarHttpClient @@ -507,8 +565,8 @@ public CompletableFuture expand(String storeId, ExpandRequest bo * @throws ApiException if fails to make API call */ public CompletableFuture> expandWithHttpInfo(String storeId, ExpandRequest body) - throws ApiException { - return expandWithHttpInfo(storeId, body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return expandWithHttpInfo(storeId, body, this.configuration); } /** @@ -516,14 +574,21 @@ public CompletableFuture> expandWithHttpInfo(String * The Expand API will return all users and usersets that have certain relationship with an object in a certain store. This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned. Body parameters `tuple_key.object` and `tuple_key.relation` are all required. The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes. ## Example To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` OpenFGA's response will be a userset tree of the users and usersets that have read access to the document. ```json { \"tree\":{ \"root\":{ \"type\":\"document:2021-budget#reader\", \"union\":{ \"nodes\":[ { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"users\":{ \"users\":[ \"user:bob\" ] } } }, { \"type\":\"document:2021-budget#reader\", \"leaf\":{ \"computed\":{ \"userset\":\"document:2021-budget#writer\" } } } ] } } } } ``` The caller can then call expand API for the `writer` relationship for the `document:2021-budget`. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ExpandResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> expandWithHttpInfo( - String storeId, ExpandRequest body, Configuration configuration) throws ApiException { + String storeId, ExpandRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return expandWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> expandWithHttpInfo( + String storeId, ExpandRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = expandRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -552,7 +617,7 @@ public CompletableFuture> expandWithHttpInfo( } private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling expand"); @@ -562,12 +627,15 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b throw new ApiException(400, "Missing the required parameter 'body' when calling expand"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/expand".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -578,7 +646,7 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -595,20 +663,26 @@ private HttpRequest.Builder expandRequestBuilder(String storeId, ExpandRequest b * @return CompletableFuture<GetStoreResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture getStore(String storeId) throws ApiException { - return getStore(storeId, memberVarConfiguration); + public CompletableFuture getStore(String storeId) + throws ApiException, FgaInvalidParameterException { + return getStore(storeId, this.configuration); } /** * Get a store * Returns an OpenFGA store by its identifier * @param storeId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<GetStoreResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture getStore(String storeId, Configuration configuration) - throws ApiException { + public CompletableFuture getStore(String storeId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return getStore(storeId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture getStore(String storeId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId, configuration); return memberVarHttpClient @@ -640,22 +714,29 @@ public CompletableFuture getStore(String storeId, Configuratio * @return CompletableFuture<ApiResponse<GetStoreResponse>> * @throws ApiException if fails to make API call */ - public CompletableFuture> getStoreWithHttpInfo(String storeId) throws ApiException { - return getStoreWithHttpInfo(storeId, memberVarConfiguration); + public CompletableFuture> getStoreWithHttpInfo(String storeId) + throws ApiException, FgaInvalidParameterException { + return getStoreWithHttpInfo(storeId, this.configuration); } /** * Get a store * Returns an OpenFGA store by its identifier * @param storeId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<GetStoreResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> getStoreWithHttpInfo( - String storeId, Configuration configuration) throws ApiException { + String storeId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return getStoreWithHttpInfo(storeId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> getStoreWithHttpInfo( + String storeId, Configuration configuration) throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = getStoreRequestBuilder(storeId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -684,22 +765,25 @@ public CompletableFuture> getStoreWithHttpInfo( } private HttpRequest.Builder getStoreRequestBuilder(String storeId, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling getStore"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -718,8 +802,8 @@ private HttpRequest.Builder getStoreRequestBuilder(String storeId, Configuration * @throws ApiException if fails to make API call */ public CompletableFuture listObjects(String storeId, ListObjectsRequest body) - throws ApiException { - return listObjects(storeId, body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return listObjects(storeId, body, this.configuration); } /** @@ -727,12 +811,19 @@ public CompletableFuture listObjects(String storeId, ListOb * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ListObjectsResponse> * @throws ApiException if fails to make API call */ public CompletableFuture listObjects( - String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { + String storeId, ListObjectsRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return listObjects(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture listObjects( + String storeId, ListObjectsRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body, configuration); return memberVarHttpClient @@ -766,8 +857,8 @@ public CompletableFuture listObjects( * @throws ApiException if fails to make API call */ public CompletableFuture> listObjectsWithHttpInfo( - String storeId, ListObjectsRequest body) throws ApiException { - return listObjectsWithHttpInfo(storeId, body, memberVarConfiguration); + String storeId, ListObjectsRequest body) throws ApiException, FgaInvalidParameterException { + return listObjectsWithHttpInfo(storeId, body, this.configuration); } /** @@ -775,15 +866,21 @@ public CompletableFuture> listObjectsWithHttpIn * The ListObjects API returns a list of all the objects of the given type that the user has a relation with. To achieve this, both the store tuples and the authorization model are used. An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance. You may also specify `contextual_tuples` that will be treated as regular tuples. The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `<type>:<id>` (e.g. \"document:roadmap\"). The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first. * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ListObjectsResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> listObjectsWithHttpInfo( - String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { + String storeId, ListObjectsRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return listObjectsWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> listObjectsWithHttpInfo( + String storeId, ListObjectsRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = - listObjectsRequestBuilder(storeId, body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = listObjectsRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -812,7 +909,8 @@ public CompletableFuture> listObjectsWithHttpIn } private HttpRequest.Builder listObjectsRequestBuilder( - String storeId, ListObjectsRequest body, Configuration configuration) throws ApiException { + String storeId, ListObjectsRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling listObjects"); @@ -822,12 +920,15 @@ private HttpRequest.Builder listObjectsRequestBuilder( throw new ApiException(400, "Missing the required parameter 'body' when calling listObjects"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/list-objects".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -838,7 +939,7 @@ private HttpRequest.Builder listObjectsRequestBuilder( } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -857,8 +958,8 @@ private HttpRequest.Builder listObjectsRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture listStores(Integer pageSize, String continuationToken) - throws ApiException { - return listStores(pageSize, continuationToken, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return listStores(pageSize, continuationToken, this.configuration); } /** @@ -866,12 +967,19 @@ public CompletableFuture listStores(Integer pageSize, String * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ListStoresResponse> * @throws ApiException if fails to make API call */ public CompletableFuture listStores( - Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { + Integer pageSize, String continuationToken, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return listStores(pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture listStores( + Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = listStoresRequestBuilder(pageSize, continuationToken, configuration); @@ -906,8 +1014,8 @@ public CompletableFuture listStores( * @throws ApiException if fails to make API call */ public CompletableFuture> listStoresWithHttpInfo( - Integer pageSize, String continuationToken) throws ApiException { - return listStoresWithHttpInfo(pageSize, continuationToken, memberVarConfiguration); + Integer pageSize, String continuationToken) throws ApiException, FgaInvalidParameterException { + return listStoresWithHttpInfo(pageSize, continuationToken, this.configuration); } /** @@ -915,15 +1023,22 @@ public CompletableFuture> listStoresWithHttpInfo * Returns a paginated list of OpenFGA stores and a continuation token to get additional stores. The continuation token will be empty if there are no more stores. * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ListStoresResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> listStoresWithHttpInfo( - Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { + Integer pageSize, String continuationToken, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return listStoresWithHttpInfo(pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> listStoresWithHttpInfo( + Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - listStoresRequestBuilder(pageSize, continuationToken, memberVarConfiguration); + listStoresRequestBuilder(pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -952,7 +1067,11 @@ public CompletableFuture> listStoresWithHttpInfo } private HttpRequest.Builder listStoresRequestBuilder( - Integer pageSize, String continuationToken, Configuration configuration) throws ApiException { + Integer pageSize, String continuationToken, Configuration configuration) + throws ApiException, FgaInvalidParameterException { + + // verify the Configuration is valid + configuration.assertValid(); HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); @@ -973,15 +1092,15 @@ private HttpRequest.Builder listStoresRequestBuilder( queryJoiner.add(localVarQueryStringJoiner.toString()); } localVarRequestBuilder.uri( - URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); + URI.create(configuration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -999,8 +1118,9 @@ private HttpRequest.Builder listStoresRequestBuilder( * @return CompletableFuture<ReadResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture read(String storeId, ReadRequest body) throws ApiException { - return read(storeId, body, memberVarConfiguration); + public CompletableFuture read(String storeId, ReadRequest body) + throws ApiException, FgaInvalidParameterException { + return read(storeId, body, this.configuration); } /** @@ -1008,12 +1128,18 @@ public CompletableFuture read(String storeId, ReadRequest body) th * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ReadResponse> * @throws ApiException if fails to make API call */ - public CompletableFuture read(String storeId, ReadRequest body, Configuration configuration) - throws ApiException { + public CompletableFuture read( + String storeId, ReadRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return read(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture read(String storeId, ReadRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body, configuration); return memberVarHttpClient @@ -1047,8 +1173,8 @@ public CompletableFuture read(String storeId, ReadRequest body, Co * @throws ApiException if fails to make API call */ public CompletableFuture> readWithHttpInfo(String storeId, ReadRequest body) - throws ApiException { - return readWithHttpInfo(storeId, body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return readWithHttpInfo(storeId, body, this.configuration); } /** @@ -1056,14 +1182,21 @@ public CompletableFuture> readWithHttpInfo(String stor * The Read API will return the tuples for a certain store that match a query filter specified in the body of the request. It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. In the body: 1. `tuple_key` is optional. If not specified, it will return all tuples in the store. 2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`). 3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. ## Examples ### Query for all objects in a type definition To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of ```json { \"tuple_key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:\" } } ``` The API will return tuples and a continuation token, something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store. The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\", \"relation\": \"reader\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them. ### Query for all users with all relationships for a particular document To query for all users that have any relationship with `document:2021-budget`, call read API with body of ```json { \"tuple_key\": { \"object\": \"document:2021-budget\" } } ``` The API will return something like ```json { \"tuples\": [ { \"key\": { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-05T13:42:12.356Z\" }, { \"key\": { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" }, \"timestamp\": \"2021-10-06T15:32:11.128Z\" } ], \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\" } ``` This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`). * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ReadResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> readWithHttpInfo( - String storeId, ReadRequest body, Configuration configuration) throws ApiException { + String storeId, ReadRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> readWithHttpInfo( + String storeId, ReadRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = readRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1092,7 +1225,7 @@ public CompletableFuture> readWithHttpInfo( } private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling read"); @@ -1102,11 +1235,14 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body, throw new ApiException(400, "Missing the required parameter 'body' when calling read"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/read".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1117,7 +1253,7 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body, } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1136,8 +1272,8 @@ private HttpRequest.Builder readRequestBuilder(String storeId, ReadRequest body, * @throws ApiException if fails to make API call */ public CompletableFuture readAssertions(String storeId, String authorizationModelId) - throws ApiException { - return readAssertions(storeId, authorizationModelId, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return readAssertions(storeId, authorizationModelId, this.configuration); } /** @@ -1145,12 +1281,19 @@ public CompletableFuture readAssertions(String storeId, * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. * @param storeId (required) * @param authorizationModelId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ReadAssertionsResponse> * @throws ApiException if fails to make API call */ public CompletableFuture readAssertions( - String storeId, String authorizationModelId, Configuration configuration) throws ApiException { + String storeId, String authorizationModelId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAssertions(storeId, authorizationModelId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture readAssertions( + String storeId, String authorizationModelId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = readAssertionsRequestBuilder(storeId, authorizationModelId, configuration); @@ -1185,8 +1328,8 @@ public CompletableFuture readAssertions( * @throws ApiException if fails to make API call */ public CompletableFuture> readAssertionsWithHttpInfo( - String storeId, String authorizationModelId) throws ApiException { - return readAssertionsWithHttpInfo(storeId, authorizationModelId, memberVarConfiguration); + String storeId, String authorizationModelId) throws ApiException, FgaInvalidParameterException { + return readAssertionsWithHttpInfo(storeId, authorizationModelId, this.configuration); } /** @@ -1194,15 +1337,23 @@ public CompletableFuture> readAssertionsWith * The ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. An assertion is an object that contains a tuple key, and the expectation of whether a call to the Check API of that tuple key will return true or false. * @param storeId (required) * @param authorizationModelId (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ReadAssertionsResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> readAssertionsWithHttpInfo( - String storeId, String authorizationModelId, Configuration configuration) throws ApiException { + String storeId, String authorizationModelId, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAssertionsWithHttpInfo( + storeId, authorizationModelId, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> readAssertionsWithHttpInfo( + String storeId, String authorizationModelId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - readAssertionsRequestBuilder(storeId, authorizationModelId, memberVarConfiguration); + readAssertionsRequestBuilder(storeId, authorizationModelId, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1231,7 +1382,8 @@ public CompletableFuture> readAssertionsWith } private HttpRequest.Builder readAssertionsRequestBuilder( - String storeId, String authorizationModelId, Configuration configuration) throws ApiException { + String storeId, String authorizationModelId, Configuration configuration) + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAssertions"); @@ -1242,18 +1394,21 @@ private HttpRequest.Builder readAssertionsRequestBuilder( 400, "Missing the required parameter 'authorizationModelId' when calling readAssertions"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/assertions/{authorization_model_id}" .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1272,8 +1427,8 @@ private HttpRequest.Builder readAssertionsRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture readAuthorizationModel(String storeId, String id) - throws ApiException { - return readAuthorizationModel(storeId, id, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModel(storeId, id, this.configuration); } /** @@ -1281,12 +1436,18 @@ public CompletableFuture readAuthorizationModel( * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). * @param storeId (required) * @param id (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ReadAuthorizationModelResponse> * @throws ApiException if fails to make API call */ public CompletableFuture readAuthorizationModel( - String storeId, String id, Configuration configuration) throws ApiException { + String storeId, String id, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModel(storeId, id, this.configuration.override(configurationOverride)); + } + + private CompletableFuture readAuthorizationModel( + String storeId, String id, Configuration configuration) throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelRequestBuilder(storeId, id, configuration); @@ -1323,8 +1484,8 @@ public CompletableFuture readAuthorizationModel( * @throws ApiException if fails to make API call */ public CompletableFuture> readAuthorizationModelWithHttpInfo( - String storeId, String id) throws ApiException { - return readAuthorizationModelWithHttpInfo(storeId, id, memberVarConfiguration); + String storeId, String id) throws ApiException, FgaInvalidParameterException { + return readAuthorizationModelWithHttpInfo(storeId, id, this.configuration); } /** @@ -1332,15 +1493,21 @@ public CompletableFuture> readAuthor * The ReadAuthorizationModel API returns an authorization model by its identifier. The response will return the authorization model for the particular version. ## Example To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return: ```json { \"authorization_model\":{ \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\", \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } } ``` In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`). * @param storeId (required) * @param id (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ReadAuthorizationModelResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> readAuthorizationModelWithHttpInfo( - String storeId, String id, Configuration configuration) throws ApiException { + String storeId, String id, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModelWithHttpInfo(storeId, id, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> readAuthorizationModelWithHttpInfo( + String storeId, String id, Configuration configuration) throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - readAuthorizationModelRequestBuilder(storeId, id, memberVarConfiguration); + readAuthorizationModelRequestBuilder(storeId, id, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1371,7 +1538,7 @@ public CompletableFuture> readAuthor } private HttpRequest.Builder readAuthorizationModelRequestBuilder( - String storeId, String id, Configuration configuration) throws ApiException { + String storeId, String id, Configuration configuration) throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readAuthorizationModel"); @@ -1381,18 +1548,21 @@ private HttpRequest.Builder readAuthorizationModelRequestBuilder( throw new ApiException(400, "Missing the required parameter 'id' when calling readAuthorizationModel"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/authorization-models/{id}" .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{id}", ApiClient.urlEncode(id.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1412,8 +1582,9 @@ private HttpRequest.Builder readAuthorizationModelRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture readAuthorizationModels( - String storeId, Integer pageSize, String continuationToken) throws ApiException { - return readAuthorizationModels(storeId, pageSize, continuationToken, memberVarConfiguration); + String storeId, Integer pageSize, String continuationToken) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModels(storeId, pageSize, continuationToken, this.configuration); } /** @@ -1422,13 +1593,20 @@ public CompletableFuture readAuthorizationModel * @param storeId (required) * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ReadAuthorizationModelsResponse> * @throws ApiException if fails to make API call */ public CompletableFuture readAuthorizationModels( + String storeId, Integer pageSize, String continuationToken, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModels( + storeId, pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture readAuthorizationModels( String storeId, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken, configuration); @@ -1466,8 +1644,9 @@ public CompletableFuture readAuthorizationModel * @throws ApiException if fails to make API call */ public CompletableFuture> readAuthorizationModelsWithHttpInfo( - String storeId, Integer pageSize, String continuationToken) throws ApiException { - return readAuthorizationModelsWithHttpInfo(storeId, pageSize, continuationToken, memberVarConfiguration); + String storeId, Integer pageSize, String continuationToken) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModelsWithHttpInfo(storeId, pageSize, continuationToken, this.configuration); } /** @@ -1476,16 +1655,23 @@ public CompletableFuture> readAutho * @param storeId (required) * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ReadAuthorizationModelsResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> readAuthorizationModelsWithHttpInfo( + String storeId, Integer pageSize, String continuationToken, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readAuthorizationModelsWithHttpInfo( + storeId, pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> readAuthorizationModelsWithHttpInfo( String storeId, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken, memberVarConfiguration); + readAuthorizationModelsRequestBuilder(storeId, pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1517,13 +1703,16 @@ public CompletableFuture> readAutho private HttpRequest.Builder readAuthorizationModelsRequestBuilder( String storeId, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException( 400, "Missing the required parameter 'storeId' when calling readAuthorizationModels"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/authorization-models" @@ -1544,15 +1733,15 @@ private HttpRequest.Builder readAuthorizationModelsRequestBuilder( queryJoiner.add(localVarQueryStringJoiner.toString()); } localVarRequestBuilder.uri( - URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); + URI.create(configuration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1573,8 +1762,9 @@ private HttpRequest.Builder readAuthorizationModelsRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture readChanges( - String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { - return readChanges(storeId, type, pageSize, continuationToken, memberVarConfiguration); + String storeId, String type, Integer pageSize, String continuationToken) + throws ApiException, FgaInvalidParameterException { + return readChanges(storeId, type, pageSize, continuationToken, this.configuration); } /** @@ -1584,13 +1774,24 @@ public CompletableFuture readChanges( * @param type (optional) * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ReadChangesResponse> * @throws ApiException if fails to make API call */ public CompletableFuture readChanges( + String storeId, + String type, + Integer pageSize, + String continuationToken, + ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readChanges( + storeId, type, pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture readChanges( String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = readChangesRequestBuilder(storeId, type, pageSize, continuationToken, configuration); @@ -1627,8 +1828,9 @@ public CompletableFuture readChanges( * @throws ApiException if fails to make API call */ public CompletableFuture> readChangesWithHttpInfo( - String storeId, String type, Integer pageSize, String continuationToken) throws ApiException { - return readChangesWithHttpInfo(storeId, type, pageSize, continuationToken, memberVarConfiguration); + String storeId, String type, Integer pageSize, String continuationToken) + throws ApiException, FgaInvalidParameterException { + return readChangesWithHttpInfo(storeId, type, pageSize, continuationToken, this.configuration); } /** @@ -1638,16 +1840,27 @@ public CompletableFuture> readChangesWithHttpIn * @param type (optional) * @param pageSize (optional) * @param continuationToken (optional) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<ReadChangesResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> readChangesWithHttpInfo( + String storeId, + String type, + Integer pageSize, + String continuationToken, + ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return readChangesWithHttpInfo( + storeId, type, pageSize, continuationToken, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> readChangesWithHttpInfo( String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - readChangesRequestBuilder(storeId, type, pageSize, continuationToken, memberVarConfiguration); + readChangesRequestBuilder(storeId, type, pageSize, continuationToken, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1677,12 +1890,15 @@ public CompletableFuture> readChangesWithHttpIn private HttpRequest.Builder readChangesRequestBuilder( String storeId, String type, Integer pageSize, String continuationToken, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling readChanges"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = @@ -1705,15 +1921,15 @@ private HttpRequest.Builder readChangesRequestBuilder( queryJoiner.add(localVarQueryStringJoiner.toString()); } localVarRequestBuilder.uri( - URI.create(memberVarConfiguration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); + URI.create(configuration.getApiUrl() + localVarPath + '?' + queryJoiner.toString())); } else { - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1731,8 +1947,9 @@ private HttpRequest.Builder readChangesRequestBuilder( * @return CompletableFuture<Object> * @throws ApiException if fails to make API call */ - public CompletableFuture write(String storeId, WriteRequest body) throws ApiException { - return write(storeId, body, memberVarConfiguration); + public CompletableFuture write(String storeId, WriteRequest body) + throws ApiException, FgaInvalidParameterException { + return write(storeId, body, this.configuration); } /** @@ -1740,12 +1957,18 @@ public CompletableFuture write(String storeId, WriteRequest body) throws * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<Object> * @throws ApiException if fails to make API call */ - public CompletableFuture write(String storeId, WriteRequest body, Configuration configuration) - throws ApiException { + public CompletableFuture write( + String storeId, WriteRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return write(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture write(String storeId, WriteRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body, configuration); return memberVarHttpClient @@ -1779,8 +2002,8 @@ public CompletableFuture write(String storeId, WriteRequest body, Config * @throws ApiException if fails to make API call */ public CompletableFuture> writeWithHttpInfo(String storeId, WriteRequest body) - throws ApiException { - return writeWithHttpInfo(storeId, body, memberVarConfiguration); + throws ApiException, FgaInvalidParameterException { + return writeWithHttpInfo(storeId, body, this.configuration); } /** @@ -1788,14 +2011,21 @@ public CompletableFuture> writeWithHttpInfo(String storeId, * The Write API will update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user. In the body, `writes` adds new tuples while `deletes` removes existing tuples. The API is not idempotent: if, later on, you try to add the same tuple, or if you try to delete a non-existing tuple, it will throw an error. An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used. ## Example ### Adding relationships To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following ```json { \"writes\": { \"tuple_keys\": [ { \"user\": \"user:anne\", \"relation\": \"writer\", \"object\": \"document:2021-budget\" } ] }, \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\" } ``` ### Removing relationships To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following ```json { \"deletes\": { \"tuple_keys\": [ { \"user\": \"user:bob\", \"relation\": \"reader\", \"object\": \"document:2021-budget\" } ] } } ``` * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<Object>> * @throws ApiException if fails to make API call */ public CompletableFuture> writeWithHttpInfo( - String storeId, WriteRequest body, Configuration configuration) throws ApiException { + String storeId, WriteRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return writeWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> writeWithHttpInfo( + String storeId, WriteRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { - HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body, memberVarConfiguration); + HttpRequest.Builder localVarRequestBuilder = writeRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1824,7 +2054,7 @@ public CompletableFuture> writeWithHttpInfo( } private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling write"); @@ -1834,11 +2064,14 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod throw new ApiException(400, "Missing the required parameter 'body' when calling write"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/write".replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1849,7 +2082,7 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -1869,8 +2102,9 @@ private HttpRequest.Builder writeRequestBuilder(String storeId, WriteRequest bod * @throws ApiException if fails to make API call */ public CompletableFuture writeAssertions( - String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { - return writeAssertions(storeId, authorizationModelId, body, memberVarConfiguration); + String storeId, String authorizationModelId, WriteAssertionsRequest body) + throws ApiException, FgaInvalidParameterException { + return writeAssertions(storeId, authorizationModelId, body, this.configuration); } /** @@ -1879,13 +2113,22 @@ public CompletableFuture writeAssertions( * @param storeId (required) * @param authorizationModelId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<Void> * @throws ApiException if fails to make API call */ public CompletableFuture writeAssertions( + String storeId, + String authorizationModelId, + WriteAssertionsRequest body, + ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return writeAssertions(storeId, authorizationModelId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture writeAssertions( String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = writeAssertionsRequestBuilder(storeId, authorizationModelId, body, configuration); @@ -1912,8 +2155,9 @@ public CompletableFuture writeAssertions( * @throws ApiException if fails to make API call */ public CompletableFuture> writeAssertionsWithHttpInfo( - String storeId, String authorizationModelId, WriteAssertionsRequest body) throws ApiException { - return writeAssertionsWithHttpInfo(storeId, authorizationModelId, body, memberVarConfiguration); + String storeId, String authorizationModelId, WriteAssertionsRequest body) + throws ApiException, FgaInvalidParameterException { + return writeAssertionsWithHttpInfo(storeId, authorizationModelId, body, this.configuration); } /** @@ -1922,16 +2166,26 @@ public CompletableFuture> writeAssertionsWithHttpInfo( * @param storeId (required) * @param authorizationModelId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<Void>> * @throws ApiException if fails to make API call */ public CompletableFuture> writeAssertionsWithHttpInfo( + String storeId, + String authorizationModelId, + WriteAssertionsRequest body, + ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return writeAssertionsWithHttpInfo( + storeId, authorizationModelId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> writeAssertionsWithHttpInfo( String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - writeAssertionsRequestBuilder(storeId, authorizationModelId, body, memberVarConfiguration); + writeAssertionsRequestBuilder(storeId, authorizationModelId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -1953,7 +2207,7 @@ public CompletableFuture> writeAssertionsWithHttpInfo( private HttpRequest.Builder writeAssertionsRequestBuilder( String storeId, String authorizationModelId, WriteAssertionsRequest body, Configuration configuration) - throws ApiException { + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException(400, "Missing the required parameter 'storeId' when calling writeAssertions"); @@ -1968,13 +2222,16 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( throw new ApiException(400, "Missing the required parameter 'body' when calling writeAssertions"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/assertions/{authorization_model_id}" .replace("{store_id}", ApiClient.urlEncode(storeId.toString())) .replace("{authorization_model_id}", ApiClient.urlEncode(authorizationModelId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -1985,7 +2242,7 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } @@ -2004,8 +2261,8 @@ private HttpRequest.Builder writeAssertionsRequestBuilder( * @throws ApiException if fails to make API call */ public CompletableFuture writeAuthorizationModel( - String storeId, WriteAuthorizationModelRequest body) throws ApiException { - return writeAuthorizationModel(storeId, body, memberVarConfiguration); + String storeId, WriteAuthorizationModelRequest body) throws ApiException, FgaInvalidParameterException { + return writeAuthorizationModel(storeId, body, this.configuration); } /** @@ -2013,12 +2270,19 @@ public CompletableFuture writeAuthorizationMode * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<WriteAuthorizationModelResponse> * @throws ApiException if fails to make API call */ public CompletableFuture writeAuthorizationModel( - String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { + String storeId, WriteAuthorizationModelRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return writeAuthorizationModel(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture writeAuthorizationModel( + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = writeAuthorizationModelRequestBuilder(storeId, body, configuration); @@ -2055,8 +2319,8 @@ public CompletableFuture writeAuthorizationMode * @throws ApiException if fails to make API call */ public CompletableFuture> writeAuthorizationModelWithHttpInfo( - String storeId, WriteAuthorizationModelRequest body) throws ApiException { - return writeAuthorizationModelWithHttpInfo(storeId, body, memberVarConfiguration); + String storeId, WriteAuthorizationModelRequest body) throws ApiException, FgaInvalidParameterException { + return writeAuthorizationModelWithHttpInfo(storeId, body, this.configuration); } /** @@ -2064,15 +2328,22 @@ public CompletableFuture> writeAuth * The WriteAuthorizationModel API will add a new authorization model to a store. Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`. The response will return the authorization model's ID in the `id` field. ## Example To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: ```json { \"type_definitions\":[ { \"type\":\"user\" }, { \"type\":\"document\", \"relations\":{ \"reader\":{ \"union\":{ \"child\":[ { \"this\":{} }, { \"computedUserset\":{ \"object\":\"\", \"relation\":\"writer\" } } ] } }, \"writer\":{ \"this\":{} } } } ] } ``` OpenFGA's response will include the version id for this authorization model, which will look like ``` {\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"} ``` * @param storeId (required) * @param body (required) - * @param configuration Override the configuration this OpenFgaApi was constructed with + * @param configurationOverride Override the {@link Configuration} this OpenFgaApi was constructed with * @return CompletableFuture<ApiResponse<WriteAuthorizationModelResponse>> * @throws ApiException if fails to make API call */ public CompletableFuture> writeAuthorizationModelWithHttpInfo( - String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { + String storeId, WriteAuthorizationModelRequest body, ConfigurationOverride configurationOverride) + throws ApiException, FgaInvalidParameterException { + return writeAuthorizationModelWithHttpInfo(storeId, body, this.configuration.override(configurationOverride)); + } + + private CompletableFuture> writeAuthorizationModelWithHttpInfo( + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { try { HttpRequest.Builder localVarRequestBuilder = - writeAuthorizationModelRequestBuilder(storeId, body, memberVarConfiguration); + writeAuthorizationModelRequestBuilder(storeId, body, configuration); return memberVarHttpClient .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) .thenComposeAsync(localVarResponse -> { @@ -2103,7 +2374,8 @@ public CompletableFuture> writeAuth } private HttpRequest.Builder writeAuthorizationModelRequestBuilder( - String storeId, WriteAuthorizationModelRequest body, Configuration configuration) throws ApiException { + String storeId, WriteAuthorizationModelRequest body, Configuration configuration) + throws ApiException, FgaInvalidParameterException { // verify the required parameter 'storeId' is set if (storeId == null) { throw new ApiException( @@ -2114,12 +2386,15 @@ private HttpRequest.Builder writeAuthorizationModelRequestBuilder( throw new ApiException(400, "Missing the required parameter 'body' when calling writeAuthorizationModel"); } + // verify the Configuration is valid + configuration.assertValid(); + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); String localVarPath = "/stores/{store_id}/authorization-models" .replace("{store_id}", ApiClient.urlEncode(storeId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarConfiguration.getApiUrl() + localVarPath)); + localVarRequestBuilder.uri(URI.create(configuration.getApiUrl() + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); @@ -2130,7 +2405,7 @@ private HttpRequest.Builder writeAuthorizationModelRequestBuilder( } catch (IOException e) { throw new ApiException(e); } - Duration readTimeout = memberVarConfiguration.getReadTimeout(); + Duration readTimeout = configuration.getReadTimeout(); if (readTimeout != null) { localVarRequestBuilder.timeout(readTimeout); } diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java index 4544bb9..582d8fa 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java @@ -49,7 +49,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ApiClient { private HttpClient.Builder builder; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiException.java b/src/main/java/dev/openfga/sdk/api/client/ApiException.java index 7a57dc3..721412b 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiException.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiException.java @@ -16,7 +16,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ApiException extends Exception { private int code = 0; private HttpHeaders responseHeaders = null; diff --git a/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java b/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java index d1f4ce0..52af3fc 100644 --- a/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java +++ b/src/main/java/dev/openfga/sdk/api/client/BaseConfiguration.java @@ -12,12 +12,9 @@ package dev.openfga.sdk.api.client; -import dev.openfga.sdk.errors.FgaInvalidParameterException; import java.time.Duration; public interface BaseConfiguration { - void assertValid() throws FgaInvalidParameterException; - String getApiUrl(); String getUserAgent(); diff --git a/src/main/java/dev/openfga/sdk/api/client/Configuration.java b/src/main/java/dev/openfga/sdk/api/client/Configuration.java index aa9af11..18fbb79 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Configuration.java +++ b/src/main/java/dev/openfga/sdk/api/client/Configuration.java @@ -24,7 +24,7 @@ import java.time.Duration; /** - * Configurations for an ApiClient. + * Configurations for an api client. */ public class Configuration implements BaseConfiguration { public static final String VERSION = "0.0.1"; @@ -49,7 +49,6 @@ public Configuration(String apiUrl) { /** * Assert that the configuration is valid. */ - @Override public void assertValid() throws FgaInvalidParameterException { // If apiUrl is null/empty/whitespace it will resolve to // DEFAULT_API_URL when getApiUrl is called. @@ -73,13 +72,39 @@ public void assertValid() throws FgaInvalidParameterException { } } + /** + * Construct a new {@link Configuration} with any non-null values of a {@link ConfigurationOverride} and remaining values from this {@link Configuration}. + * + * @param configurationOverride The values to override + * @return A new {@link Configuration} with values of this Configuration mixed with non-null values of configurationOverride + */ + public Configuration override(ConfigurationOverride configurationOverride) { + Configuration result = new Configuration(apiUrl); + + String overrideApiUrl = configurationOverride.getApiUrl(); + if (overrideApiUrl != null) { + result.apiUrl(overrideApiUrl); + } + + String overrideUserAgent = configurationOverride.getUserAgent(); + result.userAgent(overrideUserAgent != null ? overrideUserAgent : userAgent); + + Duration overrideReadTimeout = configurationOverride.getReadTimeout(); + result.readTimeout(overrideReadTimeout != null ? overrideReadTimeout : readTimeout); + + Duration overrideConnectTimeout = configurationOverride.getConnectTimeout(); + result.connectTimeout(overrideConnectTimeout != null ? overrideConnectTimeout : connectTimeout); + + return result; + } + /** * Set the API URL for the http client. * * @param apiUrl The URL. * @return This object. */ - public BaseConfiguration apiUrl(String apiUrl) { + public Configuration apiUrl(String apiUrl) { this.apiUrl = apiUrl; return this; } @@ -104,7 +129,7 @@ public String getApiUrl() { * @param userAgent The user agent. * @return This object. */ - public BaseConfiguration userAgent(String userAgent) { + public Configuration userAgent(String userAgent) { this.userAgent = userAgent; return this; } @@ -130,7 +155,7 @@ public String getUserAgent() { * effectively infinite value. * @return This object. */ - public BaseConfiguration readTimeout(Duration readTimeout) { + public Configuration readTimeout(Duration readTimeout) { this.readTimeout = readTimeout; return this; } @@ -162,7 +187,7 @@ public Duration getReadTimeout() { * @param connectTimeout connection timeout in milliseconds * @return This object. */ - public BaseConfiguration connectTimeout(Duration connectTimeout) { + public Configuration connectTimeout(Duration connectTimeout) { this.connectTimeout = connectTimeout; return this; } diff --git a/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java b/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java new file mode 100644 index 0000000..5a17623 --- /dev/null +++ b/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java @@ -0,0 +1,138 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 0.1 + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.client; + +import java.net.http.HttpClient; +import java.net.http.HttpConnectTimeoutException; +import java.net.http.HttpRequest; +import java.time.Duration; + +/** + * Configuration overrides for an api client. Values are initialized to null, and any values unset are intended to fall + * through to the values of a {@link Configuration}. + *

+ * More details on intended usage of this class can be found in the documentation of the {@link Configuration#override(ConfigurationOverride)} method. + */ +public class ConfigurationOverride implements BaseConfiguration { + private String apiUrl; + private String userAgent; + private Duration readTimeout; + private Duration connectTimeout; + + public ConfigurationOverride() { + this.apiUrl = null; + this.userAgent = null; + this.readTimeout = null; + this.connectTimeout = null; + } + + /** + * Set the API URL for the http client. + * + * @param apiUrl The URL. + * @return This object. + */ + public BaseConfiguration apiUrl(String apiUrl) { + this.apiUrl = apiUrl; + return this; + } + + /** + * Get the API URL that was set. + * + * @return The url. + */ + @Override + public String getApiUrl() { + return apiUrl; + } + + /** + * Set the user agent. + * + * @param userAgent The user agent. + * @return This object. + */ + public BaseConfiguration userAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + + /** + * Get the user agent. + * + * @return The user agent. + */ + @Override + public String getUserAgent() { + return userAgent; + } + + /** + * Set the read timeout for the http client. + * + *

This is the value used by default for each request, though it can be + * overridden on a per-request basis with a request interceptor.

+ * + * @param readTimeout The read timeout used by default by the http client. + * Setting this value to null resets the timeout to an + * effectively infinite value. + * @return This object. + */ + public BaseConfiguration readTimeout(Duration readTimeout) { + this.readTimeout = readTimeout; + return this; + } + + /** + * Get the read timeout that was set. + * + * @return The read timeout, or null if no timeout was set. Null represents + * an infinite wait time. + */ + @Override + public Duration getReadTimeout() { + return readTimeout; + } + + /** + * Sets the connect timeout (in milliseconds) for the http client. + * + *

In the case where a new connection needs to be established, if + * the connection cannot be established within the given {@code + * duration}, then {@link HttpClient#send(HttpRequest, BodyHandler) + * HttpClient::send} throws an {@link HttpConnectTimeoutException}, or + * {@link HttpClient#sendAsync(HttpRequest, BodyHandler) + * HttpClient::sendAsync} completes exceptionally with an + * {@code HttpConnectTimeoutException}. If a new connection does not + * need to be established, for example if a connection can be reused + * from a previous request, then this timeout duration has no effect. + * + * @param connectTimeout connection timeout in milliseconds + * @return This object. + */ + public BaseConfiguration connectTimeout(Duration connectTimeout) { + this.connectTimeout = connectTimeout; + return this; + } + + /** + * Get connection timeout (in milliseconds). + * + * @return Timeout in milliseconds + */ + @Override + public Duration getConnectTimeout() { + return connectTimeout; + } +} diff --git a/src/main/java/dev/openfga/sdk/api/client/JSON.java b/src/main/java/dev/openfga/sdk/api/client/JSON.java index 38e94ff..056b6b9 100644 --- a/src/main/java/dev/openfga/sdk/api/client/JSON.java +++ b/src/main/java/dev/openfga/sdk/api/client/JSON.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class JSON { private ObjectMapper mapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/Pair.java b/src/main/java/dev/openfga/sdk/api/client/Pair.java index a458742..06e1ea9 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Pair.java +++ b/src/main/java/dev/openfga/sdk/api/client/Pair.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Pair { private String name = ""; private String value = ""; diff --git a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java index e964774..6e25c15 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java +++ b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java @@ -21,7 +21,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public abstract class AbstractOpenApiSchema { // store the actual instance of the schema/object diff --git a/src/main/java/dev/openfga/sdk/api/model/Any.java b/src/main/java/dev/openfga/sdk/api/model/Any.java index f8e4195..e15a5b6 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Any.java +++ b/src/main/java/dev/openfga/sdk/api/model/Any.java @@ -30,7 +30,7 @@ @JsonPropertyOrder({Any.JSON_PROPERTY_AT_TYPE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Any extends HashMap { public static final String JSON_PROPERTY_AT_TYPE = "@type"; private String atType; diff --git a/src/main/java/dev/openfga/sdk/api/model/Assertion.java b/src/main/java/dev/openfga/sdk/api/model/Assertion.java index 317ed27..06d3c36 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Assertion.java +++ b/src/main/java/dev/openfga/sdk/api/model/Assertion.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Assertion.JSON_PROPERTY_TUPLE_KEY, Assertion.JSON_PROPERTY_EXPECTATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Assertion { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java index 05d08e1..b41164b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java +++ b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class AuthorizationModel { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java index c182f4a..9c1bf7a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class CheckRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java index 539804c..8909069 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CheckResponse.JSON_PROPERTY_ALLOWED, CheckResponse.JSON_PROPERTY_RESOLUTION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class CheckResponse { public static final String JSON_PROPERTY_ALLOWED = "allowed"; private Boolean allowed; diff --git a/src/main/java/dev/openfga/sdk/api/model/Computed.java b/src/main/java/dev/openfga/sdk/api/model/Computed.java index d7f15bd..9376b26 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Computed.java +++ b/src/main/java/dev/openfga/sdk/api/model/Computed.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Computed.JSON_PROPERTY_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Computed { public static final String JSON_PROPERTY_USERSET = "userset"; private String userset; diff --git a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java index d03509c..f0dc900 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ContextualTupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ContextualTupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java index a369c6a..0e9e488 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CreateStoreRequest.JSON_PROPERTY_NAME}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class CreateStoreRequest { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java index 9fafa32..378b478 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class CreateStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Difference.java b/src/main/java/dev/openfga/sdk/api/model/Difference.java index 6335cab..366c5c2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Difference.java +++ b/src/main/java/dev/openfga/sdk/api/model/Difference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Difference.JSON_PROPERTY_BASE, Difference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Difference { public static final String JSON_PROPERTY_BASE = "base"; private Userset base; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java index a1baeeb..6d99e59 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ExpandRequest.JSON_PROPERTY_TUPLE_KEY, ExpandRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ExpandRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java index 538c10b..d5160fa 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ExpandResponse.JSON_PROPERTY_TREE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ExpandResponse { public static final String JSON_PROPERTY_TREE = "tree"; private UsersetTree tree; diff --git a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java index 380a2f1..f6ea5b2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class GetStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java index 78268a7..952e46c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java @@ -27,7 +27,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class InternalErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private InternalErrorCode code = InternalErrorCode.NO_INTERNAL_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/Leaf.java b/src/main/java/dev/openfga/sdk/api/model/Leaf.java index cd1b94a..ff840d4 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Leaf.java +++ b/src/main/java/dev/openfga/sdk/api/model/Leaf.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Leaf.JSON_PROPERTY_USERS, Leaf.JSON_PROPERTY_COMPUTED, Leaf.JSON_PROPERTY_TUPLE_TO_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Leaf { public static final String JSON_PROPERTY_USERS = "users"; private Users users; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java index 696b194..c0c7632 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ListObjectsRequest { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java index 56c6ad8..a8d1830 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListObjectsResponse.JSON_PROPERTY_OBJECTS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ListObjectsResponse { public static final String JSON_PROPERTY_OBJECTS = "objects"; private List objects = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java index 753fb8f..edb9ceb 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListStoresResponse.JSON_PROPERTY_STORES, ListStoresResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ListStoresResponse { public static final String JSON_PROPERTY_STORES = "stores"; private List stores = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Metadata.java b/src/main/java/dev/openfga/sdk/api/model/Metadata.java index 4091a70..8355c21 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Metadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/Metadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Metadata.JSON_PROPERTY_RELATIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Metadata { public static final String JSON_PROPERTY_RELATIONS = "relations"; private Map relations = new HashMap<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Node.java b/src/main/java/dev/openfga/sdk/api/model/Node.java index 095fc14..5ba6719 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Node.java +++ b/src/main/java/dev/openfga/sdk/api/model/Node.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Node { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/Nodes.java b/src/main/java/dev/openfga/sdk/api/model/Nodes.java index dee2f00..c019b96 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Nodes.java +++ b/src/main/java/dev/openfga/sdk/api/model/Nodes.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Nodes.JSON_PROPERTY_NODES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Nodes { public static final String JSON_PROPERTY_NODES = "nodes"; private List nodes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java index 9374ac7..8416187 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java +++ b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ObjectRelation.JSON_PROPERTY_OBJECT, ObjectRelation.JSON_PROPERTY_RELATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ObjectRelation { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java index c69051a..164d7f8 100644 --- a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class PathUnknownErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private NotFoundErrorCode code = NotFoundErrorCode.NO_NOT_FOUND_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java index e919032..86bf28e 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadAssertionsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java index d743e35..0c26281 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ReadAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL = "authorization_model"; private AuthorizationModel authorizationModel; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java index 310a232..ca99f70 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadAuthorizationModelsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODELS = "authorization_models"; private List authorizationModels = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java index 5408dbc..20406f9 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadChangesResponse.JSON_PROPERTY_CHANGES, ReadChangesResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadChangesResponse { public static final String JSON_PROPERTY_CHANGES = "changes"; private List changes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java index 308c39c..91f9d06 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java index 4ab79b3..5d186c2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadResponse.JSON_PROPERTY_TUPLES, ReadResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ReadResponse { public static final String JSON_PROPERTY_TUPLES = "tuples"; private List tuples = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java index 6451d42..49dacfd 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({RelationMetadata.JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class RelationMetadata { public static final String JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES = "directly_related_user_types"; private List directlyRelatedUserTypes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java index 3adce54..5d1e228 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class RelationReference { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Status.java b/src/main/java/dev/openfga/sdk/api/model/Status.java index c2ee281..d0c08a2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Status.java +++ b/src/main/java/dev/openfga/sdk/api/model/Status.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Status.JSON_PROPERTY_CODE, Status.JSON_PROPERTY_MESSAGE, Status.JSON_PROPERTY_DETAILS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Status { public static final String JSON_PROPERTY_CODE = "code"; private Integer code; diff --git a/src/main/java/dev/openfga/sdk/api/model/Store.java b/src/main/java/dev/openfga/sdk/api/model/Store.java index dc82bd1..7ef01f6 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Store.java +++ b/src/main/java/dev/openfga/sdk/api/model/Store.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Store { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Tuple.java b/src/main/java/dev/openfga/sdk/api/model/Tuple.java index 109243d..d04b949 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Tuple.java +++ b/src/main/java/dev/openfga/sdk/api/model/Tuple.java @@ -27,7 +27,7 @@ @JsonPropertyOrder({Tuple.JSON_PROPERTY_KEY, Tuple.JSON_PROPERTY_TIMESTAMP}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Tuple { public static final String JSON_PROPERTY_KEY = "key"; private TupleKey key; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java index 68ac6ce..8563760 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class TupleChange { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java index 34e2b41..f630993 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKey.JSON_PROPERTY_OBJECT, TupleKey.JSON_PROPERTY_RELATION, TupleKey.JSON_PROPERTY_USER}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class TupleKey { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java index 101c51a..25fe424 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class TupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java index 800d123..3238ea5 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({TupleToUserset.JSON_PROPERTY_TUPLESET, TupleToUserset.JSON_PROPERTY_COMPUTED_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class TupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private ObjectRelation tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java index ccc5160..a781b8c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java +++ b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class TypeDefinition { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Users.java b/src/main/java/dev/openfga/sdk/api/model/Users.java index 2e41362..02e8b04 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Users.java +++ b/src/main/java/dev/openfga/sdk/api/model/Users.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Users.JSON_PROPERTY_USERS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Users { public static final String JSON_PROPERTY_USERS = "users"; private List users = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Userset.java b/src/main/java/dev/openfga/sdk/api/model/Userset.java index 1e17f8d..096874a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Userset.java +++ b/src/main/java/dev/openfga/sdk/api/model/Userset.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Userset { public static final String JSON_PROPERTY_THIS = "this"; private Object _this; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java index 3ffe75c..32d7a5c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTree.JSON_PROPERTY_ROOT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class UsersetTree { public static final String JSON_PROPERTY_ROOT = "root"; private Node root; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java index 79e23a2..17dbc9b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTreeDifference.JSON_PROPERTY_BASE, UsersetTreeDifference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class UsersetTreeDifference { public static final String JSON_PROPERTY_BASE = "base"; private Node base; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java index b443ac3..e240056 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({UsersetTreeTupleToUserset.JSON_PROPERTY_TUPLESET, UsersetTreeTupleToUserset.JSON_PROPERTY_COMPUTED}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class UsersetTreeTupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private String tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/Usersets.java b/src/main/java/dev/openfga/sdk/api/model/Usersets.java index dd9f2f2..78612fc 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Usersets.java +++ b/src/main/java/dev/openfga/sdk/api/model/Usersets.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Usersets.JSON_PROPERTY_CHILD}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class Usersets { public static final String JSON_PROPERTY_CHILD = "child"; private List child = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java index b941280..c2d8119 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class ValidationErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private ErrorCode code = ErrorCode.NO_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java index acb3eb0..9702a86 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAssertionsRequest.JSON_PROPERTY_ASSERTIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class WriteAssertionsRequest { public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; private List assertions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java index 6c530a5..932a2bf 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class WriteAuthorizationModelRequest { public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; private List typeDefinitions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java index 690e1f1..917e270 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class WriteAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java index c19bf55..42f3476 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-21T23:45:26.204414Z[Etc/UTC]") + date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") public class WriteRequest { public static final String JSON_PROPERTY_WRITES = "writes"; private TupleKeys writes; From 5c6079a119a23461b2dcc8a02732132efd9a95ab Mon Sep 17 00:00:00 2001 From: "Justin \"J.R.\" Hill" Date: Tue, 22 Aug 2023 18:33:50 -0700 Subject: [PATCH 4/5] test(java): Add tests on ConfigurationOverride --- .../java/dev/openfga/sdk/api/OpenFgaApi.java | 2 +- .../dev/openfga/sdk/api/client/ApiClient.java | 2 +- .../openfga/sdk/api/client/ApiException.java | 2 +- .../openfga/sdk/api/client/Configuration.java | 7 ++ .../sdk/api/client/ConfigurationOverride.java | 8 +- .../java/dev/openfga/sdk/api/client/JSON.java | 2 +- .../java/dev/openfga/sdk/api/client/Pair.java | 2 +- .../sdk/api/model/AbstractOpenApiSchema.java | 2 +- .../java/dev/openfga/sdk/api/model/Any.java | 2 +- .../dev/openfga/sdk/api/model/Assertion.java | 2 +- .../sdk/api/model/AuthorizationModel.java | 2 +- .../openfga/sdk/api/model/CheckRequest.java | 2 +- .../openfga/sdk/api/model/CheckResponse.java | 2 +- .../dev/openfga/sdk/api/model/Computed.java | 2 +- .../sdk/api/model/ContextualTupleKeys.java | 2 +- .../sdk/api/model/CreateStoreRequest.java | 2 +- .../sdk/api/model/CreateStoreResponse.java | 2 +- .../dev/openfga/sdk/api/model/Difference.java | 2 +- .../openfga/sdk/api/model/ExpandRequest.java | 2 +- .../openfga/sdk/api/model/ExpandResponse.java | 2 +- .../sdk/api/model/GetStoreResponse.java | 2 +- .../model/InternalErrorMessageResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/Leaf.java | 2 +- .../sdk/api/model/ListObjectsRequest.java | 2 +- .../sdk/api/model/ListObjectsResponse.java | 2 +- .../sdk/api/model/ListStoresResponse.java | 2 +- .../dev/openfga/sdk/api/model/Metadata.java | 2 +- .../java/dev/openfga/sdk/api/model/Node.java | 2 +- .../java/dev/openfga/sdk/api/model/Nodes.java | 2 +- .../openfga/sdk/api/model/ObjectRelation.java | 2 +- .../PathUnknownErrorMessageResponse.java | 2 +- .../sdk/api/model/ReadAssertionsResponse.java | 2 +- .../model/ReadAuthorizationModelResponse.java | 2 +- .../ReadAuthorizationModelsResponse.java | 2 +- .../sdk/api/model/ReadChangesResponse.java | 2 +- .../openfga/sdk/api/model/ReadRequest.java | 2 +- .../openfga/sdk/api/model/ReadResponse.java | 2 +- .../sdk/api/model/RelationMetadata.java | 2 +- .../sdk/api/model/RelationReference.java | 2 +- .../dev/openfga/sdk/api/model/Status.java | 2 +- .../java/dev/openfga/sdk/api/model/Store.java | 2 +- .../java/dev/openfga/sdk/api/model/Tuple.java | 2 +- .../openfga/sdk/api/model/TupleChange.java | 2 +- .../dev/openfga/sdk/api/model/TupleKey.java | 2 +- .../dev/openfga/sdk/api/model/TupleKeys.java | 2 +- .../openfga/sdk/api/model/TupleToUserset.java | 2 +- .../openfga/sdk/api/model/TypeDefinition.java | 2 +- .../java/dev/openfga/sdk/api/model/Users.java | 2 +- .../dev/openfga/sdk/api/model/Userset.java | 2 +- .../openfga/sdk/api/model/UsersetTree.java | 2 +- .../sdk/api/model/UsersetTreeDifference.java | 2 +- .../api/model/UsersetTreeTupleToUserset.java | 2 +- .../dev/openfga/sdk/api/model/Usersets.java | 2 +- .../model/ValidationErrorMessageResponse.java | 2 +- .../sdk/api/model/WriteAssertionsRequest.java | 2 +- .../model/WriteAuthorizationModelRequest.java | 2 +- .../WriteAuthorizationModelResponse.java | 2 +- .../openfga/sdk/api/model/WriteRequest.java | 2 +- .../sdk/api/client/ConfigurationTest.java | 108 +++++++++++++++++- 59 files changed, 174 insertions(+), 61 deletions(-) diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index 4a381f1..c178952 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -56,7 +56,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class OpenFgaApi { private final HttpClient memberVarHttpClient; private final ObjectMapper memberVarObjectMapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java index 582d8fa..68e6cca 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java @@ -49,7 +49,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ApiClient { private HttpClient.Builder builder; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiException.java b/src/main/java/dev/openfga/sdk/api/client/ApiException.java index 721412b..6929919 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiException.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiException.java @@ -16,7 +16,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ApiException extends Exception { private int code = 0; private HttpHeaders responseHeaders = null; diff --git a/src/main/java/dev/openfga/sdk/api/client/Configuration.java b/src/main/java/dev/openfga/sdk/api/client/Configuration.java index 18fbb79..eae4abd 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Configuration.java +++ b/src/main/java/dev/openfga/sdk/api/client/Configuration.java @@ -39,6 +39,13 @@ public class Configuration implements BaseConfiguration { private Duration readTimeout; private Duration connectTimeout; + public Configuration() { + this.apiUrl = DEFAULT_API_URL; + this.userAgent = DEFAULT_USER_AGENT; + this.readTimeout = DEFAULT_READ_TIMEOUT; + this.connectTimeout = DEFAULT_CONNECT_TIMEOUT; + } + public Configuration(String apiUrl) { this.apiUrl = apiUrl; this.userAgent = DEFAULT_USER_AGENT; diff --git a/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java b/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java index 5a17623..a0f3802 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java +++ b/src/main/java/dev/openfga/sdk/api/client/ConfigurationOverride.java @@ -42,7 +42,7 @@ public ConfigurationOverride() { * @param apiUrl The URL. * @return This object. */ - public BaseConfiguration apiUrl(String apiUrl) { + public ConfigurationOverride apiUrl(String apiUrl) { this.apiUrl = apiUrl; return this; } @@ -63,7 +63,7 @@ public String getApiUrl() { * @param userAgent The user agent. * @return This object. */ - public BaseConfiguration userAgent(String userAgent) { + public ConfigurationOverride userAgent(String userAgent) { this.userAgent = userAgent; return this; } @@ -89,7 +89,7 @@ public String getUserAgent() { * effectively infinite value. * @return This object. */ - public BaseConfiguration readTimeout(Duration readTimeout) { + public ConfigurationOverride readTimeout(Duration readTimeout) { this.readTimeout = readTimeout; return this; } @@ -121,7 +121,7 @@ public Duration getReadTimeout() { * @param connectTimeout connection timeout in milliseconds * @return This object. */ - public BaseConfiguration connectTimeout(Duration connectTimeout) { + public ConfigurationOverride connectTimeout(Duration connectTimeout) { this.connectTimeout = connectTimeout; return this; } diff --git a/src/main/java/dev/openfga/sdk/api/client/JSON.java b/src/main/java/dev/openfga/sdk/api/client/JSON.java index 056b6b9..bc3ba61 100644 --- a/src/main/java/dev/openfga/sdk/api/client/JSON.java +++ b/src/main/java/dev/openfga/sdk/api/client/JSON.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class JSON { private ObjectMapper mapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/Pair.java b/src/main/java/dev/openfga/sdk/api/client/Pair.java index 06e1ea9..a39fb38 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Pair.java +++ b/src/main/java/dev/openfga/sdk/api/client/Pair.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Pair { private String name = ""; private String value = ""; diff --git a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java index 6e25c15..dd18912 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java +++ b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java @@ -21,7 +21,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public abstract class AbstractOpenApiSchema { // store the actual instance of the schema/object diff --git a/src/main/java/dev/openfga/sdk/api/model/Any.java b/src/main/java/dev/openfga/sdk/api/model/Any.java index e15a5b6..f211282 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Any.java +++ b/src/main/java/dev/openfga/sdk/api/model/Any.java @@ -30,7 +30,7 @@ @JsonPropertyOrder({Any.JSON_PROPERTY_AT_TYPE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Any extends HashMap { public static final String JSON_PROPERTY_AT_TYPE = "@type"; private String atType; diff --git a/src/main/java/dev/openfga/sdk/api/model/Assertion.java b/src/main/java/dev/openfga/sdk/api/model/Assertion.java index 06d3c36..944f01d 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Assertion.java +++ b/src/main/java/dev/openfga/sdk/api/model/Assertion.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Assertion.JSON_PROPERTY_TUPLE_KEY, Assertion.JSON_PROPERTY_EXPECTATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Assertion { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java index b41164b..dcfcf5c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java +++ b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class AuthorizationModel { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java index 9c1bf7a..5ad52d7 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class CheckRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java index 8909069..3db8a21 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CheckResponse.JSON_PROPERTY_ALLOWED, CheckResponse.JSON_PROPERTY_RESOLUTION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class CheckResponse { public static final String JSON_PROPERTY_ALLOWED = "allowed"; private Boolean allowed; diff --git a/src/main/java/dev/openfga/sdk/api/model/Computed.java b/src/main/java/dev/openfga/sdk/api/model/Computed.java index 9376b26..253aab3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Computed.java +++ b/src/main/java/dev/openfga/sdk/api/model/Computed.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Computed.JSON_PROPERTY_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Computed { public static final String JSON_PROPERTY_USERSET = "userset"; private String userset; diff --git a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java index f0dc900..ec08bc5 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ContextualTupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ContextualTupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java index 0e9e488..3d0e276 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CreateStoreRequest.JSON_PROPERTY_NAME}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class CreateStoreRequest { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java index 378b478..0d5de75 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class CreateStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Difference.java b/src/main/java/dev/openfga/sdk/api/model/Difference.java index 366c5c2..61b0513 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Difference.java +++ b/src/main/java/dev/openfga/sdk/api/model/Difference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Difference.JSON_PROPERTY_BASE, Difference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Difference { public static final String JSON_PROPERTY_BASE = "base"; private Userset base; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java index 6d99e59..11fb20c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ExpandRequest.JSON_PROPERTY_TUPLE_KEY, ExpandRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ExpandRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java index d5160fa..ff8ac88 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ExpandResponse.JSON_PROPERTY_TREE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ExpandResponse { public static final String JSON_PROPERTY_TREE = "tree"; private UsersetTree tree; diff --git a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java index f6ea5b2..8b3b15c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class GetStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java index 952e46c..f7a0eb6 100644 --- a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java @@ -27,7 +27,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class InternalErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private InternalErrorCode code = InternalErrorCode.NO_INTERNAL_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/Leaf.java b/src/main/java/dev/openfga/sdk/api/model/Leaf.java index ff840d4..6e6a630 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Leaf.java +++ b/src/main/java/dev/openfga/sdk/api/model/Leaf.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Leaf.JSON_PROPERTY_USERS, Leaf.JSON_PROPERTY_COMPUTED, Leaf.JSON_PROPERTY_TUPLE_TO_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Leaf { public static final String JSON_PROPERTY_USERS = "users"; private Users users; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java index c0c7632..0a4b56a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ListObjectsRequest { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java index a8d1830..6bd9050 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListObjectsResponse.JSON_PROPERTY_OBJECTS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ListObjectsResponse { public static final String JSON_PROPERTY_OBJECTS = "objects"; private List objects = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java index edb9ceb..1dd12e4 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListStoresResponse.JSON_PROPERTY_STORES, ListStoresResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ListStoresResponse { public static final String JSON_PROPERTY_STORES = "stores"; private List stores = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Metadata.java b/src/main/java/dev/openfga/sdk/api/model/Metadata.java index 8355c21..f107afc 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Metadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/Metadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Metadata.JSON_PROPERTY_RELATIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Metadata { public static final String JSON_PROPERTY_RELATIONS = "relations"; private Map relations = new HashMap<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Node.java b/src/main/java/dev/openfga/sdk/api/model/Node.java index 5ba6719..f5431e2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Node.java +++ b/src/main/java/dev/openfga/sdk/api/model/Node.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Node { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/Nodes.java b/src/main/java/dev/openfga/sdk/api/model/Nodes.java index c019b96..84086c1 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Nodes.java +++ b/src/main/java/dev/openfga/sdk/api/model/Nodes.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Nodes.JSON_PROPERTY_NODES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Nodes { public static final String JSON_PROPERTY_NODES = "nodes"; private List nodes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java index 8416187..8687cf3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java +++ b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ObjectRelation.JSON_PROPERTY_OBJECT, ObjectRelation.JSON_PROPERTY_RELATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ObjectRelation { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java index 164d7f8..1a9a319 100644 --- a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class PathUnknownErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private NotFoundErrorCode code = NotFoundErrorCode.NO_NOT_FOUND_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java index 86bf28e..c8266c8 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadAssertionsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java index 0c26281..afb4a62 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ReadAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL = "authorization_model"; private AuthorizationModel authorizationModel; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java index ca99f70..623b60b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadAuthorizationModelsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODELS = "authorization_models"; private List authorizationModels = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java index 20406f9..677b9d4 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadChangesResponse.JSON_PROPERTY_CHANGES, ReadChangesResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadChangesResponse { public static final String JSON_PROPERTY_CHANGES = "changes"; private List changes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java index 91f9d06..7d327c0 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java index 5d186c2..4511216 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadResponse.JSON_PROPERTY_TUPLES, ReadResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ReadResponse { public static final String JSON_PROPERTY_TUPLES = "tuples"; private List tuples = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java index 49dacfd..8ffe785 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({RelationMetadata.JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class RelationMetadata { public static final String JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES = "directly_related_user_types"; private List directlyRelatedUserTypes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java index 5d1e228..c5f22e6 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class RelationReference { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Status.java b/src/main/java/dev/openfga/sdk/api/model/Status.java index d0c08a2..58854d6 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Status.java +++ b/src/main/java/dev/openfga/sdk/api/model/Status.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Status.JSON_PROPERTY_CODE, Status.JSON_PROPERTY_MESSAGE, Status.JSON_PROPERTY_DETAILS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Status { public static final String JSON_PROPERTY_CODE = "code"; private Integer code; diff --git a/src/main/java/dev/openfga/sdk/api/model/Store.java b/src/main/java/dev/openfga/sdk/api/model/Store.java index 7ef01f6..593fe42 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Store.java +++ b/src/main/java/dev/openfga/sdk/api/model/Store.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Store { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Tuple.java b/src/main/java/dev/openfga/sdk/api/model/Tuple.java index d04b949..5a1bda5 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Tuple.java +++ b/src/main/java/dev/openfga/sdk/api/model/Tuple.java @@ -27,7 +27,7 @@ @JsonPropertyOrder({Tuple.JSON_PROPERTY_KEY, Tuple.JSON_PROPERTY_TIMESTAMP}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Tuple { public static final String JSON_PROPERTY_KEY = "key"; private TupleKey key; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java index 8563760..972cba0 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class TupleChange { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java index f630993..e49a8c2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKey.JSON_PROPERTY_OBJECT, TupleKey.JSON_PROPERTY_RELATION, TupleKey.JSON_PROPERTY_USER}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class TupleKey { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java index 25fe424..4bd1c2b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class TupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java index 3238ea5..b20367e 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({TupleToUserset.JSON_PROPERTY_TUPLESET, TupleToUserset.JSON_PROPERTY_COMPUTED_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class TupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private ObjectRelation tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java index a781b8c..4bf209c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java +++ b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class TypeDefinition { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Users.java b/src/main/java/dev/openfga/sdk/api/model/Users.java index 02e8b04..72cb450 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Users.java +++ b/src/main/java/dev/openfga/sdk/api/model/Users.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Users.JSON_PROPERTY_USERS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Users { public static final String JSON_PROPERTY_USERS = "users"; private List users = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Userset.java b/src/main/java/dev/openfga/sdk/api/model/Userset.java index 096874a..dc1b844 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Userset.java +++ b/src/main/java/dev/openfga/sdk/api/model/Userset.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Userset { public static final String JSON_PROPERTY_THIS = "this"; private Object _this; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java index 32d7a5c..cb176c9 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTree.JSON_PROPERTY_ROOT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class UsersetTree { public static final String JSON_PROPERTY_ROOT = "root"; private Node root; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java index 17dbc9b..44bdc96 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTreeDifference.JSON_PROPERTY_BASE, UsersetTreeDifference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class UsersetTreeDifference { public static final String JSON_PROPERTY_BASE = "base"; private Node base; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java index e240056..9866f83 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({UsersetTreeTupleToUserset.JSON_PROPERTY_TUPLESET, UsersetTreeTupleToUserset.JSON_PROPERTY_COMPUTED}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class UsersetTreeTupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private String tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/Usersets.java b/src/main/java/dev/openfga/sdk/api/model/Usersets.java index 78612fc..df41cec 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Usersets.java +++ b/src/main/java/dev/openfga/sdk/api/model/Usersets.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Usersets.JSON_PROPERTY_CHILD}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class Usersets { public static final String JSON_PROPERTY_CHILD = "child"; private List child = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java index c2d8119..38c7b24 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class ValidationErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private ErrorCode code = ErrorCode.NO_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java index 9702a86..30e2cdf 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAssertionsRequest.JSON_PROPERTY_ASSERTIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class WriteAssertionsRequest { public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; private List assertions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java index 932a2bf..8f09909 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class WriteAuthorizationModelRequest { public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; private List typeDefinitions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java index 917e270..6dc73cc 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class WriteAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java index 42f3476..faed0d0 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-22T23:54:43.912230Z[Etc/UTC]") + date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") public class WriteRequest { public static final String JSON_PROPERTY_WRITES = "writes"; private TupleKeys writes; diff --git a/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java b/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java index 6b5c33c..15e1e50 100644 --- a/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java +++ b/src/test/java/dev/openfga/sdk/api/client/ConfigurationTest.java @@ -3,9 +3,15 @@ import static org.junit.jupiter.api.Assertions.*; import dev.openfga.sdk.errors.*; +import java.time.Duration; import org.junit.jupiter.api.Test; class ConfigurationTest { + private static final String DEFAULT_API_URL = "http://localhost:8080"; + private static final String DEFAULT_USER_AGENT = "openfga-sdk java/0.0.1"; + private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofSeconds(10); + private static final Duration DEFAULT_CONNECT_TIMEOUT = Duration.ofSeconds(10); + @Test void apiUrl_nullDefaults() throws FgaInvalidParameterException { // Given @@ -47,41 +53,141 @@ void apiUrl_whitespaceStringDefaults() throws FgaInvalidParameterException { @Test void apiUrl_stringNoProtocolFails() { + // Given String apiUrl = "localhost:8080"; + + // When FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { var config = new Configuration(apiUrl); config.assertValid(); }); + + // Then assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); } @Test void apiUrl_stringInvalidProtocolFails() { + // Given String apiUrl = "zzz://localhost:8080"; + + // When FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { var config = new Configuration(apiUrl); config.assertValid(); }); + + // Then assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); } @Test void apiUrl_stringNoHostFails() { + // Given String apiUrl = "http://"; + + // When FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { var config = new Configuration(apiUrl); config.assertValid(); }); + + // Then assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); } @Test void apiUrl_stringBadPortFails() { - String apiUrl = "http://localshost:abcd"; + // Given + String apiUrl = "http://localhost:abcd"; + + // When FgaInvalidParameterException e = assertThrows(FgaInvalidParameterException.class, () -> { var config = new Configuration(apiUrl); config.assertValid(); }); + + // Then assertEquals("Required parameter apiUrl was invalid when calling Configuration.", e.getMessage()); } + + @Test + void defaults() { + // Given + Configuration config = new Configuration(); + + // NOTE: Failures in this test indicate that default values in Configuration have changed. Changing + // the defaults of Configuration can be a suprising and breaking change for consumers. + + // Then + assertEquals(DEFAULT_API_URL, config.getApiUrl()); + assertEquals(DEFAULT_USER_AGENT, config.getUserAgent()); + assertEquals(DEFAULT_READ_TIMEOUT, config.getReadTimeout()); + assertEquals(DEFAULT_CONNECT_TIMEOUT, config.getConnectTimeout()); + } + + @Test + void override_apiUrl() { + // Given + Configuration original = new Configuration(); + ConfigurationOverride configOverride = new ConfigurationOverride().apiUrl("https://override.url"); + + // When + Configuration result = original.override(configOverride); + + // Then + assertEquals("https://override.url", result.getApiUrl()); + assertEquals(DEFAULT_API_URL, original.getApiUrl(), "The Configuration's default apiUrl should be unmodified."); + } + + @Test + void override_userAgent() { + // Given + Configuration original = new Configuration(); + ConfigurationOverride configOverride = new ConfigurationOverride().userAgent("override-agent"); + + // When + Configuration result = original.override(configOverride); + + // Then + assertEquals("override-agent", result.getUserAgent()); + assertEquals( + DEFAULT_USER_AGENT, + original.getUserAgent(), + "The Configuration's default userAgent should be unmodified."); + } + + @Test + void override_readTimeout() { + // Given + Configuration original = new Configuration(); + ConfigurationOverride configOverride = new ConfigurationOverride().readTimeout(Duration.ofDays(7)); + + // When + Configuration result = original.override(configOverride); + + // Then + assertEquals(Duration.ofDays(7), result.getReadTimeout()); + assertEquals( + DEFAULT_READ_TIMEOUT, + original.getReadTimeout(), + "The Configuration's default readTimeout should be unmodified."); + } + + @Test + void override_connectTimeout() { + // Given + Configuration original = new Configuration(); + ConfigurationOverride configOverride = new ConfigurationOverride().connectTimeout(Duration.ofDays(7)); + + // When + Configuration result = original.override(configOverride); + + // Then + assertEquals(Duration.ofDays(7), result.getConnectTimeout()); + assertEquals( + DEFAULT_CONNECT_TIMEOUT, + original.getConnectTimeout(), + "The Configuration's default connectTimeout should be unmodified."); + } } From f04e44d53b83412bd81292ab364faae42cd2ef92 Mon Sep 17 00:00:00 2001 From: "Justin \"J.R.\" Hill" Date: Wed, 23 Aug 2023 13:18:10 -0700 Subject: [PATCH 5/5] refactor(java): Consistent code in Configuration.override(...) --- src/main/java/dev/openfga/sdk/api/OpenFgaApi.java | 2 +- src/main/java/dev/openfga/sdk/api/client/ApiClient.java | 2 +- src/main/java/dev/openfga/sdk/api/client/ApiException.java | 2 +- src/main/java/dev/openfga/sdk/api/client/Configuration.java | 6 ++---- src/main/java/dev/openfga/sdk/api/client/JSON.java | 2 +- src/main/java/dev/openfga/sdk/api/client/Pair.java | 2 +- .../dev/openfga/sdk/api/model/AbstractOpenApiSchema.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Any.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Assertion.java | 2 +- .../java/dev/openfga/sdk/api/model/AuthorizationModel.java | 2 +- src/main/java/dev/openfga/sdk/api/model/CheckRequest.java | 2 +- src/main/java/dev/openfga/sdk/api/model/CheckResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Computed.java | 2 +- .../java/dev/openfga/sdk/api/model/ContextualTupleKeys.java | 2 +- .../java/dev/openfga/sdk/api/model/CreateStoreRequest.java | 2 +- .../java/dev/openfga/sdk/api/model/CreateStoreResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Difference.java | 2 +- src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java | 2 +- src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/GetStoreResponse.java | 2 +- .../openfga/sdk/api/model/InternalErrorMessageResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Leaf.java | 2 +- .../java/dev/openfga/sdk/api/model/ListObjectsRequest.java | 2 +- .../java/dev/openfga/sdk/api/model/ListObjectsResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/ListStoresResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Metadata.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Node.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Nodes.java | 2 +- src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java | 2 +- .../sdk/api/model/PathUnknownErrorMessageResponse.java | 2 +- .../dev/openfga/sdk/api/model/ReadAssertionsResponse.java | 2 +- .../sdk/api/model/ReadAuthorizationModelResponse.java | 2 +- .../sdk/api/model/ReadAuthorizationModelsResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/ReadChangesResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/ReadRequest.java | 2 +- src/main/java/dev/openfga/sdk/api/model/ReadResponse.java | 2 +- .../java/dev/openfga/sdk/api/model/RelationMetadata.java | 2 +- .../java/dev/openfga/sdk/api/model/RelationReference.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Status.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Store.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Tuple.java | 2 +- src/main/java/dev/openfga/sdk/api/model/TupleChange.java | 2 +- src/main/java/dev/openfga/sdk/api/model/TupleKey.java | 2 +- src/main/java/dev/openfga/sdk/api/model/TupleKeys.java | 2 +- src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java | 2 +- src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Users.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Userset.java | 2 +- src/main/java/dev/openfga/sdk/api/model/UsersetTree.java | 2 +- .../dev/openfga/sdk/api/model/UsersetTreeDifference.java | 2 +- .../openfga/sdk/api/model/UsersetTreeTupleToUserset.java | 2 +- src/main/java/dev/openfga/sdk/api/model/Usersets.java | 2 +- .../sdk/api/model/ValidationErrorMessageResponse.java | 2 +- .../dev/openfga/sdk/api/model/WriteAssertionsRequest.java | 2 +- .../sdk/api/model/WriteAuthorizationModelRequest.java | 2 +- .../sdk/api/model/WriteAuthorizationModelResponse.java | 2 +- src/main/java/dev/openfga/sdk/api/model/WriteRequest.java | 2 +- 57 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index c178952..ee5d28f 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -56,7 +56,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class OpenFgaApi { private final HttpClient memberVarHttpClient; private final ObjectMapper memberVarObjectMapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java index 68e6cca..2b0e6a0 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiClient.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiClient.java @@ -49,7 +49,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ApiClient { private HttpClient.Builder builder; diff --git a/src/main/java/dev/openfga/sdk/api/client/ApiException.java b/src/main/java/dev/openfga/sdk/api/client/ApiException.java index 6929919..17d7356 100644 --- a/src/main/java/dev/openfga/sdk/api/client/ApiException.java +++ b/src/main/java/dev/openfga/sdk/api/client/ApiException.java @@ -16,7 +16,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ApiException extends Exception { private int code = 0; private HttpHeaders responseHeaders = null; diff --git a/src/main/java/dev/openfga/sdk/api/client/Configuration.java b/src/main/java/dev/openfga/sdk/api/client/Configuration.java index eae4abd..99db079 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Configuration.java +++ b/src/main/java/dev/openfga/sdk/api/client/Configuration.java @@ -86,12 +86,10 @@ public void assertValid() throws FgaInvalidParameterException { * @return A new {@link Configuration} with values of this Configuration mixed with non-null values of configurationOverride */ public Configuration override(ConfigurationOverride configurationOverride) { - Configuration result = new Configuration(apiUrl); + Configuration result = new Configuration(); String overrideApiUrl = configurationOverride.getApiUrl(); - if (overrideApiUrl != null) { - result.apiUrl(overrideApiUrl); - } + result.apiUrl(overrideApiUrl != null ? overrideApiUrl : apiUrl); String overrideUserAgent = configurationOverride.getUserAgent(); result.userAgent(overrideUserAgent != null ? overrideUserAgent : userAgent); diff --git a/src/main/java/dev/openfga/sdk/api/client/JSON.java b/src/main/java/dev/openfga/sdk/api/client/JSON.java index bc3ba61..613a922 100644 --- a/src/main/java/dev/openfga/sdk/api/client/JSON.java +++ b/src/main/java/dev/openfga/sdk/api/client/JSON.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class JSON { private ObjectMapper mapper; diff --git a/src/main/java/dev/openfga/sdk/api/client/Pair.java b/src/main/java/dev/openfga/sdk/api/client/Pair.java index a39fb38..b14b173 100644 --- a/src/main/java/dev/openfga/sdk/api/client/Pair.java +++ b/src/main/java/dev/openfga/sdk/api/client/Pair.java @@ -14,7 +14,7 @@ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Pair { private String name = ""; private String value = ""; diff --git a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java index dd18912..26e13ca 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java +++ b/src/main/java/dev/openfga/sdk/api/model/AbstractOpenApiSchema.java @@ -21,7 +21,7 @@ */ @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public abstract class AbstractOpenApiSchema { // store the actual instance of the schema/object diff --git a/src/main/java/dev/openfga/sdk/api/model/Any.java b/src/main/java/dev/openfga/sdk/api/model/Any.java index f211282..065fccc 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Any.java +++ b/src/main/java/dev/openfga/sdk/api/model/Any.java @@ -30,7 +30,7 @@ @JsonPropertyOrder({Any.JSON_PROPERTY_AT_TYPE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Any extends HashMap { public static final String JSON_PROPERTY_AT_TYPE = "@type"; private String atType; diff --git a/src/main/java/dev/openfga/sdk/api/model/Assertion.java b/src/main/java/dev/openfga/sdk/api/model/Assertion.java index 944f01d..7ee829c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Assertion.java +++ b/src/main/java/dev/openfga/sdk/api/model/Assertion.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Assertion.JSON_PROPERTY_TUPLE_KEY, Assertion.JSON_PROPERTY_EXPECTATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Assertion { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java index dcfcf5c..f352cf2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java +++ b/src/main/java/dev/openfga/sdk/api/model/AuthorizationModel.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class AuthorizationModel { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java index 5ad52d7..dc75b38 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class CheckRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java index 3db8a21..d77f193 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CheckResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CheckResponse.JSON_PROPERTY_ALLOWED, CheckResponse.JSON_PROPERTY_RESOLUTION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class CheckResponse { public static final String JSON_PROPERTY_ALLOWED = "allowed"; private Boolean allowed; diff --git a/src/main/java/dev/openfga/sdk/api/model/Computed.java b/src/main/java/dev/openfga/sdk/api/model/Computed.java index 253aab3..275f614 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Computed.java +++ b/src/main/java/dev/openfga/sdk/api/model/Computed.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Computed.JSON_PROPERTY_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Computed { public static final String JSON_PROPERTY_USERSET = "userset"; private String userset; diff --git a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java index ec08bc5..e681a5d 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/ContextualTupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ContextualTupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ContextualTupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java index 3d0e276..1626882 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({CreateStoreRequest.JSON_PROPERTY_NAME}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class CreateStoreRequest { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java index 0d5de75..f55fb61 100644 --- a/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/CreateStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class CreateStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Difference.java b/src/main/java/dev/openfga/sdk/api/model/Difference.java index 61b0513..4cc57f3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Difference.java +++ b/src/main/java/dev/openfga/sdk/api/model/Difference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Difference.JSON_PROPERTY_BASE, Difference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Difference { public static final String JSON_PROPERTY_BASE = "base"; private Userset base; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java index 11fb20c..d844945 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ExpandRequest.JSON_PROPERTY_TUPLE_KEY, ExpandRequest.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ExpandRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java index ff8ac88..a9d8103 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ExpandResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ExpandResponse.JSON_PROPERTY_TREE}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ExpandResponse { public static final String JSON_PROPERTY_TREE = "tree"; private UsersetTree tree; diff --git a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java index 8b3b15c..74c4796 100644 --- a/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/GetStoreResponse.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class GetStoreResponse { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java index f7a0eb6..4619876 100644 --- a/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/InternalErrorMessageResponse.java @@ -27,7 +27,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class InternalErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private InternalErrorCode code = InternalErrorCode.NO_INTERNAL_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/Leaf.java b/src/main/java/dev/openfga/sdk/api/model/Leaf.java index 6e6a630..949f149 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Leaf.java +++ b/src/main/java/dev/openfga/sdk/api/model/Leaf.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({Leaf.JSON_PROPERTY_USERS, Leaf.JSON_PROPERTY_COMPUTED, Leaf.JSON_PROPERTY_TUPLE_TO_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Leaf { public static final String JSON_PROPERTY_USERS = "users"; private Users users; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java index 0a4b56a..8801ef5 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsRequest.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ListObjectsRequest { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java index 6bd9050..cf8b2ce 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListObjectsResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListObjectsResponse.JSON_PROPERTY_OBJECTS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ListObjectsResponse { public static final String JSON_PROPERTY_OBJECTS = "objects"; private List objects = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java index 1dd12e4..093c732 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ListStoresResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ListStoresResponse.JSON_PROPERTY_STORES, ListStoresResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ListStoresResponse { public static final String JSON_PROPERTY_STORES = "stores"; private List stores = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Metadata.java b/src/main/java/dev/openfga/sdk/api/model/Metadata.java index f107afc..2a7a2b2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Metadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/Metadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Metadata.JSON_PROPERTY_RELATIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Metadata { public static final String JSON_PROPERTY_RELATIONS = "relations"; private Map relations = new HashMap<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Node.java b/src/main/java/dev/openfga/sdk/api/model/Node.java index f5431e2..5e603df 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Node.java +++ b/src/main/java/dev/openfga/sdk/api/model/Node.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Node { public static final String JSON_PROPERTY_NAME = "name"; private String name; diff --git a/src/main/java/dev/openfga/sdk/api/model/Nodes.java b/src/main/java/dev/openfga/sdk/api/model/Nodes.java index 84086c1..b68d9dd 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Nodes.java +++ b/src/main/java/dev/openfga/sdk/api/model/Nodes.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Nodes.JSON_PROPERTY_NODES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Nodes { public static final String JSON_PROPERTY_NODES = "nodes"; private List nodes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java index 8687cf3..dcbc7ed 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java +++ b/src/main/java/dev/openfga/sdk/api/model/ObjectRelation.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({ObjectRelation.JSON_PROPERTY_OBJECT, ObjectRelation.JSON_PROPERTY_RELATION}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ObjectRelation { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java index 1a9a319..76de30b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/PathUnknownErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class PathUnknownErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private NotFoundErrorCode code = NotFoundErrorCode.NO_NOT_FOUND_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java index c8266c8..3b299eb 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAssertionsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadAssertionsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java index afb4a62..7bbdf30 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelResponse.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({ReadAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL = "authorization_model"; private AuthorizationModel authorizationModel; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java index 623b60b..7d3f46c 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadAuthorizationModelsResponse.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadAuthorizationModelsResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODELS = "authorization_models"; private List authorizationModels = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java index 677b9d4..fbbaef9 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadChangesResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadChangesResponse.JSON_PROPERTY_CHANGES, ReadChangesResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadChangesResponse { public static final String JSON_PROPERTY_CHANGES = "changes"; private List changes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java index 7d327c0..2f50c6b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadRequest { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java index 4511216..73a9662 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ReadResponse.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({ReadResponse.JSON_PROPERTY_TUPLES, ReadResponse.JSON_PROPERTY_CONTINUATION_TOKEN}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ReadResponse { public static final String JSON_PROPERTY_TUPLES = "tuples"; private List tuples = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java index 8ffe785..35b0dcd 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationMetadata.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({RelationMetadata.JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class RelationMetadata { public static final String JSON_PROPERTY_DIRECTLY_RELATED_USER_TYPES = "directly_related_user_types"; private List directlyRelatedUserTypes = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java index c5f22e6..69c19a0 100644 --- a/src/main/java/dev/openfga/sdk/api/model/RelationReference.java +++ b/src/main/java/dev/openfga/sdk/api/model/RelationReference.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class RelationReference { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Status.java b/src/main/java/dev/openfga/sdk/api/model/Status.java index 58854d6..958723a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Status.java +++ b/src/main/java/dev/openfga/sdk/api/model/Status.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Status.JSON_PROPERTY_CODE, Status.JSON_PROPERTY_MESSAGE, Status.JSON_PROPERTY_DETAILS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Status { public static final String JSON_PROPERTY_CODE = "code"; private Integer code; diff --git a/src/main/java/dev/openfga/sdk/api/model/Store.java b/src/main/java/dev/openfga/sdk/api/model/Store.java index 593fe42..85eec5b 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Store.java +++ b/src/main/java/dev/openfga/sdk/api/model/Store.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Store { public static final String JSON_PROPERTY_ID = "id"; private String id; diff --git a/src/main/java/dev/openfga/sdk/api/model/Tuple.java b/src/main/java/dev/openfga/sdk/api/model/Tuple.java index 5a1bda5..2e6aa2a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Tuple.java +++ b/src/main/java/dev/openfga/sdk/api/model/Tuple.java @@ -27,7 +27,7 @@ @JsonPropertyOrder({Tuple.JSON_PROPERTY_KEY, Tuple.JSON_PROPERTY_TIMESTAMP}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Tuple { public static final String JSON_PROPERTY_KEY = "key"; private TupleKey key; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java index 972cba0..951cfb8 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleChange.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleChange.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class TupleChange { public static final String JSON_PROPERTY_TUPLE_KEY = "tuple_key"; private TupleKey tupleKey; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java index e49a8c2..e23c0c3 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKey.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKey.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKey.JSON_PROPERTY_OBJECT, TupleKey.JSON_PROPERTY_RELATION, TupleKey.JSON_PROPERTY_USER}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class TupleKey { public static final String JSON_PROPERTY_OBJECT = "object"; private String _object; diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java index 4bd1c2b..5966792 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleKeys.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({TupleKeys.JSON_PROPERTY_TUPLE_KEYS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class TupleKeys { public static final String JSON_PROPERTY_TUPLE_KEYS = "tuple_keys"; private List tupleKeys = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java index b20367e..bbe8aed 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/TupleToUserset.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({TupleToUserset.JSON_PROPERTY_TUPLESET, TupleToUserset.JSON_PROPERTY_COMPUTED_USERSET}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class TupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private ObjectRelation tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java index 4bf209c..e98b502 100644 --- a/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java +++ b/src/main/java/dev/openfga/sdk/api/model/TypeDefinition.java @@ -32,7 +32,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class TypeDefinition { public static final String JSON_PROPERTY_TYPE = "type"; private String type; diff --git a/src/main/java/dev/openfga/sdk/api/model/Users.java b/src/main/java/dev/openfga/sdk/api/model/Users.java index 72cb450..45d3aac 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Users.java +++ b/src/main/java/dev/openfga/sdk/api/model/Users.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({Users.JSON_PROPERTY_USERS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Users { public static final String JSON_PROPERTY_USERS = "users"; private List users = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/Userset.java b/src/main/java/dev/openfga/sdk/api/model/Userset.java index dc1b844..ee85ff8 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Userset.java +++ b/src/main/java/dev/openfga/sdk/api/model/Userset.java @@ -33,7 +33,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Userset { public static final String JSON_PROPERTY_THIS = "this"; private Object _this; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java index cb176c9..6a82a6e 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTree.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTree.JSON_PROPERTY_ROOT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class UsersetTree { public static final String JSON_PROPERTY_ROOT = "root"; private Node root; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java index 44bdc96..9832afd 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeDifference.java @@ -24,7 +24,7 @@ @JsonPropertyOrder({UsersetTreeDifference.JSON_PROPERTY_BASE, UsersetTreeDifference.JSON_PROPERTY_SUBTRACT}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class UsersetTreeDifference { public static final String JSON_PROPERTY_BASE = "base"; private Node base; diff --git a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java index 9866f83..9c3e7f4 100644 --- a/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java +++ b/src/main/java/dev/openfga/sdk/api/model/UsersetTreeTupleToUserset.java @@ -28,7 +28,7 @@ @JsonPropertyOrder({UsersetTreeTupleToUserset.JSON_PROPERTY_TUPLESET, UsersetTreeTupleToUserset.JSON_PROPERTY_COMPUTED}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class UsersetTreeTupleToUserset { public static final String JSON_PROPERTY_TUPLESET = "tupleset"; private String tupleset; diff --git a/src/main/java/dev/openfga/sdk/api/model/Usersets.java b/src/main/java/dev/openfga/sdk/api/model/Usersets.java index df41cec..d1475e4 100644 --- a/src/main/java/dev/openfga/sdk/api/model/Usersets.java +++ b/src/main/java/dev/openfga/sdk/api/model/Usersets.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({Usersets.JSON_PROPERTY_CHILD}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class Usersets { public static final String JSON_PROPERTY_CHILD = "child"; private List child = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java index 38c7b24..634e8f9 100644 --- a/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/ValidationErrorMessageResponse.java @@ -29,7 +29,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class ValidationErrorMessageResponse { public static final String JSON_PROPERTY_CODE = "code"; private ErrorCode code = ErrorCode.NO_ERROR; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java index 30e2cdf..85d948a 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAssertionsRequest.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAssertionsRequest.JSON_PROPERTY_ASSERTIONS}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class WriteAssertionsRequest { public static final String JSON_PROPERTY_ASSERTIONS = "assertions"; private List assertions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java index 8f09909..93d1629 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelRequest.java @@ -31,7 +31,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class WriteAuthorizationModelRequest { public static final String JSON_PROPERTY_TYPE_DEFINITIONS = "type_definitions"; private List typeDefinitions = new ArrayList<>(); diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java index 6dc73cc..41ba21f 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteAuthorizationModelResponse.java @@ -26,7 +26,7 @@ @JsonPropertyOrder({WriteAuthorizationModelResponse.JSON_PROPERTY_AUTHORIZATION_MODEL_ID}) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class WriteAuthorizationModelResponse { public static final String JSON_PROPERTY_AUTHORIZATION_MODEL_ID = "authorization_model_id"; private String authorizationModelId; diff --git a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java index faed0d0..bd2cbe2 100644 --- a/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java +++ b/src/main/java/dev/openfga/sdk/api/model/WriteRequest.java @@ -30,7 +30,7 @@ }) @javax.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", - date = "2023-08-23T01:25:17.613607Z[Etc/UTC]") + date = "2023-08-23T20:06:14.249201Z[Etc/UTC]") public class WriteRequest { public static final String JSON_PROPERTY_WRITES = "writes"; private TupleKeys writes;