From b9ca1fd88be9226703fedeae20a26e7658d41754 Mon Sep 17 00:00:00 2001 From: David Ball Date: Mon, 5 Aug 2024 21:58:01 -0400 Subject: [PATCH] fix: Several parts of the API client were broken. Example code compiles now. --- ...odesApi.js => sampleGetBrowseNodesApi.mts} | 4 +-- ...leGetItemsApi.js => sampleGetItemsApi.mts} | 4 +-- ...tionsApi.js => sampleGetVariationsApi.mts} | 6 ++-- ...chItemsApi.js => sampleSearchItemsApi.mts} | 6 ++-- package-lock.json | 4 +-- package.json | 2 +- src/ApiClient.mts | 13 ++++--- src/api/DefaultApi.mts | 35 ++++++++----------- src/model/GetBrowseNodesRequest.mts | 2 +- src/model/GetBrowseNodesResource.mts | 22 +++++------- src/model/GetItemsResource.mts | 9 ++--- src/model/GetVariationsResource.mts | 13 +++---- 12 files changed, 53 insertions(+), 67 deletions(-) rename examples/{sampleGetBrowseNodesApi.js => sampleGetBrowseNodesApi.mts} (98%) rename examples/{sampleGetItemsApi.js => sampleGetItemsApi.mts} (98%) rename examples/{sampleGetVariationsApi.js => sampleGetVariationsApi.mts} (97%) rename examples/{sampleSearchItemsApi.js => sampleSearchItemsApi.mts} (96%) diff --git a/examples/sampleGetBrowseNodesApi.js b/examples/sampleGetBrowseNodesApi.mts similarity index 98% rename from examples/sampleGetBrowseNodesApi.js rename to examples/sampleGetBrowseNodesApi.mts index cddd5c0..f91ac57 100644 --- a/examples/sampleGetBrowseNodesApi.js +++ b/examples/sampleGetBrowseNodesApi.mts @@ -21,7 +21,7 @@ * https://webservices.amazon.com/paapi5/documentation/getbrowsenodes.html */ -var ProductAdvertisingAPIv1 = require('./src/index'); +import * as ProductAdvertisingAPIv1 from '../src/index.mjs'; var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance; @@ -77,7 +77,7 @@ function parseResponse(browseNodesResponseList) { function onSuccess(data) { console.log('API called successfully.'); - var getBrowseNodesResponse = ProductAdvertisingAPIv1.GetBrowseNodesResponse.constructFromObject(data); + var getBrowseNodesResponse = ProductAdvertisingAPIv1.GetBrowseNodesResponse.constructFromObject(data)!; console.log('Complete Response: \n' + JSON.stringify(getBrowseNodesResponse, null, 1)); if (getBrowseNodesResponse['BrowseNodesResult'] !== undefined) { console.log('Printing all browse node information in BrowseNodesResult:'); diff --git a/examples/sampleGetItemsApi.js b/examples/sampleGetItemsApi.mts similarity index 98% rename from examples/sampleGetItemsApi.js rename to examples/sampleGetItemsApi.mts index d45c1a9..0da4056 100644 --- a/examples/sampleGetItemsApi.js +++ b/examples/sampleGetItemsApi.mts @@ -21,7 +21,7 @@ * https://webservices.amazon.com/paapi5/documentation/get-items.html */ -var ProductAdvertisingAPIv1 = require('./src/index'); +import * as ProductAdvertisingAPIv1 from '../src/index.mjs'; var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance; @@ -72,7 +72,7 @@ function parseResponse(itemsResponseList) { function onSuccess(data) { console.log('API called successfully.'); - var getItemsResponse = ProductAdvertisingAPIv1.GetItemsResponse.constructFromObject(data); + var getItemsResponse = ProductAdvertisingAPIv1.GetItemsResponse.constructFromObject(data)!; console.log('Complete Response: \n' + JSON.stringify(getItemsResponse, null, 1)); if (getItemsResponse['ItemsResult'] !== undefined) { console.log('Printing All Item Information in ItemsResult:'); diff --git a/examples/sampleGetVariationsApi.js b/examples/sampleGetVariationsApi.mts similarity index 97% rename from examples/sampleGetVariationsApi.js rename to examples/sampleGetVariationsApi.mts index 729136a..0b1ea61 100644 --- a/examples/sampleGetVariationsApi.js +++ b/examples/sampleGetVariationsApi.mts @@ -21,7 +21,7 @@ * https://webservices.amazon.com/paapi5/documentation/get-variations.html */ -var ProductAdvertisingAPIv1 = require('./src/index'); +import * as ProductAdvertisingAPIv1 from '../src/index.mjs'; var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance; @@ -62,7 +62,7 @@ getVariationsRequest['Resources'] = [ function onSuccess(data) { console.log('API called successfully.'); - var getVariationsResponse = ProductAdvertisingAPIv1.GetVariationsResponse.constructFromObject(data); + var getVariationsResponse = ProductAdvertisingAPIv1.GetVariationsResponse.constructFromObject(data)!; console.log('Complete Response: \n' + JSON.stringify(getVariationsResponse, null, 1)); if (getVariationsResponse['VariationsResult'] !== undefined) { //console.log('Complete VariationsResult: \n' + JSON.stringify(getVariationsResponse['VariationsResult'], null, 1)); @@ -74,7 +74,7 @@ function onSuccess(data) { console.log('VariationCount: ' + getVariationsResponse['VariationsResult']['VariationSummary']['VariationCount']); } console.log('Printing First Item Information in VariationsResult:'); - var item_0 = getVariationsResponse['VariationsResult']['Items'][0]; + var item_0 = getVariationsResponse['VariationsResult']['Items']![0]; if (item_0 !== undefined) { if (item_0['ASIN'] !== undefined) { console.log('ASIN: ' + item_0['ASIN']); diff --git a/examples/sampleSearchItemsApi.js b/examples/sampleSearchItemsApi.mts similarity index 96% rename from examples/sampleSearchItemsApi.js rename to examples/sampleSearchItemsApi.mts index c4d58aa..0b23ced 100644 --- a/examples/sampleSearchItemsApi.js +++ b/examples/sampleSearchItemsApi.mts @@ -21,7 +21,7 @@ * https://webservices.amazon.com/paapi5/documentation/search-items.html */ -var ProductAdvertisingAPIv1 = require('./src/index'); +import * as ProductAdvertisingAPIv1 from '../src/index.mjs'; var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance; @@ -66,11 +66,11 @@ searchItemsRequest['Resources'] = ['Images.Primary.Medium', 'ItemInfo.Title', 'O function onSuccess(data) { console.log('API called successfully.'); - var searchItemsResponse = ProductAdvertisingAPIv1.SearchItemsResponse.constructFromObject(data); + var searchItemsResponse = ProductAdvertisingAPIv1.SearchItemsResponse.constructFromObject(data)!; console.log('Complete Response: \n' + JSON.stringify(searchItemsResponse, null, 1)); if (searchItemsResponse['SearchResult'] !== undefined) { console.log('Printing First Item Information in SearchResult:'); - var item_0 = searchItemsResponse['SearchResult']['Items'][0]; + var item_0 = searchItemsResponse['SearchResult']['Items']![0]; if (item_0 !== undefined) { if (item_0['ASIN'] !== undefined) { console.log('ASIN: ' + item_0['ASIN']); diff --git a/package-lock.json b/package-lock.json index 156c09d..3b04575 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "amazon-pa-api5-node-ts", - "version": "2.2.3", + "version": "2.2.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "amazon-pa-api5-node-ts", - "version": "2.2.2", + "version": "2.2.4", "license": "Apache-2.0", "dependencies": { "superagent": "^9.0.0" diff --git a/package.json b/package.json index cb5d658..48428da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amazon-pa-api5-node-ts", - "version": "2.2.3", + "version": "2.2.4", "description": "ProductAdvertisingAPI 5.0 NodeJS SDK rewritten in TypeScript.", "license": "Apache-2.0", "main": "dist/src/index.mjs", diff --git a/src/ApiClient.mts b/src/ApiClient.mts index 8072374..95d37d1 100644 --- a/src/ApiClient.mts +++ b/src/ApiClient.mts @@ -68,6 +68,11 @@ */ MULTI = 'multi', }; + + export interface ApiResponse { + data: T; + response: any; + } /** * Manages low level client-server communications, parameter marshalling, etc. There should not be any need for an @@ -344,9 +349,9 @@ * constructor for a complex type. * @returns {Promise} A {@link https://www.promisejs.org/|Promise} object. */ - public callApi(path: string, httpMethod: string, apiName: string, pathParams: Record, + public callApi(path: string, httpMethod: string, apiName: string, pathParams: Record, queryParams: Record, collectionQueryParams: Record, headerParams: Record, formParams: Record, bodyParam: any, authNames: string[], contentTypes: string[], accepts: string[], - returnType: string|string[]|any|any[]) { + returnType: string|string[]|any|any[]): Promise> { // Throw error if credentials are not specified if (this.accessKey === undefined || this.secretKey === undefined || this.accessKey === null || this.secretKey === null) { @@ -454,13 +459,13 @@ this.agent.attachCookies(request); } - return new Promise(function(resolve, reject) { + return new Promise>(function(resolve, reject) { request.end(function(error, response) { if (error) { reject(error); } else { try { - var data = self.deserialize(response, returnType); + var data = self.deserialize(response, returnType) as T; if (self.enableCookies && typeof window === 'undefined'){ self.agent.saveCookies(response); } diff --git a/src/api/DefaultApi.mts b/src/api/DefaultApi.mts index fce444c..5784184 100644 --- a/src/api/DefaultApi.mts +++ b/src/api/DefaultApi.mts @@ -21,7 +21,8 @@ * */ - import { ApiClient } from "../ApiClient.mjs"; + import { ApiClient, type ApiResponse } from "../ApiClient.mjs"; +import type { GetItemsResource } from "../index.mjs"; import { GetBrowseNodesRequest } from "../model/GetBrowseNodesRequest.mjs"; import { GetBrowseNodesResponse } from "../model/GetBrowseNodesResponse.mjs"; import { GetItemsRequest } from "../model/GetItemsRequest.mjs"; @@ -55,7 +56,7 @@ * @param {module:model/GetBrowseNodesRequest} getBrowseNodesRequest GetBrowseNodesRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/GetBrowseNodesResponse} and HTTP response */ - public getBrowseNodesWithHttpInfo(getBrowseNodesRequest: GetBrowseNodesRequest) { + public getBrowseNodesWithHttpInfo(getBrowseNodesRequest: GetBrowseNodesRequest): Promise> { var postBody = getBrowseNodesRequest; // verify the required parameter 'getBrowseNodesRequest' is set @@ -91,11 +92,9 @@ * @param {module:model/GetBrowseNodesRequest} getBrowseNodesRequest GetBrowseNodesRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/GetBrowseNodesResponse} */ - public getBrowseNodes(getBrowseNodesRequest: GetBrowseNodesRequest) { + public getBrowseNodes(getBrowseNodesRequest: GetBrowseNodesRequest): Promise { return this.getBrowseNodesWithHttpInfo(getBrowseNodesRequest) - .then(function(response_and_data: any) { - return response_and_data.data; - }); + .then((response_and_data: ApiResponse) => response_and_data.data); } @@ -103,7 +102,7 @@ * @param {module:model/GetItemsRequest} getItemsRequest GetItemsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/GetItemsResponse} and HTTP response */ - public getItemsWithHttpInfo(getItemsRequest: GetItemsRequest) { + public getItemsWithHttpInfo(getItemsRequest: GetItemsRequest): Promise> { var postBody = getItemsRequest; // verify the required parameter 'getItemsRequest' is set @@ -139,11 +138,9 @@ * @param {module:model/GetItemsRequest} getItemsRequest GetItemsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/GetItemsResponse} */ - public getItems(getItemsRequest: GetItemsRequest) { + public getItems(getItemsRequest: GetItemsRequest): Promise { return this.getItemsWithHttpInfo(getItemsRequest) - .then(function(response_and_data: any) { - return response_and_data.data; - }); + .then((response_and_data: ApiResponse) => response_and_data.data); } @@ -151,7 +148,7 @@ * @param {module:model/GetVariationsRequest} getVariationsRequest GetVariationsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/GetVariationsResponse} and HTTP response */ - public getVariationsWithHttpInfo(getVariationsRequest: GetVariationsRequest) { + public getVariationsWithHttpInfo(getVariationsRequest: GetVariationsRequest): Promise> { var postBody = getVariationsRequest; // verify the required parameter 'getVariationsRequest' is set @@ -187,11 +184,9 @@ * @param {module:model/GetVariationsRequest} getVariationsRequest GetVariationsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/GetVariationsResponse} */ - public getVariations(getVariationsRequest: GetVariationsRequest) { + public getVariations(getVariationsRequest: GetVariationsRequest): Promise { return this.getVariationsWithHttpInfo(getVariationsRequest) - .then(function(response_and_data: any) { - return response_and_data.data; - }); + .then((response_and_data: ApiResponse) => response_and_data.data); } @@ -199,7 +194,7 @@ * @param {module:model/SearchItemsRequest} searchItemsRequest SearchItemsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/SearchItemsResponse} and HTTP response */ - public searchItemsWithHttpInfo(searchItemsRequest: SearchItemsRequest) { + public searchItemsWithHttpInfo(searchItemsRequest: SearchItemsRequest): Promise> { var postBody = searchItemsRequest; // verify the required parameter 'searchItemsRequest' is set @@ -235,11 +230,9 @@ * @param {module:model/SearchItemsRequest} searchItemsRequest SearchItemsRequest * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/SearchItemsResponse} */ - public searchItems(searchItemsRequest: SearchItemsRequest) { + public searchItems(searchItemsRequest: SearchItemsRequest): Promise { return this.searchItemsWithHttpInfo(searchItemsRequest) - .then(function(response_and_data: any) { - return response_and_data.data; - }); + .then((response_and_data: ApiResponse) => response_and_data.data); } }; \ No newline at end of file diff --git a/src/model/GetBrowseNodesRequest.mts b/src/model/GetBrowseNodesRequest.mts index e5d6b45..b05dd6c 100644 --- a/src/model/GetBrowseNodesRequest.mts +++ b/src/model/GetBrowseNodesRequest.mts @@ -63,7 +63,7 @@ export class GetBrowseNodesRequest { /** * @member {Array.} Resources */ - public Resources?: GetBrowseNodesResource; + public Resources?: GetBrowseNodesResource[]; // not sure if this is ever going to be relevant: // public constructor(browseNodeIds, partnerTag, partnerType) { diff --git a/src/model/GetBrowseNodesResource.mts b/src/model/GetBrowseNodesResource.mts index dfa2a5d..0d55082 100644 --- a/src/model/GetBrowseNodesResource.mts +++ b/src/model/GetBrowseNodesResource.mts @@ -26,17 +26,17 @@ * @enum {} * @readonly */ -export const enum GetBrowseNodesResourceValues { +export const GetBrowseNodesResourceValues = { /** * value: "BrowseNodes.Ancestor" * @const */ - Ancestor = "BrowseNodes.Ancestor", + "BrowseNodes.Ancestor": "BrowseNodes.Ancestor", /** * value: "BrowseNodes.Children" * @const */ - Children = "BrowseNodes.Children" + "BrowseNodes.Children": "BrowseNodes.Children", }; /** @@ -45,20 +45,14 @@ export const enum GetBrowseNodesResourceValues { * @readonly */ export class GetBrowseNodesResource extends String { - /** - * value: "BrowseNodes.Ancestor" - * @const - */ - public static get Ancestor() { return GetBrowseNodesResourceValues.Ancestor; } - /** - * value: "BrowseNodes.Children" - * @const - */ - public static get Children() { return GetBrowseNodesResourceValues.Children; } + public constructor(s: string) { + super(GetBrowseNodesResourceValues[s]); + } + /** * Returns a GetBrowseNodesResource enum value from a Javascript object name. * @param {Object} data The plain JavaScript object containing the name of the enum value. * @return {module:model/GetBrowseNodesResource} The enum GetBrowseNodesResource value. */ - public static constructFromObject(object: GetBrowseNodesResource|GetBrowseNodesResourceValues|string) { return object; } + public static constructFromObject(object: GetBrowseNodesResource|string) { return object; } }; diff --git a/src/model/GetItemsResource.mts b/src/model/GetItemsResource.mts index 648f402..ff245b3 100644 --- a/src/model/GetItemsResource.mts +++ b/src/model/GetItemsResource.mts @@ -330,12 +330,9 @@ export const GetItemsResourceValues = { * @enum {} * @readonly */ -export class GetItemsResource { - [key: string]: any; - - public constructor() { - const self = this; - Object.keys(GetItemsResourceValues).forEach((key: string) => self[key] = GetItemsResource[key]); +export class GetItemsResource extends String { + public constructor(s: string) { + super(GetItemsResourceValues[s]); } /** diff --git a/src/model/GetVariationsResource.mts b/src/model/GetVariationsResource.mts index 5b5a892..bb86293 100644 --- a/src/model/GetVariationsResource.mts +++ b/src/model/GetVariationsResource.mts @@ -26,7 +26,7 @@ * @enum {} * @readonly */ -export const GetVariationsResourceValues = { +export const GetVariationsResourceValues: Record = { /** * value: "BrowseNodeInfo.BrowseNodes" * @const @@ -336,7 +336,7 @@ export const GetVariationsResourceValues = { * value: "VariationSummary.VariationDimension" * @const */ - "VariationSummary.VariationDimension": "VariationSummary.VariationDimension" + "VariationSummary.VariationDimension": "VariationSummary.VariationDimension", }; /** @@ -344,12 +344,9 @@ export const GetVariationsResourceValues = { * @enum {} * @readonly */ -export class GetVariationsResource { - [key: string]: any; - - public constructor() { - const self = this; - Object.keys(GetVariationsResourceValues).forEach((key: string) => self[key] = GetVariationsResourceValues[key]); +export class GetVariationsResource extends String { + public constructor(s: string) { + super(GetVariationsResourceValues[s]); } /**