@leofcoin/codec-format-interface 1.7.14 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-format-interface.js","sources":["../../src/codec-format-interface.ts"],"sourcesContent":["import BasicInterface, { jsonParseBigInt } from './basic-interface.js'\nimport Codec from './codec.js'\nimport Hash from './codec-hash.js'\n\nimport type { base58String } from '@vandeurenglenn/base58'\nimport type { base32String } from '@vandeurenglenn/base32'\nimport type { HexString } from '@vandeurenglenn/is-hex'\n\nexport default class FormatInterface extends BasicInterface implements FormatInterface {\n hashFormat: string\n #hash\n #encoded\n\n get encoded() {\n return this.#encoded || this.encode()\n }\n\n set encoded(value) {\n this.#encoded = value\n }\n\n init(buffer: Uint8Array | ArrayBuffer | FormatInterface | string) {\n if (buffer instanceof FormatInterface && buffer?.name === this.name) {\n return buffer\n } else if (buffer instanceof Uint8Array) {\n this.fromUint8Array(buffer)\n } else if (buffer instanceof ArrayBuffer) {\n this.fromArrayBuffer(buffer)\n } else if (typeof buffer === 'string') {\n if (this.isHex(buffer as HexString)) this.fromHex(buffer as string)\n else if (this.isBase58(buffer as base58String)) this.fromBs58(buffer)\n else if (this.isBase32(buffer as base32String)) this.fromBs32(buffer)\n else this.fromString(buffer as string)\n } else if (typeof buffer === 'object' && buffer !== null) {\n this.create(buffer as object)\n } else {\n // Explicitly reject all other types (number, boolean, undefined, symbol, function, null)\n throw new TypeError(`Invalid input type for FormatInterface: ${typeof buffer}`)\n }\n return this\n }\n\n hasCodec() {\n if (!this.encoded) return false\n const codec = new Codec(this.encoded)\n if (codec.name) return true\n }\n\n decode(encoded?: Uint8Array): object {\n encoded = encoded || this.encoded\n const codec = new Codec(encoded)\n if (codec.codecBuffer) {\n encoded = encoded.slice(codec.codecBuffer.length)\n this.name = codec.name\n this.decoded = this.protoDecode(encoded)\n // try {\n // this.decoded = JSON.parse(this.decoded)\n // } catch {\n\n // }\n } else {\n throw new Error(`no codec found`)\n }\n\n return this.decoded\n }\n\n encode(decoded?: object) {\n let encoded: Uint8Array\n decoded = decoded || this.decoded\n const codec = new Codec(this.name)\n\n if (decoded instanceof Uint8Array) encoded = decoded\n else encoded = this.protoEncode(decoded)\n\n if (codec.codecBuffer) {\n const uint8Array = new Uint8Array(encoded.length + codec.codecBuffer.length)\n uint8Array.set(codec.codecBuffer)\n uint8Array.set(encoded, codec.codecBuffer.length)\n this.encoded = uint8Array\n } else {\n throw new Error(`invalid codec`)\n }\n return this.encoded\n }\n /**\n * @param {Buffer|String|Object} buffer - data - The data needed to create the desired message\n * @param {Object} proto - {protoObject}\n * @param {Object} options - {hashFormat, name}\n */\n constructor(buffer, proto, options?: { hashFormat?: string; name?: string }) {\n super()\n this.proto = proto\n this.hashFormat = options?.hashFormat ? options.hashFormat : 'bs32'\n\n if (options?.name) this.name = options.name\n\n this.init(buffer)\n }\n\n get format() {\n const upper = this.hashFormat.charAt(0).toUpperCase()\n return `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`\n }\n\n /**\n * Extract content bytes without codec prefix\n */\n get contentBytes(): Uint8Array {\n if (!this.encoded) return new Uint8Array(0)\n const codec = new Codec(this.encoded)\n if (codec.codecBuffer) {\n return this.encoded.slice(codec.codecBuffer.length)\n }\n return this.encoded\n }\n\n beforeHashing(decoded: { [index: string]: any }) {\n // Avoid copying if not needed\n if (decoded && Object.prototype.hasOwnProperty.call(decoded, 'hash')) {\n // Only copy if hash is present\n const rest = { ...decoded }\n delete rest.hash\n return rest\n }\n return decoded\n }\n\n /**\n * @return {PeernetHash}\n */\n get peernetHash() {\n // Optimize: if decoded has no hash property, contentBytes are already correct\n // Since protoEncode is deterministic (varint-based), we can use them directly\n if (\n this.encoded &&\n this.decoded &&\n !Object.prototype.hasOwnProperty.call(this.decoded, 'hash')\n ) {\n // @ts-ignore\n const hash = new Hash({ name: this.name })\n return hash.init(this.contentBytes)\n }\n\n // Fallback: must re-encode without hash property\n const decoded = this.beforeHashing({ ...this.decoded })\n // @ts-ignore\n const hash = new Hash({ name: this.name })\n return hash.init(decoded)\n }\n\n /**\n * @return {peernetHash}\n */\n async hash() {\n if (this.#hash) return this.#hash\n const upper = this.hashFormat.charAt(0).toUpperCase()\n const format = `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`\n this.#hash = (await this.peernetHash)[`to${format}`]()\n return this.#hash\n }\n\n fromUint8Array(buffer) {\n this.encoded = buffer\n return this.hasCodec()\n ? this.decode()\n : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt))\n }\n\n fromArrayBuffer(buffer) {\n this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength)\n return this.hasCodec()\n ? this.decode()\n : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt))\n }\n\n /**\n * @param {Object} data\n */\n create(data: object) {\n const decoded = {}\n // @ts-ignore\n if (data.hash) this.#hash = data.hash\n if (this.keys?.length > 0) {\n for (const key of this.keys) {\n decoded[key] = data[key]\n }\n this.decoded = decoded\n // return this.encode(decoded)\n }\n }\n}\n"],"names":["BasicInterface","codec","Codec","Hash","jsonParseBigInt"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ var varint = require('varint');
4
+ var hashWasm = require('hash-wasm');
5
+ var basicInterface = require('./basic-interface.js');
6
+ var codec = require('./codec.js');
7
+ require('@vandeurenglenn/base32');
8
+ require('@vandeurenglenn/base58');
9
+ require('@vandeurenglenn/is-hex');
10
+ require('@vandeurenglenn/proto-array');
11
+ require('@vandeurenglenn/typed-array-utils');
12
+ require('@leofcoin/codecs');
13
+
14
+ const createHasher = (hashVariant) => {
15
+ switch (hashVariant) {
16
+ case 1:
17
+ return hashWasm.createSHA1();
18
+ case 224:
19
+ return hashWasm.createSHA224();
20
+ case 256:
21
+ return hashWasm.createSHA256();
22
+ case 384:
23
+ return hashWasm.createSHA384();
24
+ case 512:
25
+ return hashWasm.createSHA512();
26
+ default:
27
+ throw new Error(`unsupported hash variant: ${hashVariant}`);
28
+ }
29
+ };
30
+ const digestBuffer = async (hashVariant, buffer) => {
31
+ const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
32
+ const hasher = await createHasher(hashVariant);
33
+ hasher.init();
34
+ hasher.update(view);
35
+ const digest = hasher.digest('binary');
36
+ return digest instanceof Uint8Array ? digest : new Uint8Array(digest);
37
+ };
38
+ class CodecHash extends basicInterface.default {
39
+ codec;
40
+ discoCodec;
41
+ size;
42
+ codecs;
43
+ constructor(options = { name: 'disco-hash', codecs: {} }) {
44
+ super();
45
+ if (options?.name)
46
+ this.name = options.name;
47
+ else
48
+ this.name = 'disco-hash';
49
+ if (options?.codecs)
50
+ this.codecs = options.codecs;
51
+ }
52
+ async init(uint8Array) {
53
+ if (uint8Array) {
54
+ if (!(uint8Array instanceof Uint8Array)) {
55
+ throw new Error('CodecHash only supports Uint8Array input');
56
+ }
57
+ // For large buffers, only check first bytes for codec prefix
58
+ // Codec prefixes are small (varint encoded), so 100 bytes is more than enough
59
+ const checkBuffer = uint8Array.length > 100 ? uint8Array.subarray(0, 100) : uint8Array;
60
+ this.discoCodec = new codec(checkBuffer);
61
+ const name = this.discoCodec.name;
62
+ if (name) {
63
+ this.name = name;
64
+ this.decode(uint8Array);
65
+ }
66
+ else {
67
+ await this.encode(uint8Array);
68
+ }
69
+ }
70
+ return this;
71
+ }
72
+ get prefix() {
73
+ const length = this.length;
74
+ const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length);
75
+ uint8Array.set(length);
76
+ uint8Array.set(this.discoCodec.codecBuffer, length.length);
77
+ return uint8Array;
78
+ }
79
+ get length() {
80
+ return varint.encode(this.size);
81
+ }
82
+ get buffer() {
83
+ return this.encoded;
84
+ }
85
+ get hash() {
86
+ return this.encoded;
87
+ }
88
+ async encode(buffer, name) {
89
+ if (!this.name && name)
90
+ this.name = name;
91
+ if (!buffer)
92
+ throw new Error('buffer is required for encoding');
93
+ this.discoCodec = new codec(this.name);
94
+ let hashAlg = this.discoCodec.hashAlg;
95
+ const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1]);
96
+ if (hashAlg.includes('dbl')) {
97
+ hashAlg = hashAlg.replace('dbl-', '');
98
+ buffer = await digestBuffer(hashVariant, buffer);
99
+ }
100
+ this.digest = await digestBuffer(hashVariant, buffer);
101
+ this.size = this.digest.length;
102
+ this.codec = this.discoCodec.encode();
103
+ this.codec = this.discoCodec.codecBuffer;
104
+ const uint8Array = new Uint8Array(this.digest.length + this.prefix.length);
105
+ uint8Array.set(this.prefix);
106
+ uint8Array.set(this.digest, this.prefix.length);
107
+ this.encoded = uint8Array;
108
+ return this.encoded;
109
+ }
110
+ async validate(buffer) {
111
+ if (!(buffer instanceof Uint8Array)) {
112
+ throw new Error('CodecHash only supports Uint8Array input');
113
+ }
114
+ const codec = varint.decode(buffer);
115
+ if (this.codecs[codec]) {
116
+ this.decode(buffer);
117
+ }
118
+ else {
119
+ await this.encode(buffer);
120
+ }
121
+ }
122
+ decode(buffer) {
123
+ this.encoded = buffer;
124
+ const codec$1 = varint.decode(buffer);
125
+ this.discoCodec = new codec(codec$1, this.codecs);
126
+ // TODO: validate codec
127
+ buffer = buffer.slice(varint.decode.bytes);
128
+ this.size = varint.decode(buffer);
129
+ this.digest = buffer.slice(varint.decode.bytes);
130
+ if (this.digest.length !== this.size) {
131
+ throw new Error(`hash length inconsistent: 0x${this.encoded.toString()}`);
132
+ }
133
+ // const discoCodec = new Codec(codec, this.codecs)
134
+ this.name = this.discoCodec.name;
135
+ this.size = this.digest.length;
136
+ return {
137
+ codec: this.codec,
138
+ name: this.name,
139
+ size: this.size,
140
+ length: this.length,
141
+ digest: this.digest
142
+ };
143
+ }
144
+ }
145
+
146
+ module.exports = CodecHash;
147
+ //# sourceMappingURL=codec-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-hash.js","sources":["../../src/codec-hash.ts"],"sourcesContent":["import varint from 'varint'\nimport { createSHA1, createSHA224, createSHA256, createSHA384, createSHA512 } from 'hash-wasm'\nimport BasicInterface from './basic-interface.js'\nimport Codec from './codec.js'\n\nconst createHasher = (hashVariant: number) => {\n switch (hashVariant) {\n case 1:\n return createSHA1()\n case 224:\n return createSHA224()\n case 256:\n return createSHA256()\n case 384:\n return createSHA384()\n case 512:\n return createSHA512()\n default:\n throw new Error(`unsupported hash variant: ${hashVariant}`)\n }\n}\n\nconst digestBuffer = async (\n hashVariant: number,\n buffer: ArrayBuffer | Uint8Array\n): Promise<Uint8Array> => {\n const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer)\n const hasher = await createHasher(hashVariant)\n hasher.init()\n hasher.update(view)\n const digest = hasher.digest('binary')\n return digest instanceof Uint8Array ? digest : new Uint8Array(digest)\n}\n\ntype CodecHashOptions = {\n name?: string\n codecs?: object\n}\n\nexport default class CodecHash extends BasicInterface {\n codec: Uint8Array\n discoCodec: Codec\n size: number\n codecs: object\n constructor(options: CodecHashOptions = { name: 'disco-hash', codecs: {} }) {\n super()\n if (options?.name) this.name = options.name\n else this.name = 'disco-hash'\n if (options?.codecs) this.codecs = options.codecs\n }\n\n async init(uint8Array: Uint8Array) {\n if (uint8Array) {\n if (!(uint8Array instanceof Uint8Array)) {\n throw new Error('CodecHash only supports Uint8Array input')\n }\n // For large buffers, only check first bytes for codec prefix\n // Codec prefixes are small (varint encoded), so 100 bytes is more than enough\n const checkBuffer = uint8Array.length > 100 ? uint8Array.subarray(0, 100) : uint8Array\n this.discoCodec = new Codec(checkBuffer)\n const name = this.discoCodec.name\n\n if (name) {\n this.name = name\n this.decode(uint8Array)\n } else {\n await this.encode(uint8Array)\n }\n }\n return this\n }\n get prefix() {\n const length = this.length\n const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length)\n uint8Array.set(length)\n uint8Array.set(this.discoCodec.codecBuffer, length.length)\n\n return uint8Array\n }\n\n get length() {\n return varint.encode(this.size)\n }\n\n get buffer() {\n return this.encoded\n }\n\n get hash() {\n return this.encoded\n }\n\n async encode(buffer, name?) {\n if (!this.name && name) this.name = name\n if (!buffer) throw new Error('buffer is required for encoding')\n this.discoCodec = new Codec(this.name)\n let hashAlg = this.discoCodec.hashAlg\n const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1])\n\n if (hashAlg.includes('dbl')) {\n hashAlg = hashAlg.replace('dbl-', '')\n buffer = await digestBuffer(hashVariant, buffer)\n }\n this.digest = await digestBuffer(hashVariant, buffer)\n\n this.size = this.digest.length\n\n this.codec = this.discoCodec.encode()\n this.codec = this.discoCodec.codecBuffer\n const uint8Array = new Uint8Array(this.digest.length + this.prefix.length)\n uint8Array.set(this.prefix)\n uint8Array.set(this.digest, this.prefix.length)\n\n this.encoded = uint8Array\n\n return this.encoded\n }\n\n async validate(buffer: Uint8Array) {\n if (!(buffer instanceof Uint8Array)) {\n throw new Error('CodecHash only supports Uint8Array input')\n }\n const codec = varint.decode(buffer)\n if (this.codecs[codec]) {\n this.decode(buffer)\n } else {\n await this.encode(buffer)\n }\n }\n\n decode(buffer) {\n this.encoded = buffer\n const codec = varint.decode(buffer)\n\n this.discoCodec = new Codec(codec, this.codecs)\n // TODO: validate codec\n buffer = buffer.slice(varint.decode.bytes)\n this.size = varint.decode(buffer)\n this.digest = buffer.slice(varint.decode.bytes)\n if (this.digest.length !== this.size) {\n throw new Error(`hash length inconsistent: 0x${this.encoded.toString()}`)\n }\n\n // const discoCodec = new Codec(codec, this.codecs)\n\n this.name = this.discoCodec.name\n\n this.size = this.digest.length\n\n return {\n codec: this.codec,\n name: this.name,\n size: this.size,\n length: this.length,\n digest: this.digest\n }\n }\n}\n"],"names":["createSHA1","createSHA224","createSHA256","createSHA384","createSHA512","BasicInterface","Codec","codec"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var varint = require('varint');
4
+ var codecs = require('@leofcoin/codecs');
5
+ var basicInterface = require('./basic-interface.js');
6
+ require('@vandeurenglenn/base32');
7
+ require('@vandeurenglenn/base58');
8
+ require('@vandeurenglenn/is-hex');
9
+ require('@vandeurenglenn/proto-array');
10
+ require('@vandeurenglenn/typed-array-utils');
11
+
12
+ class Codec extends basicInterface.default {
13
+ codecBuffer;
14
+ codec;
15
+ hashAlg;
16
+ constructor(buffer) {
17
+ super();
18
+ if (buffer) {
19
+ if (buffer instanceof Uint8Array) {
20
+ const codec = varint.decode(buffer);
21
+ const name = this.getCodecName(codec);
22
+ if (name) {
23
+ this.name = name;
24
+ this.encoded = buffer;
25
+ this.decode(buffer);
26
+ }
27
+ else {
28
+ this.encode(Number(new TextDecoder().decode(buffer)));
29
+ }
30
+ }
31
+ else if (buffer instanceof ArrayBuffer) {
32
+ const codec = varint.decode(buffer);
33
+ const name = this.getCodecName(codec);
34
+ if (name) {
35
+ this.name = name;
36
+ this.decode(buffer);
37
+ }
38
+ else {
39
+ this.encode(Number(new TextDecoder().decode(new Uint8Array(buffer))));
40
+ }
41
+ }
42
+ else if (typeof buffer === 'string') {
43
+ if (codecs.utils.getCodec(buffer))
44
+ this.fromName(buffer);
45
+ else if (this.isHex(buffer))
46
+ this.fromHex(buffer);
47
+ else if (this.isBase32(buffer))
48
+ this.fromBs32(buffer);
49
+ else if (this.isBase58(buffer))
50
+ this.fromBs58(buffer);
51
+ else
52
+ this.fromString(buffer);
53
+ }
54
+ if (!isNaN(buffer))
55
+ if (codecs.utils.getCodec(buffer))
56
+ this.fromCodec(buffer);
57
+ }
58
+ }
59
+ fromEncoded(encoded) {
60
+ const codec = varint.decode(encoded);
61
+ const name = this.getCodecName(codec);
62
+ this.name = name;
63
+ this.encoded = encoded;
64
+ return this.decode(encoded);
65
+ }
66
+ getCodec(name) {
67
+ return codecs.utils.getCodec(name);
68
+ }
69
+ getCodecName(codec) {
70
+ return codecs.utils.getCodecName(codec);
71
+ }
72
+ getHashAlg(name) {
73
+ return codecs.utils.getHashAlg(name);
74
+ }
75
+ fromCodec(codec) {
76
+ this.name = this.getCodecName(codec);
77
+ this.hashAlg = this.getHashAlg(this.name);
78
+ this.codec = this.getCodec(this.name);
79
+ this.codecBuffer = varint.encode(this.codec);
80
+ this.decoded = {
81
+ name: this.name,
82
+ hashAlg: this.hashAlg,
83
+ codec: this.codec,
84
+ codecBuffer: this.codecBuffer
85
+ };
86
+ }
87
+ fromName(name) {
88
+ const codec = this.getCodec(name);
89
+ this.name = name;
90
+ this.codec = codec;
91
+ this.hashAlg = this.getHashAlg(name);
92
+ this.codecBuffer = varint.encode(this.codec);
93
+ this.decoded = {
94
+ name: this.name,
95
+ hashAlg: this.hashAlg,
96
+ codec: this.codec,
97
+ codecBuffer: this.codecBuffer
98
+ };
99
+ }
100
+ decode(encoded) {
101
+ encoded = encoded || this.encoded;
102
+ const codec = varint.decode(encoded);
103
+ this.fromCodec(codec);
104
+ return this.decoded;
105
+ }
106
+ encode(codec) {
107
+ codec = codec || this.codec;
108
+ this.encoded = varint.encode(codec);
109
+ return this.encoded;
110
+ }
111
+ }
112
+
113
+ module.exports = Codec;
114
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sources":["../../src/codec.ts"],"sourcesContent":["import varint from 'varint';\nimport { utils as codecUtils} from '@leofcoin/codecs'\nimport BasicInterface from './basic-interface.js'\n\nexport default class Codec extends BasicInterface {\n codecBuffer: Uint8Array\n codec: number\n hashAlg: string\n\n constructor(buffer: string | number | object | Uint8Array | ArrayBuffer) {\n super()\n if (buffer) {\n if (buffer instanceof Uint8Array) {\n const codec = varint.decode(buffer);\n const name = this.getCodecName(codec)\n if (name) {\n this.name = name\n this.encoded = buffer\n this.decode(buffer)\n } else {\n this.encode(Number(new TextDecoder().decode(buffer)))\n }\n } else if (buffer instanceof ArrayBuffer) {\n const codec = varint.decode(buffer);\n const name = this.getCodecName(codec)\n if (name) {\n this.name = name\n this.decode(buffer as Uint8Array)\n } else {\n this.encode(Number(new TextDecoder().decode(new Uint8Array(buffer))))\n }\n } else if (typeof buffer === 'string') {\n if (codecUtils.getCodec(buffer)) this.fromName(buffer)\n else if (this.isHex(buffer)) this.fromHex(buffer)\n else if (this.isBase32(buffer)) this.fromBs32(buffer)\n else if (this.isBase58(buffer)) this.fromBs58(buffer)\n else this.fromString(buffer)\n }\n if (!isNaN(buffer as number)) if (codecUtils.getCodec(buffer as number)) this.fromCodec(buffer as number)\n }\n }\n\n fromEncoded(encoded: Uint8Array): object {\n const codec = varint.decode(encoded);\n const name = this.getCodecName(codec)\n this.name = name\n this.encoded = encoded\n return this.decode(encoded)\n }\n\n getCodec(name: string): number {\n return codecUtils.getCodec(name)\n }\n\n getCodecName(codec: number): string {\n return codecUtils.getCodecName(codec)\n }\n\n getHashAlg(name: string): string {\n return codecUtils.getHashAlg(name)\n }\n\n fromCodec(codec: number) {\n this.name = this.getCodecName(codec)\n this.hashAlg = this.getHashAlg(this.name)\n this.codec = this.getCodec(this.name)\n this.codecBuffer = varint.encode(this.codec)\n this.decoded = {\n name: this.name,\n hashAlg: this.hashAlg,\n codec: this.codec,\n codecBuffer: this.codecBuffer\n }\n }\n\n fromName(name: string) {\n const codec = this.getCodec(name)\n this.name = name\n this.codec = codec\n this.hashAlg = this.getHashAlg(name)\n this.codecBuffer = varint.encode(this.codec)\n this.decoded = {\n name: this.name,\n hashAlg: this.hashAlg,\n codec: this.codec,\n codecBuffer: this.codecBuffer\n }\n }\n\n decode(encoded?: Uint8Array): object {\n encoded = encoded || this.encoded\n const codec = varint.decode(encoded);\n this.fromCodec(codec)\n return this.decoded\n }\n\n encode(codec?: number): Uint8Array {\n codec = codec || this.codec \n this.encoded = varint.encode(codec)\n return this.encoded\n }\n}\n"],"names":["BasicInterface","codecUtils"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ var basicInterface = require('./basic-interface.js');
4
+ var codecFormatInterface = require('./codec-format-interface.js');
5
+ var codecHash = require('./codec-hash.js');
6
+ var codec = require('./codec.js');
7
+ var codecs = require('@leofcoin/codecs');
8
+ require('@vandeurenglenn/base32');
9
+ require('@vandeurenglenn/base58');
10
+ require('@vandeurenglenn/is-hex');
11
+ require('@vandeurenglenn/proto-array');
12
+ require('@vandeurenglenn/typed-array-utils');
13
+ require('varint');
14
+ require('hash-wasm');
15
+
16
+ /**
17
+ * Basic interface for codecs
18
+ */
19
+ const BasicInterface = basicInterface.default;
20
+ /**
21
+ * Interface for defining codec formats
22
+ */
23
+ const FormatInterface = codecFormatInterface;
24
+ /**
25
+ * Codec hash utility class
26
+ */
27
+ const CodecHash = codecHash;
28
+ /**
29
+ * Codec utility class
30
+ */
31
+ const Codec = codec;
32
+
33
+ Object.defineProperty(exports, "codecs", {
34
+ enumerable: true,
35
+ get: function () { return codecs.codecs; }
36
+ });
37
+ exports.BasicInterface = BasicInterface;
38
+ exports.Codec = Codec;
39
+ exports.CodecHash = CodecHash;
40
+ exports.FormatInterface = FormatInterface;
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import basicInterface from './basic-interface.js'\nimport formatInterface from './codec-format-interface.js'\nimport codecHash from './codec-hash.js'\nimport codec from './codec.js'\n\n/**\n * Codecs utility from @leofcoin/codecs\n */\nexport { codecs } from '@leofcoin/codecs'\n\n/**\n * Basic interface for codecs\n */\nexport const BasicInterface = basicInterface\n\n/**\n * Interface for defining codec formats\n */\nexport const FormatInterface = formatInterface\n\n/**\n * Codec hash utility class\n */\nexport const CodecHash = codecHash\n\n/**\n * Codec utility class\n */\nexport const Codec = codec\n"],"names":["basicInterface","formatInterface"],"mappings":";;;;;;;;;;;;;;;AAUA;;AAEG;AACI,MAAM,cAAc,GAAGA;AAE9B;;AAEG;AACI,MAAM,eAAe,GAAGC;AAE/B;;AAEG;AACI,MAAM,SAAS,GAAG;AAEzB;;AAEG;AACI,MAAM,KAAK,GAAG;;;;;;;;;;;"}
@@ -19,6 +19,10 @@ export default class FormatInterface extends BasicInterface implements FormatInt
19
19
  name?: string;
20
20
  });
21
21
  get format(): string;
22
+ /**
23
+ * Extract content bytes without codec prefix
24
+ */
25
+ get contentBytes(): Uint8Array;
22
26
  beforeHashing(decoded: {
23
27
  [index: string]: any;
24
28
  }): {
@@ -27,7 +31,7 @@ export default class FormatInterface extends BasicInterface implements FormatInt
27
31
  /**
28
32
  * @return {PeernetHash}
29
33
  */
30
- get peernetHash(): Hash;
34
+ get peernetHash(): Promise<Hash>;
31
35
  /**
32
36
  * @return {peernetHash}
33
37
  */
@@ -8,6 +8,7 @@ import '@vandeurenglenn/proto-array';
8
8
  import '@vandeurenglenn/typed-array-utils';
9
9
  import 'varint';
10
10
  import '@leofcoin/codecs';
11
+ import 'hash-wasm';
11
12
 
12
13
  class FormatInterface extends BasicInterface {
13
14
  hashFormat;
@@ -20,12 +21,15 @@ class FormatInterface extends BasicInterface {
20
21
  this.#encoded = value;
21
22
  }
22
23
  init(buffer) {
23
- if (buffer instanceof FormatInterface && buffer?.name === this.name)
24
+ if (buffer instanceof FormatInterface && buffer?.name === this.name) {
24
25
  return buffer;
25
- else if (buffer instanceof Uint8Array)
26
+ }
27
+ else if (buffer instanceof Uint8Array) {
26
28
  this.fromUint8Array(buffer);
27
- else if (buffer instanceof ArrayBuffer)
29
+ }
30
+ else if (buffer instanceof ArrayBuffer) {
28
31
  this.fromArrayBuffer(buffer);
32
+ }
29
33
  else if (typeof buffer === 'string') {
30
34
  if (this.isHex(buffer))
31
35
  this.fromHex(buffer);
@@ -36,9 +40,13 @@ class FormatInterface extends BasicInterface {
36
40
  else
37
41
  this.fromString(buffer);
38
42
  }
39
- else {
43
+ else if (typeof buffer === 'object' && buffer !== null) {
40
44
  this.create(buffer);
41
45
  }
46
+ else {
47
+ // Explicitly reject all other types (number, boolean, undefined, symbol, function, null)
48
+ throw new TypeError(`Invalid input type for FormatInterface: ${typeof buffer}`);
49
+ }
42
50
  return this;
43
51
  }
44
52
  hasCodec() {
@@ -101,17 +109,46 @@ class FormatInterface extends BasicInterface {
101
109
  const upper = this.hashFormat.charAt(0).toUpperCase();
102
110
  return `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
103
111
  }
112
+ /**
113
+ * Extract content bytes without codec prefix
114
+ */
115
+ get contentBytes() {
116
+ if (!this.encoded)
117
+ return new Uint8Array(0);
118
+ const codec = new Codec(this.encoded);
119
+ if (codec.codecBuffer) {
120
+ return this.encoded.slice(codec.codecBuffer.length);
121
+ }
122
+ return this.encoded;
123
+ }
104
124
  beforeHashing(decoded) {
105
- delete decoded.hash;
125
+ // Avoid copying if not needed
126
+ if (decoded && Object.prototype.hasOwnProperty.call(decoded, 'hash')) {
127
+ // Only copy if hash is present
128
+ const rest = { ...decoded };
129
+ delete rest.hash;
130
+ return rest;
131
+ }
106
132
  return decoded;
107
133
  }
108
134
  /**
109
135
  * @return {PeernetHash}
110
136
  */
111
137
  get peernetHash() {
138
+ // Optimize: if decoded has no hash property, contentBytes are already correct
139
+ // Since protoEncode is deterministic (varint-based), we can use them directly
140
+ if (this.encoded &&
141
+ this.decoded &&
142
+ !Object.prototype.hasOwnProperty.call(this.decoded, 'hash')) {
143
+ // @ts-ignore
144
+ const hash = new CodecHash({ name: this.name });
145
+ return hash.init(this.contentBytes);
146
+ }
147
+ // Fallback: must re-encode without hash property
112
148
  const decoded = this.beforeHashing({ ...this.decoded });
113
149
  // @ts-ignore
114
- return new CodecHash(decoded, { name: this.name });
150
+ const hash = new CodecHash({ name: this.name });
151
+ return hash.init(decoded);
115
152
  }
116
153
  /**
117
154
  * @return {peernetHash}
@@ -128,13 +165,13 @@ class FormatInterface extends BasicInterface {
128
165
  this.encoded = buffer;
129
166
  return this.hasCodec()
130
167
  ? this.decode()
131
- : this.create(JSON.parse(new TextDecoder().decode(this.encoded), jsonParseBigInt));
168
+ : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt));
132
169
  }
133
170
  fromArrayBuffer(buffer) {
134
171
  this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength);
135
172
  return this.hasCodec()
136
173
  ? this.decode()
137
- : this.create(JSON.parse(new TextDecoder().decode(this.encoded), jsonParseBigInt));
174
+ : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt));
138
175
  }
139
176
  /**
140
177
  * @param {Object} data
@@ -155,3 +192,4 @@ class FormatInterface extends BasicInterface {
155
192
  }
156
193
 
157
194
  export { FormatInterface as default };
195
+ //# sourceMappingURL=codec-format-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-format-interface.js","sources":["../src/codec-format-interface.ts"],"sourcesContent":["import BasicInterface, { jsonParseBigInt } from './basic-interface.js'\nimport Codec from './codec.js'\nimport Hash from './codec-hash.js'\n\nimport type { base58String } from '@vandeurenglenn/base58'\nimport type { base32String } from '@vandeurenglenn/base32'\nimport type { HexString } from '@vandeurenglenn/is-hex'\n\nexport default class FormatInterface extends BasicInterface implements FormatInterface {\n hashFormat: string\n #hash\n #encoded\n\n get encoded() {\n return this.#encoded || this.encode()\n }\n\n set encoded(value) {\n this.#encoded = value\n }\n\n init(buffer: Uint8Array | ArrayBuffer | FormatInterface | string) {\n if (buffer instanceof FormatInterface && buffer?.name === this.name) {\n return buffer\n } else if (buffer instanceof Uint8Array) {\n this.fromUint8Array(buffer)\n } else if (buffer instanceof ArrayBuffer) {\n this.fromArrayBuffer(buffer)\n } else if (typeof buffer === 'string') {\n if (this.isHex(buffer as HexString)) this.fromHex(buffer as string)\n else if (this.isBase58(buffer as base58String)) this.fromBs58(buffer)\n else if (this.isBase32(buffer as base32String)) this.fromBs32(buffer)\n else this.fromString(buffer as string)\n } else if (typeof buffer === 'object' && buffer !== null) {\n this.create(buffer as object)\n } else {\n // Explicitly reject all other types (number, boolean, undefined, symbol, function, null)\n throw new TypeError(`Invalid input type for FormatInterface: ${typeof buffer}`)\n }\n return this\n }\n\n hasCodec() {\n if (!this.encoded) return false\n const codec = new Codec(this.encoded)\n if (codec.name) return true\n }\n\n decode(encoded?: Uint8Array): object {\n encoded = encoded || this.encoded\n const codec = new Codec(encoded)\n if (codec.codecBuffer) {\n encoded = encoded.slice(codec.codecBuffer.length)\n this.name = codec.name\n this.decoded = this.protoDecode(encoded)\n // try {\n // this.decoded = JSON.parse(this.decoded)\n // } catch {\n\n // }\n } else {\n throw new Error(`no codec found`)\n }\n\n return this.decoded\n }\n\n encode(decoded?: object) {\n let encoded: Uint8Array\n decoded = decoded || this.decoded\n const codec = new Codec(this.name)\n\n if (decoded instanceof Uint8Array) encoded = decoded\n else encoded = this.protoEncode(decoded)\n\n if (codec.codecBuffer) {\n const uint8Array = new Uint8Array(encoded.length + codec.codecBuffer.length)\n uint8Array.set(codec.codecBuffer)\n uint8Array.set(encoded, codec.codecBuffer.length)\n this.encoded = uint8Array\n } else {\n throw new Error(`invalid codec`)\n }\n return this.encoded\n }\n /**\n * @param {Buffer|String|Object} buffer - data - The data needed to create the desired message\n * @param {Object} proto - {protoObject}\n * @param {Object} options - {hashFormat, name}\n */\n constructor(buffer, proto, options?: { hashFormat?: string; name?: string }) {\n super()\n this.proto = proto\n this.hashFormat = options?.hashFormat ? options.hashFormat : 'bs32'\n\n if (options?.name) this.name = options.name\n\n this.init(buffer)\n }\n\n get format() {\n const upper = this.hashFormat.charAt(0).toUpperCase()\n return `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`\n }\n\n /**\n * Extract content bytes without codec prefix\n */\n get contentBytes(): Uint8Array {\n if (!this.encoded) return new Uint8Array(0)\n const codec = new Codec(this.encoded)\n if (codec.codecBuffer) {\n return this.encoded.slice(codec.codecBuffer.length)\n }\n return this.encoded\n }\n\n beforeHashing(decoded: { [index: string]: any }) {\n // Avoid copying if not needed\n if (decoded && Object.prototype.hasOwnProperty.call(decoded, 'hash')) {\n // Only copy if hash is present\n const rest = { ...decoded }\n delete rest.hash\n return rest\n }\n return decoded\n }\n\n /**\n * @return {PeernetHash}\n */\n get peernetHash() {\n // Optimize: if decoded has no hash property, contentBytes are already correct\n // Since protoEncode is deterministic (varint-based), we can use them directly\n if (\n this.encoded &&\n this.decoded &&\n !Object.prototype.hasOwnProperty.call(this.decoded, 'hash')\n ) {\n // @ts-ignore\n const hash = new Hash({ name: this.name })\n return hash.init(this.contentBytes)\n }\n\n // Fallback: must re-encode without hash property\n const decoded = this.beforeHashing({ ...this.decoded })\n // @ts-ignore\n const hash = new Hash({ name: this.name })\n return hash.init(decoded)\n }\n\n /**\n * @return {peernetHash}\n */\n async hash() {\n if (this.#hash) return this.#hash\n const upper = this.hashFormat.charAt(0).toUpperCase()\n const format = `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`\n this.#hash = (await this.peernetHash)[`to${format}`]()\n return this.#hash\n }\n\n fromUint8Array(buffer) {\n this.encoded = buffer\n return this.hasCodec()\n ? this.decode()\n : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt))\n }\n\n fromArrayBuffer(buffer) {\n this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength)\n return this.hasCodec()\n ? this.decode()\n : this.create(JSON.parse(BasicInterface._textDecoder.decode(this.encoded), jsonParseBigInt))\n }\n\n /**\n * @param {Object} data\n */\n create(data: object) {\n const decoded = {}\n // @ts-ignore\n if (data.hash) this.#hash = data.hash\n if (this.keys?.length > 0) {\n for (const key of this.keys) {\n decoded[key] = data[key]\n }\n this.decoded = decoded\n // return this.encode(decoded)\n }\n }\n}\n"],"names":["Hash"],"mappings":"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"}
@@ -1,22 +1,22 @@
1
1
  import BasicInterface from './basic-interface.js';
2
2
  import Codec from './codec.js';
3
3
  type CodecHashOptions = {
4
- name: string;
5
- codecs: object;
4
+ name?: string;
5
+ codecs?: object;
6
6
  };
7
7
  export default class CodecHash extends BasicInterface {
8
8
  codec: Uint8Array;
9
9
  discoCodec: Codec;
10
10
  size: number;
11
- constructor(buffer: any, options: CodecHashOptions);
12
- init(uint8Array: any): Promise<this>;
11
+ codecs: object;
12
+ constructor(options?: CodecHashOptions);
13
+ init(uint8Array: Uint8Array): Promise<this>;
13
14
  get prefix(): Uint8Array;
14
15
  get length(): number[];
15
16
  get buffer(): Uint8Array;
16
17
  get hash(): Uint8Array;
17
- fromJSON(json: any): Promise<Uint8Array>;
18
18
  encode(buffer: any, name?: any): Promise<Uint8Array>;
19
- validate(buffer: any): Promise<void>;
19
+ validate(buffer: Uint8Array): Promise<void>;
20
20
  decode(buffer: any): {
21
21
  codec: Uint8Array;
22
22
  name: string;