TypeScript icon, indicating that this package has built-in type declarations

    2.0.6 • Public • Published

    License: MIT JavaScript Style Guide Node.js CI Coverage Status


    A package to compute the SHA hash of a JS Object. It works in Node.js and native JS and can be directly imported into TypeScript projects (types provided).

    It includes two methods hashable(obj) and digest(obj) (see API Ref Doc below):

    • hashable(obj) prepares any object with no known order to be hashable. It recursively traverses the input to find Objects. Then every Object is converted to an array sorted by key of 2-arrays [key, value]. The final result is JSON.stringify-ed and returned as a string. Since a specific order is now guaranteed, we can safely use the output as the input for any hash algorithm.

    • digest(obj, [algorithm]) performs an SHA-2 hash to the input obj, which is first made hashable with hashable(obj). The output is a string with the hexadecimal representation of the digest. Internally the hash is computed using node crypto (node.js) or subtle crypto (browsers). Supported hash algorithms are SHA-1, SHA-256, SHA-384 and SHA-512.


    object-sha can be imported to your project with npm:

    npm install object-sha

    Then either require (Node.js CJS):

    const objectSha = require('object-sha')

    or import (JavaScript ES module):

    import * as objectSha from 'object-sha'

    The appropriate version for browser or node is automatically exported.

    You can also download the IIFE bundle, the ESM bundle or the UMD bundle and manually add it to your project, or, if you have already installed object-sha in your project, just get the bundles from node_modules/object-sha/dist/bundles/.

    An example of usage could be:

    const objectSha = require('object-sha') // or import * as objectSha from 'object-sha'
    const obj1 = { src: 'A', dst: 'B', msg: { hello: 'goodbye!', arr: [2, 9, { b: 5, a: 7 }] } }
    const obj2 = { dst: 'B', src: 'A', msg: { arr: [2, 9, { a: 7, b: 5 }], hello: 'goodbye!' } }
    console.log(objectSha.hashable(obj1)) // [["dst","B"],["msg",[["arr",[2,9,[["a",7],["b",5]]]],["hello","goodbye!"]]],["src","A"]]
    console.log(objectSha.hashable(obj2)) // [["dst","B"],["msg",[["arr",[2,9,[["a",7],["b",5]]]],["hello","goodbye!"]]],["src","A"]]
    objectSha.digest(obj1).then(console.log) // 6269af73d25f886a50879942cdf5c40500371c6f4d510cec0a67b2992b0a9549
    objectSha.digest(obj2).then(console.log) // 6269af73d25f886a50879942cdf5c40500371c6f4d510cec0a67b2992b0a9549
    objectSha.digest(obj1, 'SHA-512').then(console.log) // f3325ec4c42cc0154c6a9c78446ce3915196c6ae62d077838b699ca83faa2bd2c0639dd6ca43561afb28bfeb2ffd7481b45c07eaebb7098e1c62ef3c0d441b0b
    objectSha.digest(obj2, 'SHA-512').then(console.log) // f3325ec4c42cc0154c6a9c78446ce3915196c6ae62d077838b699ca83faa2bd2c0639dd6ca43561afb28bfeb2ffd7481b45c07eaebb7098e1c62ef3c0d441b0b

    API reference documentation

    Check the API


    npm i object-sha

    DownloadsWeekly Downloads






    Unpacked Size

    38.2 kB

    Total Files


    Last publish


    • juanelasisme