Skip to content

Commit

Permalink
PW-7514: Fully Generated Management API client (#1064)
Browse files Browse the repository at this point in the history
* PW-7514: Update models

* PW-7514: Switch to JAR based installation

* PW-7514: Default API template

* PW-7514: Customize API template

* PW-7514: Serialize request

* PW-7514: Query string

* PW-7514: Fix version patch

* PW-7514: Client generated

* PW-7514: Export class by default

* PW-7514: Make path and body params required

* PW-7514: Dynamic service name

* PW-7514: Link all classes into one parent

* PW-7514: Dynamic method names

* PW-7514: Fix merge issues

* PW-7514: Generate using latest specs

Co-authored-by: jillingk <93914435+jillingk@users.noreply.github.com>
  • Loading branch information
michaelpaul and jillingk committed Jan 19, 2023
1 parent 8c45150 commit 316542a
Show file tree
Hide file tree
Showing 58 changed files with 3,444 additions and 30 deletions.
39 changes: 32 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
generator:=typescript-node
openapi-generator-cli:=docker run --user $(shell id -u):$(shell id -g) --rm -v ${PWD}:/local -w /local openapitools/openapi-generator-cli:v5.4.0
openapi-generator-version:=5.4.0
openapi-generator-url:=https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/$(openapi-generator-version)/openapi-generator-cli-$(openapi-generator-version).jar
openapi-generator-jar:=build/openapi-generator-cli.jar
openapi-generator-cli:=java -jar $(openapi-generator-jar)
services:=balancePlatform binlookup checkout dataProtection legalEntityManagement management payments payouts platformsAccount platformsFund platformsHostedOnboardingPage platformsNotificationConfiguration recurring storedValue terminalManagement transfer

# Generate models (for each service)
Expand All @@ -14,6 +17,8 @@ payments: spec=PaymentService-v68
recurring: spec=RecurringService-v68
payouts: spec=PayoutService-v68
management: spec=ManagementService-v1
managementapi: spec=ManagementService-v1
managementapi: service=management
legalEntityManagement: spec=LegalEntityService-v2
balancePlatform: spec=BalancePlatformService-v2
platformsAccount: spec=AccountService-v6
Expand All @@ -22,28 +27,48 @@ platformsNotificationConfiguration: spec=NotificationConfigurationService-v6
platformsHostedOnboardingPage: spec=HopService-v6
transfer: spec=TransferService-v3

$(services): build/spec
$(services): build/spec $(openapi-generator-jar)
rm -rf src/typings/$@ build/model
$(openapi-generator-cli) generate \
-i build/spec/json/$(spec).json \
-g $(generator) \
-t templates/typescript \
-o build \
--global-property models,supportingFiles
--global-property models,supportingFiles \
--additional-properties=serviceName=$@
mv build/model src/typings/$@

# Service
managementapi: build/spec $(openapi-generator-jar)
$(openapi-generator-cli) generate \
-i build/spec/json/$(spec).json \
-g $(generator) \
-t templates/typescript \
-o build \
--api-package $(service) \
--model-package typings/$(service) \
--global-property apis \
--additional-properties=serviceName=$(service)
cp build/$(service)/* src/services/$(service)
sed -i.bak '/RestServiceError/d' src/services/$(service)/*
rm src/services/$(service)/*.bak

# Checkout spec (and patch version)
build/spec:
git clone https://github.com/Adyen/adyen-openapi.git build/spec
sed -i 's/"openapi" : "3.[0-9].[0-9]"/"openapi" : "3.0.0"/' build/spec/json/*.json
perl -i -pe's/"openapi" : "3.[0-9].[0-9]"/"openapi" : "3.0.0"/' build/spec/json/*.json

# Extract templates (copy them for modifications)
templates:
templates: $(openapi-generator-jar)
$(openapi-generator-cli) author template -g $(generator) -o build/templates/typescript

# Download the generator
$(openapi-generator-jar):
wget --quiet -o /dev/null $(openapi-generator-url) -O $(openapi-generator-jar)

# Discard generated artifacts and changed models
clean:
git checkout src/typings
git clean -f -d src/typings
git checkout src/typings src/services/management
git clean -f -d src/typings src/services/management

.PHONY: templates models $(services)
36 changes: 36 additions & 0 deletions src/__tests__/management.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -690,4 +690,40 @@ describe("Management", (): void => {
expect(response).toBeTruthy();
});
});

describe("AllowedOriginsMerchantLevelApi", (): void => {
test("Delete an allowed origin", async () => {
scope.delete("/merchants/foo/apiCredentials/BAR123/allowedOrigins/fishy%20one").reply(204);

await managementService.AllowedOriginsMerchantLevelApi
.deleteAllowedOrigin("foo", "BAR123", "fishy one");
});

test("Create an allowed origin", async () => {
const requestBody = {
"domain": "https://www.eu.mystore.com"
};
scope.post("/merchants/YOUR_MERCHANT_ACCOUNT/apiCredentials/YOUR_API_CREDENTIAL/allowedOrigins", requestBody)
.reply(200, {
"id": "YOUR_ALLOWED_ORIGIN",
"data": [
{
"domain": "https://www.eu.mystore.com",
}
],
"_links": {
"self": {
"href": "https://management-test.adyen.com/v1/merchants/YOUR_MERCHANT_ACCOUNT/apiCredentials/YOUR_API_CREDENTIAL/allowedOrigins/YOUR_ALLOWED_ORIGIN"
}
}
});

const response: management.AllowedOriginsResponse = await managementService.AllowedOriginsMerchantLevelApi
.createAllowedOrigin("YOUR_MERCHANT_ACCOUNT", "YOUR_API_CREDENTIAL", {
domain: "https://www.eu.mystore.com",
});

expect(response.data![0].domain).toEqual("https://www.eu.mystore.com");
});
});
});
150 changes: 150 additions & 0 deletions src/services/management.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Service from "../service";
import Client from "../client";

// Deprecated classes
import MeApi from "./management/meApi";
import MerchantAccount from "./management/merchantAccount";
import MerchantAllowedOrigins from "./management/merchantAllowedOrigins";
Expand All @@ -14,59 +15,208 @@ import MerchantTerminalSettings from "./management/merchantTerminalSettings";
import MerchantUsers from "./management/merchantUsers";
import MerchantWebhooks from "./management/merchantWebhooks";

// Recommended classes
import APICredentialsCompanyLevelApi from './management/aPICredentialsCompanyLevelApi';
import APICredentialsMerchantLevelApi from './management/aPICredentialsMerchantLevelApi';
import APIKeyCompanyLevelApi from './management/aPIKeyCompanyLevelApi';
import APIKeyMerchantLevelApi from './management/aPIKeyMerchantLevelApi';
import AccountCompanyLevelApi from './management/accountCompanyLevelApi';
import AccountMerchantLevelApi from './management/accountMerchantLevelApi';
import AccountStoreLevelApi from './management/accountStoreLevelApi';
import AllowedOriginsCompanyLevelApi from './management/allowedOriginsCompanyLevelApi';
import AllowedOriginsMerchantLevelApi from './management/allowedOriginsMerchantLevelApi';
import ClientKeyCompanyLevelApi from './management/clientKeyCompanyLevelApi';
import ClientKeyMerchantLevelApi from './management/clientKeyMerchantLevelApi';
import MyAPICredentialApi from './management/myAPICredentialApi';
import PaymentMethodsMerchantLevelApi from './management/paymentMethodsMerchantLevelApi';
import PayoutSettingsMerchantLevelApi from './management/payoutSettingsMerchantLevelApi';
import TerminalActionsCompanyLevelApi from './management/terminalActionsCompanyLevelApi';
import TerminalActionsTerminalLevelApi from './management/terminalActionsTerminalLevelApi';
import TerminalOrdersCompanyLevelApi from './management/terminalOrdersCompanyLevelApi';
import TerminalOrdersMerchantLevelApi from './management/terminalOrdersMerchantLevelApi';
import TerminalSettingsCompanyLevelApi from './management/terminalSettingsCompanyLevelApi';
import TerminalSettingsMerchantLevelApi from './management/terminalSettingsMerchantLevelApi';
import TerminalSettingsStoreLevelApi from './management/terminalSettingsStoreLevelApi';
import TerminalSettingsTerminalLevelApi from './management/terminalSettingsTerminalLevelApi';
import TerminalsTerminalLevelApi from './management/terminalsTerminalLevelApi';
import UsersCompanyLevelApi from './management/usersCompanyLevelApi';
import UsersMerchantLevelApi from './management/usersMerchantLevelApi';
import WebhooksCompanyLevelApi from './management/webhooksCompanyLevelApi';
import WebhooksMerchantLevelApi from './management/webhooksMerchantLevelApi';

class Management extends Service {
public constructor(client: Client) {
super(client);
}

/**
* @deprecated
*/
public get Me() {
const meApi = new MeApi(this.client);
return meApi.Me;
}

/**
* @deprecated
*/
public get MerchantAccount() {
return new MerchantAccount(this.client);
}

/**
* @deprecated
*/
public get MerchantAllowedOrigins() {
return new MerchantAllowedOrigins(this.client);
}

/**
* @deprecated
*/
public get MerchantApiCredentials() {
return new MerchantApiCredentials(this.client);
}

/**
* @deprecated
*/
public get MerchantApiKey() {
return new MerchantApiKey(this.client);
}

/**
* @deprecated
*/
public get MerchantClientKey() {
return new MerchantClientKey(this.client);
}

/**
* @deprecated
*/
public get MerchantPaymentMethods() {
return new MerchantPaymentMethods(this.client);
}

/**
* @deprecated
*/
public get MerchantPayoutSettings() {
return new MerchantPayoutSettings(this.client);
}

/**
* @deprecated
*/
public get MerchantTerminalOrders() {
return new MerchantTerminalOrders(this.client);
}

/**
* @deprecated
*/
public get MerchantTerminalSettings() {
return new MerchantTerminalSettings(this.client);
}

/**
* @deprecated
*/
public get MerchantUsers() {
return new MerchantUsers(this.client);
}

/**
* @deprecated
*/
public get MerchantWebhooks() {
return new MerchantWebhooks(this.client);
}

// ## Recommended classes

public get APICredentialsCompanyLevelApi() {
return new APICredentialsCompanyLevelApi(this.client);
}
public get APICredentialsMerchantLevelApi() {
return new APICredentialsMerchantLevelApi(this.client);
}
public get APIKeyCompanyLevelApi() {
return new APIKeyCompanyLevelApi(this.client);
}
public get APIKeyMerchantLevelApi() {
return new APIKeyMerchantLevelApi(this.client);
}
public get AccountCompanyLevelApi() {
return new AccountCompanyLevelApi(this.client);
}
public get AccountMerchantLevelApi() {
return new AccountMerchantLevelApi(this.client);
}
public get AccountStoreLevelApi() {
return new AccountStoreLevelApi(this.client);
}
public get AllowedOriginsCompanyLevelApi() {
return new AllowedOriginsCompanyLevelApi(this.client);
}
public get AllowedOriginsMerchantLevelApi() {
return new AllowedOriginsMerchantLevelApi(this.client);
}
public get ClientKeyCompanyLevelApi() {
return new ClientKeyCompanyLevelApi(this.client);
}
public get ClientKeyMerchantLevelApi() {
return new ClientKeyMerchantLevelApi(this.client);
}
public get MyAPICredentialApi() {
return new MyAPICredentialApi(this.client);
}
public get PaymentMethodsMerchantLevelApi() {
return new PaymentMethodsMerchantLevelApi(this.client);
}
public get PayoutSettingsMerchantLevelApi() {
return new PayoutSettingsMerchantLevelApi(this.client);
}
public get TerminalActionsCompanyLevelApi() {
return new TerminalActionsCompanyLevelApi(this.client);
}
public get TerminalActionsTerminalLevelApi() {
return new TerminalActionsTerminalLevelApi(this.client);
}
public get TerminalOrdersCompanyLevelApi() {
return new TerminalOrdersCompanyLevelApi(this.client);
}
public get TerminalOrdersMerchantLevelApi() {
return new TerminalOrdersMerchantLevelApi(this.client);
}
public get TerminalSettingsCompanyLevelApi() {
return new TerminalSettingsCompanyLevelApi(this.client);
}
public get TerminalSettingsMerchantLevelApi() {
return new TerminalSettingsMerchantLevelApi(this.client);
}
public get TerminalSettingsStoreLevelApi() {
return new TerminalSettingsStoreLevelApi(this.client);
}
public get TerminalSettingsTerminalLevelApi() {
return new TerminalSettingsTerminalLevelApi(this.client);
}
public get TerminalsTerminalLevelApi() {
return new TerminalsTerminalLevelApi(this.client);
}
public get UsersCompanyLevelApi() {
return new UsersCompanyLevelApi(this.client);
}
public get UsersMerchantLevelApi() {
return new UsersMerchantLevelApi(this.client);
}
public get WebhooksCompanyLevelApi() {
return new WebhooksCompanyLevelApi(this.client);
}
public get WebhooksMerchantLevelApi() {
return new WebhooksMerchantLevelApi(this.client);
}
}

export default Management;
Loading

0 comments on commit 316542a

Please sign in to comment.