@wix/himalaya-cli 0.1569.0 → 0.1570.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/l10n-strings.d.ts +3 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/business-contact-service.d.ts +17 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/business-contact.d.ts +73 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/index.d.ts +3 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/invite-target.d.ts +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/invite.d.ts +148 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +558 -84
- package/dist/cli.mjs +232 -27
- package/guides/getting-started.md +5 -0
- package/guides/himi-skill.md +5 -0
- package/guides/one-app-to-himi-app.md +145 -4
- package/guides/skill.md +5 -0
- package/guides/tier-5-add-a-screen.md +20 -0
- package/package.json +2 -2
- package/templates/beauty-salon/config.ts +7 -0
- package/templates/beauty-salon/dev/index.ts +213 -0
- package/templates/beauty-salon/himalaya.content.json +3 -0
- package/templates/beauty-salon/tier5-src/business-contact/index.ts +6 -0
- package/templates/branded-lite/config.ts +7 -0
- package/templates/branded-lite/dev/index.ts +246 -0
- package/templates/branded-lite/himalaya.content.json +3 -0
- package/templates/branded-lite/tier5-src/business-contact/index.ts +6 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-notifsettings/index.ts +39 -11
- package/templates/community-club/config.ts +7 -0
- package/templates/community-club/dev/index.ts +213 -0
- package/templates/community-club/himalaya.content.json +3 -0
- package/templates/community-club/tier5-src/business-contact/index.ts +6 -0
- package/templates/events-meetups/config.ts +7 -0
- package/templates/events-meetups/dev/index.ts +213 -0
- package/templates/events-meetups/himalaya.content.json +3 -0
- package/templates/events-meetups/tier5-src/business-contact/index.ts +6 -0
- package/templates/gym-fitness/config.ts +7 -0
- package/templates/gym-fitness/dev/index.ts +213 -0
- package/templates/gym-fitness/himalaya.content.json +3 -0
- package/templates/gym-fitness/tier5-src/business-contact/index.ts +6 -0
- package/templates/nonprofit-cause/config.ts +7 -0
- package/templates/nonprofit-cause/dev/index.ts +213 -0
- package/templates/nonprofit-cause/himalaya.content.json +3 -0
- package/templates/nonprofit-cause/tier5-src/business-contact/index.ts +6 -0
- package/templates/podcast-creator/config.ts +7 -0
- package/templates/podcast-creator/dev/index.ts +213 -0
- package/templates/podcast-creator/himalaya.content.json +3 -0
- package/templates/podcast-creator/tier5-src/business-contact/index.ts +6 -0
- package/templates/portfolio-creative/config.ts +7 -0
- package/templates/portfolio-creative/dev/index.ts +213 -0
- package/templates/portfolio-creative/himalaya.content.json +3 -0
- package/templates/portfolio-creative/tier5-src/business-contact/index.ts +6 -0
- package/templates/restaurant/config.ts +7 -0
- package/templates/restaurant/dev/index.ts +213 -0
- package/templates/restaurant/himalaya.content.json +3 -0
- package/templates/restaurant/tier5-src/business-contact/index.ts +6 -0
- package/templates/retail-store/config.ts +7 -0
- package/templates/retail-store/dev/index.ts +213 -0
- package/templates/retail-store/himalaya.content.json +3 -0
- package/templates/retail-store/tier5-src/business-contact/index.ts +6 -0
- package/templates/yoga-studio/config.ts +7 -0
- package/templates/yoga-studio/dev/index.ts +213 -0
- package/templates/yoga-studio/himalaya.content.json +3 -0
- package/templates/yoga-studio/tier5-src/business-contact/index.ts +6 -0
|
@@ -126,6 +126,221 @@ function defineService(name, def) {
|
|
|
126
126
|
return himalaya.defineService(name, def);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
// ../../stdlib/flows/screens/src/business-contact.ts
|
|
130
|
+
var node = (id2, type, props) => ({ id: id2, body: { package: "himalaya", type, props } });
|
|
131
|
+
var clean = (value) => typeof value === "string" ? value.trim() : "";
|
|
132
|
+
function businessContactSettings(source = {}) {
|
|
133
|
+
const defaults = {
|
|
134
|
+
isDescriptionVisible: true,
|
|
135
|
+
isGetInTouchVisible: true,
|
|
136
|
+
isPhoneVisible: true,
|
|
137
|
+
isWebSiteLinkVisible: true,
|
|
138
|
+
isAddressVisible: true
|
|
139
|
+
};
|
|
140
|
+
const empty = Object.keys(source).every((key) => key === "isBusinessProfile");
|
|
141
|
+
if (source.isBusinessProfile) return {
|
|
142
|
+
...empty ? defaults : {},
|
|
143
|
+
...source,
|
|
144
|
+
showMap: true,
|
|
145
|
+
isDescriptionVisible: false
|
|
146
|
+
};
|
|
147
|
+
return empty ? defaults : { ...source };
|
|
148
|
+
}
|
|
149
|
+
function businessContactPoint(contact) {
|
|
150
|
+
const p = contact.coordinates;
|
|
151
|
+
return contact.isPhysical !== false && p && typeof p.latitude === "number" && Number.isFinite(p.latitude) && Math.abs(p.latitude) <= 90 && typeof p.longitude === "number" && Number.isFinite(p.longitude) && Math.abs(p.longitude) <= 180 ? { latitude: p.latitude, longitude: p.longitude } : void 0;
|
|
152
|
+
}
|
|
153
|
+
function businessContactLink(kind, value) {
|
|
154
|
+
const text3 = clean(value);
|
|
155
|
+
if (!text3 || /[\u0000-\u001f\u007f]/.test(text3)) return "";
|
|
156
|
+
switch (kind) {
|
|
157
|
+
case "website":
|
|
158
|
+
return /^https?:\/\/[^\s/@]+(?:[/:?#]|$)/i.test(text3) && !/\s/.test(text3) && !/^https?:\/\/[^/]*@/i.test(text3) ? text3 : "";
|
|
159
|
+
case "phone":
|
|
160
|
+
return /^\+?[\d ()\-.]+$/.test(text3) && /\d/.test(text3) ? `tel:${text3.replace(/[ ()\-.]/g, "")}` : "";
|
|
161
|
+
case "email":
|
|
162
|
+
return /^[^\s@?&#]+@[^\s@?&#]+\.[^\s@?&#]+$/.test(text3) ? `mailto:${encodeURIComponent(text3)}` : "";
|
|
163
|
+
case "directions":
|
|
164
|
+
return `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(text3)}`;
|
|
165
|
+
default:
|
|
166
|
+
return "";
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function businessContactSection(opts = {}) {
|
|
170
|
+
const id2 = opts.id ?? "business_contact";
|
|
171
|
+
const contact = opts.contact ?? {};
|
|
172
|
+
const settings = businessContactSettings(opts.settings);
|
|
173
|
+
const copy = { title: "Get in touch", message: "Message", directions: "Directions", unavailable: "Contact details unavailable", memberCountUnavailable: "Member count unavailable", member: "member", members: "members", ...opts.copy };
|
|
174
|
+
const service = opts.service ?? "businessContact";
|
|
175
|
+
const children = [];
|
|
176
|
+
const text3 = (key, value, style = "body") => node(`${id2}.${key}`, "Text", { text: value, style, collapseWhenEmpty: true });
|
|
177
|
+
const link = (key, label, value) => {
|
|
178
|
+
if (businessContactLink(key, value)) children.push(node(`${id2}.${key}`, "Button", {
|
|
179
|
+
title: label,
|
|
180
|
+
style: "secondary",
|
|
181
|
+
fullWidth: true,
|
|
182
|
+
action: { actionId: `tier5.${service}.open`, params: { kind: key, value, failureLabel: copy.unavailable } }
|
|
183
|
+
}));
|
|
184
|
+
};
|
|
185
|
+
if (settings.isDescriptionVisible && clean(contact.description)) children.push(text3("description", clean(contact.description)));
|
|
186
|
+
if (settings.isGetInTouchVisible && opts.chatScreenId) {
|
|
187
|
+
children.push(text3("title", clean(settings.getInTouchTitle) || copy.title, "title3"));
|
|
188
|
+
if (clean(settings.getInTouchDescription)) children.push(text3("subtitle", clean(settings.getInTouchDescription)));
|
|
189
|
+
children.push(node(`${id2}.message`, "Button", {
|
|
190
|
+
title: clean(settings.getInTouchButton) || copy.message,
|
|
191
|
+
style: "primary",
|
|
192
|
+
fullWidth: true,
|
|
193
|
+
action: { actionId: "himi.open", params: { screenId: opts.chatScreenId } }
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
if (settings.isPhoneVisible) link("phone", clean(contact.phone), clean(contact.phone));
|
|
197
|
+
if (settings.isWebSiteLinkVisible) link("website", clean(contact.website), clean(contact.website));
|
|
198
|
+
if (settings.isEmailVisible === true) link("email", clean(contact.email), clean(contact.email));
|
|
199
|
+
if (settings.isAddressVisible) {
|
|
200
|
+
const address = clean(contact.address);
|
|
201
|
+
if (address) children.push(text3("address", address));
|
|
202
|
+
const point = businessContactPoint(contact);
|
|
203
|
+
if (settings.showMap && point) children.push(node(`${id2}.map`, "Map", {
|
|
204
|
+
...point,
|
|
205
|
+
height: 180,
|
|
206
|
+
zoom: 14,
|
|
207
|
+
interactive: false,
|
|
208
|
+
markers: [{ id: `${id2}.location`, ...point, ...address ? { label: address } : {} }]
|
|
209
|
+
}));
|
|
210
|
+
if (address && contact.isPhysical !== false) link("directions", copy.directions, address);
|
|
211
|
+
}
|
|
212
|
+
const hasContent = children.length > 0;
|
|
213
|
+
if (!(settings.isAddressVisible && clean(contact.address) && contact.isPhysical !== false)) {
|
|
214
|
+
children.push({ ...text3("directions_copy", copy.directions), modifiers: { hidden: true } });
|
|
215
|
+
}
|
|
216
|
+
const unavailable2 = text3("unavailable", copy.unavailable);
|
|
217
|
+
if (hasContent) unavailable2.modifiers = { hidden: true };
|
|
218
|
+
children.push(unavailable2);
|
|
219
|
+
if (opts.showMemberCount !== void 0) {
|
|
220
|
+
const ready = (key, unit) => node(`${id2}.members_${key}`, "HStack", {
|
|
221
|
+
spacing: 4,
|
|
222
|
+
alignment: "center",
|
|
223
|
+
children: [
|
|
224
|
+
text3(`count_${key}`, `$service:${service}.memberCount`, "footnote"),
|
|
225
|
+
text3(`unit_${key}`, unit, "footnote")
|
|
226
|
+
]
|
|
227
|
+
});
|
|
228
|
+
const count = node(`${id2}.member_count`, "FragmentSlot", {
|
|
229
|
+
casePath: `$service:${service}.memberCountCase`,
|
|
230
|
+
defaultCase: "unavailable",
|
|
231
|
+
cases: [
|
|
232
|
+
{ id: "one", content: ready("one", copy.member) },
|
|
233
|
+
{ id: "other", content: ready("other", copy.members) },
|
|
234
|
+
{ id: "unavailable", content: text3("members_unavailable", copy.memberCountUnavailable, "footnote") }
|
|
235
|
+
]
|
|
236
|
+
});
|
|
237
|
+
if (opts.showMemberCount === false) count.modifiers = { hidden: true };
|
|
238
|
+
children.push(count);
|
|
239
|
+
}
|
|
240
|
+
children.push(text3("feedback", `$service:${service}.message`, "footnote"));
|
|
241
|
+
return node(id2, "VStack", { spacing: 12, alignment: "leading", children });
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// ../../core/sdk/dispatch/src/index.ts
|
|
245
|
+
function dispatch(handlerId, params, _options) {
|
|
246
|
+
const himalaya = globalThis.himalaya;
|
|
247
|
+
if (!himalaya) {
|
|
248
|
+
return Promise.reject(
|
|
249
|
+
new Error("@himalaya/dispatch: called outside a Himalaya runtime. This bundle must run inside a JSWorker (Tier 5).")
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
const stringParams = {};
|
|
253
|
+
if (params) {
|
|
254
|
+
for (const [k, v] of Object.entries(params)) stringParams[k] = String(v);
|
|
255
|
+
}
|
|
256
|
+
return himalaya.dispatch(handlerId, stringParams);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// ../../core/sdk/open-url/src/index.ts
|
|
260
|
+
function defaultMode(url) {
|
|
261
|
+
return /^https?:/i.test(url) ? "in_app_browser" : "external_app";
|
|
262
|
+
}
|
|
263
|
+
async function open(url, mode) {
|
|
264
|
+
if (!url) return { opened: false };
|
|
265
|
+
const r = await dispatch("capability.open_url.open", { url, mode: mode ?? defaultMode(url) });
|
|
266
|
+
return { opened: r?.opened === true };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// ../../stdlib/flows/screens/src/business-contact-service.ts
|
|
270
|
+
function createBusinessContactService(opts = {}) {
|
|
271
|
+
const initialState = { message: "", memberCount: null, countStatus: "unrequested", memberCountCase: "unavailable" };
|
|
272
|
+
const currentState = () => svc.getState();
|
|
273
|
+
let loadGeneration = 0;
|
|
274
|
+
let openGeneration = 0;
|
|
275
|
+
const svc = defineService(opts.service ?? "businessContact", {
|
|
276
|
+
state: initialState,
|
|
277
|
+
notHydrated: ["message"],
|
|
278
|
+
perVisit: ["message"],
|
|
279
|
+
actions: {
|
|
280
|
+
load: async (state, arg) => {
|
|
281
|
+
const generation = ++loadGeneration;
|
|
282
|
+
const next = () => {
|
|
283
|
+
const current = currentState();
|
|
284
|
+
return { ...current, message: current === state ? "" : current.message };
|
|
285
|
+
};
|
|
286
|
+
if (arg?.showMemberCount !== true) return { ...next(), memberCount: null, countStatus: "unrequested", memberCountCase: "unavailable" };
|
|
287
|
+
try {
|
|
288
|
+
const count = opts.loadMemberCount ? await opts.loadMemberCount() : arg.memberCount;
|
|
289
|
+
if (generation !== loadGeneration) return currentState();
|
|
290
|
+
if (typeof count !== "number" || !Number.isSafeInteger(count) || count < 0) {
|
|
291
|
+
return { ...next(), memberCount: null, countStatus: "unavailable", memberCountCase: "unavailable" };
|
|
292
|
+
}
|
|
293
|
+
return { ...next(), memberCount: count, countStatus: "ready", memberCountCase: count === 1 ? "one" : "other" };
|
|
294
|
+
} catch {
|
|
295
|
+
if (generation !== loadGeneration) return currentState();
|
|
296
|
+
return { ...next(), memberCount: null, countStatus: "error", memberCountCase: "unavailable" };
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
open: async (state, arg) => {
|
|
300
|
+
const generation = ++openGeneration;
|
|
301
|
+
const url = businessContactLink(arg?.kind ?? "", arg?.value);
|
|
302
|
+
if (!url) return { ...currentState(), message: arg?.failureLabel || "This contact link is unavailable." };
|
|
303
|
+
try {
|
|
304
|
+
const result = await open(url, arg?.kind === "phone" || arg?.kind === "email" ? "external_app" : "system_browser");
|
|
305
|
+
if (generation !== openGeneration) return currentState();
|
|
306
|
+
return { ...currentState(), message: result.opened ? "" : arg?.failureLabel || "This contact link could not be opened." };
|
|
307
|
+
} catch {
|
|
308
|
+
if (generation !== openGeneration) return currentState();
|
|
309
|
+
return { ...currentState(), message: arg?.failureLabel || "This contact link could not be opened." };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
return svc;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// ../../core/sdk/app-info/src/index.ts
|
|
318
|
+
var PLATFORMS = ["ios", "android", "macos", "web", "react-native"];
|
|
319
|
+
function str(v) {
|
|
320
|
+
return typeof v === "string" ? v.trim() : "";
|
|
321
|
+
}
|
|
322
|
+
async function get() {
|
|
323
|
+
const r = await dispatch("capability.app_info.get");
|
|
324
|
+
const platform = str(r?.platform);
|
|
325
|
+
const releaseId = str(r?.releaseId);
|
|
326
|
+
const serveBaseUrl = str(r?.serveBaseUrl);
|
|
327
|
+
return {
|
|
328
|
+
appId: str(r?.appId),
|
|
329
|
+
bundleId: str(r?.bundleId),
|
|
330
|
+
version: str(r?.version),
|
|
331
|
+
buildNumber: str(r?.buildNumber),
|
|
332
|
+
binaryVersion: str(r?.binaryVersion),
|
|
333
|
+
releaseId: releaseId || null,
|
|
334
|
+
releasePinned: r?.releasePinned === true,
|
|
335
|
+
// Trust the host's own answer; fall back to inferring from whether a serve origin is set.
|
|
336
|
+
environment: str(r?.environment) === "prod" ? "prod" : serveBaseUrl ? "prod" : "dev",
|
|
337
|
+
serveBaseUrl: serveBaseUrl || null,
|
|
338
|
+
platform: PLATFORMS.includes(platform) ? platform : "unknown",
|
|
339
|
+
memberSiteBound: r?.memberSiteBound === true,
|
|
340
|
+
oneAppInviteAvailable: r?.oneAppInviteAvailable === true
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
|
|
129
344
|
// ../../stdlib/flows/auth/src/copy.generated.ts
|
|
130
345
|
var copy_generated_default = {
|
|
131
346
|
"auth.gate.title": "Welcome",
|
|
@@ -308,7 +523,7 @@ function identityErrors(input, operation, requireName = false) {
|
|
|
308
523
|
}
|
|
309
524
|
|
|
310
525
|
// ../../stdlib/flows/auth/src/index.ts
|
|
311
|
-
async function
|
|
526
|
+
async function dispatch2(handlerId, params) {
|
|
312
527
|
const fn = globalThis.himalaya?.dispatch;
|
|
313
528
|
if (!fn) throw new Error("@himalaya/auth: host did not install the dispatch bridge");
|
|
314
529
|
return await fn(handlerId, params);
|
|
@@ -328,7 +543,7 @@ function reportedOk(raw) {
|
|
|
328
543
|
}
|
|
329
544
|
async function authState(opts) {
|
|
330
545
|
try {
|
|
331
|
-
const raw = await
|
|
546
|
+
const raw = await dispatch2(id(opts, "memberIdentity"));
|
|
332
547
|
if (!reportedOk(raw)) return { signedIn: false, email: "" };
|
|
333
548
|
const email = emailOf(raw);
|
|
334
549
|
return { signedIn: !!email, email };
|
|
@@ -339,7 +554,7 @@ async function authState(opts) {
|
|
|
339
554
|
async function attempt(action2, params, failureText, opts) {
|
|
340
555
|
let raw;
|
|
341
556
|
try {
|
|
342
|
-
raw = await
|
|
557
|
+
raw = await dispatch2(id(opts, action2), params);
|
|
343
558
|
} catch (e) {
|
|
344
559
|
return { ok: false, ...authFailure(e, action2 === "registerDirect" ? "register" : "signIn") };
|
|
345
560
|
}
|
|
@@ -379,25 +594,311 @@ function registerMember(email, password, profile, opts) {
|
|
|
379
594
|
}
|
|
380
595
|
async function signOut(opts) {
|
|
381
596
|
try {
|
|
382
|
-
await
|
|
597
|
+
await dispatch2(id(opts, "signOut"));
|
|
383
598
|
} catch {
|
|
384
599
|
}
|
|
385
600
|
return !(await authState(opts)).signedIn;
|
|
386
601
|
}
|
|
387
602
|
|
|
388
|
-
// ../../core/sdk/
|
|
389
|
-
function
|
|
390
|
-
const
|
|
391
|
-
if (
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
603
|
+
// ../../core/sdk/share/src/index.ts
|
|
604
|
+
async function share(options) {
|
|
605
|
+
const params = {};
|
|
606
|
+
if (options.text) params.text = options.text;
|
|
607
|
+
if (options.url) params.url = options.url;
|
|
608
|
+
if (options.subject) params.subject = options.subject;
|
|
609
|
+
if (options.files && options.files.length > 0) {
|
|
610
|
+
params.files = JSON.stringify(options.files.map((f) => f.uri));
|
|
611
|
+
if (options.files.some((f) => f.ownerScope)) {
|
|
612
|
+
params.fileOwners = JSON.stringify(options.files.map((f) => f.ownerScope ?? ""));
|
|
613
|
+
}
|
|
395
614
|
}
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
615
|
+
const r = await dispatch("capability.share.share", params);
|
|
616
|
+
return { completed: r?.completed === true };
|
|
617
|
+
}
|
|
618
|
+
async function availability() {
|
|
619
|
+
const r = await dispatch("capability.share.availability");
|
|
620
|
+
return r?.availability ?? "full";
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// ../../stdlib/flows/screens/src/invite-target.ts
|
|
624
|
+
function inviteTarget(identity) {
|
|
625
|
+
const bytes = [];
|
|
626
|
+
for (let i = 0; i < identity.length; i++) {
|
|
627
|
+
const unit = identity.charCodeAt(i);
|
|
628
|
+
bytes.push(unit & 255, unit >>> 8);
|
|
629
|
+
}
|
|
630
|
+
const K = [
|
|
631
|
+
1116352408,
|
|
632
|
+
1899447441,
|
|
633
|
+
3049323471,
|
|
634
|
+
3921009573,
|
|
635
|
+
961987163,
|
|
636
|
+
1508970993,
|
|
637
|
+
2453635748,
|
|
638
|
+
2870763221,
|
|
639
|
+
3624381080,
|
|
640
|
+
310598401,
|
|
641
|
+
607225278,
|
|
642
|
+
1426881987,
|
|
643
|
+
1925078388,
|
|
644
|
+
2162078206,
|
|
645
|
+
2614888103,
|
|
646
|
+
3248222580,
|
|
647
|
+
3835390401,
|
|
648
|
+
4022224774,
|
|
649
|
+
264347078,
|
|
650
|
+
604807628,
|
|
651
|
+
770255983,
|
|
652
|
+
1249150122,
|
|
653
|
+
1555081692,
|
|
654
|
+
1996064986,
|
|
655
|
+
2554220882,
|
|
656
|
+
2821834349,
|
|
657
|
+
2952996808,
|
|
658
|
+
3210313671,
|
|
659
|
+
3336571891,
|
|
660
|
+
3584528711,
|
|
661
|
+
113926993,
|
|
662
|
+
338241895,
|
|
663
|
+
666307205,
|
|
664
|
+
773529912,
|
|
665
|
+
1294757372,
|
|
666
|
+
1396182291,
|
|
667
|
+
1695183700,
|
|
668
|
+
1986661051,
|
|
669
|
+
2177026350,
|
|
670
|
+
2456956037,
|
|
671
|
+
2730485921,
|
|
672
|
+
2820302411,
|
|
673
|
+
3259730800,
|
|
674
|
+
3345764771,
|
|
675
|
+
3516065817,
|
|
676
|
+
3600352804,
|
|
677
|
+
4094571909,
|
|
678
|
+
275423344,
|
|
679
|
+
430227734,
|
|
680
|
+
506948616,
|
|
681
|
+
659060556,
|
|
682
|
+
883997877,
|
|
683
|
+
958139571,
|
|
684
|
+
1322822218,
|
|
685
|
+
1537002063,
|
|
686
|
+
1747873779,
|
|
687
|
+
1955562222,
|
|
688
|
+
2024104815,
|
|
689
|
+
2227730452,
|
|
690
|
+
2361852424,
|
|
691
|
+
2428436474,
|
|
692
|
+
2756734187,
|
|
693
|
+
3204031479,
|
|
694
|
+
3329325298
|
|
695
|
+
];
|
|
696
|
+
const H = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225];
|
|
697
|
+
const padded = Array.from(bytes);
|
|
698
|
+
const bitLen = bytes.length * 8;
|
|
699
|
+
padded.push(128);
|
|
700
|
+
while (padded.length % 64 !== 56) padded.push(0);
|
|
701
|
+
for (let i = 7; i >= 0; i--) padded.push(i >= 4 ? 0 : Math.floor(bitLen / 2 ** (i * 8)) & 255);
|
|
702
|
+
const w = new Array(64);
|
|
703
|
+
for (let off = 0; off < padded.length; off += 64) {
|
|
704
|
+
for (let t = 0; t < 16; t++) w[t] = padded[off + t * 4] << 24 | padded[off + t * 4 + 1] << 16 | padded[off + t * 4 + 2] << 8 | padded[off + t * 4 + 3];
|
|
705
|
+
for (let t = 16; t < 64; t++) {
|
|
706
|
+
const s0 = (w[t - 15] >>> 7 | w[t - 15] << 25) ^ (w[t - 15] >>> 18 | w[t - 15] << 14) ^ w[t - 15] >>> 3;
|
|
707
|
+
const s1 = (w[t - 2] >>> 17 | w[t - 2] << 15) ^ (w[t - 2] >>> 19 | w[t - 2] << 13) ^ w[t - 2] >>> 10;
|
|
708
|
+
w[t] = w[t - 16] + s0 + w[t - 7] + s1 | 0;
|
|
709
|
+
}
|
|
710
|
+
let [a, b, c, d, e, f, g, h] = H;
|
|
711
|
+
for (let t = 0; t < 64; t++) {
|
|
712
|
+
const s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7);
|
|
713
|
+
const ch = e & f ^ ~e & g;
|
|
714
|
+
const t1 = h + s1 + ch + K[t] + w[t] | 0;
|
|
715
|
+
const s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10);
|
|
716
|
+
const t2 = s0 + (a & b ^ a & c ^ b & c) | 0;
|
|
717
|
+
h = g;
|
|
718
|
+
g = f;
|
|
719
|
+
f = e;
|
|
720
|
+
e = d + t1 | 0;
|
|
721
|
+
d = c;
|
|
722
|
+
c = b;
|
|
723
|
+
b = a;
|
|
724
|
+
a = t1 + t2 | 0;
|
|
725
|
+
}
|
|
726
|
+
H[0] = H[0] + a | 0;
|
|
727
|
+
H[1] = H[1] + b | 0;
|
|
728
|
+
H[2] = H[2] + c | 0;
|
|
729
|
+
H[3] = H[3] + d | 0;
|
|
730
|
+
H[4] = H[4] + e | 0;
|
|
731
|
+
H[5] = H[5] + f | 0;
|
|
732
|
+
H[6] = H[6] + g | 0;
|
|
733
|
+
H[7] = H[7] + h | 0;
|
|
399
734
|
}
|
|
400
|
-
return
|
|
735
|
+
return "invite:" + H.map((word) => (word >>> 0).toString(16).padStart(8, "0")).join("");
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// ../../stdlib/flows/screens/src/invite.ts
|
|
739
|
+
function inviteAction(opts) {
|
|
740
|
+
if (!opts.screenId.trim()) throw new Error("Invite requires its flow screen.");
|
|
741
|
+
const service = opts.service ?? "invite";
|
|
742
|
+
return {
|
|
743
|
+
id: opts.id ?? "invite",
|
|
744
|
+
icon: "share",
|
|
745
|
+
label: opts.label ?? "Invite",
|
|
746
|
+
accessibilityLabel: opts.label ?? "Invite",
|
|
747
|
+
hiddenPath: `$service:${service}.hidden`,
|
|
748
|
+
onTap: { actionId: "himi.open", params: { screenId: opts.screenId } }
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
function inviteButton(opts = {}) {
|
|
752
|
+
const service = opts.service ?? "invite";
|
|
753
|
+
return {
|
|
754
|
+
id: opts.id ?? "invite.share",
|
|
755
|
+
body: { package: "himalaya", type: "Button", props: {
|
|
756
|
+
title: opts.label ?? "Share invitation",
|
|
757
|
+
style: "secondary",
|
|
758
|
+
fullWidth: false,
|
|
759
|
+
action: { actionId: `tier5.${service}.invite` }
|
|
760
|
+
} },
|
|
761
|
+
modifiers: { hiddenPath: `$service:${service}.hidden` }
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
function inviteScreen(opts) {
|
|
765
|
+
const service = opts.service ?? "invite";
|
|
766
|
+
return {
|
|
767
|
+
screenId: opts.screenId,
|
|
768
|
+
renderer: "sdui_intent",
|
|
769
|
+
title: opts.title ?? "Invite",
|
|
770
|
+
schemaVersion: 1,
|
|
771
|
+
cacheControl: { maxAge: 0, staleWhileRevalidate: 0 },
|
|
772
|
+
topBar: { actions: [] },
|
|
773
|
+
// The flow must not inherit an Invite action that opens itself.
|
|
774
|
+
logicBundle: { url: opts.bundleUrl, integrity: "", declaredCapabilities: ["share", "wix_api", "app_info"] },
|
|
775
|
+
payload: { id: "root", body: { package: "himalaya", type: "VStack", props: { spacing: 16, alignment: "leading", children: [
|
|
776
|
+
{ id: `${service}.error`, body: { package: "himalaya", type: "Text", props: { text: `$service:${service}.error`, style: "body" } } },
|
|
777
|
+
inviteButton({ service, label: opts.shareLabel })
|
|
778
|
+
] } } }
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
var wixApi = () => globalThis.himalaya?.wixApi;
|
|
782
|
+
var businessId = (value) => typeof value === "string" && /^[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}$/i.test(value);
|
|
783
|
+
function inviteUrl(value) {
|
|
784
|
+
return typeof value === "string" && value.length <= 8192 && !/[^\x21-\x7e]|\\|%(?![a-f\d]{2})/i.test(value) && /^https:\/\/(?:[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?\.)+[a-z](?:[a-z\d-]{0,61}[a-z\d])?(?::443)?(?:[/?#][^]*)?$/i.test(value);
|
|
785
|
+
}
|
|
786
|
+
async function readInvite(opts) {
|
|
787
|
+
const source = await opts.source();
|
|
788
|
+
if (source?.showInviteButton !== true) return void 0;
|
|
789
|
+
const data = { ...source };
|
|
790
|
+
if (data.url !== void 0) {
|
|
791
|
+
if (!inviteUrl(data.url)) return void 0;
|
|
792
|
+
} else if (!businessId(data.businessId) || !wixApi() || (await get()).oneAppInviteAvailable !== true) {
|
|
793
|
+
return void 0;
|
|
794
|
+
}
|
|
795
|
+
const host = await availability();
|
|
796
|
+
return host === "full" || host === "degraded" ? data : void 0;
|
|
797
|
+
}
|
|
798
|
+
function createInviteAvailabilityService(opts) {
|
|
799
|
+
const svc = defineService(opts.service ?? "invite", {
|
|
800
|
+
state: { hidden: true },
|
|
801
|
+
notHydrated: ["hidden"],
|
|
802
|
+
actions: { load: async () => {
|
|
803
|
+
try {
|
|
804
|
+
return { hidden: !await readInvite(opts) };
|
|
805
|
+
} catch {
|
|
806
|
+
return { hidden: true };
|
|
807
|
+
}
|
|
808
|
+
} }
|
|
809
|
+
});
|
|
810
|
+
void svc.load();
|
|
811
|
+
return svc;
|
|
812
|
+
}
|
|
813
|
+
var accountOf = (email) => email.trim().toLowerCase();
|
|
814
|
+
var target = (data) => inviteTarget(JSON.stringify([data.businessId ?? "", data.url ?? ""]));
|
|
815
|
+
async function continuation(operation, data, token = "") {
|
|
816
|
+
try {
|
|
817
|
+
return await dispatch("himi.wix.authContinuation", { operation, target: target(data), token });
|
|
818
|
+
} catch {
|
|
819
|
+
return null;
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
function createInviteService(opts) {
|
|
823
|
+
if (!opts.signInScreenId.trim()) throw new Error("Invite requires the app's sign-in screen.");
|
|
824
|
+
const read2 = () => readInvite(opts);
|
|
825
|
+
const sameSource = async (data) => {
|
|
826
|
+
const current = await read2();
|
|
827
|
+
return current && target(current) === target(data);
|
|
828
|
+
};
|
|
829
|
+
const unavailable2 = (hidden = false) => ({ hidden, error: "Invite is unavailable." });
|
|
830
|
+
let busy = false;
|
|
831
|
+
const perform = async (data, account) => {
|
|
832
|
+
const member = await authState();
|
|
833
|
+
if (!account || !member.signedIn || accountOf(member.email) !== account || !await sameSource(data)) return unavailable2(true);
|
|
834
|
+
const response = data.url ? void 0 : await wixApi().call(
|
|
835
|
+
"POST",
|
|
836
|
+
"https://apps.wix.com/clubs/api/v1/invites",
|
|
837
|
+
{ target: { businessId: data.businessId } },
|
|
838
|
+
{ "wix-site-id": data.businessId }
|
|
839
|
+
);
|
|
840
|
+
const url = data.url ?? response?.url;
|
|
841
|
+
if (!inviteUrl(url)) return unavailable2();
|
|
842
|
+
const current = await authState();
|
|
843
|
+
if (!current.signedIn || accountOf(current.email) !== account || !await sameSource(data)) return unavailable2(true);
|
|
844
|
+
const result = await share({ url, text: data.text, subject: data.subject });
|
|
845
|
+
return { hidden: false, error: result.completed ? "" : "Sharing was not completed." };
|
|
846
|
+
};
|
|
847
|
+
const svc = defineService(opts.service ?? "invite", {
|
|
848
|
+
state: { hidden: true, error: "" },
|
|
849
|
+
notHydrated: ["hidden", "error"],
|
|
850
|
+
actions: {
|
|
851
|
+
load: async () => {
|
|
852
|
+
if (busy) return void 0;
|
|
853
|
+
busy = true;
|
|
854
|
+
try {
|
|
855
|
+
const data = await read2();
|
|
856
|
+
if (!data) return unavailable2(true);
|
|
857
|
+
const waiting = await continuation("check", data);
|
|
858
|
+
if (waiting?.supported === true && waiting.confirmed === true && waiting.account) {
|
|
859
|
+
const account = accountOf(waiting.account);
|
|
860
|
+
const member = await authState();
|
|
861
|
+
if (!account || !member.signedIn || accountOf(member.email) !== account || !await sameSource(data)) return unavailable2(true);
|
|
862
|
+
const permit = await continuation("consume", data);
|
|
863
|
+
if (permit?.supported === true && permit.confirmed === true && permit.account && accountOf(permit.account) === account) {
|
|
864
|
+
return await perform(data, account);
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
return { hidden: false, error: "" };
|
|
868
|
+
} catch {
|
|
869
|
+
return unavailable2();
|
|
870
|
+
} finally {
|
|
871
|
+
busy = false;
|
|
872
|
+
}
|
|
873
|
+
},
|
|
874
|
+
invite: async () => {
|
|
875
|
+
if (busy) return void 0;
|
|
876
|
+
busy = true;
|
|
877
|
+
try {
|
|
878
|
+
const data = await read2();
|
|
879
|
+
if (!data) return unavailable2(true);
|
|
880
|
+
const member = await authState();
|
|
881
|
+
if (member.signedIn) return await perform(data, accountOf(member.email));
|
|
882
|
+
const request = await continuation("begin", data);
|
|
883
|
+
if (request?.supported !== true) return { hidden: false, error: "Update the app to sign in and share an invitation." };
|
|
884
|
+
if (!request.token) return unavailable2();
|
|
885
|
+
try {
|
|
886
|
+
await dispatch("himi.open", { screenId: opts.signInScreenId, presentation: "sheet", modal: "1", mode: "signin", authContinuation: request.token });
|
|
887
|
+
} catch (error) {
|
|
888
|
+
await continuation("cancel", data, request.token);
|
|
889
|
+
throw error;
|
|
890
|
+
}
|
|
891
|
+
return { hidden: false, error: "" };
|
|
892
|
+
} catch {
|
|
893
|
+
return unavailable2();
|
|
894
|
+
} finally {
|
|
895
|
+
busy = false;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
});
|
|
900
|
+
void svc.load();
|
|
901
|
+
return svc;
|
|
401
902
|
}
|
|
402
903
|
|
|
403
904
|
// ../../core/sdk/wix-cashier/src/index.ts
|
|
@@ -415,7 +916,7 @@ function s(v) {
|
|
|
415
916
|
return v == null || v === "" ? void 0 : v;
|
|
416
917
|
}
|
|
417
918
|
async function isAvailable() {
|
|
418
|
-
const r = await
|
|
919
|
+
const r = await dispatch("capability.wix_cashier.isAvailable");
|
|
419
920
|
return normalizeAvailability(r?.availability);
|
|
420
921
|
}
|
|
421
922
|
async function proceedToPayment(config) {
|
|
@@ -434,7 +935,7 @@ async function proceedToPayment(config) {
|
|
|
434
935
|
if (label) params.label = label;
|
|
435
936
|
if (config.allowInPersonPayment) params.allowInPersonPayment = true;
|
|
436
937
|
if (config.allowManualPayment) params.allowManualPayment = true;
|
|
437
|
-
const r = await
|
|
938
|
+
const r = await dispatch("capability.wix_cashier.proceedToPayment", params);
|
|
438
939
|
return {
|
|
439
940
|
status: normalizeStatus(r?.status),
|
|
440
941
|
chargeId: s(r?.chargeId),
|
|
@@ -460,16 +961,6 @@ function normalizeStatus(raw) {
|
|
|
460
961
|
}
|
|
461
962
|
}
|
|
462
963
|
|
|
463
|
-
// ../../core/sdk/open-url/src/index.ts
|
|
464
|
-
function defaultMode(url) {
|
|
465
|
-
return /^https?:/i.test(url) ? "in_app_browser" : "external_app";
|
|
466
|
-
}
|
|
467
|
-
async function open(url, mode) {
|
|
468
|
-
if (!url) return { opened: false };
|
|
469
|
-
const r = await dispatch2("capability.open_url.open", { url, mode: mode ?? defaultMode(url) });
|
|
470
|
-
return { opened: r?.opened === true };
|
|
471
|
-
}
|
|
472
|
-
|
|
473
964
|
// ../../stdlib/wix-sdk/pricing-plans/src/index.ts
|
|
474
965
|
function wixCall(method, path, body, readOptions) {
|
|
475
966
|
if (!globalThis.himalaya?.wixApi) {
|
|
@@ -527,8 +1018,8 @@ async function payOrder(req) {
|
|
|
527
1018
|
if (!req.snapshotId && !req.cashierUrl && !req.openCashier) {
|
|
528
1019
|
return { kind: "failed", reason: "no order to settle" };
|
|
529
1020
|
}
|
|
530
|
-
const
|
|
531
|
-
if (
|
|
1021
|
+
const availability2 = await isAvailable().catch(() => "unavailable");
|
|
1022
|
+
if (availability2 === "full" && req.snapshotId) {
|
|
532
1023
|
if (await req.mayCharge?.() === false) return WITHDRAWN;
|
|
533
1024
|
const r = await proceedToPayment({
|
|
534
1025
|
appId: req.appId,
|
|
@@ -562,34 +1053,7 @@ async function payOrder(req) {
|
|
|
562
1053
|
}
|
|
563
1054
|
return {
|
|
564
1055
|
kind: "failed",
|
|
565
|
-
reason:
|
|
566
|
-
};
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// ../../core/sdk/app-info/src/index.ts
|
|
570
|
-
var PLATFORMS = ["ios", "android", "macos", "web", "react-native"];
|
|
571
|
-
function str(v) {
|
|
572
|
-
return typeof v === "string" ? v.trim() : "";
|
|
573
|
-
}
|
|
574
|
-
async function get() {
|
|
575
|
-
const r = await dispatch2("capability.app_info.get");
|
|
576
|
-
const platform = str(r?.platform);
|
|
577
|
-
const releaseId = str(r?.releaseId);
|
|
578
|
-
const serveBaseUrl = str(r?.serveBaseUrl);
|
|
579
|
-
return {
|
|
580
|
-
appId: str(r?.appId),
|
|
581
|
-
bundleId: str(r?.bundleId),
|
|
582
|
-
version: str(r?.version),
|
|
583
|
-
buildNumber: str(r?.buildNumber),
|
|
584
|
-
binaryVersion: str(r?.binaryVersion),
|
|
585
|
-
releaseId: releaseId || null,
|
|
586
|
-
releasePinned: r?.releasePinned === true,
|
|
587
|
-
// Trust the host's own answer; fall back to inferring from whether a serve origin is set.
|
|
588
|
-
environment: str(r?.environment) === "prod" ? "prod" : serveBaseUrl ? "prod" : "dev",
|
|
589
|
-
serveBaseUrl: serveBaseUrl || null,
|
|
590
|
-
platform: PLATFORMS.includes(platform) ? platform : "unknown",
|
|
591
|
-
memberSiteBound: r?.memberSiteBound === true,
|
|
592
|
-
oneAppInviteAvailable: r?.oneAppInviteAvailable === true
|
|
1056
|
+
reason: availability2 === "full" ? "the wallet declined and no in-app cashier is configured" : "no payment rail is available"
|
|
593
1057
|
};
|
|
594
1058
|
}
|
|
595
1059
|
|
|
@@ -2065,7 +2529,7 @@ var zeroPrice = (value) => typeof value === "string" && /^0+(?:\.0+)?$/.test(val
|
|
|
2065
2529
|
// ../../core/sdk/iap/src/index.ts
|
|
2066
2530
|
async function getProducts(productIds) {
|
|
2067
2531
|
if (!productIds || productIds.length === 0) return [];
|
|
2068
|
-
const r = await
|
|
2532
|
+
const r = await dispatch("capability.iap.getProducts", {
|
|
2069
2533
|
// Product ids are reverse-DNS-ish and never contain commas — comma-join
|
|
2070
2534
|
// matches the @himalaya/push list-param convention.
|
|
2071
2535
|
productIds: productIds.join(",")
|
|
@@ -2073,12 +2537,12 @@ async function getProducts(productIds) {
|
|
|
2073
2537
|
return Array.isArray(r?.products) ? r.products : [];
|
|
2074
2538
|
}
|
|
2075
2539
|
async function restore() {
|
|
2076
|
-
const r = await
|
|
2540
|
+
const r = await dispatch("capability.iap.restore");
|
|
2077
2541
|
return Array.isArray(r?.entitlements) ? r.entitlements : [];
|
|
2078
2542
|
}
|
|
2079
2543
|
async function purchaseForVerification(input) {
|
|
2080
2544
|
if (!nonempty2(input?.productId) || !isUUID2(input?.appAccountToken)) return failure2("invalidArgument");
|
|
2081
|
-
const result = await managedDispatch(() =>
|
|
2545
|
+
const result = await managedDispatch(() => dispatch("capability.iap.purchaseForVerification", input));
|
|
2082
2546
|
if (result?.status === "purchased" && isAppleTransaction(result.transaction)) {
|
|
2083
2547
|
return { status: "purchased", transaction: decodeTransaction(result.transaction) };
|
|
2084
2548
|
}
|
|
@@ -2086,7 +2550,7 @@ async function purchaseForVerification(input) {
|
|
|
2086
2550
|
return decodeFailure(result);
|
|
2087
2551
|
}
|
|
2088
2552
|
async function getUnfinishedTransactions() {
|
|
2089
|
-
const result = await managedDispatch(() =>
|
|
2553
|
+
const result = await managedDispatch(() => dispatch("capability.iap.getUnfinishedTransactions"));
|
|
2090
2554
|
if (result?.status === "ok" && Array.isArray(result.transactions) && result.transactions.every(isAppleTransaction)) {
|
|
2091
2555
|
return { status: "ok", transactions: result.transactions.map(decodeTransaction) };
|
|
2092
2556
|
}
|
|
@@ -2094,7 +2558,7 @@ async function getUnfinishedTransactions() {
|
|
|
2094
2558
|
}
|
|
2095
2559
|
async function finishTransaction(input) {
|
|
2096
2560
|
if (!nonempty2(input?.transactionId)) return failure2("invalidArgument");
|
|
2097
|
-
const result = await managedDispatch(() =>
|
|
2561
|
+
const result = await managedDispatch(() => dispatch("capability.iap.finishTransaction", input));
|
|
2098
2562
|
if (result?.status === "finished" || result?.status === "notFound") return { status: result.status };
|
|
2099
2563
|
return decodeFailure(result);
|
|
2100
2564
|
}
|
|
@@ -2111,7 +2575,7 @@ function hostAppBindingSource() {
|
|
|
2111
2575
|
async function readHostBinding() {
|
|
2112
2576
|
let answer;
|
|
2113
2577
|
try {
|
|
2114
|
-
answer = await
|
|
2578
|
+
answer = await dispatch("capability.iap.appBinding");
|
|
2115
2579
|
} catch (error) {
|
|
2116
2580
|
if (bindingNotOffered(error)) return null;
|
|
2117
2581
|
throw new Error("the host could not read the app binding");
|
|
@@ -3830,9 +4294,9 @@ async function openBooking(item, bridge, beforeCreate, afterCreate) {
|
|
|
3830
4294
|
const metadata = bookingAttendanceOf(service);
|
|
3831
4295
|
if (classifyForApple(metadata, item.attendance.currency) !== "appleIap" || !samePrice({ amount: metadata.amount, currency: metadata.currency }, item)) return notCreated(CHANGED);
|
|
3832
4296
|
if (isObject7(service?.onlineBooking) && service.onlineBooking.requireManualApproval === true) return notCreated({ status: "refused", reason: "approvalRequired" });
|
|
3833
|
-
const
|
|
3834
|
-
if (isRefusal(
|
|
3835
|
-
const entries = isObject7(
|
|
4297
|
+
const availability2 = await bridge.call("POST", "/bookings/v1/availability/query", { query: { filter: { serviceId: [item.reference.id], startDate: selected.slot.startDate, endDate: selected.slot.endDate, bookable: true } } });
|
|
4298
|
+
if (isRefusal(availability2)) return notCreated(attemptRefused(availability2));
|
|
4299
|
+
const entries = isObject7(availability2.body) ? availability2.body.availabilityEntries : void 0;
|
|
3836
4300
|
if (!Array.isArray(entries) || !entries.some((entry) => isObject7(entry) && entry.bookable === true && matchesSlot(entry.slot, selected.slot))) return notCreated(CHANGED);
|
|
3837
4301
|
if (beforeCreate && !beforeCreate(slotGuard(selected.slot))) return notCreated({ status: "refused", reason: "storageUnavailable" });
|
|
3838
4302
|
const created = await bridge.call("POST", "/bookings/v2/bookings", { booking: { bookedEntity: { slot: selected.slot }, contactDetails: selected.contactDetails, totalParticipants: 1, selectedPaymentOption: "ONLINE", ...selected.formInfo ? { formInfo: selected.formInfo } : {} } });
|
|
@@ -4031,14 +4495,14 @@ function createRedirectSession(req = {}, opts) {
|
|
|
4031
4495
|
|
|
4032
4496
|
// ../../stdlib/flows/screens/src/index.ts
|
|
4033
4497
|
var PKG = "himalaya";
|
|
4034
|
-
var
|
|
4498
|
+
var node2 = (id2, type, props) => ({ id: id2, body: { package: PKG, type, props } });
|
|
4035
4499
|
var hideWhen = (n, path) => ({
|
|
4036
4500
|
...n,
|
|
4037
4501
|
modifiers: { ...n.modifiers ?? {}, hiddenPath: path }
|
|
4038
4502
|
});
|
|
4039
|
-
var text2 = (id2, value, style = "body") =>
|
|
4040
|
-
var vstack = (id2, children, spacing = 12, alignment = "leading") =>
|
|
4041
|
-
var button = (id2, title, action2, style = "primary") =>
|
|
4503
|
+
var text2 = (id2, value, style = "body") => node2(id2, "Text", { text: value, style });
|
|
4504
|
+
var vstack = (id2, children, spacing = 12, alignment = "leading") => node2(id2, "VStack", { spacing, alignment, children });
|
|
4505
|
+
var button = (id2, title, action2, style = "primary") => node2(id2, "Button", { title, style, fullWidth: true, action: action2 });
|
|
4042
4506
|
var openScreen = (screenId) => ({ actionId: "himi.open", params: { screenId } });
|
|
4043
4507
|
function detailedHeader(opts) {
|
|
4044
4508
|
const id2 = opts.id ?? "detailed_header";
|
|
@@ -4046,7 +4510,7 @@ function detailedHeader(opts) {
|
|
|
4046
4510
|
if (opts.logoUrl || opts.locationLabel) {
|
|
4047
4511
|
const identity = [];
|
|
4048
4512
|
if (opts.logoUrl) {
|
|
4049
|
-
identity.push(
|
|
4513
|
+
identity.push(node2(`${id2}.logo`, "Image", {
|
|
4050
4514
|
url: opts.logoUrl,
|
|
4051
4515
|
width: 56,
|
|
4052
4516
|
height: 56,
|
|
@@ -4057,12 +4521,12 @@ function detailedHeader(opts) {
|
|
|
4057
4521
|
}
|
|
4058
4522
|
if (opts.locationLabel) {
|
|
4059
4523
|
if (opts.locationAction) {
|
|
4060
|
-
identity.push(
|
|
4524
|
+
identity.push(node2(`${id2}.locationGroup`, "HStack", {
|
|
4061
4525
|
spacing: 8,
|
|
4062
4526
|
alignment: "center",
|
|
4063
4527
|
children: [
|
|
4064
4528
|
text2(`${id2}.location`, opts.locationLabel, "caption"),
|
|
4065
|
-
|
|
4529
|
+
node2(`${id2}.location.action`, "Button", {
|
|
4066
4530
|
title: opts.locationAction.label,
|
|
4067
4531
|
style: opts.locationAction.style ?? "plain",
|
|
4068
4532
|
fullWidth: false,
|
|
@@ -4074,10 +4538,10 @@ function detailedHeader(opts) {
|
|
|
4074
4538
|
identity.push(text2(`${id2}.location`, opts.locationLabel, "caption"));
|
|
4075
4539
|
}
|
|
4076
4540
|
}
|
|
4077
|
-
cardChildren.push(
|
|
4541
|
+
cardChildren.push(node2(`${id2}.identity`, "HStack", { spacing: 12, alignment: "center", children: identity }));
|
|
4078
4542
|
}
|
|
4079
4543
|
if (opts.memberCaption || opts.memberAvatarsPath || opts.memberAvatars?.length) {
|
|
4080
|
-
cardChildren.push(
|
|
4544
|
+
cardChildren.push(node2(`${id2}.members`, "AvatarStrip", {
|
|
4081
4545
|
size: 36,
|
|
4082
4546
|
maxVisible: 5,
|
|
4083
4547
|
...opts.memberCaption ? { caption: opts.memberCaption } : {},
|
|
@@ -4092,7 +4556,7 @@ function detailedHeader(opts) {
|
|
|
4092
4556
|
]) {
|
|
4093
4557
|
if (action2) cardChildren.push(button(`${id2}.${key}`, action2.label, action2.action, action2.style ?? (key === "primary" ? "primary" : "secondary")));
|
|
4094
4558
|
}
|
|
4095
|
-
const card =
|
|
4559
|
+
const card = node2(`${id2}.card`, "VStack", {
|
|
4096
4560
|
spacing: 14,
|
|
4097
4561
|
alignment: "leading",
|
|
4098
4562
|
children: cardChildren
|
|
@@ -4105,7 +4569,7 @@ function detailedHeader(opts) {
|
|
|
4105
4569
|
fillMaxWidth: true
|
|
4106
4570
|
};
|
|
4107
4571
|
const fixed = opts.collapsible === false;
|
|
4108
|
-
return
|
|
4572
|
+
return node2(id2, "CollapsingHeader", {
|
|
4109
4573
|
...opts.imageUrl ? { imageUrl: opts.imageUrl } : {},
|
|
4110
4574
|
title: opts.title,
|
|
4111
4575
|
...opts.subtitle ? { subtitle: opts.subtitle } : {},
|
|
@@ -4131,7 +4595,7 @@ function authScreen(opts) {
|
|
|
4131
4595
|
const screenId = opts.screenId ?? "signin";
|
|
4132
4596
|
const c = opts.copy ?? {};
|
|
4133
4597
|
const withRegister = opts.register !== false;
|
|
4134
|
-
const field = (key, label, action2, extra = {}) =>
|
|
4598
|
+
const field = (key, label, action2, extra = {}) => node2(`${s2}.${key}`, "TextField", {
|
|
4135
4599
|
label,
|
|
4136
4600
|
placeholder: label,
|
|
4137
4601
|
valuePath: `$service:${s2}.${key}`,
|
|
@@ -4151,7 +4615,7 @@ function authScreen(opts) {
|
|
|
4151
4615
|
`$service:${s2}.signedIn`
|
|
4152
4616
|
),
|
|
4153
4617
|
hideWhen(
|
|
4154
|
-
|
|
4618
|
+
node2(`${s2}.submit`, "Button", {
|
|
4155
4619
|
title: `$service:${s2}.submitCta`,
|
|
4156
4620
|
style: "primary",
|
|
4157
4621
|
fullWidth: true,
|
|
@@ -4163,7 +4627,7 @@ function authScreen(opts) {
|
|
|
4163
4627
|
if (withRegister) {
|
|
4164
4628
|
children.push(
|
|
4165
4629
|
hideWhen(
|
|
4166
|
-
|
|
4630
|
+
node2(`${s2}.toggle`, "Button", {
|
|
4167
4631
|
title: `$service:${s2}.switchCta`,
|
|
4168
4632
|
style: "secondary",
|
|
4169
4633
|
fullWidth: true,
|
|
@@ -4183,7 +4647,7 @@ function authScreen(opts) {
|
|
|
4183
4647
|
}
|
|
4184
4648
|
children.push(
|
|
4185
4649
|
hideWhen(
|
|
4186
|
-
|
|
4650
|
+
node2(`${s2}.signout`, "Button", {
|
|
4187
4651
|
title: c.signOutCta ?? "Sign out",
|
|
4188
4652
|
style: "secondary",
|
|
4189
4653
|
fullWidth: true,
|
|
@@ -4637,7 +5101,7 @@ function checkoutScreen(opts) {
|
|
|
4637
5101
|
// someone the thing they are currently paying for is the obvious next bug.
|
|
4638
5102
|
hideWhen(text2(`${s2}.row_joined`, "$item.joinedLabel", "bodyEmphasis"), "$item.notJoined"),
|
|
4639
5103
|
hideWhen(
|
|
4640
|
-
|
|
5104
|
+
node2(`${s2}.row_join`, "Button", {
|
|
4641
5105
|
title: "$item.cta",
|
|
4642
5106
|
disabledPath: "$item.joinDisabled",
|
|
4643
5107
|
style: "primary",
|
|
@@ -4676,7 +5140,7 @@ function checkoutScreen(opts) {
|
|
|
4676
5140
|
}
|
|
4677
5141
|
children.push(
|
|
4678
5142
|
hideWhen(
|
|
4679
|
-
|
|
5143
|
+
node2(`${s2}.list`, "LazyList", { itemsPath: `$service:${s2}.rows`, spacing: 18, items: [row] }),
|
|
4680
5144
|
`$service:${s2}.noRows`
|
|
4681
5145
|
)
|
|
4682
5146
|
);
|
|
@@ -4689,10 +5153,20 @@ function checkoutScreen(opts) {
|
|
|
4689
5153
|
}
|
|
4690
5154
|
export {
|
|
4691
5155
|
authScreen,
|
|
5156
|
+
businessContactLink,
|
|
5157
|
+
businessContactPoint,
|
|
5158
|
+
businessContactSection,
|
|
5159
|
+
businessContactSettings,
|
|
4692
5160
|
checkoutScreen,
|
|
4693
5161
|
createAuthService,
|
|
5162
|
+
createBusinessContactService,
|
|
4694
5163
|
createCheckoutService,
|
|
5164
|
+
createInviteAvailabilityService,
|
|
5165
|
+
createInviteService,
|
|
4695
5166
|
detailedHeader,
|
|
4696
|
-
entitlement
|
|
5167
|
+
entitlement,
|
|
5168
|
+
inviteAction,
|
|
5169
|
+
inviteButton,
|
|
5170
|
+
inviteScreen
|
|
4697
5171
|
};
|
|
4698
5172
|
//# sourceMappingURL=screens.mjs.map
|