Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sugestão: Module Pattern

Ao aplicarmos o module pattern ao objeto ConnectionFactory podemos 'subir' o método privado e estático _createStores para o escopo da IIF (e futuramente modulo), garantindo assim que o ninguém tenha acesso a ele

exemplo:

const stores = ['negociacoes']
const version = 2
const dbName = 'alura-frame'

let connection = null
let close = null

const createStores = connection => {
  stores.forEach(s => {
    if (connection.objectStoreNames.contains(s))
      connection.deleteObjectStore(s)

    connection.createObjectStore(s, { autoIncrement: true });
  });
}

export class ConnectionFactory {
  constructor() {
    throw new Error('Não é possível criar instâncias de ConnectionFactory')
  }

  static getConnection() {
    return new Promise((resolve, reject) => {
      let openRequest = window.indexedDB.open(dbName, version)

      openRequest.onupgradeneeded = event => {
        createStores(event.target.result)
      }

      openRequest.onsuccess = event => {

        if (!connection) {
          connection = event.target.result

          close = connection.close.bind(connection)
          connection.close = () => {
            throw new Error('Não é possível fechar diretamente a conexão')
          }
        }

        resolve(connection)
      }

      openRequest.onerror = event => {
        console.log(event.target.error)
        reject(event.target.error.name)
      }
    })
  }

  static closeConnection() {
    if (connection) {
      close()
      connection = null
    }
  }
}
1 resposta
solução!

Oi Rubens tudo bem?

Obrigado pela sugestão e pelo código. Module patterns é demais, ele isola todo o código. Um jeito de mudar o javascript protegido é se eu usar um programa que lê e modifica a memória do computador como o Cheat Engine. Mas dá trabalho.

Outro jeito que pensei para interferir no módulo é fazer no console do navegador:

MODULO_COPIA=MODULO;
scripts=document.getElementsByTagName("script");
for (let i=0;i<scripts.length;i++){
    scripts[i].outerHTML="";

}
MODULO=MODULO_COPIA;

Resumindo para melhor segurança da sua webapp deixe coisas sensíveis e importantes do backend. Mas Module Patterns é muito usado em node.js então vale a pena aprender.

Bons estudos!!!