@salesforce/storefront-next-runtime 0.3.1 → 0.4.0-alpha.1

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.
Files changed (68) hide show
  1. package/README.md +82 -0
  2. package/dist/DesignComponent.js +37 -12
  3. package/dist/DesignComponent.js.map +1 -1
  4. package/dist/DesignContext.js +47 -2
  5. package/dist/DesignContext.js.map +1 -1
  6. package/dist/DesignFrame.js +1 -1
  7. package/dist/DesignRegion.js +1 -1
  8. package/dist/config.d.ts +4 -4
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/custom-global-preferences.d.ts +20 -0
  11. package/dist/custom-global-preferences.d.ts.map +1 -0
  12. package/dist/custom-global-preferences.js +28 -0
  13. package/dist/custom-global-preferences.js.map +1 -0
  14. package/dist/custom-site-preferences.d.ts +20 -0
  15. package/dist/custom-site-preferences.d.ts.map +1 -0
  16. package/dist/custom-site-preferences.js +28 -0
  17. package/dist/custom-site-preferences.js.map +1 -0
  18. package/dist/data-store-custom-global-preferences.d.ts +2 -0
  19. package/dist/data-store-custom-global-preferences.js +6 -0
  20. package/dist/data-store-custom-site-preferences.d.ts +2 -0
  21. package/dist/data-store-custom-site-preferences.js +6 -0
  22. package/dist/data-store-gcp-preferences.d.ts +2 -0
  23. package/dist/data-store-gcp-preferences.js +6 -0
  24. package/dist/data-store.d.ts +97 -0
  25. package/dist/data-store.d.ts.map +1 -0
  26. package/dist/data-store.js +42 -0
  27. package/dist/data-store.js.map +1 -0
  28. package/dist/design-data.d.ts +82 -88
  29. package/dist/design-data.d.ts.map +1 -1
  30. package/dist/design-data.js +95 -57
  31. package/dist/design-data.js.map +1 -1
  32. package/dist/design-messaging.d.ts +2 -2
  33. package/dist/design-react-core.d.ts +2 -2
  34. package/dist/events.d.ts +34 -6
  35. package/dist/events.d.ts.map +1 -1
  36. package/dist/events.js +6 -6
  37. package/dist/events.js.map +1 -1
  38. package/dist/gcp-preferences.d.ts +52 -0
  39. package/dist/gcp-preferences.d.ts.map +1 -0
  40. package/dist/gcp-preferences.js +61 -0
  41. package/dist/gcp-preferences.js.map +1 -0
  42. package/dist/i18n-client.d.ts +38 -0
  43. package/dist/i18n-client.d.ts.map +1 -0
  44. package/dist/i18n-client.js +72 -0
  45. package/dist/i18n-client.js.map +1 -0
  46. package/dist/i18n.d.ts +63 -0
  47. package/dist/i18n.d.ts.map +1 -0
  48. package/dist/i18n.js +98 -0
  49. package/dist/i18n.js.map +1 -0
  50. package/dist/index.d.ts +60 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/messaging-api.js +3 -1
  53. package/dist/messaging-api.js.map +1 -1
  54. package/dist/scapi.d.ts +247 -2
  55. package/dist/scapi.d.ts.map +1 -1
  56. package/dist/scapi.js +1 -1
  57. package/dist/scapi.js.map +1 -1
  58. package/dist/site-context.d.ts +94 -18
  59. package/dist/site-context.d.ts.map +1 -1
  60. package/dist/site-context.js +2 -417
  61. package/dist/site-context2.js +513 -0
  62. package/dist/site-context2.js.map +1 -0
  63. package/dist/types2.d.ts +210 -0
  64. package/dist/types2.d.ts.map +1 -1
  65. package/dist/utils.js +179 -0
  66. package/dist/utils.js.map +1 -0
  67. package/package.json +63 -4
  68. package/dist/site-context.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","names":["defaultInterpolation: InterpolationOptions","cached: ReturnType<typeof createI18nextMiddleware> | null","getLocale"],"sources":["../src/i18n/context.ts","../src/i18n/defaults.ts","../src/i18n/middleware.ts"],"sourcesContent":["/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport i18next, { type i18n } from 'i18next';\nimport { createContext, type RouterContextProvider } from 'react-router';\n\ntype I18nContextValue = {\n getLocale: () => string;\n getI18nextInstance: () => i18n;\n};\n\n// Internal context key — not exported. Use getTranslation() / getLocale() to read,\n// and mockI18nContext() in tests to write.\nexport const i18nextContext = createContext<I18nContextValue | null>(null);\n\n/**\n * Gets the i18next instance and translation function for non-component code.\n * Use `useTranslation` hook for React components. Mirrors the `getConfig`/`useConfig` pattern.\n */\nexport function getTranslation(context?: Readonly<RouterContextProvider>) {\n if (context && typeof window === 'undefined') {\n const i18nextData = context.get(i18nextContext);\n if (!i18nextData) {\n throw new Error('i18next data not found in context. Ensure i18next middleware runs before loaders.');\n }\n\n const i18nextInstance = i18nextData.getI18nextInstance();\n return {\n i18next: i18nextInstance,\n t: i18nextInstance.t,\n };\n }\n\n return {\n i18next,\n t: i18next.t,\n };\n}\n\n/**\n * Gets the active locale string from server context.\n * Returns undefined on the client (locale is on the document element or URL).\n */\nexport function getLocale(context: Readonly<RouterContextProvider>): string | undefined {\n return context.get(i18nextContext)?.getLocale();\n}\n\n/**\n * Sets up a mock i18n context on a RouterContextProvider for use in tests.\n * Replaces the need to import the internal i18nextContext key directly.\n */\nexport function mockI18nContext(\n contextProvider: RouterContextProvider,\n options: { locale?: string; instance?: i18n } = {}\n): void {\n const { locale = 'en-GB', instance = i18next } = options;\n contextProvider.set(i18nextContext, {\n getLocale: () => locale,\n getI18nextInstance: () => instance,\n });\n}\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { InterpolationOptions } from 'i18next';\n\n/** Shared i18next interpolation config. Disables HTML escaping (React handles that) and adds `{{ value, number }}` formatting via `toLocaleString`. */\nexport const defaultInterpolation: InterpolationOptions = {\n escapeValue: false,\n format: (value, format) => {\n if (format === 'number' && typeof value === 'number') {\n return value.toLocaleString();\n }\n return value;\n },\n};\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { initReactI18next } from 'react-i18next';\nimport { createI18nextMiddleware } from 'remix-i18next/middleware';\nimport { type MiddlewareFunction } from 'react-router';\nimport { requestToLocaleMap } from '../site-context/index.js';\nimport { defaultInterpolation } from './defaults.js';\nimport { i18nextContext } from './context.js';\nimport type { I18nMiddlewareConfig } from './types.js';\n\n/**\n * Creates a server-side i18next middleware from the provided config.\n * Lazy-initializes on first request so supported languages can come from runtime config.\n */\nexport function createI18nMiddleware(config: I18nMiddlewareConfig): MiddlewareFunction<Response> {\n const { resources, supportedLanguages, fallbackLanguage, interpolation, plugins = [] } = config;\n\n let cached: ReturnType<typeof createI18nextMiddleware> | null = null;\n\n return async (args, next) => {\n if (!cached) {\n cached = createI18nextMiddleware({\n detection: {\n order: ['custom'],\n // eslint-disable-next-line @typescript-eslint/require-await\n findLocale: async (request: Request) => {\n const localeId = requestToLocaleMap.get(request);\n return localeId ?? null;\n },\n fallbackLanguage,\n supportedLanguages,\n },\n i18next: {\n resources,\n interpolation: { ...defaultInterpolation, ...interpolation },\n },\n plugins: [initReactI18next, ...plugins],\n });\n }\n\n const [originalMiddleware, getLocale, getInstance] = cached;\n\n args.context.set(i18nextContext, {\n getLocale: () => getLocale(args.context),\n getI18nextInstance: () => getInstance(args.context),\n });\n\n return originalMiddleware(args, next);\n };\n}\n"],"mappings":";;;;;;;;AAyBA,MAAa,iBAAiB,cAAuC,KAAK;;;;;AAM1E,SAAgB,eAAe,SAA2C;AACtE,KAAI,WAAW,OAAO,WAAW,aAAa;EAC1C,MAAM,cAAc,QAAQ,IAAI,eAAe;AAC/C,MAAI,CAAC,YACD,OAAM,IAAI,MAAM,oFAAoF;EAGxG,MAAM,kBAAkB,YAAY,oBAAoB;AACxD,SAAO;GACH,SAAS;GACT,GAAG,gBAAgB;GACtB;;AAGL,QAAO;EACH;EACA,GAAG,QAAQ;EACd;;;;;;AAOL,SAAgB,UAAU,SAA8D;AACpF,QAAO,QAAQ,IAAI,eAAe,EAAE,WAAW;;;;;;AAOnD,SAAgB,gBACZ,iBACA,UAAgD,EAAE,EAC9C;CACJ,MAAM,EAAE,SAAS,SAAS,WAAW,YAAY;AACjD,iBAAgB,IAAI,gBAAgB;EAChC,iBAAiB;EACjB,0BAA0B;EAC7B,CAAC;;;;;;ACrDN,MAAaA,uBAA6C;CACtD,aAAa;CACb,SAAS,OAAO,WAAW;AACvB,MAAI,WAAW,YAAY,OAAO,UAAU,SACxC,QAAO,MAAM,gBAAgB;AAEjC,SAAO;;CAEd;;;;;;;;ACCD,SAAgB,qBAAqB,QAA4D;CAC7F,MAAM,EAAE,WAAW,oBAAoB,kBAAkB,eAAe,UAAU,EAAE,KAAK;CAEzF,IAAIC,SAA4D;AAEhE,QAAO,OAAO,MAAM,SAAS;AACzB,MAAI,CAAC,OACD,UAAS,wBAAwB;GAC7B,WAAW;IACP,OAAO,CAAC,SAAS;IAEjB,YAAY,OAAO,YAAqB;AAEpC,YADiB,mBAAmB,IAAI,QAAQ,IAC7B;;IAEvB;IACA;IACH;GACD,SAAS;IACL;IACA,eAAe;KAAE,GAAG;KAAsB,GAAG;KAAe;IAC/D;GACD,SAAS,CAAC,kBAAkB,GAAG,QAAQ;GAC1C,CAAC;EAGN,MAAM,CAAC,oBAAoBC,aAAW,eAAe;AAErD,OAAK,QAAQ,IAAI,gBAAgB;GAC7B,iBAAiBA,YAAU,KAAK,QAAQ;GACxC,0BAA0B,YAAY,KAAK,QAAQ;GACtD,CAAC;AAEF,SAAO,mBAAmB,MAAM,KAAK"}
package/dist/index.d.ts CHANGED
@@ -54,6 +54,10 @@ interface HostToClientConfiguration {
54
54
  * The locale to use on the client.
55
55
  */
56
56
  locale?: string;
57
+ /**
58
+ * The regions by id that are available in the component tree.
59
+ */
60
+ regions: Record<string, RegionInfo>;
57
61
  }
58
62
  /**
59
63
  * The default keys that are forwarded from the host to the client.
@@ -72,6 +76,19 @@ interface ComponentInfo {
72
76
  * The component type.
73
77
  */
74
78
  type: string;
79
+ /**
80
+ * The custom name for the component.
81
+ */
82
+ name?: string;
83
+ }
84
+ /**
85
+ * Information about a region in the component tree.
86
+ */
87
+ interface RegionInfo {
88
+ /**
89
+ * The custom name for the region.
90
+ */
91
+ name: string;
75
92
  }
76
93
  /**
77
94
  * Information about a component type.
@@ -211,6 +228,31 @@ interface ClientAcknowledgedEvent extends WithBaseEvent, HostToClientConfigurati
211
228
  interface ClientConfigurationChangedEvent extends WithBaseEvent, HostToClientConfiguration {
212
229
  eventType: 'ClientConfigurationChanged';
213
230
  }
231
+ /**
232
+ * Emits when a component is updated in the editor.
233
+ *
234
+ * @target client
235
+ * @group Events
236
+ */
237
+ interface ComponentUpdatedEvent extends WithBaseEvent {
238
+ eventType: 'ComponentUpdated';
239
+ /**
240
+ * The unique identifier of the component
241
+ */
242
+ componentId: string;
243
+ /**
244
+ * The type of change that occurred
245
+ */
246
+ changeType: 'name' | 'visibility';
247
+ /**
248
+ * The new value after the change
249
+ */
250
+ newValue: unknown;
251
+ /**
252
+ * The old value before the change (optional)
253
+ */
254
+ oldValue?: unknown;
255
+ }
214
256
  /**
215
257
  * Emits when dragging from the host enters the client window.
216
258
  * @target client
@@ -538,6 +580,7 @@ interface ClientEventNameMapping extends IsomorphicEventNameMapping {
538
580
  HostKeyPressed: HostKeyPressedEvent;
539
581
  ClientAcknowledged: ClientAcknowledgedEvent;
540
582
  ClientConfigurationChanged: ClientConfigurationChangedEvent;
583
+ ComponentUpdated: ComponentUpdatedEvent;
541
584
  ClientWindowDragEntered: ClientWindowDragEnteredEvent;
542
585
  ClientWindowDragMoved: ClientWindowDragMovedEvent;
543
586
  ClientWindowDragExited: ClientWindowDragExitedEvent;
@@ -1136,6 +1179,22 @@ interface HostApi extends IsomorphicApi {
1136
1179
  * ```
1137
1180
  */
1138
1181
  setClientConfiguration(event: EventPayload<ClientConfigurationChangedEvent>): void;
1182
+ /**
1183
+ * Notifies the client that a component has been updated.
1184
+ *
1185
+ * @param event - The component update event containing the component ID, change type, and new value
1186
+ * @stability development
1187
+ *
1188
+ * @example
1189
+ * ```typescript
1190
+ * api.notifyComponentUpdated({
1191
+ * componentId: 'comp-123',
1192
+ * changeType: 'name',
1193
+ * newValue: 'New Component Name'
1194
+ * });
1195
+ * ```
1196
+ */
1197
+ notifyComponentUpdated(event: EventPayload<ComponentUpdatedEvent>): void;
1139
1198
  }
1140
1199
  //#endregion
1141
1200
  //#region src/design/messaging-api/client.d.ts
@@ -1167,5 +1226,5 @@ declare function createHostApi({
1167
1226
  logger
1168
1227
  }: HostConfiguration): HostApi;
1169
1228
  //#endregion
1170
- export { ClientWindowDragExitedEvent as A, ComponentMovedToRegionEvent as B, ClientConfigurationChangedEvent as C, ClientReady as D, ClientPageChangedEvent as E, ComponentDragStartedEvent as F, ErrorEvent as G, ComponentSelectedEvent as H, ComponentFocusedEvent as I, HostToClientConfiguration as J, HostDisconnected as K, ComponentHoveredInEvent as L, ComponentAddedToRegionEvent as M, ComponentDeletedEvent as N, ClientWindowDragDroppedEvent as O, ComponentDeselectedEvent as P, ComponentHoveredOutEvent as R, ClientAcknowledgedEvent as S, ClientInitializedEvent as T, ComponentType as U, ComponentPropertiesChangedEvent as V, DefaultForwardedKeys as W, PageSettingsChangedEvent as X, MediaChangedEvent as Y, WindowScrollChangedEvent as Z, IsomorphicEventNameMapping as _, ClientEventNameMapping as a, WithEventType as b, EventHandler as c, HostApi as d, HostConfiguration as f, IsomorphicConfiguration as g, IsomorphicApi as h, ClientConfiguration as i, ClientWindowDragMovedEvent as j, ClientWindowDragEnteredEvent as k, EventPayload as l, HostMessage as m, createClientApi as n, ClientMessage as o, HostEventNameMapping as p, HostKeyPressedEvent as q, ClientApi as r, ConfigFactory as s, createHostApi as t, EventTypeName as u, MessageEmitter as v, ClientDisconnectedEvent as w, WithMeta as x, Source as y, ComponentInfo as z };
1229
+ export { WindowScrollChangedEvent as $, ClientWindowDragExitedEvent as A, ComponentMovedToRegionEvent as B, ClientConfigurationChangedEvent as C, ClientReady as D, ClientPageChangedEvent as E, ComponentDragStartedEvent as F, DefaultForwardedKeys as G, ComponentSelectedEvent as H, ComponentFocusedEvent as I, HostKeyPressedEvent as J, ErrorEvent as K, ComponentHoveredInEvent as L, ComponentAddedToRegionEvent as M, ComponentDeletedEvent as N, ClientWindowDragDroppedEvent as O, ComponentDeselectedEvent as P, RegionInfo as Q, ComponentHoveredOutEvent as R, ClientAcknowledgedEvent as S, ClientInitializedEvent as T, ComponentType as U, ComponentPropertiesChangedEvent as V, ComponentUpdatedEvent as W, MediaChangedEvent as X, HostToClientConfiguration as Y, PageSettingsChangedEvent as Z, IsomorphicEventNameMapping as _, ClientEventNameMapping as a, WithEventType as b, EventHandler as c, HostApi as d, HostConfiguration as f, IsomorphicConfiguration as g, IsomorphicApi as h, ClientConfiguration as i, ClientWindowDragMovedEvent as j, ClientWindowDragEnteredEvent as k, EventPayload as l, HostMessage as m, createClientApi as n, ClientMessage as o, HostEventNameMapping as p, HostDisconnected as q, ClientApi as r, ConfigFactory as s, createHostApi as t, EventTypeName as u, MessageEmitter as v, ClientDisconnectedEvent as w, WithMeta as x, Source as y, ComponentInfo as z };
1171
1230
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/design/messaging-api/domain-types.ts","../src/design/messaging-api/api-types.ts","../src/design/messaging-api/client.ts","../src/design/messaging-api/host.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/design/messaging-api/domain-types.ts","../src/design/messaging-api/api-types.ts","../src/design/messaging-api/client.ts","../src/design/messaging-api/host.ts"],"sourcesContent":[],"mappings":"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"}
@@ -258,7 +258,8 @@ function createClientApi({ emitter, id, forwardedKeys = [], logger }) {
258
258
  const defaultConfigFactory = () => Promise.resolve({
259
259
  components: {},
260
260
  componentTypes: {},
261
- labels: {}
261
+ labels: {},
262
+ regions: {}
262
263
  });
263
264
  /**
264
265
  * Factory function to create a HostApi instance.
@@ -303,6 +304,7 @@ function createHostApi({ emitter, id, logger }) {
303
304
  notifyError: messenger.toEmitter("Error"),
304
305
  focusComponent: messenger.toEmitter("ComponentFocused"),
305
306
  setClientConfiguration: messenger.toEmitter("ClientConfigurationChanged"),
307
+ notifyComponentUpdated: messenger.toEmitter("ComponentUpdated"),
306
308
  connect: ({ configFactory = defaultConfigFactory, onClientConnected, onClientDisconnected, onError }) => {
307
309
  if (isConnected) disconnect();
308
310
  const { markIsReady, emptyQueue } = messenger.connect();
@@ -1 +1 @@
1
- {"version":3,"file":"messaging-api.js","names":["subscriptions: (() => void)[]","connectionTimeoutId: number | null","hostConfig: HostToClientConfiguration | null","defaultConfigFactory: ConfigFactory","subscriptions: (() => void)[]"],"sources":["../src/design/messaging-api/messenger.ts","../src/design/messaging-api/client.ts","../src/design/messaging-api/host.ts"],"sourcesContent":["/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { EventHandler, MessageEmitter, Source } from './api-types';\n\nexport type Logger = (message: unknown, source: 'host' | 'client') => void;\n\n/**\n * Handles the basic logic for event emitting and receiving between a client and a host.\n *\n * The `Messenger` class manages a single connection to a source event emitter,\n * allowing for the sending and receiving of typed events between two parties (e.g., client and host).\n * It distinguishes events based on their source, ensuring that only events from the opposite source are processed.\n *\n * @template TInMapping - The mapping of incoming event names to their payload types.\n * @template TOutMapping - The mapping of outgoing event names to their payload types.\n */\nexport class Messenger<TInMapping, TOutMapping> {\n private readonly source: Source;\n\n private readonly id: string;\n\n private readonly emitter: MessageEmitter<TInMapping, TOutMapping>;\n\n private readonly handlers = new Map<keyof TInMapping, EventHandler<TInMapping>[]>();\n\n private remoteId?: string;\n\n private readonly logger: Logger;\n\n private _isReady = false;\n\n private unsubscribe?: () => void;\n private queue: { eventType: keyof TOutMapping; data: Omit<TOutMapping[keyof TOutMapping], 'eventType'> }[] = [];\n\n constructor({\n source,\n id,\n emitter,\n logger = () => {\n // Noop\n },\n }: {\n source: Source;\n id: string;\n emitter: MessageEmitter<TInMapping, TOutMapping>;\n logger?: Logger;\n }) {\n this.source = source;\n this.id = id;\n this.emitter = emitter;\n this.logger = logger;\n }\n\n /**\n * Connects the given emitter. This ensures only a single connection to the provided emitter.\n *\n * This method registers a listener for events from the opposite source.\n * It ensures that only events from the opposite source are processed.\n */\n connect(): { markIsReady: () => void; emptyQueue: () => void } {\n // Unsubscribe if this is called again.\n this.unsubscribe?.();\n this._isReady = false;\n\n this.unsubscribe = this.emitter.addEventListener((event) => {\n if (event.meta?.pdMessagingApi && event.meta.source !== this.source) {\n this.logger(event, this.source === 'host' ? 'client' : 'host');\n\n [event.eventType, 'Event'].forEach((eventType) => {\n this.handlers\n .get(eventType as keyof TInMapping)\n ?.forEach((handler) => handler(event as Parameters<EventHandler<TInMapping>>[0]));\n });\n }\n });\n\n return {\n markIsReady: () => {\n this._isReady = true;\n },\n emptyQueue: () => {\n this.queue.forEach(({ eventType, data }) => this.emit(eventType, data));\n this.queue = [];\n },\n };\n }\n\n /**\n * Returns the id of the connected remote.\n */\n getRemoteId(): string | undefined {\n return this.remoteId;\n }\n\n /**\n * Sets the id of the connected remote.\n */\n setRemoteId(remoteId: string | undefined): void {\n this.remoteId = remoteId;\n }\n\n /**\n * Emits an event to the connected remote.\n * This attaches metadata to each event that is emitted.\n *\n * @param eventName - The event to emit.\n * @param data - The data to emit.\n * @param options - The options for the event.\n * @param options.requireRemoteId - Whether to require a remote id to be set before emitting the event.\n */\n emit<TEvent extends keyof TOutMapping>(\n eventType: TEvent,\n data: Omit<TOutMapping[TEvent], 'eventType'>,\n { requireRemoteId = true }: { requireRemoteId?: boolean } = {}\n ): void {\n if (requireRemoteId && !this._isReady) {\n this.queue.push({ eventType, data });\n\n return;\n }\n\n const event = {\n ...data,\n eventType,\n meta: {\n hostId: this.source === 'host' ? this.id : this.remoteId,\n clientId: this.source === 'client' ? this.id : this.remoteId,\n source: this.source,\n pdMessagingApi: true as const,\n },\n };\n\n this.logger(event, this.source);\n\n this.emitter.postMessage(event);\n }\n\n /**\n * Subscribes to an event from the connected remote.\n *\n * @param event - The event to subscribe to.\n * @param handler - The handler to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n on<TEvent extends keyof TInMapping>(event: TEvent, handler: EventHandler<TInMapping, TEvent>): () => void {\n const handlers = this.handlers.get(event) ?? [];\n\n handlers.push(handler as EventHandler<TInMapping>);\n this.handlers.set(event, handlers);\n\n return () => {\n const eventHandlers = this.handlers.get(event) ?? [];\n const index = eventHandlers.indexOf(handler as EventHandler<TInMapping>);\n\n if (index > -1) {\n eventHandlers.splice(index, 1);\n }\n\n if (eventHandlers.length === 0) {\n this.handlers.delete(event);\n }\n };\n }\n\n /**\n * Returns a function that emits an event to the connected remote.\n *\n * @param eventName - The event to emit.\n * @returns A function that emits an event to the connected remote.\n */\n toEmitter<TEvent extends keyof TOutMapping>(\n eventName: TEvent\n ): (event: Omit<TOutMapping[TEvent], 'eventType'>) => void {\n return (event: Omit<TOutMapping[TEvent], 'eventType'>) => {\n this.emit(eventName, event);\n };\n }\n\n toPromise<TEvent extends keyof TInMapping>(eventName: TEvent): Promise<TInMapping[TEvent]> {\n return new Promise<TInMapping[TEvent]>((resolve) => {\n const unsub = this.on(eventName, (event) => {\n unsub();\n resolve(event as unknown as TInMapping[TEvent]);\n });\n });\n }\n\n /**\n * Disconnects the messenger.\n */\n disconnect(): void {\n this.unsubscribe?.();\n this.handlers.clear();\n this.remoteId = undefined;\n this.unsubscribe = undefined;\n }\n\n /**\n * Returns whether the messenger is ready to emit events.\n *\n * @returns Whether the messenger is ready.\n */\n isReady(): boolean {\n return this._isReady;\n }\n}\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n ClientApi,\n ClientConfiguration,\n ClientEventNameMapping,\n HostEventNameMapping,\n WithMeta,\n} from './api-types';\nimport type { HostToClientConfiguration } from './domain-types';\nimport { Messenger } from './messenger';\n\n/**\n * Factory function to create a ClientApi instance.\n *\n * @public\n * @param _config - Configuration object for the client API (currently unused).\n * @returns {ClientApi} An instance of the ClientApi interface.\n */\nexport function createClientApi({ emitter, id, forwardedKeys = [], logger }: ClientConfiguration): ClientApi {\n const messenger = new Messenger<ClientEventNameMapping, HostEventNameMapping>({\n source: 'client',\n id,\n emitter,\n logger,\n });\n const subscriptions: (() => void)[] = [];\n\n let isConnected = false;\n let connectionTimeoutId: number | null = null;\n let hostConfig: HostToClientConfiguration | null = null;\n\n const clearConnectionTimeout = () => {\n if (connectionTimeoutId) {\n clearTimeout(connectionTimeoutId);\n connectionTimeoutId = null;\n }\n };\n\n const disconnect = ({ isReconnecting = false }: { isReconnecting?: boolean } = {}) => {\n clearConnectionTimeout();\n isConnected = false;\n subscriptions.forEach((unsubscribe) => unsubscribe());\n messenger.disconnect();\n messenger.emit('ClientDisconnected', { clientId: id, reconnect: isReconnecting });\n };\n\n const connect = ({\n interval = 1_000,\n timeout = 60_000,\n prepareClient = () => Promise.resolve(),\n onHostConnected,\n onHostDisconnected,\n onError,\n usid,\n }: {\n interval?: number;\n timeout?: number;\n prepareClient?: () => Promise<void>;\n onHostConnected?: (configuration: HostToClientConfiguration) => void;\n onHostDisconnected?: (reconnect: () => void) => void;\n onError?: (error: Error) => void;\n usid?: string;\n } = {}) => {\n if (isConnected) {\n disconnect({ isReconnecting: true });\n }\n\n const expirationTime = Date.now() + timeout;\n const { markIsReady, emptyQueue } = messenger.connect();\n\n subscriptions.push(\n messenger.on('ClientAcknowledged', async (event) => {\n if (event.meta.hostId === messenger.getRemoteId()) {\n // We've already been acknowledged by the host in this case.\n return;\n }\n\n hostConfig = event;\n messenger.setRemoteId(event.meta.hostId);\n clearConnectionTimeout();\n\n try {\n await prepareClient();\n\n markIsReady();\n messenger.emit('ClientReady', { clientId: id });\n onHostConnected?.(hostConfig);\n emptyQueue();\n } catch (error) {\n onError?.(error as Error);\n }\n }),\n messenger.on('ClientConfigurationChanged', (event) => {\n hostConfig = event;\n onHostConnected?.(hostConfig);\n }),\n messenger.on('HostDisconnected', () => {\n disconnect();\n onHostDisconnected?.(() =>\n connect({\n interval,\n timeout,\n prepareClient,\n onHostConnected,\n onHostDisconnected,\n onError,\n usid,\n })\n );\n })\n );\n\n const checkInitialization = () => {\n if (Date.now() > expirationTime) {\n throw new Error(`Timed out after waiting ${timeout}ms for host connection`);\n }\n\n messenger.emit('ClientInitialized', { clientId: id, forwardedKeys, usid }, { requireRemoteId: false });\n connectionTimeoutId = setTimeout(() => checkInitialization(), interval) as unknown as number;\n };\n\n isConnected = true;\n checkInitialization();\n };\n\n return {\n addComponentToRegion: messenger.toEmitter('ComponentAddedToRegion'),\n moveComponentToRegion: messenger.toEmitter('ComponentMovedToRegion'),\n startComponentDrag: messenger.toEmitter('ComponentDragStarted'),\n hoverInToComponent: messenger.toEmitter('ComponentHoveredIn'),\n hoverOutOfComponent: messenger.toEmitter('ComponentHoveredOut'),\n selectComponent: messenger.toEmitter('ComponentSelected'),\n deselectComponent: messenger.toEmitter('ComponentDeselected'),\n deleteComponent: messenger.toEmitter('ComponentDeleted'),\n notifyWindowScrollChanged: messenger.toEmitter('WindowScrollChanged'),\n notifyClientReady: messenger.toEmitter('ClientReady'),\n notifyError: messenger.toEmitter('Error'),\n notifyClientPageChanged: messenger.toEmitter('ClientPageChanged'),\n connect,\n on: <TEvent extends keyof ClientEventNameMapping>(\n eventName: TEvent,\n handler: (handlerEvent: Readonly<WithMeta & ClientEventNameMapping[TEvent]>) => void\n ) =>\n messenger.on(eventName, (event) => {\n // Don't receive any events besides the acknowledged event until the client is ready\n if (eventName === 'ClientAcknowledged' || messenger.isReady()) {\n handler(event);\n }\n }),\n disconnect,\n getRemoteId: () => messenger.getRemoteId(),\n };\n}\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n HostApi,\n HostConfiguration,\n ClientEventNameMapping,\n HostEventNameMapping,\n WithMeta,\n ConfigFactory,\n} from './api-types';\nimport type { ClientInitializedEvent } from './domain-types';\nimport { Messenger } from './messenger';\n\nconst defaultConfigFactory: ConfigFactory = () => Promise.resolve({ components: {}, componentTypes: {}, labels: {} });\n/**\n * Factory function to create a HostApi instance.\n *\n * @public\n * @param {HostConfiguration} config - Configuration object for the host API.\n * @returns {HostApi} An instance of the HostApi interface.\n */\nexport function createHostApi({ emitter, id, logger }: HostConfiguration): HostApi {\n const messenger = new Messenger<HostEventNameMapping, ClientEventNameMapping>({\n source: 'host',\n id,\n emitter,\n logger,\n });\n const subscriptions: (() => void)[] = [];\n let isConnected = false;\n const disconnect = () => {\n isConnected = false;\n messenger.disconnect();\n subscriptions.forEach((unsubscribe) => unsubscribe());\n messenger.emit('HostDisconnected', {});\n };\n\n return {\n addComponentToRegion: messenger.toEmitter('ComponentAddedToRegion'),\n moveComponentToRegion: messenger.toEmitter('ComponentMovedToRegion'),\n startComponentDrag: messenger.toEmitter('ComponentDragStarted'),\n hoverInToComponent: messenger.toEmitter('ComponentHoveredIn'),\n hoverOutOfComponent: messenger.toEmitter('ComponentHoveredOut'),\n selectComponent: messenger.toEmitter('ComponentSelected'),\n deselectComponent: messenger.toEmitter('ComponentDeselected'),\n deleteComponent: messenger.toEmitter('ComponentDeleted'),\n forwardKeyPress: messenger.toEmitter('HostKeyPressed'),\n notifyClientWindowDragDropped: messenger.toEmitter('ClientWindowDragDropped'),\n notifyClientWindowDragEntered: messenger.toEmitter('ClientWindowDragEntered'),\n notifyClientWindowDragMoved: messenger.toEmitter('ClientWindowDragMoved'),\n notifyClientWindowDragExited: messenger.toEmitter('ClientWindowDragExited'),\n setComponentProperties: messenger.toEmitter('ComponentPropertiesChanged'),\n notifyWindowScrollChanged: messenger.toEmitter('WindowScrollChanged'),\n notifyPageSettingsChanged: messenger.toEmitter('PageSettingsChanged'),\n notifyMediaChanged: () => messenger.emit('MediaChangedEvent', {}),\n notifyError: messenger.toEmitter('Error'),\n focusComponent: messenger.toEmitter('ComponentFocused'),\n setClientConfiguration: messenger.toEmitter('ClientConfigurationChanged'),\n connect: ({\n configFactory = defaultConfigFactory,\n onClientConnected,\n onClientDisconnected,\n onError,\n }: {\n configFactory: ConfigFactory;\n onClientConnected?: (clientId: string, config: ClientInitializedEvent) => void;\n onClientDisconnected?: (clientId: string) => void;\n onError?: (error: Error) => void;\n }) => {\n if (isConnected) {\n disconnect();\n }\n\n const { markIsReady, emptyQueue } = messenger.connect();\n\n subscriptions.push(\n messenger.on('ClientDisconnected', (event) => {\n if (event.meta.clientId === messenger.getRemoteId()) {\n messenger.setRemoteId(undefined);\n }\n\n onClientDisconnected?.(event.meta.clientId ?? '');\n })\n );\n\n subscriptions.push(\n messenger.on('ClientInitialized', async (event) => {\n const remoteId = messenger.getRemoteId();\n\n // If the same client tries reconnecting, we should allow it.\n // If there is no remote id, we should allow any client to connect.\n if ((remoteId && event.meta.clientId === remoteId) || !remoteId) {\n messenger.setRemoteId(event.meta.clientId);\n\n try {\n const config = await configFactory();\n\n messenger.emit('ClientAcknowledged', config, { requireRemoteId: false });\n\n const { clientId } = await messenger.toPromise('ClientReady');\n\n if (clientId !== messenger.getRemoteId()) {\n throw new Error('Client id mismatch');\n }\n\n markIsReady();\n onClientConnected?.(clientId, event);\n emptyQueue();\n } catch (error) {\n onError?.(error as Error);\n }\n }\n })\n );\n\n isConnected = true;\n },\n on: <TEvent extends keyof HostEventNameMapping>(\n event: TEvent,\n handler: (handlerEvent: Readonly<WithMeta & HostEventNameMapping[TEvent]>) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => messenger.on(event as any, handler as any),\n disconnect,\n getRemoteId: () => messenger.getRemoteId(),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"messaging-api.js","names":["subscriptions: (() => void)[]","connectionTimeoutId: number | null","hostConfig: HostToClientConfiguration | null","defaultConfigFactory: ConfigFactory","subscriptions: (() => void)[]"],"sources":["../src/design/messaging-api/messenger.ts","../src/design/messaging-api/client.ts","../src/design/messaging-api/host.ts"],"sourcesContent":["/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { EventHandler, MessageEmitter, Source } from './api-types';\n\nexport type Logger = (message: unknown, source: 'host' | 'client') => void;\n\n/**\n * Handles the basic logic for event emitting and receiving between a client and a host.\n *\n * The `Messenger` class manages a single connection to a source event emitter,\n * allowing for the sending and receiving of typed events between two parties (e.g., client and host).\n * It distinguishes events based on their source, ensuring that only events from the opposite source are processed.\n *\n * @template TInMapping - The mapping of incoming event names to their payload types.\n * @template TOutMapping - The mapping of outgoing event names to their payload types.\n */\nexport class Messenger<TInMapping, TOutMapping> {\n private readonly source: Source;\n\n private readonly id: string;\n\n private readonly emitter: MessageEmitter<TInMapping, TOutMapping>;\n\n private readonly handlers = new Map<keyof TInMapping, EventHandler<TInMapping>[]>();\n\n private remoteId?: string;\n\n private readonly logger: Logger;\n\n private _isReady = false;\n\n private unsubscribe?: () => void;\n private queue: { eventType: keyof TOutMapping; data: Omit<TOutMapping[keyof TOutMapping], 'eventType'> }[] = [];\n\n constructor({\n source,\n id,\n emitter,\n logger = () => {\n // Noop\n },\n }: {\n source: Source;\n id: string;\n emitter: MessageEmitter<TInMapping, TOutMapping>;\n logger?: Logger;\n }) {\n this.source = source;\n this.id = id;\n this.emitter = emitter;\n this.logger = logger;\n }\n\n /**\n * Connects the given emitter. This ensures only a single connection to the provided emitter.\n *\n * This method registers a listener for events from the opposite source.\n * It ensures that only events from the opposite source are processed.\n */\n connect(): { markIsReady: () => void; emptyQueue: () => void } {\n // Unsubscribe if this is called again.\n this.unsubscribe?.();\n this._isReady = false;\n\n this.unsubscribe = this.emitter.addEventListener((event) => {\n if (event.meta?.pdMessagingApi && event.meta.source !== this.source) {\n this.logger(event, this.source === 'host' ? 'client' : 'host');\n\n [event.eventType, 'Event'].forEach((eventType) => {\n this.handlers\n .get(eventType as keyof TInMapping)\n ?.forEach((handler) => handler(event as Parameters<EventHandler<TInMapping>>[0]));\n });\n }\n });\n\n return {\n markIsReady: () => {\n this._isReady = true;\n },\n emptyQueue: () => {\n this.queue.forEach(({ eventType, data }) => this.emit(eventType, data));\n this.queue = [];\n },\n };\n }\n\n /**\n * Returns the id of the connected remote.\n */\n getRemoteId(): string | undefined {\n return this.remoteId;\n }\n\n /**\n * Sets the id of the connected remote.\n */\n setRemoteId(remoteId: string | undefined): void {\n this.remoteId = remoteId;\n }\n\n /**\n * Emits an event to the connected remote.\n * This attaches metadata to each event that is emitted.\n *\n * @param eventName - The event to emit.\n * @param data - The data to emit.\n * @param options - The options for the event.\n * @param options.requireRemoteId - Whether to require a remote id to be set before emitting the event.\n */\n emit<TEvent extends keyof TOutMapping>(\n eventType: TEvent,\n data: Omit<TOutMapping[TEvent], 'eventType'>,\n { requireRemoteId = true }: { requireRemoteId?: boolean } = {}\n ): void {\n if (requireRemoteId && !this._isReady) {\n this.queue.push({ eventType, data });\n\n return;\n }\n\n const event = {\n ...data,\n eventType,\n meta: {\n hostId: this.source === 'host' ? this.id : this.remoteId,\n clientId: this.source === 'client' ? this.id : this.remoteId,\n source: this.source,\n pdMessagingApi: true as const,\n },\n };\n\n this.logger(event, this.source);\n\n this.emitter.postMessage(event);\n }\n\n /**\n * Subscribes to an event from the connected remote.\n *\n * @param event - The event to subscribe to.\n * @param handler - The handler to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n on<TEvent extends keyof TInMapping>(event: TEvent, handler: EventHandler<TInMapping, TEvent>): () => void {\n const handlers = this.handlers.get(event) ?? [];\n\n handlers.push(handler as EventHandler<TInMapping>);\n this.handlers.set(event, handlers);\n\n return () => {\n const eventHandlers = this.handlers.get(event) ?? [];\n const index = eventHandlers.indexOf(handler as EventHandler<TInMapping>);\n\n if (index > -1) {\n eventHandlers.splice(index, 1);\n }\n\n if (eventHandlers.length === 0) {\n this.handlers.delete(event);\n }\n };\n }\n\n /**\n * Returns a function that emits an event to the connected remote.\n *\n * @param eventName - The event to emit.\n * @returns A function that emits an event to the connected remote.\n */\n toEmitter<TEvent extends keyof TOutMapping>(\n eventName: TEvent\n ): (event: Omit<TOutMapping[TEvent], 'eventType'>) => void {\n return (event: Omit<TOutMapping[TEvent], 'eventType'>) => {\n this.emit(eventName, event);\n };\n }\n\n toPromise<TEvent extends keyof TInMapping>(eventName: TEvent): Promise<TInMapping[TEvent]> {\n return new Promise<TInMapping[TEvent]>((resolve) => {\n const unsub = this.on(eventName, (event) => {\n unsub();\n resolve(event as unknown as TInMapping[TEvent]);\n });\n });\n }\n\n /**\n * Disconnects the messenger.\n */\n disconnect(): void {\n this.unsubscribe?.();\n this.handlers.clear();\n this.remoteId = undefined;\n this.unsubscribe = undefined;\n }\n\n /**\n * Returns whether the messenger is ready to emit events.\n *\n * @returns Whether the messenger is ready.\n */\n isReady(): boolean {\n return this._isReady;\n }\n}\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n ClientApi,\n ClientConfiguration,\n ClientEventNameMapping,\n HostEventNameMapping,\n WithMeta,\n} from './api-types';\nimport type { HostToClientConfiguration } from './domain-types';\nimport { Messenger } from './messenger';\n\n/**\n * Factory function to create a ClientApi instance.\n *\n * @public\n * @param _config - Configuration object for the client API (currently unused).\n * @returns {ClientApi} An instance of the ClientApi interface.\n */\nexport function createClientApi({ emitter, id, forwardedKeys = [], logger }: ClientConfiguration): ClientApi {\n const messenger = new Messenger<ClientEventNameMapping, HostEventNameMapping>({\n source: 'client',\n id,\n emitter,\n logger,\n });\n const subscriptions: (() => void)[] = [];\n\n let isConnected = false;\n let connectionTimeoutId: number | null = null;\n let hostConfig: HostToClientConfiguration | null = null;\n\n const clearConnectionTimeout = () => {\n if (connectionTimeoutId) {\n clearTimeout(connectionTimeoutId);\n connectionTimeoutId = null;\n }\n };\n\n const disconnect = ({ isReconnecting = false }: { isReconnecting?: boolean } = {}) => {\n clearConnectionTimeout();\n isConnected = false;\n subscriptions.forEach((unsubscribe) => unsubscribe());\n messenger.disconnect();\n messenger.emit('ClientDisconnected', { clientId: id, reconnect: isReconnecting });\n };\n\n const connect = ({\n interval = 1_000,\n timeout = 60_000,\n prepareClient = () => Promise.resolve(),\n onHostConnected,\n onHostDisconnected,\n onError,\n usid,\n }: {\n interval?: number;\n timeout?: number;\n prepareClient?: () => Promise<void>;\n onHostConnected?: (configuration: HostToClientConfiguration) => void;\n onHostDisconnected?: (reconnect: () => void) => void;\n onError?: (error: Error) => void;\n usid?: string;\n } = {}) => {\n if (isConnected) {\n disconnect({ isReconnecting: true });\n }\n\n const expirationTime = Date.now() + timeout;\n const { markIsReady, emptyQueue } = messenger.connect();\n\n subscriptions.push(\n messenger.on('ClientAcknowledged', async (event) => {\n if (event.meta.hostId === messenger.getRemoteId()) {\n // We've already been acknowledged by the host in this case.\n return;\n }\n\n hostConfig = event;\n messenger.setRemoteId(event.meta.hostId);\n clearConnectionTimeout();\n\n try {\n await prepareClient();\n\n markIsReady();\n messenger.emit('ClientReady', { clientId: id });\n onHostConnected?.(hostConfig);\n emptyQueue();\n } catch (error) {\n onError?.(error as Error);\n }\n }),\n messenger.on('ClientConfigurationChanged', (event) => {\n hostConfig = event;\n onHostConnected?.(hostConfig);\n }),\n messenger.on('HostDisconnected', () => {\n disconnect();\n onHostDisconnected?.(() =>\n connect({\n interval,\n timeout,\n prepareClient,\n onHostConnected,\n onHostDisconnected,\n onError,\n usid,\n })\n );\n })\n );\n\n const checkInitialization = () => {\n if (Date.now() > expirationTime) {\n throw new Error(`Timed out after waiting ${timeout}ms for host connection`);\n }\n\n messenger.emit('ClientInitialized', { clientId: id, forwardedKeys, usid }, { requireRemoteId: false });\n connectionTimeoutId = setTimeout(() => checkInitialization(), interval) as unknown as number;\n };\n\n isConnected = true;\n checkInitialization();\n };\n\n return {\n addComponentToRegion: messenger.toEmitter('ComponentAddedToRegion'),\n moveComponentToRegion: messenger.toEmitter('ComponentMovedToRegion'),\n startComponentDrag: messenger.toEmitter('ComponentDragStarted'),\n hoverInToComponent: messenger.toEmitter('ComponentHoveredIn'),\n hoverOutOfComponent: messenger.toEmitter('ComponentHoveredOut'),\n selectComponent: messenger.toEmitter('ComponentSelected'),\n deselectComponent: messenger.toEmitter('ComponentDeselected'),\n deleteComponent: messenger.toEmitter('ComponentDeleted'),\n notifyWindowScrollChanged: messenger.toEmitter('WindowScrollChanged'),\n notifyClientReady: messenger.toEmitter('ClientReady'),\n notifyError: messenger.toEmitter('Error'),\n notifyClientPageChanged: messenger.toEmitter('ClientPageChanged'),\n connect,\n on: <TEvent extends keyof ClientEventNameMapping>(\n eventName: TEvent,\n handler: (handlerEvent: Readonly<WithMeta & ClientEventNameMapping[TEvent]>) => void\n ) =>\n messenger.on(eventName, (event) => {\n // Don't receive any events besides the acknowledged event until the client is ready\n if (eventName === 'ClientAcknowledged' || messenger.isReady()) {\n handler(event);\n }\n }),\n disconnect,\n getRemoteId: () => messenger.getRemoteId(),\n };\n}\n","/**\n * Copyright 2026 Salesforce, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {\n HostApi,\n HostConfiguration,\n ClientEventNameMapping,\n HostEventNameMapping,\n WithMeta,\n ConfigFactory,\n} from './api-types';\nimport type { ClientInitializedEvent } from './domain-types';\nimport { Messenger } from './messenger';\n\nconst defaultConfigFactory: ConfigFactory = () =>\n Promise.resolve({ components: {}, componentTypes: {}, labels: {}, regions: {} });\n/**\n * Factory function to create a HostApi instance.\n *\n * @public\n * @param {HostConfiguration} config - Configuration object for the host API.\n * @returns {HostApi} An instance of the HostApi interface.\n */\nexport function createHostApi({ emitter, id, logger }: HostConfiguration): HostApi {\n const messenger = new Messenger<HostEventNameMapping, ClientEventNameMapping>({\n source: 'host',\n id,\n emitter,\n logger,\n });\n const subscriptions: (() => void)[] = [];\n let isConnected = false;\n const disconnect = () => {\n isConnected = false;\n messenger.disconnect();\n subscriptions.forEach((unsubscribe) => unsubscribe());\n messenger.emit('HostDisconnected', {});\n };\n\n return {\n addComponentToRegion: messenger.toEmitter('ComponentAddedToRegion'),\n moveComponentToRegion: messenger.toEmitter('ComponentMovedToRegion'),\n startComponentDrag: messenger.toEmitter('ComponentDragStarted'),\n hoverInToComponent: messenger.toEmitter('ComponentHoveredIn'),\n hoverOutOfComponent: messenger.toEmitter('ComponentHoveredOut'),\n selectComponent: messenger.toEmitter('ComponentSelected'),\n deselectComponent: messenger.toEmitter('ComponentDeselected'),\n deleteComponent: messenger.toEmitter('ComponentDeleted'),\n forwardKeyPress: messenger.toEmitter('HostKeyPressed'),\n notifyClientWindowDragDropped: messenger.toEmitter('ClientWindowDragDropped'),\n notifyClientWindowDragEntered: messenger.toEmitter('ClientWindowDragEntered'),\n notifyClientWindowDragMoved: messenger.toEmitter('ClientWindowDragMoved'),\n notifyClientWindowDragExited: messenger.toEmitter('ClientWindowDragExited'),\n setComponentProperties: messenger.toEmitter('ComponentPropertiesChanged'),\n notifyWindowScrollChanged: messenger.toEmitter('WindowScrollChanged'),\n notifyPageSettingsChanged: messenger.toEmitter('PageSettingsChanged'),\n notifyMediaChanged: () => messenger.emit('MediaChangedEvent', {}),\n notifyError: messenger.toEmitter('Error'),\n focusComponent: messenger.toEmitter('ComponentFocused'),\n setClientConfiguration: messenger.toEmitter('ClientConfigurationChanged'),\n notifyComponentUpdated: messenger.toEmitter('ComponentUpdated'),\n connect: ({\n configFactory = defaultConfigFactory,\n onClientConnected,\n onClientDisconnected,\n onError,\n }: {\n configFactory: ConfigFactory;\n onClientConnected?: (clientId: string, config: ClientInitializedEvent) => void;\n onClientDisconnected?: (clientId: string) => void;\n onError?: (error: Error) => void;\n }) => {\n if (isConnected) {\n disconnect();\n }\n\n const { markIsReady, emptyQueue } = messenger.connect();\n\n subscriptions.push(\n messenger.on('ClientDisconnected', (event) => {\n if (event.meta.clientId === messenger.getRemoteId()) {\n messenger.setRemoteId(undefined);\n }\n\n onClientDisconnected?.(event.meta.clientId ?? '');\n })\n );\n\n subscriptions.push(\n messenger.on('ClientInitialized', async (event) => {\n const remoteId = messenger.getRemoteId();\n\n // If the same client tries reconnecting, we should allow it.\n // If there is no remote id, we should allow any client to connect.\n if ((remoteId && event.meta.clientId === remoteId) || !remoteId) {\n messenger.setRemoteId(event.meta.clientId);\n\n try {\n const config = await configFactory();\n\n messenger.emit('ClientAcknowledged', config, { requireRemoteId: false });\n\n const { clientId } = await messenger.toPromise('ClientReady');\n\n if (clientId !== messenger.getRemoteId()) {\n throw new Error('Client id mismatch');\n }\n\n markIsReady();\n onClientConnected?.(clientId, event);\n emptyQueue();\n } catch (error) {\n onError?.(error as Error);\n }\n }\n })\n );\n\n isConnected = true;\n },\n on: <TEvent extends keyof HostEventNameMapping>(\n event: TEvent,\n handler: (handlerEvent: Readonly<WithMeta & HostEventNameMapping[TEvent]>) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => messenger.on(event as any, handler as any),\n disconnect,\n getRemoteId: () => messenger.getRemoteId(),\n };\n}\n"],"mappings":"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"}
package/dist/scapi.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Client, ClientOptions, FetchOptions, FetchResponse, Middleware } from "openapi-fetch";
1
+ import createOpenApiFetchClient, { Client, ClientOptions, FetchOptions, FetchResponse, Middleware } from "openapi-fetch";
2
2
  export * from "openapi-fetch";
3
3
 
4
4
  //#region src/scapi-client/generated/shopper-baskets-v1.d.ts
@@ -16538,6 +16538,33 @@ interface paths$9 {
16538
16538
  patch?: never;
16539
16539
  trace?: never;
16540
16540
  };
16541
+ "/organizations/{organizationId}/qualifiers/resolve": {
16542
+ parameters: {
16543
+ query?: never;
16544
+ header?: never;
16545
+ path?: never;
16546
+ cookie?: never;
16547
+ };
16548
+ get?: never;
16549
+ put?: never;
16550
+ /**
16551
+ * Resolve qualifiers for customer groups, campaign promotions, and data binding contexts.
16552
+ * @description Resolves a list of customer groups, campaigns, promotions, and data bindings for the given user.
16553
+ *
16554
+ * The endpoint takes each value and determines whether the user is active for the item:
16555
+ * - Customer groups are verified against the user's qualification via the EffectiveContext.
16556
+ * - Campaign qualifiers are checked to determine if the user is applicable for each campaign and promotion.
16557
+ * - Data bindings are resolved by fetching the requested records from their respective data providers.
16558
+ *
16559
+ * Returns a boolean result for each provided qualifier and resolved data binding objects grouped by provider type and record identifier. If a qualifier cannot be validated, `false` is returned for that item. If a data binding cannot be resolved, it is omitted from the response.
16560
+ */
16561
+ post: operations$25["resolveQualifiers"];
16562
+ delete?: never;
16563
+ options?: never;
16564
+ head?: never;
16565
+ patch?: never;
16566
+ trace?: never;
16567
+ };
16541
16568
  }
16542
16569
  interface components$9 {
16543
16570
  schemas: {
@@ -16608,6 +16635,24 @@ interface components$9 {
16608
16635
  * @example commerce_assets.carousel
16609
16636
  */
16610
16637
  typeId: string;
16638
+ /**
16639
+ * Component Name
16640
+ * @description Display name of the component.
16641
+ * @example Topseller Carousel
16642
+ */
16643
+ name?: string;
16644
+ /**
16645
+ * Fragment
16646
+ * @description Indicates whether the component is a fragment. True if the component is a fragment, otherwise false.
16647
+ * @example false
16648
+ */
16649
+ fragment?: boolean;
16650
+ /**
16651
+ * Content Link UUID
16652
+ * @description Represents a globally unique identifier for every instance of a content component (or fragment) rendered on a page.
16653
+ * @example 0e1f329d4ac66ff2c3bbf70301
16654
+ */
16655
+ contentLinkUuid?: string;
16611
16656
  /**
16612
16657
  * Component Data
16613
16658
  * @description The configuration data assigned to the component.
@@ -16617,6 +16662,18 @@ interface components$9 {
16617
16662
  * }
16618
16663
  */
16619
16664
  data?: Record<string, never>;
16665
+ /**
16666
+ * Localized
16667
+ * @description Whether the component has been localized with content in the current locale. If false, the components content will fallback to the default locale.
16668
+ * @example true
16669
+ */
16670
+ localized?: boolean;
16671
+ /**
16672
+ * Visibility
16673
+ * @description Whether the component is visible based on the current visiblity rules and context.
16674
+ * @example true
16675
+ */
16676
+ visible?: boolean;
16620
16677
  /**
16621
16678
  * Custom Component Data
16622
16679
  * @description Any custom data added by the custom code for this component.
@@ -17036,6 +17093,115 @@ interface components$9 {
17036
17093
  */
17037
17094
  data: components$9["schemas"]["ContentFolder"][];
17038
17095
  } & components$9["schemas"]["ResultBase"];
17096
+ /** @description A data binding requirement specifying a provider type and record identifier to resolve. */
17097
+ DataBindingRequirement: {
17098
+ /**
17099
+ * Type
17100
+ * @description The data provider type identifier.
17101
+ * @example content_asset
17102
+ */
17103
+ type: string;
17104
+ /**
17105
+ * ID
17106
+ * @description The record identifier to resolve from the data provider.
17107
+ * @example homepage-banner
17108
+ */
17109
+ id: string;
17110
+ };
17111
+ /**
17112
+ * @description A resolved data binding object containing arbitrary key-value pairs returned by the data provider for a specific record. The shape of the object is determined by the data provider and may include any user-defined fields.
17113
+ * @example {
17114
+ * "title": "Winter Sale",
17115
+ * "body": "<div>Shop our winter collection</div>",
17116
+ * "c_showCountdown": true,
17117
+ * "c_endDate": "2026-03-31T23:59:59Z"
17118
+ * }
17119
+ */
17120
+ ResolvedDataBinding: {
17121
+ [key: string]: unknown;
17122
+ };
17123
+ /** @description A campaign and promotion pair to resolve qualification for. */
17124
+ CampaignQualifier: {
17125
+ /**
17126
+ * Campaign ID
17127
+ * @description The identifier of the campaign.
17128
+ * @example my-campaign
17129
+ */
17130
+ campaignId: string;
17131
+ /**
17132
+ * Promotion ID
17133
+ * @description The identifier of the promotion within the campaign.
17134
+ * @example my-promotion
17135
+ */
17136
+ promotionId: string;
17137
+ };
17138
+ /** @description Request body for resolving customer group qualifications, campaign promotion eligibility, and data bindings. All fields are optional. An empty body is valid and returns an empty response. */
17139
+ QualifierResolveRequest: {
17140
+ /**
17141
+ * Customer Groups
17142
+ * @description List of customer group identifiers to resolve qualification for.
17143
+ * @example [
17144
+ * "VIP"
17145
+ * ]
17146
+ */
17147
+ customerGroups?: string[];
17148
+ /**
17149
+ * Campaign Qualifiers
17150
+ * @description List of campaign and promotion pairs to resolve qualification for.
17151
+ */
17152
+ campaignQualifiers?: components$9["schemas"]["CampaignQualifier"][];
17153
+ /**
17154
+ * Data Bindings
17155
+ * @description List of data binding requirements to resolve, each specifying a provider type and record identifier.
17156
+ */
17157
+ dataBindings?: components$9["schemas"]["DataBindingRequirement"][];
17158
+ };
17159
+ /** @description Response containing the resolved qualification results for customer groups, campaign qualifiers, and data bindings. */
17160
+ QualifierResolveResponse: {
17161
+ /**
17162
+ * Customer Groups
17163
+ * @description Map of customer group identifiers to their qualification status. True if the user is qualified, false otherwise.
17164
+ * @example {
17165
+ * "VIP": true
17166
+ * }
17167
+ */
17168
+ customerGroups?: {
17169
+ [key: string]: boolean;
17170
+ };
17171
+ /**
17172
+ * Campaign Qualifiers
17173
+ * @description Map of campaign identifiers to a map of promotion identifiers and their qualification status. True if the user is applicable, false otherwise.
17174
+ * @example {
17175
+ * "my-campaign": {
17176
+ * "my-promotion": false
17177
+ * }
17178
+ * }
17179
+ */
17180
+ campaignQualifiers?: {
17181
+ [key: string]: {
17182
+ [key: string]: boolean;
17183
+ };
17184
+ };
17185
+ /**
17186
+ * Data Bindings
17187
+ * @description Resolved data binding objects grouped by provider type, then by record identifier. Used by the expression resolver to evaluate attribute expressions.
17188
+ * @example {
17189
+ * "content_asset": {
17190
+ * "homepage-banner": {
17191
+ * "title": "Winter Sale",
17192
+ * "body": "<div>Shop our winter collection</div>",
17193
+ * "c_showCountdown": true,
17194
+ * "c_endDate": "2026-03-31T23:59:59Z"
17195
+ * }
17196
+ * }
17197
+ * }
17198
+ */
17199
+ dataBindings?: {
17200
+ [key: string]: {
17201
+ [key: string]: components$9["schemas"]["ResolvedDataBinding"];
17202
+ };
17203
+ };
17204
+ };
17039
17205
  };
17040
17206
  responses: {
17041
17207
  /** @description Your access token is invalid or expired and can’t be used to identify a user. */
@@ -17491,6 +17657,50 @@ interface operations$25 {
17491
17657
  403: components$9["responses"]["403forbidden"];
17492
17658
  };
17493
17659
  };
17660
+ resolveQualifiers: {
17661
+ parameters: {
17662
+ query: {
17663
+ /** @description The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites. */
17664
+ siteId: components$9["parameters"]["siteId"];
17665
+ /** @description A descriptor for a geographical region by both a language and country code. By combining these two, regional differences in a language can be addressed, such as with the request header parameter `Accept-Language` following [RFC 2616](https://tools.ietf.org/html/rfc2616) & [RFC 1766](https://tools.ietf.org/html/rfc1766). This can also just refer to a language code, also RFC 2616/1766 compliant, as a default if there is no specific match for a country. Finally, can also be used to define default behavior if there is no locale specified. */
17666
+ locale?: components$9["parameters"]["locale"];
17667
+ };
17668
+ header?: never;
17669
+ path: {
17670
+ /**
17671
+ * @description An identifier for the organization the request is being made by
17672
+ * @example f_ecom_zzxy_prd
17673
+ */
17674
+ organizationId: components$9["parameters"]["organizationId"];
17675
+ };
17676
+ cookie?: never;
17677
+ };
17678
+ requestBody: {
17679
+ content: {
17680
+ "application/json": components$9["schemas"]["QualifierResolveRequest"];
17681
+ };
17682
+ };
17683
+ responses: {
17684
+ /** @description Success. All qualifiers have been resolved. */
17685
+ 200: {
17686
+ headers: {
17687
+ [name: string]: unknown;
17688
+ };
17689
+ content: {
17690
+ "application/json": components$9["schemas"]["QualifierResolveResponse"];
17691
+ };
17692
+ };
17693
+ /** @description Bad Request */
17694
+ 400: {
17695
+ headers: {
17696
+ [name: string]: unknown;
17697
+ };
17698
+ content: {
17699
+ "application/problem+json": components$9["schemas"]["ErrorResponse"];
17700
+ };
17701
+ };
17702
+ };
17703
+ };
17494
17704
  }
17495
17705
  type WithRequired$2<T, K$1 extends keyof T> = T & { [P in K$1]-?: T[P] };
17496
17706
  //#endregion
@@ -27648,6 +27858,24 @@ type ProxyClient<TClient extends Client<any, any>, TOperations extends Operation
27648
27858
  * // OperationsOnly has getCategories, createBasket, etc., but NOT use or eject
27649
27859
  */
27650
27860
  type OperationMethodsOnly<T> = T extends ProxyClient<any, any> ? Omit<T, 'use' | 'eject'> : never;
27861
+ /**
27862
+ * Utility type for extending the base client types with custom API clients.
27863
+ *
27864
+ * Used by template projects to extend the base `Clients` type with
27865
+ * custom API clients, adding new client entries to the type.
27866
+ *
27867
+ * @typeParam TBase - The base Clients type from the SDK
27868
+ * @typeParam TCustom - Object type with custom client entries
27869
+ *
27870
+ * @example
27871
+ * ```typescript
27872
+ * type AppClients = MergeClients<Clients, {
27873
+ * loyalty: ProxyClient<Client<LoyaltyPaths>, typeof loyaltyOps>;
27874
+ * storeInventory: ProxyClient<Client<InventoryPaths>, typeof inventoryOps>;
27875
+ * }>;
27876
+ * ```
27877
+ */
27878
+ type MergeClients<TBase, TCustom extends Record<string, unknown>> = Omit<TBase, keyof TCustom> & TCustom;
27651
27879
  //#endregion
27652
27880
  //#region src/scapi-client/generated/shopper-login-v1.operations.d.ts
27653
27881
  declare const operations$8: {
@@ -28885,6 +29113,11 @@ declare const operations$6: {
28885
29113
  readonly b: "/organizations/{organizationId}";
28886
29114
  readonly s: "/folders";
28887
29115
  };
29116
+ readonly resolveQualifiers: {
29117
+ readonly m: "POST";
29118
+ readonly b: "/organizations/{organizationId}";
29119
+ readonly s: "/qualifiers/resolve";
29120
+ };
28888
29121
  };
28889
29122
  //#endregion
28890
29123
  //#region src/scapi-client/generated/shopper-gift-certificates-v1.operations.d.ts
@@ -29346,5 +29579,17 @@ declare class AuthTokenInvalidError extends Error {
29346
29579
  */
29347
29580
  declare const SLAS_AUTH_ENDPOINTS: readonly ["/oauth2/token", "/oauth2/authorize", "/oauth2/logout", "/oauth2/login", "/oauth2/passwordless", "/oauth2/password", "/oauth2/session-bridge", "/oauth2/trusted-agent", "/oauth2/trusted-system", "/oauth2/revoke", "/oauth2/introspect"];
29348
29581
  //#endregion
29349
- export { ApiError, type AuthConfig, type AuthNamespace, type AuthResponse, AuthTokenInvalidError, type Basket, type BasketHelpersConfig, type BasketHelpersNamespace, Clients, CommerceApiClientConfig, CreateClientOptions, type ErrorDetail, type GetOrCreateBasketOptions, GlobalRequestParameters, type LoginAsGuestOptions, type LoginWithCredentialsOptions, type LogoutOptions, type OperationMethodsOnly, type PasswordRequestResetOptions, type PasswordResetOptions, type PasswordlessAuthorizeOptions, type PasswordlessExchangeTokenOptions, type RefreshTokenOptions, SLAS_AUTH_ENDPOINTS, ShopperBasketsV1, ShopperBasketsV2, type ShopperBasketsV2Client, ShopperConfigurations, ShopperConsents, ShopperContext, ShopperCustomers, ShopperExperience, ShopperGiftCertificates, ShopperLogin, ShopperOrders, ShopperPayments, ShopperProducts, ShopperPromotions, ShopperSearch, ShopperSeo, ShopperStores, type SocialAuthorizationUrlResult, type SocialExchangeCodeOptions, type SocialGetAuthorizationUrlOptions, type TokenResponse, createBasketHelpers, createClient, createCommerceApiClients };
29582
+ //#region src/scapi-client/defaultQuerySerializer.d.ts
29583
+ /**
29584
+ * Default query serializer for Commerce Cloud APIs
29585
+ * - Most arrays use comma-separated format (explode: false)
29586
+ * e.g., expand=promotions,variations,prices
29587
+ * - Certain parameters use repeated format (explode: true)
29588
+ * e.g., refine=price=(0..10)&refine=c_refinementColor=green
29589
+ * - Some parameters are automatically grouped by attribute ID before serialization
29590
+ * e.g., ['c_color=Black', 'c_color=Green'] => 'c_color=Black|Green'
29591
+ */
29592
+ declare function defaultQuerySerializer(queryParams: Record<string, unknown>): string;
29593
+ //#endregion
29594
+ export { ApiError, type AuthConfig, type AuthNamespace, type AuthResponse, AuthTokenInvalidError, type Basket, type BasketHelpersConfig, type BasketHelpersNamespace, Clients, CommerceApiClientConfig, CreateClientOptions, type ErrorDetail, type GetOrCreateBasketOptions, GlobalRequestParameters, type LoginAsGuestOptions, type LoginWithCredentialsOptions, type LogoutOptions, type MergeClients, type OperationInfo, type OperationMap, type OperationMethodsOnly, type PasswordRequestResetOptions, type PasswordResetOptions, type PasswordlessAuthorizeOptions, type PasswordlessExchangeTokenOptions, type ProxyClient, type RefreshTokenOptions, SLAS_AUTH_ENDPOINTS, ShopperBasketsV1, ShopperBasketsV2, type ShopperBasketsV2Client, ShopperConfigurations, ShopperConsents, ShopperContext, ShopperCustomers, ShopperExperience, ShopperGiftCertificates, ShopperLogin, ShopperOrders, ShopperPayments, ShopperProducts, ShopperPromotions, ShopperSearch, ShopperSeo, ShopperStores, type SocialAuthorizationUrlResult, type SocialExchangeCodeOptions, type SocialGetAuthorizationUrlOptions, type TokenResponse, createBasketHelpers, createClient, createCommerceApiClients, createOpenApiFetchClient, defaultQuerySerializer };
29350
29595
  //# sourceMappingURL=scapi.d.ts.map