@e280/stz 0.0.0-16 → 0.0.0-18
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.
- package/package.json +1 -1
- package/s/data/bytename/thumbprint.test.ts +1 -1
- package/s/data/bytename/thumbprint.ts +34 -33
- package/x/data/bytename/thumbprint.d.ts +8 -7
- package/x/data/bytename/thumbprint.js +27 -28
- package/x/data/bytename/thumbprint.js.map +1 -1
- package/x/data/bytename/thumbprint.test.js +1 -1
- package/x/data/bytename/thumbprint.test.js.map +1 -1
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@ import {Hex} from "../hex.js"
|
|
|
4
4
|
import {Bytes} from "../bytes.js"
|
|
5
5
|
import {Thumbprint} from "./thumbprint.js"
|
|
6
6
|
|
|
7
|
-
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel
|
|
7
|
+
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
8
8
|
const sampleHex = "88e8c3fad1028fcf6ce5ac491578850f4d833336feca03b608265501c3019d59"
|
|
9
9
|
const sampleBytes = Hex.bytes(sampleHex)
|
|
10
10
|
|
|
@@ -5,20 +5,21 @@ import {Bytename} from "./bytename.js"
|
|
|
5
5
|
|
|
6
6
|
export type ThumbprintOptions = {
|
|
7
7
|
delimiter: string
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
sigilBytes: number
|
|
9
|
+
previewBytes: number
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export type ThumbprintData = {
|
|
13
13
|
bytes: Uint8Array
|
|
14
|
-
sigil: string
|
|
15
|
-
bulk: string
|
|
16
14
|
thumbprint: string
|
|
15
|
+
preview: string
|
|
16
|
+
bulk: string
|
|
17
|
+
sigil: string
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
21
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
22
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
22
23
|
* - the "sigil" is the first bytes that are shown in bytename format
|
|
23
24
|
* - the "bulk" is the rest of the data in base58
|
|
24
25
|
* - originally designed to be a nice way to present 256-bit ids
|
|
@@ -26,54 +27,58 @@ export type ThumbprintData = {
|
|
|
26
27
|
*/
|
|
27
28
|
export const Thumbprint = {
|
|
28
29
|
defaults: (<ThumbprintOptions>{
|
|
29
|
-
delimiter: "
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
delimiter: ".",
|
|
31
|
+
sigilBytes: 4,
|
|
32
|
+
previewBytes: 8,
|
|
32
33
|
}),
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
toBytes(thumbprint: string) {
|
|
35
36
|
thumbprint = thumbprint.trim()
|
|
36
|
-
const
|
|
37
|
+
const beans = thumbprint.split(/[^a-zA-Z0-9]+/m)
|
|
37
38
|
.filter(Boolean)
|
|
38
39
|
.map(s => s.trim())
|
|
39
40
|
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
if (beans.length < 2)
|
|
42
|
+
return Bytename.toBytes(beans.join(""))
|
|
43
|
+
|
|
44
|
+
const bulk = beans.pop()!
|
|
45
|
+
const preview = beans.join("")
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const bytes = new Uint8Array([
|
|
49
|
-
...Bytename.toBytes(sigil),
|
|
47
|
+
return new Uint8Array([
|
|
48
|
+
...Bytename.toBytes(preview),
|
|
50
49
|
...Base58.bytes(bulk),
|
|
51
50
|
])
|
|
51
|
+
},
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
parse(thumbprint: string, options?: Partial<ThumbprintOptions>): ThumbprintData {
|
|
54
|
+
const bytes = Thumbprint.toBytes(thumbprint)
|
|
55
|
+
return Thumbprint.build.fromBytes(bytes, options)
|
|
54
56
|
},
|
|
55
57
|
|
|
56
58
|
build: {
|
|
57
59
|
fromBytes(bytes: Uint8Array, options: Partial<ThumbprintOptions> = {}): ThumbprintData {
|
|
58
|
-
const {
|
|
60
|
+
const {delimiter, previewBytes, sigilBytes}
|
|
59
61
|
= {...Thumbprint.defaults, ...options}
|
|
60
62
|
|
|
61
|
-
const
|
|
62
|
-
? Bytename.fromBytes(bytes.slice(0,
|
|
63
|
-
wordSeparator:
|
|
64
|
-
groupSeparator:
|
|
63
|
+
const yoink = (b: number) => (bytes.length > 0)
|
|
64
|
+
? Bytename.fromBytes(bytes.slice(0, b), {
|
|
65
|
+
wordSeparator: delimiter,
|
|
66
|
+
groupSeparator: delimiter,
|
|
65
67
|
})
|
|
66
68
|
: ""
|
|
67
69
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
+
const sigil = yoink(sigilBytes)
|
|
71
|
+
const preview = yoink(previewBytes)
|
|
72
|
+
|
|
73
|
+
const bulk = (bytes.length > previewBytes)
|
|
74
|
+
? Base58.string(bytes.slice(previewBytes))
|
|
70
75
|
: ""
|
|
71
76
|
|
|
72
|
-
const thumbprint = [
|
|
77
|
+
const thumbprint = [preview, bulk]
|
|
73
78
|
.filter(s => s.length > 0)
|
|
74
79
|
.join(delimiter)
|
|
75
80
|
|
|
76
|
-
return {bytes,
|
|
81
|
+
return {bytes, thumbprint, preview, bulk, sigil}
|
|
77
82
|
},
|
|
78
83
|
|
|
79
84
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>) {
|
|
@@ -82,10 +87,6 @@ export const Thumbprint = {
|
|
|
82
87
|
},
|
|
83
88
|
},
|
|
84
89
|
|
|
85
|
-
toBytes(thumbprint: string) {
|
|
86
|
-
return Thumbprint.parse(thumbprint).bytes
|
|
87
|
-
},
|
|
88
|
-
|
|
89
90
|
toHex(thumbprint: string) {
|
|
90
91
|
const bytes = Thumbprint.toBytes(thumbprint)
|
|
91
92
|
return Hex.string(bytes)
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
export type ThumbprintOptions = {
|
|
2
2
|
delimiter: string;
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
sigilBytes: number;
|
|
4
|
+
previewBytes: number;
|
|
5
5
|
};
|
|
6
6
|
export type ThumbprintData = {
|
|
7
7
|
bytes: Uint8Array;
|
|
8
|
-
sigil: string;
|
|
9
|
-
bulk: string;
|
|
10
8
|
thumbprint: string;
|
|
9
|
+
preview: string;
|
|
10
|
+
bulk: string;
|
|
11
|
+
sigil: string;
|
|
11
12
|
};
|
|
12
13
|
/**
|
|
13
14
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
14
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
15
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
15
16
|
* - the "sigil" is the first bytes that are shown in bytename format
|
|
16
17
|
* - the "bulk" is the rest of the data in base58
|
|
17
18
|
* - originally designed to be a nice way to present 256-bit ids
|
|
@@ -19,12 +20,12 @@ export type ThumbprintData = {
|
|
|
19
20
|
*/
|
|
20
21
|
export declare const Thumbprint: {
|
|
21
22
|
defaults: ThumbprintOptions;
|
|
22
|
-
|
|
23
|
+
toBytes(thumbprint: string): Uint8Array<ArrayBuffer>;
|
|
24
|
+
parse(thumbprint: string, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
23
25
|
build: {
|
|
24
26
|
fromBytes(bytes: Uint8Array, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
25
27
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
26
28
|
};
|
|
27
|
-
toBytes(thumbprint: string): Uint8Array<ArrayBufferLike>;
|
|
28
29
|
toHex(thumbprint: string): string;
|
|
29
30
|
fromBytes(bytes: Uint8Array, options?: Partial<ThumbprintOptions>): string;
|
|
30
31
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>): string;
|
|
@@ -3,7 +3,7 @@ import { Base58 } from "../base58.js";
|
|
|
3
3
|
import { Bytename } from "./bytename.js";
|
|
4
4
|
/**
|
|
5
5
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
6
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
6
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
7
7
|
* - the "sigil" is the first bytes that are shown in bytename format
|
|
8
8
|
* - the "bulk" is the rest of the data in base58
|
|
9
9
|
* - originally designed to be a nice way to present 256-bit ids
|
|
@@ -11,53 +11,52 @@ import { Bytename } from "./bytename.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export const Thumbprint = {
|
|
13
13
|
defaults: {
|
|
14
|
-
delimiter: "
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
delimiter: ".",
|
|
15
|
+
sigilBytes: 4,
|
|
16
|
+
previewBytes: 8,
|
|
17
17
|
},
|
|
18
|
-
|
|
18
|
+
toBytes(thumbprint) {
|
|
19
19
|
thumbprint = thumbprint.trim();
|
|
20
|
-
const
|
|
20
|
+
const beans = thumbprint.split(/[^a-zA-Z0-9]+/m)
|
|
21
21
|
.filter(Boolean)
|
|
22
22
|
.map(s => s.trim());
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const sigil = parts.join(".");
|
|
30
|
-
const bytes = new Uint8Array([
|
|
31
|
-
...Bytename.toBytes(sigil),
|
|
23
|
+
if (beans.length < 2)
|
|
24
|
+
return Bytename.toBytes(beans.join(""));
|
|
25
|
+
const bulk = beans.pop();
|
|
26
|
+
const preview = beans.join("");
|
|
27
|
+
return new Uint8Array([
|
|
28
|
+
...Bytename.toBytes(preview),
|
|
32
29
|
...Base58.bytes(bulk),
|
|
33
30
|
]);
|
|
34
|
-
|
|
31
|
+
},
|
|
32
|
+
parse(thumbprint, options) {
|
|
33
|
+
const bytes = Thumbprint.toBytes(thumbprint);
|
|
34
|
+
return Thumbprint.build.fromBytes(bytes, options);
|
|
35
35
|
},
|
|
36
36
|
build: {
|
|
37
37
|
fromBytes(bytes, options = {}) {
|
|
38
|
-
const {
|
|
39
|
-
const
|
|
40
|
-
? Bytename.fromBytes(bytes.slice(0,
|
|
41
|
-
wordSeparator:
|
|
42
|
-
groupSeparator:
|
|
38
|
+
const { delimiter, previewBytes, sigilBytes } = { ...Thumbprint.defaults, ...options };
|
|
39
|
+
const yoink = (b) => (bytes.length > 0)
|
|
40
|
+
? Bytename.fromBytes(bytes.slice(0, b), {
|
|
41
|
+
wordSeparator: delimiter,
|
|
42
|
+
groupSeparator: delimiter,
|
|
43
43
|
})
|
|
44
44
|
: "";
|
|
45
|
-
const
|
|
46
|
-
|
|
45
|
+
const sigil = yoink(sigilBytes);
|
|
46
|
+
const preview = yoink(previewBytes);
|
|
47
|
+
const bulk = (bytes.length > previewBytes)
|
|
48
|
+
? Base58.string(bytes.slice(previewBytes))
|
|
47
49
|
: "";
|
|
48
|
-
const thumbprint = [
|
|
50
|
+
const thumbprint = [preview, bulk]
|
|
49
51
|
.filter(s => s.length > 0)
|
|
50
52
|
.join(delimiter);
|
|
51
|
-
return { bytes,
|
|
53
|
+
return { bytes, thumbprint, preview, bulk, sigil };
|
|
52
54
|
},
|
|
53
55
|
fromHex(hex, options) {
|
|
54
56
|
const bytes = Hex.bytes(hex);
|
|
55
57
|
return Thumbprint.build.fromBytes(bytes, options);
|
|
56
58
|
},
|
|
57
59
|
},
|
|
58
|
-
toBytes(thumbprint) {
|
|
59
|
-
return Thumbprint.parse(thumbprint).bytes;
|
|
60
|
-
},
|
|
61
60
|
toHex(thumbprint) {
|
|
62
61
|
const bytes = Thumbprint.toBytes(thumbprint);
|
|
63
62
|
return Hex.string(bytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbprint.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"thumbprint.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Science, test, expect } from "@e280/science";
|
|
|
2
2
|
import { Hex } from "../hex.js";
|
|
3
3
|
import { Bytes } from "../bytes.js";
|
|
4
4
|
import { Thumbprint } from "./thumbprint.js";
|
|
5
|
-
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel
|
|
5
|
+
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ";
|
|
6
6
|
const sampleHex = "88e8c3fad1028fcf6ce5ac491578850f4d833336feca03b608265501c3019d59";
|
|
7
7
|
const sampleBytes = Hex.bytes(sampleHex);
|
|
8
8
|
function good(bytes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbprint.test.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAE1C,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"thumbprint.test.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.test.ts"],"names":[],"mappings":"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"}
|