@aippy/runtime 0.3.2 → 0.4.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.
@@ -4,7 +4,12 @@ import { AippyConfig } from './types';
4
4
  */
5
5
  export declare const DEFAULT_CONFIG: AippyConfig;
6
6
  /**
7
- * Get configuration from environment variables
7
+ * Get configuration from environment variables.
8
+ *
9
+ * Note: `AIPPY_API_BASE_URL` here only populates `AippyConfig.apiBaseUrl`
10
+ * (a generic, user-facing config field). It does **not** affect the AI SDK
11
+ * or User SDK URL routing — those are driven by `resolveApiBaseUrl()` in
12
+ * `core/env.ts`, which inspects `window.location.hostname` at runtime.
8
13
  */
9
14
  export declare function getConfigFromEnv(): Partial<AippyConfig>;
10
15
  /**
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Centralized environment domain constants and runtime detection.
3
+ *
4
+ * All environment-specific URLs live here — no other file should
5
+ * hardcode aippy domain strings.
6
+ */
7
+ /**
8
+ * Resolves the API base URL at runtime by inspecting the page hostname.
9
+ *
10
+ * Priority:
11
+ * 1. Cached result (hostname never changes within a page lifecycle)
12
+ * 2. Page hosted on `*.aippynow.com` or localhost → dev API
13
+ * 3. Everything else (including `*.aippy.live`) → prod API
14
+ */
15
+ export declare function resolveApiBaseUrl(): string;
16
+ /** @internal Exposed only for testing — do not use in production code. */
17
+ export declare function _resetCachedApiBaseUrl(): void;
@@ -1,5 +1,6 @@
1
1
  export * from './types';
2
2
  export * from './config';
3
+ export { resolveApiBaseUrl, _resetCachedApiBaseUrl } from './env';
3
4
  export * from './errors';
4
5
  export * from './version';
5
6
  export * from './headers';
@@ -1,25 +1,28 @@
1
- import { D as s, g as r, m as o } from "../config-B0A7gHQM.js";
2
- import { A as p, a as t, E as i, b as R, c as E } from "../errors-B3bDbQbD.js";
3
- import { S as m, V as A, c as C, a as g, g as f, s as y } from "../container-message-CueWm_GX.js";
4
- import { A as O, C as d, R as l, a as x, p as F } from "../runtime-CmoG3v2m.js";
1
+ import { D as r, g as s, m as o } from "../config-B0A7gHQM.js";
2
+ import { _ as t, r as i } from "../bridge-CtB9L5kL.js";
3
+ import { A as R, a as E, E as c, b as m, c as A } from "../errors-B3bDbQbD.js";
4
+ import { S as f, V as g, c as l, a as y, g as _, s as d } from "../container-message-Cv27sbjB.js";
5
+ import { A as D, C as O, R as F, a as I, p as S } from "../runtime-CmoG3v2m.js";
5
6
  export {
6
- O as AippyRuntime,
7
- p as AippyRuntimeError,
8
- d as Cancellable,
9
- s as DEFAULT_CONFIG,
10
- t as ERROR_CODES,
11
- i as ERROR_PREFIX,
12
- l as ReceiveChannel,
13
- m as SDK_NAME,
14
- A as VERSION,
15
- x as aippyRuntime,
16
- C as createAippyHeaders,
17
- g as createAippyHeadersAsync,
18
- R as createCodeError,
19
- E as createError,
20
- r as getConfigFromEnv,
21
- f as getVersionInfo,
7
+ D as AippyRuntime,
8
+ R as AippyRuntimeError,
9
+ O as Cancellable,
10
+ r as DEFAULT_CONFIG,
11
+ E as ERROR_CODES,
12
+ c as ERROR_PREFIX,
13
+ F as ReceiveChannel,
14
+ f as SDK_NAME,
15
+ g as VERSION,
16
+ t as _resetCachedApiBaseUrl,
17
+ I as aippyRuntime,
18
+ l as createAippyHeaders,
19
+ y as createAippyHeadersAsync,
20
+ m as createCodeError,
21
+ A as createError,
22
+ s as getConfigFromEnv,
23
+ _ as getVersionInfo,
22
24
  o as mergeConfig,
23
- F as processMotionData,
24
- y as sendMessageToContainer
25
+ S as processMotionData,
26
+ i as resolveApiBaseUrl,
27
+ d as sendMessageToContainer
25
28
  };
@@ -1,26 +1,27 @@
1
1
  import { createOpenAICompatible as d } from "@ai-sdk/openai-compatible";
2
- import { s as f, a as b } from "./container-message-CueWm_GX.js";
2
+ import { r as f } from "./bridge-CtB9L5kL.js";
3
+ import { s as m, a as b } from "./container-message-Cv27sbjB.js";
3
4
  import { AISDKError as c, DefaultChatTransport as h } from "ai";
4
- import { E as m, b as p, a as u } from "./errors-B3bDbQbD.js";
5
+ import { E as g, b as p, a as u } from "./errors-B3bDbQbD.js";
5
6
  import { j as A } from "./url-c26cuIpu.js";
6
- const g = "https://api.aippy.ai", I = `${g}/aisdk/v1/`, w = `${g}/aisdk/v1/ui/`, v = "gpt-5-nano", C = "";
7
- function O(n = {}) {
7
+ const j = `${f()}/aisdk/v1/`, x = `${f()}/aisdk/v1/ui/`, I = "gpt-5-nano", v = "";
8
+ function w(o = {}) {
8
9
  return {
9
- baseUrl: n.baseUrl ?? I
10
+ baseUrl: o.baseUrl ?? `${f()}/aisdk/v1/`
10
11
  };
11
12
  }
12
- function _(n = {}) {
13
+ function C(o = {}) {
13
14
  return {
14
- baseUrl: n.baseUrl ?? w
15
+ baseUrl: o.baseUrl ?? `${f()}/aisdk/v1/ui/`
15
16
  };
16
17
  }
17
- function E(n, e) {
18
- const r = n.status;
18
+ function O(o, e) {
19
+ const r = o.status;
19
20
  if (e && typeof e == "object" && "error" in e) {
20
- const t = e, o = t.error.code, s = o != null ? `AippyAIError_${o}` : `AippyAIError_${r}`, a = e;
21
- return "appMessage" in a && a.appMessage !== void 0 && f(a.appMessage), new c({
21
+ const t = e, n = t.error.code, s = n != null ? `AippyAIError_${n}` : `AippyAIError_${r}`, a = e;
22
+ return "appMessage" in a && a.appMessage !== void 0 && m(a.appMessage), new c({
22
23
  name: s,
23
- message: `${m.RUNTIME} ${t.error.message}`,
24
+ message: `${g.RUNTIME} ${t.error.message}`,
24
25
  cause: {
25
26
  type: t.error.type ?? void 0,
26
27
  param: t.error.param ?? void 0,
@@ -30,84 +31,84 @@ function E(n, e) {
30
31
  }
31
32
  if (e && typeof e == "object" && e !== null) {
32
33
  const t = e;
33
- "appMessage" in t && t.appMessage !== void 0 && f(t.appMessage);
34
+ "appMessage" in t && t.appMessage !== void 0 && m(t.appMessage);
34
35
  }
35
36
  return new c({
36
37
  name: `AippyAIError_${r}`,
37
- message: `${m.RUNTIME} Request failed with status ${r}`,
38
+ message: `${g.RUNTIME} Request failed with status ${r}`,
38
39
  cause: { status: r }
39
40
  });
40
41
  }
41
42
  function l() {
42
- return async (n, e) => {
43
- const r = await b(e?.headers), t = await globalThis.fetch(n, { ...e, headers: r });
43
+ return async (o, e) => {
44
+ const r = await b(e?.headers), t = await globalThis.fetch(o, { ...e, headers: r });
44
45
  if (!t.ok) {
45
- const o = await t.text().catch(() => null);
46
+ const n = await t.text().catch(() => null);
46
47
  let s = null;
47
- if (o)
48
+ if (n)
48
49
  try {
49
- s = JSON.parse(o);
50
+ s = JSON.parse(n);
50
51
  } catch {
51
- s = { message: o };
52
+ s = { message: n };
52
53
  }
53
- throw E(t, s);
54
+ throw O(t, s);
54
55
  }
55
56
  return t;
56
57
  };
57
58
  }
58
- const S = [
59
+ const E = [
59
60
  "gpt-image-1",
60
61
  "gpt-image-1-mini",
61
62
  "gpt-image-1.5"
62
63
  ];
63
- function U(n) {
64
+ function _(o) {
64
65
  try {
65
- const e = JSON.parse(n);
66
- if (e.model && S.some((r) => e.model.startsWith(r))) {
66
+ const e = JSON.parse(o);
67
+ if (e.model && E.some((r) => e.model.startsWith(r))) {
67
68
  const { response_format: r, ...t } = e;
68
69
  return JSON.stringify(t);
69
70
  }
70
71
  } catch {
71
72
  }
72
- return n;
73
+ return o;
73
74
  }
74
- function x(n = {}) {
75
- const { baseUrl: e } = O(n), r = l();
75
+ function J(o = {}) {
76
+ const { baseUrl: e } = w(o), r = l();
76
77
  return d({
77
78
  name: "aippy",
78
79
  baseURL: e,
79
- fetch: async (o, s) => o.toString().includes("/images/generations") && s?.method?.toUpperCase() === "POST" && s?.body ? r(o, {
80
+ fetch: async (n, s) => n.toString().includes("/images/generations") && s?.method?.toUpperCase() === "POST" && s?.body ? r(n, {
80
81
  ...s,
81
- body: U(s.body)
82
- }) : r(o, s),
82
+ body: _(s.body)
83
+ }) : r(n, s),
83
84
  // Enable structured outputs support (json_schema response format)
84
85
  // This is required for Output.object() and Output.array() to work properly
85
86
  supportsStructuredOutputs: !0
86
87
  });
87
88
  }
88
- const N = "/chat";
89
- function J(n = {}) {
90
- const { baseUrl: e } = _(n), r = n.model ?? v, t = n.system ?? C, o = n.api ?? A(e, N), s = { model: r, system: t }, a = l();
89
+ const S = "/chat";
90
+ function B(o = {}) {
91
+ const { baseUrl: e } = C(o), r = o.model ?? I, t = o.system ?? v, n = o.api ?? A(e, S), s = { model: r, system: t }, a = l();
91
92
  return {
92
93
  transport: new h({
93
- api: o,
94
+ api: n,
94
95
  body: s,
95
96
  // Ensure token is fetched fresh for every request
96
97
  fetch: a
97
98
  })
98
99
  };
99
100
  }
100
- function y(n) {
101
+ function y(o) {
101
102
  const e = [];
102
- if (!n || typeof n != "object")
103
+ if (!o || typeof o != "object")
103
104
  throw p("AIConfig must be an object", u.INVALID_CONFIG);
104
- const r = n;
105
- for (const [t, o] of Object.entries(r)) {
106
- if (!o || typeof o != "object") {
105
+ const r = o;
106
+ for (const [t, n] of Object.entries(r)) {
107
+ if (!n || typeof n != "object") {
107
108
  e.push({ key: t, message: "Item must be an object" });
108
109
  continue;
109
110
  }
110
- const s = o;
111
+ const s = n;
111
112
  typeof s.index != "number" && e.push({ key: t, message: "index must be a number" }), typeof s.name != "string" && e.push({ key: t, message: "name must be a string" }), typeof s.description != "string" && e.push({ key: t, message: "description must be a string" });
112
113
  const a = s.type;
113
114
  if (!["number", "boolean", "text", "enum"].includes(a)) {
@@ -148,10 +149,10 @@ function y(n) {
148
149
  { errors: e }
149
150
  );
150
151
  }
151
- function P(n) {
152
+ function H(o) {
152
153
  let e;
153
154
  try {
154
- e = JSON.parse(n);
155
+ e = JSON.parse(o);
155
156
  } catch (r) {
156
157
  throw p(
157
158
  `Invalid JSON: ${r instanceof Error ? r.message : String(r)}`,
@@ -160,11 +161,11 @@ function P(n) {
160
161
  }
161
162
  return y(e), e;
162
163
  }
163
- function T(n) {
164
- return y(n), n;
164
+ function U(o) {
165
+ return y(o), o;
165
166
  }
166
- function F(n, e) {
167
- const r = n[e];
167
+ function N(o, e) {
168
+ const r = o[e];
168
169
  if (!r)
169
170
  throw p(
170
171
  `AIConfig key "${e}" not found`,
@@ -173,7 +174,7 @@ function F(n, e) {
173
174
  );
174
175
  return r.value;
175
176
  }
176
- function R(n) {
177
+ function T(o) {
177
178
  if (!(typeof window > "u"))
178
179
  try {
179
180
  const e = window.webkit?.messageHandlers?.aippyListener;
@@ -181,7 +182,7 @@ function R(n) {
181
182
  try {
182
183
  const r = {
183
184
  command: "ai.initialize",
184
- parameters: JSON.stringify(n)
185
+ parameters: JSON.stringify(o)
185
186
  };
186
187
  e.postMessage(r);
187
188
  } catch (r) {
@@ -191,7 +192,7 @@ function R(n) {
191
192
  try {
192
193
  const r = {
193
194
  type: "ai.initialize",
194
- config: JSON.stringify(n)
195
+ config: JSON.stringify(o)
195
196
  };
196
197
  window.parent.postMessage(r, "*");
197
198
  } catch (r) {
@@ -201,13 +202,13 @@ function R(n) {
201
202
  console.warn("⚠️ [Aippy AI Config] Failed to send config:", e);
202
203
  }
203
204
  }
204
- function B(n) {
205
- const e = T(n);
206
- return R(e), new Proxy({}, {
205
+ function P(o) {
206
+ const e = U(o);
207
+ return T(e), new Proxy({}, {
207
208
  get(r, t) {
208
209
  if (typeof t == "string")
209
210
  try {
210
- return F(e, t);
211
+ return N(e, t);
211
212
  } catch {
212
213
  return;
213
214
  }
@@ -221,18 +222,20 @@ function B(n) {
221
222
  });
222
223
  }
223
224
  export {
224
- I as D,
225
- N as U,
226
- x as a,
227
- J as b,
228
- w as c,
229
- v as d,
230
- C as e,
231
- B as f,
232
- F as g,
233
- T as l,
234
- E as n,
235
- P as p,
236
- R as s,
225
+ j as D,
226
+ S as U,
227
+ J as a,
228
+ B as b,
229
+ x as c,
230
+ I as d,
231
+ v as e,
232
+ C as f,
233
+ N as g,
234
+ P as h,
235
+ U as l,
236
+ O as n,
237
+ H as p,
238
+ w as r,
239
+ T as s,
237
240
  y as v
238
241
  };
@@ -15,7 +15,7 @@ async function v() {
15
15
  console.log("🔍 [useUserInfo] fetchUserInfoFromBridge started");
16
16
  const n = A();
17
17
  try {
18
- const { getUserInfoAsync: o, getUserInfoFromParent: c, isInIframe: t } = await import("./bridge-CqV1iP30.js"), { hasNativeBridge: f } = await import("./native-bridge-BnvipFJc.js"), i = f(), l = t();
18
+ const { getUserInfoAsync: o, getUserInfoFromParent: c, isInIframe: t } = await import("./bridge-CtB9L5kL.js").then((r) => r.b), { hasNativeBridge: f } = await import("./native-bridge-BnvipFJc.js"), i = f(), l = t();
19
19
  console.log("🔍 [useUserInfo] Environment check:", {
20
20
  hasNativeBridge: i,
21
21
  isInIframe: l,
@@ -1,92 +1,97 @@
1
- import { D as r, g as o, m as s } from "../config-B0A7gHQM.js";
2
- import { A as i, a as n, E as p, b as m, c as A } from "../errors-B3bDbQbD.js";
3
- import { S as f, V as u, c as C, a as E, g, s as I } from "../container-message-CueWm_GX.js";
4
- import { A as l, C as S, R as x, a as R, p as T } from "../runtime-CmoG3v2m.js";
5
- import { CameraAPI as D, FileSystemAPI as U, GeolocationAPI as y, SensorsAPI as F, camera as P, fileSystem as M, geolocation as h, isMotionSupported as v, isOrientationSupported as O, requestMotionPermission as b, sensors as L, vibrate as w, watchMotion as H, watchOrientation as N } from "../device/index.js";
6
- import { P as k, a as q, c as B, b as j, g as G, i as z, p as K, r as W, s as X } from "../app-version-checker-Bz7FrEZz.js";
7
- import { a as J, P as Q, p as Z, b as $ } from "../pwa-C5nXU0DN.js";
8
- import { j as ae } from "../url-c26cuIpu.js";
9
- import { a as oe, b as se } from "../useTweaks-B7Muzo78.js";
10
- import { c as ie, a as ne, i as pe, p as me, u as Ae } from "../useAudioContext-D9F3x80Y.js";
11
- import { reportScore as fe, sendEvent as ue, updateScore as Ce } from "../leaderboard/index.js";
12
- import { D as ge, d as Ie, e as de, c as le, U as Se, a as xe, b as Re, f as Te, g as _e, l as De, n as Ue, p as ye, s as Fe, v as Pe } from "../helper-DHOIfdTx.js";
13
- import { c as he, u as ve } from "../hooks-CDo6slfY.js";
14
- import { getAuthTokenAsync as be } from "../bridge-CqV1iP30.js";
15
- import { hasNativeBridge as we } from "../native-bridge-BnvipFJc.js";
1
+ import { D as r, g as s, m as o } from "../config-B0A7gHQM.js";
2
+ import { _ as i, g as n, r as p } from "../bridge-CtB9L5kL.js";
3
+ import { A as m, a as f, E as c, b as u, c as C } from "../errors-B3bDbQbD.js";
4
+ import { S as g, V as I, c as d, a as E, g as S, s as x } from "../container-message-Cv27sbjB.js";
5
+ import { A as U, C as _, R as T, a as D, p as v } from "../runtime-CmoG3v2m.js";
6
+ import { CameraAPI as F, FileSystemAPI as P, GeolocationAPI as h, SensorsAPI as M, camera as O, fileSystem as b, geolocation as L, isMotionSupported as w, isOrientationSupported as H, requestMotionPermission as N, sensors as V, vibrate as B, watchMotion as k, watchOrientation as q } from "../device/index.js";
7
+ import { P as G, a as z, c as K, b as W, g as X, i as Y, p as J, r as Q, s as Z } from "../app-version-checker-Bz7FrEZz.js";
8
+ import { a as ee, P as ae, p as re, b as se } from "../pwa-C5nXU0DN.js";
9
+ import { j as te } from "../url-c26cuIpu.js";
10
+ import { a as ne, b as pe } from "../useTweaks-B7Muzo78.js";
11
+ import { c as me, b as fe, i as ce, p as ue, u as Ce, a as le } from "../useSound-jHl7rkaq.js";
12
+ import { reportScore as Ie, sendEvent as de, updateScore as Ee } from "../leaderboard/index.js";
13
+ import { D as xe, d as Re, e as Ue, c as _e, U as Te, a as De, b as ve, h as ye, g as Fe, l as Pe, n as he, p as Me, r as Oe, f as be, s as Le, v as we } from "../helper-KmxP93y0.js";
14
+ import { c as Ne, u as Ve } from "../hooks-D5lkty5r.js";
15
+ import { hasNativeBridge as ke } from "../native-bridge-BnvipFJc.js";
16
16
  export {
17
- l as AippyRuntime,
18
- i as AippyRuntimeError,
19
- D as CameraAPI,
20
- S as Cancellable,
21
- ge as DEFAULT_BASE_URL,
22
- Ie as DEFAULT_CHAT_MODEL,
23
- de as DEFAULT_CHAT_SYSTEM,
17
+ U as AippyRuntime,
18
+ m as AippyRuntimeError,
19
+ F as CameraAPI,
20
+ _ as Cancellable,
21
+ xe as DEFAULT_BASE_URL,
22
+ Re as DEFAULT_CHAT_MODEL,
23
+ Ue as DEFAULT_CHAT_SYSTEM,
24
24
  r as DEFAULT_CONFIG,
25
- le as DEFAULT_UI_BASE_URL,
26
- n as ERROR_CODES,
27
- p as ERROR_PREFIX,
28
- U as FileSystemAPI,
29
- y as GeolocationAPI,
30
- J as PWAUtils,
31
- Q as PerformanceMonitor,
32
- k as PlatformDetector,
33
- x as ReceiveChannel,
34
- f as SDK_NAME,
35
- F as SensorsAPI,
36
- Se as UI_CHAT_ENDPOINT,
37
- u as VERSION,
38
- xe as aippyAIProvider,
39
- Re as aippyChatConfig,
40
- R as aippyRuntime,
41
- oe as aippyTweaks,
42
- se as aippyTweaksRuntime,
43
- P as camera,
44
- q as checkFeatureSupport,
45
- he as clearUserInfoCache,
46
- B as compareVersions,
47
- Te as createAIConfig,
48
- C as createAippyHeaders,
25
+ _e as DEFAULT_UI_BASE_URL,
26
+ f as ERROR_CODES,
27
+ c as ERROR_PREFIX,
28
+ P as FileSystemAPI,
29
+ h as GeolocationAPI,
30
+ ee as PWAUtils,
31
+ ae as PerformanceMonitor,
32
+ G as PlatformDetector,
33
+ T as ReceiveChannel,
34
+ g as SDK_NAME,
35
+ M as SensorsAPI,
36
+ Te as UI_CHAT_ENDPOINT,
37
+ I as VERSION,
38
+ i as _resetCachedApiBaseUrl,
39
+ De as aippyAIProvider,
40
+ ve as aippyChatConfig,
41
+ D as aippyRuntime,
42
+ ne as aippyTweaks,
43
+ pe as aippyTweaksRuntime,
44
+ O as camera,
45
+ z as checkFeatureSupport,
46
+ Ne as clearUserInfoCache,
47
+ K as compareVersions,
48
+ ye as createAIConfig,
49
+ d as createAippyHeaders,
49
50
  E as createAippyHeadersAsync,
50
- m as createCodeError,
51
- A as createError,
52
- ie as createHiddenMediaElement,
53
- M as fileSystem,
54
- h as geolocation,
55
- _e as getAIConfigValue,
56
- be as getAuthTokenAsync,
57
- j as getAvailableFeatures,
58
- o as getConfigFromEnv,
59
- G as getFeatureVersionRequirements,
60
- g as getVersionInfo,
61
- we as hasNativeBridge,
62
- ne as isIOSDevice,
63
- z as isInIframe,
64
- pe as isMediaStreamAudioSupported,
65
- v as isMotionSupported,
66
- O as isOrientationSupported,
67
- ae as joinUrl,
68
- De as loadAIConfig,
69
- s as mergeConfig,
70
- Ue as normalizeError,
71
- ye as parseAIConfig,
72
- me as patchAudioContext,
73
- Z as performanceMonitor,
74
- K as platform,
75
- T as processMotionData,
76
- $ as pwa,
77
- fe as reportScore,
78
- b as requestMotionPermission,
79
- W as requireFeatureSupport,
80
- Fe as sendAIConfigToContainer,
81
- ue as sendEvent,
82
- I as sendMessageToContainer,
83
- L as sensors,
84
- X as showAlert,
85
- Ce as updateScore,
86
- Ae as useAudioContext,
87
- ve as useUserInfo,
88
- Pe as validateAIConfig,
89
- w as vibrate,
90
- H as watchMotion,
91
- N as watchOrientation
51
+ u as createCodeError,
52
+ C as createError,
53
+ me as createHiddenMediaElement,
54
+ b as fileSystem,
55
+ L as geolocation,
56
+ Fe as getAIConfigValue,
57
+ n as getAuthTokenAsync,
58
+ W as getAvailableFeatures,
59
+ s as getConfigFromEnv,
60
+ X as getFeatureVersionRequirements,
61
+ S as getVersionInfo,
62
+ ke as hasNativeBridge,
63
+ fe as isIOSDevice,
64
+ Y as isInIframe,
65
+ ce as isMediaStreamAudioSupported,
66
+ w as isMotionSupported,
67
+ H as isOrientationSupported,
68
+ te as joinUrl,
69
+ Pe as loadAIConfig,
70
+ o as mergeConfig,
71
+ he as normalizeError,
72
+ Me as parseAIConfig,
73
+ ue as patchAudioContext,
74
+ re as performanceMonitor,
75
+ J as platform,
76
+ v as processMotionData,
77
+ se as pwa,
78
+ Ie as reportScore,
79
+ N as requestMotionPermission,
80
+ Q as requireFeatureSupport,
81
+ p as resolveApiBaseUrl,
82
+ Oe as resolveOpenAIConfig,
83
+ be as resolveUIConfig,
84
+ Le as sendAIConfigToContainer,
85
+ de as sendEvent,
86
+ x as sendMessageToContainer,
87
+ V as sensors,
88
+ Z as showAlert,
89
+ Ee as updateScore,
90
+ Ce as useAudioContext,
91
+ le as useSound,
92
+ Ve as useUserInfo,
93
+ we as validateAIConfig,
94
+ B as vibrate,
95
+ k as watchMotion,
96
+ q as watchOrientation
92
97
  };