@aippy/runtime 0.4.2-dev.3 → 0.4.2-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +15 -20
  2. package/dist/ai/errors.d.ts +1 -1
  3. package/dist/ai/index.js +15 -17
  4. package/dist/{app-version-checker-Bz7FrEZz.js → app-version-checker-YVIFbytA.js} +18 -17
  5. package/dist/bridge-K3HqQwdj.js +311 -0
  6. package/dist/container-message-D4RX93q2.js +56 -0
  7. package/dist/core/env.d.ts +2 -0
  8. package/dist/core/index.js +2 -2
  9. package/dist/core/parent-message.d.ts +5 -0
  10. package/dist/core/wallet-recharge.d.ts +16 -0
  11. package/dist/helper-CSe2sxu6.js +346 -0
  12. package/dist/{hooks-D5lkty5r.js → hooks-CMKwSLcQ.js} +1 -1
  13. package/dist/index/index.js +37 -38
  14. package/dist/index.d.ts +1 -1
  15. package/dist/ministore/app-authorization.d.ts +9 -0
  16. package/dist/ministore/authorization.d.ts +6 -0
  17. package/dist/ministore/consume.d.ts +3 -0
  18. package/dist/ministore/errors.d.ts +18 -0
  19. package/dist/ministore/index.d.ts +19 -0
  20. package/dist/ministore/index.js +921 -0
  21. package/dist/ministore/order.d.ts +1 -0
  22. package/dist/ministore/purchase.d.ts +5 -0
  23. package/dist/ministore/queries.d.ts +13 -0
  24. package/dist/ministore/recharge.d.ts +12 -0
  25. package/dist/ministore/transport.d.ts +14 -0
  26. package/dist/ministore/types.d.ts +166 -0
  27. package/dist/ministore/update-item.d.ts +3 -0
  28. package/dist/ministore/validation.d.ts +19 -0
  29. package/dist/ministore.d.ts +2 -0
  30. package/dist/user/bridge.d.ts +3 -8
  31. package/dist/user/config.d.ts +2 -0
  32. package/dist/user/index.js +3 -3
  33. package/dist/utils/app-version-requirements.json.d.ts +4 -0
  34. package/dist/utils/index.js +1 -1
  35. package/dist/wallet-recharge-xSzcD6QS.js +140 -0
  36. package/package.json +4 -5
  37. package/dist/bridge-CtB9L5kL.js +0 -259
  38. package/dist/container-message-D1_iPvJX.js +0 -56
  39. package/dist/credits/credits.d.ts +0 -13
  40. package/dist/credits/index.d.ts +0 -4
  41. package/dist/credits/index.js +0 -5
  42. package/dist/credits-IWtJtN8O.js +0 -53
  43. package/dist/credits.d.ts +0 -2
  44. package/dist/fetch-lzas52mc.js +0 -66
  45. package/dist/helper-BQmXeuDs.js +0 -299
@@ -1,259 +0,0 @@
1
- import { a as v } from "./runtime-CmoG3v2m.js";
2
- import "react";
3
- import { r as k, s as C, i as f } from "./app-version-checker-Bz7FrEZz.js";
4
- import { c as h, a as U } from "./errors-B3bDbQbD.js";
5
- const S = ".aippynow.com", R = "https://api.aippy.dev", _ = "https://api.aippy.ai";
6
- let p;
7
- function q() {
8
- if (p) return p;
9
- let n = _;
10
- if (typeof window < "u" && window.location) {
11
- const e = window.location.hostname;
12
- (e.endsWith(S) || e === "localhost" || e === "127.0.0.1") && (n = R);
13
- }
14
- return p = n, n;
15
- }
16
- function K() {
17
- p = void 0;
18
- }
19
- const B = {
20
- apiBaseUrl: `${q()}/api`,
21
- authToken: "",
22
- currentUserId: null
23
- };
24
- function P(n) {
25
- Object.assign(B, n);
26
- }
27
- function D(n) {
28
- B.authToken = n;
29
- }
30
- function O(n) {
31
- B.currentUserId = n;
32
- }
33
- const b = 3e3, T = 50, g = 500, c = { uid: "", token: "" };
34
- let l = null, u = !1, a = null, t = null;
35
- function I(n) {
36
- if (!n || typeof n != "object") return null;
37
- let e = n;
38
- if (e.credentials && typeof e.credentials == "object" && (e = e.credentials), e.user && typeof e.user == "object" && e.token) {
39
- const d = e.user;
40
- e = { uid: d.uid || d.userId || d.id, token: e.token, apiBaseUrl: e.apiBaseUrl };
41
- }
42
- const r = e.uid || e.userId || e.id || "", o = e.token || e.authToken || "", s = e.apiBaseUrl;
43
- if (!r || !o) return null;
44
- const i = { uid: String(r), token: o, apiBaseUrl: s };
45
- return O(i.uid), D(o), s && P({ apiBaseUrl: s }), i;
46
- }
47
- function y(n) {
48
- if (console.log("🔄 [Bridge] processUserInfoData called with:", n), !n || typeof n != "object")
49
- return console.warn("⚠️ [Bridge] Invalid data (null or not object):", n), null;
50
- let e = n;
51
- console.log("🔄 [Bridge] Initial obj keys:", Object.keys(e)), e.userInfo && typeof e.userInfo == "object" && (console.log("🔄 [Bridge] Unwrapping nested userInfo"), e = e.userInfo), e.user && typeof e.user == "object" && (console.log("🔄 [Bridge] Unwrapping nested user"), e = e.user), console.log("🔄 [Bridge] After unwrapping, obj:", e);
52
- const r = e.uid || e.userId || e.id || "";
53
- if (!r)
54
- return console.warn("⚠️ [Bridge] No uid found in data"), null;
55
- const o = { uid: String(r), ...e };
56
- return console.log("✅ [Bridge] Created userInfo:", o), l = o, u = !0, console.log("✅ [Bridge] Cached userInfo, userInfoReceived = true"), o;
57
- }
58
- function j(n = g) {
59
- return console.log("📱 [Bridge] requestCredentialsFromiOS called, timeout:", n), a ? (console.log("⏳ [Bridge] Pending credentials request exists, waiting..."), new Promise((e) => {
60
- const r = a.resolve;
61
- a.resolve = (o) => {
62
- r(o), e(o);
63
- };
64
- })) : new Promise((e) => {
65
- (async () => {
66
- let r = window.webkit?.messageHandlers?.aippyListener;
67
- if (console.log("📱 [Bridge] Checking aippyListener for credentials:", {
68
- hasWebkit: !!window.webkit,
69
- hasMessageHandlers: !!window.webkit?.messageHandlers,
70
- hasAippyListener: !!r
71
- }), r || (console.log("⏳ [Bridge] aippyListener not found, waiting for injection..."), r = await E(1500)), !r) {
72
- console.warn("⚠️ [Bridge] No aippyListener found after waiting, returning empty credentials"), e(c);
73
- return;
74
- }
75
- const o = setTimeout(() => {
76
- console.warn("⏰ [Bridge] Credentials request TIMEOUT after", n, "ms"), a = null, e(c);
77
- }, n);
78
- a = {
79
- resolve: (s) => {
80
- console.log("✅ [Bridge] pendingCredentialsRequest.resolve called with:", s), clearTimeout(o), a = null, e(s);
81
- }
82
- }, console.log("📱 [Bridge] pendingCredentialsRequest set"), v.receiveChannel.once("user.credentials", (s) => {
83
- console.log("📩 [Bridge] Received user.credentials via receiveChannel:", s), clearTimeout(o);
84
- const i = I(s) || c;
85
- a && a.resolve(i);
86
- });
87
- try {
88
- const s = {
89
- command: "user.getCredentials",
90
- parameters: JSON.stringify({ timestamp: Date.now(), endpoint: "user.credentials" })
91
- };
92
- console.log("📤 [Bridge] Sending credentials request:", s), r.postMessage(s), console.log("📤 [Bridge] Credentials postMessage sent successfully");
93
- } catch (s) {
94
- console.error("❌ [Bridge] Failed to send credentials postMessage:", s), clearTimeout(o), a = null, e(c);
95
- }
96
- })();
97
- });
98
- }
99
- function M(n = g) {
100
- return new Promise((e) => {
101
- if (!f()) {
102
- e(c);
103
- return;
104
- }
105
- const r = setTimeout(() => {
106
- window.removeEventListener("message", o), e(c);
107
- }, n), o = (s) => {
108
- s.data?.type === "user-credentials-response" && (clearTimeout(r), window.removeEventListener("message", o), e(I(s.data) || c));
109
- };
110
- window.addEventListener("message", o);
111
- try {
112
- window.parent.postMessage({ type: "user-credentials-request", timestamp: Date.now() }, "*");
113
- } catch {
114
- clearTimeout(r), window.removeEventListener("message", o), e(c);
115
- }
116
- });
117
- }
118
- const F = () => /Aippy\/[\d.]+\/\d+\/Android/i.test(navigator.userAgent);
119
- async function E(n = 1500) {
120
- if (!F())
121
- return console.log("📱 [Bridge] Not Android, skipping waitForAippyListener"), window.webkit?.messageHandlers?.aippyListener || null;
122
- const e = Date.now(), r = 50;
123
- for (console.log("🤖 [Bridge] Android: Waiting for aippyListener (max", n, "ms)..."); Date.now() - e < n; ) {
124
- const o = window.webkit?.messageHandlers?.aippyListener;
125
- if (o)
126
- return console.log("✅ [Bridge] aippyListener became available after", Date.now() - e, "ms"), o;
127
- await new Promise((s) => setTimeout(s, r));
128
- }
129
- return console.warn("⏰ [Bridge] aippyListener not available after", n, "ms"), null;
130
- }
131
- function N(n = !1, e = g) {
132
- return console.log("📱 [Bridge] requestUserInfoFromiOS called:", { forceRefresh: n, timeoutMs: e }), console.log("📱 [Bridge] Cache state:", { userInfoReceived: u, cachedUserInfo: l ? "(cached)" : null }), u && l && !n ? (console.log("✅ [Bridge] Returning cached userInfo from requestUserInfoFromiOS"), Promise.resolve(l)) : t ? (console.log("⏳ [Bridge] Pending userInfo request exists, waiting..."), new Promise((r) => {
133
- const o = t.resolve;
134
- t.resolve = (s) => {
135
- console.log("⏳ [Bridge] Pending request resolved:", s), o(s), r(s);
136
- };
137
- })) : new Promise((r) => {
138
- (async () => {
139
- let o = window.webkit?.messageHandlers?.aippyListener;
140
- if (console.log("📱 [Bridge] Checking aippyListener:", {
141
- hasWebkit: !!window.webkit,
142
- hasMessageHandlers: !!window.webkit?.messageHandlers,
143
- hasAippyListener: !!o
144
- }), o || (console.log("⏳ [Bridge] aippyListener not found, waiting for injection..."), o = await E(1500)), !o) {
145
- console.warn("⚠️ [Bridge] No aippyListener found after waiting, returning null"), r(null);
146
- return;
147
- }
148
- console.log("📱 [Bridge] Setting up timeout:", e, "ms");
149
- const s = setTimeout(() => {
150
- console.warn("⏰ [Bridge] UserInfo request TIMEOUT after", e, "ms"), t = null, r(null);
151
- }, e);
152
- t = { resolve: (i) => {
153
- console.log("✅ [Bridge] pendingUserInfoRequest.resolve called with:", i), clearTimeout(s), t = null, r(i);
154
- } }, console.log("📱 [Bridge] pendingUserInfoRequest set"), v.receiveChannel.once("user.info", (i) => {
155
- console.log("📩 [Bridge] Received user.info via receiveChannel:", i), clearTimeout(s);
156
- const d = y(i);
157
- console.log("📩 [Bridge] Processed userInfo:", d), t ? t.resolve(d) : console.warn("⚠️ [Bridge] No pendingUserInfoRequest when receiveChannel fired");
158
- }), console.log("📱 [Bridge] receiveChannel.once registered for user.info");
159
- try {
160
- const i = {
161
- command: "user.getUserInfo",
162
- parameters: JSON.stringify({ timestamp: Date.now(), endpoint: "user.info" })
163
- };
164
- console.log("📤 [Bridge] Sending to aippyListener:", i), o.postMessage(i), console.log("📤 [Bridge] postMessage sent successfully");
165
- } catch (i) {
166
- console.error("❌ [Bridge] Failed to send postMessage:", i), clearTimeout(s), t = null, r(null);
167
- }
168
- })();
169
- });
170
- }
171
- function A(n = g) {
172
- return new Promise((e) => {
173
- if (!f()) {
174
- e(null);
175
- return;
176
- }
177
- const r = setTimeout(() => {
178
- window.removeEventListener("message", o), e(null);
179
- }, n), o = (s) => {
180
- s.data?.type === "user-info-response" && (clearTimeout(r), window.removeEventListener("message", o), e(y(s.data)));
181
- };
182
- window.addEventListener("message", o);
183
- try {
184
- window.parent.postMessage({ type: "user-info-request", timestamp: Date.now() }, "*");
185
- } catch {
186
- clearTimeout(r), window.removeEventListener("message", o), e(null);
187
- }
188
- });
189
- }
190
- async function L() {
191
- const { envCheck: n } = k("userCredentials");
192
- switch (n.type) {
193
- case "new_app": {
194
- const e = await j(b);
195
- if (!e?.token) throw h("Token unavailable in app", U.PERMISSION_DENIED);
196
- return e.token;
197
- }
198
- case "iframe": {
199
- const e = await M(T);
200
- if (e?.token) return e.token;
201
- throw C("Sign in to continue.Open this project in the app.", "signin"), h("Token unavailable: User needs to login", U.PERMISSION_DENIED);
202
- }
203
- default:
204
- return "";
205
- }
206
- }
207
- async function H(n = !1) {
208
- if (console.log("🔍 [Bridge] getUserInfoAsync called, forceRefresh:", n), console.log("🔍 [Bridge] Current cache state:", { userInfoReceived: u, cachedUserInfo: l }), u && l && !n)
209
- return console.log("✅ [Bridge] Returning cached userInfo"), l;
210
- const { envCheck: e } = k("userInfo");
211
- switch (console.log("🔍 [Bridge] Environment check result:", e), e.type) {
212
- case "new_app":
213
- return console.log("📱 [Bridge] Detected new_app environment"), await N(n, b);
214
- case "iframe":
215
- return console.log("🖼️ [Bridge] Detected iframe environment"), await A(T);
216
- default:
217
- return console.log("🌐 [Bridge] Detected web environment, returning cached:", l), l;
218
- }
219
- }
220
- async function x(n = g) {
221
- return f() ? await A(n) : null;
222
- }
223
- function w(n) {
224
- const e = I(n);
225
- e && a && (a.resolve(e), a = null);
226
- }
227
- function m(n) {
228
- console.log("📩 [Bridge] window.processUserInfo called with:", n), console.log("📩 [Bridge] pendingUserInfoRequest exists:", !!t);
229
- const e = y(n);
230
- t ? (console.log("✅ [Bridge] Resolving pendingUserInfoRequest with:", e), t.resolve(e), t = null) : (console.warn("⚠️ [Bridge] No pendingUserInfoRequest when processUserInfo called!"), console.warn("⚠️ [Bridge] UserInfo was processed but no one is waiting for it"));
231
- }
232
- function z() {
233
- if (typeof window > "u") {
234
- console.log("🔧 [Bridge] initUserBridge: window is undefined, skipping");
235
- return;
236
- }
237
- console.log("🔧 [Bridge] initUserBridge: Initializing..."), console.log("🔧 [Bridge] UserAgent:", navigator.userAgent), window.processUserCredentials = w, window.processUserInfo = m, console.log("🔧 [Bridge] Exposed window.processUserCredentials and window.processUserInfo"), window.addEventListener("message", (n) => {
238
- n.data?.type === "user-credentials" && (console.log("📩 [Bridge] Received postMessage user-credentials:", n.data), w(n.data)), n.data?.type === "user-info" && (console.log("📩 [Bridge] Received postMessage user-info:", n.data), m(n.data));
239
- }), console.log("🔧 [Bridge] Added message event listener"), console.log("✅ [Bridge] initUserBridge complete");
240
- }
241
- z();
242
- L().catch((n) => {
243
- console.warn("[UserSDK] Auth check on load:", n.message);
244
- });
245
- const X = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
246
- __proto__: null,
247
- getAuthTokenAsync: L,
248
- getUserInfoAsync: H,
249
- getUserInfoFromParent: x,
250
- isInIframe: f,
251
- processUserCredentials: w,
252
- processUserInfo: m
253
- }, Symbol.toStringTag, { value: "Module" }));
254
- export {
255
- K as _,
256
- X as b,
257
- L as g,
258
- q as r
259
- };
@@ -1,56 +0,0 @@
1
- import "react";
2
- import { g as a } from "./bridge-CtB9L5kL.js";
3
- const r = "0.4.2-dev.3", i = {
4
- version: r
5
- }, o = i.version, c = "@aippy/runtime";
6
- function w() {
7
- return {
8
- name: c,
9
- version: o,
10
- buildTime: (/* @__PURE__ */ new Date()).toISOString()
11
- };
12
- }
13
- function p(n) {
14
- const { token: s, existingHeaders: e } = n, t = new Headers(e);
15
- return t.set("Aippy-Runtime-Authorization", `Bearer ${s}`), t.set("Aippy-Runtime-SDK-Version", o), typeof navigator < "u" && navigator.userAgent && t.set("Aippy-Runtime-UA", navigator.userAgent), t;
16
- }
17
- async function m(n) {
18
- const s = await a();
19
- return p({ token: s, existingHeaders: n });
20
- }
21
- function u(n) {
22
- if (!(typeof window > "u"))
23
- try {
24
- const s = window.webkit?.messageHandlers?.aippyListener;
25
- if (s)
26
- try {
27
- const e = {
28
- command: "container.message",
29
- parameters: n
30
- };
31
- s.postMessage(e), console.log("📤 [Container Message] Sent message to iOS app container:", n);
32
- } catch (e) {
33
- console.warn("❌ [Container Message] Failed to send message to iOS app:", e);
34
- }
35
- if (window.parent && window.parent !== window)
36
- try {
37
- const e = {
38
- type: "container.message",
39
- data: n
40
- };
41
- window.parent.postMessage(e, "*"), console.log("📤 [Container Message] Sent message to parent window:", n);
42
- } catch (e) {
43
- console.warn("❌ [Container Message] Failed to send message to parent window:", e);
44
- }
45
- } catch (s) {
46
- console.warn("⚠️ [Container Message] Failed to send message:", s);
47
- }
48
- }
49
- export {
50
- c as S,
51
- o as V,
52
- m as a,
53
- p as c,
54
- w as g,
55
- u as s
56
- };
@@ -1,13 +0,0 @@
1
- export interface CreditsRequestOptions {
2
- /** Backend API base URL, including /aisdk/v1/; resolved from the page by default. */
3
- baseUrl?: string;
4
- signal?: AbortSignal;
5
- }
6
- export interface DeductCreditsOptions extends CreditsRequestOptions {
7
- /** One UUID per business action. Retries must reuse both the UUID and amount. */
8
- eventId: string;
9
- }
10
- /** Return the authenticated user's VIP plus regular credit balance. */
11
- export declare function getCredits(options?: CreditsRequestOptions): Promise<number>;
12
- /** Deduct a positive integer amount. The server checks the balance atomically. */
13
- export declare function deductCredits(amount: number, options: DeductCreditsOptions): Promise<void>;
@@ -1,4 +0,0 @@
1
- /**
2
- * @aippy/runtime/credits — balance and explicit deductions for Aippy credits.
3
- */
4
- export { getCredits, deductCredits, type CreditsRequestOptions, type DeductCreditsOptions, } from './credits';
@@ -1,5 +0,0 @@
1
- import { d as t, g as r } from "../credits-IWtJtN8O.js";
2
- export {
3
- t as deductCredits,
4
- r as getCredits
5
- };
@@ -1,53 +0,0 @@
1
- import { AISDKError as o } from "ai";
2
- import { c as m } from "./fetch-lzas52mc.js";
3
- import { r as p } from "./bridge-CtB9L5kL.js";
4
- import { E as c } from "./errors-B3bDbQbD.js";
5
- import { j as v } from "./url-c26cuIpu.js";
6
- async function w(r = {}) {
7
- const e = await d("GET", "credits", r);
8
- return (!e || typeof e != "object" || !("credits" in e) || !Number.isSafeInteger(e.credits)) && a(), e.credits;
9
- }
10
- async function E(r, e) {
11
- (!Number.isSafeInteger(r) || r <= 0) && n("deductCredits amount must be a positive safe integer"), (typeof e?.eventId != "string" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
12
- e.eventId
13
- )) && n("deductCredits eventId must be a UUID");
14
- const t = await d("POST", "credits/deduct", e, {
15
- amount: r,
16
- eventId: e.eventId.toLowerCase()
17
- });
18
- (!t || typeof t != "object" || !("success" in t) || t.success !== !0) && a();
19
- }
20
- async function d(r, e, t, i) {
21
- const f = t.baseUrl ?? `${p()}/aisdk/v1/`, u = await m()(v(f, e), {
22
- method: r,
23
- cache: "no-store",
24
- signal: t.signal,
25
- headers: i === void 0 ? void 0 : { "Content-Type": "application/json" },
26
- body: i === void 0 ? void 0 : JSON.stringify(i)
27
- });
28
- try {
29
- return await u.json();
30
- } catch (s) {
31
- if (t.signal?.aborted)
32
- throw t.signal.reason ?? s;
33
- if (s instanceof Error && s.name === "AbortError")
34
- throw s;
35
- a();
36
- }
37
- }
38
- function n(r) {
39
- throw new o({
40
- name: "AippyAIError_credits_input",
41
- message: `${c.CODE} ${r}`
42
- });
43
- }
44
- function a() {
45
- throw new o({
46
- name: "AippyAIError_credits_response",
47
- message: `${c.RUNTIME} Invalid credits response`
48
- });
49
- }
50
- export {
51
- E as d,
52
- w as g
53
- };
package/dist/credits.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './credits/index'
2
- export {}
@@ -1,66 +0,0 @@
1
- import { s as i, a as u } from "./container-message-D1_iPvJX.js";
2
- import { AISDKError as c } from "ai";
3
- import { E as p } from "./errors-B3bDbQbD.js";
4
- const f = 100003, m = "insufficient_quota";
5
- function g(s, r) {
6
- const t = s.status;
7
- if (r && typeof r == "object" && "error" in r) {
8
- const e = r, a = e.error.code, o = a != null ? `AippyAIError_${a}` : `AippyAIError_${t}`, n = r;
9
- return "appMessage" in n && n.appMessage !== void 0 && i(n.appMessage), l(e.error) && E(), new c({
10
- name: o,
11
- message: `${p.RUNTIME} ${e.error.message}`,
12
- cause: {
13
- type: e.error.type ?? void 0,
14
- param: e.error.param ?? void 0,
15
- status: t
16
- }
17
- });
18
- }
19
- if (r && typeof r == "object" && r !== null) {
20
- const e = r;
21
- "appMessage" in e && e.appMessage !== void 0 && i(e.appMessage);
22
- }
23
- return new c({
24
- name: `AippyAIError_${t}`,
25
- message: `${p.RUNTIME} Request failed with status ${t}`,
26
- cause: { status: t }
27
- });
28
- }
29
- function l(s) {
30
- return s.code === f || s.type === m;
31
- }
32
- function E() {
33
- if (!(typeof window > "u"))
34
- try {
35
- const s = window.webkit?.messageHandlers?.aippyListener;
36
- if (!s)
37
- return;
38
- s.postMessage({ command: "wallet.showRecharge" });
39
- } catch (s) {
40
- console.warn(
41
- "⚠️ [Container Message] Failed to request native recharge:",
42
- s
43
- );
44
- }
45
- }
46
- function d() {
47
- return async (s, r) => {
48
- const t = await u(r?.headers), e = await globalThis.fetch(s, { ...r, headers: t });
49
- if (!e.ok) {
50
- const a = await e.text().catch(() => null);
51
- let o = null;
52
- if (a)
53
- try {
54
- o = JSON.parse(a);
55
- } catch {
56
- o = { message: a };
57
- }
58
- throw g(e, o);
59
- }
60
- return e;
61
- };
62
- }
63
- export {
64
- d as c,
65
- g as n
66
- };