@schoolpalm/message-bridge 1.2.0 → 1.4.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.
- package/dist/bridgeBase.d.ts +8 -13
- package/dist/bridgeBase.d.ts.map +1 -1
- package/dist/bridgeBase.js +41 -27
- package/dist/bridgeBase.js.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -0
- package/dist/hostBridge.d.ts +24 -6
- package/dist/hostBridge.d.ts.map +1 -1
- package/dist/hostBridge.js +134 -24
- package/dist/hostBridge.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -0
- package/dist/messageTypes.d.ts +54 -15
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js +81 -16
- package/dist/messageTypes.js.map +1 -1
- package/dist/moduleBridge.d.ts +19 -10
- package/dist/moduleBridge.d.ts.map +1 -1
- package/dist/moduleBridge.js +92 -21
- package/dist/moduleBridge.js.map +1 -1
- package/dist/payloadSchemas.d.ts +71 -36
- package/dist/payloadSchemas.d.ts.map +1 -1
- package/dist/payloadSchemas.js +2 -1
- package/dist/payloadSchemas.js.map +1 -1
- package/dist/protocol.d.ts +8 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +10 -0
- package/dist/protocol.js.map +1 -0
- package/package.json +1 -1
package/dist/bridgeBase.d.ts
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
import { MessageType } from './messageTypes';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
type MessageHandler<T
|
|
5
|
-
/**
|
|
6
|
-
* Base class for Host and Module bridges.
|
|
7
|
-
*
|
|
8
|
-
* Handles sending, receiving, and dispatching messages via postMessage,
|
|
9
|
-
* with type-safe payloads, origin validation, and optional request/response support.
|
|
10
|
-
*/
|
|
2
|
+
import { MessagePayloadMap } from './payloadSchemas';
|
|
3
|
+
import { RequestPayload } from './payloadSchemas';
|
|
4
|
+
type MessageHandler<T = any> = (payload: T) => void;
|
|
11
5
|
export declare class BridgeBase {
|
|
12
6
|
protected targetWindow: Window;
|
|
13
7
|
protected targetOrigin: string;
|
|
14
8
|
private listeners;
|
|
15
9
|
private pendingRequests;
|
|
10
|
+
private boundHandler;
|
|
16
11
|
constructor(targetWindow: Window, targetOrigin?: string);
|
|
17
|
-
send<T extends
|
|
18
|
-
request<
|
|
19
|
-
on<T extends
|
|
20
|
-
protected
|
|
12
|
+
send<T extends keyof MessagePayloadMap | string>(type: T, payload?: T extends keyof MessagePayloadMap ? MessagePayloadMap[T] : any): void;
|
|
13
|
+
request<R = any>(type: MessageType, payload: RequestPayload, timeout?: number): Promise<R>;
|
|
14
|
+
on<T extends keyof MessagePayloadMap | string>(type: T, callback: MessageHandler<T extends keyof MessagePayloadMap ? MessagePayloadMap[T] : any>): void;
|
|
15
|
+
protected handleMessage(event: MessageEvent): void;
|
|
21
16
|
destroy(): void;
|
|
22
17
|
}
|
|
23
18
|
export {};
|
package/dist/bridgeBase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeBase.d.ts","sourceRoot":"","sources":["../src/bridgeBase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridgeBase.d.ts","sourceRoot":"","sources":["../src/bridgeBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAA;AAElE,KAAK,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnD,qBAAa,UAAU;IACrB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAA;IAE9B,OAAO,CAAC,SAAS,CAAqE;IACtF,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,YAAY,CAA+B;gBAEvC,YAAY,EAAE,MAAM,EAAE,YAAY,GAAE,MAAY;IAW5D,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG;IAOlI,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBxF,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAQhJ,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY;IA+B3C,OAAO;CAKR"}
|
package/dist/bridgeBase.js
CHANGED
|
@@ -1,67 +1,81 @@
|
|
|
1
|
-
// src/bridgeBase.ts
|
|
2
1
|
import { MessageType } from './messageTypes';
|
|
3
|
-
/**
|
|
4
|
-
* Base class for Host and Module bridges.
|
|
5
|
-
*
|
|
6
|
-
* Handles sending, receiving, and dispatching messages via postMessage,
|
|
7
|
-
* with type-safe payloads, origin validation, and optional request/response support.
|
|
8
|
-
*/
|
|
9
2
|
export class BridgeBase {
|
|
10
3
|
constructor(targetWindow, targetOrigin = '*') {
|
|
11
4
|
this.listeners = new Map();
|
|
12
5
|
this.pendingRequests = new Map();
|
|
13
6
|
this.targetWindow = targetWindow;
|
|
14
7
|
this.targetOrigin = targetOrigin;
|
|
15
|
-
|
|
8
|
+
this.boundHandler = this.handleMessage.bind(this);
|
|
9
|
+
window.addEventListener('message', this.boundHandler);
|
|
16
10
|
}
|
|
17
|
-
//
|
|
11
|
+
// --------------------
|
|
12
|
+
// Send message (typed)
|
|
13
|
+
// --------------------
|
|
18
14
|
send(type, payload) {
|
|
19
15
|
this.targetWindow.postMessage({ type, payload }, this.targetOrigin);
|
|
20
16
|
}
|
|
21
|
-
//
|
|
17
|
+
// --------------------
|
|
18
|
+
// Request / Response (async)
|
|
19
|
+
// --------------------
|
|
22
20
|
request(type, payload, timeout = 5000) {
|
|
23
21
|
return new Promise((resolve, reject) => {
|
|
24
|
-
const requestId =
|
|
25
|
-
this.pendingRequests.set(requestId,
|
|
26
|
-
|
|
22
|
+
const requestId = payload.requestId;
|
|
23
|
+
this.pendingRequests.set(requestId, (response) => {
|
|
24
|
+
if (response.status === 'error')
|
|
25
|
+
reject(new Error(response.error ?? 'Unknown error'));
|
|
26
|
+
else
|
|
27
|
+
resolve(response.payload);
|
|
28
|
+
});
|
|
29
|
+
this.send(type, payload);
|
|
27
30
|
setTimeout(() => {
|
|
28
31
|
if (this.pendingRequests.has(requestId)) {
|
|
29
32
|
this.pendingRequests.delete(requestId);
|
|
30
|
-
reject(new Error(`Request ${type} timed out`));
|
|
33
|
+
reject(new Error(`Request ${payload.type} timed out`));
|
|
31
34
|
}
|
|
32
35
|
}, timeout);
|
|
33
36
|
});
|
|
34
37
|
}
|
|
35
|
-
//
|
|
38
|
+
// --------------------
|
|
39
|
+
// Listen to message
|
|
40
|
+
// --------------------
|
|
36
41
|
on(type, callback) {
|
|
37
42
|
if (!this.listeners.has(type))
|
|
38
43
|
this.listeners.set(type, []);
|
|
39
|
-
this.listeners.get(type)
|
|
44
|
+
this.listeners.get(type).push(callback);
|
|
40
45
|
}
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
// --------------------
|
|
47
|
+
// Dispatcher
|
|
48
|
+
// --------------------
|
|
49
|
+
handleMessage(event) {
|
|
43
50
|
if (this.targetOrigin !== '*' && event.origin !== this.targetOrigin)
|
|
44
51
|
return;
|
|
45
52
|
const { type, payload } = event.data || {};
|
|
46
53
|
if (!type)
|
|
47
54
|
return;
|
|
48
55
|
// Handle DATA_RESPONSE automatically
|
|
49
|
-
if (type === MessageType.DATA_RESPONSE
|
|
50
|
-
const
|
|
56
|
+
if (type === MessageType.DATA_RESPONSE) {
|
|
57
|
+
const response = payload;
|
|
58
|
+
const resolver = this.pendingRequests.get(response.requestId);
|
|
51
59
|
if (resolver) {
|
|
52
|
-
resolver(
|
|
53
|
-
this.pendingRequests.delete(
|
|
60
|
+
resolver(response);
|
|
61
|
+
this.pendingRequests.delete(response.requestId);
|
|
54
62
|
return;
|
|
55
63
|
}
|
|
56
64
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
65
|
+
// Call all registered listeners
|
|
66
|
+
const handlers = this.listeners.get(type);
|
|
67
|
+
handlers?.forEach(cb => cb(payload));
|
|
68
|
+
// Optional: handle CUSTOM messages
|
|
69
|
+
if (type.startsWith(MessageType.CUSTOM_PREFIX)) {
|
|
70
|
+
const customHandlers = this.listeners.get(type);
|
|
71
|
+
customHandlers?.forEach(cb => cb(payload));
|
|
60
72
|
}
|
|
61
73
|
}
|
|
62
|
-
//
|
|
74
|
+
// --------------------
|
|
75
|
+
// Cleanup
|
|
76
|
+
// --------------------
|
|
63
77
|
destroy() {
|
|
64
|
-
window.removeEventListener('message', this.
|
|
78
|
+
window.removeEventListener('message', this.boundHandler);
|
|
65
79
|
this.listeners.clear();
|
|
66
80
|
this.pendingRequests.clear();
|
|
67
81
|
}
|
package/dist/bridgeBase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeBase.js","sourceRoot":"","sources":["../src/bridgeBase.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"bridgeBase.js","sourceRoot":"","sources":["../src/bridgeBase.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;IACA,IAAI,EAAE,MAAM;gBAApC,OAAO,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAGjD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAS,IAAY;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAQ;IAEhD,CAAC;CACF"}
|
package/dist/hostBridge.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { BridgeBase } from './bridgeBase';
|
|
2
2
|
import { ModuleStartPayload, UIUpdatePayload, ErrorPayload, ModuleContextPayload, HandshakeReadyPayload } from './payloadSchemas';
|
|
3
|
-
/**
|
|
4
|
-
* HostBridge: communication from Host → Module iframe
|
|
5
|
-
*/
|
|
6
3
|
export declare class HostBridge extends BridgeBase {
|
|
4
|
+
private handshakeCompleted;
|
|
5
|
+
private handshakePayload;
|
|
6
|
+
private pendingStartPayload;
|
|
7
|
+
private heartbeatTimer?;
|
|
8
|
+
private lastHeartbeat;
|
|
7
9
|
constructor(iframe: HTMLIFrameElement, targetOrigin?: string);
|
|
8
10
|
onHandshakeReady(callback: (payload: HandshakeReadyPayload) => void): void;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
startHeartbeat(interval?: number): void;
|
|
12
|
+
stopHeartbeat(): void;
|
|
13
|
+
listenHeartbeat(timeout?: number): void;
|
|
12
14
|
startModule(payload: ModuleStartPayload, timeout?: number): void;
|
|
13
15
|
sendModuleStart(payload: ModuleStartPayload): void;
|
|
14
16
|
sendModuleExit(reason?: string): void;
|
|
@@ -16,5 +18,21 @@ export declare class HostBridge extends BridgeBase {
|
|
|
16
18
|
onError(callback: (payload: ErrorPayload) => void): void;
|
|
17
19
|
sendContextUpdate(payload: ModuleContextPayload): void;
|
|
18
20
|
requestData<T = any, R = any>(type: string, payload?: T, timeout?: number): Promise<R>;
|
|
21
|
+
loadPage(component: string, params?: Record<string, any>): void;
|
|
22
|
+
navigateBack(): void;
|
|
23
|
+
navigateForward(): void;
|
|
24
|
+
setBreadcrumb(breadcrumb: string[]): void;
|
|
25
|
+
showLoader(): void;
|
|
26
|
+
hideLoader(): void;
|
|
27
|
+
notify(message: string, type?: 'info' | 'success' | 'warning' | 'error'): void;
|
|
28
|
+
dialog(title: string, message: string): void;
|
|
29
|
+
confirm(title: string, message: string): void;
|
|
30
|
+
pauseModule(): void;
|
|
31
|
+
resumeModule(): void;
|
|
32
|
+
updatePermissions(permissions: string[]): void;
|
|
33
|
+
toggleFeatures(features: Record<string, boolean>): void;
|
|
34
|
+
preloadResources(resources: string[]): void;
|
|
35
|
+
notifyResourceLoaded(resource: string): void;
|
|
36
|
+
reset(): void;
|
|
19
37
|
}
|
|
20
38
|
//# sourceMappingURL=hostBridge.d.ts.map
|
package/dist/hostBridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostBridge.d.ts","sourceRoot":"","sources":["../src/hostBridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hostBridge.d.ts","sourceRoot":"","sources":["../src/hostBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EACL,kBAAkB,EAElB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EAWtB,MAAM,kBAAkB,CAAA;AAGzB,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,mBAAmB,CAAkC;IAE7D,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,aAAa,CAAa;gBAEtB,MAAM,EAAE,iBAAiB,EAAE,YAAY,GAAE,MAAY;IAQjE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI;IA0BnE,cAAc,CAAC,QAAQ,SAAO;IAO9B,aAAa;IAOb,eAAe,CAAC,OAAO,SAAQ;IAgB/B,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,SAAO;IAYvD,eAAe,CAAC,OAAO,EAAE,kBAAkB;IAI3C,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM;IAO9B,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI;IAIvD,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI;IAIjD,iBAAiB,CAAC,OAAO,EAAE,oBAAoB;IAO/C,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAYpF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAKxD,YAAY;IAIZ,eAAe;IAIf,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE;IAKlC,UAAU;IAIV,UAAU;IAIV,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAgB;IAK/E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKrC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKtC,WAAW;IAIX,YAAY;IAIZ,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE;IAKvC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKhD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE;IAKpC,oBAAoB,CAAC,QAAQ,EAAE,MAAM;IAQrC,KAAK;CAKN"}
|
package/dist/hostBridge.js
CHANGED
|
@@ -1,58 +1,168 @@
|
|
|
1
|
-
// src/hostBridge.ts
|
|
2
1
|
import { BridgeBase } from './bridgeBase';
|
|
3
2
|
import { MessageType } from './messageTypes';
|
|
4
|
-
|
|
5
|
-
* HostBridge: communication from Host → Module iframe
|
|
6
|
-
*/
|
|
3
|
+
import { PROTOCOL_VERSION } from './protocol';
|
|
7
4
|
export class HostBridge extends BridgeBase {
|
|
8
5
|
constructor(iframe, targetOrigin = '*') {
|
|
9
|
-
if (!iframe.contentWindow)
|
|
6
|
+
if (!iframe.contentWindow)
|
|
10
7
|
throw new Error('Iframe has no contentWindow');
|
|
11
|
-
}
|
|
12
8
|
super(iframe.contentWindow, targetOrigin);
|
|
9
|
+
this.handshakeCompleted = false;
|
|
10
|
+
this.handshakePayload = null;
|
|
11
|
+
this.pendingStartPayload = null;
|
|
12
|
+
this.lastHeartbeat = Date.now();
|
|
13
13
|
}
|
|
14
|
-
//
|
|
14
|
+
// --------------------
|
|
15
|
+
// Handshake
|
|
16
|
+
// --------------------
|
|
15
17
|
onHandshakeReady(callback) {
|
|
16
|
-
this.
|
|
18
|
+
if (this.handshakeCompleted && this.handshakePayload) {
|
|
19
|
+
callback(this.handshakePayload);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
this.on(MessageType.HANDSHAKE_READY, payload => {
|
|
23
|
+
if (payload.version !== PROTOCOL_VERSION) {
|
|
24
|
+
console.warn(`Protocol mismatch: host=${PROTOCOL_VERSION}, module=${payload.version}`);
|
|
25
|
+
}
|
|
26
|
+
this.handshakeCompleted = true;
|
|
27
|
+
this.handshakePayload = payload;
|
|
28
|
+
callback(payload);
|
|
29
|
+
if (this.pendingStartPayload) {
|
|
30
|
+
this.sendModuleStart(this.pendingStartPayload);
|
|
31
|
+
this.pendingStartPayload = null;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
17
34
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
35
|
+
// --------------------
|
|
36
|
+
// Heartbeat
|
|
37
|
+
// --------------------
|
|
38
|
+
startHeartbeat(interval = 5000) {
|
|
39
|
+
this.stopHeartbeat();
|
|
40
|
+
this.heartbeatTimer = window.setInterval(() => {
|
|
41
|
+
this.send(MessageType.HEARTBEAT, { timestamp: Date.now() });
|
|
42
|
+
}, interval);
|
|
43
|
+
}
|
|
44
|
+
stopHeartbeat() {
|
|
45
|
+
if (this.heartbeatTimer) {
|
|
46
|
+
clearInterval(this.heartbeatTimer);
|
|
47
|
+
this.heartbeatTimer = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
listenHeartbeat(timeout = 15000) {
|
|
51
|
+
this.on(MessageType.HEARTBEAT, () => {
|
|
52
|
+
this.lastHeartbeat = Date.now();
|
|
53
|
+
});
|
|
54
|
+
setInterval(() => {
|
|
55
|
+
if (Date.now() - this.lastHeartbeat > timeout) {
|
|
56
|
+
console.error('Module heartbeat lost');
|
|
57
|
+
this.sendModuleExit('heartbeat-timeout');
|
|
58
|
+
}
|
|
24
59
|
}, timeout);
|
|
25
|
-
|
|
26
|
-
|
|
60
|
+
}
|
|
61
|
+
// --------------------
|
|
62
|
+
// Module Start / Exit
|
|
63
|
+
// --------------------
|
|
64
|
+
startModule(payload, timeout = 5000) {
|
|
65
|
+
if (this.handshakeCompleted) {
|
|
27
66
|
this.sendModuleStart(payload);
|
|
28
|
-
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.pendingStartPayload = payload;
|
|
70
|
+
const timer = setTimeout(() => console.error('Module handshake timeout'), timeout);
|
|
71
|
+
this.onHandshakeReady(() => clearTimeout(timer));
|
|
29
72
|
}
|
|
30
|
-
// ---------- Module control ----------
|
|
31
73
|
sendModuleStart(payload) {
|
|
32
74
|
this.send(MessageType.MODULE_START, payload);
|
|
33
75
|
}
|
|
34
76
|
sendModuleExit(reason) {
|
|
35
77
|
this.send(MessageType.MODULE_EXIT, { reason });
|
|
36
78
|
}
|
|
37
|
-
//
|
|
79
|
+
// --------------------
|
|
80
|
+
// UI / Errors
|
|
81
|
+
// --------------------
|
|
38
82
|
onUIUpdate(callback) {
|
|
39
83
|
this.on(MessageType.UI_UPDATE, callback);
|
|
40
84
|
}
|
|
41
85
|
onError(callback) {
|
|
42
86
|
this.on(MessageType.ERROR, callback);
|
|
43
87
|
}
|
|
44
|
-
// ---------- Context / theme sync ----------
|
|
45
88
|
sendContextUpdate(payload) {
|
|
46
89
|
this.send(MessageType.CONTEXT_UPDATE, payload);
|
|
47
90
|
}
|
|
48
|
-
//
|
|
91
|
+
// --------------------
|
|
92
|
+
// Requests
|
|
93
|
+
// --------------------
|
|
49
94
|
requestData(type, payload, timeout = 5000) {
|
|
50
|
-
const
|
|
95
|
+
const request = {
|
|
51
96
|
requestId: crypto.randomUUID(),
|
|
52
97
|
type,
|
|
53
|
-
payload: payload
|
|
98
|
+
payload: payload,
|
|
54
99
|
};
|
|
55
|
-
return this.request(MessageType.DATA_REQUEST,
|
|
100
|
+
return this.request(MessageType.DATA_REQUEST, request, timeout);
|
|
101
|
+
}
|
|
102
|
+
// --------------------
|
|
103
|
+
// Convenience methods for new features
|
|
104
|
+
// --------------------
|
|
105
|
+
loadPage(component, params) {
|
|
106
|
+
const payload = { component, params };
|
|
107
|
+
this.send(MessageType.LOAD_PAGE, payload);
|
|
108
|
+
}
|
|
109
|
+
navigateBack() {
|
|
110
|
+
this.send(MessageType.NAVIGATE_BACK);
|
|
111
|
+
}
|
|
112
|
+
navigateForward() {
|
|
113
|
+
this.send(MessageType.NAVIGATE_FORWARD);
|
|
114
|
+
}
|
|
115
|
+
setBreadcrumb(breadcrumb) {
|
|
116
|
+
const payload = { breadcrumb };
|
|
117
|
+
this.send(MessageType.SET_BREADCRUMB, payload);
|
|
118
|
+
}
|
|
119
|
+
showLoader() {
|
|
120
|
+
this.send(MessageType.SHOW_LOADER);
|
|
121
|
+
}
|
|
122
|
+
hideLoader() {
|
|
123
|
+
this.send(MessageType.HIDE_LOADER);
|
|
124
|
+
}
|
|
125
|
+
notify(message, type = 'info') {
|
|
126
|
+
const payload = { message, type };
|
|
127
|
+
this.send(MessageType.NOTIFICATION, payload);
|
|
128
|
+
}
|
|
129
|
+
dialog(title, message) {
|
|
130
|
+
const payload = { title, message };
|
|
131
|
+
this.send(MessageType.DIALOG, payload);
|
|
132
|
+
}
|
|
133
|
+
confirm(title, message) {
|
|
134
|
+
const payload = { title, message };
|
|
135
|
+
this.send(MessageType.CONFIRM, payload);
|
|
136
|
+
}
|
|
137
|
+
pauseModule() {
|
|
138
|
+
this.send(MessageType.MODULE_PAUSE);
|
|
139
|
+
}
|
|
140
|
+
resumeModule() {
|
|
141
|
+
this.send(MessageType.MODULE_RESUME);
|
|
142
|
+
}
|
|
143
|
+
updatePermissions(permissions) {
|
|
144
|
+
const payload = { permissions };
|
|
145
|
+
this.send(MessageType.PERMISSION_UPDATE, payload);
|
|
146
|
+
}
|
|
147
|
+
toggleFeatures(features) {
|
|
148
|
+
const payload = { features };
|
|
149
|
+
this.send(MessageType.FEATURE_TOGGLE, payload);
|
|
150
|
+
}
|
|
151
|
+
preloadResources(resources) {
|
|
152
|
+
const payload = { resources };
|
|
153
|
+
this.send(MessageType.PRELOAD_RESOURCE, payload);
|
|
154
|
+
}
|
|
155
|
+
notifyResourceLoaded(resource) {
|
|
156
|
+
const payload = { resource };
|
|
157
|
+
this.send(MessageType.RESOURCE_LOADED, payload);
|
|
158
|
+
}
|
|
159
|
+
// --------------------
|
|
160
|
+
// Reset
|
|
161
|
+
// --------------------
|
|
162
|
+
reset() {
|
|
163
|
+
this.handshakeCompleted = false;
|
|
164
|
+
this.handshakePayload = null;
|
|
165
|
+
this.pendingStartPayload = null;
|
|
56
166
|
}
|
|
57
167
|
}
|
|
58
168
|
//# sourceMappingURL=hostBridge.js.map
|
package/dist/hostBridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostBridge.js","sourceRoot":"","sources":["../src/hostBridge.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"hostBridge.js","sourceRoot":"","sources":["../src/hostBridge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```typescript
|
|
12
|
-
* import { HostBridge, ModuleBridge, MessageType } from '@schoolpalm/message-bridge';
|
|
12
|
+
* import { HostBridge, ModuleBridge, MessageType, ProtocolState, PROTOCOL_VERSION } from '@schoolpalm/message-bridge';
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export { BridgeBase } from './bridgeBase';
|
|
16
16
|
export { HostBridge } from './hostBridge';
|
|
17
17
|
export { ModuleBridge } from './moduleBridge';
|
|
18
18
|
export { MessageType } from './messageTypes';
|
|
19
|
+
export { ProtocolState, PROTOCOL_VERSION } from './protocol';
|
|
19
20
|
export * from './payloadSchemas';
|
|
20
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```typescript
|
|
12
|
-
* import { HostBridge, ModuleBridge, MessageType } from '@schoolpalm/message-bridge';
|
|
12
|
+
* import { HostBridge, ModuleBridge, MessageType, ProtocolState, PROTOCOL_VERSION } from '@schoolpalm/message-bridge';
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export { BridgeBase } from './bridgeBase';
|
|
16
16
|
export { HostBridge } from './hostBridge';
|
|
17
17
|
export { ModuleBridge } from './moduleBridge';
|
|
18
18
|
export { MessageType } from './messageTypes';
|
|
19
|
+
export { ProtocolState, PROTOCOL_VERSION } from './protocol'; // ✅ new export
|
|
19
20
|
export * from './payloadSchemas';
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC,CAAC,eAAe;AAC7E,cAAc,kBAAkB,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAGnC,CAAA"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;IACpC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CAAA;AAE7C,CAAC,CAAA"}
|
package/dist/messageTypes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Message type definitions for
|
|
2
|
+
* @fileoverview Message type definitions for Host ↔ Module communication.
|
|
3
3
|
* @module @schoolpalm/message-bridge/messageTypes
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
@@ -9,31 +9,70 @@
|
|
|
9
9
|
* application and embedded modules. Each type indicates the direction and
|
|
10
10
|
* purpose of the message.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* import { MessageType } from '@schoolpalm/message-bridge';
|
|
15
|
-
*
|
|
16
|
-
* // Listen for UI updates from modules
|
|
17
|
-
* bridge.on(MessageType.UI_UPDATE, (payload) => {
|
|
18
|
-
* console.log('UI updated:', payload);
|
|
19
|
-
* });
|
|
20
|
-
* ```
|
|
12
|
+
* ⚡ Future-proof: additional custom messages can be sent via
|
|
13
|
+
* `CUSTOM:<name>` without editing this enum.
|
|
21
14
|
*/
|
|
22
15
|
export declare enum MessageType {
|
|
23
16
|
/** Module → Host: Indicates the module is ready for communication. */
|
|
24
17
|
HANDSHAKE_READY = "handshake:ready",
|
|
18
|
+
/** Module → Host: Indicates the module is ready for communication. */
|
|
19
|
+
MODULE_READY = "module:ready",
|
|
20
|
+
/** Module → Host: Signals the module is unready/destroyed. */
|
|
21
|
+
MODULE_UNREADY = "module:unready",
|
|
22
|
+
/** Host → Module: Signals the module to pause processing. */
|
|
23
|
+
MODULE_PAUSE = "module:pause",
|
|
24
|
+
/** Host → Module: Signals the module to resume processing. */
|
|
25
|
+
MODULE_RESUME = "module:resume",
|
|
25
26
|
/** Host → Module: Signals the module to start with provided context. */
|
|
26
27
|
MODULE_START = "module:start",
|
|
27
|
-
/**
|
|
28
|
-
|
|
28
|
+
/** Host → Module: Signals the module to exit and clean up. */
|
|
29
|
+
MODULE_EXIT = "module:exit",
|
|
29
30
|
/** Module → Host: Requests data from the host. */
|
|
30
31
|
DATA_REQUEST = "data:request",
|
|
31
32
|
/** Host → Module: Responds to a data request. */
|
|
32
33
|
DATA_RESPONSE = "data:response",
|
|
34
|
+
/** Host → Module: Updates module context dynamically. */
|
|
35
|
+
CONTEXT_UPDATE = "context:update",
|
|
36
|
+
/** Module → Host: Requests full host context. */
|
|
37
|
+
CONTEXT_REQUEST = "context:request",
|
|
38
|
+
/** Module → Host: Subscribe to host data changes. */
|
|
39
|
+
DATA_SUBSCRIBE = "data:subscribe",
|
|
40
|
+
/** Module → Host: Unsubscribe from host data changes. */
|
|
41
|
+
DATA_UNSUBSCRIBE = "data:unsubscribe",
|
|
42
|
+
/** Module → Host: Updates the host UI (title, breadcrumb, theme). */
|
|
43
|
+
UI_UPDATE = "ui:update",
|
|
44
|
+
/** Host → Module: Show loader overlay or spinner. */
|
|
45
|
+
SHOW_LOADER = "show:loader",
|
|
46
|
+
/** Host → Module: Hide loader overlay or spinner. */
|
|
47
|
+
HIDE_LOADER = "hide:loader",
|
|
48
|
+
/** Module → Host: Request a toast/notification. */
|
|
49
|
+
NOTIFICATION = "notification",
|
|
50
|
+
/** Module → Host: Request a modal/dialog confirmation. */
|
|
51
|
+
DIALOG = "dialog",
|
|
52
|
+
CONFIRM = "dialog",
|
|
53
|
+
/** Module → Host: Logs messages/warnings for centralized logging. */
|
|
54
|
+
LOG = "log",
|
|
33
55
|
/** Module → Host: Reports an error to the host. */
|
|
34
56
|
ERROR = "error",
|
|
35
|
-
/** Host → Module:
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
/** Host → Module: Load a specific page/component. */
|
|
58
|
+
LOAD_PAGE = "load:page",
|
|
59
|
+
/** Host → Module: Navigate module back in internal history. */
|
|
60
|
+
NAVIGATE_BACK = "navigate:back",
|
|
61
|
+
/** Host → Module: Navigate module forward in internal history. */
|
|
62
|
+
NAVIGATE_FORWARD = "navigate:forward",
|
|
63
|
+
/** Module → Host: Update breadcrumbs in host UI. */
|
|
64
|
+
SET_BREADCRUMB = "set:breadcrumb",
|
|
65
|
+
/** Host → Module: Update allowed actions for module. */
|
|
66
|
+
PERMISSION_UPDATE = "permission:update",
|
|
67
|
+
/** Host → Module: Enable/disable optional features. */
|
|
68
|
+
FEATURE_TOGGLE = "feature:toggle",
|
|
69
|
+
/** Host → Module: Preload additional JS/CSS/images. */
|
|
70
|
+
PRELOAD_RESOURCE = "preload:resource",
|
|
71
|
+
/** Module → Host: Notify that a lazy resource is loaded. */
|
|
72
|
+
RESOURCE_LOADED = "resource:loaded",
|
|
73
|
+
/** Heartbeat for liveliness checks. Can be Module → Host or Host → Module. */
|
|
74
|
+
HEARTBEAT = "heartbeat",
|
|
75
|
+
/** Use this prefix to send custom messages without modifying the core library. */
|
|
76
|
+
CUSTOM_PREFIX = "CUSTOM:"
|
|
38
77
|
}
|
|
39
78
|
//# sourceMappingURL=messageTypes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageTypes.d.ts","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"messageTypes.d.ts","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,oBAAY,WAAW;IAKrB,sEAAsE;IACtE,eAAe,oBAAoB;IAMnC,sEAAsE;IACtE,YAAY,iBAAiB;IAC7B,8DAA8D;IAC9D,cAAc,mBAAmB;IACjC,6DAA6D;IAC7D,YAAY,iBAAiB;IAC7B,8DAA8D;IAC9D,aAAa,kBAAkB;IAC/B,wEAAwE;IACxE,YAAY,iBAAiB;IAC7B,8DAA8D;IAC9D,WAAW,gBAAgB;IAK3B,kDAAkD;IAClD,YAAY,iBAAiB;IAC7B,iDAAiD;IACjD,aAAa,kBAAkB;IAC/B,yDAAyD;IACzD,cAAc,mBAAmB;IACjC,iDAAiD;IACjD,eAAe,oBAAoB;IACnC,qDAAqD;IACrD,cAAc,mBAAmB;IACjC,yDAAyD;IACzD,gBAAgB,qBAAqB;IAKrC,qEAAqE;IACrE,SAAS,cAAc;IACvB,qDAAqD;IACrD,WAAW,gBAAgB;IAC3B,qDAAqD;IACrD,WAAW,gBAAgB;IAC3B,mDAAmD;IACnD,YAAY,iBAAiB;IAC7B,0DAA0D;IAC1D,MAAM,WAAW;IACjB,OAAO,WAAW;IAClB,qEAAqE;IACrE,GAAG,QAAQ;IACX,mDAAmD;IACnD,KAAK,UAAU;IAKf,qDAAqD;IACrD,SAAS,cAAc;IACvB,+DAA+D;IAC/D,aAAa,kBAAkB;IAC/B,kEAAkE;IAClE,gBAAgB,qBAAqB;IACrC,oDAAoD;IACpD,cAAc,mBAAmB;IAKjC,wDAAwD;IACxD,iBAAiB,sBAAsB;IACvC,uDAAuD;IACvD,cAAc,mBAAmB;IAKjC,uDAAuD;IACvD,gBAAgB,qBAAqB;IACrC,4DAA4D;IAC5D,eAAe,oBAAoB;IAKnC,8EAA8E;IAC9E,SAAS,cAAc;IAKvB,kFAAkF;IAClF,aAAa,YAAY;CAC1B"}
|
package/dist/messageTypes.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Message type definitions for
|
|
2
|
+
* @fileoverview Message type definitions for Host ↔ Module communication.
|
|
3
3
|
* @module @schoolpalm/message-bridge/messageTypes
|
|
4
4
|
*/
|
|
5
|
-
// src/messageTypes.ts
|
|
6
5
|
/**
|
|
7
6
|
* Enumeration of all allowed message types for Host ↔ Module communication.
|
|
8
7
|
*
|
|
@@ -10,32 +9,98 @@
|
|
|
10
9
|
* application and embedded modules. Each type indicates the direction and
|
|
11
10
|
* purpose of the message.
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* import { MessageType } from '@schoolpalm/message-bridge';
|
|
16
|
-
*
|
|
17
|
-
* // Listen for UI updates from modules
|
|
18
|
-
* bridge.on(MessageType.UI_UPDATE, (payload) => {
|
|
19
|
-
* console.log('UI updated:', payload);
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
12
|
+
* ⚡ Future-proof: additional custom messages can be sent via
|
|
13
|
+
* `CUSTOM:<name>` without editing this enum.
|
|
22
14
|
*/
|
|
23
15
|
export var MessageType;
|
|
24
16
|
(function (MessageType) {
|
|
17
|
+
// -----------------------
|
|
18
|
+
// Lifecycle
|
|
19
|
+
// -----------------------
|
|
25
20
|
/** Module → Host: Indicates the module is ready for communication. */
|
|
26
21
|
MessageType["HANDSHAKE_READY"] = "handshake:ready";
|
|
22
|
+
// -----------------------
|
|
23
|
+
// UI & UX
|
|
24
|
+
// -----------------------
|
|
25
|
+
/** Module → Host: Indicates the module is ready for communication. */
|
|
26
|
+
MessageType["MODULE_READY"] = "module:ready";
|
|
27
|
+
/** Module → Host: Signals the module is unready/destroyed. */
|
|
28
|
+
MessageType["MODULE_UNREADY"] = "module:unready";
|
|
29
|
+
/** Host → Module: Signals the module to pause processing. */
|
|
30
|
+
MessageType["MODULE_PAUSE"] = "module:pause";
|
|
31
|
+
/** Host → Module: Signals the module to resume processing. */
|
|
32
|
+
MessageType["MODULE_RESUME"] = "module:resume";
|
|
27
33
|
/** Host → Module: Signals the module to start with provided context. */
|
|
28
34
|
MessageType["MODULE_START"] = "module:start";
|
|
29
|
-
/**
|
|
30
|
-
MessageType["
|
|
35
|
+
/** Host → Module: Signals the module to exit and clean up. */
|
|
36
|
+
MessageType["MODULE_EXIT"] = "module:exit";
|
|
37
|
+
// -----------------------
|
|
38
|
+
// Data & Context
|
|
39
|
+
// -----------------------
|
|
31
40
|
/** Module → Host: Requests data from the host. */
|
|
32
41
|
MessageType["DATA_REQUEST"] = "data:request";
|
|
33
42
|
/** Host → Module: Responds to a data request. */
|
|
34
43
|
MessageType["DATA_RESPONSE"] = "data:response";
|
|
44
|
+
/** Host → Module: Updates module context dynamically. */
|
|
45
|
+
MessageType["CONTEXT_UPDATE"] = "context:update";
|
|
46
|
+
/** Module → Host: Requests full host context. */
|
|
47
|
+
MessageType["CONTEXT_REQUEST"] = "context:request";
|
|
48
|
+
/** Module → Host: Subscribe to host data changes. */
|
|
49
|
+
MessageType["DATA_SUBSCRIBE"] = "data:subscribe";
|
|
50
|
+
/** Module → Host: Unsubscribe from host data changes. */
|
|
51
|
+
MessageType["DATA_UNSUBSCRIBE"] = "data:unsubscribe";
|
|
52
|
+
// -----------------------
|
|
53
|
+
// UI / UX
|
|
54
|
+
// -----------------------
|
|
55
|
+
/** Module → Host: Updates the host UI (title, breadcrumb, theme). */
|
|
56
|
+
MessageType["UI_UPDATE"] = "ui:update";
|
|
57
|
+
/** Host → Module: Show loader overlay or spinner. */
|
|
58
|
+
MessageType["SHOW_LOADER"] = "show:loader";
|
|
59
|
+
/** Host → Module: Hide loader overlay or spinner. */
|
|
60
|
+
MessageType["HIDE_LOADER"] = "hide:loader";
|
|
61
|
+
/** Module → Host: Request a toast/notification. */
|
|
62
|
+
MessageType["NOTIFICATION"] = "notification";
|
|
63
|
+
/** Module → Host: Request a modal/dialog confirmation. */
|
|
64
|
+
MessageType["DIALOG"] = "dialog";
|
|
65
|
+
MessageType["CONFIRM"] = "dialog";
|
|
66
|
+
/** Module → Host: Logs messages/warnings for centralized logging. */
|
|
67
|
+
MessageType["LOG"] = "log";
|
|
35
68
|
/** Module → Host: Reports an error to the host. */
|
|
36
69
|
MessageType["ERROR"] = "error";
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
70
|
+
// -----------------------
|
|
71
|
+
// Navigation / Page Control
|
|
72
|
+
// -----------------------
|
|
73
|
+
/** Host → Module: Load a specific page/component. */
|
|
74
|
+
MessageType["LOAD_PAGE"] = "load:page";
|
|
75
|
+
/** Host → Module: Navigate module back in internal history. */
|
|
76
|
+
MessageType["NAVIGATE_BACK"] = "navigate:back";
|
|
77
|
+
/** Host → Module: Navigate module forward in internal history. */
|
|
78
|
+
MessageType["NAVIGATE_FORWARD"] = "navigate:forward";
|
|
79
|
+
/** Module → Host: Update breadcrumbs in host UI. */
|
|
80
|
+
MessageType["SET_BREADCRUMB"] = "set:breadcrumb";
|
|
81
|
+
// -----------------------
|
|
82
|
+
// Permissions & Feature Flags
|
|
83
|
+
// -----------------------
|
|
84
|
+
/** Host → Module: Update allowed actions for module. */
|
|
85
|
+
MessageType["PERMISSION_UPDATE"] = "permission:update";
|
|
86
|
+
/** Host → Module: Enable/disable optional features. */
|
|
87
|
+
MessageType["FEATURE_TOGGLE"] = "feature:toggle";
|
|
88
|
+
// -----------------------
|
|
89
|
+
// Assets / Resources
|
|
90
|
+
// -----------------------
|
|
91
|
+
/** Host → Module: Preload additional JS/CSS/images. */
|
|
92
|
+
MessageType["PRELOAD_RESOURCE"] = "preload:resource";
|
|
93
|
+
/** Module → Host: Notify that a lazy resource is loaded. */
|
|
94
|
+
MessageType["RESOURCE_LOADED"] = "resource:loaded";
|
|
95
|
+
// -----------------------
|
|
96
|
+
// Lifecycle / Health
|
|
97
|
+
// -----------------------
|
|
98
|
+
/** Heartbeat for liveliness checks. Can be Module → Host or Host → Module. */
|
|
99
|
+
MessageType["HEARTBEAT"] = "heartbeat";
|
|
100
|
+
// -----------------------
|
|
101
|
+
// Future-proof / Custom
|
|
102
|
+
// -----------------------
|
|
103
|
+
/** Use this prefix to send custom messages without modifying the core library. */
|
|
104
|
+
MessageType["CUSTOM_PREFIX"] = "CUSTOM:";
|
|
40
105
|
})(MessageType || (MessageType = {}));
|
|
41
106
|
//# sourceMappingURL=messageTypes.js.map
|
package/dist/messageTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageTypes.js","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"messageTypes.js","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAN,IAAY,WAmGX;AAnGD,WAAY,WAAW;IAEpB,0BAA0B;IAC3B,YAAY;IACZ,0BAA0B;IAC1B,sEAAsE;IACtE,kDAAmC,CAAA;IAEnC,0BAA0B;IAC1B,UAAU;IACV,0BAA0B;IAE1B,sEAAsE;IACtE,4CAA6B,CAAA;IAC7B,8DAA8D;IAC9D,gDAAiC,CAAA;IACjC,6DAA6D;IAC7D,4CAA6B,CAAA;IAC7B,8DAA8D;IAC9D,8CAA+B,CAAA;IAC/B,wEAAwE;IACxE,4CAA6B,CAAA;IAC7B,8DAA8D;IAC9D,0CAA2B,CAAA;IAE3B,0BAA0B;IAC1B,iBAAiB;IACjB,0BAA0B;IAC1B,kDAAkD;IAClD,4CAA6B,CAAA;IAC7B,iDAAiD;IACjD,8CAA+B,CAAA;IAC/B,yDAAyD;IACzD,gDAAiC,CAAA;IACjC,iDAAiD;IACjD,kDAAmC,CAAA;IACnC,qDAAqD;IACrD,gDAAiC,CAAA;IACjC,yDAAyD;IACzD,oDAAqC,CAAA;IAErC,0BAA0B;IAC1B,UAAU;IACV,0BAA0B;IAC1B,qEAAqE;IACrE,sCAAuB,CAAA;IACvB,qDAAqD;IACrD,0CAA2B,CAAA;IAC3B,qDAAqD;IACrD,0CAA2B,CAAA;IAC3B,mDAAmD;IACnD,4CAA6B,CAAA;IAC7B,0DAA0D;IAC1D,gCAAiB,CAAA;IACjB,iCAAkB,CAAA;IAClB,qEAAqE;IACrE,0BAAW,CAAA;IACX,mDAAmD;IACnD,8BAAe,CAAA;IAEf,0BAA0B;IAC1B,4BAA4B;IAC5B,0BAA0B;IAC1B,qDAAqD;IACrD,sCAAuB,CAAA;IACvB,+DAA+D;IAC/D,8CAA+B,CAAA;IAC/B,kEAAkE;IAClE,oDAAqC,CAAA;IACrC,oDAAoD;IACpD,gDAAiC,CAAA;IAEjC,0BAA0B;IAC1B,8BAA8B;IAC9B,0BAA0B;IAC1B,wDAAwD;IACxD,sDAAuC,CAAA;IACvC,uDAAuD;IACvD,gDAAiC,CAAA;IAEjC,0BAA0B;IAC1B,qBAAqB;IACrB,0BAA0B;IAC1B,uDAAuD;IACvD,oDAAqC,CAAA;IACrC,4DAA4D;IAC5D,kDAAmC,CAAA;IAEnC,0BAA0B;IAC1B,qBAAqB;IACrB,0BAA0B;IAC1B,8EAA8E;IAC9E,sCAAuB,CAAA;IAEvB,0BAA0B;IAC1B,wBAAwB;IACxB,0BAA0B;IAC1B,kFAAkF;IAClF,wCAAyB,CAAA;AAC3B,CAAC,EAnGW,WAAW,KAAX,WAAW,QAmGtB"}
|
package/dist/moduleBridge.d.ts
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { BridgeBase } from './bridgeBase';
|
|
2
|
-
import { HandshakeReadyPayload, UIUpdatePayload, ErrorPayload } from './payloadSchemas';
|
|
3
|
-
/**
|
|
4
|
-
* Module-side bridge for communication with the host application.
|
|
5
|
-
*/
|
|
2
|
+
import { HandshakeReadyPayload, UIUpdatePayload, ErrorPayload, HeartbeatPayload, LoadPagePayload, BreadcrumbPayload, NotificationPayload, DialogPayload, PermissionPayload, FeatureTogglePayload, PreloadResourcePayload, ResourceLoadedPayload } from './payloadSchemas';
|
|
6
3
|
export declare class ModuleBridge extends BridgeBase {
|
|
4
|
+
private startedPayload;
|
|
7
5
|
constructor(targetOrigin?: string);
|
|
8
6
|
sendHandshake(payload: HandshakeReadyPayload): void;
|
|
9
7
|
onModuleStart(callback: (payload: any) => void): void;
|
|
8
|
+
onHeartbeat(callback?: (payload: HeartbeatPayload) => void): void;
|
|
10
9
|
sendUIUpdate(payload: UIUpdatePayload): void;
|
|
11
10
|
sendError(payload: ErrorPayload): void;
|
|
12
|
-
/**
|
|
13
|
-
* Module requests data from host
|
|
14
|
-
*/
|
|
15
11
|
requestData<T = any, R = any>(type: string, payload?: T, timeout?: number): Promise<R>;
|
|
16
|
-
/**
|
|
17
|
-
* Respond to a host request
|
|
18
|
-
*/
|
|
19
12
|
respondData(requestId: string, data: any, status?: 'success' | 'error'): void;
|
|
13
|
+
onLoadPage(callback: (payload: LoadPagePayload) => void): void;
|
|
14
|
+
onNavigateBack(callback: () => void): void;
|
|
15
|
+
onNavigateForward(callback: () => void): void;
|
|
16
|
+
onSetBreadcrumb(callback: (payload: BreadcrumbPayload) => void): void;
|
|
17
|
+
onShowLoader(callback: () => void): void;
|
|
18
|
+
onHideLoader(callback: () => void): void;
|
|
19
|
+
onNotification(callback: (payload: NotificationPayload) => void): void;
|
|
20
|
+
onDialog(callback: (payload: DialogPayload) => void): void;
|
|
21
|
+
onConfirm(callback: (payload: DialogPayload) => void): void;
|
|
22
|
+
onPause(callback: () => void): void;
|
|
23
|
+
onResume(callback: () => void): void;
|
|
24
|
+
onPermissionUpdate(callback: (payload: PermissionPayload) => void): void;
|
|
25
|
+
onFeatureToggle(callback: (payload: FeatureTogglePayload) => void): void;
|
|
26
|
+
onPreloadResources(callback: (payload: PreloadResourcePayload) => void): void;
|
|
27
|
+
onResourceLoaded(callback: (payload: ResourceLoadedPayload) => void): void;
|
|
28
|
+
notifyResourceLoaded(resource: string): void;
|
|
20
29
|
}
|
|
21
30
|
//# sourceMappingURL=moduleBridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moduleBridge.d.ts","sourceRoot":"","sources":["../src/moduleBridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"moduleBridge.d.ts","sourceRoot":"","sources":["../src/moduleBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,EAGZ,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,kBAAkB,CAAA;AAEzB,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,cAAc,CAAmB;gBAE7B,YAAY,GAAE,MAAY;IAOtC,aAAa,CAAC,OAAO,EAAE,qBAAqB;IAO5C,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAY9C,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI;IAY1D,YAAY,CAAC,OAAO,EAAE,eAAe;IAIrC,SAAS,CAAC,OAAO,EAAE,YAAY;IAOzB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB1F,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAE,SAAS,GAAG,OAAmB;IAQjF,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI;IAIvD,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI;IAInC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI;IAItC,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI;IAI9D,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI;IAIjC,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI;IAIjC,cAAc,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI;IAI/D,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI;IAInD,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI;IAIpD,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI7B,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI;IAIjE,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI;IAIjE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI;IAItE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI;IAOnE,oBAAoB,CAAC,QAAQ,EAAE,MAAM;CAGtC"}
|
package/dist/moduleBridge.js
CHANGED
|
@@ -1,48 +1,119 @@
|
|
|
1
|
-
// src/moduleBridge.ts
|
|
2
1
|
import { BridgeBase } from './bridgeBase';
|
|
3
2
|
import { MessageType } from './messageTypes';
|
|
4
|
-
/**
|
|
5
|
-
* Module-side bridge for communication with the host application.
|
|
6
|
-
*/
|
|
7
3
|
export class ModuleBridge extends BridgeBase {
|
|
8
4
|
constructor(targetOrigin = '*') {
|
|
9
5
|
super(window.parent, targetOrigin);
|
|
6
|
+
this.startedPayload = null;
|
|
10
7
|
}
|
|
11
|
-
//
|
|
8
|
+
// --------------------
|
|
9
|
+
// Handshake
|
|
10
|
+
// --------------------
|
|
12
11
|
sendHandshake(payload) {
|
|
13
12
|
this.send(MessageType.HANDSHAKE_READY, payload);
|
|
14
13
|
}
|
|
14
|
+
// --------------------
|
|
15
|
+
// Module Start
|
|
16
|
+
// --------------------
|
|
15
17
|
onModuleStart(callback) {
|
|
16
|
-
this.
|
|
18
|
+
if (this.startedPayload)
|
|
19
|
+
callback(this.startedPayload);
|
|
20
|
+
this.on(MessageType.MODULE_START, payload => {
|
|
21
|
+
this.startedPayload = payload;
|
|
22
|
+
callback(payload);
|
|
23
|
+
});
|
|
17
24
|
}
|
|
25
|
+
// --------------------
|
|
26
|
+
// Heartbeat
|
|
27
|
+
// --------------------
|
|
28
|
+
onHeartbeat(callback) {
|
|
29
|
+
this.on(MessageType.HEARTBEAT, (payload) => {
|
|
30
|
+
const hb = payload;
|
|
31
|
+
if (hb.ack)
|
|
32
|
+
return;
|
|
33
|
+
callback?.(hb);
|
|
34
|
+
this.send(MessageType.HEARTBEAT, { timestamp: Date.now(), ack: true });
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// --------------------
|
|
38
|
+
// UI / Errors
|
|
39
|
+
// --------------------
|
|
18
40
|
sendUIUpdate(payload) {
|
|
19
41
|
this.send(MessageType.UI_UPDATE, payload);
|
|
20
42
|
}
|
|
21
43
|
sendError(payload) {
|
|
22
44
|
this.send(MessageType.ERROR, payload);
|
|
23
45
|
}
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const requestPayload = {
|
|
46
|
+
// --------------------
|
|
47
|
+
// Requests
|
|
48
|
+
// --------------------
|
|
49
|
+
async requestData(type, payload, timeout = 5000) {
|
|
50
|
+
const request = {
|
|
30
51
|
requestId: crypto.randomUUID(),
|
|
31
52
|
type,
|
|
32
53
|
payload: payload
|
|
33
54
|
};
|
|
34
|
-
|
|
55
|
+
const response = (await this.request(MessageType.DATA_REQUEST, request, timeout));
|
|
56
|
+
if (response.status === 'error')
|
|
57
|
+
throw new Error(response.error || 'Unknown error from host');
|
|
58
|
+
return response.payload;
|
|
35
59
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Respond to a host request
|
|
38
|
-
*/
|
|
39
60
|
respondData(requestId, data, status = 'success') {
|
|
40
|
-
const response = {
|
|
41
|
-
requestId,
|
|
42
|
-
status,
|
|
43
|
-
payload: data
|
|
44
|
-
};
|
|
61
|
+
const response = { requestId, status, payload: data };
|
|
45
62
|
this.send(MessageType.DATA_RESPONSE, response);
|
|
46
63
|
}
|
|
64
|
+
// --------------------
|
|
65
|
+
// Convenience methods to handle host messages
|
|
66
|
+
// --------------------
|
|
67
|
+
onLoadPage(callback) {
|
|
68
|
+
this.on(MessageType.LOAD_PAGE, callback);
|
|
69
|
+
}
|
|
70
|
+
onNavigateBack(callback) {
|
|
71
|
+
this.on(MessageType.NAVIGATE_BACK, callback);
|
|
72
|
+
}
|
|
73
|
+
onNavigateForward(callback) {
|
|
74
|
+
this.on(MessageType.NAVIGATE_FORWARD, callback);
|
|
75
|
+
}
|
|
76
|
+
onSetBreadcrumb(callback) {
|
|
77
|
+
this.on(MessageType.SET_BREADCRUMB, callback);
|
|
78
|
+
}
|
|
79
|
+
onShowLoader(callback) {
|
|
80
|
+
this.on(MessageType.SHOW_LOADER, callback);
|
|
81
|
+
}
|
|
82
|
+
onHideLoader(callback) {
|
|
83
|
+
this.on(MessageType.HIDE_LOADER, callback);
|
|
84
|
+
}
|
|
85
|
+
onNotification(callback) {
|
|
86
|
+
this.on(MessageType.NOTIFICATION, callback);
|
|
87
|
+
}
|
|
88
|
+
onDialog(callback) {
|
|
89
|
+
this.on(MessageType.DIALOG, callback);
|
|
90
|
+
}
|
|
91
|
+
onConfirm(callback) {
|
|
92
|
+
this.on(MessageType.CONFIRM, callback);
|
|
93
|
+
}
|
|
94
|
+
onPause(callback) {
|
|
95
|
+
this.on(MessageType.MODULE_PAUSE, callback);
|
|
96
|
+
}
|
|
97
|
+
onResume(callback) {
|
|
98
|
+
this.on(MessageType.MODULE_RESUME, callback);
|
|
99
|
+
}
|
|
100
|
+
onPermissionUpdate(callback) {
|
|
101
|
+
this.on(MessageType.PERMISSION_UPDATE, callback);
|
|
102
|
+
}
|
|
103
|
+
onFeatureToggle(callback) {
|
|
104
|
+
this.on(MessageType.FEATURE_TOGGLE, callback);
|
|
105
|
+
}
|
|
106
|
+
onPreloadResources(callback) {
|
|
107
|
+
this.on(MessageType.PRELOAD_RESOURCE, callback);
|
|
108
|
+
}
|
|
109
|
+
onResourceLoaded(callback) {
|
|
110
|
+
this.on(MessageType.RESOURCE_LOADED, callback);
|
|
111
|
+
}
|
|
112
|
+
// --------------------
|
|
113
|
+
// Notify host about resource ready
|
|
114
|
+
// --------------------
|
|
115
|
+
notifyResourceLoaded(resource) {
|
|
116
|
+
this.send(MessageType.RESOURCE_LOADED, { resource });
|
|
117
|
+
}
|
|
47
118
|
}
|
|
48
119
|
//# sourceMappingURL=moduleBridge.js.map
|
package/dist/moduleBridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moduleBridge.js","sourceRoot":"","sources":["../src/moduleBridge.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"moduleBridge.js","sourceRoot":"","sources":["../src/moduleBridge.ts"],"names":[],"mappings":"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"}
|
package/dist/payloadSchemas.d.ts
CHANGED
|
@@ -1,76 +1,111 @@
|
|
|
1
|
-
|
|
2
|
-
* Payload for handshake ready message.
|
|
3
|
-
* Module → Host
|
|
4
|
-
*/
|
|
1
|
+
import { MessageType } from './messageTypes';
|
|
5
2
|
export interface HandshakeReadyPayload {
|
|
6
3
|
version: string;
|
|
7
4
|
timestamp: number;
|
|
5
|
+
capabilities?: string[];
|
|
8
6
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Payload for starting a module.
|
|
11
|
-
* Host → Module
|
|
12
|
-
*/
|
|
13
7
|
export interface ModuleStartPayload {
|
|
14
8
|
moduleId: string;
|
|
15
9
|
route: string;
|
|
16
10
|
context: Record<string, any>;
|
|
17
11
|
timestamp: number;
|
|
18
12
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Payload for module exit
|
|
21
|
-
* Host → Module
|
|
22
|
-
*/
|
|
23
13
|
export interface ModuleExitPayload {
|
|
24
14
|
reason?: string;
|
|
25
15
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Payload for UI updates from module
|
|
28
|
-
* Module → Host
|
|
29
|
-
*/
|
|
30
16
|
export interface UIUpdatePayload {
|
|
31
17
|
title: string;
|
|
32
18
|
breadcrumb: string[];
|
|
33
19
|
theme?: string;
|
|
34
20
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Payload for errors
|
|
37
|
-
* Module → Host
|
|
38
|
-
*/
|
|
39
21
|
export interface ErrorPayload {
|
|
40
22
|
code: string;
|
|
41
23
|
message: string;
|
|
42
24
|
details?: any;
|
|
43
25
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Payload for context updates
|
|
46
|
-
* Host → Module
|
|
47
|
-
*/
|
|
48
26
|
export interface ModuleContextPayload {
|
|
49
27
|
user?: Record<string, any>;
|
|
50
28
|
tenant?: Record<string, any>;
|
|
51
29
|
permissions?: string[];
|
|
52
30
|
theme?: string;
|
|
53
31
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Request payload (sent by requester)
|
|
56
|
-
* Can be Module → Host or Host → Module
|
|
57
|
-
*/
|
|
58
32
|
export interface RequestPayload {
|
|
59
33
|
requestId: string;
|
|
60
34
|
type: string;
|
|
61
|
-
payload?:
|
|
35
|
+
payload?: any;
|
|
62
36
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Response payload (sent by responder)
|
|
65
|
-
*/
|
|
66
37
|
export interface ResponsePayload {
|
|
67
38
|
requestId: string;
|
|
68
39
|
status: 'success' | 'error';
|
|
69
40
|
payload?: any;
|
|
70
41
|
error?: string;
|
|
71
42
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
43
|
+
export interface HeartbeatPayload {
|
|
44
|
+
timestamp: number;
|
|
45
|
+
ack?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface LoadPagePayload {
|
|
48
|
+
component: string;
|
|
49
|
+
params?: Record<string, any>;
|
|
50
|
+
}
|
|
51
|
+
export interface NavigationPayload {
|
|
52
|
+
}
|
|
53
|
+
export interface BreadcrumbPayload {
|
|
54
|
+
breadcrumb: string[];
|
|
55
|
+
}
|
|
56
|
+
export interface NotificationPayload {
|
|
57
|
+
message: string;
|
|
58
|
+
type: 'info' | 'success' | 'warning' | 'error';
|
|
59
|
+
}
|
|
60
|
+
export interface DialogPayload {
|
|
61
|
+
title?: string;
|
|
62
|
+
message: string;
|
|
63
|
+
}
|
|
64
|
+
export interface PauseResumePayload {
|
|
65
|
+
}
|
|
66
|
+
export interface PermissionPayload {
|
|
67
|
+
permissions: string[];
|
|
68
|
+
}
|
|
69
|
+
export interface FeatureTogglePayload {
|
|
70
|
+
features: Record<string, boolean>;
|
|
71
|
+
}
|
|
72
|
+
export interface PreloadResourcePayload {
|
|
73
|
+
resources: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface ResourceLoadedPayload {
|
|
76
|
+
resource: string;
|
|
77
|
+
}
|
|
78
|
+
export type LogPayload = {
|
|
79
|
+
message: string;
|
|
80
|
+
level?: 'info' | 'warn' | 'error';
|
|
81
|
+
};
|
|
82
|
+
export type MessagePayload = HandshakeReadyPayload | ModuleStartPayload | ModuleExitPayload | UIUpdatePayload | ErrorPayload | ModuleContextPayload | RequestPayload | ResponsePayload | HeartbeatPayload | LoadPagePayload | NavigationPayload | BreadcrumbPayload | NotificationPayload | DialogPayload | PauseResumePayload | PermissionPayload | FeatureTogglePayload | PreloadResourcePayload | ResourceLoadedPayload | LogPayload | undefined | any;
|
|
83
|
+
export interface MessagePayloadMap {
|
|
84
|
+
[MessageType.HANDSHAKE_READY]: HandshakeReadyPayload;
|
|
85
|
+
[MessageType.MODULE_START]: ModuleStartPayload;
|
|
86
|
+
[MessageType.MODULE_EXIT]: ModuleExitPayload;
|
|
87
|
+
[MessageType.UI_UPDATE]: UIUpdatePayload;
|
|
88
|
+
[MessageType.ERROR]: ErrorPayload;
|
|
89
|
+
[MessageType.CONTEXT_UPDATE]: ModuleContextPayload;
|
|
90
|
+
[MessageType.DATA_REQUEST]: RequestPayload;
|
|
91
|
+
[MessageType.DATA_RESPONSE]: ResponsePayload;
|
|
92
|
+
[MessageType.HEARTBEAT]: HeartbeatPayload;
|
|
93
|
+
[MessageType.LOAD_PAGE]: LoadPagePayload;
|
|
94
|
+
[MessageType.NAVIGATE_BACK]: NavigationPayload;
|
|
95
|
+
[MessageType.NAVIGATE_FORWARD]: NavigationPayload;
|
|
96
|
+
[MessageType.SET_BREADCRUMB]: BreadcrumbPayload;
|
|
97
|
+
[MessageType.SHOW_LOADER]: undefined;
|
|
98
|
+
[MessageType.HIDE_LOADER]: undefined;
|
|
99
|
+
[MessageType.NOTIFICATION]: NotificationPayload;
|
|
100
|
+
[MessageType.DIALOG]: DialogPayload;
|
|
101
|
+
[MessageType.CONFIRM]: DialogPayload;
|
|
102
|
+
[MessageType.MODULE_PAUSE]: PauseResumePayload;
|
|
103
|
+
[MessageType.MODULE_RESUME]: PauseResumePayload;
|
|
104
|
+
[MessageType.PERMISSION_UPDATE]: PermissionPayload;
|
|
105
|
+
[MessageType.FEATURE_TOGGLE]: FeatureTogglePayload;
|
|
106
|
+
[MessageType.PRELOAD_RESOURCE]: PreloadResourcePayload;
|
|
107
|
+
[MessageType.RESOURCE_LOADED]: ResourceLoadedPayload;
|
|
108
|
+
[MessageType.LOG]: LogPayload;
|
|
109
|
+
[key: `CUSTOM:${string}`]: any;
|
|
110
|
+
}
|
|
76
111
|
//# sourceMappingURL=payloadSchemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadSchemas.d.ts","sourceRoot":"","sources":["../src/payloadSchemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payloadSchemas.d.ts","sourceRoot":"","sources":["../src/payloadSchemas.ts"],"names":[],"mappings":"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"}
|
package/dist/payloadSchemas.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadSchemas.js","sourceRoot":"","sources":["../src/payloadSchemas.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"payloadSchemas.js","sourceRoot":"","sources":["../src/payloadSchemas.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAEA,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,gBAAgB,UAAU,CAAA"}
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// src/protocol.ts
|
|
2
|
+
export var ProtocolState;
|
|
3
|
+
(function (ProtocolState) {
|
|
4
|
+
ProtocolState["INIT"] = "init";
|
|
5
|
+
ProtocolState["HANDSHAKEN"] = "handshaken";
|
|
6
|
+
ProtocolState["STARTED"] = "started";
|
|
7
|
+
ProtocolState["EXITED"] = "exited";
|
|
8
|
+
})(ProtocolState || (ProtocolState = {}));
|
|
9
|
+
export const PROTOCOL_VERSION = '1.0.0';
|
|
10
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;IACnB,kCAAiB,CAAA;AACnB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAA"}
|
package/package.json
CHANGED