@makolabs/ripple 1.5.0 → 1.6.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.
@@ -273,7 +273,9 @@ async function fetchUserPermissions(userId) {
273
273
  userData.data.data = userData.data.data.filter((key) => key.status === 'active');
274
274
  }
275
275
  if (userData?.data?.data && Array.isArray(userData.data.data)) {
276
- return userData.data.data.flatMap((key) => key.scopes || []);
276
+ // Deduplicate permissions by using a Set
277
+ const allPermissions = userData.data.data.flatMap((key) => key.scopes || []);
278
+ return Array.from(new Set(allPermissions));
277
279
  }
278
280
  else if (userData?.scopes) {
279
281
  return Array.isArray(userData.scopes) ? userData.scopes : [userData.scopes];
@@ -343,39 +345,21 @@ async function refreshTokenIfSelfUpdate(userId) {
343
345
  export const updateUserPermissions = command('unchecked', async (options) => {
344
346
  const { userId, permissions } = options;
345
347
  try {
346
- let adminKeyId = userId;
347
- try {
348
- await makeAdminRequest(`/admin/keys/${adminKeyId}`, {
349
- method: 'PUT',
350
- body: JSON.stringify({ scopes: permissions })
351
- });
352
- await refreshTokenIfSelfUpdate(userId);
353
- return;
354
- }
355
- catch {
356
- try {
357
- const allKeysData = await makeAdminRequest('/admin/keys');
358
- const userKey = allKeysData.data.data.find((key) => key.sub === userId && key.client_id === CLIENT_ID && key.status === 'active');
359
- if (userKey) {
360
- adminKeyId = userKey.id;
361
- await makeAdminRequest(`/admin/keys/${adminKeyId}`, {
362
- method: 'PUT',
363
- body: JSON.stringify({ scopes: permissions })
364
- });
365
- await refreshTokenIfSelfUpdate(userId);
366
- return;
367
- }
368
- else {
369
- await createUserPermissions(userId, permissions);
370
- await refreshTokenIfSelfUpdate(userId);
371
- return;
372
- }
373
- }
374
- catch (searchError) {
375
- console.error('[updateUserPermissions] Error during permission update:', searchError);
376
- throw new Error('Failed to update permissions');
377
- }
348
+ // Fetch all keys to find user's active keys
349
+ const allKeysData = await makeAdminRequest('/admin/keys');
350
+ // Find ALL active keys for this user (not just one)
351
+ const userKeys = allKeysData.data.data.filter((key) => key.sub === userId && key.client_id === CLIENT_ID && key.status === 'active');
352
+ // Delete all old active keys to ensure clean state
353
+ if (userKeys.length > 0) {
354
+ await Promise.all(userKeys.map((key) => makeAdminRequest(`/admin/keys/${key.id}`, {
355
+ method: 'DELETE'
356
+ }).catch((err) => {
357
+ console.warn(`[updateUserPermissions] Failed to delete key ${key.id}:`, err);
358
+ })));
378
359
  }
360
+ // Create one new key with updated permissions
361
+ await createUserPermissions(userId, permissions);
362
+ await refreshTokenIfSelfUpdate(userId);
379
363
  }
380
364
  catch (error) {
381
365
  console.error('[updateUserPermissions] Error:', error);
@@ -409,7 +409,7 @@
409
409
  Select User Role {#if mode === 'create'}<span class="text-danger-500">*</span>{/if}
410
410
  </span>
411
411
  <div class="grid grid-cols-1 gap-2">
412
- {#each roles as role (role.value)}
412
+ {#each roles as role, index (`${role.value}-${index}`)}
413
413
  {@const isSelected = formData.role === role.value}
414
414
  {@const isAdministrator = role.value.toLowerCase() === 'admin'}
415
415
  {@const isPreselected = initialRole === role.value && isSelected}
@@ -453,7 +453,7 @@
453
453
  </h4>
454
454
  <div class="bg-default-50 max-h-60 overflow-y-auto rounded-lg p-3">
455
455
  <div class="space-y-2">
456
- {#each formData.permissions as permission (permission)}
456
+ {#each formData.permissions as permission, index (`${permission}-${index}`)}
457
457
  <div class="flex items-start gap-2 text-xs">
458
458
  <div class="mt-1 h-1 w-1 shrink-0 rounded-full bg-blue-500"></div>
459
459
  <div class="text-default-700 font-mono">{permission}</div>
@@ -248,7 +248,7 @@
248
248
  </h4>
249
249
  <div class="bg-default-50 max-h-60 overflow-y-auto rounded-lg p-3">
250
250
  <div class="space-y-2">
251
- {#each user.permissions as permission (permission)}
251
+ {#each user.permissions as permission, index (`${permission}-${index}`)}
252
252
  <div class="flex items-start gap-2 text-xs">
253
253
  <div class="mt-1 h-1 w-1 shrink-0 rounded-full bg-blue-500"></div>
254
254
  <div class="text-default-700 font-mono">{permission}</div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makolabs/ripple",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "Simple Svelte 5 powered component library ✨",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {