@stackable-labs/sdk-extension-react 1.70.0 → 1.71.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 +41 -9
- package/dist/index.js +46 -5
- 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, IdentityBaseClaims, IdentityEventType, IdentityEvent, ExtendIdentityHandler, MessagingEventType, MessagingEventHandler, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
|
|
2
|
+
import { ApiRequest, FetchRequestInit, FetchResponse, ToastPayload, InvokeAction, ContextData, IdentityBaseClaims, IdentityEventType, IdentityEvent, ExtendIdentityHandler, MessagingEventType, MessagingEventHandler, ActivityEventType, ActivityEventHandler, EventType, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -88,14 +88,16 @@ declare const useExtension: () => ExtensionContextValue;
|
|
|
88
88
|
/**
|
|
89
89
|
* useIdentityEvent — subscribe to identity events pushed from the host.
|
|
90
90
|
*
|
|
91
|
-
*
|
|
91
|
+
* Parameters are domain-stripped (e.g., 'login' not 'identity:login').
|
|
92
|
+
* Use '*' to receive all identity events.
|
|
92
93
|
*/
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
|
-
* Register a callback for a specific identity event type (e.g. '
|
|
96
|
+
* Register a callback for a specific identity event type (e.g. 'login').
|
|
97
|
+
* Use '*' to receive all identity events.
|
|
96
98
|
* The callback receives the full IdentityEvent payload.
|
|
97
99
|
*/
|
|
98
|
-
declare const useIdentityEvent: (eventType: IdentityEventType, handler: (event: IdentityEvent) => void) => void;
|
|
100
|
+
declare const useIdentityEvent: (eventType: IdentityEventType | "*", handler: (event: IdentityEvent) => void) => void;
|
|
99
101
|
|
|
100
102
|
/**
|
|
101
103
|
* useExtendIdentity — register a handler for identity claim enrichment.
|
|
@@ -115,17 +117,47 @@ declare const useExtendIdentity: (handler: ExtendIdentityHandler) => void;
|
|
|
115
117
|
/**
|
|
116
118
|
* useMessagingEvent — subscribe to messaging events pushed from the host.
|
|
117
119
|
*
|
|
118
|
-
* Supports
|
|
120
|
+
* Supports wildcard ('*'), sub-domain ('postback'), and specific ('postback:add_to_cart') subscriptions.
|
|
119
121
|
* Host-side filtering ensures only matching events cross the sandbox boundary;
|
|
120
|
-
* this hook applies a secondary actionName match within the extension.
|
|
122
|
+
* this hook applies a secondary eventName/actionName match within the extension.
|
|
121
123
|
*/
|
|
122
124
|
|
|
123
125
|
/**
|
|
124
126
|
* Register a callback for messaging events.
|
|
125
|
-
* - '
|
|
127
|
+
* - '*' — receive ALL messaging events (requires elevated marketplace review)
|
|
128
|
+
* - 'postback' — receive all postback events
|
|
126
129
|
* - 'postback:<actionName>' — receive only events matching actionName
|
|
127
130
|
*/
|
|
128
|
-
declare const useMessagingEvent: (eventType: MessagingEventType, handler: MessagingEventHandler) => void;
|
|
131
|
+
declare const useMessagingEvent: (eventType: MessagingEventType | "*", handler: MessagingEventHandler) => void;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* useActivityEvent — subscribe to activity events pushed from the host.
|
|
135
|
+
*
|
|
136
|
+
* Parameters are domain-stripped (e.g., 'product_view' not 'activity:product_view').
|
|
137
|
+
* Use '*' to receive all activity events.
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Register a callback for a specific activity event type (e.g. 'product_view').
|
|
142
|
+
* Use '*' to receive all activity events.
|
|
143
|
+
* The callback receives the full ActivityEvent payload.
|
|
144
|
+
*/
|
|
145
|
+
declare const useActivityEvent: (eventType: ActivityEventType | "*", handler: ActivityEventHandler) => void;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* useEvent — generic cross-domain event hook.
|
|
149
|
+
*
|
|
150
|
+
* Accepts fully-qualified event types (e.g., 'activity:product_view', 'identity:login', 'messaging:postback').
|
|
151
|
+
* Use bare domain name (e.g., 'activity', 'identity') as wildcard to receive all events in that domain.
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Register a callback for any event type across all domains.
|
|
156
|
+
* - 'activity' / 'identity' / 'messaging' — domain wildcard, receives all events in that domain
|
|
157
|
+
* - 'identity:login' / 'messaging:postback' / 'activity:product_view' — specific event
|
|
158
|
+
* - 'messaging:postback:add_to_cart' — specific event with sub-filter
|
|
159
|
+
*/
|
|
160
|
+
declare const useEvent: (eventType: EventType, handler: (payload: unknown) => void) => void;
|
|
129
161
|
|
|
130
162
|
interface SurfaceProps {
|
|
131
163
|
/** The extension point target ID (e.g., "slot.header") */
|
|
@@ -538,4 +570,4 @@ type UseContextDataResult = ContextData & {
|
|
|
538
570
|
};
|
|
539
571
|
declare const useContextData: () => UseContextDataResult;
|
|
540
572
|
|
|
541
|
-
export { type Store, Surface, createExtension, createStore, ui, useCapabilities, useContextData, useExtendIdentity, useExtension, useIdentityEvent, useMessagingEvent, useStore, useSurfaceContext };
|
|
573
|
+
export { type Store, Surface, createExtension, createStore, ui, useActivityEvent, useCapabilities, useContextData, useEvent, useExtendIdentity, useExtension, useIdentityEvent, useMessagingEvent, useStore, useSurfaceContext };
|
package/dist/index.js
CHANGED
|
@@ -231,10 +231,13 @@ var useExtension = () => {
|
|
|
231
231
|
var useIdentityEvent = (eventType, handler) => {
|
|
232
232
|
useEffect(() => {
|
|
233
233
|
const unsubscribe = onExtensionEvent((type, payload) => {
|
|
234
|
-
if (type !==
|
|
234
|
+
if (type !== "identity") {
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
|
-
|
|
237
|
+
const event = payload;
|
|
238
|
+
if (eventType === "*" || event.eventName === eventType) {
|
|
239
|
+
handler(event);
|
|
240
|
+
}
|
|
238
241
|
});
|
|
239
242
|
return unsubscribe;
|
|
240
243
|
}, [eventType, handler]);
|
|
@@ -248,15 +251,53 @@ var useExtendIdentity = (handler) => {
|
|
|
248
251
|
var useMessagingEvent = (eventType, handler) => {
|
|
249
252
|
useEffect(() => {
|
|
250
253
|
const unsubscribe = onExtensionEvent((type, payload) => {
|
|
251
|
-
if (type !== "messaging
|
|
254
|
+
if (type !== "messaging") {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
252
257
|
const event = payload;
|
|
253
|
-
if (eventType === "
|
|
258
|
+
if (eventType === "*" || event.eventName === eventType || `${event.eventName}:${event.data.actionName}` === eventType) {
|
|
254
259
|
handler(event);
|
|
255
260
|
}
|
|
256
261
|
});
|
|
257
262
|
return unsubscribe;
|
|
258
263
|
}, [eventType, handler]);
|
|
259
264
|
};
|
|
265
|
+
var useActivityEvent = (eventType, handler) => {
|
|
266
|
+
useEffect(() => {
|
|
267
|
+
const unsubscribe = onExtensionEvent((type, payload) => {
|
|
268
|
+
if (type !== "activity") {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const event = payload;
|
|
272
|
+
if (eventType === "*" || event.eventName === eventType) {
|
|
273
|
+
handler(event);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
return unsubscribe;
|
|
277
|
+
}, [eventType, handler]);
|
|
278
|
+
};
|
|
279
|
+
var useEvent = (eventType, handler) => {
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
const [domain, ...rest] = eventType.split(":");
|
|
282
|
+
const targetEventName = rest.join(":");
|
|
283
|
+
const unsubscribe = onExtensionEvent((type, payload) => {
|
|
284
|
+
if (type !== domain) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (targetEventName) {
|
|
288
|
+
const event = payload;
|
|
289
|
+
if (event.eventName === targetEventName) ; else if (targetEventName.startsWith(`${event.eventName}:`)) {
|
|
290
|
+
const subFilter = targetEventName.slice(event.eventName.length + 1);
|
|
291
|
+
if (event.data?.actionName !== subFilter) return;
|
|
292
|
+
} else {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
handler(payload);
|
|
297
|
+
});
|
|
298
|
+
return unsubscribe;
|
|
299
|
+
}, [eventType, handler]);
|
|
300
|
+
};
|
|
260
301
|
var useExtensionId = () => {
|
|
261
302
|
const ctx = React2.useContext(ExtensionContext);
|
|
262
303
|
return ctx?.extensionId ?? "unknown";
|
|
@@ -506,4 +547,4 @@ var useContextData = () => {
|
|
|
506
547
|
return { ...contextData, loading };
|
|
507
548
|
};
|
|
508
549
|
|
|
509
|
-
export { Surface, createExtension, createStore, ui_exports as ui, useCapabilities, useContextData, useExtendIdentity, useExtension, useIdentityEvent, useMessagingEvent, useStore, useSurfaceContext };
|
|
550
|
+
export { Surface, createExtension, createStore, ui_exports as ui, useActivityEvent, useCapabilities, useContextData, useEvent, useExtendIdentity, useExtension, useIdentityEvent, useMessagingEvent, 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.71.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.71.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=18.0.0 <19.0.0",
|