diff --git a/.yarn/cache/@types-blake2b-npm-2.1.3-62a57db1c9-55a6ed7123.zip b/.yarn/cache/@types-blake2b-npm-2.1.3-62a57db1c9-55a6ed7123.zip new file mode 100644 index 00000000..cb395611 Binary files /dev/null and b/.yarn/cache/@types-blake2b-npm-2.1.3-62a57db1c9-55a6ed7123.zip differ diff --git a/.yarn/cache/b4a-npm-1.6.6-140a53bc1d-c46a27e3ac.zip b/.yarn/cache/b4a-npm-1.6.6-140a53bc1d-c46a27e3ac.zip new file mode 100644 index 00000000..66a3f880 Binary files /dev/null and b/.yarn/cache/b4a-npm-1.6.6-140a53bc1d-c46a27e3ac.zip differ diff --git a/.yarn/cache/blake2b-npm-2.1.4-3a13da4cf0-cd598c96d4.zip b/.yarn/cache/blake2b-npm-2.1.4-3a13da4cf0-cd598c96d4.zip new file mode 100644 index 00000000..2c58aca4 Binary files /dev/null and b/.yarn/cache/blake2b-npm-2.1.4-3a13da4cf0-cd598c96d4.zip differ diff --git a/.yarn/cache/blake2b-wasm-npm-2.4.0-ba85ae7e93-1839dd0693.zip b/.yarn/cache/blake2b-wasm-npm-2.4.0-ba85ae7e93-1839dd0693.zip new file mode 100644 index 00000000..34bb69e9 Binary files /dev/null and b/.yarn/cache/blake2b-wasm-npm-2.4.0-ba85ae7e93-1839dd0693.zip differ diff --git a/.yarn/cache/nanoassert-npm-2.0.0-06b51d4a59-b1d366f952.zip b/.yarn/cache/nanoassert-npm-2.0.0-06b51d4a59-b1d366f952.zip new file mode 100644 index 00000000..16aba8f8 Binary files /dev/null and b/.yarn/cache/nanoassert-npm-2.0.0-06b51d4a59-b1d366f952.zip differ diff --git a/package.json b/package.json index d6171256..40de2757 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "@blockfrost/blockfrost-utils": "2.8.0", "@blockfrost/openapi": "0.1.60", "@emurgo/cardano-serialization-lib-nodejs": "11.5.0", - "@emurgo/cip14-js": "^3.0.1", "@fastify/cors": "^8.3.0", "@fastify/postgres": "^5.2.0", "@sentry/node": "^7.69.0", @@ -44,6 +43,7 @@ }, "devDependencies": { "@blockfrost/blockfrost-tests": "1.11.0", + "@types/blake2b": "^2.1.3", "@types/config": "3.3.1", "@types/express": "^4.17.17", "@types/node": "^20.6.2", @@ -54,6 +54,7 @@ "@typescript-eslint/eslint-plugin": "^6.7.2", "@typescript-eslint/parser": "6.7.2", "@vitest/coverage-v8": "^1.2.2", + "blake2b": "^2.1.4", "eslint": "8.49.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-import": "^2.28.1", diff --git a/src/routes/assets/asset/index.ts b/src/routes/assets/asset/index.ts index 5128e400..b042fc57 100644 --- a/src/routes/assets/asset/index.ts +++ b/src/routes/assets/asset/index.ts @@ -9,7 +9,7 @@ import { getSchemaForEndpoint, validateCIP68Metadata, } from '@blockfrost/openapi'; -import AssetFingerprint from '@emurgo/cip14-js'; +import { AssetFingerprint } from '../../../utils/cip14.js'; import { FastifyInstance, FastifyRequest } from 'fastify'; import { SQLQuery } from '../../../sql/index.js'; import * as QueryTypes from '../../../types/queries/assets.js'; diff --git a/src/utils/cip14.ts b/src/utils/cip14.ts new file mode 100644 index 00000000..669585df --- /dev/null +++ b/src/utils/cip14.ts @@ -0,0 +1,59 @@ +// Copy pasted from https://github.com/Emurgo/cip14-js due to ESM issues with the lib +import blake2b from 'blake2b'; +import { bech32 } from 'bech32'; + +/// note: this function can't be inverted due to the hash + +const DATA = 'asset'; + +export class AssetFingerprint { + readonly hashBuf: Uint8Array; + + private constructor(hashBuf: Uint8Array) { + this.hashBuf = hashBuf; + } + + static fromHash(hash: Uint8Array): AssetFingerprint { + return new AssetFingerprint(hash); + } + + static fromParts(policyId: Uint8Array, assetName: Uint8Array): AssetFingerprint { + // see https://github.com/cardano-foundation/CIPs/pull/64 + const hashBuf = blake2b(20) + .update(new Uint8Array([...policyId, ...assetName])) + .digest('binary'); + + return AssetFingerprint.fromHash(hashBuf); + } + + static fromBech32(fingerprint: string): AssetFingerprint { + const { prefix, words } = bech32.decode(fingerprint); + + if (prefix !== DATA) { + throw new Error('Invalid asset fingerprint'); + } + + const hashBuf = Buffer.from(bech32.fromWords(words)); + + return AssetFingerprint.fromHash(hashBuf); + } + + fingerprint(): string { + const words = bech32.toWords(this.hashBuf); + + return bech32.encode(DATA, words); + } + + hash(): string { + return Buffer.from(this.hashBuf).toString('hex'); + } + + prefix(): string { + return DATA; + } + + // The last six characters of the data part form a checksum and contain no information + checksum(): string { + return this.fingerprint().slice(-6); + } +} diff --git a/test/unit/tests/utils/cip14.ts b/test/unit/tests/utils/cip14.ts new file mode 100644 index 00000000..dbb09b57 --- /dev/null +++ b/test/unit/tests/utils/cip14.ts @@ -0,0 +1,139 @@ +import { AssetFingerprint } from '../../../../src/utils/cip14.js'; +import { describe, expect, test } from 'vitest'; + +function createFingerprint(policyId: string, assetName: string): string { + const fingerprint = AssetFingerprint.fromParts( + Buffer.from(policyId, 'hex'), + Buffer.from(assetName, 'hex'), + ); + + return fingerprint.fingerprint(); +} + +describe('cip14', () => { + test('Fingerprint is correctly generated', () => { + expect( + createFingerprint('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', ''), + ).toEqual('asset1rjklcrnsdzqp65wjgrg55sy9723kw09mlgvlc3'); + + expect( + createFingerprint('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc37e', ''), + ).toEqual('asset1nl0puwxmhas8fawxp8nx4e2q3wekg969n2auw3'); + + expect( + createFingerprint('1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', ''), + ).toEqual('asset1uyuxku60yqe57nusqzjx38aan3f2wq6s93f6ea'); + + expect( + createFingerprint('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', '504154415445'), + ).toEqual('asset13n25uv0yaf5kus35fm2k86cqy60z58d9xmde92'); + + expect( + createFingerprint('1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', '504154415445'), + ).toEqual('asset1hv4p5tv2a837mzqrst04d0dcptdjmluqvdx9k3'); + + expect( + createFingerprint( + '1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + ), + ).toEqual('asset1aqrdypg669jgazruv5ah07nuyqe0wxjhe2el6f'); + + expect( + createFingerprint( + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + '1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', + ), + ).toEqual('asset17jd78wukhtrnmjh3fngzasxm8rck0l2r4hhyyt'); + + expect( + createFingerprint( + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + '0000000000000000000000000000000000000000000000000000000000000000', + ), + ).toEqual('asset1pkpwyknlvul7az0xx8czhl60pyel45rpje4z8w'); + }); + + function roundtripFromHash(policyId: string, assetName: string): string { + const fingerprint = AssetFingerprint.fromParts( + Buffer.from(policyId, 'hex'), + Buffer.from(assetName, 'hex'), + ); + + const hash = Buffer.from(fingerprint.hash(), 'hex'); + + const reconstructed = AssetFingerprint.fromHash(hash); + + return reconstructed.fingerprint(); + } + test('Can generate fingerprint with hash', () => { + expect( + roundtripFromHash('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', ''), + ).toEqual('asset1rjklcrnsdzqp65wjgrg55sy9723kw09mlgvlc3'); + + expect( + roundtripFromHash('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc37e', ''), + ).toEqual('asset1nl0puwxmhas8fawxp8nx4e2q3wekg969n2auw3'); + + expect( + roundtripFromHash('1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', ''), + ).toEqual('asset1uyuxku60yqe57nusqzjx38aan3f2wq6s93f6ea'); + + expect( + roundtripFromHash('7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', '504154415445'), + ).toEqual('asset13n25uv0yaf5kus35fm2k86cqy60z58d9xmde92'); + + expect( + roundtripFromHash('1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', '504154415445'), + ).toEqual('asset1hv4p5tv2a837mzqrst04d0dcptdjmluqvdx9k3'); + + expect( + roundtripFromHash( + '1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + ), + ).toEqual('asset1aqrdypg669jgazruv5ah07nuyqe0wxjhe2el6f'); + + expect( + roundtripFromHash( + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + '1e349c9bdea19fd6c147626a5260bc44b71635f398b67c59881df209', + ), + ).toEqual('asset17jd78wukhtrnmjh3fngzasxm8rck0l2r4hhyyt'); + + expect( + roundtripFromHash( + '7eae28af2208be856f7a119668ae52a49b73725e326dc16579dcc373', + '0000000000000000000000000000000000000000000000000000000000000000', + ), + ).toEqual('asset1pkpwyknlvul7az0xx8czhl60pyel45rpje4z8w'); + }); + + test('can get hash from bech32', () => { + expect( + AssetFingerprint.fromBech32('asset1rjklcrnsdzqp65wjgrg55sy9723kw09mlgvlc3').hash(), + ).toEqual('1cadfc0e7068801d51d240d14a4085f2a3673cbb'); + + expect( + AssetFingerprint.fromBech32('asset1nl0puwxmhas8fawxp8nx4e2q3wekg969n2auw3').hash(), + ).toEqual('9fde1e38dbbf6074f5c609e66ae5408bb3641745'); + + expect( + AssetFingerprint.fromBech32('asset1uyuxku60yqe57nusqzjx38aan3f2wq6s93f6ea').hash(), + ).toEqual('e1386b734f20334f4f9000a4689fbd9c52a70350'); + }); + + test('can get checksum from bech32', () => { + expect( + AssetFingerprint.fromBech32('asset1rjklcrnsdzqp65wjgrg55sy9723kw09mlgvlc3').checksum(), + ).toEqual('lgvlc3'); + + expect( + AssetFingerprint.fromBech32('asset1nl0puwxmhas8fawxp8nx4e2q3wekg969n2auw3').checksum(), + ).toEqual('n2auw3'); + + expect( + AssetFingerprint.fromBech32('asset1uyuxku60yqe57nusqzjx38aan3f2wq6s93f6ea').checksum(), + ).toEqual('93f6ea'); + }); +}); diff --git a/yarn-project.nix b/yarn-project.nix index ee6d6036..d6d21476 100644 --- a/yarn-project.nix +++ b/yarn-project.nix @@ -120,6 +120,7 @@ let cacheEntries = { "@emurgo/cardano-serialization-lib-nodejs@npm:11.5.0" = { filename = "@emurgo-cardano-serialization-lib-nodejs-npm-11.5.0-8c2e047031-f9e271704e.zip"; sha512 = "f9e271704ef12eb018bc0a15b8c6f83c61db694a422674267be6c546a9a89dd8b200781aca3f97dd5bb4291b0c84f6c60177fcf7e550964188a4ed6a8efd0316"; }; +"@types/blake2b@npm:2.1.3" = { filename = "@types-blake2b-npm-2.1.3-62a57db1c9-55a6ed7123.zip"; sha512 = "55a6ed7123a7adc82cc51131644b6c035c28142d028fbc23fe06251c76583ee3303d73204e21de8ea075ef84a04c4ed424754f5035fed20730a85272620a0de3"; }; "@types/config@npm:3.3.1" = { filename = "@types-config-npm-3.3.1-2b50dd112c-dc6604a6bb.zip"; sha512 = "dc6604a6bb90179ea7fbe5a3de23301999dd5b115f9999f9e48db412b7c86224919bd9af8915e7ed8734bd5f729fcbcc0eb5adf37fe2422bccd98deae1063530"; }; "@types/node@npm:20.6.2" = { filename = "@types-node-npm-20.6.2-bff5d8378f-96fe530387.zip"; sha512 = "96fe5303872640a173f3fd43e289a451776ed5b8f0090094447c6790b43f23fb607eea8268af0829cef4d132e5afa0bfa4cd871aa7412e9042a414a698e9e971"; }; "@types/pg-format@npm:1.0.2" = { filename = "@types-pg-format-npm-1.0.2-0aaeabb5e6-1638dc13fe.zip"; sha512 = "1638dc13fef4aa947a959188d5d539039dd772254f83b7299823839fc761e6fee089129c0f2b3c3a9bdd631eee4cc443663698c35bafd101de3658b0511a13d8"; }; @@ -136,9 +137,9 @@ cacheEntries = { "cross-env@npm:7.0.3" = { filename = "cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip"; sha512 = "26f2f3ea2ab32617f57effb70d329c2070d2f5630adc800985d8b30b56e8bf7f5f439dd3a0358b79cee6f930afc23cf8e23515f17ccfb30092c6b62c6b630a79"; }; "make-coverage-badge@npm:1.2.0" = { filename = "make-coverage-badge-npm-1.2.0-e0e8851735-c25de95d9e.zip"; sha512 = "c25de95d9ee66b67da93cdaf6ce2f9bf1d40287e3a61cea765f54e3ba0cc8c7ab0f8e51c48f33978ec4764812fd90c64405415a88698c5ac62b042e69d7073ce"; }; "rimraf@npm:5.0.1" = { filename = "rimraf-npm-5.0.1-26fb251a1d-bafce85391.zip"; sha512 = "bafce85391349a2d960847980bf9b5caa2a8887f481af630f1ea27e08288217293cec72d75e9a2ba35495c212789f66a7f3d23366ba6197026ab71c535126857"; }; -"@emurgo/cip14-js@npm:3.0.1" = { filename = "@emurgo-cip14-js-npm-3.0.1-6011030ea2-9eaf312410.zip"; sha512 = "9eaf3124108e8c252a745de9ef1f334ab26a32271077b00fe0ea2a06e40838dd435165dac523ebd4d851ae7a94d8c56766dabc372aabffedd36551c798c607c5"; }; "@fastify/cors@npm:8.3.0" = { filename = "@fastify-cors-npm-8.3.0-6f830323f3-f487b5a882.zip"; sha512 = "f487b5a8823264c3db58e99df020e38ada524514d60f2c5c2e01b994519545e2fc9481006d98e485b40e536b9b89f72af9061d9377b8e93f6ce07b14d40164a2"; }; "JSONStream@npm:1.3.5" = { filename = "JSONStream-npm-1.3.5-1987f2e6dd-2605fa1242.zip"; sha512 = "2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46"; }; +"blake2b@npm:2.1.4" = { filename = "blake2b-npm-2.1.4-3a13da4cf0-cd598c96d4.zip"; sha512 = "cd598c96d459017714b7f9cb8892ef2b0a94f362e26e6baa46b7b8b189af0006ce25ab1713e3ec1484eb18ce7ebe1eb24e07d01e42ab1147067de2419c7f6158"; }; "eslint-plugin-prettier@npm:5.0.0" = { filename = "eslint-plugin-prettier-npm-5.0.0-2f21113cba-84e88744b9.zip"; sha512 = "84e88744b9050f2d5ef31b94e85294dda16f3a53c2449f9d33eac8ae6264889b459bf35a68e438fb6b329c2a1d6491aac4bfa00d86317e7009de3dad0311bec6"; }; "supertest@npm:6.3.3" = { filename = "supertest-npm-6.3.3-2e2b5bc83a-38239e517f.zip"; sha512 = "38239e517f7ba62b7a139a79c5c48d55f8d67b5ff4b6e51d5b07732ca8bbc4a28ffa1b10916fbb403dd013a054dbf028edc5850057d9a43aecbff439d494673e"; }; "@blockfrost/openapi@npm:0.1.60" = { filename = "@blockfrost-openapi-npm-0.1.60-64f77da01a-2ab66de532.zip"; sha512 = "2ab66de532917fef3f1e88ab0cbb4259f79ba9b73fd865cd815f1e836d596de4394ece2914bd8b5ac8f0d38a7f7e11226a6a21ec298a4becf4d273e40abb08f4"; }; @@ -151,9 +152,9 @@ cacheEntries = { "@typescript-eslint/parser@npm:6.7.2" = { filename = "@typescript-eslint-parser-npm-6.7.2-9be494f6f9-9e93d3eb43.zip"; sha512 = "9e93d3eb432ed5457a852e25a31782d07518f728966cd477620175ae64db9be04f5d8e605f3561dbfe9a365f209a83b2a3788efb9b3cf33669c8bca17f1bcf6f"; }; "json5@npm:2.2.3" = { filename = "json5-npm-2.2.3-9962c55073-2a7436a933.zip"; sha512 = "2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349"; }; "mri@npm:1.1.4" = { filename = "mri-npm-1.1.4-d22a399f26-e65b9aed3b.zip"; sha512 = "e65b9aed3b9e423ad4c11f529ab1b9280f65dce8fb476d0da236b5c570ad3322fbbcd2393180855f1474f8b0f982d76ad398766fbd47b8a5ab4069e325d0268e"; }; -"bech32@npm:2.0.0" = { filename = "bech32-npm-2.0.0-ad98b7dd79-fa15acb270.zip"; sha512 = "fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e"; }; "jsonparse@npm:1.3.1" = { filename = "jsonparse-npm-1.3.1-b6fde74828-6514a7be46.zip"; sha512 = "6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d"; }; "through@npm:2.3.8" = { filename = "through-npm-2.3.8-df5f72a16e-a38c3e0598.zip"; sha512 = "a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd"; }; +"nanoassert@npm:2.0.0" = { filename = "nanoassert-npm-2.0.0-06b51d4a59-b1d366f952.zip"; sha512 = "b1d366f9524405f3337192d32dda6ac0b02374e4d0550c9aad33480caf2eb3c84c06f18f41f4c5404c14f6fc1ae6b84692b4375166dcb9f2d04a2ea9b9bccba0"; }; "sinon@npm:16.0.0" = { filename = "sinon-npm-16.0.0-35cca97c91-fbcad39d16.zip"; sha512 = "fbcad39d1610c669bb37ce2d325f2ac666ff5187935d09d1e757e11c50d07b8556b7dfa322eb38ad6ace8a18912224cc502e990779bc3d0954244a1ae8391984"; }; "methods@npm:1.1.2" = { filename = "methods-npm-1.1.2-92f6fdb39b-0917ff4041.zip"; sha512 = "0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a"; }; "@blockfrost/blockfrost-js@npm:5.4.0" = { filename = "@blockfrost-blockfrost-js-npm-5.4.0-32c36ce5a9-76bdd7e1b4.zip"; sha512 = "76bdd7e1b4d5b386db0db66be648123b22d03808b66f42f85bf0899cc67170922cec6b9b289fd797db1a27c752b20c931a7586f5b4a0bdce2c2c07599c2bc4eb"; }; @@ -168,12 +169,12 @@ cacheEntries = { "proxy-from-env@npm:1.1.0" = { filename = "proxy-from-env-npm-1.1.0-c13d07f26b-ed7fcc2ba0.zip"; sha512 = "ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4"; }; "prettier-linter-helpers@npm:1.0.0" = { filename = "prettier-linter-helpers-npm-1.0.0-6925131a7e-00ce8011cf.zip"; sha512 = "00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392"; }; "cbor@npm:8.1.0" = { filename = "cbor-npm-8.1.0-c1a4d6266a-a90338435d.zip"; sha512 = "a90338435dc7b45cc01461af979e3bb6ddd4f2a08584c437586039cd5f2235014c06e49d664295debbfb3514d87b2f06728092ab6aa6175e2e85e9cd7dc0c1fd"; }; -"blake2b@npm:2.1.3" = { filename = "blake2b-npm-2.1.3-b5b61ec9ad-e652234249.zip"; sha512 = "e652234249cbdb3345488d52b5e76e8572b8e5333f3f0d5e716772b7c5d2142f433c3fe86130e92117329532e1d1235cdaa89f40bbca27a8ae528bef428241ef"; }; "@sentry/node@npm:7.69.0" = { filename = "@sentry-node-npm-7.69.0-5b1090f2f6-97210ced96.zip"; sha512 = "97210ced968a3d968fd9d93e67e1f3c9613b99b223f87fad944e6e94db40ebc10a7c339c848e0529c5ded69f94f1f689b4a6df1da4df1aad6663a752ac591d03"; }; "@types/qs@npm:6.9.7" = { filename = "@types-qs-npm-6.9.7-4a3e6ca0d0-7fd6f9c250.zip"; sha512 = "7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba"; }; "fast-deep-equal@npm:3.1.3" = { filename = "fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip"; sha512 = "e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d"; }; "json-schema-traverse@npm:1.0.0" = { filename = "json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip"; sha512 = "02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad"; }; "require-from-string@npm:2.0.2" = { filename = "require-from-string-npm-2.0.2-8557e0db12-a03ef68954.zip"; sha512 = "a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b"; }; +"blake2b-wasm@npm:2.4.0" = { filename = "blake2b-wasm-npm-2.4.0-ba85ae7e93-1839dd0693.zip"; sha512 = "1839dd0693681228d81f781dd8680a6803a629ca374aed5ac02fa649ce40a67a85eb49eeb2ec6aeb7ef3ef5aa169b3579b50eabf7afa360d190338bc3e8666bd"; }; "cross-spawn@npm:7.0.3" = { filename = "cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip"; sha512 = "671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52"; }; "synckit@npm:0.8.5" = { filename = "synckit-npm-0.8.5-40a594eb38-8a9560e5d8.zip"; sha512 = "8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b"; }; "pg@npm:8.11.3" = { filename = "pg-npm-8.11.3-94865204fd-8af9468b89.zip"; sha512 = "8af9468b8969fa0d73a6b349216c8cbc953d938fcae5594f2d24043060e9226a072c8085fc4230172b5576fcab4c39c8563c655f271dc2a9209b6ad5370cafe5"; }; @@ -190,6 +191,7 @@ cacheEntries = { "@emurgo/cardano-serialization-lib-nodejs@npm:11.4.0" = { filename = "@emurgo-cardano-serialization-lib-nodejs-npm-11.4.0-98e9c716e3-2033f63352.zip"; sha512 = "2033f633521283026f9e418613eb1840d44705119826f615c14b9a6adba995e8d66f5678fc5bb752cf2695db937c67d395795c533fe46ded2f7ca0e8973a45eb"; }; "bottleneck@npm:2.19.5" = { filename = "bottleneck-npm-2.19.5-2c6092aa17-c5eef1bbea.zip"; sha512 = "c5eef1bbea12cef1f1405e7306e7d24860568b0f7ac5eeab706a86762b3fc65ef6d1c641c8a166e4db90f412fc5c948fc5ce8008a8cd3d28c7212ef9c3482bda"; }; "node-match-path@npm:0.6.3" = { filename = "node-match-path-npm-0.6.3-0c492cdac8-d515bc069f.zip"; sha512 = "d515bc069f293688109c058ee02567528fdaa856290d362b80a2254734975014e4eefcdcc5164a8adfd5560aa870e277c97fe8be648074d5088056cf61553c7c"; }; +"bech32@npm:2.0.0" = { filename = "bech32-npm-2.0.0-ad98b7dd79-fa15acb270.zip"; sha512 = "fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e"; }; "yaml@npm:2.3.1" = { filename = "yaml-npm-2.3.1-743f5688d1-2c7bc9a7cd.zip"; sha512 = "2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54"; }; "obliterator@npm:2.0.4" = { filename = "obliterator-npm-2.0.4-b21b355294-f28ad35b6d.zip"; sha512 = "f28ad35b6d812089315f375dc3e6e5f9bebf958ebe4b10ccd471c7115cbcf595e74bdac4783ae758e5b1f47e3096427fdb37cfa7bed566b132df92ff317b9a7c"; }; "@types/express-serve-static-core@npm:4.17.33" = { filename = "@types-express-serve-static-core-npm-4.17.33-0366bd5654-dce580d16b.zip"; sha512 = "dce580d16b85f207445af9d4053d66942b27d0c72e86153089fa00feee3e96ae336b7bedb31ed4eea9e553c99d6dd356ed6e0928f135375d9f862a1a8015adf2"; }; @@ -206,11 +208,11 @@ cacheEntries = { "cbor@npm:9.0.0" = { filename = "cbor-npm-9.0.0-aa1b41b42c-f24f0ab21d.zip"; sha512 = "f24f0ab21d2a7b93fff890504efe1a4fee84ca69252485e4491ebf1513caedcdc858bf1b82a642251ab119144fd350bd81a52d8adf11cbf42629abce68239210"; }; "prom-client@npm:14.2.0" = { filename = "prom-client-npm-14.2.0-67b29e14e5-d4c04e5761.zip"; sha512 = "d4c04e57616c72643dd02862d0d4bde09cf8869a19d0aef5e7b785e6e27d02439b66cdc165e3492f62d579fa91579183820870cc757a09b99399d2d02f46b9f1"; }; "nofilter@npm:3.1.0" = { filename = "nofilter-npm-3.1.0-3c5ba47d92-58aa85a5b4.zip"; sha512 = "58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f"; }; -"nanoassert@npm:1.1.0" = { filename = "nanoassert-npm-1.1.0-1da45b4766-f360fe639d.zip"; sha512 = "f360fe639db8edc422de9f5a8a7d384ba9c11e9c6fac149f7ad3b0a94e4ec9d5aa44ce55b3e4c7682658efad792604fc96c336b0e80a3590744104ba58af80c7"; }; "@sentry/types@npm:7.69.0" = { filename = "@sentry-types-npm-7.69.0-76b51593a9-aaa40a43ca.zip"; sha512 = "aaa40a43cab358e10c2566d62966eff61925fb2605c146967bf9eb8acb4a883d4ca7c8a5eee1915271da08f27ddf1ed7dc520a8617f229ce70c7d00557173cc4"; }; "cookie@npm:0.4.1" = { filename = "cookie-npm-0.4.1-cc5e2ebb42-bd7c47f5d9.zip"; sha512 = "bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8"; }; "lru_map@npm:0.3.3" = { filename = "lru_map-npm-0.3.3-a038bb3418-ca9dd43c65.zip"; sha512 = "ca9dd43c65ed7a4f117c548028101c5b6855e10923ea9d1f635af53ad20c5868ff428c364d454a7b57fe391b89c704982275410c3c5099cca5aeee00d76e169a"; }; "tslib@npm:2.6.2" = { filename = "tslib-npm-2.6.2-4fc8c068d9-329ea56123.zip"; sha512 = "329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad"; }; +"b4a@npm:1.6.6" = { filename = "b4a-npm-1.6.6-140a53bc1d-c46a27e3ac.zip"; sha512 = "c46a27e3ac9c84426ae728f0fc46a6ae7703a7bc03e771fa0bef4827fd7cf3bb976d1a3d5afff54606248372ab8fdf595bd0114406690edf37f14d120630cf7f"; }; "path-key@npm:3.1.1" = { filename = "path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip"; sha512 = "55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020"; }; "buffer-writer@npm:2.0.0" = { filename = "buffer-writer-npm-2.0.0-5cd2ef55bc-11736b48bb.zip"; sha512 = "11736b48bb75106c52ca8ec9f025e7c1b3b25ce31875f469d7210eabd5c576c329e34f6b805d4a8d605ff3f0db1e16342328802c4c963e9c826b0e43a4e631c2"; }; "packet-reader@npm:1.0.0" = { filename = "packet-reader-npm-1.0.0-e93c92246b-0b7516f0cb.zip"; sha512 = "0b7516f0cbf3e322aad591bed29ba544220088c53943145c0d9121a6f59182ad811f7fd6785a8979a34356aca69d97653689029964c5998dc02645633d88ffd7"; }; @@ -218,8 +220,8 @@ cacheEntries = { "pg-connection-string@npm:2.6.2" = { filename = "pg-connection-string-npm-2.6.2-43a4a40be5-22265882c3.zip"; sha512 = "22265882c3b6f2320785378d0760b051294a684989163d5a1cde4009e64e84448d7bf67d9a7b9e7f69440c3ee9e2212f9aa10dd17ad6773f6143c6020cebbcb5"; }; "pg-pool@npm:3.6.1" = { filename = "pg-pool-npm-3.6.1-477c9660b9-8a6513e6f7.zip"; sha512 = "8a6513e6f74a794708c9dd16d2ccda0debadc56435ec2582de2b2e35b01315550c5dab8a0a9a2a16f4adce45523228f5739940fb7687ec7e9c300f284eb08fd1"; }; "pg-protocol@npm:1.6.0" = { filename = "pg-protocol-npm-1.6.0-089a4b1d3c-e12662d2de.zip"; sha512 = "e12662d2de2011e0c3a03f6a09f435beb1025acdc860f181f18a600a5495dc38a69d753bbde1ace279c8c442536af9c1a7c11e1d0fe3fad3aa1348b28d9d2683"; }; +"@emurgo/cip14-js@npm:3.0.1" = { filename = "@emurgo-cip14-js-npm-3.0.1-6011030ea2-9eaf312410.zip"; sha512 = "9eaf3124108e8c252a745de9ef1f334ab26a32271077b00fe0ea2a06e40838dd435165dac523ebd4d851ae7a94d8c56766dabc372aabffedd36551c798c607c5"; }; "jest-extended@npm:3.2.4" = { filename = "jest-extended-npm-3.2.4-b882af7fa5-16e4f300d9.zip"; sha512 = "16e4f300d9c5bf110f7f3422e49e06c968a99a44cede2b2821ddd480c33b3d9cd4dc58035b2f022e6018247da8f887295d6c2499647675dedb6e305142604e7d"; }; -"blake2b-wasm@npm:1.1.7" = { filename = "blake2b-wasm-npm-1.1.7-ac747aaa82-be5ebacdd2.zip"; sha512 = "be5ebacdd25076ae5fcaf1c60c37096c85490a36ee1f8e78d5c4c2fb8ccad0fe0e22cecadba6fcf6ed7d91c1aed9c55980811fe064fafb4ccd80ac34a8a326ea"; }; "@vitest/coverage-v8@npm:1.2.2" = { filename = "@vitest-coverage-v8-npm-1.2.2-38d2f25b60-0f0fc98b17.zip"; sha512 = "0f0fc98b17cd4d9c292f3f381b676fb8f5b1480d261541a676d1a307e2c9f39a9d59fb497f963b18802b4f7065ace3fdc5e6f9f95d9379560aa4ac5f09f6918e"; }; "punycode@npm:2.1.1" = { filename = "punycode-npm-2.1.1-26eb3e15cf-823bf443c6.zip"; sha512 = "823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8"; }; "shebang-command@npm:2.0.0" = { filename = "shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip"; sha512 = "6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa"; }; @@ -315,6 +317,7 @@ cacheEntries = { "strip-json-comments@npm:3.1.1" = { filename = "strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip"; sha512 = "492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443"; }; "@sinonjs/commons@npm:2.0.0" = { filename = "@sinonjs-commons-npm-2.0.0-3716f24f20-5023ba17ed.zip"; sha512 = "5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137"; }; "@cspotcode/source-map-support@npm:0.8.1" = { filename = "@cspotcode-source-map-support-npm-0.8.1-964f2de99d-5718f26708.zip"; sha512 = "5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa"; }; +"blake2b@npm:2.1.3" = { filename = "blake2b-npm-2.1.3-b5b61ec9ad-e652234249.zip"; sha512 = "e652234249cbdb3345488d52b5e76e8572b8e5333f3f0d5e716772b7c5d2142f433c3fe86130e92117329532e1d1235cdaa89f40bbca27a8ae528bef428241ef"; }; "assert-options@npm:0.8.1" = { filename = "assert-options-npm-0.8.1-ed3051eefd-aaf86a9c6a.zip"; sha512 = "aaf86a9c6a330e43172544ce2cc2b59bf8b4338dd0933d852e9b7efbae7b801944671e7dd6cc172d0dcfc88713009d88dca56cc34c8d4ba7fc5aeb1cf3e9bcef"; }; "pg-minify@npm:1.6.3" = { filename = "pg-minify-npm-1.6.3-fef1d2601d-5b9868f2b9.zip"; sha512 = "5b9868f2b90b9629455db6e13c35b1228b65803bbf9fc1a02d49fe147b55bb20eed53d368bf8f9f8127a2e740697b20702702e58f4846d9f5f3749d840a14c99"; }; "spex@npm:3.3.0" = { filename = "spex-npm-3.3.0-833f63faad-c2797eae65.zip"; sha512 = "c2797eae658e0f97b92775a9a87cd6d615e87693b4d5abfd3120543391e3eeab2755ab101489752f3ff47c1e0623737a604c5411e8f9bca7714d4e0427c182c0"; }; @@ -396,6 +399,7 @@ cacheEntries = { "proxy-addr@npm:2.0.7" = { filename = "proxy-addr-npm-2.0.7-dae6552872-29c6990ce9.zip"; sha512 = "29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74"; }; "chokidar@npm:3.5.3" = { filename = "chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip"; sha512 = "b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c"; }; "postgres-interval@npm:1.2.0" = { filename = "postgres-interval-npm-1.2.0-ca6414744d-746b71f938.zip"; sha512 = "746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2"; }; +"nanoassert@npm:1.1.0" = { filename = "nanoassert-npm-1.1.0-1da45b4766-f360fe639d.zip"; sha512 = "f360fe639db8edc422de9f5a8a7d384ba9c11e9c6fac149f7ad3b0a94e4ec9d5aa44ce55b3e4c7682658efad792604fc96c336b0e80a3590744104ba58af80c7"; }; "obuf@npm:1.1.2" = { filename = "obuf-npm-1.1.2-8db5fae8dd-41a2ba310e.zip"; sha512 = "41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f"; }; "html-escaper@npm:2.0.2" = { filename = "html-escaper-npm-2.0.2-38e51ef294-d2df2da3ad.zip"; sha512 = "d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974"; }; "@fastify/ajv-compiler@npm:3.5.0" = { filename = "@fastify-ajv-compiler-npm-3.5.0-d1a90dc51f-5e5b16469f.zip"; sha512 = "5e5b16469f8d586473d0b32e3a9cf38c0d86ef2a6fb7ea12ed7f3665642bd8eb2dde9adcc317814369cb5a58210bfdac35996fa87d1cc23e88bbc799f0b128b0"; }; @@ -403,6 +407,7 @@ cacheEntries = { "find-my-way@npm:7.6.2" = { filename = "find-my-way-npm-7.6.2-5f2c0ab9d8-56c02350ab.zip"; sha512 = "56c02350aba2cc4cff82b3e00171cf4db72756b8ca5f0e41562d21f89cf29512b9e83b6e29ab352303ca9d0dcbfcd8c93f50d52dc92f1eeecc4bc991404ef533"; }; "light-my-request@npm:5.11.0" = { filename = "light-my-request-npm-5.11.0-d6f35c2a2c-f639edb466.zip"; sha512 = "f639edb4664534bfcc87aff3fc36e7199ef5b04c399ce51a87481786d23ad1d439a71a5beeada5d0fe607c9d6efccbcd1bef265f31397e130f4077d43cc6d45f"; }; "atomic-sleep@npm:1.0.0" = { filename = "atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip"; sha512 = "b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36"; }; +"blake2b-wasm@npm:1.1.7" = { filename = "blake2b-wasm-npm-1.1.7-ac747aaa82-be5ebacdd2.zip"; sha512 = "be5ebacdd25076ae5fcaf1c60c37096c85490a36ee1f8e78d5c4c2fb8ccad0fe0e22cecadba6fcf6ed7d91c1aed9c55980811fe064fafb4ccd80ac34a8a326ea"; }; "jest-matcher-utils@npm:29.3.1" = { filename = "jest-matcher-utils-npm-29.3.1-5d9d00434d-311e8d9f1e.zip"; sha512 = "311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77"; }; "istanbul-lib-coverage@npm:3.2.0" = { filename = "istanbul-lib-coverage-npm-3.2.0-93f84b2c8c-a2a545033b.zip"; sha512 = "a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9"; }; "source-map@npm:0.6.1" = { filename = "source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip"; sha512 = "59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2"; }; diff --git a/yarn.lock b/yarn.lock index 17e1235b..e335e151 100644 --- a/yarn.lock +++ b/yarn.lock @@ -207,7 +207,7 @@ __metadata: languageName: node linkType: hard -"@emurgo/cip14-js@npm:3.0.1, @emurgo/cip14-js@npm:^3.0.1": +"@emurgo/cip14-js@npm:3.0.1": version: 3.0.1 resolution: "@emurgo/cip14-js@npm:3.0.1" dependencies: @@ -1106,6 +1106,13 @@ __metadata: languageName: node linkType: hard +"@types/blake2b@npm:^2.1.3": + version: 2.1.3 + resolution: "@types/blake2b@npm:2.1.3" + checksum: 55a6ed7123a7adc82cc51131644b6c035c28142d028fbc23fe06251c76583ee3303d73204e21de8ea075ef84a04c4ed424754f5035fed20730a85272620a0de3 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.2 resolution: "@types/body-parser@npm:1.19.2" @@ -2119,6 +2126,13 @@ __metadata: languageName: node linkType: hard +"b4a@npm:^1.0.1": + version: 1.6.6 + resolution: "b4a@npm:1.6.6" + checksum: c46a27e3ac9c84426ae728f0fc46a6ae7703a7bc03e771fa0bef4827fd7cf3bb976d1a3d5afff54606248372ab8fdf595bd0114406690edf37f14d120630cf7f + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.0 resolution: "balanced-match@npm:1.0.0" @@ -2179,6 +2193,16 @@ __metadata: languageName: node linkType: hard +"blake2b-wasm@npm:^2.4.0": + version: 2.4.0 + resolution: "blake2b-wasm@npm:2.4.0" + dependencies: + b4a: ^1.0.1 + nanoassert: ^2.0.0 + checksum: 1839dd0693681228d81f781dd8680a6803a629ca374aed5ac02fa649ce40a67a85eb49eeb2ec6aeb7ef3ef5aa169b3579b50eabf7afa360d190338bc3e8666bd + languageName: node + linkType: hard + "blake2b@npm:2.1.3": version: 2.1.3 resolution: "blake2b@npm:2.1.3" @@ -2189,6 +2213,16 @@ __metadata: languageName: node linkType: hard +"blake2b@npm:^2.1.4": + version: 2.1.4 + resolution: "blake2b@npm:2.1.4" + dependencies: + blake2b-wasm: ^2.4.0 + nanoassert: ^2.0.0 + checksum: cd598c96d459017714b7f9cb8892ef2b0a94f362e26e6baa46b7b8b189af0006ce25ab1713e3ec1484eb18ce7ebe1eb24e07d01e42ab1147067de2419c7f6158 + languageName: node + linkType: hard + "blessed@npm:0.1.81": version: 0.1.81 resolution: "blessed@npm:0.1.81" @@ -2207,10 +2241,10 @@ __metadata: "@blockfrost/blockfrost-utils": 2.8.0 "@blockfrost/openapi": 0.1.60 "@emurgo/cardano-serialization-lib-nodejs": 11.5.0 - "@emurgo/cip14-js": ^3.0.1 "@fastify/cors": ^8.3.0 "@fastify/postgres": ^5.2.0 "@sentry/node": ^7.69.0 + "@types/blake2b": ^2.1.3 "@types/config": 3.3.1 "@types/express": ^4.17.17 "@types/node": ^20.6.2 @@ -2224,6 +2258,7 @@ __metadata: JSONStream: ^1.3.5 ajv: ^8.12.0 axios: ^1.5.0 + blake2b: ^2.1.4 config: 3.3.9 crc: ^4.3.2 cross-env: ^7.0.3 @@ -6244,6 +6279,13 @@ __metadata: languageName: node linkType: hard +"nanoassert@npm:^2.0.0": + version: 2.0.0 + resolution: "nanoassert@npm:2.0.0" + checksum: b1d366f9524405f3337192d32dda6ac0b02374e4d0550c9aad33480caf2eb3c84c06f18f41f4c5404c14f6fc1ae6b84692b4375166dcb9f2d04a2ea9b9bccba0 + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7"