@makolabs/ripple 1.2.23 → 1.6.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.
@@ -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];
@@ -384,11 +386,12 @@ export const updateUserPermissions = command('unchecked', async (options) => {
384
386
  });
385
387
  export const generateApiKey = command('unchecked', async (options) => {
386
388
  try {
387
- const filteredPermissions = PERMISSION_PREFIX
389
+ let filteredPermissions = PERMISSION_PREFIX
388
390
  ? options.permissions.filter((scope) => scope.startsWith(PERMISSION_PREFIX))
389
391
  : options.permissions;
390
- if (filteredPermissions.length === 0) {
391
- throw new Error(`At least one ${PERMISSION_PREFIX || ''} permission is required to generate an API key`);
392
+ // Default to readonly permission if none provided (first-time key generation)
393
+ if (filteredPermissions.length === 0 && PERMISSION_PREFIX) {
394
+ filteredPermissions = [`${PERMISSION_PREFIX}readonly`];
392
395
  }
393
396
  let oldKeyId = null;
394
397
  if (options.revokeOld) {
@@ -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.2.23",
3
+ "version": "1.6.0",
4
4
  "description": "Simple Svelte 5 powered component library ✨",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {