qishibo/AnotherRedisDesktopManager · error

Type Error: ${e.message}

Error message

Type Error: ${e.message}

What it means

The TYPE command itself rejected while resolving a key tab. Unlike the 'none' case (key missing), this means the command failed: connection dropped, NOAUTH/NOPERM under ACL, or protocol/encoding issues (e.g. binary key handling). The raw driver message is shown prefixed with 'Type Error:'.

Source

Thrown at src/components/Tabs.vue:211

      };

      this.addTab(newTabItem, true);
    },
    addKeyTab(client, key, newTab = false) {
      client.type(key).then((type) => {
        // key not exists
        if (type === 'none') {
          this.$message.error({
            message: `${key} ${this.$t('message.key_not_exists')}`,
            duration: 1000,
          });

          return;
        }

        this.addTab(this.initKeyTabItem(client, key, type), newTab);
      }).catch((e) => {
        this.$message.error(`Type Error: ${e.message}`);
      });
    },
    initKeyTabItem(client, key, type) {
      const { cutString } = this.$util;
      const dbIndex = client.condition ? client.condition.select : 0;
      const { connectionName } = client.options;
      const keyStr = this.$util.bufToString(key);

      const label = `${cutString(keyStr)} | ${cutString(connectionName)} | DB${dbIndex}`;
      const name = `${keyStr} | ${connectionName} | DB${dbIndex}`;

      return {
        name,
        label,
        title: name,
        client,
        component: 'key',
        redisKey: key,

View on GitHub (pinned to c149855106)

Solutions

  1. Reconnect and retry opening the key
  2. For NOPERM, grant type (and the per-type read commands) to the ACL user
  3. Fix credentials if NOAUTH appears
  4. If keys are binary, ensure the client operates in binary-safe buffer mode

Example fix

// before
client.type(key).then((type) => { /* ... */ }).catch((e) => {
  this.$message.error(`Type Error: ${e.message}`);
});

// after
client.type(key).then((type) => {
  if (type === 'none') { this.$message.error(`${key} ${this.$t('message.key_not_exists')}`); return; }
  this.addTab(this.initKeyTabItem(client, key, type), newTab);
}).catch((e) => {
  const m = /NOPERM/i.test(e.message) ? 'no permission for TYPE' : e.message;
  this.$message.error(`Type Error: ${m}`);
});
Defensive patterns

Strategy: try-catch

Try / catch

.catch((e) => {
  const m = String(e.message);
  if (/NOAUTH/.test(m)) { /* fix credentials, reconnect */ }
  else if (/NOPERM/.test(m)) { /* grant +type to the ACL user */ }
  else if (/ECONNRESET|closed/i.test(m)) { /* reconnect and retry once */ }
  else { this.$message.error(`Type Error: ${m}`); }
})

Prevention

When it happens

Trigger: Socket dropping right as a key tab opens; ACL user without type permission; NOAUTH after a password change; binary/unprintable key names producing command encoding problems.

Common situations: Opening tabs right after network transitions, least-privilege ACL users, keys containing arbitrary bytes from serializers (PHP/Java serialized values).

Related errors


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/7a597005e061634f. Report an issue: GitHub.