Skip to content

Instantly share code, notes, and snippets.

@sbrichardson
Last active June 12, 2019 03:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sbrichardson/5092ff8f4d68682ba8c2178eda891038 to your computer and use it in GitHub Desktop.
Save sbrichardson/5092ff8f4d68682ba8c2178eda891038 to your computer and use it in GitHub Desktop.
Misc notes when researching a solution for tracking Amazon Deliveries since there isn't a public API available.
/**
* NOTE Breakdown of tracking url in shipping email from Amazon
* Delivery by Amazon, Tracking ID: TBA269148761000
*
*
* NOTE Process overview to obtain the tracking info and obtain
* updates for the delivery.
*
* Do Once
* ====================================
* 1. Receive email from Amazon saying item in order has shipped.
* 2. Forward email to Reactual.
* 3. Reactual parses email content and finds the shipping detail link.
* 4. Parse the url params/details from the detail link from email.
* 5. Create a new shipment update tracker.
*
*
* Repeat until delivered
* =====================================
* 5. Visit the link (unauthenticated), parse and save the redirected url params.
* 6. Save the HTML from the amazon tracking page (javascript disabled is ok)
* 7. Scrape the popup details content buried in the tracking page HTML.
* 8. Parse the popup details and save and update shipment tracker.
*
*
* Loop
* =====================================
* Repeat the process every x hours/x days until
* the package is delivered.
*
*/
////////////////////////////////////
// Scrape Email for tracking link //
////////////////////////////////////
let track_url =
'https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=3NMKADQXWNQT&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_track&H=ACVYNAKFV0ABTUWGDMUDT85ABIKA&ref_=pe_2640190_232586610_scr_pt_track>'
let base = 'https://www.amazon.com'
let path = '/gp/r.html'
let query_params = {
R: '3NMKADQXWNQT',
T: 'C',
H: 'ACVYNAKFV0ABTUWGDMUDT85ABIKA',
ref_: 'pe_2640190_232586610_scr_pt_track>',
U:
'https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_track',
}
///////////////////////////////////////////////////
// Extract Embedded tracking url from email link //
///////////////////////////////////////////////////
let embedded_url =
'https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_track'
let decoded_url =
'https://www.amazon.com/gp/your-account/ship-track?ie=UTF8&orderId=114-3308207-2093843&packageIndex=0&shipmentId=DvS7nsnyL&ref_=pe_2640190_232586610_scr_pt_track'
let ship_base = 'https://www.amazon.com'
let ship_path = '/gp/your-account/ship-track'
let ship_query_params = {
packageIndex: 0,
shipmentId: 'DvS7nsnyL',
orderId: '114-3308207-2093843',
ref_: 'pe_2640190_232586610_scr_pt_track',
ie: 'UTF8',
}
///////////////////////////////////////
// Visit url and save redirected url //
///////////////////////////////////////
let redirected_url =
'https://www.amazon.com/progress-tracker/package/ref=pe_2640190_232586610_scr_pt_track?_encoding=UTF8&from=gp&itemId=&orderId=114-3308207-2093843&packageIndex=0&shipmentId=20611973231301'
let redir_base = 'https://www.amazon.com'
let redir_path =
'/progress-tracker/package/ref=pe_2640190_232586610_scr_pt_track'
let redir_query_params = {
from: 'gp',
itemId: '',
packageIndex: 0,
shipmentId: '20611973231301',
orderId: '114-3308207-2093843',
_encoding: 'UTF8',
}
///////////////////////////////////////////////////////////////
// Create minimum working link to recheck directly in future //
///////////////////////////////////////////////////////////////
/**
* NOTE
* Redirected URL Hacking
*
* - Works without being authenticated
* - Works without javascript enabled (content is hidden)
*
* 1. Need orderId,
* 2. Need shipmentId
* 3. Need packageIndex but can be any number >= 0,
* even if invalid.
*
* 4. Don't need /ref=... in path
* 5. Don't need from=gp
* 6. Don't need _encoding=UTF8
* 7. Don't need itemId=''
*/
let redirected_url =
'https://www.amazon.com/progress-tracker/package/ref=pe_2640190_232586610_scr_pt_track?_encoding=UTF8&from=gp&itemId=&orderId=114-3308207-2093843&packageIndex=0&shipmentId=20611973231301'
let redir_base = 'https://www.amazon.com'
let redir_path =
'/progress-tracker/package/ref=pe_2640190_232586610_scr_pt_track'
let redir_query_params = {
packageIndex: 0, // NOTE Can be any number >= 0
shipmentId: '20611973231301',
orderId: '114-3308207-2093843',
/* NOTE Not needed */
// from: 'gp',
// itemId: '',
// _encoding: 'UTF8',
}
///////////////////////////////
// Minimum working link info //
///////////////////////////////
/**
* This is the link that would be composed and used to re-check for tracking updates
* until delivery is complete.
*/
let min_full_link =
'https://www.amazon.com/progress-tracker/package?orderId=114-3308207-2093843&packageIndex=0&shipmentId=20611973231301'
let min_base = 'https://www.amazon.com'
let min_path = '/progress-tracker/package'
let min_query_str =
'?orderId=114-3308207-2093843&packageIndex=0&shipmentId=20611973231301'
let min_query_params = {
packageIndex: 0,
orderId: '114-3308207-2093843',
shipmentId: '20611973231301',
}
let required_info_to_find = {
orderId: '114-3308207-2093843',
shipmentId: '20611973231301',
}
/**
* NOTE The shipment id in the original email is different than
* the id used on the tracking page. It's not necessary to understand
* for this code to work, but I'm curious if there is a pattern.
*
* Email Shipment ID = DvS7nsnyL // Only used once from email
* Tracking Page Shipment ID = 20611973231301 // Required for tracking
*
*
* TODO
* ====
* 1. How is the email shipment id encoded or translated from the original
* shipping id?
* 2. Is it encoded with the order-id and date? Or is there even a pattern?
* 3. Need to compare the 2 IDs from different orders over time.
* 4. Need to see if the TBA-xxxxx number influences the ids or derived from
* part of the order number etc.
* 5. I checked and the id isn't a base64 encoded version (only tested once)
*/
////////////////////////////////
// Parsing Tracking Page HTML //
////////////////////////////////
/**
* These are the identifiers to parse the content, from the
* embedded tracking details modal HTML.
*
* The HTML is converted to a JSON tree using existing code, then the nodes are
* filtered by the below list of class names. Then the values are extracted from the
* filtered nodes, and saved as a tracking detail object.
*/
const keys = [
// Popup modal element
'div.a-popover-preload id# a-popover-tracking-events-modal',
// Base node (then access it's children)
'tracking-events-container',
// List rows container
'div.a-container',
// List rows
'div.a-row',
// List Item Header
'tracking-event-carrier-header',
'tracking-event-trackingId-text',
// List Item
'tracking-event-date-header',
'tracking-event-time',
'tracking-event-message',
'tracking-event-location',
// List Item misc un-needed (for reference)
'tracking-event-time-left',
'tracking-event-vertLine',
]
///////////////////////////////////////////
// HTML to JSON examples desired content //
///////////////////////////////////////////
/**
* TODO Need to convert human date to machine readable version.
* Already have existing code that can be reused easily.
*
* source: 'tracking-event-date'
* example: 'Tuesday, June 4'
* output: // ISO Date string
*/
const trackingStart = {
type: 'element',
tagName: 'div',
attributes: [
{
key: 'class',
value: 'a-row tracking-event-carrier-header',
},
],
children: [
{
type: 'element',
tagName: 'h2',
attributes: [
{
key: 'class',
value: 'a-spacing-small a-spacing-top-medium',
},
],
children: [
{
type: 'text',
content: '\n Delivery by Amazon\n ',
},
],
},
],
}
const trackingId = {
type: 'element',
tagName: 'div',
attributes: [
{
key: 'class',
value: 'a-row tracking-event-trackingId-text',
},
],
children: [
{
type: 'element',
tagName: 'h4',
attributes: [
{
key: 'class',
value: 'a-spacing-medium',
},
],
children: [
{
type: 'text',
content: '\n Tracking ID: TBA269148761000\n ',
},
],
},
],
}
const trackEventDate_start = {
type: 'element',
tagName: 'div',
attributes: [
{
key: 'class',
value: 'a-row tracking-event-date-header',
},
],
children: [
{
type: 'element',
tagName: 'span',
attributes: [
{
key: 'class',
value: 'tracking-event-date',
},
],
children: [
{
type: 'text',
content: 'Monday, June 3',
},
],
},
],
}
const trackEventTime = {
type: 'element',
tagName: 'span',
attributes: [
{
key: 'class',
value: 'tracking-event-time',
},
],
children: [
{
type: 'text',
content: '7:37 PM',
},
],
}
const trackEventMsg = {
type: 'element',
tagName: 'span',
attributes: [
{
key: 'class',
value: 'tracking-event-message',
},
],
children: [
{
type: 'text',
content: 'Package arrived at a carrier facility',
},
],
}
///////////////////////////////////////////////////
// Original HTML for Tracking Detail Modal Popup //
///////////////////////////////////////////////////
/**
* This HTML is scraped from the tracking details url.
* The only portion needed is the details modal.
*
* Then this HTML string is converted to a JSON tree using the
* convertHtmlToJson method. See above JSON snippets for example
* output.
*/
const details_modal_html = `
<div class="a-popover-preload" id="a-popover-tracking-events-modal">
<div id="tracking-events-container" class="tracking-events-modal-inner">
<div class="a-container">
<div class="a-row tracking-event-carrier-header">
<h2 class="a-spacing-small a-spacing-top-medium">
Delivery by Amazon
</h2>
</div>
<div class="a-row tracking-event-trackingId-text">
<h4 class="a-spacing-medium">
Tracking ID: TBA269148761000
</h4>
</div>
<div class="a-row">
<div class="a-row tracking-event-date-header">
<span class="tracking-event-date">Tuesday, June 4</span>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">3:13 PM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message">Delivered</span>
</div>
<div class="a-row">
<span class="tracking-event-location">Denver, US</span>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">6:35 AM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message">Out for delivery</span>
</div>
<div class="a-row">
<span class="tracking-event-location">Englewood, US</span>
</div>
</div>
</div>
</div>
<div class="a-row">
<div class="a-row tracking-event-date-header">
<span class="tracking-event-date">Monday, June 3</span>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">7:37 PM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package arrived at a carrier facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location">Englewood, US</span>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">7:36 PM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Lost by carrier - undeliverable</span
>
</div>
<div class="a-row">
<span class="tracking-event-location">Englewood, US</span>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">6:35 AM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message">Out for delivery</span>
</div>
<div class="a-row">
<span class="tracking-event-location">Englewood, US</span>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">1:35 AM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package departed an Amazon facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location">Aurora, COLORADO US</span>
</div>
</div>
</div>
</div>
<div class="a-row">
<div class="a-row tracking-event-date-header">
<span class="tracking-event-date">Sunday, June 2</span>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">9:38 PM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package arrived at a carrier facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location">Englewood, US</span>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">3:34 PM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package arrived at an Amazon facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location">Aurora, COLORADO US</span>
</div>
</div>
</div>
</div>
<div class="a-row">
<div class="a-row tracking-event-date-header">
<span class="tracking-event-date">Saturday, June 1</span>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">4:30 AM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package departed an Amazon facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location"
>San Bernardino, CALIFORNIA US</span
>
</div>
</div>
</div>
</div>
<div class="a-row">
<div class="a-row tracking-event-date-header">
<span class="tracking-event-date">Friday, May 31</span>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time">4:28 AM</span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message"
>Package arrived at an Amazon facility</span
>
</div>
<div class="a-row">
<span class="tracking-event-location"
>San Bernardino, CALIFORNIA US</span
>
</div>
</div>
</div>
<div class="a-row a-spacing-large a-spacing-top-medium">
<div class="a-column a-span3 tracking-event-time-left">
<span class="tracking-event-time"></span>
<span class="tracking-event-vertLine"></span>
</div>
<div class="a-column a-span9 tracking-event-time-right a-span-last">
<div class="a-row">
<span class="tracking-event-message">Package has shipped</span>
</div>
<div class="a-row">
<span class="tracking-event-location"></span>
</div>
</div>
</div>
</div>
<div class="a-row tracking-event-timezoneLabel">
Times are shown in the local timezone.
</div>
</div>
</div>
</div>
`
/**
* This is the email that is received by the user
* that contains the tracking status link.
*
* Once you have this email (or the tracking link provided within the email), you
* can access the link and get updates without being authenticated on Amazon.
*
*/
const amazon_shipping_info_email = `
---------- Forwarded message ---------
From: Amazon.com <shipment-tracking@amazon.com>
Date: Fri, May 31, 2019 at 6:08 AM
Subject: Your Amazon.com order of "Thrustmaster TFRP Rudder" has shipped!
To: <user@example.com>
Hi User, your package is on the way! You can track it and check out when
your package will arrive.
[image: Amazon.com]
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=2F473O1I4J42&T=C&U=https%3A%2F%2Fwww.amazon.com%3Fie%3DUTF8%26ref_%3Dpe_2640190_232586610_scr_home&H=9B4ZVOEXAIG1QRHNUWI7JO0WD4AA&ref_=pe_2640190_232586610_scr_home>
Hi User, your package will arrive:
Monday, June 3
Track package
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=3NMKADQXWNQT&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_track&H=ACVYNAKFV0ABTUWGDMUDT85ABIKA&ref_=pe_2640190_232586610_scr_pt_track>
[image: icon]
JUST ASK
"Alexa, where's my stuff?"
<#m_-1381020522824455074_>
[image: delivery]
ON THE WAY
Thrustmaster TFRP Rudder
Order #114-3308207-2093843
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=AXBZ12BRJA3Y&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_asin&H=NMAK63FLAPWCXWIHLCGAARTXMU8A&ref_=pe_2640190_232586610_scr_pt_asin>
[image: location]
SHIP TO
User Name
123 Main St...
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=K9VVP0D6ADB7&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Fship-track%3Fie%3DUTF8%26orderId%3D114-3308207-2093843%26packageIndex%3D0%26shipmentId%3DDvS7nsnyL%26ref_%3Dpe_2640190_232586610_scr_pt_address&H=NFS4S8AVCTJFJA3CYQACTU0AHA4A&ref_=pe_2640190_232586610_scr_pt_address>
[image: price]
SHIPMENT TOTAL
$69.20
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=MQJPZ8DQZL47&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyour-account%2Forder-details%3Fie%3DUTF8%26orderID%3D114-3308207-2093843%26ref_%3Dpe_2640190_232586610_scr_od_price&H=XSTHR9PGAFLQXSIZDTISNJFEXGCA&ref_=pe_2640190_232586610_scr_od_price>
Return or replace items in Your Orders
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=2RJ27D7LRA50J&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fcss%2Forder-history%3Fie%3DUTF8%26ref_%3Dpe_2640190_232586610_scr_yo&H=OUVGD3L9GIEZD1C4W7CYKE0QAHSA&ref_=pe_2640190_232586610_scr_yo>
Recommended for you based on Thrustmaster TF...
[image: TrackIr 5 Optical Head Tracking System Bundle + Track Clip PRO]
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=CNJB6O3YKUA4&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB00KQPETHO%2Fref%3Dpe_2640190_232586610_pd_te_s_mr_im%3F_encoding%3DUTF8%26pd_rd_i%3DB00KQPETHO%26pd_rd_r%3D1KSF14ZWZ8T8M2VECP57%26pd_rd_w%3D6u1db%26pd_rd_wg%3DeV63w&H=ZHLLN0MNMKVSLT8BQSAWH91AN6GA&ref_=pe_2640190_232586610_pd_te_s_mr_im>
TrackIr 5 Optical Head...
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=7EB7SXA4YN3W&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB00KQPETHO%2Fref%3Dpe_2640190_232586610_pd_te_s_mr_ti%3F_encoding%3DUTF8%26pd_rd_i%3DB00KQPETHO%26pd_rd_r%3D1KSF14ZWZ8T8M2VECP57%26pd_rd_w%3D6u1db%26pd_rd_wg%3DeV63w&H=VH3ZAXIYA6OHFMSGLA1Z3AFAA2SA&ref_=pe_2640190_232586610_pd_te_s_mr_ti>
$159.99
[image: Logitech G Saitek PRO Flight Throttle Quadrant]
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=2NDB6OTS2JXOD&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB01M00UHE3%2Fref%3Dpe_2640190_232586610_pd_te_s_mr_im%3F_encoding%3DUTF8%26pd_rd_i%3DB01M00UHE3%26pd_rd_r%3D1KSF14ZWZ8T8M2VECP57%26pd_rd_w%3D6u1db%26pd_rd_wg%3DeV63w&H=UCZZAZTWSGFZSJNZRDFMDZWWFJ4A&ref_=pe_2640190_232586610_pd_te_s_mr_im>
Logitech G Saitek PRO...
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=2BGWFT9GWJF7T&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB01M00UHE3%2Fref%3Dpe_2640190_232586610_pd_te_s_mr_ti%3F_encoding%3DUTF8%26pd_rd_i%3DB01M00UHE3%26pd_rd_r%3D1KSF14ZWZ8T8M2VECP57%26pd_rd_w%3D6u1db%26pd_rd_wg%3DeV63w&H=KNVTARXTHJSXUDORJJUAMEWYYD8A&ref_=pe_2640190_232586610_pd_te_s_mr_ti>
$55.00
Unless otherwise noted, items sold by Amazon.com are subject to sales tax
in select states in accordance with the applicable laws of that state. If
your order contains one or more items from a seller other than Amazon.com,
it may be subject to state and local sales tax, depending upon the sellers
business policies and the location of their operations. Learn more about tax
and seller information
<https://www.amazon.com/gp/f.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=8JWJISIMPJ35&T=C&U=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fhelp%2Fcustomer%2Fdisplay.html%3Fie%3DUTF8%26nodeId%3D202029700%26ref_-%3Dscr_help_tax%26ref_%3Dpe_2640190_232586610&H=AYS163POXBGUBKVADVFJ6QP79UKA&ref_=pe_2640190_232586610>
.
Please see important information regarding sales tax
<https://www.amazon.com/gp/f.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=2CHQV7IEKWZMT&T=C&U=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fhelp%2Fcustomer%2Fdisplay.html%3Fie%3DUTF8%26nodeId%3D202029700%26ref_-%3Dscr_help_tax%26ref_%3Dpe_2640190_232586610&H=XDWAMATOAAUNASFGS5YIBBWOVL0A&ref_=pe_2640190_232586610>
you may owe in your State.
Your invoice can be accessed here
<https://www.amazon.com/gp/r.html?C=1TTJGNIAUG1LO&K=3KG8THZ7AE1EU&M=urn:rtn:msg:2019053112075965afb7e9e4454dcb99f13cdf5ed0p0na&R=3LH6GSZOKUEDG&T=C&U=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fcss%2Fsummary%2Fprint.html%3Fie%3DUTF8%26orderID%3D114-3308207-2093843%26ref_%3Dpe_2640190_232586610_scr_od_invoice&H=LCPXGYZOXLFQZJFPH7STZD2HQGAA&ref_=pe_2640190_232586610_scr_od_invoice>
.
This email was sent from a notification-only address that cannot accept
incoming email. Please do not reply to this message.
`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment