Como instalar apps internos de diferentes vendors

Oi pessoal.
Alguém poderia me explicar qual seria a melhor maneira de instalar aplicações de diferentes vendors em um tema customizado?

Exemplo:
Tenho um tema geral de uma loja chamado minhaloja.store-theme
Tenho algumas aplicações chamadas

  • meuapp.buy-button
  • meuapp.header
  • corebizio.corebizio-sku-selector

Como eu faço a instalação desses apps sem precisar alterar peerDependecies e gerar major?
Quando eu tenho fazer isso eu recebo esse erro:

15:08:06.301 - error: App build failed with message: Error with dependency corebizio.corebizio-sku-selector@1.x: App cannot contain billing options: corebizio.corebizio-sku-selector@1.x

Mas no app corebizio.corebizio-sku-selector ele tem billing options:

  "billingOptions": {
    "type": "free",
    "availableCountries": [
      "*"
    ]
  }

O que poderia ser?

Além disso, com billingOptions.type como free é possível especificar as contas que irão instalar o app para previnir que outras contas o instalem?

Muito obrigado.

2 Likes

Mencionando os mestres aqui: @georgebrindeiro @victor.miranda

1 Like

Fala @hugocostadev!

O erro que você mencionou diz justamente que o app corebizio.corebizio-sku-selector tem billing options, quando não poderia ser assim para ser uma app privada. Do jeito que tá, teoricamente qualquer pessoa poderia instalar.

Veja a seção Setting my app as private da documentação:

Ou seja, é necessário remover o campo billingOptions do manifest se você não quiser permitir que qualquer conta instale a app.

Até onde eu sei, não existe uma forma de definir uma allowlist de contas que poderiam usar uma app. Se ela for privada, apenas a conta definida como vendor poderá instalar.

Uma alternativa para restringir uma app desenvolvida por vocês a apenas algumas contas seria manter forks da mesma app, alterando apenas o vendor no manifest. Vocês teriam que ter acesso suficiente para publicar a app na conta dos clientes, para que cada uma dessas cópias fosse publicada e atualizada.

O chato é que, por serem cópias, você não teria o benefício de atualização automática em todas contas pelo nosso housekeeper – que faz esse trabalho de buscar as contas onde uma app tá instalada e atualizar, sempre que é publicada nova versão. De alguma forma, boa parte desse trabalho precisaria ser manual ou ficar no seu CI/CD.

1 Like

Obrigado @georgebrindeiro .

Mas se eu tirar o billingOptions ele irá ficar privado e eu não vou conseguir instalar em uma conta com outro vendor. Eu Li a documentação que você mandou e tem a seguinte informação.

Without billingOptions , VTEX IO will understand that the app in question should not be made available to any account other than the one specified in the vendor field of manifest.json

Tem alguma forma que possibilita a instalação em outras contas sem colocar na VTEX Store? Obrigado

1 Like

Ah, sim, me confundi aqui! :sweat_smile:

Como instalar apps em outras contas VTEX?

Para isso ser possível, a app apenas precisa ser pública. Ela não precisa estar disponível na VTEX App Store. A forma como você declarou billingOptions na postagem original está correta nesse aspecto.

Como instalar dependências de diferentes vendors em um tema customizado?

Voltando à pergunta original, se você tiver o tema minhaloja.store-theme que depende de:

  • meuapp.buy-button
  • meuapp.header
  • corebizio.corebizio-skuselector

Você tem dois caminhos para declarar essa relação:

  • Incluir como Dependencies se as apps forem públicas ou do mesmo vendor. Isso faz com que essas dependências sejam automaticamente instaladas quando o tema é instalado.

  • Incluir como Peer Dependencies se as apps forem privadas ou pagas. Isso não instala as dependências automaticamente quando o tema é instalado. Trata-se apenas de uma forma de sinalizar que o tema depende dessas apps para funcionar e que elas precisam estar previamente disponíveis na conta para que o tema seja instalado com sucesso.

Como eu faço a instalação desses apps sem precisar alterar peerDependecies e gerar major?

Até onde sei, toda mudança de dependências de um tema no VTEX IO requer uma nova major. Isso porque, pelo versionamento semântico, a nova dependência torna o tema atualizado incompatível com versões anteriores.

Essa parte eu não entendi, da forma que eu declarei o billingOptions na postagem principal torna a app pública, mas ainda assim eu não consigo inserir em Dependencies, se faço isso eu recebo o erro mencionado.

Tem algum outro passo para tornar a app pública?

Obrigado

Hum… Pode ser que a lógica seja:

  • Sem billingOptions: pública e sem perspectiva de distribuir pela VTEX App Store. Logo, dá pra instalar direto na conta, sem passar por lá.

  • Com billingOptions, mas free: pública e distribuída pela VTEX App Store. Logo, precisa ser instalada previamente passando por lá. E precisaria ser declarada em peerDependencies.

Acho que não, na documentação fala que se não inserir billingOptions ele fica como privado.

Please notice that apps without billingOptions in the manifest.json file are private , meaning that they are only visible and available for installation in the account where they were published.

Oi @hugocostadev!

Pesquisando sobre o seu contexto, acredito que o que possa estar causando o erro é: um app com Billing options precisa ser incluído em peerDependencies. Existe uma discussão onde a pessoa tem um problema parecido e recebe a mesma mensagem de erro ao tentar incluir uma app com Billing Options em dependencies (você pode conferir aqui).

Seguindo o exemplo dessa discussão, o Shopper location tem Billing Options como free. Fiz um teste aqui, inclui como Peer Dependency o "vtex.shopper-location": "1.x" e deu a mesma mensagem de erro:

14:21:03.558 - error: App build failed with message: Error with dependency vtex.shopper-location@1.x: App cannot contain billing options: vtex.shopper-location@1.x

Porém, eu não fiz o passo de depois de adicionar como peerDependency, publicar uma nova major do tema.

Resumindo:

  • Acho que sobre o que discutiram de Billing Options está certo e também é o que tem na documentação. Porém, o que pode estar faltando é esse detalhe que se um app tem billing e quero instalar ele, precisa ser incluído como peerDependency.

  • Seguindo essa lógica, Hugo, você deveria primeiro incluir o app em peerDependencies e depois publicar uma nova major do tema.

Muito obrigado @mari.caetano e @georgebrindeiro .

Seria muito interessante se pudessemos instalar aplicações de outros vendors (sem ser vtex) em outras contas sem precisar gerar major, porque nem sempre esse app indica breaking changes. Fica a dica kkk

Obrigado pessoal

2 Likes

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.