diff --git a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts index e1d612e54bc..32ca3b645b1 100644 --- a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts +++ b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts @@ -7,6 +7,7 @@ import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/co export type DevSessionCreateMutationVariables = Types.Exact<{ appId: Types.Scalars['String']['input'] assetsUrl: Types.Scalars['String']['input'] + websocketUrl?: Types.InputMaybe }> export type DevSessionCreateMutation = { @@ -33,6 +34,11 @@ export const DevSessionCreate = { variable: {kind: 'Variable', name: {kind: 'Name', value: 'assetsUrl'}}, type: {kind: 'NonNullType', type: {kind: 'NamedType', name: {kind: 'Name', value: 'String'}}}, }, + { + kind: 'VariableDefinition', + variable: {kind: 'Variable', name: {kind: 'Name', value: 'websocketUrl'}}, + type: {kind: 'NamedType', name: {kind: 'Name', value: 'String'}}, + }, ], selectionSet: { kind: 'SelectionSet', @@ -51,6 +57,11 @@ export const DevSessionCreate = { name: {kind: 'Name', value: 'assetsUrl'}, value: {kind: 'Variable', name: {kind: 'Name', value: 'assetsUrl'}}, }, + { + kind: 'Argument', + name: {kind: 'Name', value: 'websocketUrl'}, + value: {kind: 'Variable', name: {kind: 'Name', value: 'websocketUrl'}}, + }, ], selectionSet: { kind: 'SelectionSet', diff --git a/packages/app/src/cli/api/graphql/app-dev/queries/dev-session-create.graphql b/packages/app/src/cli/api/graphql/app-dev/queries/dev-session-create.graphql index d99cc3dddcc..f32b7fb9610 100644 --- a/packages/app/src/cli/api/graphql/app-dev/queries/dev-session-create.graphql +++ b/packages/app/src/cli/api/graphql/app-dev/queries/dev-session-create.graphql @@ -1,5 +1,5 @@ -mutation DevSessionCreate($appId: String!, $assetsUrl: String!) { - devSessionCreate(appId: $appId, assetsUrl: $assetsUrl) { +mutation DevSessionCreate($appId: String!, $assetsUrl: String!, $websocketUrl: String) { + devSessionCreate(appId: $appId, assetsUrl: $assetsUrl, websocketUrl: $websocketUrl) { userErrors { message on diff --git a/packages/app/src/cli/services/dev/extension.ts b/packages/app/src/cli/services/dev/extension.ts index 59ec96db0d1..301f1313c4d 100644 --- a/packages/app/src/cli/services/dev/extension.ts +++ b/packages/app/src/cli/services/dev/extension.ts @@ -183,7 +183,7 @@ export async function devUIExtensions(options: ExtensionDevOptions): Promise { abortController = new AbortController() devSessionStatusManager = new DevSessionStatusManager() options = { + app: {} as AppLinkedInterface, + apiKey: 'test-api-key', developerPlatformClient, appWatcher, storeFqdn: 'test.myshopify.com', + url: 'https://test.dev', appId: 'app123', organizationId: 'org123', appPreviewURL: 'https://test.preview.url', @@ -410,6 +413,7 @@ describe('pushUpdatesForDevSession', () => { modules: [ { uid: 'test-ui-extension-uid', + uuid: undefined, assets: 'test-ui-extension-uid', handle: updatedExtension.handle, type: updatedExtension.externalType, @@ -469,8 +473,7 @@ describe('pushUpdatesForDevSession', () => { shopFqdn: 'test.myshopify.com', appId: 'app123', assetsUrl: 'https://gcs.url', - manifest: expect.any(Object), - inheritedModuleUids: [], + websocketUrl: 'wss://test.dev/extensions', }) }) diff --git a/packages/app/src/cli/services/dev/processes/dev-session/dev-session.ts b/packages/app/src/cli/services/dev/processes/dev-session/dev-session.ts index 21cbb873a1a..a6b8ad098d8 100644 --- a/packages/app/src/cli/services/dev/processes/dev-session/dev-session.ts +++ b/packages/app/src/cli/services/dev/processes/dev-session/dev-session.ts @@ -5,6 +5,7 @@ import {AppEvent, AppEventWatcher, ExtensionEvent} from '../../app-events/app-ev import {compressBundle, getUploadURL, uploadToGCS, writeManifestToBundle} from '../../../bundle.js' import {DevSessionCreateOptions, DevSessionUpdateOptions} from '../../../../utilities/developer-platform-client.js' import {AppManifest} from '../../../../models/app/app.js' +import {getWebSocketUrl} from '../../extension.js' import {endHRTimeInMs, startHRTime} from '@shopify/cli-kit/node/hrtime' import {ClientError} from 'graphql-request' import {JsonMapType} from '@shopify/cli-kit/node/toml' @@ -276,16 +277,23 @@ export class DevSession { const {manifest, inheritedModuleUids, assets} = await this.createManifest(appEvent) const signedURL = await this.uploadAssetsIfNeeded(assets, !this.statusManager.status.isReady) - const payload = { - shopFqdn: this.options.storeFqdn, - appId: this.options.appId, - assetsUrl: signedURL, - manifest, - inheritedModuleUids, - } + const websocketUrl = getWebSocketUrl(this.options.url) if (this.statusManager.status.isReady) { + const payload: DevSessionUpdateOptions = { + shopFqdn: this.options.storeFqdn, + appId: this.options.appId, + assetsUrl: signedURL, + manifest, + inheritedModuleUids, + } return this.devSessionUpdateWithRetry(payload) } else { + const payload: DevSessionCreateOptions = { + shopFqdn: this.options.storeFqdn, + appId: this.options.appId, + assetsUrl: signedURL, + websocketUrl, + } return this.devSessionCreateWithRetry(payload) } // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/app/src/cli/utilities/developer-platform-client.ts b/packages/app/src/cli/utilities/developer-platform-client.ts index f5eb551a756..8b27e3b501a 100644 --- a/packages/app/src/cli/utilities/developer-platform-client.ts +++ b/packages/app/src/cli/utilities/developer-platform-client.ts @@ -167,7 +167,7 @@ interface DevSessionSharedOptions { export interface DevSessionCreateOptions extends DevSessionSharedOptions { assetsUrl?: string - manifest: AppManifest + websocketUrl?: string } export interface DevSessionUpdateOptions extends DevSessionSharedOptions { diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts index 1c044c65a68..698a796f2c1 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts @@ -1017,12 +1017,17 @@ export class AppManagementClient implements DeveloperPlatformClient { return appDeepLink({id, organizationId}) } - async devSessionCreate({appId, assetsUrl, shopFqdn}: DevSessionCreateOptions): Promise { + async devSessionCreate({ + appId, + assetsUrl, + shopFqdn, + websocketUrl, + }: DevSessionCreateOptions): Promise { const appIdNumber = String(numberFromGid(appId)) return this.appDevRequest({ query: DevSessionCreate, shopFqdn, - variables: {appId: appIdNumber, assetsUrl: assetsUrl ?? ''}, + variables: {appId: appIdNumber, assetsUrl: assetsUrl ?? '', websocketUrl}, requestOptions: {requestMode: 'slow-request'}, }) }