@stackable-labs/sdk-extension-react 1.64.0 → 1.66.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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ApiRequest, FetchRequestInit, FetchResponse, ToastPayload, InvokeAction, ContextData, IdentityBaseClaims, IdentityEventType, IdentityEvent, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
2
+ import { ApiRequest, FetchRequestInit, FetchResponse, ToastPayload, InvokeAction, ContextData, IdentityBaseClaims, IdentityEventType, IdentityEvent, ExtendIdentityHandler, MessagingEventType, MessagingEventHandler, AllowedIconName } from '@stackable-labs/sdk-extension-contracts';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
 
5
5
  /**
@@ -98,20 +98,34 @@ declare const useExtension: () => ExtensionContextValue;
98
98
  declare const useIdentityEvent: (eventType: IdentityEventType, handler: (event: IdentityEvent) => void) => void;
99
99
 
100
100
  /**
101
- * useIdentityExtend — register a handler for identity claim enrichment.
101
+ * useExtendIdentity — register a handler for identity claim enrichment.
102
102
  *
103
103
  * When the host platform detects a customer login, it sends base claims
104
104
  * (external_id, email, name) to extensions with the extend:identity permission.
105
105
  * The handler returns additional claims to merge into the JWT before signing.
106
106
  *
107
107
  * @example
108
- * useIdentityExtend((claims) => ({
108
+ * useExtendIdentity((claims) => ({
109
109
  * external_id: `shopify_${claims.external_id}`
110
110
  * }))
111
111
  */
112
112
 
113
- type ExtendIdentityHandler = (claims: IdentityBaseClaims) => Record<string, unknown> | Promise<Record<string, unknown>>;
114
- declare const useIdentityExtend: (handler: ExtendIdentityHandler) => void;
113
+ declare const useExtendIdentity: (handler: ExtendIdentityHandler) => void;
114
+
115
+ /**
116
+ * useMessagingEvent — subscribe to messaging events pushed from the host.
117
+ *
118
+ * Supports both wildcard ('postback') and specific ('postback:add_to_cart') subscriptions.
119
+ * Host-side filtering ensures only matching events cross the sandbox boundary;
120
+ * this hook applies a secondary actionName match within the extension.
121
+ */
122
+
123
+ /**
124
+ * Register a callback for messaging events.
125
+ * - 'postback' — receive ALL postback events (requires elevated marketplace review)
126
+ * - 'postback:<actionName>' — receive only events matching actionName
127
+ */
128
+ declare const useMessagingEvent: (eventType: MessagingEventType, handler: MessagingEventHandler) => void;
115
129
 
116
130
  interface SurfaceProps {
117
131
  /** The extension point target ID (e.g., "slot.header") */
@@ -524,4 +538,4 @@ type UseContextDataResult = ContextData & {
524
538
  };
525
539
  declare const useContextData: () => UseContextDataResult;
526
540
 
527
- export { type Store, Surface, createExtension, createStore, ui, useCapabilities, useContextData, useExtension, useIdentityEvent, useIdentityExtend, useStore, useSurfaceContext };
541
+ export { type Store, Surface, createExtension, createStore, ui, useCapabilities, useContextData, useExtendIdentity, useExtension, useIdentityEvent, useMessagingEvent, useStore, useSurfaceContext };
package/dist/index.js CHANGED
@@ -239,12 +239,24 @@ var useIdentityEvent = (eventType, handler) => {
239
239
  return unsubscribe;
240
240
  }, [eventType, handler]);
241
241
  };
242
- var useIdentityExtend = (handler) => {
242
+ var useExtendIdentity = (handler) => {
243
243
  useEffect(() => {
244
244
  const unregister = registerExtendIdentityHandler(handler);
245
245
  return unregister;
246
246
  }, [handler]);
247
247
  };
248
+ var useMessagingEvent = (eventType, handler) => {
249
+ useEffect(() => {
250
+ const unsubscribe = onExtensionEvent((type, payload) => {
251
+ if (type !== "messaging:postback") return;
252
+ const event = payload;
253
+ if (eventType === "postback" || eventType === `postback:${event.actionName}`) {
254
+ handler(event);
255
+ }
256
+ });
257
+ return unsubscribe;
258
+ }, [eventType, handler]);
259
+ };
248
260
  var useExtensionId = () => {
249
261
  const ctx = React2.useContext(ExtensionContext);
250
262
  return ctx?.extensionId ?? "unknown";
@@ -484,4 +496,4 @@ var useContextData = () => {
484
496
  return { ...contextData, loading };
485
497
  };
486
498
 
487
- export { Surface, createExtension, createStore, ui_exports as ui, useCapabilities, useContextData, useExtension, useIdentityEvent, useIdentityExtend, useStore, useSurfaceContext };
499
+ export { Surface, createExtension, createStore, ui_exports as ui, useCapabilities, useContextData, 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.64.0",
3
+ "version": "1.66.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.64.0"
18
+ "@stackable-labs/sdk-extension-contracts": "1.66.0"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "react": ">=18.0.0 <19.0.0",