Skip to content

[sessionauthentication] Code generation: update services and models#869

Open
AdyenAutomationBot wants to merge 1 commit intomainfrom
sdk-automation/sessionauthentication
Open

[sessionauthentication] Code generation: update services and models#869
AdyenAutomationBot wants to merge 1 commit intomainfrom
sdk-automation/sessionauthentication

Conversation

@AdyenAutomationBot
Copy link
Collaborator

This PR contains the automated changes for the sessionauthentication service.

The commit history of this PR reflects the adyen-openapi commits that have been applied.

@AdyenAutomationBot AdyenAutomationBot requested review from a team as code owners January 15, 2026 14:41
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @AdyenAutomationBot, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request integrates the new session authentication API into the SDK by adding a dedicated service and a comprehensive set of data models. These changes enable programmatic interaction with the session authentication functionalities, streamlining the process of generating and managing session tokens for various Adyen components.

Highlights

  • New API Service: Introduced a new SessionAuthenticationApi service to interact with the session authentication API.
  • New Models: Added numerous new models under Adyen\Model\SessionAuthentication to support the new API, including AccountHolderResource, AuthenticationSessionRequest, AuthenticationSessionResponse, BalanceAccountResource, DefaultErrorResponseEntity, InvalidField, LegalEntityResource, MerchantAccountResource, PaymentInstrumentResource, Policy, ProductType, Resource, and ResourceType.
  • Automated Code Generation: The changes are automatically generated from the adyen-openapi specification, ensuring consistency and up-to-date API definitions.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This PR introduces a new sessionauthentication service with its models and API client, apparently auto-generated from an OpenAPI specification. The changes are extensive, adding many new files. My review focuses on correctness and maintainability.

I've identified a few critical issues that need to be addressed:

  • The toArray() method in the base Resource model class is implemented in a way that prevents correct serialization of child class properties.
  • The base URL for the new SessionAuthenticationApi is not compatible with the existing logic for switching between test and live environments, which will cause all requests to be sent to the test environment.
  • The ObjectSerializer has a hardcoded namespace that will cause deserialization of polymorphic types to fail.

Additionally, there is significant code duplication in the toArray() method across many of the new model classes, which I've flagged as a medium-severity maintainability issue.

// If a discriminator is defined and points to a valid subclass, use it.
$discriminator = $class::DISCRIMINATOR;
if (!empty($discriminator) && isset($data->{$discriminator}) && is_string($data->{$discriminator})) {
$subclass = '\Adyen\Model\\' . $data->{$discriminator};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The namespace for deserializing polymorphic types is hardcoded to \Adyen\Model\. This will fail for models in other namespaces, such as \Adyen\Model\SessionAuthentication\. The namespace should be determined dynamically from the parent class's namespace.

                $subclass = substr($class, 0, strrpos($class, '\')) . '\' . $data->{$discriminator};

public function toArray(): array
{
$array = [];
foreach (self::$openAPITypes as $propertyName => $propertyType) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Using self::$openAPITypes here will only serialize properties defined in the Resource class. When toArray() is called on a child class instance, it will not include properties from the child class. To ensure all properties (including inherited ones) are serialized, you should use static::openAPITypes() which resolves to the openAPITypes() method of the called class at runtime.

With this change, child classes like AccountHolderResource will not need to override the toArray() method, and their current implementations can be removed.

        foreach (static::openAPITypes() as $propertyName => $propertyType) {

parent::__construct($client);

// Create the baseUrl based on live/test and optional live-url-prefix
$this->baseURL = $this->createBaseUrl("https://test.adyen.com/authe/api/v1");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The base URL for the session authentication service is hardcoded in a way that will not work correctly with the createBaseUrl method for the live environment. The createBaseUrl method expects a URL pattern with -test to replace it with -live, but the current URL https://test.adyen.com/authe/api/v1 does not follow this pattern. This will result in all requests being sent to the test environment, even when configured for live.

Please update the URL to follow the established pattern, for example: https://authe-test.adyen.com/api/v1.

        $this->baseURL = $this->createBaseUrl("https://authe-test.adyen.com/api/v1");

Comment on lines +366 to +390
public function toArray(): array
{
$array = [];
foreach (self::$openAPITypes as $propertyName => $propertyType) {
$propertyValue = $this[$propertyName];
if ($propertyValue !== null) {
// Check if the property value is an object and has a toArray() method
if (is_object($propertyValue) && method_exists($propertyValue, 'toArray')) {
$array[$propertyName] = $propertyValue->toArray();
// Check if it's type datetime
} elseif ($propertyValue instanceof \DateTime) {
$array[$propertyName] = $propertyValue->format(DATE_ATOM);
// If it's an array type we should check whether it contains objects and if so call toArray method
} elseif (is_array($propertyValue)) {
$array[$propertyName] = array_map(function ($item) {
return $item instanceof ModelInterface ? $item->toArray() : $item;
}, $propertyValue);
} else {
// Otherwise, directly assign the property value to the array
$array[$propertyName] = $propertyValue;
}
}
}
return $array;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The toArray() method is duplicated across many model classes in this pull request that do not share a common base class with this logic (e.g., AuthenticationSessionRequest, AuthenticationSessionResponse, Policy, etc.). To improve maintainability and reduce code duplication, consider extracting this method into a reusable trait that these classes can then use.

@AdyenAutomationBot AdyenAutomationBot force-pushed the sdk-automation/sessionauthentication branch 4 times, most recently from e0537f9 to 9d9a97a Compare January 22, 2026 18:49
@AdyenAutomationBot AdyenAutomationBot force-pushed the sdk-automation/sessionauthentication branch 4 times, most recently from 958e6ff to 7d63238 Compare February 2, 2026 09:16
@AdyenAutomationBot AdyenAutomationBot force-pushed the sdk-automation/sessionauthentication branch from 7d63238 to 61bcea1 Compare February 9, 2026 12:33
@AdyenAutomationBot AdyenAutomationBot force-pushed the sdk-automation/sessionauthentication branch from 61bcea1 to 1602323 Compare March 5, 2026 17:37
@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 5, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant