@nurama/sdk 0.0.0-stage → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +1080 -2
- package/dist/BotClient.d.ts +66 -0
- package/dist/BotClient.d.ts.map +1 -0
- package/dist/BotClient.js +68 -0
- package/dist/BotClient.js.map +1 -0
- package/dist/NuramaClient.d.ts +448 -0
- package/dist/NuramaClient.d.ts.map +1 -0
- package/dist/NuramaClient.js +864 -0
- package/dist/NuramaClient.js.map +1 -0
- package/dist/browser/nurama-bot-sdk.js +11780 -0
- package/dist/browser/nurama-bot-sdk.min.js +1 -0
- package/dist/browser/nurama-sdk.js +11732 -0
- package/dist/browser/nurama-sdk.min.js +1 -0
- package/dist/routes/ai.d.ts +280 -0
- package/dist/routes/ai.d.ts.map +1 -0
- package/dist/routes/ai.js +173 -0
- package/dist/routes/ai.js.map +1 -0
- package/dist/routes/asset.d.ts +493 -0
- package/dist/routes/asset.d.ts.map +1 -0
- package/dist/routes/asset.js +848 -0
- package/dist/routes/asset.js.map +1 -0
- package/dist/routes/auth.d.ts +218 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +454 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/blogPosts.d.ts +17 -0
- package/dist/routes/blogPosts.d.ts.map +1 -0
- package/dist/routes/blogPosts.js +29 -0
- package/dist/routes/blogPosts.js.map +1 -0
- package/dist/routes/board.d.ts +187 -0
- package/dist/routes/board.d.ts.map +1 -0
- package/dist/routes/board.js +270 -0
- package/dist/routes/board.js.map +1 -0
- package/dist/routes/bot.d.ts +147 -0
- package/dist/routes/bot.d.ts.map +1 -0
- package/dist/routes/bot.js +157 -0
- package/dist/routes/bot.js.map +1 -0
- package/dist/routes/chat.d.ts +842 -0
- package/dist/routes/chat.d.ts.map +1 -0
- package/dist/routes/chat.js +863 -0
- package/dist/routes/chat.js.map +1 -0
- package/dist/routes/chatAi.d.ts +51 -0
- package/dist/routes/chatAi.d.ts.map +1 -0
- package/dist/routes/chatAi.js +109 -0
- package/dist/routes/chatAi.js.map +1 -0
- package/dist/routes/config.d.ts +11 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +24 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/convo.d.ts +169 -0
- package/dist/routes/convo.d.ts.map +1 -0
- package/dist/routes/convo.js +284 -0
- package/dist/routes/convo.js.map +1 -0
- package/dist/routes/credits.d.ts +82 -0
- package/dist/routes/credits.d.ts.map +1 -0
- package/dist/routes/credits.js +49 -0
- package/dist/routes/credits.js.map +1 -0
- package/dist/routes/device.d.ts +74 -0
- package/dist/routes/device.d.ts.map +1 -0
- package/dist/routes/device.js +122 -0
- package/dist/routes/device.js.map +1 -0
- package/dist/routes/folder.d.ts +75 -0
- package/dist/routes/folder.d.ts.map +1 -0
- package/dist/routes/folder.js +99 -0
- package/dist/routes/folder.js.map +1 -0
- package/dist/routes/invite.d.ts +61 -0
- package/dist/routes/invite.d.ts.map +1 -0
- package/dist/routes/invite.js +86 -0
- package/dist/routes/invite.js.map +1 -0
- package/dist/routes/joinLink.d.ts +38 -0
- package/dist/routes/joinLink.d.ts.map +1 -0
- package/dist/routes/joinLink.js +81 -0
- package/dist/routes/joinLink.js.map +1 -0
- package/dist/routes/membership.d.ts +116 -0
- package/dist/routes/membership.d.ts.map +1 -0
- package/dist/routes/membership.js +183 -0
- package/dist/routes/membership.js.map +1 -0
- package/dist/routes/notification.d.ts +103 -0
- package/dist/routes/notification.d.ts.map +1 -0
- package/dist/routes/notification.js +89 -0
- package/dist/routes/notification.js.map +1 -0
- package/dist/routes/payment.d.ts +56 -0
- package/dist/routes/payment.d.ts.map +1 -0
- package/dist/routes/payment.js +78 -0
- package/dist/routes/payment.js.map +1 -0
- package/dist/routes/product.d.ts +43 -0
- package/dist/routes/product.d.ts.map +1 -0
- package/dist/routes/product.js +53 -0
- package/dist/routes/product.js.map +1 -0
- package/dist/routes/project.d.ts +821 -0
- package/dist/routes/project.d.ts.map +1 -0
- package/dist/routes/project.js +1153 -0
- package/dist/routes/project.js.map +1 -0
- package/dist/routes/public.d.ts +269 -0
- package/dist/routes/public.d.ts.map +1 -0
- package/dist/routes/public.js +412 -0
- package/dist/routes/public.js.map +1 -0
- package/dist/routes/scratch.d.ts +70 -0
- package/dist/routes/scratch.d.ts.map +1 -0
- package/dist/routes/scratch.js +67 -0
- package/dist/routes/scratch.js.map +1 -0
- package/dist/routes/settings.d.ts +102 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +94 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/routes/shortlink.d.ts +79 -0
- package/dist/routes/shortlink.d.ts.map +1 -0
- package/dist/routes/shortlink.js +25 -0
- package/dist/routes/shortlink.js.map +1 -0
- package/dist/routes/socket.d.ts +108 -0
- package/dist/routes/socket.d.ts.map +1 -0
- package/dist/routes/socket.js +555 -0
- package/dist/routes/socket.js.map +1 -0
- package/dist/routes/storage.d.ts +44 -0
- package/dist/routes/storage.d.ts.map +1 -0
- package/dist/routes/storage.js +49 -0
- package/dist/routes/storage.js.map +1 -0
- package/dist/routes/subscription.d.ts +184 -0
- package/dist/routes/subscription.d.ts.map +1 -0
- package/dist/routes/subscription.js +219 -0
- package/dist/routes/subscription.js.map +1 -0
- package/dist/routes/supportChat.d.ts +40 -0
- package/dist/routes/supportChat.d.ts.map +1 -0
- package/dist/routes/supportChat.js +53 -0
- package/dist/routes/supportChat.js.map +1 -0
- package/dist/routes/supportTicket.d.ts +89 -0
- package/dist/routes/supportTicket.d.ts.map +1 -0
- package/dist/routes/supportTicket.js +54 -0
- package/dist/routes/supportTicket.js.map +1 -0
- package/dist/routes/tag.d.ts +72 -0
- package/dist/routes/tag.d.ts.map +1 -0
- package/dist/routes/tag.js +81 -0
- package/dist/routes/tag.js.map +1 -0
- package/dist/routes/task.d.ts +252 -0
- package/dist/routes/task.d.ts.map +1 -0
- package/dist/routes/task.js +284 -0
- package/dist/routes/task.js.map +1 -0
- package/dist/routes/taskRelation.d.ts +80 -0
- package/dist/routes/taskRelation.d.ts.map +1 -0
- package/dist/routes/taskRelation.js +71 -0
- package/dist/routes/taskRelation.js.map +1 -0
- package/dist/routes/token.d.ts +75 -0
- package/dist/routes/token.d.ts.map +1 -0
- package/dist/routes/token.js +51 -0
- package/dist/routes/token.js.map +1 -0
- package/dist/routes/user.d.ts +112 -0
- package/dist/routes/user.d.ts.map +1 -0
- package/dist/routes/user.js +151 -0
- package/dist/routes/user.js.map +1 -0
- package/dist/routes/version.d.ts +42 -0
- package/dist/routes/version.d.ts.map +1 -0
- package/dist/routes/version.js +38 -0
- package/dist/routes/version.js.map +1 -0
- package/dist/routes/webhook.d.ts +170 -0
- package/dist/routes/webhook.d.ts.map +1 -0
- package/dist/routes/webhook.js +173 -0
- package/dist/routes/webhook.js.map +1 -0
- package/dist/routes/workspace.d.ts +120 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +199 -0
- package/dist/routes/workspace.js.map +1 -0
- package/dist/utils/uploadSessionManager.d.ts +133 -0
- package/dist/utils/uploadSessionManager.d.ts.map +1 -0
- package/dist/utils/uploadSessionManager.js +321 -0
- package/dist/utils/uploadSessionManager.js.map +1 -0
- package/dist/utils/urlParams.d.ts +35 -0
- package/dist/utils/urlParams.d.ts.map +1 -0
- package/dist/utils/urlParams.js +146 -0
- package/dist/utils/urlParams.js.map +1 -0
- package/dist/version.d.ts +15 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +12 -0
- package/dist/version.js.map +1 -0
- package/package.json +87 -3
- package/src/BotClient.ts +113 -0
- package/src/NuramaClient.ts +1193 -0
- package/src/bot-browser-entry.js +15 -0
- package/src/browser-entry.js +20 -0
- package/src/routes/ai.ts +378 -0
- package/src/routes/asset.ts +1104 -0
- package/src/routes/auth.ts +587 -0
- package/src/routes/blogPosts.ts +29 -0
- package/src/routes/board.ts +403 -0
- package/src/routes/bot.ts +257 -0
- package/src/routes/chat.ts +1292 -0
- package/src/routes/chatAi.ts +125 -0
- package/src/routes/config.ts +31 -0
- package/src/routes/convo.ts +321 -0
- package/src/routes/credits.ts +112 -0
- package/src/routes/device.ts +133 -0
- package/src/routes/folder.ts +154 -0
- package/src/routes/invite.ts +133 -0
- package/src/routes/joinLink.ts +100 -0
- package/src/routes/membership.ts +237 -0
- package/src/routes/notification.ts +166 -0
- package/src/routes/payment.ts +104 -0
- package/src/routes/product.ts +67 -0
- package/src/routes/project.ts +1528 -0
- package/src/routes/public.ts +496 -0
- package/src/routes/scratch.ts +94 -0
- package/src/routes/settings.ts +152 -0
- package/src/routes/shortlink.ts +90 -0
- package/src/routes/socket.ts +739 -0
- package/src/routes/storage.ts +83 -0
- package/src/routes/subscription.ts +307 -0
- package/src/routes/supportChat.ts +62 -0
- package/src/routes/supportTicket.ts +114 -0
- package/src/routes/tag.ts +131 -0
- package/src/routes/task.ts +431 -0
- package/src/routes/taskRelation.ts +125 -0
- package/src/routes/token.ts +113 -0
- package/src/routes/user.ts +214 -0
- package/src/routes/version.ts +62 -0
- package/src/routes/webhook.ts +295 -0
- package/src/routes/workspace.ts +223 -0
- package/src/utils/uploadSessionManager.ts +407 -0
- package/src/utils/urlParams.ts +181 -0
- 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"}
|