@stackable-labs/sdk-extension-host 1.0.0 → 1.2.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 +109 -5
- package/dist/ExtensionProvider.d.ts +5 -2
- package/dist/ExtensionProvider.js +3 -2
- package/dist/ExtensionProvider.js.map +1 -1
- package/dist/ExtensionSlot.js +10 -6
- package/dist/ExtensionSlot.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -20,14 +20,15 @@ react-dom >= 18.0.0 < 19.0.0
|
|
|
20
20
|
Wrap your app with `ExtensionProvider` and place `ExtensionSlot` wherever extension UI should appear:
|
|
21
21
|
|
|
22
22
|
```tsx
|
|
23
|
-
import { ExtensionProvider, ExtensionSlot
|
|
24
|
-
|
|
25
|
-
// Register host components once at app startup (before any ExtensionSlot renders)
|
|
26
|
-
registerComponents({ 'ui-button': Button, 'ui-text': Text });
|
|
23
|
+
import { ExtensionProvider, ExtensionSlot } from '@stackable-labs/sdk-extension-host';
|
|
27
24
|
|
|
28
25
|
function App() {
|
|
29
26
|
return (
|
|
30
|
-
<ExtensionProvider
|
|
27
|
+
<ExtensionProvider
|
|
28
|
+
extensions={extensions}
|
|
29
|
+
capabilityHandlers={handlers}
|
|
30
|
+
components={{ 'ui-button': Button, 'ui-text': Text }}
|
|
31
|
+
>
|
|
31
32
|
<ExtensionSlot target="slot.header" />
|
|
32
33
|
<MainContent />
|
|
33
34
|
<ExtensionSlot target="slot.content" />
|
|
@@ -44,6 +45,109 @@ function App() {
|
|
|
44
45
|
- **`CapabilityRPCHandler`** — handles capability requests from extension sandboxes
|
|
45
46
|
- **`SandboxManager`** — creates and destroys hidden iframe sandboxes per extension
|
|
46
47
|
|
|
48
|
+
## Building a local preview host
|
|
49
|
+
|
|
50
|
+
During extension development, you can create a lightweight preview host app in your extension repo to test your extension against the real SDK sandbox — no private monorepo required.
|
|
51
|
+
|
|
52
|
+
### Structure
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
packages/
|
|
56
|
+
├── extension/ ← your extension
|
|
57
|
+
└── preview/ ← local preview host
|
|
58
|
+
└── src/
|
|
59
|
+
├── main.tsx
|
|
60
|
+
├── App.tsx
|
|
61
|
+
└── mockData.json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Preview App.tsx pattern
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { ExtensionProvider, ExtensionSlot } from '@stackable-labs/sdk-extension-host';
|
|
68
|
+
import type { CapabilityHandlers } from '@stackable-labs/sdk-extension-host';
|
|
69
|
+
import { hostComponents } from '@stackable-labs/embeddables/components';
|
|
70
|
+
import type {
|
|
71
|
+
ApiRequest,
|
|
72
|
+
ExtensionRegistryEntry,
|
|
73
|
+
Permission,
|
|
74
|
+
ToastPayload,
|
|
75
|
+
} from '@stackable-labs/sdk-extension-contracts';
|
|
76
|
+
import manifestRaw from '../../extension/public/manifest.json';
|
|
77
|
+
import mockData from './mockData.json';
|
|
78
|
+
|
|
79
|
+
const manifest = {
|
|
80
|
+
...manifestRaw,
|
|
81
|
+
permissions: manifestRaw.permissions as Permission[],
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const extensions: ExtensionRegistryEntry[] = [
|
|
85
|
+
{
|
|
86
|
+
id: manifest.name.toLowerCase().replace(/\s+/g, '-'),
|
|
87
|
+
manifest,
|
|
88
|
+
bundleUrl: `http://localhost:${import.meta.env.VITE_EXTENSION_PORT || '5173'}`,
|
|
89
|
+
enabled: true,
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
const mockContext = { customerId: 'cust_123', customerEmail: 'dev@example.com' };
|
|
94
|
+
|
|
95
|
+
const capabilityHandlers: CapabilityHandlers = {
|
|
96
|
+
'data.query': async (payload: ApiRequest) => {
|
|
97
|
+
// return mock data based on payload.action
|
|
98
|
+
return mockData;
|
|
99
|
+
},
|
|
100
|
+
'actions.toast': async (payload: ToastPayload) => {
|
|
101
|
+
console.log('[Preview] toast:', payload);
|
|
102
|
+
},
|
|
103
|
+
'context.read': async () => mockContext,
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export default function App() {
|
|
107
|
+
return (
|
|
108
|
+
<ExtensionProvider
|
|
109
|
+
extensions={extensions}
|
|
110
|
+
components={hostComponents()}
|
|
111
|
+
capabilityHandlers={capabilityHandlers}
|
|
112
|
+
>
|
|
113
|
+
{manifest.targets.map((target) => (
|
|
114
|
+
<ExtensionSlot key={target} target={target} context={mockContext} />
|
|
115
|
+
))}
|
|
116
|
+
</ExtensionProvider>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Wiring two dev servers with Turborepo
|
|
122
|
+
|
|
123
|
+
At the workspace root, add:
|
|
124
|
+
|
|
125
|
+
**.env**
|
|
126
|
+
```
|
|
127
|
+
VITE_EXTENSION_PORT=5173
|
|
128
|
+
VITE_PREVIEW_PORT=5174
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**turbo.json**
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"$schema": "https://turbo.build/schema.json",
|
|
135
|
+
"globalEnv": ["VITE_EXTENSION_PORT", "VITE_PREVIEW_PORT"],
|
|
136
|
+
"tasks": {
|
|
137
|
+
"dev": { "cache": false, "persistent": true }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Run both servers with one command:
|
|
143
|
+
```bash
|
|
144
|
+
pnpm dev
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Extension runs at `:5173`, preview host at `:5174`. The preview host loads the extension bundle from the dev server, so edits to the extension hot-reload in the preview automatically.
|
|
148
|
+
|
|
149
|
+
See [sample-extension-commerce](https://github.com/agnostack/sample-extension-commerce) and [sample-extension-approvals](https://github.com/agnostack/sample-extension-approvals) for complete working examples.
|
|
150
|
+
|
|
47
151
|
## Changelog
|
|
48
152
|
|
|
49
153
|
See [npm version history](https://www.npmjs.com/package/@stackable-labs/sdk-extension-host?activeTab=versions).
|
|
@@ -3,17 +3,20 @@
|
|
|
3
3
|
* Place at the app root so runtimes persist across navigation.
|
|
4
4
|
*/
|
|
5
5
|
import React from 'react';
|
|
6
|
-
import type { ExtensionRegistryEntry } from '@stackable-labs/sdk-extension-contracts';
|
|
6
|
+
import type { ExtensionRegistryEntry, UITag } from '@stackable-labs/sdk-extension-contracts';
|
|
7
7
|
import type { CapabilityHandlers } from './CapabilityRPCHandler';
|
|
8
|
+
type ComponentMap = Partial<Record<UITag, React.ComponentType<Record<string, unknown>>>>;
|
|
8
9
|
interface ExtensionProviderContextValue {
|
|
9
10
|
extensions: ExtensionRegistryEntry[];
|
|
11
|
+
components: ComponentMap;
|
|
10
12
|
ready: boolean;
|
|
11
13
|
}
|
|
12
14
|
interface ExtensionProviderProps {
|
|
13
15
|
extensions: ExtensionRegistryEntry[];
|
|
14
16
|
capabilityHandlers: CapabilityHandlers;
|
|
17
|
+
components?: ComponentMap;
|
|
15
18
|
children: React.ReactNode;
|
|
16
19
|
}
|
|
17
|
-
export declare const ExtensionProvider: ({ extensions, capabilityHandlers, children, }: ExtensionProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare const ExtensionProvider: ({ extensions, capabilityHandlers, components, children, }: ExtensionProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
21
|
export declare const useExtensionProvider: () => ExtensionProviderContextValue;
|
|
19
22
|
export {};
|
|
@@ -9,9 +9,10 @@ import { createSandbox, destroySandbox } from './SandboxManager';
|
|
|
9
9
|
import { createCapabilityRPCHandler } from './CapabilityRPCHandler';
|
|
10
10
|
const ExtensionProviderContext = createContext({
|
|
11
11
|
extensions: [],
|
|
12
|
+
components: {},
|
|
12
13
|
ready: false,
|
|
13
14
|
});
|
|
14
|
-
export const ExtensionProvider = ({ extensions, capabilityHandlers, children, }) => {
|
|
15
|
+
export const ExtensionProvider = ({ extensions, capabilityHandlers, components = {}, children, }) => {
|
|
15
16
|
const [ready, setReady] = useState(false);
|
|
16
17
|
const sandboxContainerRef = useRef(null);
|
|
17
18
|
const cleanupRef = useRef(null);
|
|
@@ -49,7 +50,7 @@ export const ExtensionProvider = ({ extensions, capabilityHandlers, children, })
|
|
|
49
50
|
cleanupRef.current?.();
|
|
50
51
|
};
|
|
51
52
|
}, [extensions, capabilityHandlers]);
|
|
52
|
-
return (_jsxs(ExtensionProviderContext.Provider, { value: { extensions, ready }, children: [_jsx("div", { ref: sandboxContainerRef, style: { display: 'none' } }), children] }));
|
|
53
|
+
return (_jsxs(ExtensionProviderContext.Provider, { value: { extensions, components, ready }, children: [_jsx("div", { ref: sandboxContainerRef, style: { display: 'none' } }), children] }));
|
|
53
54
|
};
|
|
54
55
|
export const useExtensionProvider = () => useContext(ExtensionProviderContext);
|
|
55
56
|
//# sourceMappingURL=ExtensionProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionProvider.js","sourceRoot":"","sources":["../src/ExtensionProvider.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,CAAA;;AAEZ,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"ExtensionProvider.js","sourceRoot":"","sources":["../src/ExtensionProvider.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,CAAA;;AAEZ,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAWnE,MAAM,wBAAwB,GAAG,aAAa,CAAgC;IAC5E,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,KAAK,EAAE,KAAK;CACb,CAAC,CAAA;AASF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,UAAU,EACV,kBAAkB,EAClB,UAAU,GAAG,EAAE,EACf,QAAQ,GACe,EAAE,EAAE;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAA;IAClD,MAAM,mBAAmB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxD,MAAM,UAAU,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAA;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,mBAAmB,CAAC,OAAO;YAAE,OAAM;QAExC,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAA;YAC7C,IAAI,CAAC,SAAS;gBAAE,OAAM;YAEtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YAErF,8CAA8C;YAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;oBAC5F,MAAM,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;oBACnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,UAAU,CAAC,OAAO,GAAG,0BAA0B,CAAC,kBAAkB,CAAC,CAAA;YAEnE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;gBACxC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAChB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,EAAE,CAAA;QAEN,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;YAChB,qCAAqC;YACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACxB,CAAC;YACD,UAAU,CAAC,OAAO,EAAE,EAAE,CAAA;QACxB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAEpC,OAAO,CACL,MAAC,wBAAwB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,aAEzE,cAAK,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAI,EAC5D,QAAQ,IACyB,CACrC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAA"}
|
package/dist/ExtensionSlot.js
CHANGED
|
@@ -11,13 +11,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
11
11
|
import React, { useEffect, useState, useCallback, useMemo, useRef } from 'react';
|
|
12
12
|
import { useExtensionProvider } from './ExtensionProvider';
|
|
13
13
|
import { getSandbox } from './SandboxManager';
|
|
14
|
-
import {
|
|
14
|
+
import { isValidTag } from './ComponentRegistry';
|
|
15
15
|
/**
|
|
16
16
|
* Renders extension UI for a given target.
|
|
17
17
|
* Listens for serialized DOM trees from the extension sandbox via postMessage.
|
|
18
18
|
*/
|
|
19
19
|
export const ExtensionSlot = ({ target, context, className, separator, fallback = null, render, }) => {
|
|
20
|
-
const { extensions, ready } = useExtensionProvider();
|
|
20
|
+
const { extensions, components, ready } = useExtensionProvider();
|
|
21
21
|
const [surfaceContentByExtension, setSurfaceContentByExtension] = useState({});
|
|
22
22
|
const previousMatchingIdsRef = useRef('');
|
|
23
23
|
// Find extensions that target this slot — stabilize reference by ID list
|
|
@@ -34,11 +34,15 @@ export const ExtensionSlot = ({ target, context, className, separator, fallback
|
|
|
34
34
|
if (node.tag === '__fragment') {
|
|
35
35
|
return (_jsx(React.Fragment, { children: node.children?.map((child, i) => renderSerializedNode(child, sourceWindow, i)) }, key));
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
if (!isValidTag(node.tag)) {
|
|
38
|
+
console.warn(`[ExtensionHost] Unknown UI tag rejected: <${node.tag}>`);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const HostComponent = components[node.tag];
|
|
38
42
|
if (!HostComponent) {
|
|
39
|
-
//
|
|
43
|
+
// Valid tag but not registered in this host's component map
|
|
40
44
|
if (node.tag.startsWith('ui-')) {
|
|
41
|
-
console.warn(`[ExtensionSlot]
|
|
45
|
+
console.warn(`[ExtensionSlot] Unregistered UI tag: <${node.tag}>`);
|
|
42
46
|
return null;
|
|
43
47
|
}
|
|
44
48
|
// For non-ui tags, just render children
|
|
@@ -64,7 +68,7 @@ export const ExtensionSlot = ({ target, context, className, separator, fallback
|
|
|
64
68
|
}
|
|
65
69
|
const children = node.children?.map((child, i) => renderSerializedNode(child, sourceWindow, i));
|
|
66
70
|
return (_createElement(HostComponent, { ...props, key: key }, children && children.length > 0 ? children : undefined));
|
|
67
|
-
}, [target]);
|
|
71
|
+
}, [target, components]);
|
|
68
72
|
useEffect(() => {
|
|
69
73
|
const matchingIds = matchingExtensions.map((ext) => ext.id).join(',');
|
|
70
74
|
if (previousMatchingIdsRef.current !== matchingIds) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionSlot.js","sourceRoot":"","sources":["../src/ExtensionSlot.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAA;;;AAEZ,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ExtensionSlot.js","sourceRoot":"","sources":["../src/ExtensionSlot.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackable-labs/sdk-extension-host",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@stackable-labs/sdk-extension-contracts": "1.
|
|
15
|
+
"@stackable-labs/sdk-extension-contracts": "1.2.0",
|
|
16
16
|
"@remote-dom/core": "1.x",
|
|
17
17
|
"@remote-dom/react": "1.x"
|
|
18
18
|
},
|