@nurama/sdk 0.0.0-stage → 1.4.1

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 (225) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1080 -2
  4. package/dist/BotClient.d.ts +66 -0
  5. package/dist/BotClient.d.ts.map +1 -0
  6. package/dist/BotClient.js +68 -0
  7. package/dist/BotClient.js.map +1 -0
  8. package/dist/NuramaClient.d.ts +480 -0
  9. package/dist/NuramaClient.d.ts.map +1 -0
  10. package/dist/NuramaClient.js +902 -0
  11. package/dist/NuramaClient.js.map +1 -0
  12. package/dist/browser/nurama-bot-sdk.js +12051 -0
  13. package/dist/browser/nurama-bot-sdk.min.js +1 -0
  14. package/dist/browser/nurama-sdk.js +12003 -0
  15. package/dist/browser/nurama-sdk.min.js +1 -0
  16. package/dist/routes/ai.d.ts +280 -0
  17. package/dist/routes/ai.d.ts.map +1 -0
  18. package/dist/routes/ai.js +173 -0
  19. package/dist/routes/ai.js.map +1 -0
  20. package/dist/routes/asset.d.ts +493 -0
  21. package/dist/routes/asset.d.ts.map +1 -0
  22. package/dist/routes/asset.js +848 -0
  23. package/dist/routes/asset.js.map +1 -0
  24. package/dist/routes/auth.d.ts +218 -0
  25. package/dist/routes/auth.d.ts.map +1 -0
  26. package/dist/routes/auth.js +454 -0
  27. package/dist/routes/auth.js.map +1 -0
  28. package/dist/routes/blogPosts.d.ts +17 -0
  29. package/dist/routes/blogPosts.d.ts.map +1 -0
  30. package/dist/routes/blogPosts.js +29 -0
  31. package/dist/routes/blogPosts.js.map +1 -0
  32. package/dist/routes/board.d.ts +187 -0
  33. package/dist/routes/board.d.ts.map +1 -0
  34. package/dist/routes/board.js +270 -0
  35. package/dist/routes/board.js.map +1 -0
  36. package/dist/routes/bot.d.ts +202 -0
  37. package/dist/routes/bot.d.ts.map +1 -0
  38. package/dist/routes/bot.js +229 -0
  39. package/dist/routes/bot.js.map +1 -0
  40. package/dist/routes/chat.d.ts +842 -0
  41. package/dist/routes/chat.d.ts.map +1 -0
  42. package/dist/routes/chat.js +863 -0
  43. package/dist/routes/chat.js.map +1 -0
  44. package/dist/routes/chatAi.d.ts +51 -0
  45. package/dist/routes/chatAi.d.ts.map +1 -0
  46. package/dist/routes/chatAi.js +109 -0
  47. package/dist/routes/chatAi.js.map +1 -0
  48. package/dist/routes/config.d.ts +11 -0
  49. package/dist/routes/config.d.ts.map +1 -0
  50. package/dist/routes/config.js +24 -0
  51. package/dist/routes/config.js.map +1 -0
  52. package/dist/routes/convo.d.ts +169 -0
  53. package/dist/routes/convo.d.ts.map +1 -0
  54. package/dist/routes/convo.js +284 -0
  55. package/dist/routes/convo.js.map +1 -0
  56. package/dist/routes/credits.d.ts +82 -0
  57. package/dist/routes/credits.d.ts.map +1 -0
  58. package/dist/routes/credits.js +49 -0
  59. package/dist/routes/credits.js.map +1 -0
  60. package/dist/routes/device.d.ts +74 -0
  61. package/dist/routes/device.d.ts.map +1 -0
  62. package/dist/routes/device.js +122 -0
  63. package/dist/routes/device.js.map +1 -0
  64. package/dist/routes/folder.d.ts +75 -0
  65. package/dist/routes/folder.d.ts.map +1 -0
  66. package/dist/routes/folder.js +99 -0
  67. package/dist/routes/folder.js.map +1 -0
  68. package/dist/routes/invite.d.ts +61 -0
  69. package/dist/routes/invite.d.ts.map +1 -0
  70. package/dist/routes/invite.js +86 -0
  71. package/dist/routes/invite.js.map +1 -0
  72. package/dist/routes/joinLink.d.ts +88 -0
  73. package/dist/routes/joinLink.d.ts.map +1 -0
  74. package/dist/routes/joinLink.js +205 -0
  75. package/dist/routes/joinLink.js.map +1 -0
  76. package/dist/routes/membership.d.ts +116 -0
  77. package/dist/routes/membership.d.ts.map +1 -0
  78. package/dist/routes/membership.js +183 -0
  79. package/dist/routes/membership.js.map +1 -0
  80. package/dist/routes/notification.d.ts +103 -0
  81. package/dist/routes/notification.d.ts.map +1 -0
  82. package/dist/routes/notification.js +89 -0
  83. package/dist/routes/notification.js.map +1 -0
  84. package/dist/routes/oauthGrant.d.ts +45 -0
  85. package/dist/routes/oauthGrant.d.ts.map +1 -0
  86. package/dist/routes/oauthGrant.js +32 -0
  87. package/dist/routes/oauthGrant.js.map +1 -0
  88. package/dist/routes/payment.d.ts +56 -0
  89. package/dist/routes/payment.d.ts.map +1 -0
  90. package/dist/routes/payment.js +78 -0
  91. package/dist/routes/payment.js.map +1 -0
  92. package/dist/routes/product.d.ts +43 -0
  93. package/dist/routes/product.d.ts.map +1 -0
  94. package/dist/routes/product.js +53 -0
  95. package/dist/routes/product.js.map +1 -0
  96. package/dist/routes/project.d.ts +821 -0
  97. package/dist/routes/project.d.ts.map +1 -0
  98. package/dist/routes/project.js +1153 -0
  99. package/dist/routes/project.js.map +1 -0
  100. package/dist/routes/public.d.ts +269 -0
  101. package/dist/routes/public.d.ts.map +1 -0
  102. package/dist/routes/public.js +412 -0
  103. package/dist/routes/public.js.map +1 -0
  104. package/dist/routes/scratch.d.ts +70 -0
  105. package/dist/routes/scratch.d.ts.map +1 -0
  106. package/dist/routes/scratch.js +67 -0
  107. package/dist/routes/scratch.js.map +1 -0
  108. package/dist/routes/settings.d.ts +102 -0
  109. package/dist/routes/settings.d.ts.map +1 -0
  110. package/dist/routes/settings.js +94 -0
  111. package/dist/routes/settings.js.map +1 -0
  112. package/dist/routes/shortlink.d.ts +79 -0
  113. package/dist/routes/shortlink.d.ts.map +1 -0
  114. package/dist/routes/shortlink.js +25 -0
  115. package/dist/routes/shortlink.js.map +1 -0
  116. package/dist/routes/socket.d.ts +108 -0
  117. package/dist/routes/socket.d.ts.map +1 -0
  118. package/dist/routes/socket.js +573 -0
  119. package/dist/routes/socket.js.map +1 -0
  120. package/dist/routes/storage.d.ts +44 -0
  121. package/dist/routes/storage.d.ts.map +1 -0
  122. package/dist/routes/storage.js +49 -0
  123. package/dist/routes/storage.js.map +1 -0
  124. package/dist/routes/subscription.d.ts +184 -0
  125. package/dist/routes/subscription.d.ts.map +1 -0
  126. package/dist/routes/subscription.js +219 -0
  127. package/dist/routes/subscription.js.map +1 -0
  128. package/dist/routes/supportChat.d.ts +40 -0
  129. package/dist/routes/supportChat.d.ts.map +1 -0
  130. package/dist/routes/supportChat.js +53 -0
  131. package/dist/routes/supportChat.js.map +1 -0
  132. package/dist/routes/supportTicket.d.ts +89 -0
  133. package/dist/routes/supportTicket.d.ts.map +1 -0
  134. package/dist/routes/supportTicket.js +54 -0
  135. package/dist/routes/supportTicket.js.map +1 -0
  136. package/dist/routes/tag.d.ts +72 -0
  137. package/dist/routes/tag.d.ts.map +1 -0
  138. package/dist/routes/tag.js +81 -0
  139. package/dist/routes/tag.js.map +1 -0
  140. package/dist/routes/task.d.ts +252 -0
  141. package/dist/routes/task.d.ts.map +1 -0
  142. package/dist/routes/task.js +284 -0
  143. package/dist/routes/task.js.map +1 -0
  144. package/dist/routes/taskRelation.d.ts +80 -0
  145. package/dist/routes/taskRelation.d.ts.map +1 -0
  146. package/dist/routes/taskRelation.js +71 -0
  147. package/dist/routes/taskRelation.js.map +1 -0
  148. package/dist/routes/token.d.ts +97 -0
  149. package/dist/routes/token.d.ts.map +1 -0
  150. package/dist/routes/token.js +73 -0
  151. package/dist/routes/token.js.map +1 -0
  152. package/dist/routes/user.d.ts +112 -0
  153. package/dist/routes/user.d.ts.map +1 -0
  154. package/dist/routes/user.js +151 -0
  155. package/dist/routes/user.js.map +1 -0
  156. package/dist/routes/version.d.ts +42 -0
  157. package/dist/routes/version.d.ts.map +1 -0
  158. package/dist/routes/version.js +38 -0
  159. package/dist/routes/version.js.map +1 -0
  160. package/dist/routes/webhook.d.ts +170 -0
  161. package/dist/routes/webhook.d.ts.map +1 -0
  162. package/dist/routes/webhook.js +173 -0
  163. package/dist/routes/webhook.js.map +1 -0
  164. package/dist/routes/workspace.d.ts +120 -0
  165. package/dist/routes/workspace.d.ts.map +1 -0
  166. package/dist/routes/workspace.js +199 -0
  167. package/dist/routes/workspace.js.map +1 -0
  168. package/dist/utils/uploadSessionManager.d.ts +133 -0
  169. package/dist/utils/uploadSessionManager.d.ts.map +1 -0
  170. package/dist/utils/uploadSessionManager.js +321 -0
  171. package/dist/utils/uploadSessionManager.js.map +1 -0
  172. package/dist/utils/urlParams.d.ts +35 -0
  173. package/dist/utils/urlParams.d.ts.map +1 -0
  174. package/dist/utils/urlParams.js +146 -0
  175. package/dist/utils/urlParams.js.map +1 -0
  176. package/dist/version.d.ts +15 -0
  177. package/dist/version.d.ts.map +1 -0
  178. package/dist/version.js +12 -0
  179. package/dist/version.js.map +1 -0
  180. package/package.json +87 -3
  181. package/src/BotClient.ts +113 -0
  182. package/src/NuramaClient.ts +1253 -0
  183. package/src/bot-browser-entry.js +15 -0
  184. package/src/browser-entry.js +20 -0
  185. package/src/routes/ai.ts +378 -0
  186. package/src/routes/asset.ts +1104 -0
  187. package/src/routes/auth.ts +587 -0
  188. package/src/routes/blogPosts.ts +29 -0
  189. package/src/routes/board.ts +403 -0
  190. package/src/routes/bot.ts +356 -0
  191. package/src/routes/chat.ts +1292 -0
  192. package/src/routes/chatAi.ts +125 -0
  193. package/src/routes/config.ts +31 -0
  194. package/src/routes/convo.ts +321 -0
  195. package/src/routes/credits.ts +112 -0
  196. package/src/routes/device.ts +133 -0
  197. package/src/routes/folder.ts +154 -0
  198. package/src/routes/invite.ts +133 -0
  199. package/src/routes/joinLink.ts +233 -0
  200. package/src/routes/membership.ts +237 -0
  201. package/src/routes/notification.ts +166 -0
  202. package/src/routes/oauthGrant.ts +64 -0
  203. package/src/routes/payment.ts +104 -0
  204. package/src/routes/product.ts +67 -0
  205. package/src/routes/project.ts +1528 -0
  206. package/src/routes/public.ts +496 -0
  207. package/src/routes/scratch.ts +94 -0
  208. package/src/routes/settings.ts +152 -0
  209. package/src/routes/shortlink.ts +90 -0
  210. package/src/routes/socket.ts +757 -0
  211. package/src/routes/storage.ts +83 -0
  212. package/src/routes/subscription.ts +307 -0
  213. package/src/routes/supportChat.ts +62 -0
  214. package/src/routes/supportTicket.ts +114 -0
  215. package/src/routes/tag.ts +131 -0
  216. package/src/routes/task.ts +431 -0
  217. package/src/routes/taskRelation.ts +125 -0
  218. package/src/routes/token.ts +152 -0
  219. package/src/routes/user.ts +214 -0
  220. package/src/routes/version.ts +62 -0
  221. package/src/routes/webhook.ts +295 -0
  222. package/src/routes/workspace.ts +223 -0
  223. package/src/utils/uploadSessionManager.ts +407 -0
  224. package/src/utils/urlParams.ts +181 -0
  225. package/src/version.ts +22 -0
@@ -0,0 +1,454 @@
1
+ /**
2
+ * Defines authentication-related methods for the NuramaClient.
3
+ * @param {NuramaClient} client - The NuramaClient instance.
4
+ * @returns {object} An object containing the authentication methods.
5
+ */
6
+ export default function createAuthMethods(client) {
7
+ // Specify return type more accurately if possible, using AuthMethods interface
8
+ return {
9
+ /**
10
+ * Registers a new user.
11
+ * @param userData - User registration data.
12
+ * @returns {Promise<object>} Object containing user info and tokens.
13
+ */
14
+ async register(userData) {
15
+ const result = await client._request({
16
+ endpoint: "/v1/auth/register",
17
+ method: "POST",
18
+ body: userData,
19
+ sendJWT: false,
20
+ });
21
+ // Store tokens upon successful registration
22
+ if (result &&
23
+ result.tokens &&
24
+ result.tokens.access &&
25
+ result.tokens.refresh) {
26
+ // Accessing the private _setTokens - might need adjustment if visibility changes
27
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
28
+ }
29
+ else {
30
+ console.warn("Register response did not contain expected tokens.");
31
+ }
32
+ return result;
33
+ },
34
+ /**
35
+ * Logs in a user.
36
+ * @param credentials - Login credentials.
37
+ * @returns {Promise<object>} Object containing user info and tokens (or MFA challenge token).
38
+ */
39
+ async login(credentials) {
40
+ const result /* | MFAChallengeResponse */ = await client._request({
41
+ endpoint: "/v1/auth/login",
42
+ method: "POST",
43
+ body: credentials,
44
+ sendJWT: false,
45
+ });
46
+ // Store tokens upon successful login
47
+ if (result &&
48
+ "tokens" in result &&
49
+ result.tokens &&
50
+ result.tokens.access &&
51
+ result.tokens.refresh) {
52
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
53
+ }
54
+ else if (result &&
55
+ "tokens" in result &&
56
+ result.tokens &&
57
+ result.tokens.verifyMfa) {
58
+ // MFA Challenge - store the verifyMfa token for verification
59
+ client._setTokens(null, null);
60
+ client._setVerifyMfaToken(result.tokens.verifyMfa.token);
61
+ }
62
+ else {
63
+ console.warn("Login response did not contain expected tokens or MFA challenge.");
64
+ client._setTokens(null, null);
65
+ }
66
+ return result;
67
+ },
68
+ /**
69
+ * Logs out a user.
70
+ * @param refreshToken - The refresh token to invalidate.
71
+ * @returns {Promise<void>}
72
+ */
73
+ async logout(refreshToken) {
74
+ // Get the refresh token *before* potentially clearing it
75
+ const tokenToInvalidate = refreshToken || client._getRefreshToken();
76
+ if (tokenToInvalidate) {
77
+ try {
78
+ await client._request({
79
+ endpoint: "/v1/auth/logout",
80
+ method: "POST",
81
+ body: { refreshToken: tokenToInvalidate },
82
+ sendJWT: false, // Logout might not need JWT, depends on API
83
+ });
84
+ }
85
+ catch (error) {
86
+ // Ignore errors - token may already be invalid/deleted
87
+ // The goal is to clear local tokens regardless
88
+ console.warn('Logout API call failed, but clearing local tokens:', error);
89
+ }
90
+ }
91
+ // Clear tokens locally regardless of API call success/failure
92
+ client._setTokens(null, null);
93
+ },
94
+ /**
95
+ * Refreshes user tokens.
96
+ * @param refreshToken - The refresh token.
97
+ * @returns {Promise<object>} Object containing new access and refresh tokens.
98
+ */
99
+ async refreshTokens(refreshToken) {
100
+ const tokenToUse = refreshToken || client._getRefreshToken();
101
+ if (!tokenToUse) {
102
+ throw new Error("No refresh token provided or found in client storage.");
103
+ }
104
+ const result = await client._request({
105
+ endpoint: "/v1/auth/refresh-tokens",
106
+ method: "POST",
107
+ body: { refreshToken: tokenToUse },
108
+ sendJWT: false, // Refresh endpoint uses the refresh token, not the access token
109
+ _isInternalRefresh: true, // Mark as internal to prevent recursive refresh loop if called by _request
110
+ });
111
+ // Store the *new* tokens
112
+ if (result && result.access && result.refresh) {
113
+ client._setTokens(result.access.token, result.refresh.token, result.access.expires, result.refresh.expires);
114
+ }
115
+ else {
116
+ console.warn("Refresh response did not contain expected tokens.");
117
+ // Clear tokens if refresh failed to return new ones
118
+ client._setTokens(null, null);
119
+ }
120
+ return result;
121
+ },
122
+ /**
123
+ * Forgets a user's password.
124
+ * @param email - The user's email address.
125
+ * @returns {Promise<void>}
126
+ */
127
+ async forgotPassword(email) {
128
+ await client._request({
129
+ // Specify void return type
130
+ endpoint: "/v1/auth/forgot-password",
131
+ method: "POST",
132
+ body: { email },
133
+ sendJWT: false, // Usually doesn't require JWT
134
+ });
135
+ },
136
+ /**
137
+ * Resets a user's password.
138
+ * @param params - Input parameters.
139
+ * @param params.token - The password reset token.
140
+ * @param params.password - The new password.
141
+ * @returns Promise resolving when complete.
142
+ */
143
+ async resetPassword({ token, password }) {
144
+ await client._request({
145
+ // Specify void return type
146
+ endpoint: "/v1/auth/reset-password",
147
+ method: "POST",
148
+ body: { token, password },
149
+ sendJWT: false, // Token is the authentication here
150
+ });
151
+ },
152
+ /**
153
+ * Sends a verification email to the authenticated user.
154
+ * @returns Promise resolving when complete.
155
+ */
156
+ async sendVerificationEmail() {
157
+ await client._request({
158
+ // Specify void return type
159
+ endpoint: "/v1/auth/send-verification-email",
160
+ method: "POST",
161
+ sendJWT: true,
162
+ });
163
+ },
164
+ /**
165
+ * Public, unauthenticated resend of the verification email keyed by
166
+ * address. For users past the verification grace window who can't log
167
+ * in or call the authed sendVerificationEmail. Always resolves (the
168
+ * server returns 204 regardless of whether the email exists).
169
+ * @param email - The email address to resend the verification link to.
170
+ */
171
+ async resendVerification(email) {
172
+ await client._request({
173
+ endpoint: "/v1/auth/resend-verification",
174
+ method: "POST",
175
+ body: { email },
176
+ sendJWT: false,
177
+ });
178
+ },
179
+ /**
180
+ * Verifies a user's email using the provided token.
181
+ * @param token - The email verification token.
182
+ * @returns Promise resolving when complete.
183
+ */
184
+ async verifyEmail(token) {
185
+ await client._request({
186
+ // Specify void return type
187
+ endpoint: `/v1/auth/verify-email?token=${encodeURIComponent(token)}`,
188
+ method: "POST",
189
+ sendJWT: false, // Token is the authentication here
190
+ });
191
+ },
192
+ /**
193
+ * Enables multi-factor authentication for the authenticated user.
194
+ * @returns Promise resolving to MFA setup details (secret, OTP URL, backup codes).
195
+ */
196
+ async enableMfa() {
197
+ return client._request({
198
+ endpoint: "/v1/auth/enable-mfa",
199
+ method: "POST",
200
+ sendJWT: true,
201
+ });
202
+ },
203
+ /**
204
+ * Verifies an MFA token (e.g., TOTP code).
205
+ * This is used both during initial MFA setup and during login challenges.
206
+ * @param mfaToken - The MFA token code.
207
+ * @returns Promise resolving to user/token data upon successful verification.
208
+ */
209
+ async verifyMfa(mfaToken) {
210
+ // Response can be full login data (if completing challenge) or just user data (if setting up)
211
+ // Check if we have a verifyMfa token from login (for login challenge)
212
+ const verifyMfaToken = client._getVerifyMfaToken();
213
+ const requestOptions = {
214
+ endpoint: "/v1/auth/verify-mfa",
215
+ method: "POST",
216
+ body: { mfaToken },
217
+ };
218
+ if (verifyMfaToken) {
219
+ // During MFA login challenge - use the verifyMfa token
220
+ requestOptions.sendJWT = false;
221
+ requestOptions.customHeaders = {
222
+ 'Authorization': `Bearer ${verifyMfaToken}`
223
+ };
224
+ }
225
+ else {
226
+ // During MFA setup - use regular access token
227
+ requestOptions.sendJWT = true;
228
+ }
229
+ const result = await client._request(requestOptions);
230
+ // If login challenge was completed, set the new tokens and clear verifyMfa token
231
+ if (result && result.tokens?.access) {
232
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
233
+ // Clear the verifyMfa token as it's no longer needed
234
+ client._setVerifyMfaToken(null);
235
+ }
236
+ return result;
237
+ },
238
+ /**
239
+ * Verifies an MFA backup code.
240
+ * This is used during login when a user has lost access to their authenticator app.
241
+ * @param backupCode - The backup code (8-character hex string).
242
+ * @returns Promise resolving to user/token data upon successful verification.
243
+ */
244
+ async verifyBackupCode(backupCode) {
245
+ // Check if we have a verifyMfa token from login (for login challenge)
246
+ const verifyMfaToken = client._getVerifyMfaToken();
247
+ const requestOptions = {
248
+ endpoint: "/v1/auth/verify-backup-code",
249
+ method: "POST",
250
+ body: { backupCode },
251
+ };
252
+ if (verifyMfaToken) {
253
+ // During MFA login challenge - use the verifyMfa token
254
+ requestOptions.sendJWT = false;
255
+ requestOptions.customHeaders = {
256
+ 'Authorization': `Bearer ${verifyMfaToken}`
257
+ };
258
+ }
259
+ else {
260
+ // During MFA setup - use regular access token
261
+ requestOptions.sendJWT = true;
262
+ }
263
+ const result = await client._request(requestOptions);
264
+ // If login challenge was completed, set the new tokens and clear verifyMfa token
265
+ if (result && result.tokens?.access) {
266
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
267
+ // Clear the verifyMfa token as it's no longer needed
268
+ client._setVerifyMfaToken(null);
269
+ }
270
+ return result;
271
+ },
272
+ /**
273
+ * Disables multi-factor authentication for the authenticated user.
274
+ * Requires a current valid MFA token for confirmation.
275
+ * @param mfaToken - The current MFA token code.
276
+ * @returns Promise resolving when complete.
277
+ */
278
+ async disableMfa(mfaToken) {
279
+ await client._request({
280
+ // Specify void return type
281
+ endpoint: "/v1/auth/disable-mfa",
282
+ method: "POST",
283
+ body: { mfaToken }, // Use interface for body
284
+ sendJWT: true,
285
+ });
286
+ },
287
+ /**
288
+ * Changes the authenticated user's password.
289
+ * Requires current password verification and MFA token if MFA is enabled.
290
+ * All refresh tokens will be invalidated after password change.
291
+ * @param currentPassword - The current password for verification.
292
+ * @param newPassword - The new password.
293
+ * @param mfaToken - MFA token (required if MFA is enabled).
294
+ * @returns Promise resolving when complete.
295
+ */
296
+ async changePassword(currentPassword, newPassword, mfaToken) {
297
+ await client._request({
298
+ endpoint: "/v1/auth/change-password",
299
+ method: "POST",
300
+ body: { currentPassword, newPassword, mfaToken },
301
+ sendJWT: true,
302
+ });
303
+ // Clear local tokens since all sessions are invalidated
304
+ client._setTokens(null, null);
305
+ },
306
+ /**
307
+ * Locks a user account using a lock account token.
308
+ * This is used when a user receives a password changed notification
309
+ * for a change they did not initiate, allowing them to immediately
310
+ * secure their account.
311
+ * @param token - The lock account token from the password changed email.
312
+ * @returns Promise resolving when the account is locked.
313
+ */
314
+ async lockAccount(token) {
315
+ await client._request({
316
+ endpoint: "/v1/auth/lock-account",
317
+ method: "POST",
318
+ body: { token },
319
+ sendJWT: false, // Token is the authentication here
320
+ });
321
+ // Clear local tokens since the account is now locked
322
+ client._setTokens(null, null);
323
+ },
324
+ /**
325
+ * Sets a password for an OAuth-only user account.
326
+ * This allows OAuth users to add local authentication as a backup.
327
+ * @param password - The password to set.
328
+ * @param mfaToken - MFA token (required if MFA is enabled).
329
+ * @returns Promise resolving when complete.
330
+ */
331
+ async setPassword(password, mfaToken) {
332
+ await client._request({
333
+ endpoint: "/v1/auth/set-password",
334
+ method: "POST",
335
+ body: { password, mfaToken },
336
+ sendJWT: true,
337
+ });
338
+ },
339
+ /**
340
+ * Links an OAuth provider to the authenticated user's account.
341
+ * This allows users to sign in with multiple OAuth providers.
342
+ * @param provider - The OAuth provider to link (google, apple, microsoft, adobe).
343
+ * @returns Promise resolving to user data with updated linked providers.
344
+ */
345
+ async linkOAuthProvider(provider) {
346
+ const result = await client._request({
347
+ endpoint: `/v1/auth/${provider}/link`,
348
+ method: "POST",
349
+ sendJWT: true,
350
+ });
351
+ return result;
352
+ },
353
+ /**
354
+ * Unlinks an OAuth provider from the authenticated user's account.
355
+ * User must have at least one authentication method remaining (password or another OAuth provider).
356
+ * @param provider - The OAuth provider to unlink (google, apple, microsoft, adobe).
357
+ * @returns Promise resolving when complete.
358
+ */
359
+ async unlinkOAuthProvider(provider) {
360
+ await client._request({
361
+ endpoint: `/v1/auth/oauth/${provider}/unlink`,
362
+ method: "DELETE",
363
+ sendJWT: true,
364
+ });
365
+ },
366
+ /**
367
+ * Gets all OAuth providers linked to the authenticated user's account.
368
+ * @returns Promise resolving to array of linked OAuth providers.
369
+ */
370
+ async getLinkedOAuthProviders() {
371
+ return client._request({
372
+ endpoint: "/v1/auth/oauth/providers",
373
+ method: "GET",
374
+ sendJWT: true,
375
+ });
376
+ },
377
+ /**
378
+ * Exchanges an OAuth authorization code for JWT tokens.
379
+ * This is called after the OAuth callback redirects the user back to the app with an exchange code.
380
+ * The exchange code is a short-lived (5 min), single-use token that can be traded for JWT tokens.
381
+ * @param code - The exchange code received from the OAuth callback.
382
+ * @returns Promise resolving to user data, tokens, and optional return URL.
383
+ */
384
+ /**
385
+ * Registers a guest account for public chat participation.
386
+ * Always returns void (204) regardless of outcome for anti-enumeration.
387
+ * @param data - Guest registration data (email, displayName, optional approved color, publicToken).
388
+ */
389
+ async registerGuest(data) {
390
+ await client._request({
391
+ endpoint: "/v1/auth/register-guest",
392
+ method: "POST",
393
+ body: data,
394
+ sendJWT: false,
395
+ });
396
+ },
397
+ /**
398
+ * Verifies a guest account using the token from the verification email.
399
+ * Stores auth tokens on success and returns user data.
400
+ * @param token - The guest verification token.
401
+ * @returns Promise resolving to user data and auth tokens.
402
+ */
403
+ async verifyGuest(token) {
404
+ const result = await client._request({
405
+ endpoint: `/v1/auth/verify-guest?token=${encodeURIComponent(token)}`,
406
+ method: "POST",
407
+ sendJWT: false,
408
+ });
409
+ if (result?.tokens?.access && result?.tokens?.refresh) {
410
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
411
+ }
412
+ return result;
413
+ },
414
+ /**
415
+ * Upgrades a guest account to a standard account with a password.
416
+ * Requires the user to be authenticated as a guest.
417
+ * @param data - Upgrade data (password, optional firstName, lastName, company, userName).
418
+ * @returns Promise resolving to the upgraded user data.
419
+ */
420
+ async upgradeGuest(data) {
421
+ return client._request({
422
+ endpoint: "/v1/auth/upgrade-guest",
423
+ method: "POST",
424
+ body: data,
425
+ sendJWT: true,
426
+ });
427
+ },
428
+ async exchangeOAuthCode(code) {
429
+ const result = await client._request({
430
+ endpoint: "/v1/auth/oauth/exchange",
431
+ method: "POST",
432
+ body: { code },
433
+ sendJWT: false, // No authentication needed - the code is the proof
434
+ });
435
+ // Store tokens upon successful exchange
436
+ // Check if this is MFA flow or regular auth
437
+ if (result && result.tokens) {
438
+ if (result.tokens.access && result.tokens.refresh) {
439
+ // Regular auth - store access and refresh tokens
440
+ client._setTokens(result.tokens.access.token, result.tokens.refresh.token, result.tokens.access.expires, result.tokens.refresh.expires);
441
+ }
442
+ else if (result.tokens.verifyMfa) {
443
+ // MFA required - verifyMfa token will be handled by frontend
444
+ console.log("[SDK] OAuth login requires MFA verification");
445
+ }
446
+ else {
447
+ console.warn("OAuth exchange response did not contain expected tokens.");
448
+ }
449
+ }
450
+ return result;
451
+ },
452
+ };
453
+ }
454
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import NuramaClient from '../NuramaClient.js';
2
+ import type { BlogPostListParams, BlogPostListResponse } from '@nurama/types';
3
+ /**
4
+ * Read-only blog feed (Nurama News on the /news page) sourced via the
5
+ * backend's Ghost Content API proxy. Auth: any signed-in user. No
6
+ * workspace coupling — the feed is platform-level, identical for every
7
+ * user.
8
+ *
9
+ * The proxy normalises Ghost's payload and sanitises post HTML
10
+ * server-side, so the returned `bodyHtml` is safe to render via the
11
+ * FE's controlled HTML primitive inside a modal.
12
+ */
13
+ export default function createBlogPostsMethods(client: NuramaClient): {
14
+ /** List the most recent Nurama News posts. */
15
+ listBlogPosts(params?: BlogPostListParams): Promise<BlogPostListResponse>;
16
+ };
17
+ //# sourceMappingURL=blogPosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogPosts.d.ts","sourceRoot":"","sources":["../../src/routes/blogPosts.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,MAAM,EAAE,YAAY;IAE/D,8CAA8C;2BAClB,kBAAkB,GAAQ,OAAO,CAAC,oBAAoB,CAAC;EAYtF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Read-only blog feed (Nurama News on the /news page) sourced via the
3
+ * backend's Ghost Content API proxy. Auth: any signed-in user. No
4
+ * workspace coupling — the feed is platform-level, identical for every
5
+ * user.
6
+ *
7
+ * The proxy normalises Ghost's payload and sanitises post HTML
8
+ * server-side, so the returned `bodyHtml` is safe to render via the
9
+ * FE's controlled HTML primitive inside a modal.
10
+ */
11
+ export default function createBlogPostsMethods(client) {
12
+ return {
13
+ /** List the most recent Nurama News posts. */
14
+ async listBlogPosts(params = {}) {
15
+ const search = new URLSearchParams();
16
+ if (params.limit != null)
17
+ search.set('limit', String(params.limit));
18
+ if (params.page != null)
19
+ search.set('page', String(params.page));
20
+ const query = search.toString();
21
+ return client._request({
22
+ endpoint: `/v1/blog-posts${query ? `?${query}` : ''}`,
23
+ method: 'GET',
24
+ sendJWT: true,
25
+ });
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=blogPosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogPosts.js","sourceRoot":"","sources":["../../src/routes/blogPosts.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,MAAoB;IACjE,OAAO;QACL,8CAA8C;QAC9C,KAAK,CAAC,aAAa,CAAC,SAA6B,EAAE;YACjD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,QAAQ,CAAC;gBACrB,QAAQ,EAAE,iBAAiB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}