|  |  |  | @ -440,7 +440,9 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |     this.tearDown = () => {} | 
		
	
		
			
				|  |  |  |  |     this.websocket.addEventListener('open', this.onWebSocketOpen) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     // Is this listener ever even used??? | 
		
	
		
			
				|  |  |  |  |     this.websocket?.addEventListener('message', ((event: MessageEvent) => { | 
		
	
		
			
				|  |  |  |  |       console.log('ADAM: Received a message') | 
		
	
		
			
				|  |  |  |  |       const message: Models['WebSocketResponse_type'] = JSON.parse(event.data) | 
		
	
		
			
				|  |  |  |  |       const pending = | 
		
	
		
			
				|  |  |  |  |         this.engineCommandManager.pendingCommands[message.request_id || ''] | 
		
	
	
		
			
				
					
					|  |  |  | @ -450,6 +452,7 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       // If there's no body to the response, we can bail here. | 
		
	
		
			
				|  |  |  |  |       if (!resp || !resp.type) { | 
		
	
		
			
				|  |  |  |  |         console.log('ADAM: Resolved an empty-body promise', message.request_id) | 
		
	
		
			
				|  |  |  |  |         return | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -509,6 +512,8 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |         ) | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       // ADAM: Is this where resolved promises go? | 
		
	
		
			
				|  |  |  |  |       console.log('ADAM: Resolved some promise', message.request_id) | 
		
	
		
			
				|  |  |  |  |       pending.resolve([message]) | 
		
	
		
			
				|  |  |  |  |       delete this.engineCommandManager.pendingCommands[message.request_id || ''] | 
		
	
		
			
				|  |  |  |  |     }) as EventListener) | 
		
	
	
		
			
				
					
					|  |  |  | @ -674,7 +679,7 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         this.onIceCandidateError = (_event: Event) => { | 
		
	
		
			
				|  |  |  |  |           const event = _event as RTCPeerConnectionIceErrorEvent | 
		
	
		
			
				|  |  |  |  |           console.warn( | 
		
	
		
			
				|  |  |  |  |           console.log( | 
		
	
		
			
				|  |  |  |  |             `ICE candidate returned an error: ${event.errorCode}: ${event.errorText} for ${event.url}` | 
		
	
		
			
				|  |  |  |  |           ) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
	
		
			
				
					
					|  |  |  | @ -1022,12 +1027,18 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |             event.data | 
		
	
		
			
				|  |  |  |  |           ) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           console.log('ADAM: Got msg', message.request_id, 'type', message) | 
		
	
		
			
				|  |  |  |  |           if (!message.success) { | 
		
	
		
			
				|  |  |  |  |             const pending = | 
		
	
		
			
				|  |  |  |  |               this.engineCommandManager.pendingCommands[ | 
		
	
		
			
				|  |  |  |  |                 message.request_id || '' | 
		
	
		
			
				|  |  |  |  |               ] | 
		
	
		
			
				|  |  |  |  |             const errorsString = message?.errors | 
		
	
		
			
				|  |  |  |  |               ?.map((error) => { | 
		
	
		
			
				|  |  |  |  |                 return `  - ${error.error_code}: ${error.message}` | 
		
	
		
			
				|  |  |  |  |               }) | 
		
	
		
			
				|  |  |  |  |               .join('\n') | 
		
	
		
			
				|  |  |  |  |             pending.reject(errorsString) | 
		
	
		
			
				|  |  |  |  |             if (message.request_id) { | 
		
	
		
			
				|  |  |  |  |               const artifactThatFailed = | 
		
	
		
			
				|  |  |  |  |                 this.engineCommandManager.artifactGraph.get(message.request_id) | 
		
	
	
		
			
				
					
					|  |  |  | @ -1070,8 +1081,23 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           let resp = message.resp | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |           const pending = | 
		
	
		
			
				|  |  |  |  |             this.engineCommandManager.pendingCommands[message.request_id || ''] | 
		
	
		
			
				|  |  |  |  |           console.log( | 
		
	
		
			
				|  |  |  |  |             'ADAM: Successful response to ', | 
		
	
		
			
				|  |  |  |  |             message.request_id, | 
		
	
		
			
				|  |  |  |  |             pending | 
		
	
		
			
				|  |  |  |  |           ) | 
		
	
		
			
				|  |  |  |  |           if (pending !== undefined) { | 
		
	
		
			
				|  |  |  |  |             console.warn('ADAM: Resolving!') | 
		
	
		
			
				|  |  |  |  |             pending.resolve([message]) | 
		
	
		
			
				|  |  |  |  |             pending.promise.then((p) => { | 
		
	
		
			
				|  |  |  |  |               console.log('ADAM: Found a promise.then') | 
		
	
		
			
				|  |  |  |  |             }) | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |           // If there's no body to the response, we can bail here. | 
		
	
		
			
				|  |  |  |  |           if (!resp || !resp.type) { | 
		
	
		
			
				|  |  |  |  |             console.log('ADAM: Bailing because empty') | 
		
	
		
			
				|  |  |  |  |             return | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1082,6 +1108,7 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |             case 'modeling_session_data': | 
		
	
		
			
				|  |  |  |  |               let api_call_id = resp.data?.session?.api_call_id | 
		
	
		
			
				|  |  |  |  |               console.log('ADAM: ') | 
		
	
		
			
				|  |  |  |  |               console.log(`API Call ID: ${api_call_id}`) | 
		
	
		
			
				|  |  |  |  |               break | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1103,7 +1130,7 @@ class EngineConnection extends EventTarget { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |               // No ICE servers can be valid in a local dev. env. | 
		
	
		
			
				|  |  |  |  |               if (ice_servers?.length === 0) { | 
		
	
		
			
				|  |  |  |  |                 console.warn('No ICE servers') | 
		
	
		
			
				|  |  |  |  |                 console.log('No ICE servers') | 
		
	
		
			
				|  |  |  |  |                 this.pc?.setConfiguration({ | 
		
	
		
			
				|  |  |  |  |                   bundlePolicy: 'max-bundle', | 
		
	
		
			
				|  |  |  |  |                 }) | 
		
	
	
		
			
				
					
					|  |  |  | @ -1410,7 +1437,7 @@ export class EngineCommandManager extends EventTarget { | 
		
	
		
			
				|  |  |  |  |   height: number = 1337 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /** | 
		
	
		
			
				|  |  |  |  |    * Export intent traxcks the intent of the export. If it is null there is no | 
		
	
		
			
				|  |  |  |  |    * Export intent tracks the intent of the export. If it is null there is no | 
		
	
		
			
				|  |  |  |  |    * export in progress. Otherwise it is an enum value of the intent. | 
		
	
		
			
				|  |  |  |  |    * Another export cannot be started if one is already in progress. | 
		
	
		
			
				|  |  |  |  |    */ | 
		
	
	
		
			
				
					
					|  |  |  | @ -1683,7 +1710,7 @@ export class EngineCommandManager extends EventTarget { | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             case ExportIntent.Make: { | 
		
	
		
			
				|  |  |  |  |               if (!this.machineManager) { | 
		
	
		
			
				|  |  |  |  |                 console.warn('Some how, no manufacturing machine is selected.') | 
		
	
		
			
				|  |  |  |  |                 console.log('Some how, no manufacturing machine is selected.') | 
		
	
		
			
				|  |  |  |  |                 break | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1944,7 +1971,9 @@ export class EngineCommandManager extends EventTarget { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   sendSceneCommand( | 
		
	
		
			
				|  |  |  |  |     command: EngineCommand, | 
		
	
		
			
				|  |  |  |  |     forceWebsocket = false | 
		
	
		
			
				|  |  |  |  |     forceWebsocket = false, | 
		
	
		
			
				|  |  |  |  |     resolveCb?: (value: any | PromiseLike<any>) => void, | 
		
	
		
			
				|  |  |  |  |     rejectCb?: (value: any | PromiseLike<any>) => void | 
		
	
		
			
				|  |  |  |  |   ): Promise<Models['WebSocketResponse_type'] | null> { | 
		
	
		
			
				|  |  |  |  |     if (this.engineConnection === undefined) { | 
		
	
		
			
				|  |  |  |  |       return Promise.resolve(null) | 
		
	
	
		
			
				
					
					|  |  |  | @ -2053,7 +2082,9 @@ export class EngineCommandManager extends EventTarget { | 
		
	
		
			
				|  |  |  |  |         idToRangeMap: {}, | 
		
	
		
			
				|  |  |  |  |         range: defaultSourceRange(), | 
		
	
		
			
				|  |  |  |  |       }, | 
		
	
		
			
				|  |  |  |  |       true // isSceneCommand | 
		
	
		
			
				|  |  |  |  |       true, // isSceneCommand | 
		
	
		
			
				|  |  |  |  |       resolveCb, | 
		
	
		
			
				|  |  |  |  |       rejectCb | 
		
	
		
			
				|  |  |  |  |     ) | 
		
	
		
			
				|  |  |  |  |       .then(([a]) => a) | 
		
	
		
			
				|  |  |  |  |       .catch((e) => { | 
		
	
	
		
			
				
					
					|  |  |  | @ -2111,9 +2142,16 @@ export class EngineCommandManager extends EventTarget { | 
		
	
		
			
				|  |  |  |  |       range: PendingMessage['range'] | 
		
	
		
			
				|  |  |  |  |       idToRangeMap: PendingMessage['idToRangeMap'] | 
		
	
		
			
				|  |  |  |  |     }, | 
		
	
		
			
				|  |  |  |  |     isSceneCommand = false | 
		
	
		
			
				|  |  |  |  |     isSceneCommand = false, | 
		
	
		
			
				|  |  |  |  |     resolveCb?: (value: any | PromiseLike<any>) => void, | 
		
	
		
			
				|  |  |  |  |     rejectCb?: (value: any | PromiseLike<any>) => void | 
		
	
		
			
				|  |  |  |  |   ): Promise<[Models['WebSocketResponse_type']]> { | 
		
	
		
			
				|  |  |  |  |     const { promise, resolve, reject } = promiseFactory<any>() | 
		
	
		
			
				|  |  |  |  |     const { promise, resolve, reject } = (() => { | 
		
	
		
			
				|  |  |  |  |       if (resolveCb === undefined) return promiseFactory<any>() | 
		
	
		
			
				|  |  |  |  |       if (rejectCb === undefined) return promiseFactory<any>() | 
		
	
		
			
				|  |  |  |  |       return promiseFactoryFor(resolveCb, rejectCb) | 
		
	
		
			
				|  |  |  |  |     })() | 
		
	
		
			
				|  |  |  |  |     // console.log('ADAM:', resolveCb, promise) | 
		
	
		
			
				|  |  |  |  |     this.pendingCommands[id] = { | 
		
	
		
			
				|  |  |  |  |       resolve, | 
		
	
		
			
				|  |  |  |  |       reject, | 
		
	
	
		
			
				
					
					|  |  |  | @ -2269,3 +2307,14 @@ function promiseFactory<T>() { | 
		
	
		
			
				|  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |   return { promise, resolve, reject } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | function promiseFactoryFor<T>( | 
		
	
		
			
				|  |  |  |  |   resolve: (value: T | PromiseLike<T>) => void, | 
		
	
		
			
				|  |  |  |  |   reject: (value: T | PromiseLike<T>) => void | 
		
	
		
			
				|  |  |  |  | ) { | 
		
	
		
			
				|  |  |  |  |   const promise = new Promise<T>((_resolve, _reject) => { | 
		
	
		
			
				|  |  |  |  |     resolve = _resolve | 
		
	
		
			
				|  |  |  |  |     reject = _reject | 
		
	
		
			
				|  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |   return { promise, resolve, reject } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |