@stackable-labs/sdk-extension-react 1.42.1 → 1.44.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 +22 -2
- package/dist/index.js +32 -2
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { ApiRequest, FetchRequestInit, FetchResponse, ToastPayload, InvokeAction, ContextData, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
|
|
2
|
+
import { ApiRequest, FetchRequestInit, FetchResponse, ToastPayload, InvokeAction, ContextData, AuthState, AuthEventType, AuthEvent, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -67,6 +67,14 @@ declare const useCapabilities: () => {
|
|
|
67
67
|
context: {
|
|
68
68
|
read: () => Promise<ContextData>;
|
|
69
69
|
};
|
|
70
|
+
identity: {
|
|
71
|
+
read: () => Promise<AuthState>;
|
|
72
|
+
extend: (payload: {
|
|
73
|
+
claims: Record<string, unknown>;
|
|
74
|
+
}) => Promise<{
|
|
75
|
+
additionalClaims: Record<string, unknown>;
|
|
76
|
+
}>;
|
|
77
|
+
};
|
|
70
78
|
};
|
|
71
79
|
/**
|
|
72
80
|
* Subscribe to a shared store with an optional selector.
|
|
@@ -77,6 +85,18 @@ declare const useStore: <T, S = T>(store: Store<T>, selector?: (state: T) => S)
|
|
|
77
85
|
*/
|
|
78
86
|
declare const useExtension: () => ExtensionContextValue;
|
|
79
87
|
|
|
88
|
+
/**
|
|
89
|
+
* useAuthEvent — subscribe to identity events pushed from the host.
|
|
90
|
+
*
|
|
91
|
+
* Spike-only: no encryption, no loading state management.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Register a callback for a specific auth event type (e.g. 'identity.login').
|
|
96
|
+
* The callback receives the full AuthEvent payload.
|
|
97
|
+
*/
|
|
98
|
+
declare const useAuthEvent: (eventType: AuthEventType, handler: (event: AuthEvent) => void) => void;
|
|
99
|
+
|
|
80
100
|
interface SurfaceProps {
|
|
81
101
|
/** The extension point target ID (e.g., "slot.header") */
|
|
82
102
|
id: string;
|
|
@@ -488,4 +508,4 @@ type UseContextDataResult = ContextData & {
|
|
|
488
508
|
};
|
|
489
509
|
declare const useContextData: () => UseContextDataResult;
|
|
490
510
|
|
|
491
|
-
export { type Store, Surface, createExtension, createStore, ui, useCapabilities, useContextData, useExtension, useStore, useSurfaceContext };
|
|
511
|
+
export { type Store, Surface, createExtension, createStore, ui, useAuthEvent, useCapabilities, useContextData, useExtension, useStore, useSurfaceContext };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRoot } from 'react-dom/client';
|
|
2
|
-
import React, { createContext, useContext, useCallback, useSyncExternalStore, useState, useRef
|
|
2
|
+
import React, { createContext, useContext, useCallback, useSyncExternalStore, useEffect, useState, useRef } from 'react';
|
|
3
3
|
import { WebCrypto } from '@agnostack/verifyd/esm';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -21,6 +21,13 @@ var requestCounter = 0;
|
|
|
21
21
|
var registeredExtensionId = "unknown";
|
|
22
22
|
var encryptionKey = null;
|
|
23
23
|
var pendingRequests = /* @__PURE__ */ new Map();
|
|
24
|
+
var extensionEventHandlers = /* @__PURE__ */ new Set();
|
|
25
|
+
var onExtensionEvent = (handler) => {
|
|
26
|
+
extensionEventHandlers.add(handler);
|
|
27
|
+
return () => {
|
|
28
|
+
extensionEventHandlers.delete(handler);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
24
31
|
var generateRequestId = () => `req_${++requestCounter}_${Date.now()}`;
|
|
25
32
|
var setEncryptionKey = async (keyBase64) => {
|
|
26
33
|
encryptionKey = await getWebCrypto().importRawKey("secret", base64ToBytes(keyBase64), { extractable: false });
|
|
@@ -33,6 +40,16 @@ var initRpcListener = (extensionId) => {
|
|
|
33
40
|
setEncryptionKey(msg.encryptionKey);
|
|
34
41
|
return;
|
|
35
42
|
}
|
|
43
|
+
if (msg?.type === "extension-event") {
|
|
44
|
+
for (const handler of extensionEventHandlers) {
|
|
45
|
+
try {
|
|
46
|
+
handler(msg.eventType, msg.payload);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error("[rpc-client] extension-event handler error:", e);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
36
53
|
if (msg?.type === "capability-response") {
|
|
37
54
|
const response = msg;
|
|
38
55
|
const pending = pendingRequests.get(response.id);
|
|
@@ -138,6 +155,10 @@ var useCapabilities = () => ({
|
|
|
138
155
|
},
|
|
139
156
|
context: {
|
|
140
157
|
read: () => callCapability("context.read")
|
|
158
|
+
},
|
|
159
|
+
identity: {
|
|
160
|
+
read: () => callCapability("identity.read"),
|
|
161
|
+
extend: (payload) => callCapability("identity.extend", payload)
|
|
141
162
|
}
|
|
142
163
|
});
|
|
143
164
|
var useStore = (store, selector) => {
|
|
@@ -156,6 +177,15 @@ var useExtension = () => {
|
|
|
156
177
|
}
|
|
157
178
|
return ctx;
|
|
158
179
|
};
|
|
180
|
+
var useAuthEvent = (eventType, handler) => {
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
const unsubscribe = onExtensionEvent((type, payload) => {
|
|
183
|
+
if (type !== eventType) return;
|
|
184
|
+
handler(payload);
|
|
185
|
+
});
|
|
186
|
+
return unsubscribe;
|
|
187
|
+
}, [eventType, handler]);
|
|
188
|
+
};
|
|
159
189
|
var useExtensionId = () => {
|
|
160
190
|
const ctx = React.useContext(ExtensionContext);
|
|
161
191
|
return ctx?.extensionId ?? "unknown";
|
|
@@ -395,4 +425,4 @@ var useContextData = () => {
|
|
|
395
425
|
return { ...contextData, loading };
|
|
396
426
|
};
|
|
397
427
|
|
|
398
|
-
export { Surface, createExtension, createStore, ui_exports as ui, useCapabilities, useContextData, useExtension, useStore, useSurfaceContext };
|
|
428
|
+
export { Surface, createExtension, createStore, ui_exports as ui, useAuthEvent, useCapabilities, useContextData, useExtension, 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.44.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.44.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=18.0.0 <19.0.0",
|