Source: types.jsdoc.js

/**
 * @typedef {object} ShopifyStoreTuple
 * @property {string} name
 * @property {number} id
 */
/**
 * @typedef {object} ShopifyStoreNameMap
 * @property {string}  name
 * @property {number} id
 */
/**
 * @typedef {object} DatastoreQuerySettings
 * @property {!string} kind - datastore kind
 * @property {?(string[]|string)} [selector] - query selector
 * @property {?(string[]|string)}  [groupBy] - fields to group by
 * @property  {?(string[]|string)}  [order] - result order
 * //property {?[...string]} [filter]
 * @property {?boolean} [useEmulator=process.env.USE_EMULATOR_DATASTORE] - use datastore emulator
 */
/**
 * @typedef {object} ShopifyShop
 *  @property {number}  id
 * @property {string} name
 * @property {string}  email
 * @property {string}  domain
 * @property {string}  province
 * @property {string}  country
 * @property {string}   address1
 * @property {string}  zip:
 * @property {string} city:
 * @property {string} source
 * @property {string}  phone
 * @property {number}  latitude
 * @property {number} longitude
 *  @property {string}  primary_locale
 *  @property {string}  address2
 *  @property {timestamp}  created_at
 *  @property {timestamp}  updated_at
 *   @property {string} country_code
 *  @property {string}  country_name
 *  @property {string}  currency
 *  @property {string}  customer_email
 *  @property {string}  timezone
 *  @property {string}  iana_timezone
 *  @property {string}  shop_owner
 *  @property {string}  money_format
 *  @property {string}  money_with_currency_format
 *  @property {string}  weight_unit
 *  @property {string}  province_code
 * @property {boolean} taxes_included
 * @property {boolean}auto_configure_tax_inclusivity
 * @property {boolean}tax_shipping
 * @property {boolean}  county_taxes
 *  @property {string}  plan_display_name
 *   @property {string} plan_name
 *  @property {boolean}  has_discounts
 *  @property {boolean}  has_gift_cards
 *   @property {string} myshopify_domain
 *    @property {?string} [google_apps_domain]
 *   @property {?string} [google_apps_login_enabled]
 *  @property {string}  money_in_emails_format
 *  @property {string}  money_with_currency_in_emails_format
 *   @property {boolean}  eligible_for_payments
 *   @property {boolean}  requires_extra_payments_agreement
 *    @property {boolean} password_enabled
 *    @property {boolean}  has_storefront
 *   @property {boolean}  eligible_for_card_reader_giveaway
 *   @property {boolean}  finances
 *  @property {number} primary_location_id
 *  @property {string}  cookie_consent_level
 *   @property {string} visitor_tracking_consent_preference
 *   @property {boolean}  checkout_api_supported
 *   @property {boolean}  multi_location_enabled
 *   @property {boolean}  setup_required
 *   @property {boolean}  pre_launch_enabled
 *  @property {string[]}  enabled_presentment_currencies:
 *  @property {boolean} force_ssl
 *  @property {string}  shopName
 *   @property {number} shopID
 * @example
 * {
 *   id: 55028482214,
 *   name: 'Zap Moto',
 *   email: 'sales@zapmoto.com.au',
 *   domain: 'zapmoto.com.au',
 *   province: 'Queensland',
 *   country: 'AU',
 *   address1: '40 Waterloo Street',
 *   zip: '4006',
 *   city: 'Newstead',
 *   source: 'buildify',
 *   phone: '0424977731',
 *   latitude: -27.4481248,
 *   longitude: 153.0444463,
 *   primary_locale: 'en',
 *   address2: '',
 *   created_at: '2021-03-02T20:16:39+10:00',
 *   updated_at: '2021-12-08T21:21:17+10:00',
 *   country_code: 'AU',
 *   country_name: 'Australia',
 *   currency: 'AUD',
 *   customer_email: 'Sales@zapmoto.com.au',
 *   timezone: '(GMT+10:00) Australia/Brisbane',
 *   iana_timezone: 'Australia/Brisbane',
 *   shop_owner: 'Paul Halhead',
 *   money_format: '${{amount}}',
 *   money_with_currency_format: '${{amount}} AUD',
 *   weight_unit: 'kg',
 *   province_code: 'QLD',
 *   taxes_included: true,
 *   auto_configure_tax_inclusivity: false,
 *   tax_shipping: false,
 *   county_taxes: true,
 *   plan_display_name: 'Basic Shopify',
 *   plan_name: 'basic',
 *   has_discounts: false,
 *   has_gift_cards: false,
 *   myshopify_domain: 'zap-moto.myshopify.com',
 *   google_apps_domain: null,
 *   google_apps_login_enabled: null,
 *   money_in_emails_format: '${{amount}}',
 *   money_with_currency_in_emails_format: '${{amount}} AUD',
 *   eligible_for_payments: true,
 *   requires_extra_payments_agreement: false,
 *   password_enabled: false,
 *   has_storefront: true,
 *   eligible_for_card_reader_giveaway: false,
 *   finances: true,
 *   primary_location_id: 61045997734,
 *   cookie_consent_level: 'implicit',
 *   visitor_tracking_consent_preference: 'allow_all',
 *   checkout_api_supported: true,
 *   multi_location_enabled: true,
 *   setup_required: false,
 *   pre_launch_enabled: false,
 *   enabled_presentment_currencies: [ 'AUD' ],
 *   force_ssl: true,
 *   shopName: 'zap-moto',
 *   shopID: 55028482214
 * }
 */
/**
 * //typedef {import('shopify-api-node/index.d.ts').exports} StoreConnectionInstance
 */
/**
 * @typedef {object} BucketStorageStats - gce storage bucket/dir computed stats for the shopify shop
 * @property {?number} [files] - number of files if the  `request.query.files` is enabled
 * @property {?number} [deletedFiles] - number of deleted files; absent if previous versions are not requested
 * @property {number} products - number of products in the bucket directory
 * @property {?number} [deletedProducts] - number of deleted products; absent if previous versions are not requested
 * @property {number} size - total file size in bytes
 * @property {?number} [deletedFilesSize] - size of deleted files in bytes; absent if previous versions are not
 *   requested
 * @property {number} currentFileSize - current generation file size in bytes
 * @property {?number} [previousFileVersionsSize] - size of the previous file versions in bytes; absent if versions are
 * not requested
 * @property {?number} previousFileVersionsCount - number of the previous file versions; absent if versions are
 * not requested
 */
/**
 * @typedef {object} Store - File Storage Shopify Store Object. Represents bucket directory contents
 * @property {string|number} id - filestore id
 * @property {number} shopifyStoreId - filestore id
 * @property {string} dir - directory within the bucket
 * @property {string} bucket - gce storage bucket
 * @property {string[]} files - array of files belonging to the bucket
 * @property {string[]} deletedFiles - array of deleted files belonging to the bucket
 * @property {number[]} products -shopify custom  product ids for the filestore
 * @property {number[]} deletedProducts - deleted shopify custom  product ids for the filestore (empty if the file versions
 * are not requested when the `request.query.versions` is not set or evaluates to false )
 * @property {BucketStorageStats} stats - filestore storage stats
 */
/**
 * @typedef {Array} GroupedFiles
 * @property {number[]} products
 * @property {number[]} deletedProducts
 * @property {ProductConfigEntry} productConfigs
 */
/**
 * @typedef {object} FileVersion
 * @property {string} id
 * @property {string} url
 * @property {number} generation
 * @property {number} size
 * @property {object} metadata
 * @property {string} metadata.name
 * @property {string} metadata.md5Hash
 * @property {string} metadata.crc32c
 * @property {timestamp} metadata.timeCreated
 * @property {timestamp} metadata.updated
 * @property {timestamp} metadata.timeDeleted
 *
 * @property {boolean} isDeleted
 * @property {boolean} isCurrent
 */
/**
 * @typedef ProductConfigEntry
 * @property {string} name
 * @property {string} path
 * @property {FileVersion[]} versions
 */
/**
 * @typedef {object} ShopifyCharge
 * @property {string} activated_on
 * @property {number} api_client_id
 * @property {number} balance_remaining
 * @property {number} balance_used
 * @property {string} billing_on
 * @property {?string} cancelled_on
 * @property {string} capped_amount
 * @property {DateTime} datastore_updated_at
 * @property {string} decorated_return_url
 * @property {number} id
 * @property {string} name
 * @property {string} price
 * @property {string} return_url
 * @property {number} risk_level
 * @property {number} shopID
 * @property {string} shopName
 * @property {string} status
 * @property {boolean} test
 * @property {number} trial_days
 * @property {string} trial_ends_on
 * @property {string} updated_at
 *
 */
/**
 * @typedef {ShopifyCharge[]} ShopifyCharges
 */
/**
 * @typedef ShopifyProductImage
 * @property {string} admin_graphql_api_id
 * @property {?string} alt
 * @property {Timestamp} created_at
 * @property {number} height
 * @property {number} id
 * @property {number} position
 * @property {number} product_id
 * @property {string} src
 * @property {Timestamp} updated_at
 * @property {number[]} variant_ids
 * @property {number} width
 */
/**
 * @typedef {ShopifyProductImage[]} ShopifyProductImages
 */
/**
 * @typedef ShopifyProductVariant
 * @property {string} admin_graphql_api_id
 * @property {?string} barcode
 * @property {?string} compare_at_price
 * @property {Timestamp} created_at
 * @property {string} fulfillment_service
 * @property {number} grams
 * @property {number} id
 * @property {?string} image_id
 * @property {number} inventory_item_id
 * @property {?string} inventory_management
 * @property {string} inventory_policy
 * @property {number} inventory_quantity
 * @property {number} old_inventory_quantity
 * @property {?string} option1
 * @property {?string} option2
 * @property {?string} option3
 * @property {number} position
 * @property {string} price
 * @property {number} product_id
 * @property {boolean} requires_shipping
 * @property {string} sku
 * @property {boolean} taxable
 * @property {string} title
 * @property {Timestamp} updated_at
 * @property {number} weight
 * @property {string} weight_unit
 *
 */
/**
 * @typedef ShopifyProduct
 * @property {string} admin_graphql_api_id
 * @property {string} body_html
 * @property {ProductConfigEntry} config
 * @property {Timestamp} created_at
 * @property {string} datastore_updated_at
 * @property {string} handle
 * @property {number} id
 * @property {ShopifyProductImage} image
 * @property {ShopifyProductImage[]} images
 * @property {object[]} options
 * @property {string} product_type
 * @property {Timestamp} published_at
 * @property {number} shopID
 * @property {string} shopName
 * @property {string} status
 * @property {string} tags
 * @property {string} title
 * @property {Timestamp} updated_at
 * @property {string} vendor
 * @property {ShopifyProductVariant[]} variants
 *
 */