@worthai/onboarding-sdk 2.0.3 → 2.0.5

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.js CHANGED
@@ -1,7 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  const createChildSite = /* @__PURE__ */ __name((args) => {
4
- const { origin, initialRoute = "", mode } = args;
4
+ const { origin, initialRoute = "", mode, autoResize = true } = args;
5
+ const app = args.window || window;
5
6
  const queryParams = args.queryParams;
6
7
  const iframe = document.createElement("iframe");
7
8
  const setMode = /* @__PURE__ */ __name((mode2) => {
@@ -29,7 +30,7 @@ const createChildSite = /* @__PURE__ */ __name((args) => {
29
30
  }, "buildIframeSrc");
30
31
  const subscribe = /* @__PURE__ */ __name((callback) => {
31
32
  const handler = /* @__PURE__ */ __name((event) => {
32
- if (event.origin !== origin && event.origin !== window.location.origin) {
33
+ if (event.origin !== origin && event.origin !== app.location.origin) {
33
34
  console.warn(
34
35
  "Blocked message from unauthorized origin:",
35
36
  `Given: ${event.origin}`,
@@ -39,9 +40,9 @@ const createChildSite = /* @__PURE__ */ __name((args) => {
39
40
  }
40
41
  callback(event);
41
42
  }, "handler");
42
- window.addEventListener("message", handler);
43
+ app.addEventListener("message", handler);
43
44
  return {
44
- unsubscribe: /* @__PURE__ */ __name(() => window.removeEventListener("message", handler), "unsubscribe")
45
+ unsubscribe: /* @__PURE__ */ __name(() => app.removeEventListener("message", handler), "unsubscribe")
45
46
  };
46
47
  }, "subscribe");
47
48
  const initializeChildSite = /* @__PURE__ */ __name(() => {
@@ -52,6 +53,7 @@ const createChildSite = /* @__PURE__ */ __name((args) => {
52
53
  subscribe((event) => {
53
54
  switch (event.data.type) {
54
55
  case "IFRAME_RESIZE":
56
+ if (autoResize === false) return;
55
57
  iframe.style.border = "none";
56
58
  iframe.style.height = `${event.data.payload.height}px`;
57
59
  break;
@@ -77,6 +79,15 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
77
79
  ...restArgs,
78
80
  queryParams
79
81
  });
82
+ const detachedChildApp = createChildSite({
83
+ ...restArgs,
84
+ queryParams,
85
+ initialRoute: "/detached",
86
+ window: childApp.iframe.contentWindow,
87
+ autoResize: false
88
+ });
89
+ let childAppSubscription;
90
+ let detachedChildAppSubscription;
80
91
  const postMessage = /* @__PURE__ */ __name((message) => {
81
92
  childApp.postMessage(message);
82
93
  }, "postMessage");
@@ -98,33 +109,79 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
98
109
  const setCustomCss = /* @__PURE__ */ __name((css) => {
99
110
  postMessage({ type: "SET_CUSTOM_CSS", payload: { css } });
100
111
  }, "setCustomCss");
101
- const setSkipPages = /* @__PURE__ */ __name((skipPages) => {
102
- postMessage({
103
- type: "SKIP_PAGES_SENT",
104
- payload: {
105
- skipPages
112
+ const appendDetachedOnboardingApp = /* @__PURE__ */ __name(async () => {
113
+ const id = "detached-onboarding-app";
114
+ detachedChildApp.iframe.style.display = "none";
115
+ detachedChildApp.iframe.style.width = "100%";
116
+ detachedChildApp.iframe.style.height = "100%";
117
+ detachedChildApp.iframe.style.position = "fixed";
118
+ detachedChildApp.iframe.style.top = "0px";
119
+ detachedChildApp.iframe.style.left = "0px";
120
+ detachedChildApp.iframe.id = id;
121
+ document.getElementById(id)?.remove();
122
+ document.querySelector("body")?.appendChild(detachedChildApp.iframe);
123
+ const subscription = detachedChildApp.subscribe(
124
+ (event) => {
125
+ if (event.data.type === "IFRAME_INITIALIZED") {
126
+ detachedChildApp.postMessage({ type: "START_DETACHED_APP" });
127
+ subscription.unsubscribe();
128
+ }
106
129
  }
107
- });
108
- }, "setSkipPages");
130
+ );
131
+ detachedChildAppSubscription = detachedChildApp.subscribe(
132
+ (event) => {
133
+ if (event.data.type === "DETACHED_EVENT") {
134
+ postMessage(event.data);
135
+ const detachedEvent = event.data.payload;
136
+ switch (detachedEvent.type) {
137
+ case "SHOW_DETACHED_IFRAME":
138
+ detachedChildApp.iframe.style.display = "block";
139
+ break;
140
+ case "HIDE_DETACHED_IFRAME":
141
+ detachedChildApp.iframe.style.display = "none";
142
+ break;
143
+ }
144
+ }
145
+ }
146
+ );
147
+ }, "appendDetachedOnboardingApp");
109
148
  const onIframeInitialized = /* @__PURE__ */ __name(() => {
110
- const subscription = subscribe((event) => {
111
- if (event.data.type === "IFRAME_INITIALIZED") {
112
- postMessage({ type: "INVITE_TOKEN_SENT", payload: { inviteToken } });
113
- subscription.unsubscribe();
149
+ childAppSubscription = subscribe(
150
+ (event) => {
151
+ if (event.data.type === "IFRAME_INITIALIZED" && inviteToken) {
152
+ postMessage({ type: "INVITE_TOKEN_SENT", payload: { inviteToken } });
153
+ }
154
+ if (event.data.type === "ONBOARDING_STARTED") {
155
+ appendDetachedOnboardingApp();
156
+ }
157
+ if (event.data.type === "DETACHED_EVENT") {
158
+ detachedChildApp.postMessage(event.data);
159
+ }
114
160
  }
115
- });
161
+ );
116
162
  }, "onIframeInitialized");
163
+ const cleanupChildApp = /* @__PURE__ */ __name(() => {
164
+ childAppSubscription?.unsubscribe();
165
+ }, "cleanupChildApp");
166
+ const cleanupDetachedApp = /* @__PURE__ */ __name(() => {
167
+ detachedChildAppSubscription?.unsubscribe();
168
+ detachedChildApp.iframe.remove();
169
+ }, "cleanupDetachedApp");
170
+ const cleanup = /* @__PURE__ */ __name(() => {
171
+ cleanupChildApp();
172
+ cleanupDetachedApp();
173
+ }, "cleanup");
117
174
  onIframeInitialized();
118
175
  return {
119
176
  subscribe,
120
177
  setMode,
121
178
  setCustomCss,
122
- setSkipPages,
123
179
  iframe: childApp.iframe,
124
180
  next,
125
181
  prev,
126
182
  skip,
127
- refreshSize: childApp.refreshSize
183
+ refreshSize: childApp.refreshSize,
184
+ cleanup
128
185
  };
129
186
  }, "createOnboardingApp");
130
187
  const getURLQueryParams = /* @__PURE__ */ __name(() => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/createChildSite/index.ts","../src/utils/createOnboardingApp/index.ts","../src/utils/getURLQueryParams/index.ts","../src/utils/createParentSite/index.ts","../src/utils/createOnboardingConsumerApp/index.ts"],"sourcesContent":["import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { ParentSiteMessage } from '@/interfaces/ParentSiteMessage';\n\nexport const createChildSite = (args: {\n origin: string;\n initialRoute?: string;\n queryParams?: IframeQueryParams;\n mode?: IframeMode;\n}) => {\n const { origin, initialRoute = '', mode } = args;\n const queryParams = args.queryParams;\n const iframe = document.createElement('iframe');\n\n const setMode = (mode: IframeMode) => {\n postMessage<ParentSiteMessage>({\n type: 'SET_IFRAME_MODE',\n payload: { mode },\n });\n };\n\n const refreshSize = () => {\n postMessage<ParentSiteMessage>({ type: 'REFRESH_SIZE' });\n };\n\n const buildIframeSrc = () => {\n let srcUrl: URL;\n if (initialRoute) {\n srcUrl = new URL(initialRoute.replace(/^\\//, ''), origin);\n } else {\n srcUrl = new URL(origin);\n }\n\n for (const [key, value] of Object.entries(queryParams || {})) {\n if (typeof value === 'string') {\n srcUrl.searchParams.set(key, value);\n }\n }\n\n return srcUrl;\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (event.origin !== origin && event.origin !== window.location.origin) {\n console.warn(\n 'Blocked message from unauthorized origin:',\n `Given: ${event.origin}`,\n `Expected: ${origin}`\n );\n return;\n }\n callback(event);\n };\n\n window.addEventListener('message', handler);\n return {\n unsubscribe: () => window.removeEventListener('message', handler),\n };\n };\n\n const initializeChildSite = () => {\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n iframe.src = buildIframeSrc().toString();\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'IFRAME_RESIZE':\n iframe.style.border = 'none';\n iframe.style.height = `${event.data.payload.height}px`;\n break;\n case 'IFRAME_INITIALIZED':\n setMode(mode);\n postMessage<ParentSiteMessage>({\n type: 'IFRAME_RENDERED_ON_PARENT_SITE',\n });\n break;\n }\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(\n message: TMessage,\n transfer?: Transferable[]\n ) => {\n iframe.contentWindow?.postMessage(message, origin, transfer);\n };\n\n initializeChildSite();\n\n return { iframe, subscribe, postMessage, setMode, refreshSize };\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingAppMode } from '@/interfaces/OnboardingAppMode';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createChildSite } from '@/utils/createChildSite';\n\nexport const createOnboardingApp = (args: {\n origin: string;\n inviteToken: string;\n mode?: OnboardingAppMode;\n}) => {\n const queryParams: IframeQueryParams = {};\n const { inviteToken, ...restArgs } = args;\n const childApp = createChildSite({\n ...restArgs,\n queryParams,\n });\n\n const postMessage = (message: OnboardingConsumerAppMessage) => {\n childApp.postMessage(message as unknown as AnyMessage);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingAppMessage>) => void\n ) => {\n return childApp.subscribe(callback);\n };\n\n const skip = () => {\n postMessage({ type: 'SKIP_STAGE' });\n };\n\n const next = () => {\n postMessage({ type: 'NEXT_STAGE' });\n };\n\n const prev = () => {\n postMessage({ type: 'PREV_STAGE' });\n };\n\n const setMode = (mode: OnboardingAppMode) => {\n postMessage({ type: 'SET_IFRAME_MODE', payload: { mode } });\n };\n\n const setCustomCss = (css: string) => {\n postMessage({ type: 'SET_CUSTOM_CSS', payload: { css } });\n };\n\n const setSkipPages = (skipPages: string[]) => {\n postMessage({\n type: 'SKIP_PAGES_SENT',\n payload: {\n skipPages,\n },\n });\n };\n\n const onIframeInitialized = () => {\n const subscription = subscribe((event) => {\n if (event.data.type === 'IFRAME_INITIALIZED') {\n postMessage({ type: 'INVITE_TOKEN_SENT', payload: { inviteToken } });\n subscription.unsubscribe();\n }\n });\n };\n\n onIframeInitialized();\n\n return {\n subscribe,\n setMode,\n setCustomCss,\n setSkipPages,\n iframe: childApp.iframe,\n next,\n prev,\n skip,\n refreshSize: childApp.refreshSize,\n };\n};\n","import type { QueryParams } from '@/interfaces/QueryParams';\n\nexport const getURLQueryParams = <T extends QueryParams>() => {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const queryParams: QueryParams = {};\n urlSearchParams.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n return queryParams as T;\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport { getURLQueryParams } from '@/utils/getURLQueryParams';\n\nexport const createParentSite = (args: { allowedOrigins: string[] }) => {\n const { allowedOrigins } = args;\n const queryParams = getURLQueryParams<IframeQueryParams>();\n\n const notifyHeight = () => {\n const height = document.body.scrollHeight;\n postMessage<ChildSiteMessage>({\n type: 'IFRAME_RESIZE',\n payload: { height },\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(message: TMessage) => {\n for (const origin of allowedOrigins) {\n window.parent.postMessage(message, origin);\n }\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (!allowedOrigins.includes(event.origin)) {\n console.warn('Blocked message from unauthorized origin:', event.origin);\n return;\n }\n callback(event);\n };\n\n window.addEventListener('message', handler);\n return {\n unsubscribe: () => window.removeEventListener('message', handler),\n };\n };\n\n const notifySize = () => {\n notifyHeight();\n };\n\n const initializeParentSite = () => {\n const observer = new ResizeObserver(notifySize);\n observer.observe(document.body);\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'SET_IFRAME_MODE':\n const mode = event.data.payload.mode as IframeMode;\n document.body.style.overflow =\n mode === 'embedded' ? 'hidden' : 'auto';\n break;\n case 'REFRESH_SIZE':\n notifySize();\n break;\n default:\n break;\n }\n });\n\n postMessage<ChildSiteMessage>({ type: 'IFRAME_INITIALIZED' });\n };\n\n initializeParentSite();\n\n return {\n notifySize,\n subscribe,\n postMessage,\n queryParams,\n };\n};\n","import type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createParentSite } from '@/utils/createParentSite';\n\nexport const createOnboardingConsumerApp = (args: {\n allowedOrigins: string[];\n}) => {\n const parentApp = createParentSite(args);\n\n const postMessage = (message: OnboardingAppMessage) => {\n parentApp.postMessage(message);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingConsumerAppMessage>) => void\n ) => {\n return parentApp.subscribe(callback);\n };\n\n return {\n postMessage,\n subscribe,\n notifySize: parentApp.notifySize,\n };\n};\n"],"names":["mode"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/createChildSite/index.ts","../src/utils/createOnboardingApp/index.ts","../src/utils/getURLQueryParams/index.ts","../src/utils/createParentSite/index.ts","../src/utils/createOnboardingConsumerApp/index.ts"],"sourcesContent":["import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { ParentSiteMessage } from '@/interfaces/ParentSiteMessage';\n\nexport const createChildSite = (args: {\n origin: string;\n initialRoute?: string;\n queryParams?: IframeQueryParams;\n window?: Window | null;\n mode?: IframeMode;\n autoResize?: boolean;\n}) => {\n const { origin, initialRoute = '', mode, autoResize = true } = args;\n const app = args.window || window;\n const queryParams = args.queryParams;\n const iframe = document.createElement('iframe');\n\n const setMode = (mode: IframeMode) => {\n postMessage<ParentSiteMessage>({\n type: 'SET_IFRAME_MODE',\n payload: { mode },\n });\n };\n\n const refreshSize = () => {\n postMessage<ParentSiteMessage>({ type: 'REFRESH_SIZE' });\n };\n\n const buildIframeSrc = () => {\n let srcUrl: URL;\n if (initialRoute) {\n srcUrl = new URL(initialRoute.replace(/^\\//, ''), origin);\n } else {\n srcUrl = new URL(origin);\n }\n\n for (const [key, value] of Object.entries(queryParams || {})) {\n if (typeof value === 'string') {\n srcUrl.searchParams.set(key, value);\n }\n }\n\n return srcUrl;\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (event.origin !== origin && event.origin !== app.location.origin) {\n console.warn(\n 'Blocked message from unauthorized origin:',\n `Given: ${event.origin}`,\n `Expected: ${origin}`\n );\n return;\n }\n callback(event);\n };\n\n app.addEventListener('message', handler);\n return {\n unsubscribe: () => app.removeEventListener('message', handler),\n };\n };\n\n const initializeChildSite = () => {\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n iframe.src = buildIframeSrc().toString();\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'IFRAME_RESIZE':\n if (autoResize === false) return;\n iframe.style.border = 'none';\n iframe.style.height = `${event.data.payload.height}px`;\n break;\n case 'IFRAME_INITIALIZED':\n setMode(mode);\n postMessage<ParentSiteMessage>({\n type: 'IFRAME_RENDERED_ON_PARENT_SITE',\n });\n break;\n }\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(\n message: TMessage,\n transfer?: Transferable[]\n ) => {\n iframe.contentWindow?.postMessage(message, origin, transfer);\n };\n\n initializeChildSite();\n\n return { iframe, subscribe, postMessage, setMode, refreshSize };\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteSubscription } from '@/interfaces/ChildSiteSubscription';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingAppMode } from '@/interfaces/OnboardingAppMode';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createChildSite } from '@/utils/createChildSite';\n\nexport const createOnboardingApp = (args: {\n origin: string;\n inviteToken: string;\n mode?: OnboardingAppMode;\n}) => {\n const queryParams: IframeQueryParams = {};\n const { inviteToken, ...restArgs } = args;\n const childApp = createChildSite({\n ...restArgs,\n queryParams,\n });\n const detachedChildApp = createChildSite({\n ...restArgs,\n queryParams,\n initialRoute: '/detached',\n window: childApp.iframe.contentWindow,\n autoResize: false,\n });\n let childAppSubscription: ChildSiteSubscription | undefined;\n let detachedChildAppSubscription: ChildSiteSubscription | undefined;\n\n const postMessage = (message: OnboardingConsumerAppMessage) => {\n childApp.postMessage(message as unknown as AnyMessage);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingAppMessage>) => void\n ) => {\n return childApp.subscribe(callback);\n };\n\n const skip = () => {\n postMessage({ type: 'SKIP_STAGE' });\n };\n\n const next = () => {\n postMessage({ type: 'NEXT_STAGE' });\n };\n\n const prev = () => {\n postMessage({ type: 'PREV_STAGE' });\n };\n\n const setMode = (mode: OnboardingAppMode) => {\n postMessage({ type: 'SET_IFRAME_MODE', payload: { mode } });\n };\n\n const setCustomCss = (css: string) => {\n postMessage({ type: 'SET_CUSTOM_CSS', payload: { css } });\n };\n\n const appendDetachedOnboardingApp = async () => {\n const id = 'detached-onboarding-app';\n detachedChildApp.iframe.style.display = 'none';\n detachedChildApp.iframe.style.width = '100%';\n detachedChildApp.iframe.style.height = '100%';\n detachedChildApp.iframe.style.position = 'fixed';\n detachedChildApp.iframe.style.top = '0px';\n detachedChildApp.iframe.style.left = '0px';\n detachedChildApp.iframe.id = id;\n document.getElementById(id)?.remove();\n document.querySelector('body')?.appendChild(detachedChildApp.iframe);\n\n const subscription = detachedChildApp.subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'IFRAME_INITIALIZED') {\n detachedChildApp.postMessage({ type: 'START_DETACHED_APP' });\n subscription.unsubscribe();\n }\n }\n );\n\n detachedChildAppSubscription = detachedChildApp.subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'DETACHED_EVENT') {\n /**\n * Redirects the detached event to the main child app.\n */\n postMessage(event.data);\n\n const detachedEvent = event.data.payload;\n switch (detachedEvent.type) {\n case 'SHOW_DETACHED_IFRAME':\n detachedChildApp.iframe.style.display = 'block';\n break;\n case 'HIDE_DETACHED_IFRAME':\n detachedChildApp.iframe.style.display = 'none';\n break;\n default:\n break;\n }\n }\n }\n );\n };\n\n const onIframeInitialized = () => {\n childAppSubscription = subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'IFRAME_INITIALIZED' && inviteToken) {\n postMessage({ type: 'INVITE_TOKEN_SENT', payload: { inviteToken } });\n }\n\n if (event.data.type === 'ONBOARDING_STARTED') {\n appendDetachedOnboardingApp();\n }\n\n /**\n * Redirects the detached event to the detached child app.\n */\n if (event.data.type === 'DETACHED_EVENT') {\n detachedChildApp.postMessage(event.data);\n }\n }\n );\n };\n\n const cleanupChildApp = () => {\n childAppSubscription?.unsubscribe();\n };\n\n const cleanupDetachedApp = () => {\n detachedChildAppSubscription?.unsubscribe();\n detachedChildApp.iframe.remove();\n };\n\n const cleanup = () => {\n cleanupChildApp();\n cleanupDetachedApp();\n };\n\n onIframeInitialized();\n\n return {\n subscribe,\n setMode,\n setCustomCss,\n iframe: childApp.iframe,\n next,\n prev,\n skip,\n refreshSize: childApp.refreshSize,\n cleanup,\n };\n};\n","import type { QueryParams } from '@/interfaces/QueryParams';\n\nexport const getURLQueryParams = <T extends QueryParams>() => {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const queryParams: QueryParams = {};\n urlSearchParams.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n return queryParams as T;\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport { getURLQueryParams } from '@/utils/getURLQueryParams';\n\nexport const createParentSite = (args: { allowedOrigins: string[] }) => {\n const { allowedOrigins } = args;\n const queryParams = getURLQueryParams<IframeQueryParams>();\n\n const notifyHeight = () => {\n const height = document.body.scrollHeight;\n postMessage<ChildSiteMessage>({\n type: 'IFRAME_RESIZE',\n payload: { height },\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(message: TMessage) => {\n for (const origin of allowedOrigins) {\n window.parent.postMessage(message, origin);\n }\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (!allowedOrigins.includes(event.origin)) {\n console.warn('Blocked message from unauthorized origin:', event.origin);\n return;\n }\n callback(event);\n };\n\n window.addEventListener('message', handler);\n return {\n unsubscribe: () => window.removeEventListener('message', handler),\n };\n };\n\n const notifySize = () => {\n notifyHeight();\n };\n\n const initializeParentSite = () => {\n const observer = new ResizeObserver(notifySize);\n observer.observe(document.body);\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'SET_IFRAME_MODE':\n const mode = event.data.payload.mode as IframeMode;\n document.body.style.overflow =\n mode === 'embedded' ? 'hidden' : 'auto';\n break;\n case 'REFRESH_SIZE':\n notifySize();\n break;\n default:\n break;\n }\n });\n\n postMessage<ChildSiteMessage>({ type: 'IFRAME_INITIALIZED' });\n };\n\n initializeParentSite();\n\n return {\n notifySize,\n subscribe,\n postMessage,\n queryParams,\n };\n};\n","import type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createParentSite } from '@/utils/createParentSite';\n\nexport const createOnboardingConsumerApp = (args: {\n allowedOrigins: string[];\n}) => {\n const parentApp = createParentSite(args);\n\n const postMessage = (message: OnboardingAppMessage) => {\n parentApp.postMessage(message);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingConsumerAppMessage>) => void\n ) => {\n return parentApp.subscribe(callback);\n };\n\n return {\n postMessage,\n subscribe,\n notifySize: parentApp.notifySize,\n };\n};\n"],"names":["mode"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type DetachedEvent = {
2
+ type: 'PLAID_CONNECT';
3
+ payload: {
4
+ token: string | null;
5
+ };
6
+ } | {
7
+ type: 'PLAID_LINK_SUCCESS';
8
+ payload: {
9
+ key: string;
10
+ meta: any;
11
+ };
12
+ } | {
13
+ type: 'SHOW_DETACHED_IFRAME';
14
+ } | {
15
+ type: 'HIDE_DETACHED_IFRAME';
16
+ };
@@ -1,4 +1,5 @@
1
1
  import { ChildSiteMessage } from './ChildSiteMessage';
2
+ import { DetachedEvent } from './DetachedEvent';
2
3
  import { StageNavigation } from './StageNavigation';
3
4
  export type OnboardingAppMessage = {
4
5
  type: 'ROUTE_URL';
@@ -11,10 +12,15 @@ export type OnboardingAppMessage = {
11
12
  type: 'AUTHENTICATION_SUCCESS';
12
13
  } | {
13
14
  type: 'ONBOARDING_STARTED';
15
+ } | {
16
+ type: 'DETACHED_EVENT';
17
+ payload: DetachedEvent;
14
18
  } | {
15
19
  type: 'ERROR';
16
20
  payload: {
17
- error: unknown;
21
+ error: {
22
+ message: string;
23
+ };
18
24
  };
19
25
  } | {
20
26
  type: 'STAGE_NAVIGATION';
@@ -1,18 +1,19 @@
1
1
  import { ParentSiteMessage } from './ParentSiteMessage';
2
+ import { DetachedEvent } from './DetachedEvent';
2
3
  export type OnboardingConsumerAppMessage = {
3
4
  type: 'NEXT_STAGE';
4
5
  } | {
5
6
  type: 'PREV_STAGE';
6
7
  } | {
7
8
  type: 'SKIP_STAGE';
9
+ } | {
10
+ type: 'START_DETACHED_APP';
11
+ } | {
12
+ type: 'DETACHED_EVENT';
13
+ payload: DetachedEvent;
8
14
  } | {
9
15
  type: 'INVITE_TOKEN_SENT';
10
16
  payload: {
11
17
  inviteToken: string;
12
18
  };
13
- } | {
14
- type: 'SKIP_PAGES_SENT';
15
- payload: {
16
- skipPages: string[];
17
- };
18
19
  } | ParentSiteMessage;
@@ -2,6 +2,7 @@ export * from './AnyMessage';
2
2
  export * from './ChildSite';
3
3
  export * from './ChildSiteMessage';
4
4
  export * from './ChildSiteSubscription';
5
+ export * from './DetachedEvent';
5
6
  export * from './IframeMode';
6
7
  export * from './IframeQueryParams';
7
8
  export * from './OnboardingApp';
@@ -5,7 +5,9 @@ export declare const createChildSite: (args: {
5
5
  origin: string;
6
6
  initialRoute?: string;
7
7
  queryParams?: IframeQueryParams;
8
+ window?: Window | null;
8
9
  mode?: IframeMode;
10
+ autoResize?: boolean;
9
11
  }) => {
10
12
  iframe: HTMLIFrameElement;
11
13
  subscribe: <T extends AnyMessage>(callback: (event: MessageEvent<T>) => void) => {
@@ -10,10 +10,10 @@ export declare const createOnboardingApp: (args: {
10
10
  };
11
11
  setMode: (mode: OnboardingAppMode) => void;
12
12
  setCustomCss: (css: string) => void;
13
- setSkipPages: (skipPages: string[]) => void;
14
13
  iframe: HTMLIFrameElement;
15
14
  next: () => void;
16
15
  prev: () => void;
17
16
  skip: () => void;
18
17
  refreshSize: () => void;
18
+ cleanup: () => void;
19
19
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worthai/onboarding-sdk",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "type": "module",
5
5
  "source": "./src",
6
6
  "types": "./dist/index.d.ts",