@taruvi/sdk 1.3.3 → 1.3.4-beta.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 (249) hide show
  1. package/.claude/settings.local.json +19 -0
  2. package/.kiro/settings/lsp.json +198 -0
  3. package/MODULE_NAMING_CHANGES.md +81 -0
  4. package/PARAMETER_NAMING_CHANGES.md +106 -0
  5. package/README.md +4 -4
  6. package/USAGE_EXAMPLE.md +86 -0
  7. package/package.json +10 -9
  8. package/{dist/client.js → src/client.ts} +59 -39
  9. package/src/index.ts +54 -0
  10. package/src/lib/analytics/AnalyticsClient.ts +24 -0
  11. package/src/lib/analytics/types.ts +8 -0
  12. package/src/lib/app/AppClient.ts +54 -0
  13. package/src/lib/app/types.ts +50 -0
  14. package/{dist/lib/auth/AuthClient.js → src/lib/auth/AuthClient.ts} +106 -70
  15. package/src/lib/auth/types.ts +111 -0
  16. package/src/lib/database/DatabaseClient.ts +148 -0
  17. package/src/lib/database/types.ts +46 -0
  18. package/src/lib/functions/FunctionsClient.ts +27 -0
  19. package/src/lib/functions/types.ts +25 -0
  20. package/src/lib/graphs/GraphClient.ts +106 -0
  21. package/src/lib/graphs/types.ts +33 -0
  22. package/src/lib/policy/PolicyClient.ts +79 -0
  23. package/src/lib/policy/types.ts +40 -0
  24. package/src/lib/secrets/SecretsClient.ts +75 -0
  25. package/src/lib/secrets/types.ts +59 -0
  26. package/src/lib/settings/SettingsClient.ts +14 -0
  27. package/src/lib/settings/types.ts +9 -0
  28. package/src/lib/storage/StorageClient.ts +123 -0
  29. package/src/lib/storage/types.ts +86 -0
  30. package/src/lib/users/UserClient.ts +55 -0
  31. package/src/lib/users/types.ts +104 -0
  32. package/src/lib-internal/errors/ErrorClient.ts +102 -0
  33. package/src/lib-internal/errors/index.ts +3 -0
  34. package/src/lib-internal/errors/types.ts +28 -0
  35. package/src/lib-internal/http/HttpClient.ts +129 -0
  36. package/{dist/lib-internal/http/types.js → src/lib-internal/http/types.ts} +3 -2
  37. package/src/lib-internal/routes/AnalyticsRoutes.ts +3 -0
  38. package/src/lib-internal/routes/AppRoutes.ts +9 -0
  39. package/src/lib-internal/routes/AuthRoutes.ts +0 -0
  40. package/src/lib-internal/routes/DatabaseRoutes.ts +9 -0
  41. package/src/lib-internal/routes/FunctionRoutes.ts +3 -0
  42. package/src/lib-internal/routes/GraphRoutes.ts +14 -0
  43. package/src/lib-internal/routes/PolicyRoutes.ts +4 -0
  44. package/src/lib-internal/routes/SecretsRoutes.ts +5 -0
  45. package/{dist/lib-internal/routes/SettingsRoutes.js → src/lib-internal/routes/SettingsRoutes.ts} +1 -2
  46. package/src/lib-internal/routes/StorageRoutes.ts +15 -0
  47. package/src/lib-internal/routes/UserRoutes.ts +11 -0
  48. package/src/lib-internal/routes/index.ts +0 -0
  49. package/{dist/lib-internal/token/TokenClient.js → src/lib-internal/token/TokenClient.ts} +144 -99
  50. package/src/lib-internal/token/types.ts +0 -0
  51. package/src/types.ts +90 -0
  52. package/{dist/utils/enums.js → src/utils/enums.ts} +10 -4
  53. package/src/utils/utils.ts +37 -0
  54. package/tests/fixtures/mockClient.ts +19 -0
  55. package/tests/mocks/db.json +1 -0
  56. package/tests/unit/analytics/AnalyticsClient.test.ts +84 -0
  57. package/tests/unit/app/AppClient.test.ts +114 -0
  58. package/tests/unit/auth/AuthClient.test.ts +131 -0
  59. package/tests/unit/client/Client.test.ts +70 -0
  60. package/tests/unit/database/DatabaseClient.test.ts +304 -0
  61. package/tests/unit/edge-cases/robustness.test.ts +259 -0
  62. package/tests/unit/errors/errors.test.ts +209 -0
  63. package/tests/unit/functions/FunctionsClient.test.ts +99 -0
  64. package/tests/unit/graphs/GraphClient.test.ts +329 -0
  65. package/tests/unit/policy/PolicyClient.test.ts +184 -0
  66. package/tests/unit/secrets/SecretsClient.test.ts +146 -0
  67. package/tests/unit/settings/SettingsClient.test.ts +50 -0
  68. package/tests/unit/storage/StorageClient.test.ts +251 -0
  69. package/tests/unit/users/UserClient.test.ts +150 -0
  70. package/tsconfig.json +43 -0
  71. package/vitest.config.ts +7 -0
  72. package/dist/client.d.ts +0 -29
  73. package/dist/client.d.ts.map +0 -1
  74. package/dist/client.js.map +0 -1
  75. package/dist/index.d.ts +0 -25
  76. package/dist/index.d.ts.map +0 -1
  77. package/dist/index.js +0 -15
  78. package/dist/index.js.map +0 -1
  79. package/dist/lib/Analytics/AnalyticsClient.d.ts +0 -9
  80. package/dist/lib/Analytics/AnalyticsClient.d.ts.map +0 -1
  81. package/dist/lib/Analytics/AnalyticsClient.js +0 -17
  82. package/dist/lib/Analytics/AnalyticsClient.js.map +0 -1
  83. package/dist/lib/Analytics/types.d.ts +0 -7
  84. package/dist/lib/Analytics/types.d.ts.map +0 -1
  85. package/dist/lib/Analytics/types.js +0 -2
  86. package/dist/lib/Analytics/types.js.map +0 -1
  87. package/dist/lib/App/AppClient.d.ts +0 -15
  88. package/dist/lib/App/AppClient.d.ts.map +0 -1
  89. package/dist/lib/App/AppClient.js +0 -41
  90. package/dist/lib/App/AppClient.js.map +0 -1
  91. package/dist/lib/App/types.d.ts +0 -36
  92. package/dist/lib/App/types.d.ts.map +0 -1
  93. package/dist/lib/App/types.js +0 -2
  94. package/dist/lib/App/types.js.map +0 -1
  95. package/dist/lib/Database/DatabaseClient.d.ts +0 -28
  96. package/dist/lib/Database/DatabaseClient.d.ts.map +0 -1
  97. package/dist/lib/Database/DatabaseClient.js +0 -116
  98. package/dist/lib/Database/DatabaseClient.js.map +0 -1
  99. package/dist/lib/Database/types.d.ts +0 -24
  100. package/dist/lib/Database/types.d.ts.map +0 -1
  101. package/dist/lib/Database/types.js +0 -2
  102. package/dist/lib/Database/types.js.map +0 -1
  103. package/dist/lib/Function/FunctionsClient.d.ts +0 -9
  104. package/dist/lib/Function/FunctionsClient.d.ts.map +0 -1
  105. package/dist/lib/Function/FunctionsClient.js +0 -20
  106. package/dist/lib/Function/FunctionsClient.js.map +0 -1
  107. package/dist/lib/Function/types.d.ts +0 -16
  108. package/dist/lib/Function/types.d.ts.map +0 -1
  109. package/dist/lib/Function/types.js +0 -2
  110. package/dist/lib/Function/types.js.map +0 -1
  111. package/dist/lib/Graphs/GraphClient.d.ts +0 -26
  112. package/dist/lib/Graphs/GraphClient.d.ts.map +0 -1
  113. package/dist/lib/Graphs/GraphClient.js +0 -86
  114. package/dist/lib/Graphs/GraphClient.js.map +0 -1
  115. package/dist/lib/Graphs/types.d.ts +0 -23
  116. package/dist/lib/Graphs/types.d.ts.map +0 -1
  117. package/dist/lib/Graphs/types.js +0 -2
  118. package/dist/lib/Graphs/types.js.map +0 -1
  119. package/dist/lib/Policy/PolicyClient.d.ts +0 -9
  120. package/dist/lib/Policy/PolicyClient.d.ts.map +0 -1
  121. package/dist/lib/Policy/PolicyClient.js +0 -24
  122. package/dist/lib/Policy/PolicyClient.js.map +0 -1
  123. package/dist/lib/Policy/types.d.ts +0 -22
  124. package/dist/lib/Policy/types.d.ts.map +0 -1
  125. package/dist/lib/Policy/types.js +0 -2
  126. package/dist/lib/Policy/types.js.map +0 -1
  127. package/dist/lib/Secrets/SecretsClient.d.ts +0 -14
  128. package/dist/lib/Secrets/SecretsClient.d.ts.map +0 -1
  129. package/dist/lib/Secrets/SecretsClient.js +0 -32
  130. package/dist/lib/Secrets/SecretsClient.js.map +0 -1
  131. package/dist/lib/Secrets/types.d.ts +0 -13
  132. package/dist/lib/Secrets/types.d.ts.map +0 -1
  133. package/dist/lib/Secrets/types.js +0 -2
  134. package/dist/lib/Secrets/types.js.map +0 -1
  135. package/dist/lib/Settings/SettingsClient.d.ts +0 -7
  136. package/dist/lib/Settings/SettingsClient.d.ts.map +0 -1
  137. package/dist/lib/Settings/SettingsClient.js +0 -11
  138. package/dist/lib/Settings/SettingsClient.js.map +0 -1
  139. package/dist/lib/Settings/types.d.ts +0 -4
  140. package/dist/lib/Settings/types.d.ts.map +0 -1
  141. package/dist/lib/Settings/types.js +0 -2
  142. package/dist/lib/Settings/types.js.map +0 -1
  143. package/dist/lib/Storage/StorageClient.d.ts +0 -26
  144. package/dist/lib/Storage/StorageClient.d.ts.map +0 -1
  145. package/dist/lib/Storage/StorageClient.js +0 -78
  146. package/dist/lib/Storage/StorageClient.js.map +0 -1
  147. package/dist/lib/Storage/types.d.ts +0 -35
  148. package/dist/lib/Storage/types.d.ts.map +0 -1
  149. package/dist/lib/Storage/types.js +0 -2
  150. package/dist/lib/Storage/types.js.map +0 -1
  151. package/dist/lib/auth/AuthClient.d.ts +0 -66
  152. package/dist/lib/auth/AuthClient.d.ts.map +0 -1
  153. package/dist/lib/auth/AuthClient.js.map +0 -1
  154. package/dist/lib/auth/types.d.ts +0 -9
  155. package/dist/lib/auth/types.d.ts.map +0 -1
  156. package/dist/lib/auth/types.js +0 -2
  157. package/dist/lib/auth/types.js.map +0 -1
  158. package/dist/lib/user/UserClient.d.ts +0 -16
  159. package/dist/lib/user/UserClient.d.ts.map +0 -1
  160. package/dist/lib/user/UserClient.js +0 -41
  161. package/dist/lib/user/UserClient.js.map +0 -1
  162. package/dist/lib/user/types.d.ts +0 -100
  163. package/dist/lib/user/types.d.ts.map +0 -1
  164. package/dist/lib/user/types.js +0 -2
  165. package/dist/lib/user/types.js.map +0 -1
  166. package/dist/lib-internal/errors/ErrorClient.d.ts +0 -4
  167. package/dist/lib-internal/errors/ErrorClient.d.ts.map +0 -1
  168. package/dist/lib-internal/errors/ErrorClient.js +0 -6
  169. package/dist/lib-internal/errors/ErrorClient.js.map +0 -1
  170. package/dist/lib-internal/errors/index.d.ts +0 -8
  171. package/dist/lib-internal/errors/index.d.ts.map +0 -1
  172. package/dist/lib-internal/errors/index.js +0 -23
  173. package/dist/lib-internal/errors/index.js.map +0 -1
  174. package/dist/lib-internal/errors/types.d.ts +0 -83
  175. package/dist/lib-internal/errors/types.d.ts.map +0 -1
  176. package/dist/lib-internal/errors/types.js +0 -65
  177. package/dist/lib-internal/errors/types.js.map +0 -1
  178. package/dist/lib-internal/http/HttpClient.d.ts +0 -22
  179. package/dist/lib-internal/http/HttpClient.d.ts.map +0 -1
  180. package/dist/lib-internal/http/HttpClient.js +0 -65
  181. package/dist/lib-internal/http/HttpClient.js.map +0 -1
  182. package/dist/lib-internal/http/types.d.ts +0 -12
  183. package/dist/lib-internal/http/types.d.ts.map +0 -1
  184. package/dist/lib-internal/http/types.js.map +0 -1
  185. package/dist/lib-internal/routes/AnalyticsRoutes.d.ts +0 -4
  186. package/dist/lib-internal/routes/AnalyticsRoutes.d.ts.map +0 -1
  187. package/dist/lib-internal/routes/AnalyticsRoutes.js +0 -4
  188. package/dist/lib-internal/routes/AnalyticsRoutes.js.map +0 -1
  189. package/dist/lib-internal/routes/AppRoutes.d.ts +0 -10
  190. package/dist/lib-internal/routes/AppRoutes.d.ts.map +0 -1
  191. package/dist/lib-internal/routes/AppRoutes.js +0 -6
  192. package/dist/lib-internal/routes/AppRoutes.js.map +0 -1
  193. package/dist/lib-internal/routes/AuthRoutes.d.ts +0 -2
  194. package/dist/lib-internal/routes/AuthRoutes.d.ts.map +0 -1
  195. package/dist/lib-internal/routes/AuthRoutes.js +0 -2
  196. package/dist/lib-internal/routes/AuthRoutes.js.map +0 -1
  197. package/dist/lib-internal/routes/DatabaseRoutes.d.ts +0 -10
  198. package/dist/lib-internal/routes/DatabaseRoutes.d.ts.map +0 -1
  199. package/dist/lib-internal/routes/DatabaseRoutes.js +0 -6
  200. package/dist/lib-internal/routes/DatabaseRoutes.js.map +0 -1
  201. package/dist/lib-internal/routes/FunctionRoutes.d.ts +0 -4
  202. package/dist/lib-internal/routes/FunctionRoutes.d.ts.map +0 -1
  203. package/dist/lib-internal/routes/FunctionRoutes.js +0 -4
  204. package/dist/lib-internal/routes/FunctionRoutes.js.map +0 -1
  205. package/dist/lib-internal/routes/GraphRoutes.d.ts +0 -14
  206. package/dist/lib-internal/routes/GraphRoutes.d.ts.map +0 -1
  207. package/dist/lib-internal/routes/GraphRoutes.js +0 -11
  208. package/dist/lib-internal/routes/GraphRoutes.js.map +0 -1
  209. package/dist/lib-internal/routes/PolicyRoutes.d.ts +0 -5
  210. package/dist/lib-internal/routes/PolicyRoutes.d.ts.map +0 -1
  211. package/dist/lib-internal/routes/PolicyRoutes.js +0 -5
  212. package/dist/lib-internal/routes/PolicyRoutes.js.map +0 -1
  213. package/dist/lib-internal/routes/SecretsRoutes.d.ts +0 -6
  214. package/dist/lib-internal/routes/SecretsRoutes.d.ts.map +0 -1
  215. package/dist/lib-internal/routes/SecretsRoutes.js +0 -6
  216. package/dist/lib-internal/routes/SecretsRoutes.js.map +0 -1
  217. package/dist/lib-internal/routes/SettingsRoutes.d.ts +0 -4
  218. package/dist/lib-internal/routes/SettingsRoutes.d.ts.map +0 -1
  219. package/dist/lib-internal/routes/SettingsRoutes.js.map +0 -1
  220. package/dist/lib-internal/routes/StorageRoutes.d.ts +0 -11
  221. package/dist/lib-internal/routes/StorageRoutes.d.ts.map +0 -1
  222. package/dist/lib-internal/routes/StorageRoutes.js +0 -8
  223. package/dist/lib-internal/routes/StorageRoutes.js.map +0 -1
  224. package/dist/lib-internal/routes/UserRoutes.d.ts +0 -11
  225. package/dist/lib-internal/routes/UserRoutes.d.ts.map +0 -1
  226. package/dist/lib-internal/routes/UserRoutes.js +0 -11
  227. package/dist/lib-internal/routes/UserRoutes.js.map +0 -1
  228. package/dist/lib-internal/routes/index.d.ts +0 -2
  229. package/dist/lib-internal/routes/index.d.ts.map +0 -1
  230. package/dist/lib-internal/routes/index.js +0 -2
  231. package/dist/lib-internal/routes/index.js.map +0 -1
  232. package/dist/lib-internal/token/TokenClient.d.ts +0 -71
  233. package/dist/lib-internal/token/TokenClient.d.ts.map +0 -1
  234. package/dist/lib-internal/token/TokenClient.js.map +0 -1
  235. package/dist/lib-internal/token/types.d.ts +0 -2
  236. package/dist/lib-internal/token/types.d.ts.map +0 -1
  237. package/dist/lib-internal/token/types.js +0 -2
  238. package/dist/lib-internal/token/types.js.map +0 -1
  239. package/dist/types.d.ts +0 -49
  240. package/dist/types.d.ts.map +0 -1
  241. package/dist/types.js +0 -2
  242. package/dist/types.js.map +0 -1
  243. package/dist/utils/enums.d.ts +0 -20
  244. package/dist/utils/enums.d.ts.map +0 -1
  245. package/dist/utils/enums.js.map +0 -1
  246. package/dist/utils/utils.d.ts +0 -5
  247. package/dist/utils/utils.d.ts.map +0 -1
  248. package/dist/utils/utils.js +0 -32
  249. package/dist/utils/utils.js.map +0 -1
@@ -1,27 +1,37 @@
1
1
  import { HttpClient } from "./lib-internal/http/HttpClient.js";
2
- import { TokenClient } from "./lib-internal/token/TokenClient.js";
2
+ import { TokenClient, type AuthTokens } from "./lib-internal/token/TokenClient.js";
3
+ import type { TaruviConfig } from "./types.js";
4
+
3
5
  export class Client {
4
- config;
5
- _httpClient;
6
- _tokenClient;
7
- constructor(config) {
6
+ private readonly config: TaruviConfig
7
+ private readonly _httpClient: HttpClient
8
+ private readonly _tokenClient: TokenClient
9
+
10
+ constructor(config: TaruviConfig) {
8
11
  if (!config) {
9
- throw new Error("Config is required");
12
+ throw new Error("Config is required")
10
13
  }
14
+
11
15
  if (!config.apiKey) {
12
- throw new Error("API key is required");
16
+ throw new Error("API key is required")
13
17
  }
14
- if (!config.baseUrl) {
15
- throw new Error("Base URL is required");
18
+
19
+ if (!config.apiUrl) {
20
+ throw new Error("API URL is required")
16
21
  }
17
- this.config = config;
22
+
23
+ this.config = config
24
+
18
25
  // Internal clients for SDK use only
19
26
  // TokenClient must be created first, then passed to HttpClient
20
- this._tokenClient = new TokenClient(config.token);
21
- this._httpClient = new HttpClient(this.config, this._tokenClient);
27
+
28
+ this._tokenClient = new TokenClient(config.token)
29
+ this._httpClient = new HttpClient(this.config, this._tokenClient)
30
+
22
31
  // Check URL hash for tokens (OAuth callback)
23
- this.extractTokensFromUrl();
32
+ this.extractTokensFromUrl()
24
33
  }
34
+
25
35
  /**
26
36
  * Extracts authentication tokens from URL hash and stores them using TokenClient.
27
37
  * This handles Web UI Flow callback URLs like:
@@ -29,59 +39,69 @@ export class Client {
29
39
  *
30
40
  * After successful extraction, the URL hash is cleared to prevent token exposure.
31
41
  */
32
- extractTokensFromUrl() {
42
+ private extractTokensFromUrl(): void {
33
43
  if (typeof window === "undefined" || typeof localStorage === "undefined") {
34
- return;
44
+ return
35
45
  }
36
- const hash = window.location.hash;
46
+
47
+ const hash = window.location.hash
37
48
  if (!hash) {
38
- return;
49
+ return
39
50
  }
40
- const params = new URLSearchParams(hash.substring(1));
41
- const sessionToken = params.get("session_token");
42
- const accessToken = params.get("access_token");
43
- const refreshToken = params.get("refresh_token");
44
- const expiresIn = params.get("expires_in");
45
- const tokenType = params.get("token_type");
51
+
52
+ const params = new URLSearchParams(hash.substring(1))
53
+ const sessionToken = params.get("session_token")
54
+ const accessToken = params.get("access_token")
55
+ const refreshToken = params.get("refresh_token")
56
+ const expiresIn = params.get("expires_in")
57
+ const tokenType = params.get("token_type")
58
+
46
59
  // Only proceed if we have the required tokens
47
60
  if (!accessToken || !refreshToken) {
48
- return;
61
+ return
49
62
  }
63
+
50
64
  // Store tokens using TokenClient
51
- const tokens = {
65
+ const tokens: AuthTokens = {
52
66
  accessToken,
53
67
  refreshToken,
54
68
  tokenType: tokenType || "Bearer"
55
- };
69
+ }
70
+
56
71
  if (sessionToken) {
57
- tokens.sessionToken = sessionToken;
72
+ tokens.sessionToken = sessionToken
58
73
  }
74
+
59
75
  if (expiresIn) {
60
- tokens.expiresIn = parseInt(expiresIn, 10);
76
+ tokens.expiresIn = parseInt(expiresIn, 10)
61
77
  }
62
- this._tokenClient.setTokens(tokens);
78
+
79
+ this._tokenClient.setTokens(tokens)
80
+
63
81
  // Clear hash from URL without reloading page
64
82
  if (window.history && window.history.replaceState) {
65
- const urlWithoutHash = window.location.pathname + window.location.search;
66
- window.history.replaceState(null, "", urlWithoutHash);
83
+ const urlWithoutHash = window.location.pathname + window.location.search
84
+ window.history.replaceState(null, "", urlWithoutHash)
67
85
  }
68
86
  }
87
+
69
88
  /**
70
89
  * @internal
71
90
  * Internal use only - not part of public API
72
91
  */
73
- get httpClient() {
74
- return this._httpClient;
92
+ get httpClient(): HttpClient {
93
+ return this._httpClient
75
94
  }
95
+
76
96
  /**
77
97
  * @internal
78
98
  * Internal use only - not part of public API
79
99
  */
80
- get tokenClient() {
81
- return this._tokenClient;
100
+ get tokenClient(): TokenClient {
101
+ return this._tokenClient
82
102
  }
83
- getConfig() {
84
- return { ...this.config };
103
+
104
+ getConfig(): Readonly<TaruviConfig> {
105
+ return { ...this.config }
85
106
  }
86
- }
87
- //# sourceMappingURL=client.js.map
107
+ }
package/src/index.ts ADDED
@@ -0,0 +1,54 @@
1
+ // Export main client
2
+ export { Client } from "./client.js"
3
+
4
+ // Export error classes
5
+ export { TaruviError, ValidationError, AuthError, ForbiddenError, NotFoundError, ConflictError, TimeoutError, NetworkError } from "./lib-internal/errors/index.js"
6
+ export { ErrorCode } from "./lib-internal/errors/index.js"
7
+ export type { ErrorResponseBody } from "./lib-internal/errors/index.js"
8
+
9
+ // Export public client classes
10
+ export { Auth } from "./lib/auth/AuthClient.js"
11
+ export { User } from "./lib/users/UserClient.js"
12
+ export { Storage } from "./lib/storage/StorageClient.js"
13
+ export { Database } from "./lib/database/DatabaseClient.js"
14
+ export { Settings } from "./lib/settings/SettingsClient.js"
15
+ export { Functions } from "./lib/functions/FunctionsClient.js"
16
+ export { Secrets } from "./lib/secrets/SecretsClient.js"
17
+ export { Policy } from "./lib/policy/PolicyClient.js"
18
+ export { App } from "./lib/app/AppClient.js"
19
+ export { Analytics } from "./lib/analytics/AnalyticsClient.js"
20
+ export { Graph } from "./lib/graphs/GraphClient.js"
21
+
22
+ // Export core types
23
+ export type { TaruviConfig, TaruviResponse, PaginationInfo, StorageFilters, DatabaseFilters } from "./types.js"
24
+ export type { AuthTokens } from "./lib-internal/token/TokenClient.js"
25
+
26
+ // User types
27
+ export type { UserCreateRequest, UserData, UserUpdateRequest, UserListFilters, UserApp, UserResponse, UserListResponse, UserAppsResponse, AssignRolesRequest, RevokeRolesRequest, RolesResponse, UserGroup, UserPermission, UserRole } from "./lib/users/types.js"
28
+
29
+ // Policy types
30
+ export type { Principal, Resource, Resources, PolicyCheckResult, PolicyCheckBatchResult, ResourceCheckResponse } from "./lib/policy/types.js"
31
+
32
+ // App types
33
+ export type { RoleData, AppSettingsData, RoleResponse, RolesListResponse, AppSettingsResponse } from "./lib/app/types.js"
34
+
35
+ // Function types
36
+ export type { FunctionRequest, FunctionResponse, FunctionInvocation } from "./lib/functions/types.js"
37
+
38
+ // Database types
39
+ export type { DatabaseRequest, DatabaseResponse, DatabaseSingleResponse, FilterOperator, SortOrder } from "./lib/database/types.js"
40
+
41
+ // Storage types
42
+ export type { StorageRequest, StorageUpdateRequest, StorageObject, StorageResponse, StorageListResponse, StorageUploadBatchResponse, StorageDeleteBatchResponse } from "./lib/storage/types.js"
43
+
44
+ // Settings types
45
+ export type { SiteSettingsData, SettingsResponse } from "./lib/settings/types.js"
46
+
47
+ // Secrets types
48
+ export type { SecretCreateRequest, SecretUpdateRequest, SecretData, SecretResponse, SecretsListResponse, SecretsBatchResponse, SecretsBatchMetadataResponse, GetSecretOptions, GetSecretsOptions } from "./lib/secrets/types.js"
49
+
50
+ // Analytics types
51
+ export type { AnalyticsRequest, AnalyticsResponse } from "./lib/analytics/types.js"
52
+
53
+ // Graph types
54
+ export type { GraphInclude, GraphFormat, GraphQueryParams, EdgeRequest, EdgeResponse, EdgeDeleteRequest } from "./lib/graphs/types.js"
@@ -0,0 +1,24 @@
1
+ import type { Client } from "../../client.js";
2
+ import type { TaruviConfig } from "../../types.js";
3
+ import type { AnalyticsRequest, AnalyticsResponse } from "./types.js";
4
+ import { AnalyticsRoutes } from "../../lib-internal/routes/AnalyticsRoutes.js";
5
+
6
+ export class Analytics {
7
+ private client: Client
8
+ private config: TaruviConfig
9
+
10
+ constructor(client: Client) {
11
+ this.client = client
12
+ this.config = this.client.getConfig()
13
+ }
14
+
15
+ async execute<T = unknown>(querySlug: string, options: AnalyticsRequest = {}): Promise<AnalyticsResponse<T>> {
16
+ const url = AnalyticsRoutes.baseUrl(this.config.appSlug, querySlug)
17
+
18
+ const body = {
19
+ params: options.params || {}
20
+ }
21
+
22
+ return await this.client.httpClient.post<AnalyticsResponse<T>>(url, body)
23
+ }
24
+ }
@@ -0,0 +1,8 @@
1
+ import type { TaruviResponse } from "../../types.js"
2
+
3
+ export interface AnalyticsRequest {
4
+ params?: Record<string, unknown>
5
+ }
6
+
7
+ // Response type - uses standard wrapper
8
+ export type AnalyticsResponse<T = unknown> = TaruviResponse<T>
@@ -0,0 +1,54 @@
1
+ import type { Client } from "../../client.js";
2
+ import { AppRoutes, type AppRouteKey } from "../../lib-internal/routes/AppRoutes.js";
3
+ import { HttpMethod } from "../../lib-internal/http/types.js";
4
+ import type { TaruviConfig } from "../../types.js";
5
+ import type { UrlParams } from "./types.js";
6
+
7
+ export class App {
8
+ private client: Client
9
+ private urlParams: UrlParams
10
+ private config: TaruviConfig
11
+ private operation: HttpMethod | undefined
12
+
13
+ constructor(client: Client, urlParams: UrlParams = {}, operation?: HttpMethod | undefined) {
14
+ this.client = client
15
+ this.urlParams = urlParams
16
+ this.operation = operation
17
+ this.config = this.client.getConfig()
18
+ }
19
+
20
+ roles() {
21
+ return new App(this.client, { ...this.urlParams, roles: "roles" }, HttpMethod.GET)
22
+ }
23
+
24
+ settings() {
25
+ return new App(this.client, {...this.urlParams, settings: "settings"}, HttpMethod.GET)
26
+ }
27
+
28
+ private buildRoute(): string {
29
+ return (
30
+ AppRoutes.baseUrl(this.config.appSlug) +
31
+ (Object.keys(this.urlParams) as AppRouteKey[]).reduce((acc, key) => {
32
+ const value = this.urlParams[key]
33
+ const routeBuilder = AppRoutes[key]
34
+
35
+ if (value && routeBuilder) {
36
+ acc += routeBuilder()
37
+ }
38
+
39
+ return acc
40
+ }, "")
41
+ )
42
+ }
43
+
44
+ async execute() {
45
+ const url = this.buildRoute()
46
+ const operation = this.operation || HttpMethod.GET
47
+
48
+ switch (operation) {
49
+ case HttpMethod.GET:
50
+ default:
51
+ return await this.client.httpClient.get(url)
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,50 @@
1
+ import type { Client } from "../../client.js"
2
+ import { HttpMethod } from "../../lib-internal/http/types.js"
3
+ import type { TaruviResponse } from "../../types.js"
4
+
5
+ export type AppOperation = HttpMethod
6
+
7
+ // Internal types
8
+ export interface UrlParams {
9
+ appSlug?: string
10
+ roles?: string
11
+ settings?: string
12
+ }
13
+
14
+ export interface AppClientInterface {
15
+ client: Client
16
+ urlParams?: UrlParams
17
+ }
18
+
19
+ // Role data
20
+ export interface RoleData {
21
+ id: string | number
22
+ name: string
23
+ slug: string
24
+ description?: string
25
+ permissions?: string[]
26
+ created_at?: string
27
+ updated_at?: string
28
+ }
29
+
30
+ // App settings data
31
+ export interface AppSettingsData {
32
+ display_name: string
33
+ icon: string | null
34
+ icon_url: string | null
35
+ primary_color: string
36
+ secondary_color: string
37
+ banner_image: string | null
38
+ banner_image_url: string | null
39
+ category: string
40
+ documentation_url: string | null
41
+ support_email: string | null
42
+ default_frontend_worker_url: string | null
43
+ created_at: string
44
+ updated_at: string
45
+ }
46
+
47
+ // Response types - uses standard wrapper
48
+ export type RoleResponse = TaruviResponse<RoleData>
49
+ export type RolesListResponse = TaruviResponse<RoleData[]>
50
+ export type AppSettingsResponse = TaruviResponse<AppSettingsData>
@@ -1,4 +1,8 @@
1
+ import type { Client } from "../../client.js";
2
+ import type { TaruviResponse } from "../../types.js";
3
+ import type { UserData } from "../users/types.js";
1
4
  import { UserRoutes } from "../../lib-internal/routes/UserRoutes.js";
5
+
2
6
  /**
3
7
  * Auth Client - Handles user authentication using Web UI Flow
4
8
  * Implements cross-domain authentication with redirect-based token delivery
@@ -10,109 +14,132 @@ import { UserRoutes } from "../../lib-internal/routes/UserRoutes.js";
10
14
  * 4. Client extracts and stores tokens automatically
11
15
  */
12
16
  export class Auth {
13
- client;
14
- constructor(client) {
15
- this.client = client;
17
+ private client: Client
18
+
19
+ constructor(client: Client) {
20
+ this.client = client
16
21
  }
22
+
17
23
  /**
18
24
  * Redirect to login page (Web UI Flow)
19
25
  * @param callbackUrl - URL to redirect to after successful login (defaults to current page)
20
26
  */
21
- login(callbackUrl) {
27
+ login(callbackUrl?: string): void {
22
28
  if (typeof window === "undefined") {
23
- console.error("login() can only be called in browser environment");
24
- return;
29
+ console.error("login() can only be called in browser environment")
30
+ return
25
31
  }
26
- const config = this.client.getConfig();
27
- const callback = callbackUrl || window.location.origin + window.location.pathname;
28
- const deskUrl = config.deskUrl || config.baseUrl;
32
+
33
+ const config = this.client.getConfig()
34
+ const callback = callbackUrl || window.location.origin + window.location.pathname
35
+ const deskUrl = config.deskUrl || config.apiUrl
36
+
29
37
  // Redirect to /accounts/login/ with redirect_to parameter
30
- const loginUrl = `${deskUrl}/accounts/login/?redirect_to=${encodeURIComponent(callback)}`;
38
+ const loginUrl = `${deskUrl}/accounts/login/?redirect_to=${encodeURIComponent(callback)}`
39
+
31
40
  // Optional: Store state before redirecting
32
41
  if (typeof sessionStorage !== "undefined") {
33
42
  sessionStorage.setItem("auth_state", JSON.stringify({
34
43
  returnTo: window.location.pathname,
35
44
  timestamp: Date.now()
36
- }));
45
+ }))
37
46
  }
38
- window.location.href = loginUrl;
47
+
48
+ window.location.href = loginUrl
39
49
  }
50
+
40
51
  /**
41
52
  * Redirect to signup page (Web UI Flow)
42
53
  * @param callbackUrl - URL to redirect to after successful signup (defaults to current page)
43
54
  */
44
- signup(callbackUrl) {
55
+ signup(callbackUrl?: string): void {
45
56
  if (typeof window === "undefined") {
46
- console.error("signup() can only be called in browser environment");
47
- return;
57
+ console.error("signup() can only be called in browser environment")
58
+ return
48
59
  }
49
- const config = this.client.getConfig();
50
- const callback = callbackUrl || window.location.origin + window.location.pathname;
60
+
61
+ const config = this.client.getConfig()
62
+ const callback = callbackUrl || window.location.origin + window.location.pathname
63
+
51
64
  // Redirect to /accounts/signup/ with redirect_to parameter
52
- const signupUrl = `${config.baseUrl}/accounts/signup/?redirect_to=${encodeURIComponent(callback)}`;
65
+ const signupUrl = `${config.apiUrl}/accounts/signup/?redirect_to=${encodeURIComponent(callback)}`
66
+
53
67
  // Optional: Store state before redirecting
54
68
  if (typeof sessionStorage !== "undefined") {
55
69
  sessionStorage.setItem("auth_state", JSON.stringify({
56
70
  returnTo: window.location.pathname,
57
71
  timestamp: Date.now()
58
- }));
72
+ }))
59
73
  }
60
- window.location.href = signupUrl;
74
+
75
+ window.location.href = signupUrl
61
76
  }
77
+
62
78
  /**
63
79
  * Logout user and redirect to logout page
64
80
  * Fetches frontendUrl from site settings for redirect
65
81
  * @param callbackUrl - URL to redirect to after logout (overrides frontendUrl from settings)
66
82
  */
67
- async logout(callbackUrl) {
83
+ async logout(callbackUrl?: string): Promise<void> {
68
84
  if (typeof window === "undefined") {
69
- console.error("logout() can only be called in browser environment");
70
- return;
85
+ console.error("logout() can only be called in browser environment")
86
+ return
71
87
  }
88
+
72
89
  // Clear tokens immediately
73
- this.client.tokenClient.clearTokens();
74
- const config = this.client.getConfig();
75
- const deskUrl = config.deskUrl || config.baseUrl;
76
- let callback = callbackUrl || "";
90
+ this.client.tokenClient.clearTokens()
91
+
92
+ const config = this.client.getConfig()
93
+ const deskUrl = config.deskUrl || config.apiUrl
94
+ let callback: string = callbackUrl || ""
95
+
77
96
  // If no callback provided, fetch frontendUrl from site settings
78
97
  if (!callback) {
79
98
  try {
80
- const settings = await this.client.httpClient.get(`api/sites/${config.appSlug}/metadata`);
81
- callback = settings.frontend_url || window.location.origin;
82
- }
83
- catch (error) {
84
- console.error("Failed to fetch site settings, using origin:", error);
85
- callback = window.location.origin;
99
+ const settings = await this.client.httpClient.get<{ frontend_url?: string }>(
100
+ `api/sites/${config.appSlug}/metadata`
101
+ )
102
+ callback = settings.frontend_url || window.location.origin
103
+ } catch (error) {
104
+ console.error("Failed to fetch site settings, using origin:", error)
105
+ callback = window.location.origin
86
106
  }
87
107
  }
108
+
88
109
  // Redirect to /accounts/logout/
89
- const logoutUrl = `${deskUrl}/accounts/logout/?redirect_to=${encodeURIComponent(callback)}`;
90
- window.location.href = logoutUrl;
110
+ const logoutUrl = `${deskUrl}/accounts/logout/?redirect_to=${encodeURIComponent(callback)}`
111
+
112
+ window.location.href = logoutUrl
91
113
  }
114
+
92
115
  /**
93
116
  * Check if user is authenticated
94
117
  */
95
- isUserAuthenticated() {
96
- return this.client.tokenClient.isAuthenticated();
118
+ isUserAuthenticated(): boolean {
119
+ return this.client.tokenClient.isAuthenticated()
97
120
  }
121
+
98
122
  /**
99
123
  * Get the current access token
100
124
  */
101
- getAccessToken() {
102
- return this.client.tokenClient.getToken();
125
+ getAccessToken(): string | null {
126
+ return this.client.tokenClient.getToken()
103
127
  }
128
+
104
129
  /**
105
130
  * Get the current refresh token
106
131
  */
107
- getRefreshToken() {
108
- return this.client.tokenClient.getRefreshToken();
132
+ getRefreshToken(): string | null {
133
+ return this.client.tokenClient.getRefreshToken()
109
134
  }
135
+
110
136
  /**
111
137
  * Check if the access token is expired
112
138
  */
113
- isTokenExpired() {
114
- return this.client.tokenClient.isTokenExpired();
139
+ isTokenExpired(): boolean {
140
+ return this.client.tokenClient.isTokenExpired()
115
141
  }
142
+
116
143
  /**
117
144
  * Refresh the access token using the refresh token
118
145
  * ⚠️ IMPORTANT: Taruvi uses refresh token rotation
@@ -120,59 +147,68 @@ export class Auth {
120
147
  *
121
148
  * @returns Promise with new tokens or null if refresh failed
122
149
  */
123
- async refreshAccessToken() {
124
- const refreshToken = this.client.tokenClient.getRefreshToken();
150
+ async refreshAccessToken(): Promise<{ access: string; refresh: string; expires_in: number } | null> {
151
+ const refreshToken = this.client.tokenClient.getRefreshToken()
152
+
125
153
  if (!refreshToken) {
126
- console.error("No refresh token available");
127
- return null;
154
+ console.error("No refresh token available")
155
+ return null
128
156
  }
157
+
129
158
  try {
130
- const config = this.client.getConfig();
131
- const response = await fetch(`${config.baseUrl}/api/cloud/auth/jwt/token/refresh/`, {
159
+ const config = this.client.getConfig()
160
+ const response = await fetch(`${config.apiUrl}/api/cloud/auth/jwt/token/refresh/`, {
132
161
  method: "POST",
133
162
  headers: { "Content-Type": "application/json" },
134
163
  body: JSON.stringify({ refresh: refreshToken })
135
- });
164
+ })
165
+
136
166
  if (!response.ok) {
137
- throw new Error(`Token refresh failed: ${response.statusText}`);
167
+ throw new Error(`Token refresh failed: ${response.statusText}`)
138
168
  }
139
- const data = await response.json();
169
+
170
+ const data = await response.json()
171
+
140
172
  // Update tokens in storage (both access and refresh due to rotation)
141
- this.client.tokenClient.updateAccessToken(data.access, data.expires_in || 172800);
173
+ this.client.tokenClient.updateAccessToken(data.access, data.expires_in || 172800)
174
+
142
175
  if (data.refresh) {
143
- this.client.tokenClient.updateRefreshToken(data.refresh);
176
+ this.client.tokenClient.updateRefreshToken(data.refresh)
144
177
  }
178
+
145
179
  return {
146
180
  access: data.access,
147
181
  refresh: data.refresh || refreshToken,
148
182
  expires_in: data.expires_in || 172800
149
- };
150
- }
151
- catch (error) {
152
- console.error("Failed to refresh access token:", error);
183
+ }
184
+ } catch (error) {
185
+ console.error("Failed to refresh access token:", error)
186
+
153
187
  // Clear tokens and redirect to login
154
- this.client.tokenClient.clearTokens();
188
+ this.client.tokenClient.clearTokens()
189
+
155
190
  if (typeof window !== "undefined") {
156
- this.login();
191
+ this.login()
157
192
  }
158
- return null;
193
+
194
+ return null
159
195
  }
160
196
  }
197
+
161
198
  /**
162
199
  * Get current user from API
163
200
  * @returns Promise with user data or null if not authenticated
164
201
  */
165
- async getCurrentUser() {
202
+ async getCurrentUser(): Promise<TaruviResponse<UserData> | null> {
166
203
  if (!this.isUserAuthenticated()) {
167
- return null;
204
+ return null
168
205
  }
206
+
169
207
  try {
170
- return await this.client.httpClient.get(UserRoutes.getCurrentUser());
171
- }
172
- catch (error) {
173
- console.error("Failed to fetch current user:", error);
174
- return null;
208
+ return await this.client.httpClient.get<TaruviResponse<UserData>>(UserRoutes.getCurrentUser())
209
+ } catch (error) {
210
+ console.error("Failed to fetch current user:", error)
211
+ return null
175
212
  }
176
213
  }
177
- }
178
- //# sourceMappingURL=AuthClient.js.map
214
+ }