diff --git a/src/http.ts b/src/http.ts index 596d6079..b8f99720 100644 --- a/src/http.ts +++ b/src/http.ts @@ -57,8 +57,8 @@ export interface MWSOptions { secretKey: string } -type HttpMethod = 'GET' | 'POST' -type ParameterTypes = +export type HttpMethod = 'GET' | 'POST' +export type ParameterTypes = | string | number | (number | string)[] @@ -67,8 +67,8 @@ type ParameterTypes = | { [key: string]: ParameterTypes } | undefined -type Parameters = Record -type CleanParameters = Record +export type Parameters = Record +export type CleanParameters = Record export enum Resource { FulfilmentInventory = 'FulfillmentInventory', @@ -80,7 +80,7 @@ export enum Resource { Subscriptions = 'Subscriptions', } -interface ResourceActions { +export interface ResourceActions { [Resource.Sellers]: | 'ListMarketplaceParticipations' | 'ListMarketplaceParticipationsByNextToken' @@ -145,14 +145,14 @@ interface ResourceActions { | 'GetServiceStatus' } -interface Request { +export interface Request { url: string method: HttpMethod headers: Record data?: string } -interface ResourceInfo { +export interface ResourceInfo { resource: TResource version: string action: ResourceActions[TResource] @@ -167,7 +167,7 @@ export interface RequestMeta { quotaResetOn: Date } -interface RequestResponse { +export interface RequestResponse { data: string headers: Record } diff --git a/src/index.ts b/src/index.ts index 5b42dee2..67dc2567 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,5 +11,7 @@ export * from './sections/products/codec' export * from './sections/products/type' export * from './sections/reports' export * from './sections/sellers' +export * from './sections/types' export * from '@scaleleap/amazon-marketplaces' export { NextToken } from './parsing' +export { MWSApiError } from './error-codec' diff --git a/src/sections/finances/codec.ts b/src/sections/finances/codec.ts index 44bf73d1..7ddbf28e 100644 --- a/src/sections/finances/codec.ts +++ b/src/sections/finances/codec.ts @@ -10,8 +10,9 @@ import { } from 'purify-ts' import { ensureArray, ensureString, mwsDate, nextToken as nextTokenCodec } from '../../parsing' +import { FulfillmentChannelEnum } from '../types' -enum ProcessingStatusEnum { +export enum ProcessingStatusEnum { Open = 'Open', Closed = 'Closed', } @@ -37,7 +38,7 @@ const FinancialEventGroup = Codec.interface({ FinancialEventGroupEnd: optional(mwsDate), }) -const ListFinancialEventGroups = Codec.interface({ +export const ListFinancialEventGroups = Codec.interface({ NextToken: optional(nextTokenCodec('ListFinancialEventGroups')), FinancialEventGroupList: ensureArray('FinancialEventGroup', FinancialEventGroup), }) @@ -68,7 +69,7 @@ const FeeComponent = Codec.interface({ FeeAmount: optional(CurrencyAmount), }) -enum ChargeTypeEnum { +export enum ChargeTypeEnum { Principal = 'Principal', Tax = 'Tax', 'MarketplaceFacilitatorTax-Principal' = 'MarketplaceFacilitatorTax-Principal', @@ -109,7 +110,7 @@ const ChargeComponent = Codec.interface({ ChargeAmount: optional(CurrencyAmount), }) -enum DirectPaymentTypeEnum { +export enum DirectPaymentTypeEnum { StoredValueCardRevenue = 'StoredValueCardRevenue', StoredValueCardRefund = 'StoredValueCardRefund', PrivateLabelCreditCardRevenue = 'PrivateLabelCreditCardRevenue', @@ -125,7 +126,7 @@ const DirectPayment = Codec.interface({ DirectPaymentAmount: optional(CurrencyAmount), }) -enum TaxCollectionModelEnum { +export enum TaxCollectionModelEnum { MarketplaceFacilitator = 'MarketplaceFacilitator', Standard = 'Standard', } @@ -178,11 +179,6 @@ const RefundEvent = ShipmentEvent const GuaranteeClaimEvent = ShipmentEvent const ChargebackEvent = ShipmentEvent -enum FulfillmentChannelEnum { - AFN = 'AFN', - MFN = 'MFN', -} - const FulfillmentChannel = enumeration(FulfillmentChannelEnum) const PayWithAmazonEvent = Codec.interface({ @@ -198,7 +194,7 @@ const PayWithAmazonEvent = Codec.interface({ StoreName: optional(string), }) -enum ProviderTransactionTypeEnum { +export enum ProviderTransactionTypeEnum { ProviderCredit = 'ProviderCredit', ProviderCreditReversal = 'ProviderCreditReversal', } @@ -216,7 +212,7 @@ const SolutionProviderCreditEvent = Codec.interface({ ProviderStoreName: optional(string), }) -enum RetrochargeEventTypeEnum { +export enum RetrochargeEventTypeEnum { Retrocharge = 'Retrocharge', RetrochargeReversal = 'RetrochargeReversal', } @@ -235,7 +231,7 @@ const RetrochargeEvent = Codec.interface({ ), }) -enum RentalEventTypeEnum { +export enum RentalEventTypeEnum { 'RentalCustomerPayment-Buyout' = 'RentalCustomerPayment-Buyout', 'RentalCustomerPayment-Extension' = 'RentalCustomerPayment-Extension', 'RentalCustomerRefund-Buyout' = 'RentalCustomerRefund-Buyout', @@ -267,7 +263,7 @@ const PerformanceBondRefundEvent = unknown /** * Not sure what case MWS returns. Sample requests has them captialized but docs has them in lower case */ -enum transactionTypeEnum { +export enum transactionTypeEnum { charge = 'charge', refund = 'refund', Charge = 'Charge', @@ -311,7 +307,7 @@ const ChargeInstrument = Codec.interface({ Amount: optional(CurrencyAmount), }) -enum DebtRecoveryTypeEnum { +export enum DebtRecoveryTypeEnum { DebtPayment = 'DebtPayment', DebtPaymentFailure = 'DebtPaymentFailure', DebtAdjustment = 'DebtAdjustment', @@ -327,7 +323,7 @@ const DebtRecoveryEvent = Codec.interface({ ChargeInstrumentList: optional(ensureArray('ChargeInstrument', ChargeInstrument)), }) -enum SourceBusinessEventTypeEnum { +export enum SourceBusinessEventTypeEnum { LoanAdvance = 'LoanAdvance', LoanPayment = 'LoanPayment', LoanRefund = 'LoanRefund', @@ -340,7 +336,7 @@ const LoanServicingEvent = Codec.interface({ SourceBusinessEventType: optional(SourceBusinessEventType), }) -enum AdjustmentTypeEnum { +export enum AdjustmentTypeEnum { FBAInventoryReimbursement = 'FBAInventoryReimbursement', ReserveEvent = 'ReserveEvent', PostageBilling = 'PostageBilling', @@ -441,7 +437,7 @@ const AffordabilityExpenseReversalEvent = Codec.interface({ MarketplaceId: optional(string), }) -enum NetworkComminglingTransactionTypeEnum { +export enum NetworkComminglingTransactionTypeEnum { ComminglingVAT = 'ComminglingVAT', NetCo = 'NetCo', } @@ -516,7 +512,7 @@ const FinancialEvents = Codec.interface({ TDSReimbursementEventList: optional(ensureArray('TDSReimbursementEvent', TDSReimbursementEvent)), }) -const ListFinancialEvents = Codec.interface({ +export const ListFinancialEvents = Codec.interface({ NextToken: optional(nextTokenCodec('ListFinancialEvents')), FinancialEvents, }) diff --git a/src/sections/fulfillment-inventory.ts b/src/sections/fulfillment-inventory.ts index 80c76824..52ef68db 100644 --- a/src/sections/fulfillment-inventory.ts +++ b/src/sections/fulfillment-inventory.ts @@ -8,7 +8,7 @@ import { RequireOnlyOne } from './types' const FULFILLMENT_INVENTORY_API_VERSION = '2010-10-01' -enum Condition { +export enum InventoryCondition { NewItem = 'NewItem', NewWithWarranty = 'NewWithWarranty', NewOEM = 'NewOEM', @@ -31,13 +31,13 @@ enum Condition { '' = '', } -enum TimepointType { +export enum TimepointType { Immediately = 'Immediately', DateTime = 'DateTime', Unknown = 'Unknown', } -enum SupplyType { +export enum SupplyType { InStock = 'InStock', Inbound = 'Inbound', Transfer = 'Transfer', @@ -59,14 +59,14 @@ const InventorySupply = Codec.interface({ SellerSKU: optional(string), FNSKU: string, ASIN: optional(string), - Condition: optional(oneOf(Object.values(Condition).map((x) => exactly(x)))), + Condition: optional(oneOf(Object.values(InventoryCondition).map((x) => exactly(x)))), TotalSupplyQuantity: number, InStockSupplyQuantity: number, EarliestAvailability: optional(Timepoint), SupplyDetail: optional(ensureArray('member', InventorySupplyDetail)), }) -const InventorySupplyList = Codec.interface({ +export const InventorySupplyList = Codec.interface({ NextToken: optional(nextTokenCodec('ListInventorySupply')), MarketplaceId: optional(string), InventorySupplyList: ensureArray('member', InventorySupply), @@ -78,7 +78,7 @@ const ListInventorySupplyResponse = Codec.interface({ }), }) -const InventorySupplyListByNextToken = Codec.interface({ +export const InventorySupplyListByNextToken = Codec.interface({ NextToken: optional(nextTokenCodec('ListInventorySupply')), InventorySupplyList: ensureArray('member', InventorySupply), }) diff --git a/src/sections/orders.ts b/src/sections/orders.ts index d6c23350..55f03095 100644 --- a/src/sections/orders.ts +++ b/src/sections/orders.ts @@ -19,7 +19,7 @@ import { nextToken as nextTokenCodec, } from '../parsing' import { getServiceStatusByResource } from './shared' -import { RequireOnlyOne } from './types' +import { FulfillmentChannelEnum, RequireOnlyOne } from './types' const ORDERS_API_VERSION = '2013-09-01' @@ -33,11 +33,6 @@ export enum OrderStatusEnum { Unfulfillable = 'Unfulfillable', } -export enum FulfillmentChannelEnum { - AFN = 'AFN', - MFN = 'MFN', -} - export enum PaymentMethodEnum { COD = 'COD', CVS = 'CVS', @@ -137,7 +132,7 @@ const Money = Codec.interface({ Amount: optional(number), }) -const Order = Codec.interface({ +export const Order = Codec.interface({ AmazonOrderId: string, SellerOrderId: optional(string), PurchaseDate: mwsDate, @@ -185,7 +180,7 @@ const Order = Codec.interface({ IsEstimatedShipDateSet: optional(boolean), }) -const ListOrders = Codec.interface({ +export const ListOrders = Codec.interface({ NextToken: optional(nextTokenCodec('ListOrders')), LastUpdatedBefore: optional(mwsDate), CreatedBefore: optional(mwsDate), @@ -212,7 +207,7 @@ const GetOrderResponse = Codec.interface({ }), }) -const ListOrderItems = Codec.interface({ +export const ListOrderItems = Codec.interface({ NextToken: optional(string), AmazonOrderId: string, OrderItems: ensureArray( diff --git a/src/sections/products/codec.ts b/src/sections/products/codec.ts index 89e39ee1..05af6fd2 100644 --- a/src/sections/products/codec.ts +++ b/src/sections/products/codec.ts @@ -24,7 +24,7 @@ import { * Collection of codecs for the products api */ -enum ItemConditionEnum { +export enum ItemConditionEnum { Any = 'Any', New = 'New', Used = 'Used', @@ -37,7 +37,7 @@ const ItemCondition = enumeration(ItemConditionEnum) const CurrencyCode = enumeration(CurrencyCodeEnum) -enum StatusEnum { +export enum StatusEnum { Success = 'Success', ClientError = 'ClientError', ServiceError = 'ServiceError', @@ -45,7 +45,7 @@ enum StatusEnum { const Status = enumeration(StatusEnum) -enum IdTypeEnum { +export enum IdTypeEnum { ASIN = 'ASIN', SKU = 'SKU', } @@ -57,7 +57,7 @@ const MoneyType = Codec.interface({ CurrencyCode, }) -export const Points = Codec.interface({ +export const PointsCodec = Codec.interface({ PointsNumber: number, PointsMonetaryValue: MoneyType, }) @@ -71,7 +71,7 @@ const ErrorType = Codec.interface({ const PriceToEstimateFees = Codec.interface({ ListingPrice: MoneyType, Shipping: optional(MoneyType), - Points: optional(Points), + Points: optional(PointsCodec), }) const FeesEstimateIdentifier = Codec.interface({ @@ -126,7 +126,7 @@ const SingleProductInterface = Codec.interface({ Product, }) -const ListMatchingProducts = Codec.interface({ +export const ListMatchingProducts = Codec.interface({ Products: ensureArray('Product', Product), }) @@ -218,14 +218,14 @@ const LowestPrice = Codec.interface({ LandedPrice: MoneyType, ListingPrice: MoneyType, Shipping: MoneyType, - Points: optional(Points), + Points: optional(PointsCodec), }) const BuyBoxPrice = Codec.interface({ LandedPrice: MoneyType, ListingPrice: MoneyType, Shipping: MoneyType, - Points: optional(Points), + Points: optional(PointsCodec), }) const Summary = Codec.interface({ @@ -275,7 +275,7 @@ const Offer = { SellerFeedbackRating: optional(SellerFeedbackRating), ShippingTime: DetailedShippingTimeType, ListingPrice: MoneyType, - Points: optional(Points), + Points: optional(PointsCodec), Shipping: MoneyType, ShipsFrom: optional(ShipsFrom), IsFulfilledByAmazon: boolean, @@ -283,7 +283,7 @@ const Offer = { IsFeaturedMerchant: optional(boolean), } -const GetLowestPricedOffersForSKU = Codec.interface({ +export const GetLowestPricedOffersForSKU = Codec.interface({ Identifier: SkuIdentifier, Summary, Offers: ensureArray( @@ -301,7 +301,7 @@ export const GetLowestPricedOffersForSKUResponse = Codec.interface({ }), }) -const GetLowestPricedOffersForASIN = Codec.interface({ +export const GetLowestPricedOffersForASIN = Codec.interface({ Identifier: AsinIdentifier, Summary, Offers: ensureArray( @@ -318,13 +318,16 @@ export const GetLowestPricedOffersForASINResponse = Codec.interface({ }), }) -const GetMyPriceForSKUResult = ensureArray('GetMyPriceForSKUResult', SingleProductInterface) +export const GetMyPriceForSKUResult = ensureArray('GetMyPriceForSKUResult', SingleProductInterface) export const GetMyPriceForSKUResponse = Codec.interface({ GetMyPriceForSKUResponse: GetMyPriceForSKUResult, }) -const GetMyPriceForASINResult = ensureArray('GetMyPriceForASINResult', SingleProductInterface) +export const GetMyPriceForASINResult = ensureArray( + 'GetMyPriceForASINResult', + SingleProductInterface, +) export const GetMyPriceForASINResponse = Codec.interface({ GetMyPriceForASINResponse: GetMyPriceForASINResult, @@ -336,7 +339,7 @@ const ProductCategory: Codec = Codec.interface({ Parent: optional(lazy(() => ProductCategory)), }) -const GetProductCategoriesForSKU = ensureArray('Self', ProductCategory) +export const GetProductCategoriesForSKU = ensureArray('Self', ProductCategory) export const GetProductCategoriesForSKUResponse = Codec.interface({ GetProductCategoriesForSKUResponse: Codec.interface({ @@ -344,7 +347,7 @@ export const GetProductCategoriesForSKUResponse = Codec.interface({ }), }) -const GetProductCategoriesForASIN = ensureArray('Self', ProductCategory) +export const GetProductCategoriesForASIN = ensureArray('Self', ProductCategory) export const GetProductCategoriesForASINResponse = Codec.interface({ GetProductCategoriesForASINResponse: Codec.interface({ diff --git a/src/sections/products/type.ts b/src/sections/products/type.ts index 6be942f4..e4e18dc0 100644 --- a/src/sections/products/type.ts +++ b/src/sections/products/type.ts @@ -24,7 +24,7 @@ export enum CurrencyCodeEnum { MXN = 'MXN', } -interface MoneyType { +export interface MoneyType { Amount: number | undefined CurrencyCode: CurrencyCodeEnum } @@ -38,12 +38,12 @@ export interface FeeDetail { IncludedFeeDetailList: FeeDetail[] | undefined } -interface Points { +export interface Points { PointsNumber: number PointsMonetaryValue: MoneyType } -interface PriceToEstimateFees { +export interface PriceToEstimateFees { ListingPrice: MoneyType Shipping?: MoneyType Points?: Points diff --git a/src/sections/reports.ts b/src/sections/reports.ts index 8315ced2..c5617541 100644 --- a/src/sections/reports.ts +++ b/src/sections/reports.ts @@ -22,7 +22,7 @@ const REPORTS_API_VERSION = '2009-01-01' * Could probably define an enum for this * http://docs.developer.amazonservices.com/en_CA/reports/Reports_ReportType.html#ReportTypeCategories__ListingsReports */ -const ReportType = string +export const ReportType = string export type ReportType = GetInterface export interface RequestReportParameters { @@ -33,8 +33,8 @@ export interface RequestReportParameters { MarketplaceIdList?: string[] } -// Amazon does not explicitlye define which elements of the response are required so everything is optional for now -const ReportRequestInfo = Codec.interface({ +// Amazon does not explicitly define which elements of the response are required so everything is optional for now +export const ReportRequestInfo = Codec.interface({ ReportRequestId: ensureString, ReportType: optional(ReportType), StartDate: optional(mwsDate), @@ -65,7 +65,7 @@ export type ReportProcessing = | '_DONE_NO_DATA_' | 'All' -enum ScheduleEnum { +export enum ScheduleEnum { _15_MINUTES_ = '_15_MINUTES_', _30_MINUTES_ = '_30_MINUTES_', _1_HOUR_ = '_1_HOUR_', @@ -111,7 +111,7 @@ export interface GetReportRequestListParameters { RequestedToDate?: Date } -const GetReportRequestListResult = Codec.interface({ +export const GetReportRequestListResult = Codec.interface({ NextToken: optional(nextTokenCodec('GetReportRequestList')), HasNext: optional(boolean), ReportRequestInfo: optional(oneOf([array(ReportRequestInfo), ReportRequestInfo, exactly('')])), @@ -142,7 +142,7 @@ export interface GetReportRequestCountParameters { RequestedToDate?: Date } -const GetReportRequestCount = Codec.interface({ +export const GetReportRequestCount = Codec.interface({ Count: number, }) @@ -162,7 +162,7 @@ export interface CancelReportRequestsParameters { RequestedToDate?: Date } -const CancelReportRequests = Codec.interface({ +export const CancelReportRequests = Codec.interface({ Count: number, ReportRequestInfo: optional(oneOf([array(ReportRequestInfo), ReportRequestInfo, exactly('')])), }) @@ -193,7 +193,7 @@ const ReportInfo = Codec.interface({ AcknowledgedDate: optional(mwsDate), }) -const GetReportListResult = Codec.interface({ +export const GetReportListResult = Codec.interface({ HasNext: boolean, NextToken: optional(nextTokenCodec('GetReportList')), ReportInfo: optional(oneOf([array(ReportInfo), ReportInfo, exactly('')])), @@ -217,7 +217,7 @@ const GetReportListByNextTokenResponse = Codec.interface({ export type GetReportListResult = GetInterface -const GetReportCount = Codec.interface({ +export const GetReportCount = Codec.interface({ Count: number, }) @@ -245,7 +245,7 @@ const GetReportResponse = Codec.custom({ encode: (report) => report, }) -type Report = string +export type Report = string export type GetReportCount = GetInterface @@ -261,7 +261,7 @@ const ReportSchedule = Codec.interface({ ScheduledDate: mwsDate, }) -const ManageReportSchedule = Codec.interface({ +export const ManageReportSchedule = Codec.interface({ Count: number, ReportSchedule: optional(oneOf([array(ReportSchedule), ReportSchedule, exactly('')])), }) @@ -278,7 +278,7 @@ export interface GetReportScheduleListParameters { ReportTypeList?: ReportType[] } -const GetReportScheduleList = Codec.interface({ +export const GetReportScheduleList = Codec.interface({ NextToken: optional(nextTokenCodec('GetReportScheduleList')), HasNext: boolean, ReportSchedule: optional(oneOf([array(ReportSchedule), ReportSchedule, exactly('')])), @@ -296,7 +296,7 @@ export interface GetReportScheduleCountParameters { ReportTypeList?: ReportType } -const GetReportScheduleCount = Codec.interface({ +export const GetReportScheduleCount = Codec.interface({ Count: number, }) @@ -313,14 +313,14 @@ export interface UpdateReportAcknowledgementsParameters { Acknowledged?: boolean } -const UpdateReportAcknowledgements = Codec.interface({ +export const UpdateReportAcknowledgements = Codec.interface({ Count: optional(number), ReportInfo: optional(oneOf([array(ReportInfo), ReportInfo, exactly('')])), }) export type UpdateReportAcknowledgements = GetInterface -const UpdateReportAcknowledgementsResponse = Codec.interface({ +export const UpdateReportAcknowledgementsResponse = Codec.interface({ UpdateReportAcknowledgementsResponse: Codec.interface({ UpdateReportAcknowledgementsResult: UpdateReportAcknowledgements, }), diff --git a/src/sections/sellers.ts b/src/sections/sellers.ts index 120f4166..c31ad257 100644 --- a/src/sections/sellers.ts +++ b/src/sections/sellers.ts @@ -7,7 +7,7 @@ import { getServiceStatusByResource } from './shared' const SELLERS_API_VERSION = '2011-07-01' -const MarketplaceParticipations = Codec.interface({ +export const MarketplaceParticipations = Codec.interface({ NextToken: optional(nextTokenCodec('ListMarketplaceParticipations')), ListParticipations: ensureArray( 'Participation', @@ -42,7 +42,7 @@ const MarketplaceParticipationsByNextTokenResponse = Codec.interface({ }), }) -type MarketplaceParticipations = GetInterface +export type MarketplaceParticipations = GetInterface export class Sellers { constructor(private httpClient: HttpClient) {} diff --git a/src/sections/subscriptions.ts b/src/sections/subscriptions.ts index fb6cb3f8..0cd3c88f 100644 --- a/src/sections/subscriptions.ts +++ b/src/sections/subscriptions.ts @@ -42,7 +42,7 @@ export interface SubscriptionActionParameters { } export type DeleteSubscriptionParameters = SubscriptionActionParameters -interface MarketplaceIdAndDestinationOnlyParameters { +export interface MarketplaceIdAndDestinationOnlyParameters { MarketplaceId: string Destination: Destination } @@ -58,7 +58,7 @@ export interface UpdateSubscriptionParameters { } export type GetSubscriptionParameters = SubscriptionActionParameters -enum NotificationTypeEnum { +export enum NotificationTypeEnum { AnyOfferChanged = 'AnyOfferChanged', FeedProcessingFinished = 'FeedProcessingFinished', FeePromotion = 'FeePromotion', @@ -80,7 +80,7 @@ const DeregisterDestinationResponse = Codec.interface({ }), }) -enum AttribueKeyValueKeysEnum { +export enum AttribueKeyValueKeysEnum { sqsQueueUrl = 'sqsQueueUrl', } const AttribueKeyValueKeys = enumeration(AttribueKeyValueKeysEnum) @@ -90,7 +90,7 @@ const AttribueKeyValue = Codec.interface({ Key: AttribueKeyValueKeys, }) -enum DeliveryChannelEnum { +export enum DeliveryChannelEnum { SQS = 'SQS', } @@ -101,7 +101,7 @@ const Destination = Codec.interface({ AttributeList: ensureArray('member', AttribueKeyValue), }) -const ListRegisteredDestinations = Codec.interface({ +export const ListRegisteredDestinations = Codec.interface({ DestinationList: ensureArray('member', Destination), }) @@ -130,13 +130,13 @@ const CreateSubscriptionResponse = Codec.interface({ }), }) -const Subscription = Codec.interface({ +export const Subscription = Codec.interface({ NotificationType, Destination, IsEnabled: boolean, }) -const GetSubscription = Codec.interface({ +export const GetSubscription = Codec.interface({ Subscription, }) diff --git a/src/sections/types.ts b/src/sections/types.ts index 1c28ffd9..cdf186b9 100644 --- a/src/sections/types.ts +++ b/src/sections/types.ts @@ -7,3 +7,8 @@ export type RequireOnlyOne = Pick> & Partial, undefined>> }[Keys] + +export enum FulfillmentChannelEnum { + AFN = 'AFN', + MFN = 'MFN', +}