Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ const AdminSchema = zod.object({
admin: zod
.object({
static_root: zod.string().optional(),
allowed_domains: zod.array(zod.string()).optional(),
})
.optional(),
})

type AdminConfigType = zod.infer<typeof AdminSchema> & BaseConfigType
export type AdminConfigType = zod.infer<typeof AdminSchema> & BaseConfigType

const adminSpecificationSpec = createExtensionSpecification<AdminConfigType>({
identifier: 'admin',
Expand All @@ -33,6 +34,8 @@ const adminSpecificationSpec = createExtensionSpecification<AdminConfigType>({
admin: {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static_root: (remoteContent as any).admin.static_root,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
allowed_domains: (remoteContent as any).admin.allowed_domains,
},
}
},
Expand Down Expand Up @@ -67,6 +70,7 @@ const adminSpecificationSpec = createExtensionSpecification<AdminConfigType>({
if (!dir) return undefined
return {assetsKey: 'staticRoot', assetsDir: dir}
},

})

export default adminSpecificationSpec
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ interface ExtensionsPayloadInterface {
url: string
mobileUrl: string
title: string
allowed_domains?: string[]
assets?: {
[key: string]: {
url: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe('getExtensionsPayloadStoreRawPayload()', () => {
appName: 'mock-app-name',
url: 'https://mock-url.com',
websocketURL: 'wss://mock-websocket-url.com',
extensions: [{}, {}, {}],
extensions: [{specification: {}}, {specification: {}}, {specification: {}}],
storeFqdn: 'mock-store-fqdn.myshopify.com',
manifestVersion: '3',
} as unknown as ExtensionsPayloadStoreOptions
Expand Down
10 changes: 10 additions & 0 deletions packages/app/src/cli/services/dev/extension/payload/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {ExtensionDevOptions} from '../../extension.js'
import {getUIExtensionPayload, isNewExtensionPointsSchema} from '../payload.js'
import {buildAppURLForMobile, buildAppURLForWeb} from '../../../../utilities/app/app-url.js'
import {ExtensionInstance} from '../../../../models/extensions/extension-instance.js'
import {AdminConfigType} from '../../../../models/extensions/specifications/admin.js'
import {deepMergeObjects} from '@shopify/cli-kit/common/object'
import {outputDebug, outputContent} from '@shopify/cli-kit/node/output'
import {EventEmitter} from 'events'
Expand Down Expand Up @@ -42,6 +43,15 @@ export async function getExtensionsPayloadStoreRawPayload(
extensions: await Promise.all(options.extensions.map((ext) => getUIExtensionPayload(ext, bundlePath, options))),
}

// Admin extension contributes app-level config to the payload
const adminExtension = options.extensions.find((ext) => ext.type === 'admin')
if (adminExtension) {
const adminConfig = (adminExtension.configuration as AdminConfigType).admin
if (adminConfig?.allowed_domains) {
payload.app.allowed_domains = adminConfig.allowed_domains
}
}

if (options.appAssets) {
const assets: Record<string, {url: string; lastUpdated: number}> = {}
for (const assetKey of Object.keys(options.appAssets)) {
Expand Down
Loading