@terreno/rtk 0.9.2 → 0.10.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.
@@ -1,7 +1,8 @@
1
1
  import { beforeEach, describe, expect, it } from "bun:test";
2
+ import AsyncStorage from "@react-native-async-storage/async-storage";
2
3
  import { configureStore } from "@reduxjs/toolkit";
3
4
  import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
4
- import { generateAuthSlice, selectCurrentUserId, selectIsAuthenticating, } from "./authSlice";
5
+ import { generateAuthSlice, generateProfileEndpoints, getAuthToken, selectCurrentUserId, selectIsAuthenticating, selectLastTokenRefreshTimestamp, useSelectCurrentUserId, useSelectIsAuthenticating, } from "./authSlice";
5
6
  // Create a real RTK Query API with the endpoints that generateAuthSlice expects
6
7
  const api = createApi({
7
8
  baseQuery: fetchBaseQuery({ baseUrl: "/" }),
@@ -37,6 +38,10 @@ const createTestStore = () => {
37
38
  }),
38
39
  };
39
40
  };
41
+ const flushAsyncListeners = async () => {
42
+ await Promise.resolve();
43
+ await new Promise((resolve) => setTimeout(resolve, 0));
44
+ };
40
45
  describe("generateAuthSlice", () => {
41
46
  let store;
42
47
  let authSlice;
@@ -253,6 +258,11 @@ describe("selectors", () => {
253
258
  // biome-ignore lint/suspicious/noExplicitAny: Test mock state
254
259
  expect(selectIsAuthenticating({})).toBe(false);
255
260
  });
261
+ it("selectLastTokenRefreshTimestamp returns timestamp", () => {
262
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock state
263
+ const state = { auth: { lastTokenRefreshTimestamp: 12345 } };
264
+ expect(selectLastTokenRefreshTimestamp(state)).toBe(12345);
265
+ });
256
266
  });
257
267
  describe("EmailLoginRequest type", () => {
258
268
  it("accepts email-based login", () => {
@@ -266,4 +276,182 @@ describe("EmailLoginRequest type", () => {
266
276
  expect(request.password).toBe("pass");
267
277
  });
268
278
  });
279
+ describe("generateProfileEndpoints", () => {
280
+ it("builds endpoint query payloads", () => {
281
+ const builder = {
282
+ // biome-ignore lint/suspicious/noExplicitAny: Testing generated endpoint configs
283
+ mutation: (config) => config,
284
+ };
285
+ // biome-ignore lint/suspicious/noExplicitAny: Lightweight fake builder for unit test
286
+ const endpoints = generateProfileEndpoints(builder, "todos");
287
+ const createEmailUserQuery = endpoints.createEmailUser.query;
288
+ const emailLoginQuery = endpoints.emailLogin.query;
289
+ const emailSignUpQuery = endpoints.emailSignUp.query;
290
+ const googleLoginQuery = endpoints.googleLogin.query;
291
+ const resetPasswordQuery = endpoints.resetPassword.query;
292
+ expect(createEmailUserQuery).toBeDefined();
293
+ expect(emailLoginQuery).toBeDefined();
294
+ expect(emailSignUpQuery).toBeDefined();
295
+ expect(googleLoginQuery).toBeDefined();
296
+ expect(resetPasswordQuery).toBeDefined();
297
+ if (!createEmailUserQuery ||
298
+ !emailLoginQuery ||
299
+ !emailSignUpQuery ||
300
+ !googleLoginQuery ||
301
+ !resetPasswordQuery) {
302
+ throw new Error("Expected all generated profile endpoint queries to be defined");
303
+ }
304
+ expect(endpoints.createEmailUser.invalidatesTags).toEqual(["todos", "conversations"]);
305
+ expect(createEmailUserQuery({
306
+ email: "new@example.com",
307
+ password: "secret",
308
+ role: "admin",
309
+ })).toEqual({
310
+ body: { email: "new@example.com", password: "secret", role: "admin" },
311
+ method: "POST",
312
+ url: "auth/signup",
313
+ });
314
+ expect(endpoints.emailLogin.extraOptions).toEqual({ maxRetries: 0 });
315
+ expect(emailLoginQuery({ email: "a@example.com", password: "pw" })).toEqual({
316
+ body: { email: "a@example.com", password: "pw", username: undefined },
317
+ method: "POST",
318
+ url: "auth/login",
319
+ });
320
+ expect(emailSignUpQuery({
321
+ email: "signup@example.com",
322
+ name: "New User",
323
+ password: "pw",
324
+ })).toEqual({
325
+ body: { email: "signup@example.com", name: "New User", password: "pw" },
326
+ method: "POST",
327
+ url: "auth/signup",
328
+ });
329
+ expect(googleLoginQuery({ idToken: "id-token" })).toEqual({
330
+ body: { idToken: "id-token" },
331
+ method: "POST",
332
+ url: "/auth/google",
333
+ });
334
+ expect(resetPasswordQuery({
335
+ _id: "u-1",
336
+ email: "user@example.com",
337
+ newPassword: "new-secret",
338
+ oldPassword: "old-secret",
339
+ password: "current-secret",
340
+ })).toEqual({
341
+ body: {
342
+ _id: "u-1",
343
+ email: "user@example.com",
344
+ newPassword: "new-secret",
345
+ oldPassword: "old-secret",
346
+ password: "current-secret",
347
+ },
348
+ method: "POST",
349
+ url: "/resetPassword",
350
+ });
351
+ });
352
+ });
353
+ describe("listener middleware side effects", () => {
354
+ it("stores tokens in AsyncStorage on web login when window exists", async () => {
355
+ const { store } = createTestStore();
356
+ const setItemCalls = [];
357
+ const originalSetItem = AsyncStorage.setItem;
358
+ const globalWithWindow = globalThis;
359
+ const originalWindow = globalWithWindow.window;
360
+ AsyncStorage.setItem = async (key, value) => {
361
+ setItemCalls.push([key, value]);
362
+ };
363
+ globalWithWindow.window = {};
364
+ try {
365
+ store.dispatch({
366
+ meta: { arg: { endpointName: "emailLogin", type: "mutation" }, requestId: "listener-login-1" },
367
+ payload: { refreshToken: "refresh-token", token: "auth-token", userId: "user-123" },
368
+ type: "terreno-rtk/executeMutation/fulfilled",
369
+ });
370
+ await flushAsyncListeners();
371
+ expect(setItemCalls).toEqual([
372
+ ["AUTH_TOKEN", "auth-token"],
373
+ ["REFRESH_TOKEN", "refresh-token"],
374
+ ]);
375
+ expect(store.getState().auth.userId).toBe("user-123");
376
+ }
377
+ finally {
378
+ AsyncStorage.setItem = originalSetItem;
379
+ if (typeof originalWindow === "undefined") {
380
+ delete globalWithWindow.window;
381
+ }
382
+ else {
383
+ globalWithWindow.window = originalWindow;
384
+ }
385
+ }
386
+ });
387
+ it("removes tokens from AsyncStorage on web logout when window exists", async () => {
388
+ const { store, authSlice } = createTestStore();
389
+ const removeItemCalls = [];
390
+ const originalRemoveItem = AsyncStorage.removeItem;
391
+ const globalWithWindow = globalThis;
392
+ const originalWindow = globalWithWindow.window;
393
+ AsyncStorage.removeItem = async (key) => {
394
+ removeItemCalls.push(key);
395
+ };
396
+ globalWithWindow.window = {};
397
+ try {
398
+ store.dispatch(authSlice.actions.logout());
399
+ await flushAsyncListeners();
400
+ expect(removeItemCalls).toEqual(["AUTH_TOKEN", "REFRESH_TOKEN"]);
401
+ }
402
+ finally {
403
+ AsyncStorage.removeItem = originalRemoveItem;
404
+ if (typeof originalWindow === "undefined") {
405
+ delete globalWithWindow.window;
406
+ }
407
+ else {
408
+ globalWithWindow.window = originalWindow;
409
+ }
410
+ }
411
+ });
412
+ });
413
+ describe("hook wrappers", () => {
414
+ it("throws when hook selectors are called outside React render", () => {
415
+ expect(() => useSelectCurrentUserId()).toThrow();
416
+ expect(() => useSelectIsAuthenticating()).toThrow();
417
+ });
418
+ });
419
+ describe("getAuthToken", () => {
420
+ it("reads AUTH_TOKEN from AsyncStorage when window exists", async () => {
421
+ const originalGetItem = AsyncStorage.getItem;
422
+ const globalWithWindow = globalThis;
423
+ const originalWindow = globalWithWindow.window;
424
+ AsyncStorage.getItem = async (key) => {
425
+ return key === "AUTH_TOKEN" ? "stored-auth-token" : null;
426
+ };
427
+ globalWithWindow.window = {};
428
+ try {
429
+ const token = await getAuthToken();
430
+ expect(token).toBe("stored-auth-token");
431
+ }
432
+ finally {
433
+ AsyncStorage.getItem = originalGetItem;
434
+ if (typeof originalWindow === "undefined") {
435
+ delete globalWithWindow.window;
436
+ }
437
+ else {
438
+ globalWithWindow.window = originalWindow;
439
+ }
440
+ }
441
+ });
442
+ it("returns null when window is unavailable in SSR context", async () => {
443
+ const globalWithWindow = globalThis;
444
+ const originalWindow = globalWithWindow.window;
445
+ delete globalWithWindow.window;
446
+ try {
447
+ const token = await getAuthToken();
448
+ expect(token).toBeNull();
449
+ }
450
+ finally {
451
+ if (typeof originalWindow !== "undefined") {
452
+ globalWithWindow.window = originalWindow;
453
+ }
454
+ }
455
+ });
456
+ });
269
457
  //# sourceMappingURL=authSlice.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authSlice.test.js","sourceRoot":"","sources":["../src/authSlice.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authSlice.test.js","sourceRoot":"","sources":["../src/authSlice.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { beforeEach, describe, expect, it, mock } from "bun:test";
2
+ import { configureStore } from "@reduxjs/toolkit";
2
3
  import { generateBetterAuthSlice, selectBetterAuthError, selectBetterAuthIsAuthenticated, selectBetterAuthIsLoading, selectBetterAuthUser, selectBetterAuthUserId, } from "./betterAuthSlice";
3
4
  // Mock Better Auth client
4
5
  const createMockAuthClient = () => ({
@@ -171,6 +172,88 @@ describe("generateBetterAuthSlice", () => {
171
172
  expect(dispatchedActions.length).toBeGreaterThanOrEqual(2);
172
173
  expect(dispatchedActions[0].type).toBe("betterAuth/setLoading");
173
174
  });
175
+ it("syncSession clears state when no user session is returned", async () => {
176
+ mockAuthClient.getSession = mock(() => Promise.resolve({
177
+ data: {
178
+ session: null,
179
+ user: null,
180
+ },
181
+ }));
182
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
183
+ const betterAuthSlice = generateBetterAuthSlice({ authClient: mockAuthClient });
184
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock for dispatched actions
185
+ const dispatchedActions = [];
186
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock dispatch function
187
+ const mockDispatch = (action) => {
188
+ dispatchedActions.push(action);
189
+ };
190
+ await betterAuthSlice.syncSession(mockDispatch);
191
+ expect(dispatchedActions.map((action) => action.type)).toEqual([
192
+ "betterAuth/setLoading",
193
+ "betterAuth/clearSession",
194
+ ]);
195
+ });
196
+ it("syncSession dispatches error and clearSession when getSession throws", async () => {
197
+ mockAuthClient.getSession = mock(() => Promise.reject(new Error("network error")));
198
+ const originalConsoleError = console.error;
199
+ console.error = mock(() => { });
200
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
201
+ const betterAuthSlice = generateBetterAuthSlice({ authClient: mockAuthClient });
202
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock for dispatched actions
203
+ const dispatchedActions = [];
204
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock dispatch function
205
+ const mockDispatch = (action) => {
206
+ dispatchedActions.push(action);
207
+ };
208
+ await betterAuthSlice.syncSession(mockDispatch);
209
+ expect(dispatchedActions.map((action) => action.type)).toEqual([
210
+ "betterAuth/setLoading",
211
+ "betterAuth/setError",
212
+ "betterAuth/clearSession",
213
+ ]);
214
+ console.error = originalConsoleError;
215
+ });
216
+ it("logout middleware calls signOut for slice logout action", async () => {
217
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
218
+ const betterAuthSlice = generateBetterAuthSlice({ authClient: mockAuthClient });
219
+ const store = configureStore({
220
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(...betterAuthSlice.middleware),
221
+ reducer: {
222
+ betterAuth: betterAuthSlice.reducer,
223
+ },
224
+ });
225
+ store.dispatch(betterAuthSlice.actions.logout());
226
+ await Promise.resolve();
227
+ expect(mockAuthClient.signOut).toHaveBeenCalledTimes(1);
228
+ });
229
+ it("global auth/logout action signs out and clears session", async () => {
230
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
231
+ const betterAuthSlice = generateBetterAuthSlice({ authClient: mockAuthClient });
232
+ const store = configureStore({
233
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(...betterAuthSlice.middleware),
234
+ reducer: {
235
+ betterAuth: betterAuthSlice.reducer,
236
+ },
237
+ });
238
+ store.dispatch(betterAuthSlice.actions.setSession({
239
+ user: {
240
+ createdAt: new Date(),
241
+ email: "test@example.com",
242
+ emailVerified: true,
243
+ id: "user-123",
244
+ image: null,
245
+ name: "Test User",
246
+ updatedAt: new Date(),
247
+ },
248
+ userId: "user-123",
249
+ }));
250
+ expect(store.getState().betterAuth.isAuthenticated).toBe(true);
251
+ store.dispatch({ type: "auth/logout" });
252
+ await Promise.resolve();
253
+ expect(mockAuthClient.signOut).toHaveBeenCalledTimes(1);
254
+ expect(store.getState().betterAuth.isAuthenticated).toBe(false);
255
+ expect(store.getState().betterAuth.userId).toBeNull();
256
+ });
174
257
  });
175
258
  describe("Better Auth selectors", () => {
176
259
  // biome-ignore lint/suspicious/noExplicitAny: Test mock state factory
@@ -1 +1 @@
1
- {"version":3,"file":"betterAuthSlice.test.js","sourceRoot":"","sources":["../src/betterAuthSlice.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"betterAuthSlice.test.js","sourceRoot":"","sources":["../src/betterAuthSlice.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.d.ts","sourceRoot":"","sources":["../src/constants.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,144 @@
1
+ import { afterEach, beforeEach, describe, expect, it, mock } from "bun:test";
2
+ const loadConstantsModule = async ({ apiUrl, constantsMock, isDev = false, }) => {
3
+ const hasApiUrl = "EXPO_PUBLIC_API_URL" in process.env;
4
+ const previousApiUrl = process.env.EXPO_PUBLIC_API_URL;
5
+ const previousDev = globalThis.__DEV__;
6
+ if (apiUrl) {
7
+ process.env.EXPO_PUBLIC_API_URL = apiUrl;
8
+ }
9
+ else {
10
+ delete process.env.EXPO_PUBLIC_API_URL;
11
+ }
12
+ globalThis.__DEV__ = isDev;
13
+ mock.module("expo-constants", () => ({
14
+ default: constantsMock,
15
+ }));
16
+ const testCaseId = `${Date.now()}-${Math.random()}`;
17
+ const module = (await import(`./constants?testCase=${testCaseId}`));
18
+ if (hasApiUrl) {
19
+ process.env.EXPO_PUBLIC_API_URL = previousApiUrl;
20
+ }
21
+ else {
22
+ delete process.env.EXPO_PUBLIC_API_URL;
23
+ }
24
+ if (typeof previousDev === "undefined") {
25
+ delete globalThis.__DEV__;
26
+ }
27
+ else {
28
+ globalThis.__DEV__ = previousDev;
29
+ }
30
+ return module;
31
+ };
32
+ describe("constants", () => {
33
+ const originalDebug = console.debug;
34
+ const originalError = console.error;
35
+ beforeEach(() => {
36
+ console.debug = mock(() => { });
37
+ console.error = mock(() => { });
38
+ });
39
+ afterEach(() => {
40
+ console.debug = originalDebug;
41
+ console.error = originalError;
42
+ });
43
+ it("uses EXPO_PUBLIC_API_URL override and enables debug logs", async () => {
44
+ const constants = await loadConstantsModule({
45
+ apiUrl: "https://api.example.com",
46
+ constantsMock: {
47
+ expoConfig: {
48
+ extra: {
49
+ APP_ENV: "production",
50
+ AUTH_DEBUG: "true",
51
+ WEBSOCKETS_DEBUG: "true",
52
+ },
53
+ },
54
+ },
55
+ isDev: false,
56
+ });
57
+ expect(constants.baseUrl).toBe("https://api.example.com");
58
+ expect(constants.baseWebsocketsUrl).toBe("https://ws.example.com/");
59
+ expect(constants.baseTasksUrl).toBe("https://tasks.example.com/tasks");
60
+ expect(constants.AUTH_DEBUG).toBe(true);
61
+ constants.logAuth("auth message");
62
+ constants.logSocket(undefined, "socket message");
63
+ expect(console.debug).toHaveBeenCalledWith("auth message");
64
+ expect(console.debug).toHaveBeenCalledWith("[websocket]", "socket message");
65
+ });
66
+ it("resolves dev hostUri URLs when __DEV__ is true", async () => {
67
+ const constants = await loadConstantsModule({
68
+ constantsMock: {
69
+ expoConfig: {
70
+ extra: {},
71
+ hostUri: "10.0.0.12:8081",
72
+ },
73
+ },
74
+ isDev: true,
75
+ });
76
+ expect(constants.baseUrl).toBe("http://10.0.0.12:4000");
77
+ expect(constants.baseWebsocketsUrl).toBe("ws://10.0.0.12:4000/");
78
+ expect(constants.baseTasksUrl).toBe("http://10.0.0.12:4000/tasks");
79
+ });
80
+ it("resolves dev experienceUrl URLs when hostUri is unavailable", async () => {
81
+ const constants = await loadConstantsModule({
82
+ constantsMock: {
83
+ experienceUrl: "exp://192.168.1.20:19000",
84
+ expoConfig: {
85
+ extra: {},
86
+ },
87
+ },
88
+ isDev: true,
89
+ });
90
+ expect(constants.baseUrl).toBe("http://192.168.1.20:4000");
91
+ expect(constants.baseWebsocketsUrl).toBe("ws://192.168.1.20:4000/");
92
+ expect(constants.baseTasksUrl).toBe("http://192.168.1.20:4000/tasks");
93
+ });
94
+ it("uses BASE_URL outside dev mode and allows user websocket debug flag", async () => {
95
+ const constants = await loadConstantsModule({
96
+ constantsMock: {
97
+ expoConfig: {
98
+ extra: {
99
+ BASE_URL: "https://api.prod.com",
100
+ WEBSOCKETS_DEBUG: "false",
101
+ },
102
+ },
103
+ },
104
+ isDev: false,
105
+ });
106
+ expect(constants.baseUrl).toBe("https://api.prod.com");
107
+ expect(constants.baseWebsocketsUrl).toBe("https://ws.prod.com/");
108
+ expect(constants.baseTasksUrl).toBe("https://tasks.prod.com/tasks");
109
+ constants.logSocket({ featureFlags: { debugWebsockets: { enabled: true } } }, "enabled");
110
+ expect(console.debug).toHaveBeenCalledWith("[websocket]", "enabled");
111
+ });
112
+ it("falls back to non-dev hostUri when BASE_URL is missing", async () => {
113
+ const constants = await loadConstantsModule({
114
+ constantsMock: {
115
+ expoConfig: {
116
+ extra: {},
117
+ hostUri: "172.16.0.3:8081",
118
+ },
119
+ },
120
+ isDev: false,
121
+ });
122
+ expect(constants.baseUrl).toBe("http://172.16.0.3:4000");
123
+ expect(constants.baseWebsocketsUrl).toBe("ws://172.16.0.3:4000/");
124
+ expect(constants.baseTasksUrl).toBe("http://172.16.0.3:4000/tasks");
125
+ });
126
+ it("warns for exp.direct tunnels and falls back to localhost", async () => {
127
+ const constants = await loadConstantsModule({
128
+ constantsMock: {
129
+ expoConfig: {
130
+ extra: {},
131
+ },
132
+ expoGoConfig: {
133
+ debuggerHost: "abc.exp.direct:80",
134
+ },
135
+ },
136
+ isDev: false,
137
+ });
138
+ expect(console.error).toHaveBeenCalledWith("Expo Tunnel is not currently supported for connecting to the API, please use LAN or Local mode.");
139
+ expect(constants.baseUrl).toBe("http://localhost:4000");
140
+ expect(constants.baseWebsocketsUrl).toBe("ws://localhost:4000/");
141
+ expect(constants.baseTasksUrl).toBe("http://localhost:4000/tasks");
142
+ });
143
+ });
144
+ //# sourceMappingURL=constants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../src/constants.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "@better-auth/expo": "^1.2.8",
4
4
  "@react-native-async-storage/async-storage": "2.2.0",
5
5
  "@reduxjs/toolkit": "^2.11.1",
6
- "@terreno/ui": "0.9.2",
6
+ "@terreno/ui": "0.10.0",
7
7
  "async-mutex": "^0.5.0",
8
8
  "axios": "^1.13.2",
9
9
  "axios-retry": "^4.5.0",
@@ -50,6 +50,9 @@
50
50
  "peerDependencies": {
51
51
  "react": "19.1.0"
52
52
  },
53
+ "publishConfig": {
54
+ "access": "public"
55
+ },
53
56
  "scripts": {
54
57
  "compile": "tsc",
55
58
  "compile:watch": "tsc -w",
@@ -61,5 +64,5 @@
61
64
  "test:ci": "bun test"
62
65
  },
63
66
  "types": "dist/index.d.ts",
64
- "version": "0.9.2"
67
+ "version": "0.10.0"
65
68
  }
@@ -1,12 +1,18 @@
1
1
  import {beforeEach, describe, expect, it} from "bun:test";
2
+ import AsyncStorage from "@react-native-async-storage/async-storage";
2
3
  import {configureStore} from "@reduxjs/toolkit";
3
4
  import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react";
4
5
 
5
6
  import {
6
7
  type EmailLoginRequest,
7
8
  generateAuthSlice,
9
+ generateProfileEndpoints,
10
+ getAuthToken,
8
11
  selectCurrentUserId,
9
12
  selectIsAuthenticating,
13
+ selectLastTokenRefreshTimestamp,
14
+ useSelectCurrentUserId,
15
+ useSelectIsAuthenticating,
10
16
  } from "./authSlice";
11
17
 
12
18
  // Create a real RTK Query API with the endpoints that generateAuthSlice expects
@@ -49,6 +55,11 @@ const createTestStore = () => {
49
55
  };
50
56
  };
51
57
 
58
+ const flushAsyncListeners = async (): Promise<void> => {
59
+ await Promise.resolve();
60
+ await new Promise((resolve) => setTimeout(resolve, 0));
61
+ };
62
+
52
63
  describe("generateAuthSlice", () => {
53
64
  let store: ReturnType<typeof createTestStore>["store"];
54
65
  let authSlice: ReturnType<typeof createTestStore>["authSlice"];
@@ -289,6 +300,12 @@ describe("selectors", () => {
289
300
  // biome-ignore lint/suspicious/noExplicitAny: Test mock state
290
301
  expect(selectIsAuthenticating({} as any)).toBe(false);
291
302
  });
303
+
304
+ it("selectLastTokenRefreshTimestamp returns timestamp", () => {
305
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock state
306
+ const state = {auth: {lastTokenRefreshTimestamp: 12345}} as any;
307
+ expect(selectLastTokenRefreshTimestamp(state)).toBe(12345);
308
+ });
292
309
  });
293
310
 
294
311
  describe("EmailLoginRequest type", () => {
@@ -304,3 +321,205 @@ describe("EmailLoginRequest type", () => {
304
321
  expect(request.password).toBe("pass");
305
322
  });
306
323
  });
324
+
325
+ describe("generateProfileEndpoints", () => {
326
+ it("builds endpoint query payloads", () => {
327
+ const builder = {
328
+ // biome-ignore lint/suspicious/noExplicitAny: Testing generated endpoint configs
329
+ mutation: (config: any) => config,
330
+ };
331
+ // biome-ignore lint/suspicious/noExplicitAny: Lightweight fake builder for unit test
332
+ const endpoints = generateProfileEndpoints(builder as any, "todos");
333
+ const createEmailUserQuery = endpoints.createEmailUser.query;
334
+ const emailLoginQuery = endpoints.emailLogin.query;
335
+ const emailSignUpQuery = endpoints.emailSignUp.query;
336
+ const googleLoginQuery = endpoints.googleLogin.query;
337
+ const resetPasswordQuery = endpoints.resetPassword.query;
338
+
339
+ expect(createEmailUserQuery).toBeDefined();
340
+ expect(emailLoginQuery).toBeDefined();
341
+ expect(emailSignUpQuery).toBeDefined();
342
+ expect(googleLoginQuery).toBeDefined();
343
+ expect(resetPasswordQuery).toBeDefined();
344
+
345
+ if (
346
+ !createEmailUserQuery ||
347
+ !emailLoginQuery ||
348
+ !emailSignUpQuery ||
349
+ !googleLoginQuery ||
350
+ !resetPasswordQuery
351
+ ) {
352
+ throw new Error("Expected all generated profile endpoint queries to be defined");
353
+ }
354
+
355
+ expect(endpoints.createEmailUser.invalidatesTags).toEqual(["todos", "conversations"]);
356
+ expect(
357
+ createEmailUserQuery({
358
+ email: "new@example.com",
359
+ password: "secret",
360
+ role: "admin",
361
+ })
362
+ ).toEqual({
363
+ body: {email: "new@example.com", password: "secret", role: "admin"},
364
+ method: "POST",
365
+ url: "auth/signup",
366
+ });
367
+
368
+ expect(endpoints.emailLogin.extraOptions).toEqual({maxRetries: 0});
369
+ expect(emailLoginQuery({email: "a@example.com", password: "pw"})).toEqual({
370
+ body: {email: "a@example.com", password: "pw", username: undefined},
371
+ method: "POST",
372
+ url: "auth/login",
373
+ });
374
+
375
+ expect(
376
+ emailSignUpQuery({
377
+ email: "signup@example.com",
378
+ name: "New User",
379
+ password: "pw",
380
+ })
381
+ ).toEqual({
382
+ body: {email: "signup@example.com", name: "New User", password: "pw"},
383
+ method: "POST",
384
+ url: "auth/signup",
385
+ });
386
+
387
+ expect(googleLoginQuery({idToken: "id-token"})).toEqual({
388
+ body: {idToken: "id-token"},
389
+ method: "POST",
390
+ url: "/auth/google",
391
+ });
392
+
393
+ expect(
394
+ resetPasswordQuery({
395
+ _id: "u-1",
396
+ email: "user@example.com",
397
+ newPassword: "new-secret",
398
+ oldPassword: "old-secret",
399
+ password: "current-secret",
400
+ })
401
+ ).toEqual({
402
+ body: {
403
+ _id: "u-1",
404
+ email: "user@example.com",
405
+ newPassword: "new-secret",
406
+ oldPassword: "old-secret",
407
+ password: "current-secret",
408
+ },
409
+ method: "POST",
410
+ url: "/resetPassword",
411
+ });
412
+ });
413
+ });
414
+
415
+ describe("listener middleware side effects", () => {
416
+ it("stores tokens in AsyncStorage on web login when window exists", async () => {
417
+ const {store} = createTestStore();
418
+ const setItemCalls: Array<[string, string]> = [];
419
+ const originalSetItem = AsyncStorage.setItem;
420
+ const globalWithWindow = globalThis as {window?: unknown};
421
+ const originalWindow = globalWithWindow.window;
422
+
423
+ AsyncStorage.setItem = async (key: string, value: string): Promise<void> => {
424
+ setItemCalls.push([key, value]);
425
+ };
426
+ globalWithWindow.window = {};
427
+
428
+ try {
429
+ store.dispatch({
430
+ meta: {arg: {endpointName: "emailLogin", type: "mutation"}, requestId: "listener-login-1"},
431
+ payload: {refreshToken: "refresh-token", token: "auth-token", userId: "user-123"},
432
+ type: "terreno-rtk/executeMutation/fulfilled",
433
+ });
434
+
435
+ await flushAsyncListeners();
436
+
437
+ expect(setItemCalls).toEqual([
438
+ ["AUTH_TOKEN", "auth-token"],
439
+ ["REFRESH_TOKEN", "refresh-token"],
440
+ ]);
441
+ expect(store.getState().auth.userId).toBe("user-123");
442
+ } finally {
443
+ AsyncStorage.setItem = originalSetItem;
444
+ if (typeof originalWindow === "undefined") {
445
+ delete globalWithWindow.window;
446
+ } else {
447
+ globalWithWindow.window = originalWindow;
448
+ }
449
+ }
450
+ });
451
+
452
+ it("removes tokens from AsyncStorage on web logout when window exists", async () => {
453
+ const {store, authSlice} = createTestStore();
454
+ const removeItemCalls: string[] = [];
455
+ const originalRemoveItem = AsyncStorage.removeItem;
456
+ const globalWithWindow = globalThis as {window?: unknown};
457
+ const originalWindow = globalWithWindow.window;
458
+
459
+ AsyncStorage.removeItem = async (key: string): Promise<void> => {
460
+ removeItemCalls.push(key);
461
+ };
462
+ globalWithWindow.window = {};
463
+
464
+ try {
465
+ store.dispatch(authSlice.actions.logout());
466
+ await flushAsyncListeners();
467
+
468
+ expect(removeItemCalls).toEqual(["AUTH_TOKEN", "REFRESH_TOKEN"]);
469
+ } finally {
470
+ AsyncStorage.removeItem = originalRemoveItem;
471
+ if (typeof originalWindow === "undefined") {
472
+ delete globalWithWindow.window;
473
+ } else {
474
+ globalWithWindow.window = originalWindow;
475
+ }
476
+ }
477
+ });
478
+ });
479
+
480
+ describe("hook wrappers", () => {
481
+ it("throws when hook selectors are called outside React render", () => {
482
+ expect(() => useSelectCurrentUserId()).toThrow();
483
+ expect(() => useSelectIsAuthenticating()).toThrow();
484
+ });
485
+ });
486
+
487
+ describe("getAuthToken", () => {
488
+ it("reads AUTH_TOKEN from AsyncStorage when window exists", async () => {
489
+ const originalGetItem = AsyncStorage.getItem;
490
+ const globalWithWindow = globalThis as {window?: unknown};
491
+ const originalWindow = globalWithWindow.window;
492
+
493
+ AsyncStorage.getItem = async (key: string): Promise<string | null> => {
494
+ return key === "AUTH_TOKEN" ? "stored-auth-token" : null;
495
+ };
496
+ globalWithWindow.window = {};
497
+
498
+ try {
499
+ const token = await getAuthToken();
500
+ expect(token).toBe("stored-auth-token");
501
+ } finally {
502
+ AsyncStorage.getItem = originalGetItem;
503
+ if (typeof originalWindow === "undefined") {
504
+ delete globalWithWindow.window;
505
+ } else {
506
+ globalWithWindow.window = originalWindow;
507
+ }
508
+ }
509
+ });
510
+
511
+ it("returns null when window is unavailable in SSR context", async () => {
512
+ const globalWithWindow = globalThis as {window?: unknown};
513
+ const originalWindow = globalWithWindow.window;
514
+
515
+ delete globalWithWindow.window;
516
+ try {
517
+ const token = await getAuthToken();
518
+ expect(token).toBeNull();
519
+ } finally {
520
+ if (typeof originalWindow !== "undefined") {
521
+ globalWithWindow.window = originalWindow;
522
+ }
523
+ }
524
+ });
525
+ });
@@ -1,4 +1,5 @@
1
1
  import {beforeEach, describe, expect, it, mock} from "bun:test";
2
+ import {configureStore} from "@reduxjs/toolkit";
2
3
  import {
3
4
  type BetterAuthState,
4
5
  generateBetterAuthSlice,
@@ -230,6 +231,111 @@ describe("generateBetterAuthSlice", () => {
230
231
  expect(dispatchedActions.length).toBeGreaterThanOrEqual(2);
231
232
  expect(dispatchedActions[0].type).toBe("betterAuth/setLoading");
232
233
  });
234
+
235
+ it("syncSession clears state when no user session is returned", async () => {
236
+ mockAuthClient.getSession = mock(() =>
237
+ Promise.resolve({
238
+ data: {
239
+ session: null,
240
+ user: null,
241
+ },
242
+ })
243
+ ) as unknown as typeof mockAuthClient.getSession;
244
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
245
+ const betterAuthSlice = generateBetterAuthSlice({authClient: mockAuthClient as any});
246
+
247
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock for dispatched actions
248
+ const dispatchedActions: any[] = [];
249
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock dispatch function
250
+ const mockDispatch = (action: any) => {
251
+ dispatchedActions.push(action);
252
+ };
253
+
254
+ await betterAuthSlice.syncSession(mockDispatch);
255
+
256
+ expect(dispatchedActions.map((action) => action.type)).toEqual([
257
+ "betterAuth/setLoading",
258
+ "betterAuth/clearSession",
259
+ ]);
260
+ });
261
+
262
+ it("syncSession dispatches error and clearSession when getSession throws", async () => {
263
+ mockAuthClient.getSession = mock(() =>
264
+ Promise.reject(new Error("network error"))
265
+ ) as unknown as typeof mockAuthClient.getSession;
266
+ const originalConsoleError = console.error;
267
+ console.error = mock(() => {});
268
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
269
+ const betterAuthSlice = generateBetterAuthSlice({authClient: mockAuthClient as any});
270
+
271
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock for dispatched actions
272
+ const dispatchedActions: any[] = [];
273
+ // biome-ignore lint/suspicious/noExplicitAny: Test mock dispatch function
274
+ const mockDispatch = (action: any) => {
275
+ dispatchedActions.push(action);
276
+ };
277
+
278
+ await betterAuthSlice.syncSession(mockDispatch);
279
+
280
+ expect(dispatchedActions.map((action) => action.type)).toEqual([
281
+ "betterAuth/setLoading",
282
+ "betterAuth/setError",
283
+ "betterAuth/clearSession",
284
+ ]);
285
+ console.error = originalConsoleError;
286
+ });
287
+
288
+ it("logout middleware calls signOut for slice logout action", async () => {
289
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
290
+ const betterAuthSlice = generateBetterAuthSlice({authClient: mockAuthClient as any});
291
+ const store = configureStore({
292
+ middleware: (getDefaultMiddleware) =>
293
+ getDefaultMiddleware().concat(...betterAuthSlice.middleware),
294
+ reducer: {
295
+ betterAuth: betterAuthSlice.reducer,
296
+ },
297
+ });
298
+
299
+ store.dispatch(betterAuthSlice.actions.logout());
300
+ await Promise.resolve();
301
+
302
+ expect(mockAuthClient.signOut).toHaveBeenCalledTimes(1);
303
+ });
304
+
305
+ it("global auth/logout action signs out and clears session", async () => {
306
+ // biome-ignore lint/suspicious/noExplicitAny: Mock client type
307
+ const betterAuthSlice = generateBetterAuthSlice({authClient: mockAuthClient as any});
308
+ const store = configureStore({
309
+ middleware: (getDefaultMiddleware) =>
310
+ getDefaultMiddleware().concat(...betterAuthSlice.middleware),
311
+ reducer: {
312
+ betterAuth: betterAuthSlice.reducer,
313
+ },
314
+ });
315
+
316
+ store.dispatch(
317
+ betterAuthSlice.actions.setSession({
318
+ user: {
319
+ createdAt: new Date(),
320
+ email: "test@example.com",
321
+ emailVerified: true,
322
+ id: "user-123",
323
+ image: null,
324
+ name: "Test User",
325
+ updatedAt: new Date(),
326
+ },
327
+ userId: "user-123",
328
+ })
329
+ );
330
+ expect(store.getState().betterAuth.isAuthenticated).toBe(true);
331
+
332
+ store.dispatch({type: "auth/logout"});
333
+ await Promise.resolve();
334
+
335
+ expect(mockAuthClient.signOut).toHaveBeenCalledTimes(1);
336
+ expect(store.getState().betterAuth.isAuthenticated).toBe(false);
337
+ expect(store.getState().betterAuth.userId).toBeNull();
338
+ });
233
339
  });
234
340
 
235
341
  describe("Better Auth selectors", () => {
@@ -0,0 +1,189 @@
1
+ import {afterEach, beforeEach, describe, expect, it, mock} from "bun:test";
2
+
3
+ type ConstantsModule = typeof import("./constants");
4
+
5
+ type ExpoConstantsMock = {
6
+ experienceUrl?: string;
7
+ expoConfig?: {
8
+ extra?: Record<string, string>;
9
+ hostUri?: string;
10
+ };
11
+ expoGoConfig?: {
12
+ debuggerHost?: string;
13
+ };
14
+ };
15
+
16
+ const loadConstantsModule = async ({
17
+ apiUrl,
18
+ constantsMock,
19
+ isDev = false,
20
+ }: {
21
+ apiUrl?: string;
22
+ constantsMock: ExpoConstantsMock;
23
+ isDev?: boolean;
24
+ }): Promise<ConstantsModule> => {
25
+ const hasApiUrl = "EXPO_PUBLIC_API_URL" in process.env;
26
+ const previousApiUrl = process.env.EXPO_PUBLIC_API_URL;
27
+ const previousDev = (globalThis as {__DEV__?: boolean}).__DEV__;
28
+
29
+ if (apiUrl) {
30
+ process.env.EXPO_PUBLIC_API_URL = apiUrl;
31
+ } else {
32
+ delete process.env.EXPO_PUBLIC_API_URL;
33
+ }
34
+
35
+ (globalThis as {__DEV__?: boolean}).__DEV__ = isDev;
36
+
37
+ mock.module("expo-constants", () => ({
38
+ default: constantsMock,
39
+ }));
40
+
41
+ const testCaseId = `${Date.now()}-${Math.random()}`;
42
+ const module = (await import(`./constants?testCase=${testCaseId}`)) as ConstantsModule;
43
+
44
+ if (hasApiUrl) {
45
+ process.env.EXPO_PUBLIC_API_URL = previousApiUrl;
46
+ } else {
47
+ delete process.env.EXPO_PUBLIC_API_URL;
48
+ }
49
+
50
+ if (typeof previousDev === "undefined") {
51
+ delete (globalThis as {__DEV__?: boolean}).__DEV__;
52
+ } else {
53
+ (globalThis as {__DEV__?: boolean}).__DEV__ = previousDev;
54
+ }
55
+
56
+ return module;
57
+ };
58
+
59
+ describe("constants", () => {
60
+ const originalDebug = console.debug;
61
+ const originalError = console.error;
62
+
63
+ beforeEach(() => {
64
+ console.debug = mock(() => {});
65
+ console.error = mock(() => {});
66
+ });
67
+
68
+ afterEach(() => {
69
+ console.debug = originalDebug;
70
+ console.error = originalError;
71
+ });
72
+
73
+ it("uses EXPO_PUBLIC_API_URL override and enables debug logs", async () => {
74
+ const constants = await loadConstantsModule({
75
+ apiUrl: "https://api.example.com",
76
+ constantsMock: {
77
+ expoConfig: {
78
+ extra: {
79
+ APP_ENV: "production",
80
+ AUTH_DEBUG: "true",
81
+ WEBSOCKETS_DEBUG: "true",
82
+ },
83
+ },
84
+ },
85
+ isDev: false,
86
+ });
87
+
88
+ expect(constants.baseUrl).toBe("https://api.example.com");
89
+ expect(constants.baseWebsocketsUrl).toBe("https://ws.example.com/");
90
+ expect(constants.baseTasksUrl).toBe("https://tasks.example.com/tasks");
91
+ expect(constants.AUTH_DEBUG).toBe(true);
92
+
93
+ constants.logAuth("auth message");
94
+ constants.logSocket(undefined, "socket message");
95
+
96
+ expect(console.debug).toHaveBeenCalledWith("auth message");
97
+ expect(console.debug).toHaveBeenCalledWith("[websocket]", "socket message");
98
+ });
99
+
100
+ it("resolves dev hostUri URLs when __DEV__ is true", async () => {
101
+ const constants = await loadConstantsModule({
102
+ constantsMock: {
103
+ expoConfig: {
104
+ extra: {},
105
+ hostUri: "10.0.0.12:8081",
106
+ },
107
+ },
108
+ isDev: true,
109
+ });
110
+
111
+ expect(constants.baseUrl).toBe("http://10.0.0.12:4000");
112
+ expect(constants.baseWebsocketsUrl).toBe("ws://10.0.0.12:4000/");
113
+ expect(constants.baseTasksUrl).toBe("http://10.0.0.12:4000/tasks");
114
+ });
115
+
116
+ it("resolves dev experienceUrl URLs when hostUri is unavailable", async () => {
117
+ const constants = await loadConstantsModule({
118
+ constantsMock: {
119
+ experienceUrl: "exp://192.168.1.20:19000",
120
+ expoConfig: {
121
+ extra: {},
122
+ },
123
+ },
124
+ isDev: true,
125
+ });
126
+
127
+ expect(constants.baseUrl).toBe("http://192.168.1.20:4000");
128
+ expect(constants.baseWebsocketsUrl).toBe("ws://192.168.1.20:4000/");
129
+ expect(constants.baseTasksUrl).toBe("http://192.168.1.20:4000/tasks");
130
+ });
131
+
132
+ it("uses BASE_URL outside dev mode and allows user websocket debug flag", async () => {
133
+ const constants = await loadConstantsModule({
134
+ constantsMock: {
135
+ expoConfig: {
136
+ extra: {
137
+ BASE_URL: "https://api.prod.com",
138
+ WEBSOCKETS_DEBUG: "false",
139
+ },
140
+ },
141
+ },
142
+ isDev: false,
143
+ });
144
+
145
+ expect(constants.baseUrl).toBe("https://api.prod.com");
146
+ expect(constants.baseWebsocketsUrl).toBe("https://ws.prod.com/");
147
+ expect(constants.baseTasksUrl).toBe("https://tasks.prod.com/tasks");
148
+
149
+ constants.logSocket({featureFlags: {debugWebsockets: {enabled: true}}}, "enabled");
150
+ expect(console.debug).toHaveBeenCalledWith("[websocket]", "enabled");
151
+ });
152
+
153
+ it("falls back to non-dev hostUri when BASE_URL is missing", async () => {
154
+ const constants = await loadConstantsModule({
155
+ constantsMock: {
156
+ expoConfig: {
157
+ extra: {},
158
+ hostUri: "172.16.0.3:8081",
159
+ },
160
+ },
161
+ isDev: false,
162
+ });
163
+
164
+ expect(constants.baseUrl).toBe("http://172.16.0.3:4000");
165
+ expect(constants.baseWebsocketsUrl).toBe("ws://172.16.0.3:4000/");
166
+ expect(constants.baseTasksUrl).toBe("http://172.16.0.3:4000/tasks");
167
+ });
168
+
169
+ it("warns for exp.direct tunnels and falls back to localhost", async () => {
170
+ const constants = await loadConstantsModule({
171
+ constantsMock: {
172
+ expoConfig: {
173
+ extra: {},
174
+ },
175
+ expoGoConfig: {
176
+ debuggerHost: "abc.exp.direct:80",
177
+ },
178
+ },
179
+ isDev: false,
180
+ });
181
+
182
+ expect(console.error).toHaveBeenCalledWith(
183
+ "Expo Tunnel is not currently supported for connecting to the API, please use LAN or Local mode."
184
+ );
185
+ expect(constants.baseUrl).toBe("http://localhost:4000");
186
+ expect(constants.baseWebsocketsUrl).toBe("ws://localhost:4000/");
187
+ expect(constants.baseTasksUrl).toBe("http://localhost:4000/tasks");
188
+ });
189
+ });