@eazo/sdk 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.
Files changed (87) hide show
  1. package/PROTOCOL.md +134 -0
  2. package/README.md +163 -0
  3. package/dist/index.d.ts +5 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/internal/auth-primitive/EazoAuthClient.d.ts +35 -0
  8. package/dist/internal/auth-primitive/EazoAuthClient.d.ts.map +1 -0
  9. package/dist/internal/auth-primitive/EazoAuthClient.js +107 -0
  10. package/dist/internal/auth-primitive/EazoAuthClient.js.map +1 -0
  11. package/dist/internal/auth-primitive/EazoAuthServer.d.ts +18 -0
  12. package/dist/internal/auth-primitive/EazoAuthServer.d.ts.map +1 -0
  13. package/dist/internal/auth-primitive/EazoAuthServer.js +37 -0
  14. package/dist/internal/auth-primitive/EazoAuthServer.js.map +1 -0
  15. package/dist/internal/auth-primitive/decrypt.d.ts +12 -0
  16. package/dist/internal/auth-primitive/decrypt.d.ts.map +1 -0
  17. package/dist/internal/auth-primitive/decrypt.js +89 -0
  18. package/dist/internal/auth-primitive/decrypt.js.map +1 -0
  19. package/dist/internal/auth-primitive/index.d.ts +5 -0
  20. package/dist/internal/auth-primitive/index.d.ts.map +1 -0
  21. package/dist/internal/auth-primitive/index.js +13 -0
  22. package/dist/internal/auth-primitive/index.js.map +1 -0
  23. package/dist/internal/auth-primitive/types.d.ts +61 -0
  24. package/dist/internal/auth-primitive/types.d.ts.map +1 -0
  25. package/dist/internal/auth-primitive/types.js +6 -0
  26. package/dist/internal/auth-primitive/types.js.map +1 -0
  27. package/dist/internal/bootstrap.d.ts +16 -0
  28. package/dist/internal/bootstrap.d.ts.map +1 -0
  29. package/dist/internal/bootstrap.js +81 -0
  30. package/dist/internal/bootstrap.js.map +1 -0
  31. package/dist/internal/bridge/client.d.ts +40 -0
  32. package/dist/internal/bridge/client.d.ts.map +1 -0
  33. package/dist/internal/bridge/client.js +160 -0
  34. package/dist/internal/bridge/client.js.map +1 -0
  35. package/dist/internal/bridge/protocol.d.ts +61 -0
  36. package/dist/internal/bridge/protocol.d.ts.map +1 -0
  37. package/dist/internal/bridge/protocol.js +38 -0
  38. package/dist/internal/bridge/protocol.js.map +1 -0
  39. package/dist/internal/bridge/transport.d.ts +19 -0
  40. package/dist/internal/bridge/transport.d.ts.map +1 -0
  41. package/dist/internal/bridge/transport.js +66 -0
  42. package/dist/internal/bridge/transport.js.map +1 -0
  43. package/dist/internal/capabilities/auth.d.ts +55 -0
  44. package/dist/internal/capabilities/auth.d.ts.map +1 -0
  45. package/dist/internal/capabilities/auth.js +361 -0
  46. package/dist/internal/capabilities/auth.js.map +1 -0
  47. package/dist/internal/capabilities/device.d.ts +11 -0
  48. package/dist/internal/capabilities/device.d.ts.map +1 -0
  49. package/dist/internal/capabilities/device.js +65 -0
  50. package/dist/internal/capabilities/device.js.map +1 -0
  51. package/dist/internal/env.d.ts +14 -0
  52. package/dist/internal/env.d.ts.map +1 -0
  53. package/dist/internal/env.js +28 -0
  54. package/dist/internal/env.js.map +1 -0
  55. package/dist/internal/login-ui/icons.d.ts +18 -0
  56. package/dist/internal/login-ui/icons.d.ts.map +1 -0
  57. package/dist/internal/login-ui/icons.js +62 -0
  58. package/dist/internal/login-ui/icons.js.map +1 -0
  59. package/dist/internal/login-ui/index.d.ts +3 -0
  60. package/dist/internal/login-ui/index.d.ts.map +1 -0
  61. package/dist/internal/login-ui/index.js +160 -0
  62. package/dist/internal/login-ui/index.js.map +1 -0
  63. package/dist/internal/login-ui/styles.d.ts +3 -0
  64. package/dist/internal/login-ui/styles.d.ts.map +1 -0
  65. package/dist/internal/login-ui/styles.js +282 -0
  66. package/dist/internal/login-ui/styles.js.map +1 -0
  67. package/dist/internal/store.d.ts +29 -0
  68. package/dist/internal/store.d.ts.map +1 -0
  69. package/dist/internal/store.js +82 -0
  70. package/dist/internal/store.js.map +1 -0
  71. package/dist/react.d.ts +24 -0
  72. package/dist/react.d.ts.map +1 -0
  73. package/dist/react.js +81 -0
  74. package/dist/react.js.map +1 -0
  75. package/dist/server.d.ts +21 -0
  76. package/dist/server.d.ts.map +1 -0
  77. package/dist/server.js +53 -0
  78. package/dist/server.js.map +1 -0
  79. package/dist/testing.d.ts +13 -0
  80. package/dist/testing.d.ts.map +1 -0
  81. package/dist/testing.js +38 -0
  82. package/dist/testing.js.map +1 -0
  83. package/dist/types.d.ts +33 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +7 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +71 -0
@@ -0,0 +1,55 @@
1
+ import type { SocialConnection } from "../auth-primitive";
2
+ import type { User } from "../../types";
3
+ type AuthListener = (user: User | null) => void;
4
+ interface AuthConfig {
5
+ publicKey?: string;
6
+ }
7
+ /** Internal: trigger the auth bootstrap without reading a getter. */
8
+ export declare function _bootstrapAuth(): Promise<void>;
9
+ /**
10
+ * Internal: called by the login UI / bridge event handler when the user
11
+ * dismisses the login flow. Rejects the pending login() promise, if any.
12
+ */
13
+ export declare function _cancelPendingLogin(reason: string): void;
14
+ export declare function __resetAuthCapability(): void;
15
+ export interface LoginOptions {
16
+ /** Milliseconds to wait for the user to complete the flow before rejecting. Default: 5 min. */
17
+ timeoutMs?: number;
18
+ }
19
+ export declare const auth: {
20
+ /** Set configuration (public key, overriding the NEXT_PUBLIC_EAZO_PUBLIC_KEY default). */
21
+ configure(config: AuthConfig): void;
22
+ readonly user: User | null;
23
+ readonly loading: boolean;
24
+ readonly authenticated: boolean;
25
+ onChange(listener: AuthListener): () => void;
26
+ getToken(): Promise<string | null>;
27
+ /** Web-only helper for request.ts: returns the raw session JSON for x-eazo-session. */
28
+ getSessionHeader(): Promise<string | null>;
29
+ loginWithSocial(provider: string): Promise<void>;
30
+ loginWithEmailPassword(email: string, password: string): Promise<void>;
31
+ loginWithEmailCode(email: string, code: string): Promise<void>;
32
+ sendEmailCode(email: string): Promise<void>;
33
+ fetchSocialConnections(): Promise<SocialConnection[]>;
34
+ logout(): Promise<void>;
35
+ /**
36
+ * Opens the login flow if needed and resolves with the current User.
37
+ *
38
+ * - Already authenticated → resolves immediately with `auth.user`.
39
+ * - Host supports `auth.requestLogin` → delegates to the native host UI
40
+ * and resolves when `auth.changed` reports `authenticated: true`.
41
+ * - Otherwise → shows the SDK's web LoginUI and resolves after a successful `loginWith*`.
42
+ *
43
+ * Rejects if the user cancels, the host returns an error, or the configured
44
+ * timeout elapses (default 5 minutes).
45
+ */
46
+ login(options?: LoginOptions): Promise<User>;
47
+ /** Imperative open of the SDK-owned login UI (web path). */
48
+ showLogin(): void;
49
+ /** Imperative close. Rejects any pending `login()` promise with "user cancelled". */
50
+ hideLogin(): void;
51
+ /** Reactive boolean: is the SDK-owned login UI currently open? */
52
+ readonly loginUIOpen: boolean;
53
+ };
54
+ export {};
55
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/internal/capabilities/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAYxC,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAEhD,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkJD,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAc5C;AAMD,MAAM,WAAW,YAAY;IAC3B,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,eAAO,MAAM,IAAI;IACf,0FAA0F;sBACxE,UAAU,GAAG,IAAI;mBAKvB,IAAI,GAAG,IAAI;sBAKR,OAAO;4BAKD,OAAO;uBAIT,YAAY,GAAG,MAAM,IAAI;gBAK1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBxC,uFAAuF;wBAC7D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;8BAiBhB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;kCAKlB,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;8BAK5C,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;yBAK/C,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;8BAIjB,OAAO,CAAC,gBAAgB,EAAE,CAAC;cAIrC,OAAO,CAAC,IAAI,CAAC;IAO7B;;;;;;;;;;OAUG;oBACkB,YAAY,GAAQ,OAAO,CAAC,IAAI,CAAC;IAsBtD,4DAA4D;iBAC/C,IAAI;IAIjB,qFAAqF;iBACxE,IAAI;IAIjB,kEAAkE;0BAC/C,OAAO;CAG3B,CAAC"}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.auth = void 0;
4
+ exports._bootstrapAuth = _bootstrapAuth;
5
+ exports._cancelPendingLogin = _cancelPendingLogin;
6
+ exports.__resetAuthCapability = __resetAuthCapability;
7
+ const auth_primitive_1 = require("../auth-primitive");
8
+ const protocol_1 = require("../bridge/protocol");
9
+ const bootstrap_1 = require("../bootstrap");
10
+ const store_1 = require("../store");
11
+ const SESSION_STORAGE_KEY = "eazo.session";
12
+ let authClient = null;
13
+ let authConfig = {};
14
+ const listeners = new Set();
15
+ function getAuthClient() {
16
+ if (authClient)
17
+ return authClient;
18
+ const publicKey = authConfig.publicKey ??
19
+ (typeof process !== "undefined" ? process.env.NEXT_PUBLIC_EAZO_PUBLIC_KEY : undefined);
20
+ if (!publicKey) {
21
+ throw new Error("@eazo/sdk: missing public key. Set NEXT_PUBLIC_EAZO_PUBLIC_KEY or call auth.configure({ publicKey }).");
22
+ }
23
+ authClient = new auth_primitive_1.EazoAuthClient({ publicKey });
24
+ return authClient;
25
+ }
26
+ function readLocalSession() {
27
+ if (typeof window === "undefined")
28
+ return null;
29
+ try {
30
+ const raw = window.localStorage.getItem(SESSION_STORAGE_KEY);
31
+ return raw ? JSON.parse(raw) : null;
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ function writeLocalSession(session) {
38
+ if (typeof window === "undefined")
39
+ return;
40
+ try {
41
+ if (session) {
42
+ window.localStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(session));
43
+ }
44
+ else {
45
+ window.localStorage.removeItem(SESSION_STORAGE_KEY);
46
+ }
47
+ }
48
+ catch {
49
+ /* storage unavailable */
50
+ }
51
+ }
52
+ function notifyListeners(user) {
53
+ for (const l of listeners)
54
+ l(user);
55
+ }
56
+ async function fetchWebUserProfile(session) {
57
+ // Profile endpoint is always app-local (the app runs requireAuth server-side).
58
+ // device.backendUrl / NEXT_PUBLIC_EAZO_API_URL points at the Eazo platform, not the app,
59
+ // so it must not be used here.
60
+ const res = await fetch("/api/user/profile", {
61
+ headers: { "x-eazo-session": JSON.stringify(session) },
62
+ });
63
+ if (!res.ok) {
64
+ throw new Error(`Failed to fetch user profile: ${res.status}`);
65
+ }
66
+ const payload = (await res.json());
67
+ // Accept both `{ ok: true, user: {...} }` (template convention) and a raw user object.
68
+ const userPayload = payload && typeof payload === "object" && "user" in payload && payload.user
69
+ ? payload.user
70
+ : payload;
71
+ return normalizeUser(userPayload);
72
+ }
73
+ function normalizeUser(raw) {
74
+ return {
75
+ id: String(raw.userId ?? raw.id ?? ""),
76
+ email: raw.email ?? null,
77
+ name: raw.nickname ?? raw.name ?? null,
78
+ avatarUrl: raw.avatarUrl ?? null,
79
+ };
80
+ }
81
+ let webSessionCache = null;
82
+ function storeCurrentWebSession() {
83
+ if (webSessionCache)
84
+ return webSessionCache;
85
+ webSessionCache = readLocalSession();
86
+ return webSessionCache;
87
+ }
88
+ async function bootstrapWeb() {
89
+ const session = storeCurrentWebSession();
90
+ if (!session) {
91
+ (0, store_1.setAuth)({ user: null, loading: false, authenticated: false });
92
+ notifyListeners(null);
93
+ return;
94
+ }
95
+ try {
96
+ const user = await fetchWebUserProfile(session);
97
+ (0, store_1.setAuth)({ user, loading: false, authenticated: true });
98
+ notifyListeners(user);
99
+ }
100
+ catch {
101
+ webSessionCache = null;
102
+ writeLocalSession(null);
103
+ (0, store_1.setAuth)({ user: null, loading: false, authenticated: false });
104
+ notifyListeners(null);
105
+ }
106
+ }
107
+ async function bootstrapFromHost() {
108
+ const hello = await (0, bootstrap_1.waitForBootstrap)();
109
+ if (!hello)
110
+ return false;
111
+ (0, store_1.setAuth)({
112
+ user: hello.session.user,
113
+ loading: false,
114
+ authenticated: hello.session.authenticated,
115
+ });
116
+ notifyListeners(hello.session.user);
117
+ const bridge = (0, bootstrap_1.getBridge)();
118
+ bridge?.on(protocol_1.AUTH_CHANGED_EVENT, (payload) => {
119
+ const data = payload;
120
+ (0, store_1.setAuth)({
121
+ user: data.user,
122
+ authenticated: data.authenticated,
123
+ loading: false,
124
+ });
125
+ notifyListeners(data.user);
126
+ if (data.authenticated && data.user && pendingLogin) {
127
+ resolvePendingLogin(data.user);
128
+ }
129
+ });
130
+ bridge?.on(protocol_1.AUTH_LOGIN_CANCELLED_EVENT, () => {
131
+ rejectPendingLogin(new protocol_1.BridgeErrorObject("DENIED", "user cancelled login"));
132
+ });
133
+ return true;
134
+ }
135
+ let bootstrapPromise = null;
136
+ function ensureBootstrap() {
137
+ if (bootstrapPromise)
138
+ return bootstrapPromise;
139
+ bootstrapPromise = (async () => {
140
+ const fromHost = await bootstrapFromHost();
141
+ if (!fromHost)
142
+ await bootstrapWeb();
143
+ })();
144
+ return bootstrapPromise;
145
+ }
146
+ /** Internal: trigger the auth bootstrap without reading a getter. */
147
+ function _bootstrapAuth() {
148
+ return ensureBootstrap();
149
+ }
150
+ /**
151
+ * Internal: called by the login UI / bridge event handler when the user
152
+ * dismisses the login flow. Rejects the pending login() promise, if any.
153
+ */
154
+ function _cancelPendingLogin(reason) {
155
+ rejectPendingLogin(new Error(reason));
156
+ (0, store_1.setLoginUI)({ open: false, submitting: false, error: null });
157
+ }
158
+ function __resetAuthCapability() {
159
+ bootstrapPromise = null;
160
+ webSessionCache = null;
161
+ listeners.clear();
162
+ authClient = null;
163
+ authConfig = {};
164
+ if (pendingLogin) {
165
+ pendingLogin.reject(new Error("SDK reset"));
166
+ pendingLogin = null;
167
+ }
168
+ if (pendingLoginTimer) {
169
+ clearTimeout(pendingLoginTimer);
170
+ pendingLoginTimer = null;
171
+ }
172
+ }
173
+ const DEFAULT_LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
174
+ let pendingLogin = null;
175
+ let pendingLoginTimer = null;
176
+ function resolvePendingLogin(user) {
177
+ if (!pendingLogin)
178
+ return;
179
+ pendingLogin.resolve(user);
180
+ pendingLogin = null;
181
+ if (pendingLoginTimer) {
182
+ clearTimeout(pendingLoginTimer);
183
+ pendingLoginTimer = null;
184
+ }
185
+ (0, store_1.setLoginUI)({ open: false, submitting: false, error: null, step: "providers" });
186
+ }
187
+ function rejectPendingLogin(err) {
188
+ if (!pendingLogin)
189
+ return;
190
+ pendingLogin.reject(err);
191
+ pendingLogin = null;
192
+ if (pendingLoginTimer) {
193
+ clearTimeout(pendingLoginTimer);
194
+ pendingLoginTimer = null;
195
+ }
196
+ }
197
+ function createPendingLogin(timeoutMs) {
198
+ let resolveFn;
199
+ let rejectFn;
200
+ const promise = new Promise((resolve, reject) => {
201
+ resolveFn = resolve;
202
+ rejectFn = reject;
203
+ });
204
+ const entry = { promise, resolve: resolveFn, reject: rejectFn };
205
+ pendingLoginTimer = setTimeout(() => {
206
+ rejectPendingLogin(new protocol_1.BridgeErrorObject("TIMEOUT", "Login timed out"));
207
+ }, timeoutMs);
208
+ return entry;
209
+ }
210
+ async function requestLoginViaBridge() {
211
+ const bridge = (0, bootstrap_1.getBridge)();
212
+ if (!bridge || !bridge.getStatus().ready)
213
+ return false;
214
+ try {
215
+ await bridge.request(protocol_1.AUTH_REQUEST_LOGIN);
216
+ return true;
217
+ }
218
+ catch (err) {
219
+ if (err instanceof protocol_1.BridgeErrorObject && (err.code === "NOT_SUPPORTED" || err.code === "TIMEOUT")) {
220
+ return false;
221
+ }
222
+ throw err;
223
+ }
224
+ }
225
+ exports.auth = {
226
+ /** Set configuration (public key, overriding the NEXT_PUBLIC_EAZO_PUBLIC_KEY default). */
227
+ configure(config) {
228
+ authConfig = { ...authConfig, ...config };
229
+ authClient = null;
230
+ },
231
+ get user() {
232
+ ensureBootstrap().catch(() => undefined);
233
+ return store_1.store.getSnapshot().auth.user;
234
+ },
235
+ get loading() {
236
+ ensureBootstrap().catch(() => undefined);
237
+ return store_1.store.getSnapshot().auth.loading;
238
+ },
239
+ get authenticated() {
240
+ return store_1.store.getSnapshot().auth.authenticated;
241
+ },
242
+ onChange(listener) {
243
+ listeners.add(listener);
244
+ return () => listeners.delete(listener);
245
+ },
246
+ async getToken() {
247
+ await ensureBootstrap();
248
+ const bridge = (0, bootstrap_1.getBridge)();
249
+ if (bridge?.getStatus().ready) {
250
+ try {
251
+ const result = await bridge.request("auth.getToken");
252
+ return result.token;
253
+ }
254
+ catch (err) {
255
+ if (err instanceof protocol_1.BridgeErrorObject && (err.code === "NOT_SUPPORTED" || err.code === "TIMEOUT")) {
256
+ /* fall through to web fallback */
257
+ }
258
+ else {
259
+ throw err;
260
+ }
261
+ }
262
+ }
263
+ const session = storeCurrentWebSession();
264
+ return session ? JSON.stringify(session) : null;
265
+ },
266
+ /** Web-only helper for request.ts: returns the raw session JSON for x-eazo-session. */
267
+ async getSessionHeader() {
268
+ const bridge = (0, bootstrap_1.getBridge)();
269
+ if (bridge?.getStatus().ready) {
270
+ try {
271
+ const result = await bridge.request("auth.getSession");
272
+ return result.session ? JSON.stringify(result.session) : null;
273
+ }
274
+ catch (err) {
275
+ if (!(err instanceof protocol_1.BridgeErrorObject))
276
+ throw err;
277
+ if (err.code !== "NOT_SUPPORTED" && err.code !== "TIMEOUT")
278
+ throw err;
279
+ }
280
+ }
281
+ const session = storeCurrentWebSession();
282
+ return session ? JSON.stringify(session) : null;
283
+ },
284
+ async loginWithSocial(provider) {
285
+ const session = await getAuthClient().loginWithSocial(provider);
286
+ await completeWebLogin(session);
287
+ },
288
+ async loginWithEmailPassword(email, password) {
289
+ const session = await getAuthClient().loginWithEmailPassword(email, password);
290
+ await completeWebLogin(session);
291
+ },
292
+ async loginWithEmailCode(email, code) {
293
+ const session = await getAuthClient().loginWithEmailCode(email, code);
294
+ await completeWebLogin(session);
295
+ },
296
+ sendEmailCode(email) {
297
+ return getAuthClient().sendEmailCode(email);
298
+ },
299
+ fetchSocialConnections() {
300
+ return getAuthClient().fetchSocialConnections();
301
+ },
302
+ async logout() {
303
+ webSessionCache = null;
304
+ writeLocalSession(null);
305
+ (0, store_1.setAuth)({ user: null, loading: false, authenticated: false });
306
+ notifyListeners(null);
307
+ },
308
+ /**
309
+ * Opens the login flow if needed and resolves with the current User.
310
+ *
311
+ * - Already authenticated → resolves immediately with `auth.user`.
312
+ * - Host supports `auth.requestLogin` → delegates to the native host UI
313
+ * and resolves when `auth.changed` reports `authenticated: true`.
314
+ * - Otherwise → shows the SDK's web LoginUI and resolves after a successful `loginWith*`.
315
+ *
316
+ * Rejects if the user cancels, the host returns an error, or the configured
317
+ * timeout elapses (default 5 minutes).
318
+ */
319
+ async login(options = {}) {
320
+ await ensureBootstrap();
321
+ const current = store_1.store.getSnapshot().auth.user;
322
+ if (current)
323
+ return current;
324
+ if (pendingLogin)
325
+ return pendingLogin.promise;
326
+ const entry = createPendingLogin(options.timeoutMs ?? DEFAULT_LOGIN_TIMEOUT_MS);
327
+ pendingLogin = entry;
328
+ try {
329
+ const nativeStarted = await requestLoginViaBridge();
330
+ if (!nativeStarted) {
331
+ (0, store_1.setLoginUI)({ open: true, step: "providers", error: null, submitting: false });
332
+ }
333
+ }
334
+ catch (err) {
335
+ rejectPendingLogin(err instanceof Error ? err : new Error(String(err)));
336
+ }
337
+ return entry.promise;
338
+ },
339
+ /** Imperative open of the SDK-owned login UI (web path). */
340
+ showLogin() {
341
+ (0, store_1.setLoginUI)({ open: true, step: "providers", error: null, submitting: false });
342
+ },
343
+ /** Imperative close. Rejects any pending `login()` promise with "user cancelled". */
344
+ hideLogin() {
345
+ _cancelPendingLogin("user closed login UI");
346
+ },
347
+ /** Reactive boolean: is the SDK-owned login UI currently open? */
348
+ get loginUIOpen() {
349
+ return store_1.store.getSnapshot().loginUI.open;
350
+ },
351
+ };
352
+ async function completeWebLogin(session) {
353
+ webSessionCache = session;
354
+ writeLocalSession(session);
355
+ const user = await fetchWebUserProfile(session);
356
+ (0, store_1.setAuth)({ user, loading: false, authenticated: true });
357
+ notifyListeners(user);
358
+ if (pendingLogin)
359
+ resolvePendingLogin(user);
360
+ }
361
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/internal/capabilities/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DeviceContext } from "../../types";
2
+ export declare function __resetDeviceCapability(): void;
3
+ export declare function _bootstrapDevice(): Promise<void>;
4
+ export declare const device: {
5
+ readonly platform: DeviceContext["platform"];
6
+ readonly locale: string;
7
+ readonly safeArea: DeviceContext["safeArea"];
8
+ readonly backendUrl: string;
9
+ getContext(): DeviceContext;
10
+ };
11
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/internal/capabilities/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAmBD,eAAO,MAAM,MAAM;uBACD,aAAa,CAAC,UAAU,CAAC;qBAK3B,MAAM;uBAKJ,aAAa,CAAC,UAAU,CAAC;yBAKvB,MAAM;kBAKV,aAAa;CAI5B,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.device = void 0;
4
+ exports.__resetDeviceCapability = __resetDeviceCapability;
5
+ exports._bootstrapDevice = _bootstrapDevice;
6
+ const bootstrap_1 = require("../bootstrap");
7
+ const store_1 = require("../store");
8
+ function webDefaults() {
9
+ const locale = typeof navigator !== "undefined" && navigator.language ? navigator.language : "en-US";
10
+ const backendUrl = (typeof process !== "undefined" ? process.env.NEXT_PUBLIC_EAZO_API_URL : "") ?? "";
11
+ return {
12
+ platform: "web",
13
+ locale,
14
+ safeArea: { top: 0, bottom: 0 },
15
+ backendUrl,
16
+ };
17
+ }
18
+ let bootstrapPromise = null;
19
+ function __resetDeviceCapability() {
20
+ bootstrapPromise = null;
21
+ }
22
+ function _bootstrapDevice() {
23
+ return ensureBootstrap();
24
+ }
25
+ function ensureBootstrap() {
26
+ if (bootstrapPromise)
27
+ return bootstrapPromise;
28
+ bootstrapPromise = (async () => {
29
+ (0, store_1.setDevice)(webDefaults());
30
+ const hello = await (0, bootstrap_1.waitForBootstrap)();
31
+ if (!hello)
32
+ return;
33
+ (0, store_1.setDevice)(hello.device);
34
+ const bridge = (0, bootstrap_1.getBridge)();
35
+ bridge?.on("device.safeArea.changed", (payload) => {
36
+ const patch = payload;
37
+ const current = store_1.store.getSnapshot().device.safeArea;
38
+ (0, store_1.setDevice)({ safeArea: { ...current, ...patch } });
39
+ });
40
+ })();
41
+ return bootstrapPromise;
42
+ }
43
+ exports.device = {
44
+ get platform() {
45
+ ensureBootstrap().catch(() => undefined);
46
+ return store_1.store.getSnapshot().device.platform;
47
+ },
48
+ get locale() {
49
+ ensureBootstrap().catch(() => undefined);
50
+ return store_1.store.getSnapshot().device.locale;
51
+ },
52
+ get safeArea() {
53
+ ensureBootstrap().catch(() => undefined);
54
+ return store_1.store.getSnapshot().device.safeArea;
55
+ },
56
+ get backendUrl() {
57
+ ensureBootstrap().catch(() => undefined);
58
+ return store_1.store.getSnapshot().device.backendUrl;
59
+ },
60
+ getContext() {
61
+ ensureBootstrap().catch(() => undefined);
62
+ return store_1.store.getSnapshot().device;
63
+ },
64
+ };
65
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/internal/capabilities/device.ts"],"names":[],"mappings":";;;AAmBA,0DAEC;AAED,4CAEC;AAxBD,4CAA2D;AAC3D,oCAA4C;AAE5C,SAAS,WAAW;IAClB,MAAM,MAAM,GACV,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,UAAU,GACd,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACrF,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,MAAM;QACN,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAC/B,UAAU;KACX,CAAC;AACJ,CAAC;AAED,IAAI,gBAAgB,GAAyB,IAAI,CAAC;AAElD,SAAgB,uBAAuB;IACrC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAC9C,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAA,iBAAS,EAAC,WAAW,EAAE,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAgB,GAAE,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAA,iBAAS,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;QAC3B,MAAM,EAAE,EAAE,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,OAA6C,CAAC;YAC5D,MAAM,OAAO,GAAG,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD,IAAA,iBAAS,EAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,IAAI,QAAQ;QACV,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,IAAI,MAAM;QACR,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,QAAQ;QACV,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU;QACZ,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/C,CAAC;IAED,UAAU;QACR,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,aAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;IACpC,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type Host = "eazoMobile" | "embeddedIframe" | "web";
2
+ /**
3
+ * Detects the runtime host. Used to decide whether to open the bridge transport.
4
+ *
5
+ * - RN WebView: window.ReactNativeWebView is injected by the native shell
6
+ * - iframe embed: window.parent is a different window (same-origin or cross-origin)
7
+ * - plain browser: neither of the above
8
+ *
9
+ * The return value is informational only. Capabilities never branch on it directly;
10
+ * they branch on whether the bridge completed handshake.
11
+ */
12
+ export declare function getHost(): Host;
13
+ export declare function isBrowser(): boolean;
14
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/internal/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,gBAAgB,GAAG,KAAK,CAAC;AAE3D;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAO9B;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHost = getHost;
4
+ exports.isBrowser = isBrowser;
5
+ /**
6
+ * Detects the runtime host. Used to decide whether to open the bridge transport.
7
+ *
8
+ * - RN WebView: window.ReactNativeWebView is injected by the native shell
9
+ * - iframe embed: window.parent is a different window (same-origin or cross-origin)
10
+ * - plain browser: neither of the above
11
+ *
12
+ * The return value is informational only. Capabilities never branch on it directly;
13
+ * they branch on whether the bridge completed handshake.
14
+ */
15
+ function getHost() {
16
+ if (typeof window === "undefined")
17
+ return "web";
18
+ if (window.ReactNativeWebView) {
19
+ return "eazoMobile";
20
+ }
21
+ if (window.parent && window.parent !== window)
22
+ return "embeddedIframe";
23
+ return "web";
24
+ }
25
+ function isBrowser() {
26
+ return typeof window !== "undefined";
27
+ }
28
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/internal/env.ts"],"names":[],"mappings":";;AAYA,0BAOC;AAED,8BAEC;AArBD;;;;;;;;;GASG;AACH,SAAgB,OAAO;IACrB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,IAAK,MAAsD,CAAC,kBAAkB,EAAE,CAAC;QAC/E,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,gBAAgB,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ type IconProps = {
3
+ size?: number;
4
+ };
5
+ export declare function GoogleIcon({ size }: IconProps): React.ReactElement;
6
+ export declare function TwitterXIcon({ size }: IconProps): React.ReactElement;
7
+ export declare function AppleIcon({ size }: IconProps): React.ReactElement;
8
+ export declare function GithubIcon({ size }: IconProps): React.ReactElement;
9
+ export declare function GenericProviderIcon({ size }: IconProps): React.ReactElement;
10
+ export declare function CloseIcon({ size }: IconProps): React.ReactElement;
11
+ export declare function MailIcon({ size }: IconProps): React.ReactElement;
12
+ export declare function KeyIcon({ size }: IconProps): React.ReactElement;
13
+ export declare function EyeIcon({ size }: IconProps): React.ReactElement;
14
+ export declare function EyeOffIcon({ size }: IconProps): React.ReactElement;
15
+ export declare function ArrowLeftIcon({ size }: IconProps): React.ReactElement;
16
+ export declare function pickProviderIcon(provider: string): React.ReactElement;
17
+ export {};
18
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/internal/login-ui/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAInC,wBAAgB,UAAU,CAAC,EAAE,IAAkB,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAShF;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAkB,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAMlF;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAkB,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAM/E;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAkB,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAMhF;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAkB,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAOzF;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAMtE;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAOrE;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAMpE;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAOpE;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAOvE;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAS,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAM1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,YAAY,CAOrE"}