quickbase-js 0.1.0-beta.8 → 0.1.0-beta.9

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 (52) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +46 -130
  3. package/dist/esm/quickbase.d.ts +822 -119
  4. package/dist/esm/quickbase.js +373 -236
  5. package/dist/esm/quickbase.js.map +1 -1
  6. package/dist/esm/quickbase.min.js +1 -1
  7. package/dist/esm/quickbase.min.js.map +1 -1
  8. package/dist/umd/quickbase.umd.js +373 -236
  9. package/dist/umd/quickbase.umd.js.map +1 -1
  10. package/dist/umd/quickbase.umd.min.js +1 -1
  11. package/dist/umd/quickbase.umd.min.js.map +1 -1
  12. package/open-api/generate-unified-interface.ts +97 -17
  13. package/open-api/utils/generateJsDoc.ts +96 -0
  14. package/package.json +3 -1
  15. package/src/ThrottleBucket.ts +17 -12
  16. package/src/authorizationStrategy.ts +246 -0
  17. package/src/generated-unified/QuickbaseClient.ts +809 -119
  18. package/src/invokeMethod.ts +150 -265
  19. package/src/quickbaseClient.ts +85 -58
  20. package/src/rateLimiter.ts +25 -0
  21. package/src/tokenCache.ts +10 -26
  22. package/tests/vitest/qb/auth/mockQuickbaseServer.ts +60 -0
  23. package/tests/vitest/qb/auth/retryUserToken401.test.ts +59 -42
  24. package/tests/vitest/qb/auth/ssoTokenIntegrationWithServer.test.ts +65 -0
  25. package/tests/vitest/qb/fields/getFieldUsage.test.ts +58 -150
  26. package/tests/vitest/qb/formulas/runFormula.test.ts +96 -0
  27. package/tests/vitest/qb/tables/createRelationship.test.ts +102 -0
  28. package/tests/vitest/qb/tables/deleteRelationship.test.ts +143 -0
  29. package/tests/vitest/qb/tables/updateRelationship.test.ts +118 -145
  30. package/tests/vitest/unit/ThrottleBucket.test.ts +95 -0
  31. package/tests/vitest/unit/apps/copyApp.test.ts +133 -40
  32. package/tests/vitest/unit/apps/updateApp.test.ts +42 -11
  33. package/tests/vitest/unit/auth/fetchTempToken401.test.ts +3 -2
  34. package/tests/vitest/unit/auth/getTempToken.test.ts +42 -18
  35. package/tests/vitest/unit/auth/retryTempToken401.test.ts +46 -64
  36. package/tests/vitest/unit/auth/retryTempTokenMaxRetries.test.ts +235 -0
  37. package/tests/vitest/unit/auth/retryUserToken401.test.ts +56 -43
  38. package/tests/vitest/unit/auth/ssoTokenRefresh.test.ts +325 -0
  39. package/tests/vitest/unit/fields/createField.test.ts +180 -116
  40. package/tests/vitest/unit/fields/getFieldUsage.test.ts +17 -3
  41. package/tests/vitest/unit/fields/updateField.test.ts +12 -7
  42. package/tests/vitest/unit/formulas/runFormula.test.ts +205 -0
  43. package/tests/vitest/unit/index.ts +2 -1
  44. package/tests/vitest/unit/inferHttpMethod.test.ts +131 -0
  45. package/tests/vitest/unit/rateLimit.test.ts +4 -2
  46. package/tests/vitest/unit/tables/createRelationship.test.ts +212 -0
  47. package/tests/vitest/unit/tables/deleteRelationship.test.ts +97 -0
  48. package/tests/vitest/unit/tables/updateRelationship.test.ts +12 -10
  49. package/tests/vitest/unit/tokenLifespan.test.ts +149 -83
  50. package/tools/log-gen.ts +14 -5
  51. package/tools/log-gen.yaml +710 -268
  52. package/tests/vitest/unit/auth/retryTempTokenTwo401.test.ts +0 -81
@@ -1,81 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from "vitest";
2
- import { createClient, mockFetch } from "@tests/setup.ts";
3
-
4
- describe("QuickbaseClient - Two Temp Token 401s in a Row", () => {
5
- let client: ReturnType<typeof createClient>;
6
-
7
- beforeEach(() => {
8
- mockFetch.mockClear();
9
- client = createClient(mockFetch, { useTempTokens: true, debug: true });
10
- });
11
-
12
- it("logs an error after two 401s in a row", async () => {
13
- const mockDbid = "mockDbid123";
14
- const mockToken = "new_token_456";
15
- let callCount = 0;
16
-
17
- mockFetch.mockImplementation((url) => {
18
- callCount++;
19
- if (url.includes("auth/temporary") && callCount === 1) {
20
- return Promise.resolve({
21
- ok: true,
22
- status: 200,
23
- json: () => Promise.resolve({ temporaryAuthorization: mockToken }),
24
- });
25
- }
26
- if (url.includes("fields") && callCount === 2) {
27
- return Promise.resolve({
28
- ok: false,
29
- status: 401,
30
- json: () => Promise.resolve({ message: "Unauthorized" }),
31
- });
32
- }
33
- if (url.includes("auth/temporary") && callCount === 3) {
34
- return Promise.resolve({
35
- ok: true,
36
- status: 200,
37
- json: () =>
38
- Promise.resolve({ temporaryAuthorization: mockToken + "_retry" }),
39
- });
40
- }
41
- if (url.includes("fields") && callCount === 4) {
42
- return Promise.resolve({
43
- ok: false,
44
- status: 401,
45
- json: () => Promise.resolve({ message: "Unauthorized again" }),
46
- });
47
- }
48
- return Promise.reject(new Error(`Unexpected fetch call: ${url}`));
49
- });
50
-
51
- const consoleSpy = vi.spyOn(console, "log");
52
-
53
- await expect(client.getFields({ tableId: mockDbid })).rejects.toThrow(
54
- "API Error: Unauthorized again (Status: 401)"
55
- );
56
-
57
- expect(mockFetch).toHaveBeenCalledTimes(4);
58
-
59
- const tokenLogs = consoleSpy.mock.calls.filter((call) =>
60
- call[0].includes("Fetched and cached new token")
61
- );
62
- expect(tokenLogs).toContainEqual([
63
- "Fetched and cached new token for dbid: mockDbid123",
64
- mockToken,
65
- ]);
66
- expect(tokenLogs).toContainEqual([
67
- "Fetched and cached new token for dbid: mockDbid123",
68
- mockToken + "_retry",
69
- ]);
70
-
71
- expect(consoleSpy).toHaveBeenCalledWith(
72
- "Authorization error for getFields (temp token), refreshing token:",
73
- expect.any(String)
74
- );
75
- expect(consoleSpy).toHaveBeenCalledWith(
76
- "Retrying getFields with temp token"
77
- );
78
-
79
- consoleSpy.mockRestore();
80
- });
81
- });