Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Duplicated handle "tname" in extensions "t:name", "t:name", "t:name", "t:name" and "t:name". Handle needs to be unique per extension. #5383

Open
2 tasks done
midavisbiz opened this issue Feb 11, 2025 · 4 comments
Labels
Type: Bug Something isn't working

Comments

@midavisbiz
Copy link

Please confirm that you have:

  • Searched existing issues to see if your issue is a duplicate. (If you’ve found a duplicate issue, feel free to add additional information in a comment on it.)
  • Reproduced the issue in the latest CLI version.

In which of these areas are you experiencing a problem?

App

Expected behavior

I should be able to run my app. However, upon trying to run it I get an error.

Actual behavior

I just received this error when updating to the latest CLI version 3.75.0. This looks like this is because I have 5 admin links in my app. None of my handles are named "t:name." I have put a sample .toml file below. Looks like it is now using the name instead of the handle as a unique identifier.

[[extensions]]
name = "t:name"

handle = "admin-link-draft-index"
type = "admin_link"

Verbose output

Verbose output
2025-02-11T14:45:21.746Z: Running command app dev
2025-02-11T14:45:21.752Z: Notifications to show: 0
2025-02-11T14:45:21.762Z: Reading cached app information for directory D:/Development/Repos/...
2025-02-11T14:45:21.763Z: Reading the content of file at shopify.app.toml...
2025-02-11T14:45:21.765Z: Reading the content of file at shopify.app.toml...
2025-02-11T14:45:21.767Z: Ensuring that the user is authenticated with the Partners API with the following scopes:
[]

2025-02-11T14:45:21.767Z: Getting session store...
2025-02-11T14:45:21.768Z: Validating existing session against the scopes:
[
"openid",
"https://api.shopify.com/auth/shop.admin.graphql",
"https://api.shopify.com/auth/shop.admin.themes",
"https://api.shopify.com/auth/partners.collaborator-relationships.readonly",
"https://api.shopify.com/auth/shop.storefront-renderer.devtools",
"https://api.shopify.com/auth/partners.app.cli.access",
"https://api.shopify.com/auth/destinations.readonly",
"https://api.shopify.com/auth/organization.store-management",
"https://api.shopify.com/auth/organization.apps.manage"
]
For applications:
{
"partnersApi": {
  "scopes": []
}
}

2025-02-11T14:45:21.769Z: - Token validation -> It's expired: false
2025-02-11T14:45:21.769Z: Sending Identity Introspection request to URL: https://accounts.shopify.com/oauth/introspection
2025-02-11T14:45:21.770Z: Sending POST request to URL https://accounts.shopify.com/oauth/introspection
With request headers:
- User-Agent: Shopify CLI; v=3.75.0
- Keep-Alive: timeout=30
- Sec-CH-UA-PLATFORM: win32
- Content-Type: application/json

2025-02-11T14:45:21.949Z: Request to https://accounts.shopify.com/oauth/introspection completed in 179 ms
With response headers:
- cache-control: no-cache, no-store, private, must-revalidate, max-age=0
- content-type: application/json; charset=utf-8
- etag: W/"27747a2c4721bf351985e10bf27ac48c"
- server-timing: processing;dur=33, socket_queue;dur=0.898, edge;dur=1.019, util;dur=0.2, cfRequestDuration;dur=126.999855
- x-request-id: db2c4af5-9c67-448e-800d-cb368ca28a91-1739285123

2025-02-11T14:45:21.951Z: The identity token is valid: true
2025-02-11T14:45:21.952Z: - Token validation -> It's invalid in identity: false
2025-02-11T14:45:21.952Z: Getting partner account info from cache
2025-02-11T14:45:21.987Z: Sending "Partners" GraphQL request:
query FindApp($apiKey: String!) {
  app(apiKey: $apiKey) {
    id
    title
    apiKey
    organizationId
    apiSecretKeys {
      secret
    }
    appType
    grantedScopes
    applicationUrl
    redirectUrlWhitelist
    requestedAccessScopes
    webhookApiVersion
    embedded
    posEmbedded
    preferencesUrl
    gdprWebhooks {
      customerDeletionUrl
      customerDataRequestUrl
      shopDeletionUrl
    }
    appProxy {
      subPath
      subPathPrefix
      url
    }
    developmentStorePreviewEnabled
    disabledFlags
  }
}

With variables:
{
"apiKey": "*****"
}

With request headers:
- User-Agent: Shopify CLI; v=3.75.0
- Keep-Alive: timeout=30
- Sec-CH-UA-PLATFORM: win32
- Content-Type: application/json

to https://partners.shopify.com/api/cli/graphql
2025-02-11T14:45:22.710Z: Request to https://partners.shopify.com/api/cli/graphql completed in 723 ms
With response headers:
- cache-control: max-age=0, private, must-revalidate
- content-type: application/json; charset=utf-8
- etag: W/"5db4ee5de008e8bde6a8eb69652fe0ab"
- server-timing: processing;dur=569, socket_queue;dur=2.054, util;dur=0.5, cfRequestDuration;dur=648.999929
- x-request-id: 2be4003d-ab92-40d2-ae80-99e547b1c25e-1739285124

2025-02-11T14:45:22.759Z: Sending "Partners" GraphQL request:
query FindOrganization($id: ID!) {
  organizations(id: $id, first: 1) {
    nodes {
      id
      businessName
    }
  }
}

With variables:
{
"id": "***"
}

With request headers:
- User-Agent: Shopify CLI; v=3.75.0
- Keep-Alive: timeout=30
- Sec-CH-UA-PLATFORM: win32
- Content-Type: application/json

to https://partners.shopify.com/api/cli/graphql
2025-02-11T14:45:22.977Z: Request to https://partners.shopify.com/api/cli/graphql completed in 217 ms
With response headers:
- cache-control: max-age=0, private, must-revalidate
- content-type: application/json; charset=utf-8
- etag: W/"112e19e8439823e2552eb67bee997bbe"
- server-timing: processing;dur=73, socket_queue;dur=2.076, util;dur=0.5, cfRequestDuration;dur=194.000006
- x-request-id: 71daa19c-c221-4593-98df-8db9b68c9a61-1739285124

2025-02-11T14:45:23.022Z: Sending "Partners" GraphQL request:
query fetchSpecifications($api_key: String!) {
  extensionSpecifications(apiKey: $api_key) {
    name
    externalName
    externalIdentifier
    identifier
    gated
    experience
    options {
      managementExperience
      registrationLimit
    }
    features {
      argo {
        surface
      }
    }
    validationSchema {
      jsonSchema
    }
  }
}

With variables:
{
"api_key": "***"
}

With request headers:
- User-Agent: Shopify CLI; v=3.75.0
- Keep-Alive: timeout=30
- Sec-CH-UA-PLATFORM: win32
- Content-Type: application/json

to https://partners.shopify.com/api/cli/graphql
2025-02-11T14:45:23.204Z: Request to https://partners.shopify.com/api/cli/graphql completed in 182 ms
With response headers:
- cache-control: max-age=0, private, must-revalidate
- content-type: application/json; charset=utf-8
- etag: W/"c8b43d3a53bc2611f1bc0ad0aea9a593"
- server-timing: processing;dur=80, socket_queue;dur=4.696, util;dur=0.6, cfRequestDuration;dur=161.999941
- x-request-id: 1559bc68-6e7c-4c13-a744-caea0b51e8c2-1739285125

2025-02-11T14:45:23.212Z: The following extension specifications were defined locally but not found in the remote specifications: payments_extension, tax_calculation
2025-02-11T14:45:23.214Z: Reading the content of file at shopify.app.deploy-dev.toml...
2025-02-11T14:45:23.215Z: Reading the content of file at shopify.app.deploy-prod.toml...
2025-02-11T14:45:23.216Z: Reading the content of file at .gitignore...
2025-02-11T14:45:23.218Z: Reading the .env file at .env
2025-02-11T14:45:23.218Z: Reading the content of file at .env...
2025-02-11T14:45:23.223Z: Reading the content of file at extensions/admin-link-draft-index/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/admin-link-draft-order-details/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/admin-link-order-details-edit-order/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/admin-link-order-index/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/admin-link-order-details-create-order/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/cart-transformer/shopify.extension.toml...
2025-02-11T14:45:23.224Z: Reading the content of file at extensions/checkout-international-message/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/delivery-customization-rush/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/order-details-block/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/checkout-special-instructions/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/pixel/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/order-draft-details-block/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/order-discount-tiered/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/product-details-block/shopify.extension.toml...
2025-02-11T14:45:23.225Z: Reading the content of file at extensions/product-options/shopify.extension.toml...
2025-02-11T14:45:23.228Z: Reading the content of file at extensions/admin-link-draft-index/shopify.extension.toml...
2025-02-11T14:45:23.228Z: Reading the content of file at extensions/admin-link-draft-order-details/shopify.extension.toml...
2025-02-11T14:45:23.228Z: Reading the content of file at extensions/admin-link-order-index/shopify.extension.toml...
2025-02-11T14:45:23.229Z: Reading the content of file at extensions/admin-link-order-details-create-order/shopify.extension.toml...
2025-02-11T14:45:23.229Z: Reading the content of file at extensions/admin-link-order-details-edit-order/shopify.extension.toml...
2025-02-11T14:45:23.229Z: Reading the content of file at extensions/cart-transformer/shopify.extension.toml...
2025-02-11T14:45:23.229Z: Reading the content of file at extensions/checkout-international-message/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/order-details-block/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/delivery-customization-rush/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/checkout-special-instructions/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/order-draft-details-block/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/order-discount-tiered/shopify.extension.toml...
2025-02-11T14:45:23.230Z: Reading the content of file at extensions/product-details-block/shopify.extension.toml...
╭─ error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                                                                                                              │
│  Duplicated handle "tname" in extensions "t:name", "t:name", "t:name", "t:name" and "t:name". Handle needs to be unique per extension.                                       │
│                                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Reproduction steps

  1. Updated to CLI 3.75.0
  2. Create multiple admin link extensions
  3. Run the app

Operating System

Windows 11

Shopify CLI version (shopify --version)

3.75.0

Shell

No response

Node version (run node -v if you're not sure)

v22.11.0

What language and version are you using in your application?

No response

@midavisbiz midavisbiz added the Type: Bug Something isn't working label Feb 11, 2025
@aaronwhitman
Copy link

I am experiencing the same issue since upgrading to shopify-cli 3.75.0.

My app has 3 extensions that are admin links. Each of the 3 shopify.extension.toml files has a unique value for handle that have not changed before/after the update to 3.75.0. However, each of the three has the same "name" value, and this appears to be the duplication mentioned in the error message.

error: Duplicated handle "[my_app_name]" in extensions "[My_app_name]", "My_app_name]" and "My_app_name]". Handle needs to be unique per extension.

It seems like the name value in each of the 3 TOML files is being used to test uniqueness, instead of the handle values, which have always been three unique strings.

@jpaylor
Copy link

jpaylor commented Feb 19, 2025

It's definitely using the name as though its a handle, instead of the actual handle. I'm seeing this issue too and was able to move past it by varying the name of each admin link.

However, after renaming one of them to "Example 123" (while keeping handle my-actual-extension-handle) and running shopify app deploy, the CLI is now asking

How would you like to deploy your "example-123"?

Match it to my-actual-extension-handle (ID: ... on Shopify Partners)
Match it to other-extension-handle (ID: ... on Shopify Partners)
Create new extension

It has converted the extension name to kebab-case and is now treating it as the handle.

As a result, it thinks the handle doesn't match any existing extension, now that it is using the name instead of the actual handle value

@aaronwhitman
Copy link

I am seeing the same behaviour. It ignores the handle in the TOML file, then makes it's own from the name. This may not seem like a problem, but it my case, I want all three admin links to just be the name of my app, so I can't proceed. This is an undocumented change to the behaviour of how to manage extensions with the CLI.

@ranrub
Copy link

ranrub commented Feb 24, 2025

Reproduces for me as well. I've rolled back to cli 3.74.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants