@stackable-labs/sdk-extension-react 1.44.0 → 1.45.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/index.d.ts +16 -1
- package/dist/index.js +26 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -97,6 +97,21 @@ declare const useExtension: () => ExtensionContextValue;
|
|
|
97
97
|
*/
|
|
98
98
|
declare const useAuthEvent: (eventType: AuthEventType, handler: (event: AuthEvent) => void) => void;
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* useIdentityExtend — register a handler for identity claim enrichment.
|
|
102
|
+
*
|
|
103
|
+
* When the host platform detects a customer login, it sends base claims
|
|
104
|
+
* (external_id, email, name) to extensions with the identity:extend permission.
|
|
105
|
+
* The handler returns additional claims to merge into the JWT before signing.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* useIdentityExtend((claims) => ({
|
|
109
|
+
* external_id: `shopify_${claims.external_id}`
|
|
110
|
+
* }))
|
|
111
|
+
*/
|
|
112
|
+
type IdentityExtendHandler = (claims: Record<string, unknown>) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
113
|
+
declare const useIdentityExtend: (handler: IdentityExtendHandler) => void;
|
|
114
|
+
|
|
100
115
|
interface SurfaceProps {
|
|
101
116
|
/** The extension point target ID (e.g., "slot.header") */
|
|
102
117
|
id: string;
|
|
@@ -508,4 +523,4 @@ type UseContextDataResult = ContextData & {
|
|
|
508
523
|
};
|
|
509
524
|
declare const useContextData: () => UseContextDataResult;
|
|
510
525
|
|
|
511
|
-
export { type Store, Surface, createExtension, createStore, ui, useAuthEvent, useCapabilities, useContextData, useExtension, useStore, useSurfaceContext };
|
|
526
|
+
export { type Store, Surface, createExtension, createStore, ui, useAuthEvent, useCapabilities, useContextData, useExtension, useIdentityExtend, useStore, useSurfaceContext };
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ var getWebCrypto = () => _webCrypto ??= new WebCrypto({ crypto: globalThis.crypt
|
|
|
20
20
|
var requestCounter = 0;
|
|
21
21
|
var registeredExtensionId = "unknown";
|
|
22
22
|
var encryptionKey = null;
|
|
23
|
+
var identityExtendHandler = null;
|
|
23
24
|
var pendingRequests = /* @__PURE__ */ new Map();
|
|
24
25
|
var extensionEventHandlers = /* @__PURE__ */ new Set();
|
|
25
26
|
var onExtensionEvent = (handler) => {
|
|
@@ -28,6 +29,12 @@ var onExtensionEvent = (handler) => {
|
|
|
28
29
|
extensionEventHandlers.delete(handler);
|
|
29
30
|
};
|
|
30
31
|
};
|
|
32
|
+
var registerIdentityExtendHandler = (handler) => {
|
|
33
|
+
identityExtendHandler = handler;
|
|
34
|
+
return () => {
|
|
35
|
+
if (identityExtendHandler === handler) identityExtendHandler = null;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
31
38
|
var generateRequestId = () => `req_${++requestCounter}_${Date.now()}`;
|
|
32
39
|
var setEncryptionKey = async (keyBase64) => {
|
|
33
40
|
encryptionKey = await getWebCrypto().importRawKey("secret", base64ToBytes(keyBase64), { extractable: false });
|
|
@@ -50,6 +57,18 @@ var initRpcListener = (extensionId) => {
|
|
|
50
57
|
}
|
|
51
58
|
return;
|
|
52
59
|
}
|
|
60
|
+
if (msg?.type === "identity-extend-request") {
|
|
61
|
+
if (identityExtendHandler) {
|
|
62
|
+
const { id, claims } = msg;
|
|
63
|
+
Promise.resolve(identityExtendHandler(claims)).then((additionalClaims) => {
|
|
64
|
+
window.parent.postMessage({ type: "identity-extend-response", id, additionalClaims }, "*");
|
|
65
|
+
}).catch((e) => {
|
|
66
|
+
console.error("[rpc-client] identity-extend handler error:", e);
|
|
67
|
+
window.parent.postMessage({ type: "identity-extend-response", id, additionalClaims: {} }, "*");
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
53
72
|
if (msg?.type === "capability-response") {
|
|
54
73
|
const response = msg;
|
|
55
74
|
const pending = pendingRequests.get(response.id);
|
|
@@ -186,6 +205,12 @@ var useAuthEvent = (eventType, handler) => {
|
|
|
186
205
|
return unsubscribe;
|
|
187
206
|
}, [eventType, handler]);
|
|
188
207
|
};
|
|
208
|
+
var useIdentityExtend = (handler) => {
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
const unregister = registerIdentityExtendHandler(handler);
|
|
211
|
+
return unregister;
|
|
212
|
+
}, [handler]);
|
|
213
|
+
};
|
|
189
214
|
var useExtensionId = () => {
|
|
190
215
|
const ctx = React.useContext(ExtensionContext);
|
|
191
216
|
return ctx?.extensionId ?? "unknown";
|
|
@@ -425,4 +450,4 @@ var useContextData = () => {
|
|
|
425
450
|
return { ...contextData, loading };
|
|
426
451
|
};
|
|
427
452
|
|
|
428
|
-
export { Surface, createExtension, createStore, ui_exports as ui, useAuthEvent, useCapabilities, useContextData, useExtension, useStore, useSurfaceContext };
|
|
453
|
+
export { Surface, createExtension, createStore, ui_exports as ui, useAuthEvent, useCapabilities, useContextData, useExtension, useIdentityExtend, useStore, useSurfaceContext };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackable-labs/sdk-extension-react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.45.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"@agnostack/verifyd": "alpha",
|
|
16
16
|
"@remote-dom/core": "1.x",
|
|
17
17
|
"@remote-dom/react": "1.x",
|
|
18
|
-
"@stackable-labs/sdk-extension-contracts": "1.
|
|
18
|
+
"@stackable-labs/sdk-extension-contracts": "1.45.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=18.0.0 <19.0.0",
|