base64url.js 1.0 KB

123456789101112131415161718192021222324252627282930
  1. import { encoder, decoder } from '../lib/buffer_utils.js';
  2. import { encodeBase64, decodeBase64 } from '../lib/base64.js';
  3. export function decode(input) {
  4. if (Uint8Array.fromBase64) {
  5. return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {
  6. alphabet: 'base64url',
  7. });
  8. }
  9. let encoded = input;
  10. if (encoded instanceof Uint8Array) {
  11. encoded = decoder.decode(encoded);
  12. }
  13. encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
  14. try {
  15. return decodeBase64(encoded);
  16. }
  17. catch {
  18. throw new TypeError('The input to be decoded is not correctly encoded.');
  19. }
  20. }
  21. export function encode(input) {
  22. let unencoded = input;
  23. if (typeof unencoded === 'string') {
  24. unencoded = encoder.encode(unencoded);
  25. }
  26. if (Uint8Array.prototype.toBase64) {
  27. return unencoded.toBase64({ alphabet: 'base64url', omitPadding: true });
  28. }
  29. return encodeBase64(unencoded).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
  30. }