-
-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathapp.js
More file actions
138 lines (113 loc) · 4.4 KB
/
app.js
File metadata and controls
138 lines (113 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const paapiSdk = require('./SDK/src/index'); // This is downloaded straight from PAAPI website.
const marketplaceList = require('./marketplace.json');
const defaultClient = paapiSdk.ApiClient.instance;
const api = new paapiSdk.DefaultApi();
const OPERATIONS = {
getItems: paapiSdk.GetItemsRequest,
getBrowseNodes: paapiSdk.GetBrowseNodesRequest,
getVariations: paapiSdk.GetVariationsRequest,
searchItems: paapiSdk.SearchItemsRequest,
};
const OFFERS_V1_RESOURCE_PREFIX = 'Offers.';
const OFFERS_V2_RESOURCE_PREFIX = 'OffersV2.';
const apiRequest = async (Options) => {
let commonParameters = Options.commonParameters;
defaultClient.accessKey = commonParameters.AccessKey;
defaultClient.secretKey = commonParameters.SecretKey;
let marketPlaceDetails = await getMarketplaceDetails(commonParameters.Marketplace);
defaultClient.host = marketPlaceDetails.Host;
defaultClient.region = marketPlaceDetails.Region;
let operationOptions = getDefaultOperation(Options.Operations);
operationOptions['PartnerTag'] = commonParameters.PartnerTag;
operationOptions['PartnerType'] = isUndefined(commonParameters.PartnerType)
? 'Associates'
: commonParameters.PartnerType;
Object.assign(operationOptions, Options.requestParameters);
return await api[Options.Operations](operationOptions);
};
const GetItems = async (commonParameters, requestParameters) => {
let Options = { commonParameters, requestParameters, Operations : "getItems" };
return await apiRequest(Options);
};
const GetBrowseNodes = async (commonParameters, requestParameters) => {
let Options = { commonParameters, requestParameters, Operations : "getBrowseNodes" };
return await apiRequest(Options);
};
const GetVariations = async (commonParameters, requestParameters) => {
let Options = { commonParameters, requestParameters, Operations : "getVariations" };
return await apiRequest(Options);
};
const SearchItems = async (commonParameters, requestParameters) => {
let Options = { commonParameters, requestParameters, Operations : "searchItems" };
return await apiRequest(Options);
};
const GetItemsV2 = async (commonParameters, requestParameters) => {
let Options = {
commonParameters,
requestParameters: upgradeOffersResources(requestParameters),
Operations: "getItems",
};
return await apiRequest(Options);
};
const GetVariationsV2 = async (commonParameters, requestParameters) => {
let Options = {
commonParameters,
requestParameters: upgradeOffersResources(requestParameters),
Operations: "getVariations",
};
return await apiRequest(Options);
};
const SearchItemsV2 = async (commonParameters, requestParameters) => {
let Options = {
commonParameters,
requestParameters: upgradeOffersResources(requestParameters),
Operations: "searchItems",
};
return await apiRequest(Options);
};
const getDefaultOperation = method => {
let RequestConstructor = OPERATIONS[method];
if (RequestConstructor) {
return new RequestConstructor();
}
throw new Error(`Unsupported operation: ${method}`);
};
const getMarketplaceDetails = marketplace => new Promise ((resolve, reject) => {
if(isUndefined(marketplace)) { // set US as default
let marketPlaceDetail = marketplaceList.Marketplace.filter(x => x.Web === "www.amazon.com")[0];
resolve(marketPlaceDetail);
} else {
let marketPlaceDetail = marketplaceList.Marketplace.filter(x => x.Web === marketplace.toLowerCase())[0];
if(isUndefined(marketPlaceDetail)) reject("Invalid Marketplace Value.");
resolve(marketPlaceDetail);
}
});
const upgradeOffersResources = requestParameters => {
if (isUndefined(requestParameters)) {
return {};
}
let upgradedRequestParameters = { ...requestParameters };
if (Array.isArray(requestParameters.Resources)) {
upgradedRequestParameters.Resources = requestParameters.Resources.map(resource => {
if (
typeof resource === 'string' &&
resource.startsWith(OFFERS_V1_RESOURCE_PREFIX)
) {
return `${OFFERS_V2_RESOURCE_PREFIX}${resource.slice(OFFERS_V1_RESOURCE_PREFIX.length)}`;
}
return resource;
});
}
return upgradedRequestParameters;
};
const isUndefined = value => typeof value === 'undefined';
const amazonPaapi = {
GetItems,
GetBrowseNodes,
GetVariations,
SearchItems,
GetItemsV2,
GetVariationsV2,
SearchItemsV2,
};
module.exports = { ...amazonPaapi, default : amazonPaapi}; // Allow use of default import syntax in TypeScript.