Skip to content

[Bug]: Redirect URLs being appended instead of replaced in local config during app dev #4741

Description

@shaheemMPM

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

When running shopify app dev, the CLI should update the redirect_urls in the local shopify.app.toml config file by replacing the old tunnel URLs with new ones, maintaining the same paths but with the new tunnel domain. This behavior should match how the Partners dashboard is currently being updated.

Actual behavior

Starting from version 3.69.0, when running shopify app dev, the CLI appends new tunnel redirect URLs to the existing ones in the local shopify.app.toml config file instead of replacing them. This creates an ever-growing list of redirect URLs in the local config, while the Partners dashboard is correctly updated with only the new URLs.

Example of what happens in local config:

This becomes problematic when running shopify app deploy as it pushes all accumulated URLs to the Partners dashboard.

Verbose output

Verbose Output of dev command

2024-10-24T19:03:32.928Z: Running command app dev
2024-10-24T19:03:32.937Z: Getting a random port...
2024-10-24T19:03:32.941Z: Random port obtained: 51591
2024-10-24T19:03:32.952Z: cloudflared already installed, skipping
2024-10-24T19:03:32.954Z:
Running system process:
· Command: /Users/shaheem/Developer/Astral/App-Direct-Checkout/node_modules/.pnpm/@Shopify+cli@3.69.2/node_modules/@shopify/cli/bin/cloudflared tunnel --url http://localhost:51591 --no-autoupdate
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout

2024-10-24T19:03:32.958Z: Reading cached app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:32.958Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:32.961Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:32.964Z: 2024-10-24T19:03:32Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps
2024-10-24T19:03:32Z INF Requesting new quick Tunnel on trycloudflare.com...

2024-10-24T19:03:32.965Z: Reading the content of file at shopify.app.alwin-direct-checkout-dev.toml...
2024-10-24T19:03:32.965Z: Reading the content of file at shopify.app.aswin-ashok-direct-checkout.toml...
2024-10-24T19:03:32.966Z: Reading the content of file at shopify.app.direct-checkout-staging.toml...
2024-10-24T19:03:32.966Z: Reading the content of file at shopify.app.direct-checkout.toml...
2024-10-24T19:03:32.966Z: Reading the content of file at shopify.app.geon-direct-checkout-dev.toml...
2024-10-24T19:03:32.966Z: Reading the content of file at shopify.app.jofin-dev-direct-checkout.toml...
2024-10-24T19:03:32.966Z: Reading the content of file at shopify.app.production.toml...
2024-10-24T19:03:32.967Z: Reading the content of file at shopify.app.toml...
2024-10-24T19:03:32.985Z: Reading cached app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:32.986Z: Reading cached app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:32.986Z: Reading cached app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:32.987Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:32.987Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.alwin-direct-checkout-dev.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.aswin-ashok-direct-checkout.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.direct-checkout-staging.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.direct-checkout.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.geon-direct-checkout-dev.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.jofin-dev-direct-checkout.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.production.toml...
2024-10-24T19:03:32.988Z: Reading the content of file at shopify.app.toml...
2024-10-24T19:03:32.999Z: Ensuring that the user is authenticated with the Partners API with the following scopes:
[]

2024-10-24T19:03:32.999Z: Getting session store...
2024-10-24T19:03:32.999Z: 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"
]
For applications:
{
"partnersApi": {
"scopes": []
}
}

2024-10-24T19:03:33.000Z: Sending Identity Introspection request to URL: https://accounts.shopify.com/oauth/introspection
2024-10-24T19:03:33.000Z: Sending POST request to URL https://accounts.shopify.com/oauth/introspection
With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:33.487Z: Request to https://accounts.shopify.com/oauth/introspection completed in 487 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/"adc23ca6ba843ab4cffcc3a6fdf82d16"
  • server-timing: processing;dur=28, socket_queue;dur=1.781, edge;dur=1.014, util;dur=0.35, cfRequestDuration;dur=360.999823
  • x-request-id: 0ca8dbe0-1054-468b-a836-4a96cd21ab2d-1729796613

2024-10-24T19:03:33.491Z: The identity token is valid: true
2024-10-24T19:03:33.491Z:
The validation of the token for application/identity completed with the following results:

  • It's expired: false
  • It's invalid in identity: false

2024-10-24T19:03:33.492Z: Verifying that the user has a Partner organization
2024-10-24T19:03:33.495Z: Confirmed partner account exists from cache
2024-10-24T19:03:33.496Z: Getting partner account info from cache
2024-10-24T19:03:33.504Z: 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.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:34.268Z: Request to https://partners.shopify.com/api/cli/graphql completed in 763 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"cfaa3014e7674ae45b7a4db152bdc8a1"
  • server-timing: processing;dur=339, socket_queue;dur=2.005, util;dur=0.5, cfRequestDuration;dur=569.999933
  • x-request-id: 4b56a263-de37-44c4-99ab-a91e44e26302-1729796613

2024-10-24T19:03:34.275Z: Sending "Partners" GraphQL request:
query FindOrganization($id: ID!) {
organizations(id: $id, first: 1) {
nodes {
id
businessName
}
}
}

With variables:
{
"id": "1535667"
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:34.869Z: Request to https://partners.shopify.com/api/cli/graphql completed in 593 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"54755d7723201810cb8a94d639d1f9b5"
  • server-timing: processing;dur=77, socket_queue;dur=2.028, util;dur=0.2, cfRequestDuration;dur=414.000273
  • x-request-id: 29a7b93f-0cdc-4058-8269-33acf77e943f-1729796614

2024-10-24T19:03:34.876Z: Sending "Partners" GraphQL request:
query FindOrganization($orgId: ID!, $shopDomain: String) {
organizations(id: $orgId, first: 1) {
nodes {
id
businessName
stores(shopDomain: $shopDomain, first: 1, archived: false) {
nodes {
shopId
link
shopDomain
shopName
transferDisabled
convertableToPartnerTest
}
}
}
}
}

With variables:
{
"orgId": "1535667",
"shopDomain": "storetools-beta.myshopify.com"
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:35.497Z: Request to https://partners.shopify.com/api/cli/graphql completed in 620 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"d7b0fe7325eebfd86ccd6d69cb252408"
  • server-timing: processing;dur=147, socket_queue;dur=1.816, util;dur=0.3, cfRequestDuration;dur=488.999844
  • x-request-id: 7f54d31f-ab0c-4853-b357-ee6eb3cad952-1729796614

2024-10-24T19:03:35.504Z: 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": "d074d62d4285bdd4bcb55d2ec0339ebb"
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:35.966Z: Request to https://partners.shopify.com/api/cli/graphql completed in 461 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"969a1610884597aff8ad9796545a6995"
  • server-timing: processing;dur=101, socket_queue;dur=1.458, util;dur=0.1, cfRequestDuration;dur=324.999809
  • x-request-id: 8f28a3f1-1dbe-4118-a89c-edf64dd4e1ea-1729796615

2024-10-24T19:03:35.977Z: The following extension specifications were defined locally but not found in the remote specifications: data, payments_extension, tax_calculation
2024-10-24T19:03:35.977Z: The following extension specifications were found in the remote specifications but not defined locally: admin_link, cloud_terminal_management, subscription_link_extension
2024-10-24T19:03:35.982Z: Sending "Partners" GraphQL request:
query activeAppVersion($apiKey: String!) {
app(apiKey: $apiKey) {
activeAppVersion {
appModuleVersions {
registrationId
registrationUuid
registrationTitle
type
config
specification {
identifier
name
experience
options {
managementExperience
}
}
}
}
}
}

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

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:36.537Z: Request to https://partners.shopify.com/api/cli/graphql completed in 555 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"261057b5568f20dbb647ecc9e90e0969"
  • server-timing: processing;dur=202, socket_queue;dur=2.334, util;dur=0.5, cfRequestDuration;dur=430.000067
  • x-request-id: d298382e-b78f-41b2-929a-36fd58200ad2-1729796616

2024-10-24T19:03:36.544Z: Reading cached app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:36.545Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:36.546Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:36.549Z: Reading the content of file at shopify.app.alwin-direct-checkout-dev.toml...
2024-10-24T19:03:36.549Z: Reading the content of file at shopify.app.aswin-ashok-direct-checkout.toml...
2024-10-24T19:03:36.549Z: Reading the content of file at shopify.app.direct-checkout-staging.toml...
2024-10-24T19:03:36.550Z: Reading the content of file at shopify.app.direct-checkout.toml...
2024-10-24T19:03:36.550Z: Reading the content of file at shopify.app.geon-direct-checkout-dev.toml...
2024-10-24T19:03:36.550Z: Reading the content of file at shopify.app.jofin-dev-direct-checkout.toml...
2024-10-24T19:03:36.550Z: Reading the content of file at shopify.app.production.toml...
2024-10-24T19:03:36.550Z: Reading the content of file at shopify.app.toml...
2024-10-24T19:03:36.577Z: Reading the content of file at package.json...
2024-10-24T19:03:36.577Z: Reading the content of file at package.json...
2024-10-24T19:03:36.579Z:
Running system process:
· Command: npm prefix
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout

2024-10-24T19:03:36.670Z: Obtaining the dependency manager in directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:36.756Z: Reading the content of file at app/nest/shopify.web.toml...
2024-10-24T19:03:36.756Z: Reading the content of file at app/proxy/shopify.web.toml...
2024-10-24T19:03:36.756Z: Reading the content of file at app/remix/shopify.web.toml...
2024-10-24T19:03:36.758Z: Reading the content of file at package.json...
2024-10-24T19:03:36.758Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:36.759Z: Writing some content to file at shopify.app.shaheem-direct-dev.toml...
╭─ info ─────────────────────────────────────────────────────────────────────────────╮
│ │
│ Using shopify.app.shaheem-direct-dev.toml for default values: │
│ │
│ • Org: Astral [playground] │
│ • App: shaheem-direct-dev │
│ • Dev store: storetools-beta.myshopify.com │
│ • Update URLs: Yes │
│ │
│ You can pass --reset to your command to reset your app configuration. │
│ │
╰────────────────────────────────────────────────────────────────────────────────────╯

2024-10-24T19:03:36.778Z: Port 3457 is free
2024-10-24T19:03:36.779Z: Polling tunnel status for cloudflare (attempt 0): starting
2024-10-24T19:03:36.779Z: Getting a random port...
2024-10-24T19:03:36.780Z: Random port obtained: 51601
2024-10-24T19:03:37.281Z: Polling tunnel status for cloudflare (attempt 1): starting
2024-10-24T19:03:37.782Z: Polling tunnel status for cloudflare (attempt 2): starting
2024-10-24T19:03:38.284Z: Polling tunnel status for cloudflare (attempt 3): starting
2024-10-24T19:03:38.688Z: 2024-10-24T19:03:38Z INF +--------------------------------------------------------------------------------------------+
2024-10-24T19:03:38Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
2024-10-24T19:03:38Z INF | https://cartoon-magnificent-nuclear-ar.trycloudflare.com |

2024-10-24T19:03:38.689Z: 2024-10-24T19:03:38Z INF +--------------------------------------------------------------------------------------------+
2024-10-24T19:03:38Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared]
2024-10-24T19:03:38Z INF Version 2024.8.2
2024-10-24T19:03:38Z INF GOOS: darwin, GOVersion: go1.22.2-devel-cf, GoArch: arm64
2024-10-24T19:03:38Z INF Settings: map[ha-connections:1 no-autoupdate:true protocol:quic url:http://localhost:51591]

2024-10-24T19:03:38.692Z: 2024-10-24T19:03:38Z INF Generated Connector ID: 5636cd16-15da-40c4-8f75-59bdb924b70a

2024-10-24T19:03:38.711Z: 2024-10-24T19:03:38Z INF Initial protocol quic

2024-10-24T19:03:38.711Z: 2024-10-24T19:03:38Z INF ICMP proxy will use 192.168.29.177 as source for IPv4

2024-10-24T19:03:38.711Z: 2024-10-24T19:03:38Z INF ICMP proxy will use fe80::434:db81:91bc:8c9d in zone en0 as source for IPv6

2024-10-24T19:03:38.711Z: 2024-10-24T19:03:38Z INF Created ICMP proxy listening on 192.168.29.177:0

2024-10-24T19:03:38.711Z: 2024-10-24T19:03:38Z INF Created ICMP proxy listening on [fe80::434:db81:91bc:8c9d%en0]:0

2024-10-24T19:03:38.726Z: 2024-10-24T19:03:38Z INF Starting metrics server on 127.0.0.1:51603/metrics

2024-10-24T19:03:38.785Z: Polling tunnel status for cloudflare (attempt 4): starting
2024-10-24T19:03:38.913Z: 2024-10-24T19:03:38Z ERR update check failed error="no release found"

2024-10-24T19:03:39.286Z: Polling tunnel status for cloudflare (attempt 5): starting
2024-10-24T19:03:39.728Z: 2024-10-24T19:03:39Z INF Registered tunnel connection connIndex=0 connection=734b6815-0177-472f-9695-9df4c8bce9cc event=0 ip=198.41.200.53 location=bom12 protocol=quic

2024-10-24T19:03:39.787Z: Polling tunnel status for cloudflare (attempt 6): connected
2024-10-24T19:03:39.788Z: Getting a random port...
2024-10-24T19:03:39.789Z: Random port obtained: 51604
2024-10-24T19:03:39.795Z: Sending "Partners" GraphQL request:
mutation appUpdate($apiKey: String!, $applicationUrl: Url!, $redirectUrlWhitelist: [Url]!, $appProxy: AppProxyInput) {
appUpdate(
input: {
apiKey: $apiKey
applicationUrl: $applicationUrl
redirectUrlWhitelist: $redirectUrlWhitelist
appProxy: $appProxy
}
) {
userErrors {
message
field
}
}
}

With variables:
{
"apiKey": "*****",
"applicationUrl": "https://cartoon-magnificent-nuclear-ar.trycloudflare.com",
"redirectUrlWhitelist": [
"https://cartoon-magnificent-nuclear-ar.trycloudflare.com/auth/callback",
"https://cartoon-magnificent-nuclear-ar.trycloudflare.com/auth/shopify/callback",
"https://cartoon-magnificent-nuclear-ar.trycloudflare.com/api/auth/callback"
],
"appProxy": {
"proxyUrl": "https://cartoon-magnificent-nuclear-ar.trycloudflare.com/proxy",
"proxySubPath": "direct",
"proxySubPathPrefix": "a"
}
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:40.485Z: Request to https://partners.shopify.com/api/cli/graphql completed in 689 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"76acb4e44b91f928c3744a856cacdd2e"
  • server-timing: processing;dur=334, socket_queue;dur=2.498, util;dur=0.5, cfRequestDuration;dur=552.999973
  • x-request-id: f94de9cc-8ea5-4310-a905-58e92158b651-1729796619

2024-10-24T19:03:40.487Z: Reading the content of file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:40.489Z: Writing some content to file at shopify.app.shaheem-direct-dev.toml...
2024-10-24T19:03:40.493Z: Getting a random port...
2024-10-24T19:03:40.494Z: Random port obtained: 51606
2024-10-24T19:03:40.499Z: Sending "Partners" GraphQL request:
query allAppExtensionRegistrations($apiKey: String!) {
app(apiKey: $apiKey) {
extensionRegistrations {
id
uuid
title
type
draftVersion {
config
context
}
activeVersion {
config
context
}
}
configurationRegistrations {
id
uuid
title
type
draftVersion {
config
context
}
activeVersion {
config
context
}
}
dashboardManagedExtensionRegistrations {
id
uuid
title
type
activeVersion {
config
context
}
draftVersion {
config
context
}
}
}
}

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

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:41.444Z: Request to https://partners.shopify.com/api/cli/graphql completed in 945 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"a213cd477cbd8132727b652f0b19e706"
  • server-timing: processing;dur=587, socket_queue;dur=3.929, util;dur=0.5, cfRequestDuration;dur=811.999798
  • x-request-id: be2cb053-359e-407e-b5e4-e000e0b982ba-1729796620

2024-10-24T19:03:41.453Z: Sending "Partners" GraphQL request:
query activeAppVersion($apiKey: String!) {
app(apiKey: $apiKey) {
activeAppVersion {
appModuleVersions {
registrationId
registrationUuid
registrationTitle
type
config
specification {
identifier
name
experience
options {
managementExperience
}
}
}
}
}
}

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

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:42.171Z: Request to https://partners.shopify.com/api/cli/graphql completed in 717 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"261057b5568f20dbb647ecc9e90e0969"
  • server-timing: processing;dur=237, socket_queue;dur=3.351, util;dur=0.1, cfRequestDuration;dur=576.999903
  • x-request-id: 91042d6a-618e-45d4-ae13-e731fe54a3b3-1729796621

2024-10-24T19:03:42.179Z: Sending "Partners" GraphQL request:
query activeAppVersion($apiKey: String!) {
app(apiKey: $apiKey) {
activeAppVersion {
appModuleVersions {
registrationId
registrationUuid
registrationTitle
type
config
specification {
identifier
name
experience
options {
managementExperience
}
}
}
}
}
}

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

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:42.862Z: Request to https://partners.shopify.com/api/cli/graphql completed in 683 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"261057b5568f20dbb647ecc9e90e0969"
  • server-timing: processing;dur=249, socket_queue;dur=4.987, util;dur=0.2, cfRequestDuration;dur=553.999901
  • x-request-id: 65325c3b-7c0e-4b06-a3d2-2d24183464ea-1729796622

2024-10-24T19:03:42.872Z: Storing app information for directory /Users/shaheem/Developer/Astral/App-Direct-Checkout:{
"directory": "/Users/shaheem/Developer/Astral/App-Direct-Checkout",
"previousAppId": "d074d62d4285bdd4bcb55d2ec0339ebb"
}
2024-10-24T19:03:42.887Z:
Running system process:
· Command: npm prefix
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout

2024-10-24T19:03:42.987Z: Obtaining the dependency manager in directory /Users/shaheem/Developer/Astral/App-Direct-Checkout...
2024-10-24T19:03:42.988Z:
Running system process:
· Command: ruby -v
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout

2024-10-24T19:03:43.423Z: Request to https://monorail-edge.shopifysvc.com/v1/produce completed in 353 ms
With response headers:

  • x-request-id: df256143-7148-4d83-bd38-459dbc3fae90

2024-10-24T19:03:43.424Z: Analytics event sent: {
"command": "app dev",
"time_start": 1729796612929,
"time_end": 1729796622882,
"total_time": 9953,
"success": true,
"cli_version": "3.69.2",
"ruby_version": "3.2.2",
"node_version": "22.9.0",
"is_employee": false,
"uname": "darwin arm64",
"env_ci": false,
"env_plugin_installed_any_custom": false,
"env_plugin_installed_shopify": "["@shopify/cli"]",
"env_shell": "zsh",
"env_device_id": "e68c36580f604814c31dc4a2ce668e84c0051abb",
"env_cloud": "localhost",
"env_package_manager": "pnpm",
"env_is_global": false,
"env_auth_method": "device_auth",
"cmd_app_warning_api_key_deprecation_displayed": false,
"cmd_app_all_configs_any": true,
"cmd_app_all_configs_clients": "{"shopify.app.alwin-direct-checkout-dev.toml":"056bcf961ceb63b14e2a7f512fbb032c","shopify.app.aswin-ashok-direct-checkout.toml":"a0b08bcc731346dd54477910cf3968e5","shopify.app.direct-checkout-staging.toml":"a44f1a408cde708cc71194a8c3a93744","shopify.app.direct-checkout.toml":"a0309499edcda0f9d4d7c107591935ed","shopify.app.geon-direct-checkout-dev.toml":"777b0a22807e2b9efe3678ac64059136","shopify.app.jofin-dev-direct-checkout.toml":"e3a9a6633dd212c8a7888ee6b3f970cb","shopify.app.production.toml":"bed6f6edcf91dbde8385060951978df8","shopify.app.shaheem-direct-dev.toml":"d074d62d4285bdd4bcb55d2ec0339ebb","shopify.app.toml":"113c8291d8f0ef7da43f8116892eeb3b"}",
"cmd_app_linked_config_used": true,
"cmd_app_linked_config_name": "shopify.app.shaheem-direct-dev.toml",
"cmd_app_linked_config_git_tracked": false,
"cmd_app_linked_config_source": "flag",
"cmd_app_linked_config_uses_cli_managed_urls": true,
"partner_id": 1535667,
"api_key": "****",
"project_type": "node",
"app_extensions_any": false,
"app_extensions_breakdown": "{}",
"app_extensions_count": 0,
"app_extensions_custom_layout": false,
"app_extensions_function_any": false,
"app_extensions_function_count": 0,
"app_extensions_theme_any": false,
"app_extensions_theme_count": 0,
"app_extensions_ui_any": false,
"app_extensions_ui_count": 0,
"app_name_hash": "705a8d9fd0f2a391cc9db15f317790ac16c333f8",
"app_path_hash": "178833bc4ff81ff594d1a7c8caf3ad39897566fa",
"app_scopes": "["read_discounts","read_inventory","read_locales","read_orders","read_products","unauthenticated_read_checkouts","unauthenticated_read_content","unauthenticated_read_customer_tags","unauthenticated_read_customers","unauthenticated_read_metaobjects","unauthenticated_read_product_listings","unauthenticated_read_product_tags","unauthenticated_write_checkouts","unauthenticated_write_customers","write_files"]",
"app_web_backend_any": true,
"app_web_backend_count": 1,
"app_web_custom_layout": true,
"app_web_framework": "unknown",
"app_web_frontend_any": true,
"app_web_frontend_count": 1,
"env_package_manager_workspaces": true,
"cmd_deploy_include_config_used": true,
"cmd_deploy_config_modules_breakdown": "["access_scopes","app_proxy","application_url","auth","embedded","handle","name","pos","webhooks"]",
"cmd_deploy_config_modules_updated": "["app_proxy","application_url","auth"]",
"cmd_dev_tunnel_type": "cloudflare",
"cmd_dev_urls_updated": true,
"store_fqdn_hash": "bb8c2093f9f952868fdf47fcc263ff24963a23c1",
"cmd_app_dependency_installation_skipped": false,
"cmd_app_reset_used": false,
"cmd_all_timing_network_ms": 6517,
"cmd_all_timing_prompts_ms": 0,
"cmd_all_launcher": "pnpm",
"cmd_all_topic": "app",
"cmd_all_plugin": "@shopify/app",
"cmd_all_verbose": true,
"cmd_all_path_override": true,
"cmd_all_path_override_hash": "178833bc4ff81ff594d1a7c8caf3ad39897566fa",
"cmd_all_last_graphql_request_id": "65325c3b-7c0e-4b06-a3d2-2d24183464ea-1729796622",
"cmd_all_timing_active_ms": 3435,
"cmd_all_exit": "ok",
"user_id": "8642ea7d-504a-46cd-b1bf-d1fd3f2d3ac4",
"args": "--no-color --verbose",
"app_name": "astral-direct-checkout",
"store_fqdn": "storetools-beta.myshopify.com",
"env_plugin_installed_all": "["@shopify/cli"]",
"metadata": "{"extraPublic":{},"extraSensitive":{}}"
}
2024-10-24T19:03:43.429Z: Sending "Partners" GraphQL request:
query allAppExtensionRegistrations($apiKey: String!) {
app(apiKey: $apiKey) {
extensionRegistrations {
id
uuid
title
type
draftVersion {
config
context
}
activeVersion {
config
context
}
}
configurationRegistrations {
id
uuid
title
type
draftVersion {
config
context
}
activeVersion {
config
context
}
}
dashboardManagedExtensionRegistrations {
id
uuid
title
type
activeVersion {
config
context
}
draftVersion {
config
context
}
}
}
}

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

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

2024-10-24T19:03:44.287Z: Request to https://partners.shopify.com/api/cli/graphql completed in 857 ms
With response headers:

  • cache-control: max-age=0, private, must-revalidate
  • content-type: application/json; charset=utf-8
  • etag: W/"a213cd477cbd8132727b652f0b19e706"
  • server-timing: processing;dur=499, socket_queue;dur=1.926, util;dur=0.2, cfRequestDuration;dur=726.999760
  • x-request-id: 2a3c725d-4932-429d-894a-1cf446896015-1729796623

2024-10-24T19:03:44.309Z:
Running system process:
· Command: npm run start:dev
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout/app/nest

2024-10-24T19:03:44.312Z:
Running system process:
· Command: pnpm run dev
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout/app/proxy

2024-10-24T19:03:44.314Z:
Running system process:
· Command: npm run dev
· Working directory: /Users/shaheem/Developer/Astral/App-Direct-Checkout/app/remix

00:33:44 │ graphiql │ 2024-10-24T19:03:44.314Z: Setting up GraphiQL HTTP server on port 3457...
00:33:44 │ graphiql │ GraphiQL server started on port 3457
2024-10-24T19:03:44.343Z: Sending "Partners" GraphQL request:
mutation DevelopmentStorePreviewUpdate($input: DevelopmentStorePreviewUpdateInput!) {
developmentStorePreviewUpdate(input: $input) {
app {
id
developmentStorePreviewEnabled
}
userErrors {
message
field
}
}
}

With variables:
{
"input": {
"apiKey": "d074d62d4285bdd4bcb55d2ec0339ebb",
"enabled": true
}
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

00:33:44 │ nest │
00:33:44 │ nest │ > nest-app@0.0.1 start:dev
00:33:44 │ nest │ > nest start --watch
00:33:44 │ nest │
00:33:44 │ remix │
00:33:44 │ remix │ > remix-app@0.0.1 predev
00:33:44 │ remix │ > pnpm run setup
00:33:44 │ remix │
2024-10-24T19:03:44.494Z: Sending "Partners" GraphQL request:
mutation ExtensionUpdateDraft($apiKey: String!, $registrationId: ID!, $config: JSON!, $context: String, $handle: String) {
extensionUpdateDraft(
input: {apiKey: $apiKey, registrationId: $registrationId, config: $config, context: $context, handle: $handle}
) {
userErrors {
field
message
__typename
}
__typename
}
}

With variables:
{
"apiKey": "*****",
"config": "{"scopes":"read_discounts,read_inventory,read_locales,read_orders,read_products,unauthenticated_read_checkouts,unauthenticated_read_content,unauthenticated_read_customer_tags,unauthenticated_read_customers,unauthenticated_read_metaobjects,unauthenticated_read_product_listings,unauthenticated_read_product_tags,unauthenticated_write_checkouts,unauthenticated_write_customers,write_files","redirect_url_allowlist":["https://sie-cite-pour-vocational.trycloudflare.com/auth/callback","https://sie-cite-pour-vocational.trycloudflare.com/auth/shopify/callback","https://sie-cite-pour-vocational.trycloudflare.com/api/auth/callback","https://gets-mins-dozens-grams.trycloudflare.com/auth/callback","https://gets-mins-dozens-grams.trycloudflare.com/auth/shopify/callback","https://gets-mins-dozens-grams.trycloudflare.com/api/auth/callback","https://guest-sample-photographer-investigate.trycloudflare.com/auth/callback","https://guest-sample-photographer-investigate.trycloudflare.com/auth/shopify/callback","https://guest-sample-photographer-investigate.trycloudflare.com/api/auth/callback"]}",
"handle": "app-access",
"context": "",
"registrationId": "833259405313"
}

With request headers:

  • User-Agent: Shopify CLI; v=3.69.2
  • Keep-Alive: timeout=30
  • Sec-CH-UA-PLATFORM: darwin
  • Content-Type: application/json

Reproduction steps

  1. Create or use an existing Shopify app with shopify.app.toml containing redirect_urls with tunnel URLs
  2. Run shopify app dev to start the development server
  3. Check shopify.app.toml - note the current redirect_urls
  4. Stop the dev server
  5. Run shopify app dev again
  6. Check shopify.app.toml - observe that new tunnel redirect_urls are appended rather than replacing the old ones
  7. Verify in Partners dashboard that only the new URLs are present (working correctly)

Operating System

Mac OS Sonoma 14.6.1

Shopify CLI version (check your project's package.json if you're not sure)

3.69.2

Shell

zsh

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

v22.9.0

What language and version are you using in your application?

Node 22.9.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions