@ms-cloudpack/link-proxy 0.2.14 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-esm/lib/index.js +1 -1
- package/dist/browser-esm/lib/index.js.map +1 -1
- package/lib/LinkProxyApp.js +1 -1
- package/lib/LinkProxyApp.js.map +1 -1
- package/lib/UIManager.d.ts.map +1 -1
- package/lib/UIManager.js +4 -3
- package/lib/UIManager.js.map +1 -1
- package/lib/isApiServerActive.js +1 -1
- package/lib/isApiServerActive.js.map +1 -1
- package/package.json +3 -3
package/lib/LinkProxyApp.js
CHANGED
|
@@ -49,7 +49,7 @@ export class LinkProxyApp {
|
|
|
49
49
|
});
|
|
50
50
|
isLinkClosed = true;
|
|
51
51
|
}
|
|
52
|
-
catch
|
|
52
|
+
catch {
|
|
53
53
|
// This is also shown momentarily before the cleanup.
|
|
54
54
|
this.ui.updateStatus({ message: `Error notifying link client of host connection ${reason}.`, isError: true });
|
|
55
55
|
}
|
package/lib/LinkProxyApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkProxyApp.js","sourceRoot":"","sources":["../src/LinkProxyApp.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotifyLinkChangeInput, LinkPathInput, GetLinkConfigOutput } from '@ms-cloudpack/api-server/browser';\nimport {\n createCloudpackClient,\n linkUpdateSource,\n linkConfigSource,\n linkPathsSource,\n linkDoneSource,\n linkDisconnectedSource,\n} from '@ms-cloudpack/api-server/browser';\nimport { UIManager } from './UIManager.js';\nimport { ConnectionManager } from './ConnectionManager.js';\nimport { isApiServerActive } from './isApiServerActive.js';\n\n/**\n * Link Proxy application that handles communication between host and link sessions\n */\nexport class LinkProxyApp {\n private ui: UIManager;\n private connectionManager: ConnectionManager;\n private linkedPathData: LinkPathInput | null = null;\n\n constructor() {\n this.ui = new UIManager();\n this.connectionManager = new ConnectionManager();\n }\n\n /**\n * Handle a connection state change\n */\n private handleConnectionChange = async (params: {\n id: string;\n isConnected: boolean;\n wasConnected: boolean;\n }): Promise<void> => {\n const { id, isConnected, wasConnected } = params;\n // Only handle disconnections\n if (wasConnected && !isConnected) {\n if (id === 'host') {\n await this.handleHostDisconnection();\n } else if (id === 'link') {\n await this.handleLinkDisconnection();\n }\n }\n };\n\n /**\n * Handle host disconnection\n */\n private async handleHostDisconnection(options?: { unreachable?: boolean }): Promise<void> {\n const isUnreachable = options?.unreachable ?? false;\n const reason = isUnreachable ? 'unreachable' : 'lost';\n // This is shown momentarily before the cleanup.\n this.ui.updateStatus({\n message: `Connection to host ${reason}. The session will be terminated.`,\n isError: true,\n });\n\n const linkClient = this.connectionManager.getClient('link');\n let isLinkClosed = false;\n if (linkClient) {\n try {\n await linkClient.publishData.mutate({\n ...linkDisconnectedSource,\n data: { reason },\n });\n isLinkClosed = true;\n } catch (err) {\n // This is also shown momentarily before the cleanup.\n this.ui.updateStatus({ message: `Error notifying link client of host connection ${reason}.`, isError: true });\n }\n }\n\n await this.cleanup();\n\n // Generate the appropriate tip based on the situation\n let tip: string;\n if (isUnreachable) {\n tip =\n 'Make sure you have a <code>cloudpack start</code> session running and use the URL from your app to run link with the following command: <code>cloudpack link --remote [URL]</code>';\n } else {\n tip = 'If you did not close the start session terminal, this is a bug. Please report it.';\n // Append additional information about link client notification if needed\n if (!isLinkClosed) {\n tip +=\n ' Link client was not successfully notified of host disconnection. You may need to terminate the link session in the terminal.';\n }\n }\n // This is the message the user will see after the cleanup.\n this.ui.updateStatus({\n message: `Connection to host ${reason}. You can close this page.`,\n tip,\n isError: true,\n });\n }\n\n /**\n * Handle link disconnection\n */\n private async handleLinkDisconnection(): Promise<void> {\n // This is shown momentarily before the cleanup, more information on following messages.\n this.ui.updateStatus({\n message: 'Connection to link client lost. Cleaning up linked paths...',\n isError: true,\n });\n\n const hostClient = this.connectionManager.getClient('host');\n if (hostClient && this.linkedPathData) {\n const { linkedPath } = this.linkedPathData;\n const unlinkedPath = linkedPath.path;\n try {\n await hostClient.unlinkPath.mutate({ linkedPath: { path: unlinkedPath } });\n this.ui.updateStatus({\n message: 'Connection to link client lost. Successfully unlinked paths on host. You can close this page.',\n tip: 'If you did not close the link client terminal. This is a bug. Please report it.',\n });\n } catch (err) {\n this.ui.updateStatus({\n message: 'Connection to link client lost. Failed to unlink paths on host.',\n // TODO: Add unlinking logic for this case\n tip: 'You may need to restart the host application to unlink the paths.',\n isError: true,\n data: err,\n });\n }\n } else {\n this.ui.updateStatus({\n message: 'Cannot clean up: host client or link data not available',\n tip: 'You may need to restart the host application to unlink the paths.',\n isError: true,\n });\n }\n\n await this.cleanup();\n }\n\n /**\n * Set up event handlers and subscriptions\n */\n private setupLinkUpdateHandler(): void {\n const linkClient = this.connectionManager.getClient('link');\n const hostClient = this.connectionManager.getClient('host');\n\n if (!linkClient || !hostClient) return;\n\n // Setup link update handler\n linkClient.onDataChanged.subscribe(linkUpdateSource, {\n onData: (updateData) => {\n this.ui.updateStatus({ message: 'Forwarding package update to the host...', data: updateData });\n\n hostClient.notifyLinkChange\n .mutate(updateData as NotifyLinkChangeInput)\n .then(() => this.ui.updateStatus({ message: 'Cloudpack Link Proxy listening for updates...' }))\n .catch((err) => {\n this.ui.updateStatus({\n message: 'Error forwarding package update to the host. This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n });\n },\n });\n }\n\n /**\n * Handle link path setup and changes\n */\n private async setupLinkPathHandler(): Promise<void> {\n const hostClient = this.connectionManager.getClient('host');\n const linkClient = this.connectionManager.getClient('link');\n if (!linkClient || !hostClient) return;\n\n // Check if the link server has already set up the paths\n if (await linkClient.getData.query(linkPathsSource)) return;\n\n linkClient.onDataChanged.subscribe(linkPathsSource, {\n onData: (setupData) => {\n this.ui.updateStatus({ message: 'Processing link setup...', data: setupData });\n\n // Store the linked path data for potential cleanup\n this.linkedPathData = setupData as LinkPathInput;\n\n void hostClient.linkPath.mutate(this.linkedPathData).then((result) => {\n const { resolveMap, linkedPaths } = result;\n this.ui.updateStatus({ message: 'Sending link setup result back to the link server...', data: result });\n\n void linkClient.publishData\n .mutate({\n ...linkDoneSource,\n data: { resolveMap, linkedPaths },\n })\n .then(() => {\n this.ui.updateStatus({ message: 'Cloudpack Link Proxy listening for updates...' });\n })\n .catch((err) => {\n this.ui.updateStatus({\n message: 'Error sending link setup result back to the link server. Please try to run link again.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n });\n });\n },\n });\n }\n\n /**\n * Set up configuration\n */\n private async setupConfig(): Promise<void> {\n const linkClient = this.connectionManager.getClient('link');\n const hostClient = this.connectionManager.getClient('host');\n\n if (!linkClient || !hostClient) return;\n\n try {\n const config = (await linkClient.getData.query(linkConfigSource)) as GetLinkConfigOutput | undefined;\n\n if (!config) {\n this.ui.updateStatus({ message: 'Fetching host configuration...' });\n\n const hostConfig = await hostClient.getLinkConfig.query();\n this.ui.updateStatus({ message: 'Sending host configuration to the link server...', data: hostConfig });\n\n await linkClient.publishData.mutate({\n ...linkConfigSource,\n data: hostConfig,\n });\n\n this.ui.updateStatus({ message: 'Host configuration sent to the link server.' });\n }\n } catch (err) {\n this.ui.updateStatus({\n message: 'Error setting up configuration. Please try to run link again.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n }\n }\n\n /**\n * Clean up resources\n */\n private async cleanup(): Promise<void> {\n this.connectionManager.stopMonitoring();\n await this.connectionManager.closeAll();\n }\n\n /**\n * Initialize the application\n */\n public async initialize(): Promise<void> {\n this.ui.updateStatus({ message: 'Initializing Cloudpack Link Proxy...' });\n\n try {\n // Validate Cloudpack context\n if (!window.__cloudpack) {\n this.ui.updateStatus({\n message: 'Cloudpack context not found on window.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n });\n throw new Error('Cloudpack not found on window.');\n }\n\n const { pageSessionContext } = window.__cloudpack;\n\n if (!pageSessionContext) {\n this.ui.updateStatus({\n message: 'Session context not found on window.__cloudpack.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: window.__cloudpack,\n });\n throw new Error('Session context not found on window.__cloudpack');\n }\n\n const { apiUrl, hostApiServerUrls } = pageSessionContext;\n\n if (!hostApiServerUrls || hostApiServerUrls.length <= 0) {\n this.ui.updateStatus({\n message: 'No host URL provided.',\n tip: 'This is a bug. Please report it.',\n data: pageSessionContext,\n isError: true,\n });\n return;\n }\n\n // Initialize link client\n const linkClient = await createCloudpackClient({ url: apiUrl });\n this.connectionManager.addClient('link', linkClient);\n\n // Find an active host API server\n let hostUrl: string | undefined;\n for (const url of hostApiServerUrls) {\n this.ui.updateStatus({ message: `Checking host API server at ${url}...` });\n const isActive = await isApiServerActive(url);\n if (isActive) {\n this.ui.updateStatus({ message: `Host API server is active at ${url}.` });\n hostUrl = url;\n break;\n }\n }\n\n if (!hostUrl) {\n await this.handleHostDisconnection({ unreachable: true });\n return;\n }\n\n // Initialize host client\n const hostClient = await createCloudpackClient({ url: hostUrl });\n this.connectionManager.addClient('host', hostClient);\n\n // Display session information\n const linkSessionId = await linkClient.getSessionId.query();\n const hostSessionId = await hostClient.getSessionId.query();\n this.ui.updateStatus({ message: `Link Session: ${linkSessionId}, Host Session: ${hostSessionId}` });\n\n // Set up connection monitoring\n this.connectionManager.startMonitoring(this.handleConnectionChange);\n\n // Set up event handlers and configuration\n this.setupLinkUpdateHandler();\n await this.setupLinkPathHandler();\n await this.setupConfig();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n this.ui.updateStatus({\n message: errorMessage,\n isError: true,\n tip: 'This is a bug. Please report it.',\n data: err,\n });\n await this.cleanup();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"LinkProxyApp.js","sourceRoot":"","sources":["../src/LinkProxyApp.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotifyLinkChangeInput, LinkPathInput, GetLinkConfigOutput } from '@ms-cloudpack/api-server/browser';\nimport {\n createCloudpackClient,\n linkUpdateSource,\n linkConfigSource,\n linkPathsSource,\n linkDoneSource,\n linkDisconnectedSource,\n} from '@ms-cloudpack/api-server/browser';\nimport { UIManager } from './UIManager.js';\nimport { ConnectionManager } from './ConnectionManager.js';\nimport { isApiServerActive } from './isApiServerActive.js';\n\n/**\n * Link Proxy application that handles communication between host and link sessions\n */\nexport class LinkProxyApp {\n private ui: UIManager;\n private connectionManager: ConnectionManager;\n private linkedPathData: LinkPathInput | null = null;\n\n constructor() {\n this.ui = new UIManager();\n this.connectionManager = new ConnectionManager();\n }\n\n /**\n * Handle a connection state change\n */\n private handleConnectionChange = async (params: {\n id: string;\n isConnected: boolean;\n wasConnected: boolean;\n }): Promise<void> => {\n const { id, isConnected, wasConnected } = params;\n // Only handle disconnections\n if (wasConnected && !isConnected) {\n if (id === 'host') {\n await this.handleHostDisconnection();\n } else if (id === 'link') {\n await this.handleLinkDisconnection();\n }\n }\n };\n\n /**\n * Handle host disconnection\n */\n private async handleHostDisconnection(options?: { unreachable?: boolean }): Promise<void> {\n const isUnreachable = options?.unreachable ?? false;\n const reason = isUnreachable ? 'unreachable' : 'lost';\n // This is shown momentarily before the cleanup.\n this.ui.updateStatus({\n message: `Connection to host ${reason}. The session will be terminated.`,\n isError: true,\n });\n\n const linkClient = this.connectionManager.getClient('link');\n let isLinkClosed = false;\n if (linkClient) {\n try {\n await linkClient.publishData.mutate({\n ...linkDisconnectedSource,\n data: { reason },\n });\n isLinkClosed = true;\n } catch {\n // This is also shown momentarily before the cleanup.\n this.ui.updateStatus({ message: `Error notifying link client of host connection ${reason}.`, isError: true });\n }\n }\n\n await this.cleanup();\n\n // Generate the appropriate tip based on the situation\n let tip: string;\n if (isUnreachable) {\n tip =\n 'Make sure you have a <code>cloudpack start</code> session running and use the URL from your app to run link with the following command: <code>cloudpack link --remote [URL]</code>';\n } else {\n tip = 'If you did not close the start session terminal, this is a bug. Please report it.';\n // Append additional information about link client notification if needed\n if (!isLinkClosed) {\n tip +=\n ' Link client was not successfully notified of host disconnection. You may need to terminate the link session in the terminal.';\n }\n }\n // This is the message the user will see after the cleanup.\n this.ui.updateStatus({\n message: `Connection to host ${reason}. You can close this page.`,\n tip,\n isError: true,\n });\n }\n\n /**\n * Handle link disconnection\n */\n private async handleLinkDisconnection(): Promise<void> {\n // This is shown momentarily before the cleanup, more information on following messages.\n this.ui.updateStatus({\n message: 'Connection to link client lost. Cleaning up linked paths...',\n isError: true,\n });\n\n const hostClient = this.connectionManager.getClient('host');\n if (hostClient && this.linkedPathData) {\n const { linkedPath } = this.linkedPathData;\n const unlinkedPath = linkedPath.path;\n try {\n await hostClient.unlinkPath.mutate({ linkedPath: { path: unlinkedPath } });\n this.ui.updateStatus({\n message: 'Connection to link client lost. Successfully unlinked paths on host. You can close this page.',\n tip: 'If you did not close the link client terminal. This is a bug. Please report it.',\n });\n } catch (err) {\n this.ui.updateStatus({\n message: 'Connection to link client lost. Failed to unlink paths on host.',\n // TODO: Add unlinking logic for this case\n tip: 'You may need to restart the host application to unlink the paths.',\n isError: true,\n data: err,\n });\n }\n } else {\n this.ui.updateStatus({\n message: 'Cannot clean up: host client or link data not available',\n tip: 'You may need to restart the host application to unlink the paths.',\n isError: true,\n });\n }\n\n await this.cleanup();\n }\n\n /**\n * Set up event handlers and subscriptions\n */\n private setupLinkUpdateHandler(): void {\n const linkClient = this.connectionManager.getClient('link');\n const hostClient = this.connectionManager.getClient('host');\n\n if (!linkClient || !hostClient) return;\n\n // Setup link update handler\n linkClient.onDataChanged.subscribe(linkUpdateSource, {\n onData: (updateData) => {\n this.ui.updateStatus({ message: 'Forwarding package update to the host...', data: updateData });\n\n hostClient.notifyLinkChange\n .mutate(updateData as NotifyLinkChangeInput)\n .then(() => this.ui.updateStatus({ message: 'Cloudpack Link Proxy listening for updates...' }))\n .catch((err) => {\n this.ui.updateStatus({\n message: 'Error forwarding package update to the host. This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n });\n },\n });\n }\n\n /**\n * Handle link path setup and changes\n */\n private async setupLinkPathHandler(): Promise<void> {\n const hostClient = this.connectionManager.getClient('host');\n const linkClient = this.connectionManager.getClient('link');\n if (!linkClient || !hostClient) return;\n\n // Check if the link server has already set up the paths\n if (await linkClient.getData.query(linkPathsSource)) return;\n\n linkClient.onDataChanged.subscribe(linkPathsSource, {\n onData: (setupData) => {\n this.ui.updateStatus({ message: 'Processing link setup...', data: setupData });\n\n // Store the linked path data for potential cleanup\n this.linkedPathData = setupData as LinkPathInput;\n\n void hostClient.linkPath.mutate(this.linkedPathData).then((result) => {\n const { resolveMap, linkedPaths } = result;\n this.ui.updateStatus({ message: 'Sending link setup result back to the link server...', data: result });\n\n void linkClient.publishData\n .mutate({\n ...linkDoneSource,\n data: { resolveMap, linkedPaths },\n })\n .then(() => {\n this.ui.updateStatus({ message: 'Cloudpack Link Proxy listening for updates...' });\n })\n .catch((err) => {\n this.ui.updateStatus({\n message: 'Error sending link setup result back to the link server. Please try to run link again.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n });\n });\n },\n });\n }\n\n /**\n * Set up configuration\n */\n private async setupConfig(): Promise<void> {\n const linkClient = this.connectionManager.getClient('link');\n const hostClient = this.connectionManager.getClient('host');\n\n if (!linkClient || !hostClient) return;\n\n try {\n const config = (await linkClient.getData.query(linkConfigSource)) as GetLinkConfigOutput | undefined;\n\n if (!config) {\n this.ui.updateStatus({ message: 'Fetching host configuration...' });\n\n const hostConfig = await hostClient.getLinkConfig.query();\n this.ui.updateStatus({ message: 'Sending host configuration to the link server...', data: hostConfig });\n\n await linkClient.publishData.mutate({\n ...linkConfigSource,\n data: hostConfig,\n });\n\n this.ui.updateStatus({ message: 'Host configuration sent to the link server.' });\n }\n } catch (err) {\n this.ui.updateStatus({\n message: 'Error setting up configuration. Please try to run link again.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: err,\n });\n }\n }\n\n /**\n * Clean up resources\n */\n private async cleanup(): Promise<void> {\n this.connectionManager.stopMonitoring();\n await this.connectionManager.closeAll();\n }\n\n /**\n * Initialize the application\n */\n public async initialize(): Promise<void> {\n this.ui.updateStatus({ message: 'Initializing Cloudpack Link Proxy...' });\n\n try {\n // Validate Cloudpack context\n if (!window.__cloudpack) {\n this.ui.updateStatus({\n message: 'Cloudpack context not found on window.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n });\n throw new Error('Cloudpack not found on window.');\n }\n\n const { pageSessionContext } = window.__cloudpack;\n\n if (!pageSessionContext) {\n this.ui.updateStatus({\n message: 'Session context not found on window.__cloudpack.',\n tip: 'This is a bug. Please report it.',\n isError: true,\n data: window.__cloudpack,\n });\n throw new Error('Session context not found on window.__cloudpack');\n }\n\n const { apiUrl, hostApiServerUrls } = pageSessionContext;\n\n if (!hostApiServerUrls || hostApiServerUrls.length <= 0) {\n this.ui.updateStatus({\n message: 'No host URL provided.',\n tip: 'This is a bug. Please report it.',\n data: pageSessionContext,\n isError: true,\n });\n return;\n }\n\n // Initialize link client\n const linkClient = await createCloudpackClient({ url: apiUrl });\n this.connectionManager.addClient('link', linkClient);\n\n // Find an active host API server\n let hostUrl: string | undefined;\n for (const url of hostApiServerUrls) {\n this.ui.updateStatus({ message: `Checking host API server at ${url}...` });\n const isActive = await isApiServerActive(url);\n if (isActive) {\n this.ui.updateStatus({ message: `Host API server is active at ${url}.` });\n hostUrl = url;\n break;\n }\n }\n\n if (!hostUrl) {\n await this.handleHostDisconnection({ unreachable: true });\n return;\n }\n\n // Initialize host client\n const hostClient = await createCloudpackClient({ url: hostUrl });\n this.connectionManager.addClient('host', hostClient);\n\n // Display session information\n const linkSessionId = await linkClient.getSessionId.query();\n const hostSessionId = await hostClient.getSessionId.query();\n this.ui.updateStatus({ message: `Link Session: ${linkSessionId}, Host Session: ${hostSessionId}` });\n\n // Set up connection monitoring\n this.connectionManager.startMonitoring(this.handleConnectionChange);\n\n // Set up event handlers and configuration\n this.setupLinkUpdateHandler();\n await this.setupLinkPathHandler();\n await this.setupConfig();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n this.ui.updateStatus({\n message: errorMessage,\n isError: true,\n tip: 'This is a bug. Please report it.',\n data: err,\n });\n await this.cleanup();\n }\n }\n}\n"]}
|
package/lib/UIManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIManager.d.ts","sourceRoot":"","sources":["../src/UIManager.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAqB;gBAExB,SAAS,GAAE,MAAe;IAItC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"UIManager.d.ts","sourceRoot":"","sources":["../src/UIManager.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAqB;gBAExB,SAAS,GAAE,MAAe;IAItC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAqBhG"}
|
package/lib/UIManager.js
CHANGED
|
@@ -12,11 +12,12 @@ export class UIManager {
|
|
|
12
12
|
*/
|
|
13
13
|
updateStatus(input) {
|
|
14
14
|
const { message, tip, isError = false, data } = input;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
const method = isError ? 'error' : 'debug';
|
|
16
|
+
if (data) {
|
|
17
|
+
console[method](message, data);
|
|
17
18
|
}
|
|
18
19
|
else {
|
|
19
|
-
|
|
20
|
+
console[method](message);
|
|
20
21
|
}
|
|
21
22
|
if (!this.element)
|
|
22
23
|
return;
|
package/lib/UIManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIManager.js","sourceRoot":"","sources":["../src/UIManager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAqB;IAEpC,YAAY,YAAoB,MAAM;QACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAA2E;QACtF,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAEtD,
|
|
1
|
+
{"version":3,"file":"UIManager.js","sourceRoot":"","sources":["../src/UIManager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAqB;IAEpC,YAAY,YAAoB,MAAM;QACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAA2E;QACtF,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;kBACX,MAAM,CAAC,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;mBACpE,MAAM,CAAC,KAAK;kBACb,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO;QAC/D,GAAG,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,2BAA2B,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;kBAChE,MAAM,CAAC,OAAO;;GAE7B,CAAC;IACF,CAAC;CACF","sourcesContent":["import styles from './UIManager.module.css';\n\n/**\n * UI Manager for handling status display\n */\nexport class UIManager {\n private element: HTMLElement | null;\n\n constructor(elementId: string = 'root') {\n this.element = document.getElementById(elementId);\n }\n\n /**\n * Display a status message to the user\n */\n updateStatus(input: { message: string; tip?: string; isError?: boolean; data?: unknown }): void {\n const { message, tip, isError = false, data } = input;\n\n const method = isError ? 'error' : 'debug';\n if (data) {\n console[method](message, data);\n } else {\n console[method](message);\n }\n\n if (!this.element) return;\n\n this.element.innerHTML = `\n <div class=\"${styles.statusContainer + (isError ? ` ${styles.errorContainer}` : '')}\">\n <h2 class=\"${styles.title}\">Cloudpack Link Proxy</h2>\n <p class=\"${styles.message}\">${isError ? 'Error: ' : ''}${message}</p>\n ${tip ? `<p class=\"${styles.message}\"><strong>Tip:</strong> ${tip}</p>` : ''}\n <p class=\"${styles.warning}\">Do not close this page while Cloudpack link is running.</p>\n </div>\n `;\n }\n}\n"]}
|
package/lib/isApiServerActive.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isApiServerActive.js","sourceRoot":"","sources":["../src/isApiServerActive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,
|
|
1
|
+
{"version":3,"file":"isApiServerActive.js","sourceRoot":"","sources":["../src/isApiServerActive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { createCloudpackClient } from '@ms-cloudpack/api-server/browser';\n\n/**\n * Check if an API server is active at the given URL\n */\nexport async function isApiServerActive(url: string): Promise<boolean> {\n console.debug(`[Cloudpack] Checking session at ${url}`);\n\n const client = await createCloudpackClient({ url });\n let isActive = false;\n try {\n isActive = !!(await client.getSessionId.query());\n } catch {\n /* no-op */\n } finally {\n await client.close();\n }\n\n return isActive;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/link-proxy",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"description": "A proxy to connect link clients.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"prepack": "cp .npmignore dist/.npmignore"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@ms-cloudpack/api-server": "^0.64.
|
|
27
|
-
"@ms-cloudpack/common-types-browser": "^0.6.
|
|
26
|
+
"@ms-cloudpack/api-server": "^0.64.1",
|
|
27
|
+
"@ms-cloudpack/common-types-browser": "^0.6.2",
|
|
28
28
|
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|
|
29
29
|
"@ms-cloudpack/scripts": "^0.0.1"
|
|
30
30
|
},
|