starti.app 1.1.6 → 1.1.7-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.
- package/dist/pushnotification.d.ts +1 -1
- package/dist/pushnotification.js +45 -35
- package/package.json +1 -1
- package/umd/main.js +1 -1
|
@@ -30,7 +30,7 @@ export interface IPushNotification extends EventTargetMethods<PushNotificationEv
|
|
|
30
30
|
/** This method renders topics mustache template.
|
|
31
31
|
*
|
|
32
32
|
* Refer to the documentations for a guide how to use.
|
|
33
|
-
|
|
33
|
+
*/
|
|
34
34
|
renderTopics(): Promise<void>;
|
|
35
35
|
/** Subscribe to firebase topic */
|
|
36
36
|
subscribeToTopics(topics: string[]): void;
|
package/dist/pushnotification.js
CHANGED
|
@@ -17,7 +17,7 @@ const getIntegration_1 = require("./getIntegration");
|
|
|
17
17
|
const index_1 = require("./index");
|
|
18
18
|
class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType {
|
|
19
19
|
get pushNotificationIntegration() {
|
|
20
|
-
return (0, getIntegration_1.getIntegration)(
|
|
20
|
+
return (0, getIntegration_1.getIntegration)("PushNotificationIntegration");
|
|
21
21
|
}
|
|
22
22
|
requestAccess() {
|
|
23
23
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -37,13 +37,13 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
37
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
38
38
|
const brandId = yield index_1.default.App.brandId();
|
|
39
39
|
const params = {
|
|
40
|
-
brand: brandId
|
|
40
|
+
brand: brandId,
|
|
41
41
|
};
|
|
42
|
-
const response = yield fetch(config_1.baseUrl +
|
|
42
|
+
const response = yield fetch(config_1.baseUrl + "/Topics-getTopics?" + new URLSearchParams(Object.assign({}, params)));
|
|
43
43
|
if (!response.ok) {
|
|
44
|
-
throw new Error(
|
|
44
|
+
throw new Error("Failed to get topics");
|
|
45
45
|
}
|
|
46
|
-
const topics = yield response.json();
|
|
46
|
+
const topics = (yield response.json());
|
|
47
47
|
const subscribedTopics = this.getSubscribedTopics();
|
|
48
48
|
return topics.map(({ name, topic }) => new Topic(topic, name, subscribedTopics.includes(topic)));
|
|
49
49
|
});
|
|
@@ -51,16 +51,16 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
51
51
|
renderTopics() {
|
|
52
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
53
|
const topics = yield this.getTopics();
|
|
54
|
-
const templateElement = document.getElementById(
|
|
54
|
+
const templateElement = document.getElementById("startiapp-topics-template");
|
|
55
55
|
// If not exist or not a script element, return
|
|
56
|
-
if (!templateElement || templateElement.tagName !==
|
|
57
|
-
throw new Error(
|
|
58
|
-
if (templateElement.type !==
|
|
56
|
+
if (!templateElement || templateElement.tagName !== "SCRIPT")
|
|
57
|
+
throw new Error("Template element not found");
|
|
58
|
+
if (templateElement.type !== "x-tmpl-mustache")
|
|
59
59
|
throw new Error('Template element must have type="x-tmpl-mustache"');
|
|
60
|
-
const templateTarget = document.getElementById(
|
|
60
|
+
const templateTarget = document.getElementById("startiapp-topics-target");
|
|
61
61
|
// If not exist or not a script element, return
|
|
62
|
-
if (!templateTarget || templateTarget.tagName !==
|
|
63
|
-
throw new Error(
|
|
62
|
+
if (!templateTarget || templateTarget.tagName !== "DIV")
|
|
63
|
+
throw new Error("Template target element not found");
|
|
64
64
|
const template = templateElement.innerHTML;
|
|
65
65
|
const rendered = (0, mustache_1.render)(template, { topics: topics });
|
|
66
66
|
templateTarget.innerHTML = rendered;
|
|
@@ -69,7 +69,7 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
69
69
|
// Check if data-startiapp-topic is set
|
|
70
70
|
if (!checkbox.dataset.startiappTopic)
|
|
71
71
|
return;
|
|
72
|
-
checkbox.addEventListener(
|
|
72
|
+
checkbox.addEventListener("change", (event) => __awaiter(this, void 0, void 0, function* () {
|
|
73
73
|
// Cancel the change if push notification permissions was denied.
|
|
74
74
|
if (!(yield this.requestAccess())) {
|
|
75
75
|
event.target.checked = false;
|
|
@@ -80,7 +80,9 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
80
80
|
this.subscribeToTopics([checkbox.dataset.startiappTopic]);
|
|
81
81
|
}
|
|
82
82
|
else {
|
|
83
|
-
this.unsubscribeFromTopics([
|
|
83
|
+
this.unsubscribeFromTopics([
|
|
84
|
+
checkbox.dataset.startiappTopic,
|
|
85
|
+
]);
|
|
84
86
|
}
|
|
85
87
|
}));
|
|
86
88
|
});
|
|
@@ -88,10 +90,15 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
88
90
|
}
|
|
89
91
|
subscribeToTopics(topics) {
|
|
90
92
|
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const accessGranted = yield index_1.default.PushNotification.requestAccess();
|
|
94
|
+
if (!accessGranted) {
|
|
95
|
+
console.warn("Push notification permissions denied");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
91
98
|
const [token, brandId, deviceId] = yield Promise.all([
|
|
92
|
-
|
|
99
|
+
index_1.default.PushNotification.getToken(),
|
|
93
100
|
index_1.default.App.brandId(),
|
|
94
|
-
index_1.default.App.deviceId()
|
|
101
|
+
index_1.default.App.deviceId(),
|
|
95
102
|
]);
|
|
96
103
|
const fetchPromises = [];
|
|
97
104
|
topics.forEach((topic) => {
|
|
@@ -99,19 +106,19 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
99
106
|
brandId: brandId,
|
|
100
107
|
topic: topic,
|
|
101
108
|
fcmToken: token,
|
|
102
|
-
deviceId: deviceId
|
|
109
|
+
deviceId: deviceId,
|
|
103
110
|
};
|
|
104
|
-
const fetchPromise = fetch(config_1.baseUrl +
|
|
111
|
+
const fetchPromise = fetch(config_1.baseUrl + "/Topics-subscribeToTopic", {
|
|
105
112
|
body: JSON.stringify(params),
|
|
106
|
-
method:
|
|
107
|
-
headers: {
|
|
113
|
+
method: "POST",
|
|
114
|
+
headers: { "Content-Type": "application/json" },
|
|
108
115
|
});
|
|
109
116
|
fetchPromises.push(fetchPromise);
|
|
110
117
|
});
|
|
111
118
|
const responses = yield Promise.all(fetchPromises);
|
|
112
119
|
responses.forEach((response, index) => {
|
|
113
120
|
if (!response.ok) {
|
|
114
|
-
console.warn(
|
|
121
|
+
console.warn("Failed to sign up to topic", index, topics[index]);
|
|
115
122
|
}
|
|
116
123
|
else {
|
|
117
124
|
this.updateSubscribedTopics(topics[index], true);
|
|
@@ -122,9 +129,9 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
122
129
|
unsubscribeFromTopics(topics) {
|
|
123
130
|
return __awaiter(this, void 0, void 0, function* () {
|
|
124
131
|
const [token, brandId, deviceId] = yield Promise.all([
|
|
125
|
-
|
|
132
|
+
index_1.default.PushNotification.getToken(),
|
|
126
133
|
index_1.default.App.brandId(),
|
|
127
|
-
index_1.default.App.deviceId()
|
|
134
|
+
index_1.default.App.deviceId(),
|
|
128
135
|
]);
|
|
129
136
|
const fetchPromises = [];
|
|
130
137
|
topics.forEach((topic) => {
|
|
@@ -132,19 +139,19 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
132
139
|
brandId: brandId,
|
|
133
140
|
topic: topic,
|
|
134
141
|
fcmToken: token,
|
|
135
|
-
deviceId: deviceId
|
|
142
|
+
deviceId: deviceId,
|
|
136
143
|
};
|
|
137
|
-
const fetchPromise = fetch(config_1.baseUrl +
|
|
144
|
+
const fetchPromise = fetch(config_1.baseUrl + "/Topics-unsubscribeFromTopic", {
|
|
138
145
|
body: JSON.stringify(params),
|
|
139
|
-
method:
|
|
140
|
-
headers: {
|
|
146
|
+
method: "POST",
|
|
147
|
+
headers: { "Content-Type": "application/json" },
|
|
141
148
|
});
|
|
142
149
|
fetchPromises.push(fetchPromise);
|
|
143
150
|
});
|
|
144
151
|
const responses = yield Promise.all(fetchPromises);
|
|
145
152
|
responses.forEach((response, index) => {
|
|
146
153
|
if (!response.ok) {
|
|
147
|
-
console.warn(
|
|
154
|
+
console.warn("Failed to unsubscribe from topic", index, topics[index]);
|
|
148
155
|
}
|
|
149
156
|
else {
|
|
150
157
|
this.updateSubscribedTopics(topics[index], false);
|
|
@@ -161,10 +168,10 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
161
168
|
this.resolveFCMToken = null;
|
|
162
169
|
}
|
|
163
170
|
tokenReceivedEvent(token) {
|
|
164
|
-
this.dispatchEvent(new CustomEvent(
|
|
171
|
+
this.dispatchEvent(new CustomEvent("tokenRefreshed", { detail: token }));
|
|
165
172
|
}
|
|
166
173
|
notificationReceivedEvent(notification) {
|
|
167
|
-
this.dispatchEvent(new CustomEvent(
|
|
174
|
+
this.dispatchEvent(new CustomEvent("notificationReceived", { detail: notification }));
|
|
168
175
|
}
|
|
169
176
|
/**
|
|
170
177
|
* Always called with true from Firebase.
|
|
@@ -175,7 +182,9 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
175
182
|
*/
|
|
176
183
|
firebasePushNotificationSubscribeToTopicsResult(result) { }
|
|
177
184
|
updateSubscribedTopics(topic, subscribed) {
|
|
178
|
-
const subscribedTopics = localStorage.getItem(
|
|
185
|
+
const subscribedTopics = localStorage.getItem("startiapp-subscribed-topics")
|
|
186
|
+
? JSON.parse(localStorage.getItem("startiapp-subscribed-topics"))
|
|
187
|
+
: [];
|
|
179
188
|
if (subscribed) {
|
|
180
189
|
if (!subscribedTopics.includes(topic)) {
|
|
181
190
|
subscribedTopics.push(topic);
|
|
@@ -186,13 +195,14 @@ class PushNotificationClass extends EventHandlerWithTypes_1.EventTargetWithType
|
|
|
186
195
|
subscribedTopics.splice(subscribedTopics.indexOf(topic), 1);
|
|
187
196
|
}
|
|
188
197
|
}
|
|
189
|
-
localStorage.setItem(
|
|
198
|
+
localStorage.setItem("startiapp-subscribed-topics", JSON.stringify(subscribedTopics));
|
|
190
199
|
}
|
|
191
200
|
getSubscribedTopics() {
|
|
192
|
-
return localStorage.getItem(
|
|
201
|
+
return localStorage.getItem("startiapp-subscribed-topics")
|
|
202
|
+
? JSON.parse(localStorage.getItem("startiapp-subscribed-topics"))
|
|
203
|
+
: [];
|
|
193
204
|
}
|
|
194
205
|
}
|
|
195
|
-
;
|
|
196
206
|
class Topic {
|
|
197
207
|
constructor(topic, name, subscribed = false) {
|
|
198
208
|
this.topic = topic;
|
|
@@ -203,7 +213,7 @@ class Topic {
|
|
|
203
213
|
return {
|
|
204
214
|
topic: this.topic,
|
|
205
215
|
name: this.name,
|
|
206
|
-
subscribed: this.subscribed
|
|
216
|
+
subscribed: this.subscribed,
|
|
207
217
|
};
|
|
208
218
|
}
|
|
209
219
|
subscribe() {
|
package/package.json
CHANGED
package/umd/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see main.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(()=>{return e={466:function(e){e.exports=function(){"use strict";var e=Object.prototype.toString,t=Array.isArray||function(t){return"[object Array]"===e.call(t)};function n(e){return"function"==typeof e}function r(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function s(e,t){return null!=e&&"object"==typeof e&&t in e}var i=RegExp.prototype.test;var o=/\S/;function a(e){return!function(e,t){return i.call(e,t)}(o,e)}var c={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};var l=/\s*/,u=/\s+/,p=/\s*=/,d=/\s*\}/,h=/#|\^|\/|>|\{|&|=|!/;function g(e){this.string=e,this.tail=e,this.pos=0}function v(e,t){this.view=e,this.cache={".":this.view},this.parent=t}function f(){this.templateCache={_cache:{},set:function(e,t){this._cache[e]=t},get:function(e){return this._cache[e]},clear:function(){this._cache={}}}}g.prototype.eos=function(){return""===this.tail},g.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var n=t[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n},g.prototype.scanUntil=function(e){var t,n=this.tail.search(e);switch(n){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,n),this.tail=this.tail.substring(n)}return this.pos+=t.length,t},v.prototype.push=function(e){return new v(e,this)},v.prototype.lookup=function(e){var t,r,i,o=this.cache;if(o.hasOwnProperty(e))t=o[e];else{for(var a,c,l,u=this,p=!1;u;){if(e.indexOf(".")>0)for(a=u.view,c=e.split("."),l=0;null!=a&&l<c.length;)l===c.length-1&&(p=s(a,c[l])||(r=a,i=c[l],null!=r&&"object"!=typeof r&&r.hasOwnProperty&&r.hasOwnProperty(i))),a=a[c[l++]];else a=u.view[e],p=s(u.view,e);if(p){t=a;break}u=u.parent}o[e]=t}return n(t)&&(t=t.call(this.view)),t},f.prototype.clearCache=function(){void 0!==this.templateCache&&this.templateCache.clear()},f.prototype.parse=function(e,n){var s=this.templateCache,i=e+":"+(n||m.tags).join(":"),o=void 0!==s,c=o?s.get(i):void 0;return null==c&&(c=function(e,n){if(!e)return[];var s,i,o,c=!1,v=[],f=[],w=[],b=!1,S=!1,I="",y=0;function T(){if(b&&!S)for(;w.length;)delete f[w.pop()];else w=[];b=!1,S=!1}function E(e){if("string"==typeof e&&(e=e.split(u,2)),!t(e)||2!==e.length)throw new Error("Invalid tags: "+e);s=new RegExp(r(e[0])+"\\s*"),i=new RegExp("\\s*"+r(e[1])),o=new RegExp("\\s*"+r("}"+e[1]))}E(n||m.tags);for(var C,A,P,R,N,x,_=new g(e);!_.eos();){if(C=_.pos,P=_.scanUntil(s))for(var O=0,U=P.length;O<U;++O)a(R=P.charAt(O))?(w.push(f.length),I+=R):(S=!0,c=!0,I+=" "),f.push(["text",R,C,C+1]),C+=1,"\n"===R&&(T(),I="",y=0,c=!1);if(!_.scan(s))break;if(b=!0,A=_.scan(h)||"name",_.scan(l),"="===A?(P=_.scanUntil(p),_.scan(p),_.scanUntil(i)):"{"===A?(P=_.scanUntil(o),_.scan(d),_.scanUntil(i),A="&"):P=_.scanUntil(i),!_.scan(i))throw new Error("Unclosed tag at "+_.pos);if(N=">"==A?[A,P,C,_.pos,I,y,c]:[A,P,C,_.pos],y++,f.push(N),"#"===A||"^"===A)v.push(N);else if("/"===A){if(!(x=v.pop()))throw new Error('Unopened section "'+P+'" at '+C);if(x[1]!==P)throw new Error('Unclosed section "'+x[1]+'" at '+C)}else"name"===A||"{"===A||"&"===A?S=!0:"="===A&&E(P)}if(T(),x=v.pop())throw new Error('Unclosed section "'+x[1]+'" at '+_.pos);return function(e){for(var t,n=[],r=n,s=[],i=0,o=e.length;i<o;++i)switch((t=e[i])[0]){case"#":case"^":r.push(t),s.push(t),r=t[4]=[];break;case"/":s.pop()[5]=t[2],r=s.length>0?s[s.length-1][4]:n;break;default:r.push(t)}return n}(function(e){for(var t,n,r=[],s=0,i=e.length;s<i;++s)(t=e[s])&&("text"===t[0]&&n&&"text"===n[0]?(n[1]+=t[1],n[3]=t[3]):(r.push(t),n=t));return r}(f))}(e,n),o&&s.set(i,c)),c},f.prototype.render=function(e,t,n,r){var s=this.getConfigTags(r),i=this.parse(e,s),o=t instanceof v?t:new v(t,void 0);return this.renderTokens(i,o,n,e,r)},f.prototype.renderTokens=function(e,t,n,r,s){for(var i,o,a,c="",l=0,u=e.length;l<u;++l)a=void 0,"#"===(o=(i=e[l])[0])?a=this.renderSection(i,t,n,r,s):"^"===o?a=this.renderInverted(i,t,n,r,s):">"===o?a=this.renderPartial(i,t,n,s):"&"===o?a=this.unescapedValue(i,t):"name"===o?a=this.escapedValue(i,t,s):"text"===o&&(a=this.rawValue(i)),void 0!==a&&(c+=a);return c},f.prototype.renderSection=function(e,r,s,i,o){var a=this,c="",l=r.lookup(e[1]);if(l){if(t(l))for(var u=0,p=l.length;u<p;++u)c+=this.renderTokens(e[4],r.push(l[u]),s,i,o);else if("object"==typeof l||"string"==typeof l||"number"==typeof l)c+=this.renderTokens(e[4],r.push(l),s,i,o);else if(n(l)){if("string"!=typeof i)throw new Error("Cannot use higher-order sections without the original template");null!=(l=l.call(r.view,i.slice(e[3],e[5]),(function(e){return a.render(e,r,s,o)})))&&(c+=l)}else c+=this.renderTokens(e[4],r,s,i,o);return c}},f.prototype.renderInverted=function(e,n,r,s,i){var o=n.lookup(e[1]);if(!o||t(o)&&0===o.length)return this.renderTokens(e[4],n,r,s,i)},f.prototype.indentPartial=function(e,t,n){for(var r=t.replace(/[^ \t]/g,""),s=e.split("\n"),i=0;i<s.length;i++)s[i].length&&(i>0||!n)&&(s[i]=r+s[i]);return s.join("\n")},f.prototype.renderPartial=function(e,t,r,s){if(r){var i=this.getConfigTags(s),o=n(r)?r(e[1]):r[e[1]];if(null!=o){var a=e[6],c=e[5],l=e[4],u=o;0==c&&l&&(u=this.indentPartial(o,l,a));var p=this.parse(u,i);return this.renderTokens(p,t,r,u,s)}}},f.prototype.unescapedValue=function(e,t){var n=t.lookup(e[1]);if(null!=n)return n},f.prototype.escapedValue=function(e,t,n){var r=this.getConfigEscape(n)||m.escape,s=t.lookup(e[1]);if(null!=s)return"number"==typeof s&&r===m.escape?String(s):r(s)},f.prototype.rawValue=function(e){return e[1]},f.prototype.getConfigTags=function(e){return t(e)?e:e&&"object"==typeof e?e.tags:void 0},f.prototype.getConfigEscape=function(e){return e&&"object"==typeof e&&!t(e)?e.escape:void 0};var m={name:"mustache.js",version:"4.2.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(e){w.templateCache=e},get templateCache(){return w.templateCache}},w=new f;return m.clearCache=function(){return w.clearCache()},m.parse=function(e,t){return w.parse(e,t)},m.render=function(e,n,r,s){if("string"!=typeof e)throw new TypeError('Invalid template! Template should be a "string" but "'+((t(i=e)?"array":typeof i)+'" was given as the first argument for mustache#render(template, view, partials)'));var i;return w.render(e,n,r,s)},m.escape=function(e){return String(e).replace(/[&<>"'`=\/]/g,(function(e){return c[e]}))},m.Scanner=g,m.Context=v,m.Writer=f,m}()},715:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventTargetWithType=void 0;class n extends EventTarget{addEventListener(e,t,n){super.addEventListener(e,t,n)}removeEventListener(e,t,n){super.removeEventListener(e,t,n)}}t.EventTargetWithType=n},752:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.App=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{constructor(){super(...arguments),this.startiappIsLoaded=!1}get appIntegration(){return(0,s.getIntegration)("AppIntegration")}setStartiappIsLoaded(){this.startiappIsLoaded=!0}isStartiappLoaded(){return this.startiappIsLoaded}setAppUrl(e){this.appIntegration.setAppUrl(e)}resetAppUrl(){this.appIntegration.resetAppUrl()}openExternalBrowser(e){this.appIntegration.openBrowser(e)}brandId(){return new Promise(((e,t)=>{this.resolveBrandId=e,this.appIntegration.brandId()}))}requestReview(){this.appIntegration.requestReview()}deviceId(){return new Promise(((e,t)=>{this.resolveDeviceId=e,this.appIntegration.deviceId()}))}version(){return new Promise(((e,t)=>{this.resolveVersion=e,this.appIntegration.version()}))}getInternalDomains(){return new Promise(((e,t)=>{this.resolveGetInternalDomains=e,this.appIntegration.getInternalDomains()}))}addInternalDomain(e){this.appIntegration.addInternalDomain(e)}removeInternalDomain(e){this.appIntegration.removeInternalDomain(e)}showStatusBar(){this.appIntegration.showStatusBar()}hideStatusBar(){this.appIntegration.hideStatusBar()}setStatusBar(e){this.appIntegration.setStatusBar(e)}setSafeAreaBackgroundColor(e){return new Promise(((t,n)=>{this.resolveSetSafeAreaBackgroundColor=t,this.appIntegration.setSafeAreaBackgroundColor(e)}))}disableScreenRotation(){this.appIntegration.disableScreenRotation()}enableScreenRotation(){this.appIntegration.enableScreenRotation()}addExternalDomains(...e){let t=e.map((e=>({pattern:e.source,flags:e.flags})));this.appIntegration.addExternalDomains(t)}removeExternalDomains(...e){let t=e.map((e=>({pattern:e.source,flags:e.flags})));this.appIntegration.removeExternalDomains(t)}getExternalDomains(){return new Promise(((e,t)=>{this.resolveExternalDomains=e,this.appIntegration.getExternalDomains()}))}getExternalDomainsResult(e){this.resolveExternalDomains(e),this.resolveExternalDomains=null}appInForegroundEventRecievedEvent(){this.dispatchEvent(new CustomEvent("appInForeground"))}brandIdResult(e){this.resolveBrandId(e),this.resolveBrandId=null}versionResult(e){this.resolveVersion(e),this.resolveVersion=null}deviceIdResult(e){this.resolveDeviceId(e),this.resolveDeviceId=null}setSafeAreaBackgroundColorResult(e){this.resolveSetSafeAreaBackgroundColor(e),this.resolveSetSafeAreaBackgroundColor=null}navigatingPageEvent(e){this.dispatchEvent(new CustomEvent("navigatingPage",{detail:e}))}getInternalDomainsResult(e){this.resolveGetInternalDomains(e),this.resolveGetInternalDomains=null}}t.App=new i},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Biometrics=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{constructor(){super(...arguments),this.SECURED_CONTENT_KEY="STARTI_APP_BIOMETRIC_CONTENT",this.SECURED_LOGIN_KEY="STARTI_APP_BIOMETRIC_LOGIN_CONTENT",this.defaultScanTitle="Prove you have fingers!",this.defaultScanReason="Can't let you in if you don't."}get biometricIntegration(){return(0,s.getIntegration)("BiometricIntegration")}scan(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveScan=n,this.biometricIntegration.startScanning(e,t)}))}getAuthenticationType(){return new Promise(((e,t)=>{this.resolveAuthType=e,this.biometricIntegration.getAuthenticationType()}))}setSecuredContent(e){this.biometricIntegration.setSecuredContent(this.SECURED_CONTENT_KEY,JSON.stringify(e))}getSecuredContent(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveGetContent=n,this.biometricIntegration.getSecuredContent(this.SECURED_CONTENT_KEY,e,t)}))}hasSecuredContent(){return new Promise(((e,t)=>{this.resolveHasSecureContent=e,this.biometricIntegration.hasSecuredContent(this.SECURED_CONTENT_KEY)}))}removeSecuredContent(){this.biometricIntegration.removeSecuredContent(this.SECURED_CONTENT_KEY)}setUsernameAndPassword(e,t){this.biometricIntegration.setSecuredContent(this.SECURED_LOGIN_KEY,JSON.stringify({username:e,password:t}))}removeUsernameAndPassword(){this.biometricIntegration.removeSecuredContent(this.SECURED_LOGIN_KEY)}hasUsernameAndPassword(){return new Promise(((e,t)=>{this.resolveHasUsernameAndPassword=e,this.biometricIntegration.hasSecuredContent(this.SECURED_LOGIN_KEY)}))}getUsernameAndPassword(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveGetUsernamePassword=n,this.biometricIntegration.getSecuredContent(this.SECURED_LOGIN_KEY,e,t)}))}handleResolveGetUsernamePassword(e){try{const t=JSON.parse(e.result);this.resolveGetUsernamePassword(t)}catch(e){this.resolveGetUsernamePassword(null)}this.resolveGetUsernamePassword=null}hasSecuredContentResult({result:e,key:t}){if(t===this.SECURED_LOGIN_KEY)return this.resolveHasUsernameAndPassword(e),void(this.resolveHasUsernameAndPassword=null);this.resolveHasSecureContent(e),this.resolveHasSecureContent=null}getAuthenticationTypeResult(e){this.resolveAuthType(e),this.resolveAuthType=null}startScanningResult(e){this.resolveScan(e),this.resolveScan=null}getSecuredContentResult(e){if(e.key!==this.SECURED_LOGIN_KEY){try{const t=JSON.parse(e.result);this.resolveGetContent(t)}catch(t){this.resolveGetContent(e.result)}this.resolveGetContent=null}else this.handleResolveGetUsernamePassword(e)}}t.Biometrics=new i},495:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function o(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClientUser=void 0;const s=n(715),i=n(913),o=n(607);class a extends s.EventTargetWithType{registerId(e){return r(this,void 0,void 0,(function*(){const t=yield o.default.App.brandId(),n=yield o.default.App.deviceId(),r=yield o.default.PushNotification.getToken();if(!r||0===r.length)throw console.warn("Failed to register logged in client user",e,"No FCM token"),new Error(`Failed to register logged in client user ${e}: No FCM token`);const s={brandId:t,clientUserId:e,deviceId:n,fcmToken:r},a=yield fetch(i.baseUrl+"/ClientUser-registerId",{body:JSON.stringify(s),headers:{"Content-Type":"application/json"},method:"POST"});if(!a.ok)throw console.warn("Failed to register logged in client user",e,s),new Error(`Failed to register logged in client user ${e}: Firebase returned statuscode ${a.status}`)}))}unregisterId(){return r(this,void 0,void 0,(function*(){const e={brandId:yield o.default.App.brandId(),deviceId:yield o.default.App.deviceId()},t=yield fetch(i.baseUrl+"/ClientUser-unregisterId",{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"});if(!t.ok)throw console.warn("Failed to unregister logged in client user",e),new Error(`Failed to unregister logged in client user: Firebase returned statuscode ${t.status}`)}))}}t.ClientUser=new a},913:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.styleTagId=t.baseUrl=void 0,t.baseUrl="https://europe-west3-startiapp-admin-1fac2.cloudfunctions.net",t.styleTagId="startiapp-styling"},955:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Device=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get deviceIntegration(){return(0,s.getIntegration)("DeviceIntegration")}startAccelerometer(){this.deviceIntegration.startAccelerometer()}stopAccelerometer(){this.deviceIntegration.stopAccelerometer()}isAccelerometerStarted(){return new Promise(((e,t)=>{this.deviceIntegration.isAccelerometerStarted(),this.resolveIsAccelerometerStarted=e}))}isAccelerometerStartedResult(e){this.resolveIsAccelerometerStarted(e),this.resolveIsAccelerometerStarted=null}onShakeEvent(){this.dispatchEvent(new CustomEvent("shake"))}}t.Device=new i},900:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getIntegration=void 0;let n={};t.getIntegration=function(e){if(n[e])return n[e];let t=window[e],r=0;for(;!t&&r<5;)t=window.parent[e],r++;if(!t)throw new Error(`Could not find integration ${e}`);return n[e]=t,t}},607:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(752),s=n(1),i=n(495),o=n(955),a=n(900),c=n(240),l=n(983),u=n(681),p=n(952),d=n(716),h=n(634),g=window;g.appIntegrationsAreReady=()=>{r.App.setStartiappIsLoaded(),f.dispatchEvent(new CustomEvent("ready"))},g.startiappDevice=o.Device,g.startiappApp=r.App,g.startiappUser=i.ClientUser,g.startiappQrScanner=p.QrScanner,g.startiappPushNotification=u.PushNotification,g.startiappNFC=l.NFC,g.startiappShare=h.Share,g.startiappBiometric=s.Biometrics,g.appErrorEvent=e=>{f.dispatchEvent(new CustomEvent("error",{detail:e}))};class v extends EventTarget{constructor(){super(...arguments),this.App=r.App,this.Device=o.Device,this.Biometrics=s.Biometrics,this.User=i.ClientUser,this.NfcScanner=l.NFC,this.PushNotification=u.PushNotification,this.QrScanner=p.QrScanner,this.Share=h.Share}get appIntegration(){return(0,a.getIntegration)("AppIntegration")}initialize(e){this.isRunningInApp()&&d.AppUI.setOptions(e),this.appIntegration.webAppIsReady()}isRunningInApp(){return navigator.userAgent.toLowerCase().indexOf("starti.app")>-1}addEventListener(e,t,n){super.addEventListener(e,t,n)}removeEventListener(e,t,n){super.removeEventListener(e,t,n)}}const f=new v;if(document.body)m();else{const e=new MutationObserver((()=>m(e)));e.observe(document.documentElement,{childList:!0})}function m(e){if(!document.body)return;if(f.isRunningInApp()?document.body.setAttribute("startiapp",""):document.body.removeAttribute("startiapp"),!document.head)return;const t=document.createElement("style");if(t.innerHTML="body:not([startiapp]) .startiapp-hide-in-browser,body:not([startiapp]) .startiapp-show-in-app,body[startiapp] .startiapp-hide-in-app,body[startiapp] .startiapp-show-in-browser{display:none!important}",document.head.appendChild(t),f.isRunningInApp()){const e={width:"device-width","viewport-fit":"cover"},t=document.querySelector("meta[name=viewport]");if(t){const n=(0,c.parseViewportMeta)(t.content);t.content=(0,c.serializeViewportMeta)(Object.assign(Object.assign({},n),e))}else{const t=document.createElement("meta");t.name="viewport",t.content=(0,c.serializeViewportMeta)(e),document.head.appendChild(t)}}e&&e.disconnect()}t.default=f,g.startiapp=f},240:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.serializeViewportMeta=t.parseViewportMeta=void 0,t.parseViewportMeta=function(e){const t={},n=e.split(",");for(const e of n){const[n,r]=e.trim().split("=");switch(n.trim()){case"width":case"height":case"initial-scale":case"minimum-scale":case"maximum-scale":case"user-scalable":case"viewport-fit":t[n.trim()]=r.trim()}}return t},t.serializeViewportMeta=function(e){const t=[];for(const[n,r]of Object.entries(e))r&&t.push(`${n}=${r}`);return t.join(", ")}},983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NFC=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get NFCIntegration(){return(0,s.getIntegration)("NFCIntegration")}isNfcSupported(){return new Promise(((e,t)=>{this.resolveNFCSupported=e,this.NFCIntegration.isNFCSupported()}))}startNfcScanner(){return new Promise((e=>{this.resolveStartNFCReader=e,this.NFCIntegration.startListening()}))}stopNfcScanner(){return new Promise((e=>{this.resolveStopNFCReader=e,this.NFCIntegration.stopListening()}))}nfcTagScannedEvent(e){const t=new CustomEvent("nfcTagScanned",{detail:e});this.dispatchEvent(t)}stopListeningResult(e){this.resolveStopNFCReader(e),this.resolveStopNFCReader=null}isNFCSupportedResult(e){this.resolveNFCSupported(e),this.resolveNFCSupported=null}startListeningResult(e){this.resolveStartNFCReader(e),this.resolveStartNFCReader=null}}t.NFC=new i},681:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function o(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.PushNotification=t.Topic=void 0;const s=n(466),i=n(715),o=n(913),a=n(900),c=n(607);class l extends i.EventTargetWithType{get pushNotificationIntegration(){return(0,a.getIntegration)("PushNotificationIntegration")}requestAccess(){return r(this,void 0,void 0,(function*(){return new Promise(((e,t)=>{this.resolveRequestAccess=e,this.pushNotificationIntegration.requestAccess()}))}))}getToken(){return new Promise(((e,t)=>{this.resolveFCMToken=e,this.pushNotificationIntegration.getFCMToken()}))}getTopics(){return r(this,void 0,void 0,(function*(){const e={brand:yield c.default.App.brandId()},t=yield fetch(o.baseUrl+"/Topics-getTopics?"+new URLSearchParams(Object.assign({},e)));if(!t.ok)throw new Error("Failed to get topics");const n=yield t.json(),r=this.getSubscribedTopics();return n.map((({name:e,topic:t})=>new u(t,e,r.includes(t))))}))}renderTopics(){return r(this,void 0,void 0,(function*(){const e=yield this.getTopics(),t=document.getElementById("startiapp-topics-template");if(!t||"SCRIPT"!==t.tagName)throw new Error("Template element not found");if("x-tmpl-mustache"!==t.type)throw new Error('Template element must have type="x-tmpl-mustache"');const n=document.getElementById("startiapp-topics-target");if(!n||"DIV"!==n.tagName)throw new Error("Template target element not found");const i=t.innerHTML,o=(0,s.render)(i,{topics:e});n.innerHTML=o,n.querySelectorAll('input[type="checkbox"]').forEach((e=>{e.dataset.startiappTopic&&e.addEventListener("change",(t=>r(this,void 0,void 0,(function*(){if(!(yield this.requestAccess()))return t.target.checked=!1,void t.preventDefault();e.checked?this.subscribeToTopics([e.dataset.startiappTopic]):this.unsubscribeFromTopics([e.dataset.startiappTopic])}))))}))}))}subscribeToTopics(e){return r(this,void 0,void 0,(function*(){const[t,n,r]=yield Promise.all([this.getToken(),c.default.App.brandId(),c.default.App.deviceId()]),s=[];e.forEach((e=>{const i={brandId:n,topic:e,fcmToken:t,deviceId:r},a=fetch(o.baseUrl+"/Topics-subscribeToTopic",{body:JSON.stringify(i),method:"POST",headers:{"Content-Type":"application/json"}});s.push(a)})),(yield Promise.all(s)).forEach(((t,n)=>{t.ok?this.updateSubscribedTopics(e[n],!0):console.warn("Failed to sign up to topic",n,e[n])}))}))}unsubscribeFromTopics(e){return r(this,void 0,void 0,(function*(){const[t,n,r]=yield Promise.all([this.getToken(),c.default.App.brandId(),c.default.App.deviceId()]),s=[];e.forEach((e=>{const i={brandId:n,topic:e,fcmToken:t,deviceId:r},a=fetch(o.baseUrl+"/Topics-unsubscribeFromTopic",{body:JSON.stringify(i),method:"POST",headers:{"Content-Type":"application/json"}});s.push(a)})),(yield Promise.all(s)).forEach(((t,n)=>{t.ok?this.updateSubscribedTopics(e[n],!1):console.warn("Failed to unsubscribe from topic",n,e[n])}))}))}requestAccessResult(e){this.resolveRequestAccess(e),this.resolveRequestAccess=null}getFCMTokenResult(e){this.resolveFCMToken(e),this.resolveFCMToken=null}tokenReceivedEvent(e){this.dispatchEvent(new CustomEvent("tokenRefreshed",{detail:e}))}notificationReceivedEvent(e){this.dispatchEvent(new CustomEvent("notificationReceived",{detail:e}))}firebasePushNotificationTopicsUnsubscribeResult(e){}firebasePushNotificationSubscribeToTopicsResult(e){}updateSubscribedTopics(e,t){const n=localStorage.getItem("startiapp-subscribed-topics")?JSON.parse(localStorage.getItem("startiapp-subscribed-topics")):[];t?n.includes(e)||n.push(e):n.includes(e)&&n.splice(n.indexOf(e),1),localStorage.setItem("startiapp-subscribed-topics",JSON.stringify(n))}getSubscribedTopics(){return localStorage.getItem("startiapp-subscribed-topics")?JSON.parse(localStorage.getItem("startiapp-subscribed-topics")):[]}}class u{constructor(e,t,n=!1){this.topic=e,this.name=t,this.subscribed=n}toJSON(){return{topic:this.topic,name:this.name,subscribed:this.subscribed}}subscribe(){t.PushNotification.subscribeToTopics([this.topic])}unsubscribe(){t.PushNotification.unsubscribeFromTopics([this.topic])}}t.Topic=u,t.PushNotification=new l},952:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QrScanner=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get qrScannerIntegration(){return(0,s.getIntegration)("QrScannerIntegration")}scan(){return new Promise(((e,t)=>{this.resolveScan=e,this.qrScannerIntegration.startQrCodeScanner()}))}isCameraAccessGranted(){return new Promise(((e,t)=>{this.resolveCameraAccessGranted=e,this.qrScannerIntegration.isCameraAccessGranted()}))}requestCameraAccess(){return new Promise(((e,t)=>{this.resolveRequestCameraAccess=e,this.qrScannerIntegration.requestCameraAccess()}))}requestCameraAccessResult(e){this.resolveRequestCameraAccess(e),this.resolveRequestCameraAccess=null}startQrCodeScannerResult(e){this.resolveScan(e),this.resolveScan=null}isCameraAccessGrantedResult(e){this.resolveCameraAccessGranted(e),this.resolveCameraAccessGranted=null}}t.QrScanner=new i},716:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AppUI=void 0;const r=n(607),s=n(913),i=n(240);t.AppUI=new class{constructor(){this.options={allowDrag:!1,allowHighligt:!1,allowZoom:!1,allowScrollBounce:!1,statusBar:{removeSafeArea:!0,hideText:!1,safeAreaBackgroundColor:"#000000",darkContent:!1}}}setOptions(e){this.options=Object.assign(this.options,e),this.updateUI()}getOptions(){return this.options}updateViewportMeta(e){const t=document.querySelector("meta[name=viewport]");if(t){const n=(0,i.parseViewportMeta)(t.content);t.content=(0,i.serializeViewportMeta)(Object.assign(Object.assign({},n),e))}else{const t=document.createElement("meta");t.setAttribute("name","viewport"),t.setAttribute("content",(0,i.serializeViewportMeta)(e)),document.head.appendChild(t)}}updateUI(){this.styleString="";const e=document.getElementById(s.styleTagId);e&&e.remove();const t=document.getElementsByTagName("img"),n=document.getElementsByTagName("a");this.options.allowDrag?[...t,...n].forEach((e=>{e.removeAttribute("draggable")})):[...t,...n].forEach((e=>{e.setAttribute("draggable","false")})),this.options.allowHighligt||(this.styleString+="\n body {\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n user-select: none;\n }\n "),this.options.allowScrollBounce||(this.styleString+="\n html {\n overscroll-behavior: none;\n }\n "),this.options.allowZoom||(this.styleString+="\n body {\n touch-action: pan-x pan-y;\n }\n ",this.updateViewportMeta({"user-scalable":"no"}));const i=document.createElement("style");i.textContent=this.styleString,i.setAttribute("id",s.styleTagId),document.body.appendChild(i),r.default.App.setStatusBar(this.options.statusBar)}}},634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Share=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get shareIntegration(){return(0,s.getIntegration)("ShareIntegration")}shareFile(e,t){return new Promise(((n,r)=>{this.resolveShareFile=n,this.shareIntegration.shareFile(e,t)}))}shareText(e){return new Promise(((t,n)=>{this.resolveShareText=t,this.shareIntegration.shareText(e)}))}downloadFile(e,t){return new Promise(((n,r)=>{this.resolveDownloadText=n,this.shareIntegration.downloadFile(e,t)}))}shareFileResult(e){this.resolveShareFile(e),this.resolveShareFile=null}shareTextResult(e){this.resolveShareText(e),this.resolveShareText=null}downloadFileResult(e){this.resolveDownloadText(e),this.resolveDownloadText=null}}t.Share=new i}},t={},function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}(607);var e,t}));
|
|
2
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(()=>{return e={466:function(e){e.exports=function(){"use strict";var e=Object.prototype.toString,t=Array.isArray||function(t){return"[object Array]"===e.call(t)};function n(e){return"function"==typeof e}function r(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function s(e,t){return null!=e&&"object"==typeof e&&t in e}var i=RegExp.prototype.test;var o=/\S/;function a(e){return!function(e,t){return i.call(e,t)}(o,e)}var c={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};var l=/\s*/,u=/\s+/,p=/\s*=/,d=/\s*\}/,h=/#|\^|\/|>|\{|&|=|!/;function g(e){this.string=e,this.tail=e,this.pos=0}function v(e,t){this.view=e,this.cache={".":this.view},this.parent=t}function f(){this.templateCache={_cache:{},set:function(e,t){this._cache[e]=t},get:function(e){return this._cache[e]},clear:function(){this._cache={}}}}g.prototype.eos=function(){return""===this.tail},g.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var n=t[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n},g.prototype.scanUntil=function(e){var t,n=this.tail.search(e);switch(n){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,n),this.tail=this.tail.substring(n)}return this.pos+=t.length,t},v.prototype.push=function(e){return new v(e,this)},v.prototype.lookup=function(e){var t,r,i,o=this.cache;if(o.hasOwnProperty(e))t=o[e];else{for(var a,c,l,u=this,p=!1;u;){if(e.indexOf(".")>0)for(a=u.view,c=e.split("."),l=0;null!=a&&l<c.length;)l===c.length-1&&(p=s(a,c[l])||(r=a,i=c[l],null!=r&&"object"!=typeof r&&r.hasOwnProperty&&r.hasOwnProperty(i))),a=a[c[l++]];else a=u.view[e],p=s(u.view,e);if(p){t=a;break}u=u.parent}o[e]=t}return n(t)&&(t=t.call(this.view)),t},f.prototype.clearCache=function(){void 0!==this.templateCache&&this.templateCache.clear()},f.prototype.parse=function(e,n){var s=this.templateCache,i=e+":"+(n||m.tags).join(":"),o=void 0!==s,c=o?s.get(i):void 0;return null==c&&(c=function(e,n){if(!e)return[];var s,i,o,c=!1,v=[],f=[],w=[],b=!1,S=!1,I="",y=0;function T(){if(b&&!S)for(;w.length;)delete f[w.pop()];else w=[];b=!1,S=!1}function E(e){if("string"==typeof e&&(e=e.split(u,2)),!t(e)||2!==e.length)throw new Error("Invalid tags: "+e);s=new RegExp(r(e[0])+"\\s*"),i=new RegExp("\\s*"+r(e[1])),o=new RegExp("\\s*"+r("}"+e[1]))}E(n||m.tags);for(var C,A,P,N,R,x,_=new g(e);!_.eos();){if(C=_.pos,P=_.scanUntil(s))for(var O=0,U=P.length;O<U;++O)a(N=P.charAt(O))?(w.push(f.length),I+=N):(S=!0,c=!0,I+=" "),f.push(["text",N,C,C+1]),C+=1,"\n"===N&&(T(),I="",y=0,c=!1);if(!_.scan(s))break;if(b=!0,A=_.scan(h)||"name",_.scan(l),"="===A?(P=_.scanUntil(p),_.scan(p),_.scanUntil(i)):"{"===A?(P=_.scanUntil(o),_.scan(d),_.scanUntil(i),A="&"):P=_.scanUntil(i),!_.scan(i))throw new Error("Unclosed tag at "+_.pos);if(R=">"==A?[A,P,C,_.pos,I,y,c]:[A,P,C,_.pos],y++,f.push(R),"#"===A||"^"===A)v.push(R);else if("/"===A){if(!(x=v.pop()))throw new Error('Unopened section "'+P+'" at '+C);if(x[1]!==P)throw new Error('Unclosed section "'+x[1]+'" at '+C)}else"name"===A||"{"===A||"&"===A?S=!0:"="===A&&E(P)}if(T(),x=v.pop())throw new Error('Unclosed section "'+x[1]+'" at '+_.pos);return function(e){for(var t,n=[],r=n,s=[],i=0,o=e.length;i<o;++i)switch((t=e[i])[0]){case"#":case"^":r.push(t),s.push(t),r=t[4]=[];break;case"/":s.pop()[5]=t[2],r=s.length>0?s[s.length-1][4]:n;break;default:r.push(t)}return n}(function(e){for(var t,n,r=[],s=0,i=e.length;s<i;++s)(t=e[s])&&("text"===t[0]&&n&&"text"===n[0]?(n[1]+=t[1],n[3]=t[3]):(r.push(t),n=t));return r}(f))}(e,n),o&&s.set(i,c)),c},f.prototype.render=function(e,t,n,r){var s=this.getConfigTags(r),i=this.parse(e,s),o=t instanceof v?t:new v(t,void 0);return this.renderTokens(i,o,n,e,r)},f.prototype.renderTokens=function(e,t,n,r,s){for(var i,o,a,c="",l=0,u=e.length;l<u;++l)a=void 0,"#"===(o=(i=e[l])[0])?a=this.renderSection(i,t,n,r,s):"^"===o?a=this.renderInverted(i,t,n,r,s):">"===o?a=this.renderPartial(i,t,n,s):"&"===o?a=this.unescapedValue(i,t):"name"===o?a=this.escapedValue(i,t,s):"text"===o&&(a=this.rawValue(i)),void 0!==a&&(c+=a);return c},f.prototype.renderSection=function(e,r,s,i,o){var a=this,c="",l=r.lookup(e[1]);if(l){if(t(l))for(var u=0,p=l.length;u<p;++u)c+=this.renderTokens(e[4],r.push(l[u]),s,i,o);else if("object"==typeof l||"string"==typeof l||"number"==typeof l)c+=this.renderTokens(e[4],r.push(l),s,i,o);else if(n(l)){if("string"!=typeof i)throw new Error("Cannot use higher-order sections without the original template");null!=(l=l.call(r.view,i.slice(e[3],e[5]),(function(e){return a.render(e,r,s,o)})))&&(c+=l)}else c+=this.renderTokens(e[4],r,s,i,o);return c}},f.prototype.renderInverted=function(e,n,r,s,i){var o=n.lookup(e[1]);if(!o||t(o)&&0===o.length)return this.renderTokens(e[4],n,r,s,i)},f.prototype.indentPartial=function(e,t,n){for(var r=t.replace(/[^ \t]/g,""),s=e.split("\n"),i=0;i<s.length;i++)s[i].length&&(i>0||!n)&&(s[i]=r+s[i]);return s.join("\n")},f.prototype.renderPartial=function(e,t,r,s){if(r){var i=this.getConfigTags(s),o=n(r)?r(e[1]):r[e[1]];if(null!=o){var a=e[6],c=e[5],l=e[4],u=o;0==c&&l&&(u=this.indentPartial(o,l,a));var p=this.parse(u,i);return this.renderTokens(p,t,r,u,s)}}},f.prototype.unescapedValue=function(e,t){var n=t.lookup(e[1]);if(null!=n)return n},f.prototype.escapedValue=function(e,t,n){var r=this.getConfigEscape(n)||m.escape,s=t.lookup(e[1]);if(null!=s)return"number"==typeof s&&r===m.escape?String(s):r(s)},f.prototype.rawValue=function(e){return e[1]},f.prototype.getConfigTags=function(e){return t(e)?e:e&&"object"==typeof e?e.tags:void 0},f.prototype.getConfigEscape=function(e){return e&&"object"==typeof e&&!t(e)?e.escape:void 0};var m={name:"mustache.js",version:"4.2.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(e){w.templateCache=e},get templateCache(){return w.templateCache}},w=new f;return m.clearCache=function(){return w.clearCache()},m.parse=function(e,t){return w.parse(e,t)},m.render=function(e,n,r,s){if("string"!=typeof e)throw new TypeError('Invalid template! Template should be a "string" but "'+((t(i=e)?"array":typeof i)+'" was given as the first argument for mustache#render(template, view, partials)'));var i;return w.render(e,n,r,s)},m.escape=function(e){return String(e).replace(/[&<>"'`=\/]/g,(function(e){return c[e]}))},m.Scanner=g,m.Context=v,m.Writer=f,m}()},715:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventTargetWithType=void 0;class n extends EventTarget{addEventListener(e,t,n){super.addEventListener(e,t,n)}removeEventListener(e,t,n){super.removeEventListener(e,t,n)}}t.EventTargetWithType=n},752:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.App=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{constructor(){super(...arguments),this.startiappIsLoaded=!1}get appIntegration(){return(0,s.getIntegration)("AppIntegration")}setStartiappIsLoaded(){this.startiappIsLoaded=!0}isStartiappLoaded(){return this.startiappIsLoaded}setAppUrl(e){this.appIntegration.setAppUrl(e)}resetAppUrl(){this.appIntegration.resetAppUrl()}openExternalBrowser(e){this.appIntegration.openBrowser(e)}brandId(){return new Promise(((e,t)=>{this.resolveBrandId=e,this.appIntegration.brandId()}))}requestReview(){this.appIntegration.requestReview()}deviceId(){return new Promise(((e,t)=>{this.resolveDeviceId=e,this.appIntegration.deviceId()}))}version(){return new Promise(((e,t)=>{this.resolveVersion=e,this.appIntegration.version()}))}getInternalDomains(){return new Promise(((e,t)=>{this.resolveGetInternalDomains=e,this.appIntegration.getInternalDomains()}))}addInternalDomain(e){this.appIntegration.addInternalDomain(e)}removeInternalDomain(e){this.appIntegration.removeInternalDomain(e)}showStatusBar(){this.appIntegration.showStatusBar()}hideStatusBar(){this.appIntegration.hideStatusBar()}setStatusBar(e){this.appIntegration.setStatusBar(e)}setSafeAreaBackgroundColor(e){return new Promise(((t,n)=>{this.resolveSetSafeAreaBackgroundColor=t,this.appIntegration.setSafeAreaBackgroundColor(e)}))}disableScreenRotation(){this.appIntegration.disableScreenRotation()}enableScreenRotation(){this.appIntegration.enableScreenRotation()}addExternalDomains(...e){let t=e.map((e=>({pattern:e.source,flags:e.flags})));this.appIntegration.addExternalDomains(t)}removeExternalDomains(...e){let t=e.map((e=>({pattern:e.source,flags:e.flags})));this.appIntegration.removeExternalDomains(t)}getExternalDomains(){return new Promise(((e,t)=>{this.resolveExternalDomains=e,this.appIntegration.getExternalDomains()}))}getExternalDomainsResult(e){this.resolveExternalDomains(e),this.resolveExternalDomains=null}appInForegroundEventRecievedEvent(){this.dispatchEvent(new CustomEvent("appInForeground"))}brandIdResult(e){this.resolveBrandId(e),this.resolveBrandId=null}versionResult(e){this.resolveVersion(e),this.resolveVersion=null}deviceIdResult(e){this.resolveDeviceId(e),this.resolveDeviceId=null}setSafeAreaBackgroundColorResult(e){this.resolveSetSafeAreaBackgroundColor(e),this.resolveSetSafeAreaBackgroundColor=null}navigatingPageEvent(e){this.dispatchEvent(new CustomEvent("navigatingPage",{detail:e}))}getInternalDomainsResult(e){this.resolveGetInternalDomains(e),this.resolveGetInternalDomains=null}}t.App=new i},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Biometrics=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{constructor(){super(...arguments),this.SECURED_CONTENT_KEY="STARTI_APP_BIOMETRIC_CONTENT",this.SECURED_LOGIN_KEY="STARTI_APP_BIOMETRIC_LOGIN_CONTENT",this.defaultScanTitle="Prove you have fingers!",this.defaultScanReason="Can't let you in if you don't."}get biometricIntegration(){return(0,s.getIntegration)("BiometricIntegration")}scan(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveScan=n,this.biometricIntegration.startScanning(e,t)}))}getAuthenticationType(){return new Promise(((e,t)=>{this.resolveAuthType=e,this.biometricIntegration.getAuthenticationType()}))}setSecuredContent(e){this.biometricIntegration.setSecuredContent(this.SECURED_CONTENT_KEY,JSON.stringify(e))}getSecuredContent(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveGetContent=n,this.biometricIntegration.getSecuredContent(this.SECURED_CONTENT_KEY,e,t)}))}hasSecuredContent(){return new Promise(((e,t)=>{this.resolveHasSecureContent=e,this.biometricIntegration.hasSecuredContent(this.SECURED_CONTENT_KEY)}))}removeSecuredContent(){this.biometricIntegration.removeSecuredContent(this.SECURED_CONTENT_KEY)}setUsernameAndPassword(e,t){this.biometricIntegration.setSecuredContent(this.SECURED_LOGIN_KEY,JSON.stringify({username:e,password:t}))}removeUsernameAndPassword(){this.biometricIntegration.removeSecuredContent(this.SECURED_LOGIN_KEY)}hasUsernameAndPassword(){return new Promise(((e,t)=>{this.resolveHasUsernameAndPassword=e,this.biometricIntegration.hasSecuredContent(this.SECURED_LOGIN_KEY)}))}getUsernameAndPassword(e=this.defaultScanTitle,t=this.defaultScanReason){return new Promise(((n,r)=>{this.resolveGetUsernamePassword=n,this.biometricIntegration.getSecuredContent(this.SECURED_LOGIN_KEY,e,t)}))}handleResolveGetUsernamePassword(e){try{const t=JSON.parse(e.result);this.resolveGetUsernamePassword(t)}catch(e){this.resolveGetUsernamePassword(null)}this.resolveGetUsernamePassword=null}hasSecuredContentResult({result:e,key:t}){if(t===this.SECURED_LOGIN_KEY)return this.resolveHasUsernameAndPassword(e),void(this.resolveHasUsernameAndPassword=null);this.resolveHasSecureContent(e),this.resolveHasSecureContent=null}getAuthenticationTypeResult(e){this.resolveAuthType(e),this.resolveAuthType=null}startScanningResult(e){this.resolveScan(e),this.resolveScan=null}getSecuredContentResult(e){if(e.key!==this.SECURED_LOGIN_KEY){try{const t=JSON.parse(e.result);this.resolveGetContent(t)}catch(t){this.resolveGetContent(e.result)}this.resolveGetContent=null}else this.handleResolveGetUsernamePassword(e)}}t.Biometrics=new i},495:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function o(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClientUser=void 0;const s=n(715),i=n(913),o=n(607);class a extends s.EventTargetWithType{registerId(e){return r(this,void 0,void 0,(function*(){const t=yield o.default.App.brandId(),n=yield o.default.App.deviceId(),r=yield o.default.PushNotification.getToken();if(!r||0===r.length)throw console.warn("Failed to register logged in client user",e,"No FCM token"),new Error(`Failed to register logged in client user ${e}: No FCM token`);const s={brandId:t,clientUserId:e,deviceId:n,fcmToken:r},a=yield fetch(i.baseUrl+"/ClientUser-registerId",{body:JSON.stringify(s),headers:{"Content-Type":"application/json"},method:"POST"});if(!a.ok)throw console.warn("Failed to register logged in client user",e,s),new Error(`Failed to register logged in client user ${e}: Firebase returned statuscode ${a.status}`)}))}unregisterId(){return r(this,void 0,void 0,(function*(){const e={brandId:yield o.default.App.brandId(),deviceId:yield o.default.App.deviceId()},t=yield fetch(i.baseUrl+"/ClientUser-unregisterId",{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"});if(!t.ok)throw console.warn("Failed to unregister logged in client user",e),new Error(`Failed to unregister logged in client user: Firebase returned statuscode ${t.status}`)}))}}t.ClientUser=new a},913:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.styleTagId=t.baseUrl=void 0,t.baseUrl="https://europe-west3-startiapp-admin-1fac2.cloudfunctions.net",t.styleTagId="startiapp-styling"},955:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Device=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get deviceIntegration(){return(0,s.getIntegration)("DeviceIntegration")}startAccelerometer(){this.deviceIntegration.startAccelerometer()}stopAccelerometer(){this.deviceIntegration.stopAccelerometer()}isAccelerometerStarted(){return new Promise(((e,t)=>{this.deviceIntegration.isAccelerometerStarted(),this.resolveIsAccelerometerStarted=e}))}isAccelerometerStartedResult(e){this.resolveIsAccelerometerStarted(e),this.resolveIsAccelerometerStarted=null}onShakeEvent(){this.dispatchEvent(new CustomEvent("shake"))}}t.Device=new i},900:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getIntegration=void 0;let n={};t.getIntegration=function(e){if(n[e])return n[e];let t=window[e],r=0;for(;!t&&r<5;)t=window.parent[e],r++;if(!t)throw new Error(`Could not find integration ${e}`);return n[e]=t,t}},607:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(752),s=n(1),i=n(495),o=n(955),a=n(900),c=n(240),l=n(983),u=n(681),p=n(952),d=n(716),h=n(634),g=window;g.appIntegrationsAreReady=()=>{r.App.setStartiappIsLoaded(),f.dispatchEvent(new CustomEvent("ready"))},g.startiappDevice=o.Device,g.startiappApp=r.App,g.startiappUser=i.ClientUser,g.startiappQrScanner=p.QrScanner,g.startiappPushNotification=u.PushNotification,g.startiappNFC=l.NFC,g.startiappShare=h.Share,g.startiappBiometric=s.Biometrics,g.appErrorEvent=e=>{f.dispatchEvent(new CustomEvent("error",{detail:e}))};class v extends EventTarget{constructor(){super(...arguments),this.App=r.App,this.Device=o.Device,this.Biometrics=s.Biometrics,this.User=i.ClientUser,this.NfcScanner=l.NFC,this.PushNotification=u.PushNotification,this.QrScanner=p.QrScanner,this.Share=h.Share}get appIntegration(){return(0,a.getIntegration)("AppIntegration")}initialize(e){this.isRunningInApp()&&d.AppUI.setOptions(e),this.appIntegration.webAppIsReady()}isRunningInApp(){return navigator.userAgent.toLowerCase().indexOf("starti.app")>-1}addEventListener(e,t,n){super.addEventListener(e,t,n)}removeEventListener(e,t,n){super.removeEventListener(e,t,n)}}const f=new v;if(document.body)m();else{const e=new MutationObserver((()=>m(e)));e.observe(document.documentElement,{childList:!0})}function m(e){if(!document.body)return;if(f.isRunningInApp()?document.body.setAttribute("startiapp",""):document.body.removeAttribute("startiapp"),!document.head)return;const t=document.createElement("style");if(t.innerHTML="body:not([startiapp]) .startiapp-hide-in-browser,body:not([startiapp]) .startiapp-show-in-app,body[startiapp] .startiapp-hide-in-app,body[startiapp] .startiapp-show-in-browser{display:none!important}",document.head.appendChild(t),f.isRunningInApp()){const e={width:"device-width","viewport-fit":"cover"},t=document.querySelector("meta[name=viewport]");if(t){const n=(0,c.parseViewportMeta)(t.content);t.content=(0,c.serializeViewportMeta)(Object.assign(Object.assign({},n),e))}else{const t=document.createElement("meta");t.name="viewport",t.content=(0,c.serializeViewportMeta)(e),document.head.appendChild(t)}}e&&e.disconnect()}t.default=f,g.startiapp=f},240:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.serializeViewportMeta=t.parseViewportMeta=void 0,t.parseViewportMeta=function(e){const t={},n=e.split(",");for(const e of n){const[n,r]=e.trim().split("=");switch(n.trim()){case"width":case"height":case"initial-scale":case"minimum-scale":case"maximum-scale":case"user-scalable":case"viewport-fit":t[n.trim()]=r.trim()}}return t},t.serializeViewportMeta=function(e){const t=[];for(const[n,r]of Object.entries(e))r&&t.push(`${n}=${r}`);return t.join(", ")}},983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NFC=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get NFCIntegration(){return(0,s.getIntegration)("NFCIntegration")}isNfcSupported(){return new Promise(((e,t)=>{this.resolveNFCSupported=e,this.NFCIntegration.isNFCSupported()}))}startNfcScanner(){return new Promise((e=>{this.resolveStartNFCReader=e,this.NFCIntegration.startListening()}))}stopNfcScanner(){return new Promise((e=>{this.resolveStopNFCReader=e,this.NFCIntegration.stopListening()}))}nfcTagScannedEvent(e){const t=new CustomEvent("nfcTagScanned",{detail:e});this.dispatchEvent(t)}stopListeningResult(e){this.resolveStopNFCReader(e),this.resolveStopNFCReader=null}isNFCSupportedResult(e){this.resolveNFCSupported(e),this.resolveNFCSupported=null}startListeningResult(e){this.resolveStartNFCReader(e),this.resolveStartNFCReader=null}}t.NFC=new i},681:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function o(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.PushNotification=t.Topic=void 0;const s=n(466),i=n(715),o=n(913),a=n(900),c=n(607);class l extends i.EventTargetWithType{get pushNotificationIntegration(){return(0,a.getIntegration)("PushNotificationIntegration")}requestAccess(){return r(this,void 0,void 0,(function*(){return new Promise(((e,t)=>{this.resolveRequestAccess=e,this.pushNotificationIntegration.requestAccess()}))}))}getToken(){return new Promise(((e,t)=>{this.resolveFCMToken=e,this.pushNotificationIntegration.getFCMToken()}))}getTopics(){return r(this,void 0,void 0,(function*(){const e={brand:yield c.default.App.brandId()},t=yield fetch(o.baseUrl+"/Topics-getTopics?"+new URLSearchParams(Object.assign({},e)));if(!t.ok)throw new Error("Failed to get topics");const n=yield t.json(),r=this.getSubscribedTopics();return n.map((({name:e,topic:t})=>new u(t,e,r.includes(t))))}))}renderTopics(){return r(this,void 0,void 0,(function*(){const e=yield this.getTopics(),t=document.getElementById("startiapp-topics-template");if(!t||"SCRIPT"!==t.tagName)throw new Error("Template element not found");if("x-tmpl-mustache"!==t.type)throw new Error('Template element must have type="x-tmpl-mustache"');const n=document.getElementById("startiapp-topics-target");if(!n||"DIV"!==n.tagName)throw new Error("Template target element not found");const i=t.innerHTML,o=(0,s.render)(i,{topics:e});n.innerHTML=o,n.querySelectorAll('input[type="checkbox"]').forEach((e=>{e.dataset.startiappTopic&&e.addEventListener("change",(t=>r(this,void 0,void 0,(function*(){if(!(yield this.requestAccess()))return t.target.checked=!1,void t.preventDefault();e.checked?this.subscribeToTopics([e.dataset.startiappTopic]):this.unsubscribeFromTopics([e.dataset.startiappTopic])}))))}))}))}subscribeToTopics(e){return r(this,void 0,void 0,(function*(){if(!(yield c.default.PushNotification.requestAccess()))return void console.warn("Push notification permissions denied");const[t,n,r]=yield Promise.all([c.default.PushNotification.getToken(),c.default.App.brandId(),c.default.App.deviceId()]),s=[];e.forEach((e=>{const i={brandId:n,topic:e,fcmToken:t,deviceId:r},a=fetch(o.baseUrl+"/Topics-subscribeToTopic",{body:JSON.stringify(i),method:"POST",headers:{"Content-Type":"application/json"}});s.push(a)})),(yield Promise.all(s)).forEach(((t,n)=>{t.ok?this.updateSubscribedTopics(e[n],!0):console.warn("Failed to sign up to topic",n,e[n])}))}))}unsubscribeFromTopics(e){return r(this,void 0,void 0,(function*(){const[t,n,r]=yield Promise.all([c.default.PushNotification.getToken(),c.default.App.brandId(),c.default.App.deviceId()]),s=[];e.forEach((e=>{const i={brandId:n,topic:e,fcmToken:t,deviceId:r},a=fetch(o.baseUrl+"/Topics-unsubscribeFromTopic",{body:JSON.stringify(i),method:"POST",headers:{"Content-Type":"application/json"}});s.push(a)})),(yield Promise.all(s)).forEach(((t,n)=>{t.ok?this.updateSubscribedTopics(e[n],!1):console.warn("Failed to unsubscribe from topic",n,e[n])}))}))}requestAccessResult(e){this.resolveRequestAccess(e),this.resolveRequestAccess=null}getFCMTokenResult(e){this.resolveFCMToken(e),this.resolveFCMToken=null}tokenReceivedEvent(e){this.dispatchEvent(new CustomEvent("tokenRefreshed",{detail:e}))}notificationReceivedEvent(e){this.dispatchEvent(new CustomEvent("notificationReceived",{detail:e}))}firebasePushNotificationTopicsUnsubscribeResult(e){}firebasePushNotificationSubscribeToTopicsResult(e){}updateSubscribedTopics(e,t){const n=localStorage.getItem("startiapp-subscribed-topics")?JSON.parse(localStorage.getItem("startiapp-subscribed-topics")):[];t?n.includes(e)||n.push(e):n.includes(e)&&n.splice(n.indexOf(e),1),localStorage.setItem("startiapp-subscribed-topics",JSON.stringify(n))}getSubscribedTopics(){return localStorage.getItem("startiapp-subscribed-topics")?JSON.parse(localStorage.getItem("startiapp-subscribed-topics")):[]}}class u{constructor(e,t,n=!1){this.topic=e,this.name=t,this.subscribed=n}toJSON(){return{topic:this.topic,name:this.name,subscribed:this.subscribed}}subscribe(){t.PushNotification.subscribeToTopics([this.topic])}unsubscribe(){t.PushNotification.unsubscribeFromTopics([this.topic])}}t.Topic=u,t.PushNotification=new l},952:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QrScanner=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get qrScannerIntegration(){return(0,s.getIntegration)("QrScannerIntegration")}scan(){return new Promise(((e,t)=>{this.resolveScan=e,this.qrScannerIntegration.startQrCodeScanner()}))}isCameraAccessGranted(){return new Promise(((e,t)=>{this.resolveCameraAccessGranted=e,this.qrScannerIntegration.isCameraAccessGranted()}))}requestCameraAccess(){return new Promise(((e,t)=>{this.resolveRequestCameraAccess=e,this.qrScannerIntegration.requestCameraAccess()}))}requestCameraAccessResult(e){this.resolveRequestCameraAccess(e),this.resolveRequestCameraAccess=null}startQrCodeScannerResult(e){this.resolveScan(e),this.resolveScan=null}isCameraAccessGrantedResult(e){this.resolveCameraAccessGranted(e),this.resolveCameraAccessGranted=null}}t.QrScanner=new i},716:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AppUI=void 0;const r=n(607),s=n(913),i=n(240);t.AppUI=new class{constructor(){this.options={allowDrag:!1,allowHighligt:!1,allowZoom:!1,allowScrollBounce:!1,statusBar:{removeSafeArea:!0,hideText:!1,safeAreaBackgroundColor:"#000000",darkContent:!1}}}setOptions(e){this.options=Object.assign(this.options,e),this.updateUI()}getOptions(){return this.options}updateViewportMeta(e){const t=document.querySelector("meta[name=viewport]");if(t){const n=(0,i.parseViewportMeta)(t.content);t.content=(0,i.serializeViewportMeta)(Object.assign(Object.assign({},n),e))}else{const t=document.createElement("meta");t.setAttribute("name","viewport"),t.setAttribute("content",(0,i.serializeViewportMeta)(e)),document.head.appendChild(t)}}updateUI(){this.styleString="";const e=document.getElementById(s.styleTagId);e&&e.remove();const t=document.getElementsByTagName("img"),n=document.getElementsByTagName("a");this.options.allowDrag?[...t,...n].forEach((e=>{e.removeAttribute("draggable")})):[...t,...n].forEach((e=>{e.setAttribute("draggable","false")})),this.options.allowHighligt||(this.styleString+="\n body {\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n user-select: none;\n }\n "),this.options.allowScrollBounce||(this.styleString+="\n html {\n overscroll-behavior: none;\n }\n "),this.options.allowZoom||(this.styleString+="\n body {\n touch-action: pan-x pan-y;\n }\n ",this.updateViewportMeta({"user-scalable":"no"}));const i=document.createElement("style");i.textContent=this.styleString,i.setAttribute("id",s.styleTagId),document.body.appendChild(i),r.default.App.setStatusBar(this.options.statusBar)}}},634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Share=void 0;const r=n(715),s=n(900);class i extends r.EventTargetWithType{get shareIntegration(){return(0,s.getIntegration)("ShareIntegration")}shareFile(e,t){return new Promise(((n,r)=>{this.resolveShareFile=n,this.shareIntegration.shareFile(e,t)}))}shareText(e){return new Promise(((t,n)=>{this.resolveShareText=t,this.shareIntegration.shareText(e)}))}downloadFile(e,t){return new Promise(((n,r)=>{this.resolveDownloadText=n,this.shareIntegration.downloadFile(e,t)}))}shareFileResult(e){this.resolveShareFile(e),this.resolveShareFile=null}shareTextResult(e){this.resolveShareText(e),this.resolveShareText=null}downloadFileResult(e){this.resolveDownloadText(e),this.resolveDownloadText=null}}t.Share=new i}},t={},function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}(607);var e,t}));
|