@salla.sa/embedded-sdk 0.1.0-beta.2 → 0.1.0-beta.4
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/README.md +44 -32
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +332 -350
- package/dist/esm/index.js.map +1 -1
- package/dist/system/index.js +3 -3
- package/dist/system/index.js.map +1 -1
- package/dist/umd/index.js +3 -3
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,10 +42,9 @@ async function bootstrap() {
|
|
|
42
42
|
|
|
43
43
|
// 4. Set up your app
|
|
44
44
|
embedded.page.setTitle("My App");
|
|
45
|
-
|
|
46
45
|
} catch (err) {
|
|
47
|
-
//
|
|
48
|
-
embedded.
|
|
46
|
+
// Exit embedded view (navigates to apps page)
|
|
47
|
+
embedded.destroy();
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
|
|
@@ -58,14 +57,13 @@ bootstrap();
|
|
|
58
57
|
<script src="https://unpkg.com/@salla.sa/embedded-sdk/dist/index.umd.js"></script>
|
|
59
58
|
<script>
|
|
60
59
|
const embedded = SallaEmbeddedSDK.embedded;
|
|
61
|
-
|
|
62
|
-
embedded.init({ debug: true })
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
60
|
+
|
|
61
|
+
embedded.init({ debug: true }).then(function (result) {
|
|
62
|
+
console.log("Layout:", result.layout);
|
|
63
|
+
|
|
64
|
+
const token = embedded.auth.getToken();
|
|
65
|
+
// ... verify token and call embedded.ready()
|
|
66
|
+
});
|
|
69
67
|
</script>
|
|
70
68
|
```
|
|
71
69
|
|
|
@@ -86,7 +84,7 @@ The SDK is also accessible via the global `Salla` object:
|
|
|
86
84
|
|
|
87
85
|
```typescript
|
|
88
86
|
const { layout } = await embedded.init({
|
|
89
|
-
debug: false,
|
|
87
|
+
debug: false, // Optional: Enable debug logging
|
|
90
88
|
});
|
|
91
89
|
```
|
|
92
90
|
|
|
@@ -94,7 +92,7 @@ Returns layout information from the host:
|
|
|
94
92
|
|
|
95
93
|
```typescript
|
|
96
94
|
interface LayoutInfo {
|
|
97
|
-
theme:
|
|
95
|
+
theme: "light" | "dark";
|
|
98
96
|
width: number;
|
|
99
97
|
locale: string;
|
|
100
98
|
currency: string;
|
|
@@ -115,11 +113,11 @@ const ready = embedded.isReady();
|
|
|
115
113
|
|
|
116
114
|
// Subscribe to initialization
|
|
117
115
|
embedded.onInit((state) => {
|
|
118
|
-
console.log(
|
|
116
|
+
console.log("Initialized with layout:", state.layout);
|
|
119
117
|
});
|
|
120
118
|
|
|
121
119
|
// Send log message to host
|
|
122
|
-
embedded.log(
|
|
120
|
+
embedded.log("error", "Something failed", { context: "data" });
|
|
123
121
|
```
|
|
124
122
|
|
|
125
123
|
### Auth Module
|
|
@@ -128,34 +126,31 @@ embedded.log('error', 'Something failed', { context: 'data' });
|
|
|
128
126
|
// Get token from URL (?token=XXX)
|
|
129
127
|
const token = embedded.auth.getToken();
|
|
130
128
|
|
|
131
|
-
// Request logout (navigates to apps page)
|
|
132
|
-
embedded.auth.logout();
|
|
133
|
-
|
|
134
129
|
// Request token refresh (re-renders iframe with new token)
|
|
135
130
|
embedded.auth.refresh();
|
|
131
|
+
```
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
### Destroy
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
// Exit embedded view and navigate back to app page
|
|
137
|
+
embedded.destroy();
|
|
139
138
|
```
|
|
140
139
|
|
|
141
140
|
### UI Module
|
|
142
141
|
|
|
143
142
|
```typescript
|
|
144
143
|
// Loading (in-app loading states)
|
|
145
|
-
embedded.ui.loading.show();
|
|
146
|
-
embedded.ui.loading.show("component");
|
|
147
|
-
embedded.ui.loading.hide();
|
|
148
|
-
|
|
149
|
-
// Overlay (fullscreen mode)
|
|
150
|
-
embedded.ui.overlay.open();
|
|
151
|
-
embedded.ui.overlay.close();
|
|
144
|
+
embedded.ui.loading.show(); // Show loading
|
|
145
|
+
embedded.ui.loading.show("component"); // Component-level
|
|
146
|
+
embedded.ui.loading.hide(); // Hide loading
|
|
152
147
|
|
|
153
148
|
// Toast Notifications
|
|
154
149
|
embedded.ui.toast.success("Product saved!");
|
|
155
150
|
embedded.ui.toast.error("Something went wrong");
|
|
156
151
|
embedded.ui.toast.warning("Please review input");
|
|
157
152
|
embedded.ui.toast.info("New features available");
|
|
158
|
-
embedded.ui.toast.success("Saved!", 5000);
|
|
153
|
+
embedded.ui.toast.success("Saved!", 5000); // Custom duration
|
|
159
154
|
|
|
160
155
|
// Generic toast
|
|
161
156
|
embedded.ui.toast.show({
|
|
@@ -174,7 +169,7 @@ const result = await embedded.ui.confirm({
|
|
|
174
169
|
message: "This action cannot be undone.",
|
|
175
170
|
confirmText: "Delete",
|
|
176
171
|
cancelText: "Cancel",
|
|
177
|
-
variant: "danger",
|
|
172
|
+
variant: "danger", // 'danger' | 'warning' | 'info'
|
|
178
173
|
});
|
|
179
174
|
|
|
180
175
|
if (result.confirmed) {
|
|
@@ -202,22 +197,39 @@ embedded.page.navTo("https://external.com");
|
|
|
202
197
|
|
|
203
198
|
// Iframe Resize
|
|
204
199
|
embedded.page.resize(800);
|
|
205
|
-
embedded.page.autoResize();
|
|
200
|
+
embedded.page.autoResize(); // Auto-detect content height
|
|
206
201
|
```
|
|
207
202
|
|
|
208
203
|
### Nav Module
|
|
209
204
|
|
|
210
205
|
```typescript
|
|
211
|
-
// Set primary action button
|
|
206
|
+
// Set primary action button with onClick
|
|
212
207
|
embedded.nav.setAction({
|
|
213
208
|
title: "Create Product",
|
|
214
|
-
|
|
209
|
+
onClick: () => {
|
|
210
|
+
// Handle click
|
|
211
|
+
console.log("Create product clicked");
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// With optional props
|
|
216
|
+
embedded.nav.setAction({
|
|
217
|
+
title: "Save",
|
|
218
|
+
subTitle: "Save changes",
|
|
219
|
+
icon: "sicon-save",
|
|
220
|
+
disabled: false,
|
|
221
|
+
onClick: () => {
|
|
222
|
+
handleSave();
|
|
223
|
+
},
|
|
215
224
|
});
|
|
216
225
|
|
|
217
226
|
// With dropdown actions
|
|
218
227
|
embedded.nav.setAction({
|
|
219
228
|
title: "Actions",
|
|
220
229
|
value: "main",
|
|
230
|
+
onClick: () => {
|
|
231
|
+
// Handle main action click
|
|
232
|
+
},
|
|
221
233
|
extendedActions: [
|
|
222
234
|
{ title: "Import", url: "/import" },
|
|
223
235
|
{ title: "Export", value: "export" },
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`+
|
|
3
|
-
`))}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _="0.1.0-beta.4",M={version:_},s="embedded::",g={INIT:`${s}iframe.ready`,RESIZE:`${s}iframe.resize`,READY:`${s}ready`,DESTROY:`${s}destroy`},p={PROVIDE:`${s}context.provide`,THEME_CHANGE:`${s}theme.change`},x={LOG:`${s}log`},z={REFRESH:`${s}auth.refresh`},h={NAVIGATE:`${s}page.navigate`,REDIRECT:`${s}page.redirect`,SET_TITLE:`${s}page.setTitle`},b={SET_ACTION:`${s}nav.setAction`,ACTION_CLICK:`${s}nav.actionClick`},u={LOADING:`${s}ui.loading`,TOAST:`${s}ui.toast`,MODAL:`${s}ui.modal`,CONFIRM:`${s}ui.confirm`,CONFIRM_RESPONSE:`${s}ui.confirm.response`,MODAL_RESPONSE:`${s}ui.modal.response`},S={CREATE:`${s}checkout.create`},y=M.version,K=1e4,V=["localhost","merchants.workers.dev","s.salla.sa",".salla.group",".salla.sa"];function U(e){try{const n=new URL(e).hostname;return V.some(i=>i.startsWith(".")?n.endsWith(i)||n===i.slice(1):n===i||n.startsWith(`${i}:`))}catch{return!1}}function F(){return typeof window>"u"||window.parent===window?null:window.parent}function o(e,t,n="*"){const i=F();if(!i){console.warn("[EmbeddedSDK] Not running in an iframe, cannot post to host");return}const r={event:e,...t};i.postMessage(r,n)}const d=new Map;let T=!1;function L(e){if(process.env.NODE_ENV==="production"&&!U(e.origin))return;const t=e.data;if(!t||typeof t.event!="string")return;const n=d.get(t.event);n&&n.forEach(r=>{try{r(t)}catch(l){console.error("[EmbeddedSDK] Error in message handler:",l)}});const i=d.get("*");i&&i.forEach(r=>{try{r(t)}catch(l){console.error("[EmbeddedSDK] Error in wildcard handler:",l)}})}function P(){T||typeof window>"u"||(window.addEventListener("message",L),T=!0)}function E(e,t){P(),d.has(e)||d.set(e,new Set);const n=d.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&d.delete(e)}}function q(e,t=K){return new Promise((n,i)=>{const r=setTimeout(()=>{l(),i(new Error(`[EmbeddedSDK] Timeout waiting for "${e}" message`))},t),l=E(e,a=>{clearTimeout(r),l(),n(a)})})}function G(){d.clear(),T&&typeof window<"u"&&(window.removeEventListener("message",L),T=!1)}function H(){return typeof window>"u"?!1:window.parent!==window}const f=new Map,j=3e4;function W(){const e=Date.now(),t=Math.random().toString(36).slice(2,9);return`req_${e}_${t}`}function Y(e,t={},n=j){const i=W();return new Promise((r,l)=>{const a=setTimeout(()=>{f.get(i)&&(f.delete(i),l(new Error(`[EmbeddedSDK] Request "${e}" timed out after ${n}ms`)))},n);f.set(i,{resolve:r,reject:l,timeout:a,event:e}),o(e,{...t,requestId:i})})}function A(e,t,n){const i=f.get(e);if(!i){console.warn(`[EmbeddedSDK] Received response for unknown request: ${e}`);return}clearTimeout(i.timeout),f.delete(e),n?i.reject(new Error(n)):i.resolve(t)}function Z(e="SDK cleanup"){f.forEach((t,n)=>{clearTimeout(t.timeout),t.reject(new Error(`[EmbeddedSDK] Request ${n} cancelled: ${e}`))}),f.clear()}function X(e){return{getToken(){return new URLSearchParams(window.location.search).get("token")},refresh(){o(z.REFRESH,{})}}}const C=["success","error","warning","info"];function Q(e){const t=[];return e.type===void 0||e.type===null?t.push("Toast type is required"):(typeof e.type!="string"||!C.includes(e.type))&&t.push(`Invalid toast type "${e.type}". Expected: ${C.join(" | ")}`),e.message===void 0||e.message===null?t.push("Toast message is required"):typeof e.message!="string"?t.push("Toast message must be a string"):e.message.trim()===""&&t.push("Toast message cannot be empty"),e.duration!==void 0&&e.duration!==null&&(typeof e.duration!="number"?t.push("Toast duration must be a number"):e.duration<0&&t.push("Toast duration cannot be negative")),{valid:t.length===0,errors:t}}function B(e){const t=[];return typeof e!="object"||e===null?(t.push("Checkout payload must be an object"),{valid:!1,errors:t}):(e.amount!==void 0&&e.amount!==null&&(typeof e.amount!="number"?t.push("Checkout amount must be a number"):e.amount<0&&t.push("Checkout amount cannot be negative")),e.currency!==void 0&&e.currency!==null&&(typeof e.currency!="string"?t.push("Checkout currency must be a string"):e.currency.trim()===""&&t.push("Checkout currency cannot be empty")),e.items!==void 0&&e.items!==null&&(Array.isArray(e.items)||t.push("Checkout items must be an array")),{valid:t.length===0,errors:t})}function J(e){const t=[];return e.path===void 0||e.path===null?t.push("Navigation path is required"):typeof e.path!="string"?t.push("Navigation path must be a string"):e.path.trim()===""&&t.push("Navigation path cannot be empty"),e.replace!==void 0&&typeof e.replace!="boolean"&&t.push("Navigation replace option must be a boolean"),{valid:t.length===0,errors:t}}function ee(e){const t=[];if(e.url===void 0||e.url===null)t.push("Redirect URL is required");else if(typeof e.url!="string")t.push("Redirect URL must be a string");else if(e.url.trim()==="")t.push("Redirect URL cannot be empty");else try{new URL(e.url)}catch{t.push(`Invalid redirect URL: "${e.url}"`)}return{valid:t.length===0,errors:t}}function te(e){const t=[];return e.title===void 0||e.title===null?t.push("Nav action title is required"):typeof e.title!="string"&&t.push("Nav action title must be a string"),e.onClick!==void 0&&e.onClick!==null&&typeof e.onClick!="function"&&t.push("Nav action onClick must be a function"),e.value!==void 0&&e.value!==null&&typeof e.value!="string"&&t.push("Nav action value must be a string"),e.subTitle!==void 0&&e.subTitle!==null&&typeof e.subTitle!="string"&&t.push("Nav action subTitle must be a string"),e.icon!==void 0&&e.icon!==null&&typeof e.icon!="string"&&t.push("Nav action icon must be a string"),e.disabled!==void 0&&e.disabled!==null&&typeof e.disabled!="boolean"&&t.push("Nav action disabled must be a boolean"),e.extendedActions!==void 0&&e.extendedActions!==null&&(Array.isArray(e.extendedActions)?e.extendedActions.forEach((n,i)=>{if(typeof n!="object"||n===null){t.push(`Extended action at index ${i} must be an object`);return}const r=n;(!r.title||typeof r.title!="string")&&t.push(`Extended action at index ${i} is missing required "title" property`),r.subTitle!==void 0&&typeof r.subTitle!="string"&&t.push(`Extended action at index ${i} subTitle must be a string`),r.url!==void 0&&typeof r.url!="string"&&t.push(`Extended action at index ${i} url must be a string`),r.value!==void 0&&typeof r.value!="string"&&t.push(`Extended action at index ${i} value must be a string`),r.icon!==void 0&&typeof r.icon!="string"&&t.push(`Extended action at index ${i} icon must be a string`),r.disabled!==void 0&&typeof r.disabled!="boolean"&&t.push(`Extended action at index ${i} disabled must be a boolean`)}):t.push("Nav action extendedActions must be an array")),{valid:t.length===0,errors:t}}const R=["danger","warning","info"];function ie(e){const t=[];return e.title===void 0||e.title===null?t.push("Confirm dialog title is required"):typeof e.title!="string"?t.push("Confirm dialog title must be a string"):e.title.trim()===""&&t.push("Confirm dialog title cannot be empty"),e.message===void 0||e.message===null?t.push("Confirm dialog message is required"):typeof e.message!="string"?t.push("Confirm dialog message must be a string"):e.message.trim()===""&&t.push("Confirm dialog message cannot be empty"),e.confirmText!==void 0&&e.confirmText!==null&&typeof e.confirmText!="string"&&t.push("Confirm dialog confirmText must be a string"),e.cancelText!==void 0&&e.cancelText!==null&&typeof e.cancelText!="string"&&t.push("Confirm dialog cancelText must be a string"),e.variant!==void 0&&e.variant!==null&&(typeof e.variant!="string"||!R.includes(e.variant))&&t.push(`Invalid confirm variant "${e.variant}". Expected: ${R.join(" | ")}`),{valid:t.length===0,errors:t}}function c(e,t){console.error(`[EmbeddedSDK] Validation failed for ${e}:
|
|
2
|
+
`+t.map(n=>` • ${n}`).join(`
|
|
3
|
+
`))}function ne(){return{navigate(e,t){const n=J({path:e,...t});if(!n.valid){c(h.NAVIGATE,n.errors);return}o(h.NAVIGATE,{path:e,state:t==null?void 0:t.state,replace:t==null?void 0:t.replace})},redirect(e){const t=ee({url:e});if(!t.valid){c(h.REDIRECT,t.errors);return}o(h.REDIRECT,{url:e})},navTo(e,t){if(e.startsWith("http://")||e.startsWith("https://")){this.redirect(e);return}this.navigate(e,t)},resize(e){if(typeof e!="number"||e<0){c(g.RESIZE,["Height must be a non-negative number"]);return}o(g.RESIZE,{height:e})},autoResize(){const e=document.documentElement.scrollHeight;this.resize(e)},setTitle(e){if(typeof e!="string"||!e.trim()){c(h.SET_TITLE,["Title must be a non-empty string"]);return}o(h.SET_TITLE,{title:e})}}}function re(){const e=new Set;let t=null;return E(b.ACTION_CLICK,i=>{if(t)try{t()}catch(r){console.error("[EmbeddedSDK] Error in onClick callback:",r)}e.forEach(r=>{try{r(i.url,i.value)}catch(l){console.error("[EmbeddedSDK] Error in action click callback:",l)}})}),{setAction(i){var l;const r=te(i);if(!r.valid){c(b.SET_ACTION,r.errors);return}i.onClick?t=i.onClick:t=null,o(b.SET_ACTION,{title:i.title,onClick:i.onClick?!0:void 0,value:i.value,subTitle:i.subTitle,icon:i.icon,disabled:i.disabled,extendedActions:(l=i.extendedActions)==null?void 0:l.map(a=>({title:a.title,subTitle:a.subTitle,url:a.url,value:a.value,icon:a.icon,disabled:a.disabled}))})},clearAction(){t=null,o(b.SET_ACTION,{title:""})},onActionClick(i){return e.add(i),()=>{e.delete(i)}},primaryAction(i){this.setAction(i)},clearPrimaryAction(){this.clearAction()}}}function se(){return{show(e="full"){o(u.LOADING,{status:!1,mode:e})},hide(){o(u.LOADING,{status:!0,mode:"full"})}}}function ae(){const e=t=>{const n=Q(t);if(!n.valid){c(u.TOAST,n.errors);return}o(u.TOAST,{type:t.type,message:t.message,duration:t.duration})};return{show:e,success(t,n){e({type:"success",message:t,duration:n})},error(t,n){e({type:"error",message:t,duration:n})},warning(t,n){e({type:"warning",message:t,duration:n})},info(t,n){e({type:"info",message:t,duration:n})}}}function oe(){return{open(e,t){o(u.MODAL,{action:"open",id:e,content:t})},close(e){o(u.MODAL,{action:"close",id:e})}}}function le(){return async e=>{const t=ie(e);return t.valid?Y(u.CONFIRM,{title:e.title,message:e.message,confirmText:e.confirmText??"Confirm",cancelText:e.cancelText??"Cancel",variant:e.variant??"info"}):(c(u.CONFIRM,t.errors),Promise.reject(new Error(t.errors.join(", "))))}}function ue(){return{loading:se(),toast:ae(),modal:oe(),confirm:le()}}function ce(){return{create(e){const t=B(e);if(!t.valid){c(S.CREATE,t.errors);return}o(S.CREATE,{payload:e})}}}const I={debug:!1,initialized:!1},de={theme:"light",width:0,locale:"ar",currency:"SAR"},N={ready:!1,initializing:!1,layout:{...de}};class D{constructor(){this.config={...I},this.state={...N},this.themeCallbacks=new Set,this.initCallbacks=new Set,this.appReady=!1,this.auth=X(),this.page=ne(),this.nav=re(),this.ui=ue(),this.checkout=ce(),this.setupThemeListener(),this.setupResponseListeners()}getState(){return{ready:this.state.ready,initializing:this.state.initializing,layout:{...this.state.layout}}}getConfig(){return{...this.config}}isReady(){return this.state.ready}debugLog(...t){this.config.debug&&console.log(`[EmbeddedSDK v${y}]`,...t)}warn(...t){console.warn(`[EmbeddedSDK v${y}]`,...t)}setupThemeListener(){E(p.THEME_CHANGE,t=>{this.state.layout.theme=t.theme,this.debugLog("Theme changed:",t.theme),this.themeCallbacks.forEach(n=>{try{n(t.theme)}catch(i){console.error("[EmbeddedSDK] Error in theme callback:",i)}})})}setupResponseListeners(){E(u.CONFIRM_RESPONSE,t=>{this.debugLog("Received confirm response:",t),A(t.requestId,{confirmed:t.confirmed})}),E(u.MODAL_RESPONSE,t=>{this.debugLog("Received modal response:",t),A(t.requestId,t.result,t.error)})}onThemeChange(t){return this.themeCallbacks.add(t),()=>{this.themeCallbacks.delete(t)}}onInit(t){if(this.config.initialized)try{t(this.getState())}catch(n){console.error("[EmbeddedSDK] Error in init callback:",n)}return this.initCallbacks.add(t),()=>{this.initCallbacks.delete(t)}}log(t,n,i){o(x.LOG,{level:t,message:n,context:i})}ready(){if(this.appReady){this.debugLog("App already signaled as ready");return}if(!this.config.initialized){this.warn("Cannot signal ready before init() is called");return}this.appReady=!0,o(g.READY,{}),this.debugLog("Sent ready signal to host")}async init(t={}){var n,i,r,l;if(this.config.initialized)return this.debugLog("Already initialized, returning current layout"),{layout:{...this.state.layout}};if(this.state.initializing)return this.warn("Initialization already in progress"),this.waitForInit();H()||this.warn("Not running in an iframe. Some features may not work."),this.config={debug:t.debug??!1,initialized:!1},this.state.initializing=!0,this.debugLog("Initializing SDK...");try{o(g.INIT,{height:document.documentElement.scrollHeight}),this.debugLog("Sent iframe.ready message, waiting for context...");const a=await q(p.PROVIDE);this.debugLog("Received context from host:",a),this.state={ready:!0,initializing:!1,layout:{theme:((n=a.layout)==null?void 0:n.theme)??"light",width:((i=a.layout)==null?void 0:i.width)??0,locale:((r=a.layout)==null?void 0:r.locale)??"ar",currency:((l=a.layout)==null?void 0:l.currency)??"SAR"}},this.config.initialized=!0,this.debugLog("Initialization complete. Layout:",this.state.layout);const w=this.getState();return this.initCallbacks.forEach($=>{try{$(w)}catch(k){console.error("[EmbeddedSDK] Error in init callback:",k)}}),{layout:{...this.state.layout}}}catch(a){throw this.state.initializing=!1,this.state.ready=!1,a}}waitForInit(){return new Promise(t=>{const n=()=>{this.state.ready?t({layout:{...this.state.layout}}):setTimeout(n,100)};n()})}destroy(){this.debugLog("Destroying SDK instance"),this.config.initialized&&(o(g.DESTROY,{}),this.debugLog("Sent destroy event to host")),Z("SDK destroyed"),G(),this.themeCallbacks.clear(),this.initCallbacks.clear(),this.config={...I},this.state={...N},this.appReady=!1}}let m=null;function O(){return m||(m=new D),m}function fe(){m&&(m.destroy(),m=null)}const v=O(),he=y;typeof window<"u"&&(window.salla=window.salla||window.Salla||{},window.Salla=window.salla,window.salla.embedded||(window.salla.embedded=v),window.Salla.embedded||(window.Salla.embedded=v));exports.EmbeddedApp=D;exports.embedded=v;exports.getEmbeddedApp=O;exports.resetEmbeddedApp=fe;exports.version=he;
|
|
4
4
|
//# sourceMappingURL=index.js.map
|