I'm developing a connect app for my company's Confluence. It's working when I'm developing in local with two dynamicContentMacros showing. However, when I deployed it to the staging environment, only one of the macros showed.
I'm developing locally with ngrok as the tunnel to my local server.
Staging server is hosted on the cloud.
I get two macros showing in local

But I only get one in staging

I've checked their keys are different and tried re-uploading the app several times.

Is there anything I'm missing?
The descriptor file from staging environment.
{
"key": "internal-email-api-developermode-confluence",
"name": "[STG] File Addon for Confluence Cloud",
"description": "Listen on permission updated webhook, then send the payload for syncing permission updated for sharepoint",
"vendor": {
"name": "DEX Team",
"url": "https://org/"
},
"baseUrl": "https://confluence.jarvis-stg.com/",
"links": {
"self": "https://confluence.jarvis-stg.com/atlassian-connect.json",
"homepage": "https://confluence.jarvis-stg.com/atlassian-connect.json"
},
"authentication": {
"type": "jwt"
},
"lifecycle": {
"installed": "/installed"
},
"scopes": [
"WRITE",
"READ",
"ACCESS_EMAIL_ADDRESSES"
],
"apiMigrations": {
"signed-install": true
},
"modules": {
"dynamicContentMacros": [
{
"key": "insert-file",
"name": {
"value": "[STG] Insert File"
},
"url": "/view?fileKey={fileKey}&width={width}&height={height}&hideLink={hideLink}&hidePreview={hidePreview}&href={href}",
"description": {
"value": "Display a file"
},
"outputType": "inline",
"bodyType": "none",
"featured": true,
"parameters": [
{
"identifier": "fileKey",
"name": {
"value": "fileKey"
},
"description": {
"value": "fileKey."
},
"type": "string",
"required": true
},
{
"identifier": "width",
"name": {
"value": "Width"
},
"type": "string",
"required": false
},
{
"identifier": "height",
"name": {
"value": "Height"
},
"type": "string",
"required": false
},
{
"identifier": "hideLink",
"name": {
"value": "Hide Download Link"
},
"type": "boolean",
"required": false
},
{
"identifier": "hidePreview",
"name": {
"value": "Hide Preview"
},
"type": "boolean",
"required": false
},
{
"identifier": "href",
"name": {
"value": "Link"
},
"type": "string",
"required": false
}
],
"editor": {
"url": "/editor",
"editTitle": {
"value": "Edit file properties"
},
"insertTitle": {
"value": "Insert file"
},
"width": "640px",
"height": "370px",
"chrome": false
},
"icon": {
"width": 16,
"height": 16,
"url": "/images/tm-logo.png"
}
},
{
"key": "filelist",
"name": {
"value": "[STG] File List"
},
"description": {
"value": "Display files
},
"url": "/filelist",
"icon": {
"width": 16,
"height": 16,
"url": "/images/tm-logo.png"
}
}
],
"dialogs": [
{
"url": "/dialog?fileKey={fileKey}",
"options": {
"size": "fullscreen",
"header": {
"value": "Insert File Preview"
}
},
"key": "insert-file-dialog"
}
],
"webhooks": [
{
"key": "insert-file-page-removed",
"event": "page_removed",
"url": "/page_removed"
},
{
"key": "insert-file-blog-removed",
"event": "blog_removed",
"url": "/page_removed"
},
{
"key": "insert-file-page-copied",
"event": "page_copied",
"url": "/page_copied"
},
{
"key": "insert-file-page-moved",
"event": "page_moved",
"url": "/page_moved"
}
]
}
}
The descriptor file from local environment
{
"key": "DEV-file-addon-test",
"name": "[DEV]Confluence Content Addon",
"description": "Listen on permission updated webhook, then send the payload for syncing permission updated for sharepoint",
"vendor": {
"name": "DEX Team",
"url": "https://org/"
},
"baseUrl": "https://sturgeon-becoming-mostly.ngrok-free.app",
"links": {
"self": "https://sturgeon-becoming-mostly.ngrok-free.appatlassian-connect.json",
"homepage": "https://sturgeon-becoming-mostly.ngrok-free.appatlassian-connect.json"
},
"authentication": {
"type": "jwt"
},
"lifecycle": {
"installed": "/installed"
},
"scopes": [
"READ",
"WRITE"
],
"apiMigrations": {
"signed-install": true
},
"modules": {
"dynamicContentMacros": [
{
"key": "dev-insert-file",
"name": {
"value": "[DEV] Insert File"
},
"url": "/view?fileKey={fileKey}&width={width}&height={height}&hideLink={hideLink}&hidePreview={hidePreview}&href={href}",
"description": {
"value": "Display a file"
},
"outputType": "inline",
"bodyType": "none",
"featured": true,
"parameters": [
{
"identifier": "fileKey",
"name": {
"value": "fileKey"
},
"description": {
"value": "fileKey."
},
"type": "string",
"required": true
},
{
"identifier": "width",
"name": {
"value": "Width"
},
"type": "string",
"required": false
},
{
"identifier": "height",
"name": {
"value": "Height"
},
"type": "string",
"required": false
},
{
"identifier": "hideLink",
"name": {
"value": "Hide Download Link"
},
"type": "boolean",
"required": false
},
{
"identifier": "hidePreview",
"name": {
"value": "Hide Preview"
},
"type": "boolean",
"required": false
},
{
"identifier": "href",
"name": {
"value": "Link"
},
"type": "string",
"required": false
}
],
"editor": {
"url": "/editor",
"editTitle": {
"value": "Edit file properties"
},
"insertTitle": {
"value": "Insert file"
},
"width": "640px",
"height": "370px",
"chrome": false
},
"icon": {
"width": 16,
"height": 16,
"url": "/images/tm-logo.png"
}
},
{
"key": "dev-filelist",
"name": {
"value": "[DEV] File List"
},
"description": {
"value": "Display files you have uploaded"
},
"url": "/filelist",
"icon": {
"width": 16,
"height": 16,
"url": "/images/tm-logo.png"
}
}
],
"dialogs": [
{
"url": "/dialog?fileKey={fileKey}",
"options": {
"size": "fullscreen",
"header": {
"value": "Insert File Preview"
}
},
"key": "insert-file-dialog"
}
],
"webhooks": [
{
"key": "insert-file-page-removed",
"event": "page_removed",
"url": "/page_removed"
},
{
"key": "insert-file-blog-removed",
"event": "blog_removed",
"url": "/page_removed"
},
{
"key": "insert-file-page-copied",
"event": "page_copied",
"url": "/page_copied"
},
{
"key": "insert-file-page-moved",
"event": "page_moved",
"url": "/page_moved"
}
]
}
}