@onereach/idw-apps 0.1.2-beta.6.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/README.md +411 -0
- package/dist/app/createIdwApp.d.ts +104 -0
- package/dist/app/createIdwApp.d.ts.map +1 -0
- package/dist/app/createIdwApp.js +151 -0
- package/dist/app/createIdwApp.js.map +1 -0
- package/dist/app/index.d.ts +15 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +3 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/installIdwAppApi.d.ts +98 -0
- package/dist/app/installIdwAppApi.d.ts.map +1 -0
- package/dist/app/installIdwAppApi.js +314 -0
- package/dist/app/installIdwAppApi.js.map +1 -0
- package/dist/createIdwAppBridge.d.ts +13 -0
- package/dist/createIdwAppBridge.d.ts.map +1 -0
- package/dist/createIdwAppBridge.js +555 -0
- package/dist/createIdwAppBridge.js.map +1 -0
- package/dist/hostStateChannel.d.ts +51 -0
- package/dist/hostStateChannel.d.ts.map +1 -0
- package/dist/hostStateChannel.js +104 -0
- package/dist/hostStateChannel.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +81 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +67 -0
- package/dist/protocol.js.map +1 -0
- package/dist/stateStore.d.ts +23 -0
- package/dist/stateStore.d.ts.map +1 -0
- package/dist/stateStore.js +70 -0
- package/dist/stateStore.js.map +1 -0
- package/dist/types.d.ts +268 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
- package/skills/idw-app-development/SKILL.md +458 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createIdwApp.js","sourceRoot":"","sources":["../../src/app/createIdwApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createIdwApp, IdwApp, IdwApp as App, PostMessageTransport, } from './createIdwApp';
|
|
2
|
+
export type { CreateIdwAppOptions, GetAuthTokenOptions, IdwAuthToken, IdwAgentContextParams, IdwAppCapabilities, IdwAppInfo, IdwAppOptions, IdwStateOptions, SkillData, ValidateAccessOptions, ValidateAccessParams, ValidateAccessResult, } from './createIdwApp';
|
|
3
|
+
export { installIdwAppApi } from './installIdwAppApi';
|
|
4
|
+
export type { AppMessageEventLike, AppWindowLike, HostPostLike, IdwActionCallOptions, IdwAppApi, IdwStateListener, IdwWidgetStateListener, IdwWindowApi, InstalledIdwAppApi, InstallIdwAppApiOptions, OpenAiWidgetApi, } from './installIdwAppApi';
|
|
5
|
+
export type { IdwActionParams, IdwActionResult, IdwAppAuthContext, IdwAppSurface, IdwHostContextBlock, } from '../types';
|
|
6
|
+
import type { IdwWindowApi, OpenAiWidgetApi } from './installIdwAppApi';
|
|
7
|
+
declare global {
|
|
8
|
+
interface Window {
|
|
9
|
+
/** IDW iframe-facing API, present only inside MCP app iframes that call `installIdwAppApi`. */
|
|
10
|
+
idw?: IdwWindowApi;
|
|
11
|
+
/** OpenAI Apps SDK compatibility shim, present only when enabled by `installIdwAppApi`. */
|
|
12
|
+
openai?: OpenAiWidgetApi;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,MAAM,EACN,MAAM,IAAI,GAAG,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACT,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,+FAA+F;QAC/F,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,2FAA2F;QAC3F,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,MAAM,EACN,MAAM,IAAI,GAAG,EACb,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAexB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { IdwActionParams, IdwActionResult } from '../types';
|
|
2
|
+
/** Minimal window surface used to post messages to the host. */
|
|
3
|
+
export interface HostPostLike {
|
|
4
|
+
postMessage(message: unknown, targetOrigin: string): void;
|
|
5
|
+
}
|
|
6
|
+
/** Minimal message event surface (satisfied by DOM `MessageEvent`). */
|
|
7
|
+
export interface AppMessageEventLike {
|
|
8
|
+
data: unknown;
|
|
9
|
+
source: unknown;
|
|
10
|
+
stopImmediatePropagation?: () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Minimal app-window surface. Satisfied by the real `window`; kept structural so
|
|
14
|
+
* the installer can be unit-tested without a DOM.
|
|
15
|
+
*/
|
|
16
|
+
export interface AppWindowLike {
|
|
17
|
+
addEventListener(type: 'message', listener: (event: AppMessageEventLike) => void, options?: boolean): void;
|
|
18
|
+
removeEventListener(type: 'message', listener: (event: AppMessageEventLike) => void, options?: boolean): void;
|
|
19
|
+
parent?: HostPostLike;
|
|
20
|
+
idw?: IdwWindowApi;
|
|
21
|
+
openai?: OpenAiWidgetApi;
|
|
22
|
+
}
|
|
23
|
+
export type IdwWidgetStateListener = (state: unknown) => void;
|
|
24
|
+
/** @deprecated Use {@link IdwWidgetStateListener}. */
|
|
25
|
+
export type IdwStateListener = IdwWidgetStateListener;
|
|
26
|
+
/** IDW iframe-facing widget-state API exposed as `window.idw.app`. */
|
|
27
|
+
export interface IdwAppApi {
|
|
28
|
+
/** Latest widget/view state known to the app (seeded by `initialState`, updated by the host). */
|
|
29
|
+
getWidgetState(): unknown;
|
|
30
|
+
/** Replace the whole widget/view state object; updates locally and notifies the host. */
|
|
31
|
+
setWidgetState(state: unknown): void;
|
|
32
|
+
/** Resolves when the host replies with widget state, or when the fallback timeout elapses. */
|
|
33
|
+
whenWidgetStateReady(): Promise<unknown>;
|
|
34
|
+
/** Subscribe to all local and host-pushed widget/view state changes. Returns an unsubscribe function. */
|
|
35
|
+
subscribeWidgetState(listener: IdwWidgetStateListener): () => void;
|
|
36
|
+
/** @deprecated Use {@link getWidgetState}. */
|
|
37
|
+
getState(): unknown;
|
|
38
|
+
/** @deprecated Use {@link setWidgetState}. */
|
|
39
|
+
setState(state: unknown): void;
|
|
40
|
+
/** Request an IDW host/platform action. */
|
|
41
|
+
callIdwAction(params: IdwActionParams, options?: IdwActionCallOptions): Promise<IdwActionResult>;
|
|
42
|
+
/** @deprecated Use {@link whenWidgetStateReady}. */
|
|
43
|
+
whenStateReady(): Promise<unknown>;
|
|
44
|
+
/** @deprecated Use {@link subscribeWidgetState}. */
|
|
45
|
+
subscribeState(listener: IdwWidgetStateListener): () => void;
|
|
46
|
+
}
|
|
47
|
+
export interface IdwActionCallOptions {
|
|
48
|
+
timeout?: number;
|
|
49
|
+
}
|
|
50
|
+
/** `window.idw` shape. */
|
|
51
|
+
export interface IdwWindowApi {
|
|
52
|
+
app: IdwAppApi;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* OpenAI Apps SDK compatibility shim exposed as `window.openai`.
|
|
57
|
+
*
|
|
58
|
+
* This is a compatibility alias only — NOT a full OpenAI Apps SDK. It mirrors the
|
|
59
|
+
* IDW widget state so apps written against `window.openai.widgetState` /
|
|
60
|
+
* `setWidgetState` keep working inside an IDW host.
|
|
61
|
+
*/
|
|
62
|
+
export interface OpenAiWidgetApi {
|
|
63
|
+
widgetState?: unknown;
|
|
64
|
+
setWidgetState(state: unknown): void;
|
|
65
|
+
[key: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
export interface InstallIdwAppApiOptions {
|
|
68
|
+
/** Window to attach the API to. Default: the global `window`. */
|
|
69
|
+
appWindow?: AppWindowLike;
|
|
70
|
+
/** Window that receives app messages (the host). Default: `appWindow.parent`. */
|
|
71
|
+
hostWindow?: HostPostLike;
|
|
72
|
+
/** Target origin for messages to the host. Default: `'*'`. */
|
|
73
|
+
targetOrigin?: string;
|
|
74
|
+
/** Initial widget state before the host pushes anything. */
|
|
75
|
+
initialState?: unknown;
|
|
76
|
+
/** Retry interval for the initial host widget-state request. Default: 250ms. */
|
|
77
|
+
stateRequestRetryMs?: number;
|
|
78
|
+
/** Fallback readiness timeout when no IDW host answers. Default: 3000ms. */
|
|
79
|
+
stateReadyTimeoutMs?: number;
|
|
80
|
+
/** Expose the `window.openai` compatibility shim. Default: `true`. */
|
|
81
|
+
exposeOpenAiShim?: boolean;
|
|
82
|
+
/** Called whenever the local widget state changes (from host or local `setWidgetState`). */
|
|
83
|
+
onStateChange?: (state: unknown) => void;
|
|
84
|
+
}
|
|
85
|
+
export interface InstalledIdwAppApi extends IdwAppApi {
|
|
86
|
+
/** Remove listeners and delete the injected globals. */
|
|
87
|
+
dispose(): void;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Install the IDW iframe-facing widget-state API (`window.idw.app`) and the optional
|
|
91
|
+
* OpenAI compatibility shim (`window.openai`) inside an MCP app iframe.
|
|
92
|
+
*
|
|
93
|
+
* These APIs are intentionally scoped to the iframe that calls this function —
|
|
94
|
+
* the host only ever answers messages from its own app iframe. Do not call this
|
|
95
|
+
* outside an MCP app iframe.
|
|
96
|
+
*/
|
|
97
|
+
export declare function installIdwAppApi(options?: InstallIdwAppApiOptions): InstalledIdwAppApi;
|
|
98
|
+
//# sourceMappingURL=installIdwAppApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installIdwAppApi.d.ts","sourceRoot":"","sources":["../../src/app/installIdwAppApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { IdwAppMessageType, envelope, isIdwHostToAppMessage, nextRequestId, } from '../protocol';
|
|
2
|
+
import { cloneJsonSerializableState } from '../stateStore';
|
|
3
|
+
/**
|
|
4
|
+
* Install the IDW iframe-facing widget-state API (`window.idw.app`) and the optional
|
|
5
|
+
* OpenAI compatibility shim (`window.openai`) inside an MCP app iframe.
|
|
6
|
+
*
|
|
7
|
+
* These APIs are intentionally scoped to the iframe that calls this function —
|
|
8
|
+
* the host only ever answers messages from its own app iframe. Do not call this
|
|
9
|
+
* outside an MCP app iframe.
|
|
10
|
+
*/
|
|
11
|
+
export function installIdwAppApi(options = {}) {
|
|
12
|
+
const appWindow = options.appWindow ?? globalThis;
|
|
13
|
+
const hostWindow = options.hostWindow ?? appWindow.parent;
|
|
14
|
+
const targetOrigin = options.targetOrigin ?? defaultTargetOrigin();
|
|
15
|
+
const exposeOpenAiShim = options.exposeOpenAiShim ?? true;
|
|
16
|
+
const stateRequestRetryMs = options.stateRequestRetryMs ?? 250;
|
|
17
|
+
const stateReadyTimeoutMs = options.stateReadyTimeoutMs ?? 3000;
|
|
18
|
+
const listeners = new Set();
|
|
19
|
+
const pendingActions = new Map();
|
|
20
|
+
const pendingStateRequests = new Map();
|
|
21
|
+
let state = cloneJsonSerializableState(options.initialState);
|
|
22
|
+
let stateVersion = 0;
|
|
23
|
+
let hasLocalStateOverride = false;
|
|
24
|
+
let stateReady = false;
|
|
25
|
+
let disposed = false;
|
|
26
|
+
let stateRetryTimer;
|
|
27
|
+
let stateReadyTimer;
|
|
28
|
+
let resolveStateReady;
|
|
29
|
+
const stateReadyPromise = new Promise((resolve) => {
|
|
30
|
+
resolveStateReady = resolve;
|
|
31
|
+
});
|
|
32
|
+
const previousIdw = appWindow.idw;
|
|
33
|
+
const hadPreviousIdwApp = Boolean(previousIdw && 'app' in previousIdw);
|
|
34
|
+
const previousIdwApp = previousIdw?.app;
|
|
35
|
+
const previousOpenAi = appWindow.openai;
|
|
36
|
+
const hadPreviousOpenAiWidgetState = Boolean(previousOpenAi && 'widgetState' in previousOpenAi);
|
|
37
|
+
const hadPreviousOpenAiSetWidgetState = Boolean(previousOpenAi && 'setWidgetState' in previousOpenAi);
|
|
38
|
+
const previousOpenAiWidgetState = previousOpenAi?.widgetState;
|
|
39
|
+
const previousOpenAiSetWidgetState = previousOpenAi?.setWidgetState;
|
|
40
|
+
if (!hostWindow) {
|
|
41
|
+
markStateReady();
|
|
42
|
+
}
|
|
43
|
+
function post(message) {
|
|
44
|
+
hostWindow?.postMessage(envelope(message), targetOrigin);
|
|
45
|
+
}
|
|
46
|
+
function actionError(message) {
|
|
47
|
+
return {
|
|
48
|
+
content: [{
|
|
49
|
+
type: 'text',
|
|
50
|
+
text: message,
|
|
51
|
+
}],
|
|
52
|
+
isError: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function markStateReady() {
|
|
56
|
+
if (stateReady) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
stateReady = true;
|
|
60
|
+
clearStateReadyTimers();
|
|
61
|
+
resolveStateReady(state);
|
|
62
|
+
}
|
|
63
|
+
function clearStateReadyTimers() {
|
|
64
|
+
if (stateRetryTimer) {
|
|
65
|
+
clearInterval(stateRetryTimer);
|
|
66
|
+
stateRetryTimer = undefined;
|
|
67
|
+
}
|
|
68
|
+
if (stateReadyTimer) {
|
|
69
|
+
clearTimeout(stateReadyTimer);
|
|
70
|
+
stateReadyTimer = undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function detachTimer(timer) {
|
|
74
|
+
timer.unref?.();
|
|
75
|
+
}
|
|
76
|
+
function notifyStateListeners(next) {
|
|
77
|
+
options.onStateChange?.(next);
|
|
78
|
+
for (const listener of [...listeners]) {
|
|
79
|
+
listener(next);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function updateLocalState(next, fromHost = false) {
|
|
83
|
+
stateVersion += 1;
|
|
84
|
+
state = cloneJsonSerializableState(next);
|
|
85
|
+
if (exposeOpenAiShim && appWindow.openai) {
|
|
86
|
+
appWindow.openai.widgetState = state;
|
|
87
|
+
}
|
|
88
|
+
notifyStateListeners(state);
|
|
89
|
+
if (fromHost) {
|
|
90
|
+
markStateReady();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function requestHostState() {
|
|
94
|
+
if (!hostWindow || stateReady || disposed || hasLocalStateOverride) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const requestId = nextRequestId();
|
|
98
|
+
pendingStateRequests.set(requestId, {
|
|
99
|
+
kind: 'get',
|
|
100
|
+
version: stateVersion,
|
|
101
|
+
});
|
|
102
|
+
post({
|
|
103
|
+
type: IdwAppMessageType.GetState,
|
|
104
|
+
requestId,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function startStateReadyHandshake() {
|
|
108
|
+
if (!hostWindow) {
|
|
109
|
+
markStateReady();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
requestHostState();
|
|
113
|
+
if (stateRequestRetryMs > 0) {
|
|
114
|
+
stateRetryTimer = setInterval(requestHostState, stateRequestRetryMs);
|
|
115
|
+
detachTimer(stateRetryTimer);
|
|
116
|
+
}
|
|
117
|
+
if (stateReadyTimeoutMs > 0) {
|
|
118
|
+
stateReadyTimer = setTimeout(markStateReady, stateReadyTimeoutMs);
|
|
119
|
+
detachTimer(stateReadyTimer);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const api = {
|
|
123
|
+
getWidgetState() {
|
|
124
|
+
return state;
|
|
125
|
+
},
|
|
126
|
+
setWidgetState(next) {
|
|
127
|
+
// Update local (and OpenAI mirror) immediately; persistence is async on the host.
|
|
128
|
+
updateLocalState(next);
|
|
129
|
+
// A local write is newer than every pending/retrying GET snapshot. Keep it
|
|
130
|
+
// authoritative until the matching SetState acknowledgement arrives.
|
|
131
|
+
hasLocalStateOverride = true;
|
|
132
|
+
if (stateRetryTimer) {
|
|
133
|
+
clearInterval(stateRetryTimer);
|
|
134
|
+
stateRetryTimer = undefined;
|
|
135
|
+
}
|
|
136
|
+
const requestId = nextRequestId();
|
|
137
|
+
pendingStateRequests.set(requestId, {
|
|
138
|
+
kind: 'set',
|
|
139
|
+
version: stateVersion,
|
|
140
|
+
});
|
|
141
|
+
post({
|
|
142
|
+
type: IdwAppMessageType.SetState,
|
|
143
|
+
requestId,
|
|
144
|
+
state,
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
whenWidgetStateReady() {
|
|
148
|
+
return stateReadyPromise;
|
|
149
|
+
},
|
|
150
|
+
subscribeWidgetState(listener) {
|
|
151
|
+
listeners.add(listener);
|
|
152
|
+
return () => listeners.delete(listener);
|
|
153
|
+
},
|
|
154
|
+
getState() {
|
|
155
|
+
return api.getWidgetState();
|
|
156
|
+
},
|
|
157
|
+
setState(next) {
|
|
158
|
+
api.setWidgetState(next);
|
|
159
|
+
},
|
|
160
|
+
callIdwAction(params, options) {
|
|
161
|
+
if (!hostWindow) {
|
|
162
|
+
return Promise.resolve(actionError('No host window is available for IDW actions'));
|
|
163
|
+
}
|
|
164
|
+
const requestId = nextRequestId();
|
|
165
|
+
const timeoutMs = options?.timeout ?? 30000;
|
|
166
|
+
return new Promise((resolve) => {
|
|
167
|
+
const timeout = setTimeout(() => {
|
|
168
|
+
pendingActions.delete(requestId);
|
|
169
|
+
resolve(actionError(`IDW action timed out: ${params.name}`));
|
|
170
|
+
}, timeoutMs);
|
|
171
|
+
pendingActions.set(requestId, {
|
|
172
|
+
resolve,
|
|
173
|
+
timeout,
|
|
174
|
+
});
|
|
175
|
+
post({
|
|
176
|
+
type: IdwAppMessageType.CallAction,
|
|
177
|
+
requestId,
|
|
178
|
+
action: {
|
|
179
|
+
name: params.name,
|
|
180
|
+
arguments: params.arguments
|
|
181
|
+
? cloneJsonSerializableState(params.arguments)
|
|
182
|
+
: undefined,
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
whenStateReady() {
|
|
188
|
+
return api.whenWidgetStateReady();
|
|
189
|
+
},
|
|
190
|
+
subscribeState(listener) {
|
|
191
|
+
return api.subscribeWidgetState(listener);
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
function handleMessage(event) {
|
|
195
|
+
// Only trust messages from the host window when we can identify it.
|
|
196
|
+
if (hostWindow && event.source !== hostWindow) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!isIdwHostToAppMessage(event.data)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
event.stopImmediatePropagation?.();
|
|
203
|
+
if (event.data.type === IdwAppMessageType.ActionResult) {
|
|
204
|
+
const pending = pendingActions.get(event.data.requestId);
|
|
205
|
+
if (!pending) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
clearTimeout(pending.timeout);
|
|
209
|
+
pendingActions.delete(event.data.requestId);
|
|
210
|
+
pending.resolve(event.data.result);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (event.data.type === IdwAppMessageType.StateResult) {
|
|
214
|
+
const pending = pendingStateRequests.get(event.data.requestId);
|
|
215
|
+
pendingStateRequests.delete(event.data.requestId);
|
|
216
|
+
// State results are request-correlated. An unsolicited result must not
|
|
217
|
+
// replace local state, and a GET may never override a local write.
|
|
218
|
+
if (!pending || (pending.kind === 'get' && hasLocalStateOverride)) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (pending.version !== stateVersion) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (pending.kind === 'set') {
|
|
225
|
+
hasLocalStateOverride = false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
updateLocalState(event.data.state, true);
|
|
229
|
+
}
|
|
230
|
+
appWindow.addEventListener('message', handleMessage, true);
|
|
231
|
+
appWindow.idw = {
|
|
232
|
+
...(previousIdw ?? {}),
|
|
233
|
+
app: api,
|
|
234
|
+
};
|
|
235
|
+
if (exposeOpenAiShim) {
|
|
236
|
+
appWindow.openai = previousOpenAi ?? {};
|
|
237
|
+
appWindow.openai.widgetState = state;
|
|
238
|
+
appWindow.openai.setWidgetState = (next) => api.setWidgetState(next);
|
|
239
|
+
}
|
|
240
|
+
// Sync with any state the host already holds. The request is retried briefly
|
|
241
|
+
// because the host and iframe can race during initial iframe navigation.
|
|
242
|
+
startStateReadyHandshake();
|
|
243
|
+
return {
|
|
244
|
+
getWidgetState: api.getWidgetState,
|
|
245
|
+
setWidgetState: api.setWidgetState,
|
|
246
|
+
whenWidgetStateReady: api.whenWidgetStateReady,
|
|
247
|
+
subscribeWidgetState: api.subscribeWidgetState,
|
|
248
|
+
getState: api.getState,
|
|
249
|
+
setState: api.setState,
|
|
250
|
+
callIdwAction: api.callIdwAction,
|
|
251
|
+
whenStateReady: api.whenStateReady,
|
|
252
|
+
subscribeState: api.subscribeState,
|
|
253
|
+
dispose() {
|
|
254
|
+
disposed = true;
|
|
255
|
+
clearStateReadyTimers();
|
|
256
|
+
pendingStateRequests.clear();
|
|
257
|
+
appWindow.removeEventListener('message', handleMessage, true);
|
|
258
|
+
listeners.clear();
|
|
259
|
+
for (const [requestId, pending] of pendingActions.entries()) {
|
|
260
|
+
clearTimeout(pending.timeout);
|
|
261
|
+
pending.resolve(actionError('IDW app API was disposed before the action completed'));
|
|
262
|
+
pendingActions.delete(requestId);
|
|
263
|
+
}
|
|
264
|
+
if (previousIdw) {
|
|
265
|
+
if (hadPreviousIdwApp) {
|
|
266
|
+
previousIdw.app = previousIdwApp;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
delete previousIdw.app;
|
|
270
|
+
}
|
|
271
|
+
appWindow.idw = previousIdw;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
delete appWindow.idw;
|
|
275
|
+
}
|
|
276
|
+
if (exposeOpenAiShim && appWindow.openai) {
|
|
277
|
+
if (previousOpenAi) {
|
|
278
|
+
if (hadPreviousOpenAiWidgetState) {
|
|
279
|
+
previousOpenAi.widgetState = previousOpenAiWidgetState;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
delete previousOpenAi.widgetState;
|
|
283
|
+
}
|
|
284
|
+
if (hadPreviousOpenAiSetWidgetState) {
|
|
285
|
+
previousOpenAi.setWidgetState = previousOpenAiSetWidgetState;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
delete previousOpenAi.setWidgetState;
|
|
289
|
+
}
|
|
290
|
+
appWindow.openai = previousOpenAi;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
delete appWindow.openai;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function defaultTargetOrigin() {
|
|
300
|
+
try {
|
|
301
|
+
const referrer = globalThis.document?.referrer;
|
|
302
|
+
if (referrer) {
|
|
303
|
+
const origin = new URL(referrer).origin;
|
|
304
|
+
if (origin && origin !== 'null') {
|
|
305
|
+
return origin;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// Fall through to wildcard for srcdoc/opaque app contexts.
|
|
311
|
+
}
|
|
312
|
+
return '*';
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=installIdwAppApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installIdwAppApi.js","sourceRoot":"","sources":["../../src/app/installIdwAppApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CreateIdwAppBridgeOptions, IdwAppBridge } from './types';
|
|
2
|
+
export declare const DEFAULT_IDW_AUTH_TOKEN_ACTION = "getAuthToken";
|
|
3
|
+
/**
|
|
4
|
+
* Create an IDW host-side adapter around the MCP Apps `AppBridge`.
|
|
5
|
+
*
|
|
6
|
+
* This is a thin wrapper, not a replacement: standard MCP Apps behavior is
|
|
7
|
+
* preserved and routed through caller-provided callbacks so this package never
|
|
8
|
+
* imports app stores or backend clients directly. On top of that it adds an
|
|
9
|
+
* IDW/OpenAI-compatible widget-state channel (see {@link createHostStateChannel}
|
|
10
|
+
* and the `@onereach/idw-apps/app` entry point).
|
|
11
|
+
*/
|
|
12
|
+
export declare function createIdwAppBridge(options: CreateIdwAppBridgeOptions): IdwAppBridge;
|
|
13
|
+
//# sourceMappingURL=createIdwAppBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createIdwAppBridge.d.ts","sourceRoot":"","sources":["../src/createIdwAppBridge.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,yBAAyB,EAKzB,YAAY,EAcb,MAAM,SAAS,CAAC;AAOjB,eAAO,MAAM,6BAA6B,iBAAiB,CAAC;AAkG5D;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAyjBnF"}
|