import {Attribute, SellingPlan} from '../shared'; /** * Removes a note */ export interface NoteRemoveChange { /** * The type of the `NoteRemoveChange` API. */ type: 'removeNote'; } /** * An Update to a note on the order. * for example, the buyer could request detailed packaging instructions in an order note */ export interface NoteUpdateChange { /** * The type of the `NoteUpdateChange` API. */ type: 'updateNote'; /** * The new value of the note. */ note: string; } export type NoteChange = NoteRemoveChange | NoteUpdateChange; export interface NoteChangeResultSuccess { /** * The type of the `NoteChangeResultSuccess` API. */ type: 'success'; } export interface NoteChangeResultError { /** * The type of the `NoteChangeResultError` API. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } export type NoteChangeResult = NoteChangeResultSuccess | NoteChangeResultError; /** * Updates an attribute on the order. If an attribute with the * provided key does not already exist, it gets created. */ export interface AttributeUpdateChange { /** * The type of the `AttributeUpdateChange` API. */ type: 'updateAttribute'; /** * Key of the attribute to add or update */ key: string; /** * Value for the attribute to add or update */ value: string; } export type AttributeChange = AttributeUpdateChange; /** * The returned result of a successful update to an attribute. */ export interface AttributeChangeResultSuccess { /** * The type of the `AttributeChangeResultSuccess` API. */ type: 'success'; } /** * The returned result of an unsuccessful update to an attribute * with a message detailing the type of error that occurred. */ export interface AttributeChangeResultError { /** * The type of the `AttributeChangeResultError` API. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } export type AttributeChangeResult = | AttributeChangeResultSuccess | AttributeChangeResultError; export interface CartLineChangeResultSuccess { /** * Indicates that the line item was changed successfully. */ type: 'success'; } export interface CartLineChangeResultError { /** * Indicates that the line item was not changed successfully. Refer to the `message` property for details about the error. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } export type CartLineChangeResult = | CartLineChangeResultSuccess | CartLineChangeResultError; export type CartLineChange = | CartLineAddChange | CartLineRemoveChange | CartLineUpdateChange; export interface CartLineAddChange { /** * An identifier for changes that add line items. */ type: 'addCartLine'; /** * The merchandise ID being added. * @example 'gid://shopify/ProductVariant/123' */ merchandiseId: string; /** * The quantity of the merchandise being added. */ quantity: number; /** * The attributes associated with the line item. */ attributes?: Attribute[]; /** * The identifier of the selling plan that the merchandise is being purchased * with. */ sellingPlanId?: SellingPlan['id']; } export interface CartLineRemoveChange { /** * An identifier for changes that remove line items. */ type: 'removeCartLine'; /** * Line Item ID. * @example 'gid://shopify/CartLine/123' */ id: string; /** * The quantity being removed for this line item. */ quantity: number; } export interface CartLineUpdateChange { /** * An identifier for changes that update line items. */ type: 'updateCartLine'; /** * Line Item ID. * @example 'gid://shopify/CartLine/123' */ id: string; /** * The new merchandise ID for the line item. * @example 'gid://shopify/ProductVariant/123' */ merchandiseId?: string; /** * The new quantity for the line item. */ quantity?: number; /** * The new attributes for the line item. */ attributes?: Attribute[]; /** * The identifier of the selling plan that the merchandise is being purchased * with or `null` to remove the the product from the selling plan. */ sellingPlanId?: SellingPlan['id'] | null; } export type DiscountCodeChange = | DiscountCodeAddChange | DiscountCodeRemoveChange; export type DiscountCodeChangeResult = | DiscountCodeChangeResultSuccess | DiscountCodeChangeResultError; export interface DiscountCodeAddChange { /** * The type of the `DiscountCodeChange` API. */ type: 'addDiscountCode'; /** * The code for the discount */ code: string; } export interface DiscountCodeRemoveChange { /** * The type of the `DiscountCodeChange` API. */ type: 'removeDiscountCode'; /** * The code for the discount */ code: string; } export interface DiscountCodeChangeResultSuccess { /** * Indicates that the discount code change was applied successfully. */ type: 'success'; } export interface DiscountCodeChangeResultError { /** * Indicates that the discount code change failed. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } export type GiftCardChange = GiftCardAddChange | GiftCardRemoveChange; export type GiftCardChangeResult = | GiftCardChangeResultSuccess | GiftCardChangeResultError; export interface GiftCardAddChange { /** * The type of the `GiftCardChange` API. */ type: 'addGiftCard'; /** * Gift card code. */ code: string; } export interface GiftCardRemoveChange { /** * The type of the `GiftCardChange` API. */ type: 'removeGiftCard'; /** * Gift card code. */ code: string; } export interface GiftCardChangeResultSuccess { /** * Indicates that the gift card change was applied successfully. */ type: 'success'; } export interface GiftCardChangeResultError { /** * Indicates that the gift card change failed. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } /** Removes a metafield. */ export interface MetafieldRemoveChange { /** * The type of the `MetafieldRemoveChange` API. */ type: 'removeMetafield'; /** * The name of the metafield to remove. */ key: string; /** * The namespace of the metafield to remove. */ namespace: string; } /** Removes a cart metafield. */ export interface MetafieldRemoveCartChange { /** * The type of the `MetafieldRemoveCartChange` API. */ type: 'removeCartMetafield'; /** * The name of the metafield to remove. */ key: string; /** * The namespace of the metafield to remove. */ namespace: string; } /** * Updates a metafield. If a metafield with the * provided key and namespace does not already exist, it gets created. */ export interface MetafieldUpdateChange { /** * The type of the `MetafieldUpdateChange` API. */ type: 'updateMetafield'; /** The name of the metafield to update. */ key: string; /** The namespace of the metafield to add. */ namespace: string; /** The new information to store in the metafield. */ value: string | number; /** * The metafield’s information type. */ valueType: 'integer' | 'string' | 'json_string'; } /** * Updates a cart metafield. If a metafield with the * provided key and namespace does not already exist, it gets created. */ export interface MetafieldUpdateCartChange { /** * The type of the `MetafieldUpdateCartChange` API. */ type: 'updateCartMetafield'; metafield: { /** The name of the metafield to update. */ key: string; /** The namespace of the metafield to add. */ namespace: string; /** The new information to store in the metafield. */ value: string; /** * The metafield’s information type. * See the [`metafields documentation`](https://shopify.dev/docs/apps/custom-data/metafields/types) for a list of supported types. */ type: string; }; } export type MetafieldChange = | MetafieldRemoveChange | MetafieldUpdateChange | MetafieldRemoveCartChange | MetafieldUpdateCartChange; export interface MetafieldChangeResultSuccess { /** * The type of the `MetafieldChangeResultSuccess` API. */ type: 'success'; } export interface MetafieldChangeResultError { /** * The type of the `MetafieldChangeResultError` API. */ type: 'error'; /** * A message that explains the error. This message is useful for debugging. * It is **not** localized, and therefore should not be presented directly * to the buyer. */ message: string; } export type MetafieldChangeResult = | MetafieldChangeResultSuccess | MetafieldChangeResultError; export interface CheckoutApi { /** * Performs an update on an attribute attached to the cart and checkout. If * successful, this mutation results in an update to the value retrieved * through the [`attributes`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-applyattributechange) property. * * > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay. */ applyAttributeChange(change: AttributeChange): Promise; /** * Performs an update on the merchandise line items. It resolves when the new * line items have been negotiated and results in an update to the value * retrieved through the * [`lines`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-lines) * property. * * > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay. */ applyCartLinesChange(change: CartLineChange): Promise; /** * Performs an update on the discount codes. * It resolves when the new discount codes have been negotiated and results in an update * to the value retrieved through the [`discountCodes`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-discountcodes) property. * * > Caution: * > See [security considerations](https://shopify.dev/docs/api/checkout-ui-extensions/configuration#network-access) if your extension retrieves discount codes through a network call. * * > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay. */ applyDiscountCodeChange( change: DiscountCodeChange, ): Promise; /** * Performs an update on the gift cards. * It resolves when gift card change have been negotiated and results in an update * to the value retrieved through the [`appliedGiftCards`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-appliedgiftcards) property. * * > Caution: * > See [security considerations](https://shopify.dev/docs/api/checkout-ui-extensions/configuration#network-access) if your extension retrieves gift card codes through a network call. * * > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay. */ applyGiftCardChange(change: GiftCardChange): Promise; /** * Performs an update on a piece of metadata attached to the cart or checkout: * - If `type` is `updateMetafield` or `removeMetafield`, this mutation results in an update to the value retrieved through the [`metafields`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-metafields) property. Metafields written by `updateMetafield` are carried over to the order. * - If `type` is `updateCartMetafield` or `removeCartMetafield`, this mutation updates the metafield attached to the cart and results in an update to the value retrieved through the [`appMetafields`](https://shopify.dev/docs/api/checkout-ui-extensions/unstable/apis/standardapi#properties-propertydetail-appmetafields) property. Metafields written by `updateCartMetafields` are updated on the cart object only and are **not** carried over to the order. * * > Tip: * > Cart metafields are only available on carts created via the Storefront API version `2023-04` or later. */ applyMetafieldChange(change: MetafieldChange): Promise; /** * Performs an update on the note attached to the cart and checkout. If * successful, this mutation results in an update to the value retrieved * through the [`note`](https://shopify.dev/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-note) property. * * > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay. */ applyNoteChange(change: NoteChange): Promise; }