/hashagna

Utility to handle (GET or POST) APIs which redirects (3xx) to an uri appending Hash params via iFrame

Primary LanguageHTMLMIT LicenseMIT

hashagna

The Final and definitive solution to handle 302+Location -> Hash pattern

NPM Version NPM Downloads Dependency status Dev dependency status Quality Gate Coverage Maintainability Reliability Build Status LICENSE Blog Buy me a coffee

Utility to handle (GET or POST) APIs which redirects (3xx) to an uri appending Hash params via iFrame

🔌 INSTALLATION

npm i -s @marketto/hashagna

🔧 USAGE

MJS / ES6 / Typescript

import { HashagnaHttpClient } from '@marketto/hashagna';

AMD

require(['/dist/hashagna.min.js'], ({ HashagnaHttpClient }) => {
    // your code
});

Script

<!-- Polyfills needed only to support IE11 -->
<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?version=3.52.1&features=Object.entries%2CPromise%2CElement.prototype.remove"></script>
<script src="https://unpkg.com/@marketto/hashagna@latest/dist/hashagna.min.js"></script>

💻 DEMO

npm run manual-test

📖 DOCUMENTATION

JsDocs @ GitHub Pages

HashagnaHttpClient

Class with static methods

  • Both get and post methods accepts 2 mandatory params and an optional 3rd one:

    • url - relative or absolute path of the api
    • params - (Object) Key/Value of params to be sent
    • options (optional)
      • iFrame - DOM Element to use
      • iFrameId - id of the iFrame to use
      • autoClean - (only with iFrame or iFrameId) if true the iframe will be wiped up after receiving data
  • Both get and post methods are async and returns and object containing the following:

    • hash: string
    • hashParams: Object
    • host: string
    • hostname: string
    • href: string
    • origin: string
    • pathname: string
    • protocol: string
    • search: string
    • port: string
    • query: Object

GET

HashagnaHttpClient.get('/api/auto-redirect', { code: '2345', userId: 'user id' })
        .then(({ hashParams }) => {
            console.log(hashParams); // {key: value, ...}
        })
        .catch(err => {
            // Handle your error
        });

POST

HashagnaHttpClient.post('/another-api', { clientAuth: 'askjf' })
        .then(({ hashParams }) => { // {key: value, ...}
            console.log(hashParams.auth);
        })
        .catch(err => {
            // Handle your error
        });

🔃 Compatibility

  • Chromium 86.0.4217.0 (Chrome & Edge)
  • Firefox 80.0b8
  • Webkit 14 (Safari)
  • Internet Explorer 11.1016.18362.0

📜 LICENSE

MIT License

📝 AUTHOR

Marco Ricupero