@xyo-network/payload-model 5.1.22 → 5.1.24
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/dist/neutral/PayloadBundle.d.ts +1 -1
- package/dist/neutral/StorageMeta/DataHash.d.ts +2 -2
- package/dist/neutral/StorageMeta/Hash.d.ts +2 -2
- package/dist/neutral/StorageMeta/Sequence.d.ts +1 -1
- package/dist/neutral/StorageMeta/StorageMeta.d.ts +1 -1
- package/package.json +12 -9
- package/dist/neutral/StorageMeta/spec/SequenceComparer.spec.d.ts +0 -2
- package/dist/neutral/StorageMeta/spec/SequenceComparer.spec.d.ts.map +0 -1
- package/dist/neutral/StorageMeta/spec/SequenceMeta.spec.d.ts +0 -2
- package/dist/neutral/StorageMeta/spec/SequenceMeta.spec.d.ts.map +0 -1
- package/dist/neutral/StorageMeta/spec/SequenceParser.spec.d.ts +0 -2
- package/dist/neutral/StorageMeta/spec/SequenceParser.spec.d.ts.map +0 -1
- package/dist/neutral/spec/Payload.spec.d.ts +0 -2
- package/dist/neutral/spec/Payload.spec.d.ts.map +0 -1
- package/dist/neutral/spec/isPayloadOfZodType.spec.d.ts +0 -2
- package/dist/neutral/spec/isPayloadOfZodType.spec.d.ts.map +0 -1
- package/src/StorageMeta/spec/SequenceComparer.spec.ts +0 -101
- package/src/StorageMeta/spec/SequenceMeta.spec.ts +0 -40
- package/src/StorageMeta/spec/SequenceParser.spec.ts +0 -113
- package/src/spec/Payload.spec.ts +0 -26
- package/src/spec/isPayloadOfZodType.spec.ts +0 -35
|
@@ -9,5 +9,5 @@ export interface PayloadBundleFields<T extends Payload = Payload> {
|
|
|
9
9
|
export type PayloadBundle = Payload<PayloadBundleFields, PayloadBundleSchema>;
|
|
10
10
|
export declare const isPayloadBundle: (x?: unknown | null) => x is PayloadBundle;
|
|
11
11
|
export declare const asPayloadBundle: import("@xylabs/object").AsTypeFunction<PayloadBundle>;
|
|
12
|
-
export declare const asOptionalPayloadBundle: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
12
|
+
export declare const asOptionalPayloadBundle: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => PayloadBundle | undefined;
|
|
13
13
|
//# sourceMappingURL=PayloadBundle.d.ts.map
|
|
@@ -7,7 +7,7 @@ export type WithDataHashMeta<T extends Payload = Payload> = T & DataHashMeta;
|
|
|
7
7
|
export type WithPartialDataHashMeta<T extends Payload = Payload> = Partial<WithDataHashMeta<T>>;
|
|
8
8
|
export declare const isDataHashMeta: (value: unknown) => value is DataHashMeta;
|
|
9
9
|
export declare const asDataHashMeta: import("@xylabs/object").AsTypeFunction<DataHashMeta>;
|
|
10
|
-
export declare const asOptionalDataHashMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
10
|
+
export declare const asOptionalDataHashMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => DataHashMeta | undefined;
|
|
11
11
|
/** @deprecated use DataHashMeta instead */
|
|
12
12
|
export interface DataHashStorageMeta extends DataHashMeta {
|
|
13
13
|
}
|
|
@@ -20,5 +20,5 @@ export declare const isDataHashStorageMeta: (value: unknown) => value is DataHas
|
|
|
20
20
|
/** @deprecated use asDataHashMeta instead */
|
|
21
21
|
export declare const asDataHashStorageMeta: import("@xylabs/object").AsTypeFunction<DataHashMeta>;
|
|
22
22
|
/** @deprecated use asOptionalDataHashMeta instead */
|
|
23
|
-
export declare const asOptionalDataHashStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
23
|
+
export declare const asOptionalDataHashStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => DataHashMeta | undefined;
|
|
24
24
|
//# sourceMappingURL=DataHash.d.ts.map
|
|
@@ -8,7 +8,7 @@ export type WithHashMeta<T extends Payload = Payload> = T & HashMeta;
|
|
|
8
8
|
export type WithPartialHashMeta<T extends Payload = Payload> = Partial<WithHashMeta<T>>;
|
|
9
9
|
export declare const isHashMeta: (value: unknown) => value is HashMeta;
|
|
10
10
|
export declare const asHashMeta: import("@xylabs/object").AsTypeFunction<HashMeta>;
|
|
11
|
-
export declare const asOptionalHashMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
11
|
+
export declare const asOptionalHashMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => HashMeta | undefined;
|
|
12
12
|
/** @deprecated use HashMeta instead */
|
|
13
13
|
export interface HashStorageMeta extends HashMeta {
|
|
14
14
|
}
|
|
@@ -21,5 +21,5 @@ export declare const isHashStorageMeta: (value: unknown) => value is HashMeta;
|
|
|
21
21
|
/** @deprecated use asHashMeta instead */
|
|
22
22
|
export declare const asHashStorageMeta: import("@xylabs/object").AsTypeFunction<HashMeta>;
|
|
23
23
|
/** @deprecated use asOptionalHashMeta instead */
|
|
24
|
-
export declare const asOptionalHashStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
24
|
+
export declare const asOptionalHashStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => HashMeta | undefined;
|
|
25
25
|
//# sourceMappingURL=Hash.d.ts.map
|
|
@@ -7,5 +7,5 @@ export type WithSequenceStorageMeta<T extends Payload = Payload> = T & SequenceS
|
|
|
7
7
|
export type WithPartialSequenceStorageMeta<T extends Payload = Payload> = Partial<WithSequenceStorageMeta<T>>;
|
|
8
8
|
export declare const isSequenceStorageMeta: (value: unknown) => value is SequenceStorageMeta;
|
|
9
9
|
export declare const asSequenceStorageMeta: import("@xylabs/object").AsTypeFunction<SequenceStorageMeta>;
|
|
10
|
-
export declare const asOptionalSequenceStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
10
|
+
export declare const asOptionalSequenceStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => SequenceStorageMeta | undefined;
|
|
11
11
|
//# sourceMappingURL=Sequence.d.ts.map
|
|
@@ -7,5 +7,5 @@ export type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta;
|
|
|
7
7
|
export type WithPartialStorageMeta<T extends Payload = Payload> = T & Partial<StorageMeta>;
|
|
8
8
|
export declare const isStorageMeta: (value: unknown) => value is StorageMeta;
|
|
9
9
|
export declare const asStorageMeta: import("@xylabs/object").AsTypeFunction<StorageMeta>;
|
|
10
|
-
export declare const asOptionalStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.
|
|
10
|
+
export declare const asOptionalStorageMeta: (value: import(".store/@xylabs-promise-npm-5.0.37-e0d0dd2b09/package").AnyNonPromise) => StorageMeta | undefined;
|
|
11
11
|
//# sourceMappingURL=StorageMeta.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/payload-model",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.24",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -30,22 +30,25 @@
|
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"files": [
|
|
32
32
|
"dist",
|
|
33
|
-
"src"
|
|
33
|
+
"src",
|
|
34
|
+
"!**/*.bench.*",
|
|
35
|
+
"!**/*.spec.*",
|
|
36
|
+
"!**/*.test.*"
|
|
34
37
|
],
|
|
35
38
|
"dependencies": {
|
|
36
|
-
"@xylabs/arraybuffer": "~5.0.
|
|
37
|
-
"@xylabs/assert": "~5.0.
|
|
38
|
-
"@xylabs/hex": "~5.0.
|
|
39
|
-
"@xylabs/object": "~5.0.
|
|
40
|
-
"@xylabs/typeof": "~5.0.
|
|
39
|
+
"@xylabs/arraybuffer": "~5.0.37",
|
|
40
|
+
"@xylabs/assert": "~5.0.37",
|
|
41
|
+
"@xylabs/hex": "~5.0.37",
|
|
42
|
+
"@xylabs/object": "~5.0.37",
|
|
43
|
+
"@xylabs/typeof": "~5.0.37",
|
|
41
44
|
"zod": "~4.1.12"
|
|
42
45
|
},
|
|
43
46
|
"devDependencies": {
|
|
44
47
|
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
45
48
|
"@xylabs/tsconfig": "~7.2.8",
|
|
46
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
49
|
+
"@xylabs/vitest-extended": "~5.0.37",
|
|
47
50
|
"typescript": "~5.9.3",
|
|
48
|
-
"vitest": "~4.0.
|
|
51
|
+
"vitest": "~4.0.10"
|
|
49
52
|
},
|
|
50
53
|
"publishConfig": {
|
|
51
54
|
"access": "public"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceComparer.spec.d.ts","sourceRoot":"","sources":["../../../../src/StorageMeta/spec/SequenceComparer.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceMeta.spec.d.ts","sourceRoot":"","sources":["../../../../src/StorageMeta/spec/SequenceMeta.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceParser.spec.d.ts","sourceRoot":"","sources":["../../../../src/StorageMeta/spec/SequenceParser.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Payload.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Payload.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isPayloadOfZodType.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/isPayloadOfZodType.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
// SequenceComparer.spec.ts
|
|
2
|
-
|
|
3
|
-
import type { Address } from '@xylabs/hex'
|
|
4
|
-
import {
|
|
5
|
-
describe, expect, it,
|
|
6
|
-
} from 'vitest'
|
|
7
|
-
|
|
8
|
-
import type {
|
|
9
|
-
Epoch, Nonce, Sequence,
|
|
10
|
-
} from '../sequence/index.ts'
|
|
11
|
-
import {
|
|
12
|
-
SequenceComparer,
|
|
13
|
-
SequenceParser,
|
|
14
|
-
} from '../sequence/index.ts'
|
|
15
|
-
|
|
16
|
-
describe('SequenceComparer', () => {
|
|
17
|
-
describe('local', () => {
|
|
18
|
-
const epochA = '0000000000000001' as Epoch
|
|
19
|
-
const epochB = '0000000000000002' as Epoch
|
|
20
|
-
|
|
21
|
-
const nonceX = '000000000000000a' as Nonce
|
|
22
|
-
const nonceY = '000000000000000b' as Nonce
|
|
23
|
-
|
|
24
|
-
const seqAX: Sequence = SequenceParser.from(epochA, nonceX).localSequence // local sequence #1
|
|
25
|
-
const seqAY: Sequence = SequenceParser.from(epochA, nonceY).localSequence // local sequence #2
|
|
26
|
-
const seqBX: Sequence = SequenceParser.from(epochB, nonceX).localSequence // local sequence #3
|
|
27
|
-
|
|
28
|
-
it('should return 0 when local sequences are equal', () => {
|
|
29
|
-
expect(SequenceComparer.local(seqAX, seqAX)).toBe(0)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('should return a negative number if first local sequence < second by local sequence value', () => {
|
|
33
|
-
// Compare seqAX to seqAY (they differ in nonce)
|
|
34
|
-
const result = SequenceComparer.local(seqAX, seqAY)
|
|
35
|
-
expect(result).toBeLessThan(0)
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('should return a positive number if first local sequence > second by local sequence value', () => {
|
|
39
|
-
// Compare seqAY to seqAX (they differ in nonce)
|
|
40
|
-
const result = SequenceComparer.local(seqAY, seqAX)
|
|
41
|
-
expect(result).toBeGreaterThan(0)
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
it('should consider epoch differences if nonce is the same', () => {
|
|
45
|
-
// seqAX vs seqBX differ by epoch
|
|
46
|
-
const result = SequenceComparer.local(seqAX, seqBX)
|
|
47
|
-
expect(result).toBeLessThan(0)
|
|
48
|
-
|
|
49
|
-
const reverseResult = SequenceComparer.local(seqBX, seqAX)
|
|
50
|
-
expect(reverseResult).toBeGreaterThan(0)
|
|
51
|
-
})
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
describe('qualified', () => {
|
|
55
|
-
const epochC = '0000000000000010' as Epoch
|
|
56
|
-
const epochD = '0000000000000011' as Epoch
|
|
57
|
-
|
|
58
|
-
const nonceM = '000000000000000f' as Nonce
|
|
59
|
-
const nonceN = '000000000000001f' as Nonce
|
|
60
|
-
|
|
61
|
-
const address1 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as Address
|
|
62
|
-
const address2 = '0000000000000000000000000000000000000000' as Address
|
|
63
|
-
|
|
64
|
-
const seqCMA: Sequence = SequenceParser.from(epochC, nonceM, address1).qualifiedSequence // qualified seq #1
|
|
65
|
-
const seqCNA: Sequence = SequenceParser.from(epochC, nonceN, address1).qualifiedSequence // qualified seq #2
|
|
66
|
-
const seqDMB: Sequence = SequenceParser.from(epochD, nonceM, address2).qualifiedSequence // qualified seq #3
|
|
67
|
-
|
|
68
|
-
it('should return 0 when qualified sequences are equal', () => {
|
|
69
|
-
expect(SequenceComparer.qualified(seqCMA, seqCMA)).toBe(0)
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it('should return a negative number if the first qualified sequence < second by full sequence value', () => {
|
|
73
|
-
// Compare sequences differing by nonce
|
|
74
|
-
const result = SequenceComparer.qualified(seqCMA, seqCNA)
|
|
75
|
-
expect(result).toBeLessThan(0)
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
it('should return a positive number if the first qualified sequence > second by full sequence value', () => {
|
|
79
|
-
// Compare reversed
|
|
80
|
-
const result = SequenceComparer.qualified(seqCNA, seqCMA)
|
|
81
|
-
expect(result).toBeGreaterThan(0)
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('should consider address differences if epoch and nonce are identical', () => {
|
|
85
|
-
// Create two sequences differing only by address
|
|
86
|
-
const seqCMA2 = SequenceParser.from(epochC, nonceM, address2).qualifiedSequence
|
|
87
|
-
const result = SequenceComparer.qualified(seqCMA, seqCMA2)
|
|
88
|
-
// Since address1 ('a...') > address2 ('0...'), we expect a positive result
|
|
89
|
-
expect(result).toBeGreaterThan(0)
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
it('should consider epoch differences', () => {
|
|
93
|
-
// seqCMA vs seqDMB differ by epoch
|
|
94
|
-
const result = SequenceComparer.qualified(seqCMA, seqDMB)
|
|
95
|
-
expect(result).toBeLessThan(0)
|
|
96
|
-
|
|
97
|
-
const reverseResult = SequenceComparer.qualified(seqDMB, seqCMA)
|
|
98
|
-
expect(reverseResult).toBeGreaterThan(0)
|
|
99
|
-
})
|
|
100
|
-
})
|
|
101
|
-
})
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
describe, expect, it,
|
|
5
|
-
} from 'vitest'
|
|
6
|
-
|
|
7
|
-
import { SequenceComponentMinMax } from '../sequence/index.ts'
|
|
8
|
-
|
|
9
|
-
describe('SequenceParser', () => {
|
|
10
|
-
describe('minEpoch', () => {
|
|
11
|
-
it('minEpoch', () => {
|
|
12
|
-
expect(SequenceComponentMinMax.minEpoch).toEqual('0000000000000000')
|
|
13
|
-
})
|
|
14
|
-
})
|
|
15
|
-
describe('maxEpoch', () => {
|
|
16
|
-
it('maxEpoch', () => {
|
|
17
|
-
expect(SequenceComponentMinMax.maxEpoch).toEqual('ffffffffffffffff')
|
|
18
|
-
})
|
|
19
|
-
})
|
|
20
|
-
describe('minNonce', () => {
|
|
21
|
-
it('minNonce', () => {
|
|
22
|
-
expect(SequenceComponentMinMax.minNonce).toEqual('0000000000000000')
|
|
23
|
-
})
|
|
24
|
-
})
|
|
25
|
-
describe('maxNonce', () => {
|
|
26
|
-
it('maxNonce', () => {
|
|
27
|
-
expect(SequenceComponentMinMax.maxNonce).toEqual('ffffffffffffffff')
|
|
28
|
-
})
|
|
29
|
-
})
|
|
30
|
-
describe('minAddress', () => {
|
|
31
|
-
it('minAddress', () => {
|
|
32
|
-
expect(SequenceComponentMinMax.minAddress).toEqual('0000000000000000000000000000000000000000')
|
|
33
|
-
})
|
|
34
|
-
})
|
|
35
|
-
describe('maxAddress', () => {
|
|
36
|
-
it('maxAddress', () => {
|
|
37
|
-
expect(SequenceComponentMinMax.maxAddress).toEqual('ffffffffffffffffffffffffffffffffffffffff')
|
|
38
|
-
})
|
|
39
|
-
})
|
|
40
|
-
})
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import type { Address, Hash } from '@xylabs/hex'
|
|
4
|
-
import {
|
|
5
|
-
asAddress, asHash, toHex,
|
|
6
|
-
} from '@xylabs/hex'
|
|
7
|
-
import {
|
|
8
|
-
describe, expect, it,
|
|
9
|
-
} from 'vitest'
|
|
10
|
-
|
|
11
|
-
import { SequenceConstants, SequenceParser } from '../sequence/index.ts'
|
|
12
|
-
|
|
13
|
-
describe('SequenceParser', () => {
|
|
14
|
-
const hash: Hash = asHash('1269b95d3ebf1b1258a82ccca0b365fabf4b8c99bf8fc852e5045e30ad20fbb1', true)
|
|
15
|
-
const address = asAddress('b36d327210f67ad98be881ddf6ad1f1b3e2c5137', true)
|
|
16
|
-
const timestamp = 1_234_567_890_123
|
|
17
|
-
const parsed: SequenceParser = SequenceParser.from(timestamp, hash, address)
|
|
18
|
-
const parsedWithIndex: SequenceParser = SequenceParser.from(timestamp, hash, 5, address)
|
|
19
|
-
|
|
20
|
-
describe('epoch', () => {
|
|
21
|
-
it('converts timestamp to epoch correctly', () => {
|
|
22
|
-
expect(parsed.epoch).toBe(SequenceParser.toEpoch(timestamp))
|
|
23
|
-
expect(parsed.epoch).toBe('0000011f71fb04cb')
|
|
24
|
-
})
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
describe('from', () => {
|
|
28
|
-
it('parses sequence from timestamp and hash correctly', () => {
|
|
29
|
-
const parsed = SequenceParser.from(timestamp, hash)
|
|
30
|
-
const timestampHex = SequenceParser.toEpoch(timestamp)
|
|
31
|
-
const nonceHex = SequenceParser.toNonce(hash)
|
|
32
|
-
expect(parsed.localSequence).toBe(`${timestampHex}${nonceHex}`)
|
|
33
|
-
expect(parsed.localSequence).toBe('0000011f71fb04cb00000000ad20fbb1')
|
|
34
|
-
})
|
|
35
|
-
it('parses sequence from timestamp, hash, and address correctly', () => {
|
|
36
|
-
const parsed = SequenceParser.from(timestamp, hash, address)
|
|
37
|
-
const timestampHex = SequenceParser.toEpoch(timestamp)
|
|
38
|
-
const nonceHex = SequenceParser.toNonce(hash)
|
|
39
|
-
expect(parsed.localSequence).toBe(`${timestampHex}${nonceHex}`)
|
|
40
|
-
expect(parsed.localSequence).toBe('0000011f71fb04cb00000000ad20fbb1')
|
|
41
|
-
expect(parsed.qualifiedSequence).toBe(`${timestampHex}${nonceHex}${address}`)
|
|
42
|
-
expect(parsed.qualifiedSequence).toBe('0000011f71fb04cb00000000ad20fbb1b36d327210f67ad98be881ddf6ad1f1b3e2c5137')
|
|
43
|
-
})
|
|
44
|
-
it('parses sequence from timestamp, hash, index, and address correctly', () => {
|
|
45
|
-
const parsed = SequenceParser.from(timestamp, hash, 5, address)
|
|
46
|
-
const timestampHex = SequenceParser.toEpoch(timestamp)
|
|
47
|
-
const nonceHex = SequenceParser.toNonce(hash, 5)
|
|
48
|
-
expect(parsed.localSequence).toBe(`${timestampHex}${nonceHex}`)
|
|
49
|
-
expect(parsed.localSequence).toBe('0000011f71fb04cb00000005ad20fbb1')
|
|
50
|
-
expect(parsed.qualifiedSequence).toBe(`${timestampHex}${nonceHex}${address}`)
|
|
51
|
-
expect(parsed.qualifiedSequence).toBe('0000011f71fb04cb00000005ad20fbb1b36d327210f67ad98be881ddf6ad1f1b3e2c5137')
|
|
52
|
-
})
|
|
53
|
-
it('equivalently parses two local sequences with and without address', () => {
|
|
54
|
-
const withAddress = SequenceParser.from(timestamp, hash, address)
|
|
55
|
-
const withoutAddress = SequenceParser.from(timestamp, hash)
|
|
56
|
-
expect(withAddress.localSequence).toEqual(withoutAddress.localSequence)
|
|
57
|
-
})
|
|
58
|
-
it('equivalently parses two local sequences with and without address (with index)', () => {
|
|
59
|
-
const withAddress = SequenceParser.from(timestamp, hash, 8, address)
|
|
60
|
-
const withoutAddress = SequenceParser.from(timestamp, hash, 8)
|
|
61
|
-
expect(withAddress.localSequence).toEqual(withoutAddress.localSequence)
|
|
62
|
-
})
|
|
63
|
-
it('equivalently parses two qualified sequences with and without address', () => {
|
|
64
|
-
const address = '0'.repeat(SequenceConstants.addressBytes * 2) as Address
|
|
65
|
-
const withAddress = SequenceParser.from(timestamp, hash, address)
|
|
66
|
-
const withoutAddress = SequenceParser.from(timestamp, hash)
|
|
67
|
-
expect(withAddress.qualifiedSequence).toEqual(withoutAddress.qualifiedSequence)
|
|
68
|
-
})
|
|
69
|
-
it('equivalently parses two qualified sequences with and without address (with index)', () => {
|
|
70
|
-
const address = '0'.repeat(SequenceConstants.addressBytes * 2) as Address
|
|
71
|
-
const withAddress = SequenceParser.from(timestamp, hash, 9, address)
|
|
72
|
-
const withoutAddress = SequenceParser.from(timestamp, hash, 9)
|
|
73
|
-
expect(withAddress.qualifiedSequence).toEqual(withoutAddress.qualifiedSequence)
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
describe('nonce', () => {
|
|
78
|
-
it('derives nonce from hash correctly', () => {
|
|
79
|
-
expect(parsed.nonce).toBe(SequenceParser.toNonce(hash))
|
|
80
|
-
expect(parsed.nonce).toBe(toHex(0, { bitLength: SequenceConstants.nonceIndexBytes * 8 }) + hash.slice(-SequenceConstants.nonceHashBytes * 2))
|
|
81
|
-
expect(parsed.nonce).toBe('00000000ad20fbb1')
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('derives nonce from hash correctly', () => {
|
|
85
|
-
expect(parsedWithIndex.nonce).toBe(SequenceParser.toNonce(hash, 5))
|
|
86
|
-
expect(parsedWithIndex.nonce).toBe(toHex(5, { bitLength: SequenceConstants.nonceIndexBytes * 8 }) + hash.slice(-SequenceConstants.nonceHashBytes * 2))
|
|
87
|
-
expect(parsedWithIndex.nonce).toBe('00000005ad20fbb1')
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
describe('address', () => {
|
|
92
|
-
it('stores the address correctly', () => {
|
|
93
|
-
expect(parsed.address).toBe(address)
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
describe('localSequence', () => {
|
|
98
|
-
it('concatenates epoch and nonce correctly', () => {
|
|
99
|
-
expect(parsed.localSequence).toBe(`${parsed.epoch}${parsed.nonce}`)
|
|
100
|
-
expect(parsed.localSequence).toBe('0000011f71fb04cb00000000ad20fbb1')
|
|
101
|
-
})
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
describe('qualifiedSequence', () => {
|
|
105
|
-
it('concatenates localSequence and address correctly', () => {
|
|
106
|
-
expect(parsed.qualifiedSequence).toBe(`${parsed.epoch}${parsed.nonce}${parsed.address}`)
|
|
107
|
-
expect(parsed.qualifiedSequence).toBe(`${parsed.localSequence}${parsed.address}`)
|
|
108
|
-
expect(parsed.qualifiedSequence).toBe(
|
|
109
|
-
'0000011f71fb04cb00000000ad20fbb1b36d327210f67ad98be881ddf6ad1f1b3e2c5137',
|
|
110
|
-
)
|
|
111
|
-
})
|
|
112
|
-
})
|
|
113
|
-
})
|
package/src/spec/Payload.spec.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
describe, expect, it,
|
|
5
|
-
} from 'vitest'
|
|
6
|
-
|
|
7
|
-
import type { Payload } from '../Payload.ts'
|
|
8
|
-
|
|
9
|
-
const TestPayloadSchema = 'com.test.schema'
|
|
10
|
-
type TestPayloadSchema = typeof TestPayloadSchema
|
|
11
|
-
|
|
12
|
-
type TestPayload = Payload<{ data: { foo: string } }, TestPayloadSchema>
|
|
13
|
-
|
|
14
|
-
/* These tests are just to see if casting works as expected */
|
|
15
|
-
|
|
16
|
-
describe('Payload Types', () => {
|
|
17
|
-
it('WithMeta', () => {
|
|
18
|
-
const payload: TestPayload = { data: { foo: 'bar' }, schema: 'com.test.schema' }
|
|
19
|
-
const payloadWithMeta: TestPayload = {
|
|
20
|
-
$hash: '123', $meta: { test: 'yo' }, data: { foo: 'bar' }, schema: 'com.test.schema',
|
|
21
|
-
} as TestPayload
|
|
22
|
-
const payloadFromWithMeta: TestPayload = payloadWithMeta
|
|
23
|
-
expect(payload).toBeDefined()
|
|
24
|
-
expect(payloadFromWithMeta).toBeDefined()
|
|
25
|
-
})
|
|
26
|
-
})
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
describe, expect, it,
|
|
5
|
-
} from 'vitest'
|
|
6
|
-
import z from 'zod'
|
|
7
|
-
|
|
8
|
-
import { isPayloadOfZodType } from '../isPayloadOfZodType.ts'
|
|
9
|
-
import type { Payload } from '../Payload.ts'
|
|
10
|
-
|
|
11
|
-
const TestPayloadSchema = 'com.test.schema'
|
|
12
|
-
type TestPayloadSchema = typeof TestPayloadSchema
|
|
13
|
-
|
|
14
|
-
type TestPayload = Payload<{ data: { foo: string } }, TestPayloadSchema>
|
|
15
|
-
|
|
16
|
-
const TestPayloadZod = z.object({ data: z.object({ foo: z.string() }) })
|
|
17
|
-
|
|
18
|
-
/* These tests are just to see if casting works as expected */
|
|
19
|
-
|
|
20
|
-
describe('isPayloadOfZodType', () => {
|
|
21
|
-
const payload: TestPayload = { data: { foo: 'bar' }, schema: 'com.test.schema' }
|
|
22
|
-
const payloadWithMeta: TestPayload = {
|
|
23
|
-
$hash: '123', $meta: { test: 'yo' }, data: { foo: 'bar' }, schema: 'com.test.schema',
|
|
24
|
-
} as TestPayload
|
|
25
|
-
it('with schema supplied', () => {
|
|
26
|
-
const identity = isPayloadOfZodType<TestPayload>(TestPayloadZod, TestPayloadSchema)
|
|
27
|
-
expect(identity(payload)).toBeTrue()
|
|
28
|
-
expect(identity(payloadWithMeta)).toBeTrue()
|
|
29
|
-
})
|
|
30
|
-
it('without schema supplied', () => {
|
|
31
|
-
const identity = isPayloadOfZodType<TestPayload>(TestPayloadZod)
|
|
32
|
-
expect(identity(payload)).toBeTrue()
|
|
33
|
-
expect(identity(payloadWithMeta)).toBeTrue()
|
|
34
|
-
})
|
|
35
|
-
})
|