Module: Portage::Ucp::Capabilities

Defined in:
lib/portage/ucp/capabilities/cart.rb,
lib/portage/ucp/capabilities/order.rb,
lib/portage/ucp/capabilities/catalog.rb,
lib/portage/ucp/capabilities/reorder.rb,
lib/portage/ucp/capabilities/checkout.rb,
lib/portage/ucp/capabilities/discount.rb,
lib/portage/ucp/capabilities/fulfillment.rb,
lib/portage/ucp/capabilities/shopper_data.rb,
lib/portage/ucp/capabilities/payment_method.rb,
lib/portage/ucp/capabilities/identity_linking.rb,
lib/portage/ucp/capabilities/payment_enrollment.rb

Constant Summary collapse

CART =
Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.cart",
  version: "1",
  actions: {
    "create_cart" => :create_cart,
    "get_cart" => :get_cart,
    "update_cart" => :update_cart,
    "cancel_cart" => :cancel_cart
  }
)
ORDER =
Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.order",
  version: "1",
  actions: {
    "get_order" => :get_order,
    "cancel_order" => :cancel_order,
    "request_return" => :request_return,
    "refund_order" => :refund_order
  }
)
CATALOG =
Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.catalog",
  version: "1",
  actions: { "search_catalog" => :search_catalog, "get_product" => :get_product,
             "lookup_catalog" => :lookup_catalog }
)
REORDER =

Portage-only extension, not part of the UCP spec (no ucp.dev reverse-domain meaning to borrow), so this is namespaced under the gem's own name instead of "dev.ucp.*". Advertised only if the adapter overrides Adapter#reorder, same as every other capability (Capability#advertised_for?) — an adapter that hasn't implemented it simply never shows it in the manifest.

Portage::Ucp::Capability.new(
  name: "app.portage-ucp.reorder",
  version: "1",
  actions: { "reorder" => :reorder }
)
CHECKOUT =
Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.checkout",
  version: "1",
  actions: {
    "create_checkout" => :create_checkout,
    "get_checkout" => :get_checkout,
    "update_checkout" => :update_checkout,
    "complete_checkout" => :complete_checkout,
    "cancel_checkout" => :cancel_checkout
  }
)
DISCOUNT =

schemas/shopping/discount.json — extends Cart/Checkout with a discounts field rather than adding actions of its own, so actions is empty and advertisement runs off Adapter#discount_codes_supported? instead (see Capability#advertised_for?).

Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.discount",
  version: "1",
  actions: {},
  predicate: :discount_codes_supported?
)
FULFILLMENT =

schemas/shopping/fulfillment.json — extends Checkout with a fulfillment field (shipping/pickup methods, groups, destinations) rather than adding actions of its own, same predicate-based advertisement as DISCOUNT above.

Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.fulfillment",
  version: "1",
  actions: {},
  predicate: :fulfillment_supported?
)
SHOPPER_DATA =

Portage-only extension, not part of the UCP spec. Kept separate from PAYMENT_METHOD/SAVED_ADDRESS: this is the erasure duty over both of those plus the linked identity, not a peer capability alongside them (design-log §22 item 7).

Portage::Ucp::Capability.new(
  name: "app.portage-ucp.shopper_data",
  version: "1",
  actions: { "delete_shopper_data" => :delete_shopper_data }
)
PAYMENT_METHOD =

Portage-only extensions, not part of the UCP spec (no ucp.dev reverse-domain meaning to borrow), same posture as Capabilities::PAYMENT_ENROLLMENT/REORDER. Advertised only if the adapter overrides at least one of its own action methods. Kept as two capabilities (payment methods vs. addresses) rather than one, per design-log §16/§22 item 7's "ship together, but they're separate concerns" — a consumer can still gate them independently.

Portage::Ucp::Capability.new(
  name: "app.portage-ucp.payment_method",
  version: "1",
  actions: { "save_payment_method" => :save_payment_method,
             "list_payment_methods" => :list_payment_methods,
             "delete_payment_method" => :delete_payment_method }
)
SAVED_ADDRESS =
Portage::Ucp::Capability.new(
  name: "app.portage-ucp.saved_address",
  version: "1",
  actions: { "save_address" => :save_address,
             "list_addresses" => :list_addresses,
             "delete_address" => :delete_address }
)
IDENTITY_LINKING =
Portage::Ucp::Capability.new(
  name: "dev.ucp.shopping.identity",
  version: "1",
  actions: { "link_identity" => :link_identity }
)
ALL =
[CATALOG, CART, CHECKOUT, ORDER, IDENTITY_LINKING, DISCOUNT, FULFILLMENT, REORDER,
PAYMENT_ENROLLMENT, PAYMENT_METHOD, SAVED_ADDRESS, SHOPPER_DATA].freeze
PAYMENT_ENROLLMENT =

Portage-only extension, not part of the UCP spec (no ucp.dev reverse-domain meaning to borrow), same posture as Capabilities::REORDER. Advertised only if the adapter overrides Adapter#create_payment_enrollment — an adapter with no real gateway support for it simply never shows it in the manifest (see docs/plans/agentic-payments.md Phase 1).

Portage::Ucp::Capability.new(
  name: "app.portage-ucp.payment_enrollment",
  version: "1",
  actions: { "create_payment_enrollment" => :create_payment_enrollment,
             "get_payment_enrollment" => :get_payment_enrollment }
)