@ms-cloudpack/overlay 0.16.113 → 0.17.0

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.
Files changed (42) hide show
  1. package/dist/browser-esm/lib/index.js +113 -204
  2. package/dist/browser-esm/lib/index.js.map +4 -4
  3. package/dist/browser-esm/ori-output.json +81 -95
  4. package/dist/browser-esm/result.json +10 -10
  5. package/lib/components/CloudpackProvider/CloudpackProvider.d.ts +3 -2
  6. package/lib/components/CloudpackProvider/CloudpackProvider.d.ts.map +1 -1
  7. package/lib/components/CloudpackProvider/CloudpackProvider.js +2 -4
  8. package/lib/components/CloudpackProvider/CloudpackProvider.js.map +1 -1
  9. package/lib/components/CloudpackProvider/useStatus.d.ts.map +1 -1
  10. package/lib/components/CloudpackProvider/useStatus.js +12 -3
  11. package/lib/components/CloudpackProvider/useStatus.js.map +1 -1
  12. package/lib/components/CloudpackProvider/useStatusDetails.d.ts +52 -16
  13. package/lib/components/CloudpackProvider/useStatusDetails.d.ts.map +1 -1
  14. package/lib/components/CloudpackProvider/useStatusDetails.js +11 -2
  15. package/lib/components/CloudpackProvider/useStatusDetails.js.map +1 -1
  16. package/lib/components/ErrorDialog/ErrorDialog.js +1 -1
  17. package/lib/components/ErrorDialog/ErrorDialog.js.map +1 -1
  18. package/lib/components/ErrorDialog/PathError.js +2 -2
  19. package/lib/components/ErrorDialog/PathError.js.map +1 -1
  20. package/lib/components/ErrorDialog/useErrorEvents.js +1 -1
  21. package/lib/components/ErrorDialog/useErrorEvents.js.map +1 -1
  22. package/lib/components/StatusDialog/StatusDialog.js +1 -1
  23. package/lib/components/StatusDialog/StatusDialog.js.map +1 -1
  24. package/lib/components/StatusDialog/TaskList.d.ts.map +1 -1
  25. package/lib/components/StatusDialog/TaskList.js +10 -1
  26. package/lib/components/StatusDialog/TaskList.js.map +1 -1
  27. package/lib/components/StatusDialog/TaskResultItem.js +2 -2
  28. package/lib/components/StatusDialog/TaskResultItem.js.map +1 -1
  29. package/lib/components/StatusDialog/TaskStatus.d.ts +2 -2
  30. package/lib/components/StatusDialog/TaskStatus.d.ts.map +1 -1
  31. package/lib/components/StatusDialog/TaskStatus.js +39 -28
  32. package/lib/components/StatusDialog/TaskStatus.js.map +1 -1
  33. package/lib/hooks/usePageLoadTimeReporter.js +2 -2
  34. package/lib/hooks/usePageLoadTimeReporter.js.map +1 -1
  35. package/lib/index.js +27 -7
  36. package/lib/index.js.map +1 -1
  37. package/package.json +4 -6
  38. package/lib/components/CloudpackProvider/createCloudpackClient.d.ts +0 -27
  39. package/lib/components/CloudpackProvider/createCloudpackClient.d.ts.map +0 -1
  40. package/lib/components/CloudpackProvider/createCloudpackClient.js +0 -163
  41. package/lib/components/CloudpackProvider/createCloudpackClient.js.map +0 -1
  42. /package/dist/ori/logs/{2g8DL8XvNNiSPBsWRhfIm0Mk1wF-logger.log → 2gDrbKHv6HJdsrJbtR1hpUGJy8u-logger.log} +0 -0
@@ -1,163 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { getCookies } from './getCookies.js';
3
- import { createDataBus } from '@ms-cloudpack/data-bus';
4
- import { cookieNames } from '../../constants.js';
5
- export function createCloudpackClient() {
6
- const cookies = getCookies();
7
- const bus = createDataBus();
8
- let subCounter = 0;
9
- const subIds = {};
10
- bus.addProvider({
11
- path: [],
12
- onActivate: ({ path }) => {
13
- const id = subCounter++;
14
- subIds[path.join('/')] = id;
15
- sendMessage({ type: 'subscribe', data: { path, id } });
16
- },
17
- onDeactivate: ({ path }) => {
18
- const pathString = path.join('/');
19
- const id = subIds[pathString];
20
- delete subIds[pathString];
21
- sendMessage({ type: 'unsubscribe', data: { path, id } });
22
- },
23
- });
24
- const enqueuedMessages = [];
25
- const sessionId = cookies[cookieNames.sessionId];
26
- const apiUrl = cookies[cookieNames.apiUrl];
27
- const currentSequence = cookies[cookieNames.sessionSequence];
28
- let socket;
29
- let idCount = 0;
30
- /**
31
- * Attempts to open the websocket connection.
32
- */
33
- function openConnection() {
34
- if (apiUrl && sessionId) {
35
- const newSocket = new WebSocket(apiUrl);
36
- newSocket.onopen = () => {
37
- console.log('socket opened');
38
- socket = newSocket;
39
- socket.onmessage = onMessageReceived;
40
- socket.onclose = () => {
41
- socket = undefined;
42
- };
43
- // Initialize any pending subscriptions.
44
- for (const message of enqueuedMessages) {
45
- socket.send(message);
46
- }
47
- enqueuedMessages.length = 0;
48
- };
49
- }
50
- }
51
- /**
52
- * Sends a message to the websocket.
53
- */
54
- function sendMessage(options) {
55
- const { type, requestId, data } = options;
56
- const message = JSON.stringify({ type, requestId, data });
57
- if (socket) {
58
- socket.send(message);
59
- }
60
- else {
61
- enqueuedMessages.push(message);
62
- }
63
- }
64
- const activeRequests = {};
65
- /**
66
- * Sends a request to the websocket and returns a promise that resolves when the response is received.
67
- */
68
- function sendRequest(options) {
69
- const { type, data } = options;
70
- const requestId = `${idCount++}`;
71
- return new Promise((resolve, reject) => {
72
- const timeoutId = setTimeout(() => {
73
- if (activeRequests[requestId]) {
74
- reject(new Error('Request timed out.'));
75
- }
76
- }, 10000);
77
- activeRequests[requestId] = {
78
- resolve: (resultData) => {
79
- delete activeRequests[requestId];
80
- clearTimeout(timeoutId);
81
- resolve(resultData);
82
- },
83
- reject: (error) => {
84
- delete activeRequests[requestId];
85
- clearTimeout(timeoutId);
86
- reject(error);
87
- },
88
- };
89
- sendMessage({ type, requestId, data });
90
- });
91
- }
92
- /**
93
- * Receives a message from the websocket and calls the appropriate callback.
94
- */
95
- function onMessageReceived(message) {
96
- const response = JSON.parse(message.data);
97
- const requestId = response.requestId;
98
- if (requestId !== undefined) {
99
- activeRequests[requestId].resolve(response.data);
100
- return;
101
- }
102
- switch (response.type) {
103
- case 'notify': {
104
- const { path, data } = response;
105
- bus.publish(path, data);
106
- break;
107
- }
108
- case 'reload': {
109
- window.location.reload();
110
- break;
111
- }
112
- case 'sequence': {
113
- const { sequence } = response;
114
- if (Number(sequence) > Number(currentSequence)) {
115
- window.location.reload();
116
- }
117
- break;
118
- }
119
- }
120
- }
121
- // Start the connection.
122
- openConnection();
123
- // Return the public API.
124
- const client = {
125
- dispose: () => {
126
- socket?.close();
127
- socket = undefined;
128
- },
129
- getValue: (path) => {
130
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
131
- return bus.getData(path);
132
- },
133
- open: (options) => {
134
- sendMessage({ type: 'open', data: options });
135
- },
136
- openSource: (options) => {
137
- sendMessage({ type: 'openSource', data: options });
138
- },
139
- subscribe: (path, callback) => {
140
- return bus.subscribe(path, callback);
141
- },
142
- editConfig: () => {
143
- sendMessage({ type: 'editConfig', data: {} });
144
- },
145
- addOverride: (options) => {
146
- sendMessage({ type: 'addOverride', data: options });
147
- },
148
- restartTask: (options) => {
149
- sendMessage({ type: 'restartTask', data: options });
150
- },
151
- restartAllTasks: () => {
152
- sendMessage({ type: 'restartAllTasks', data: {} });
153
- },
154
- validateOverride: (options) => {
155
- return sendRequest({ type: 'validateOverride', data: options });
156
- },
157
- reportMetric: (options) => {
158
- sendMessage({ type: 'reportMetric', data: options });
159
- },
160
- };
161
- return client;
162
- }
163
- //# sourceMappingURL=createCloudpackClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCloudpackClient.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus, type DataBusPath } from '@ms-cloudpack/data-bus';\nimport type {\n AddPackageOverrideInput,\n OpenCodeEditorInput,\n OpenFilePathInput,\n ReportMetricInput,\n ValidatePackageOverrideInput,\n ValidatePackageOverrideOutput,\n} from '@ms-cloudpack/api-server/browser';\nimport type { z } from 'zod';\nimport { cookieNames } from '../../constants.js';\n\nexport interface CloudpackClient {\n /**\n * Closes the websocket connection.\n */\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n /**\n * Creates a subscription to the given path.\n */\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: OpenCodeEditorInput): void;\n open(options: OpenFilePathInput): void;\n editConfig(): void;\n addOverride(options: AddPackageOverrideInput): void;\n validateOverride(options: ValidatePackageOverrideInput): Promise<ValidatePackageOverrideOutput>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: ReportMetricInput): void;\n}\n\nexport function createCloudpackClient(): CloudpackClient {\n const cookies = getCookies();\n const bus = createDataBus();\n let subCounter = 0;\n const subIds: Record<string, number> = {};\n\n bus.addProvider({\n path: [],\n onActivate: ({ path }) => {\n const id = subCounter++;\n subIds[path.join('/')] = id;\n sendMessage({ type: 'subscribe', data: { path, id } });\n },\n\n onDeactivate: ({ path }) => {\n const pathString = path.join('/');\n const id = subIds[pathString];\n delete subIds[pathString];\n sendMessage({ type: 'unsubscribe', data: { path, id } });\n },\n });\n\n const enqueuedMessages: string[] = [];\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n let socket: WebSocket | undefined;\n let idCount = 0;\n\n /**\n * Attempts to open the websocket connection.\n */\n function openConnection() {\n if (apiUrl && sessionId) {\n const newSocket = new WebSocket(apiUrl);\n\n newSocket.onopen = () => {\n console.log('socket opened');\n socket = newSocket;\n socket.onmessage = onMessageReceived;\n socket.onclose = () => {\n socket = undefined;\n };\n\n // Initialize any pending subscriptions.\n for (const message of enqueuedMessages) {\n socket.send(message);\n }\n enqueuedMessages.length = 0;\n };\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage(options: { type: string; requestId?: string; data: unknown }) {\n const { type, requestId, data } = options;\n const message = JSON.stringify({ type, requestId, data });\n if (socket) {\n socket.send(message);\n } else {\n enqueuedMessages.push(message);\n }\n }\n\n const activeRequests: Record<\n string,\n {\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n }\n > = {};\n\n /**\n * Sends a request to the websocket and returns a promise that resolves when the response is received.\n */\n function sendRequest(options: { type: string; data: unknown }) {\n const { type, data } = options;\n const requestId = `${idCount++}`;\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (activeRequests[requestId]) {\n reject(new Error('Request timed out.'));\n }\n }, 10000);\n\n activeRequests[requestId] = {\n resolve: (resultData) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(resultData);\n },\n reject: (error) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n reject(error);\n },\n };\n\n sendMessage({ type, requestId, data });\n });\n }\n\n /**\n * Receives a message from the websocket and calls the appropriate callback.\n */\n function onMessageReceived(message: { data: string }) {\n const response = JSON.parse(message.data) as Record<string, unknown>;\n const requestId = response.requestId as string | undefined;\n\n if (requestId !== undefined) {\n activeRequests[requestId].resolve(response.data);\n return;\n }\n\n switch (response.type) {\n case 'notify': {\n const { path, data } = response;\n\n bus.publish(path as string[], data);\n break;\n }\n\n case 'reload': {\n window.location.reload();\n break;\n }\n\n case 'sequence': {\n const { sequence } = response;\n if (Number(sequence) > Number(currentSequence)) {\n window.location.reload();\n }\n break;\n }\n }\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n const client: CloudpackClient = {\n dispose: () => {\n socket?.close();\n socket = undefined;\n },\n getValue: (path) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n },\n open: (options) => {\n sendMessage({ type: 'open', data: options });\n },\n openSource: (options) => {\n sendMessage({ type: 'openSource', data: options });\n },\n subscribe: (path, callback) => {\n return bus.subscribe(path, callback);\n },\n editConfig: () => {\n sendMessage({ type: 'editConfig', data: {} });\n },\n addOverride: (options) => {\n sendMessage({ type: 'addOverride', data: options });\n },\n restartTask: (options) => {\n sendMessage({ type: 'restartTask', data: options });\n },\n restartAllTasks: () => {\n sendMessage({ type: 'restartAllTasks', data: {} });\n },\n validateOverride: (options) => {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n },\n reportMetric: (options) => {\n sendMessage({ type: 'reportMetric', data: options });\n },\n };\n\n return client;\n}\n"]}