const key = 'key'
const secret = 'secret'
const algo = {
	name: 'AES-GCM',
	iv: crypto.getRandomValues(new Uint8Array(16)),
}

const encode = input => new TextEncoder().encode(input)
const decode = input => new TextDecoder().decode(input)

const cryptoKey = await crypto.subtle.importKey(
  'raw', // format
  // "AES key data must be 128 or 256 bits"
  await crypto.subtle.digest('SHA-256', encode(key)),
  algo.name,
  false, // extractable
  ['encrypt', 'decrypt'] // keyUsages
)

const encrypted = await crypto.subtle.encrypt(
  algo,
  cryptoKey,
  encode(secret)
) // ArrayBuffer

const decrypted = await crypto.subtle.decrypt(
	algo,
	cryptoKey,
	encrypted
).then(decode)