 
   @allTraps: ->
     traps = {}
+
     buttons = document.querySelectorAll('.js-store-checkout-button')
     for button in buttons
-      traps[button.dataset.provider] = DeferrablePromise()
+      provider = button.dataset.provider
+      traps[provider] = DeferrablePromise() if provider?
 
     $(buttons).on 'click.trap', (event) ->
       LoadingOverlay.showImmediate()

        checkout.reject(xhr: xhr)

    $(document.querySelectorAll('.js-store-checkout-button')).on 'click.xsolla', (event) ->
      dataset = event.target.dataset

      if dataset.provider == 'xsolla'
        promise = Promise.all([init, traps['xsolla'], checkout]).then (values) ->
          window.requestAnimationFrame ->
            # FIXME: flickering when transitioning to widget
            XPayStationWidget.open()
            LoadingOverlay.hide()
      else if dataset.provider == 'centili'
        promise = Promise.all([centili, traps['centili'], checkout]).then (values) ->
          LoadingOverlay.hide()
          # fake a click for Centili
          $('#c-mobile-payment-widget').click()
      else
        promise = Promise.resolve()

      promise.catch (error) ->
        LoadingOverlay.hide()

  @initialize: =>
    traps = @allTraps()
    # load scripts
    init = {
      xsolla: StoreXsolla.promiseInit()
      centili: StoreCentili.promiseInit()
    }

    checkout = DeferrablePromise()

    $(StoreCheckout::CHECKOUT_SELECTOR).on 'click.checkout', ->
