@xyo-network/payload-model 3.6.9 → 3.6.10
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/browser/Error.d.ts +2 -2
- package/dist/browser/Error.d.ts.map +1 -1
- package/dist/browser/PayloadSet/PayloadSetSchema.d.ts +2 -2
- package/dist/browser/PayloadSet/PayloadSetSchema.d.ts.map +1 -1
- package/dist/browser/Schema.d.ts +2 -2
- package/dist/browser/StorageMeta/DataHash.d.ts +14 -0
- package/dist/browser/StorageMeta/DataHash.d.ts.map +1 -0
- package/dist/browser/StorageMeta/Hash.d.ts +15 -0
- package/dist/browser/StorageMeta/Hash.d.ts.map +1 -0
- package/dist/browser/StorageMeta/Sequence.d.ts +13 -70
- package/dist/browser/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/browser/StorageMeta/StorageMeta.d.ts +8 -21
- package/dist/browser/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/browser/StorageMeta/index.d.ts +3 -2
- package/dist/browser/StorageMeta/index.d.ts.map +1 -1
- package/dist/browser/StorageMeta/{SequenceComparer.d.ts → sequence/Comparer.d.ts} +1 -1
- package/dist/browser/StorageMeta/sequence/Comparer.d.ts.map +1 -0
- package/dist/{neutral/StorageMeta/SequenceParser.d.ts → browser/StorageMeta/sequence/Parser.d.ts} +1 -1
- package/dist/browser/StorageMeta/sequence/Parser.d.ts.map +1 -0
- package/dist/browser/StorageMeta/sequence/Sequence.d.ts +71 -0
- package/dist/browser/StorageMeta/sequence/Sequence.d.ts.map +1 -0
- package/dist/browser/StorageMeta/sequence/index.d.ts +4 -0
- package/dist/browser/StorageMeta/sequence/index.d.ts.map +1 -0
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.mjs +50 -22
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/isPayload.d.ts +4 -4
- package/dist/browser/isPayload.d.ts.map +1 -1
- package/dist/neutral/Error.d.ts +2 -2
- package/dist/neutral/Error.d.ts.map +1 -1
- package/dist/neutral/PayloadSet/PayloadSetSchema.d.ts +2 -2
- package/dist/neutral/PayloadSet/PayloadSetSchema.d.ts.map +1 -1
- package/dist/neutral/Schema.d.ts +2 -2
- package/dist/neutral/StorageMeta/DataHash.d.ts +14 -0
- package/dist/neutral/StorageMeta/DataHash.d.ts.map +1 -0
- package/dist/neutral/StorageMeta/Hash.d.ts +15 -0
- package/dist/neutral/StorageMeta/Hash.d.ts.map +1 -0
- package/dist/neutral/StorageMeta/Sequence.d.ts +13 -70
- package/dist/neutral/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/StorageMeta.d.ts +8 -21
- package/dist/neutral/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/index.d.ts +3 -2
- package/dist/neutral/StorageMeta/index.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/{SequenceComparer.d.ts → sequence/Comparer.d.ts} +1 -1
- package/dist/neutral/StorageMeta/sequence/Comparer.d.ts.map +1 -0
- package/dist/{node/StorageMeta/SequenceParser.d.ts → neutral/StorageMeta/sequence/Parser.d.ts} +1 -1
- package/dist/neutral/StorageMeta/sequence/Parser.d.ts.map +1 -0
- package/dist/neutral/StorageMeta/sequence/Sequence.d.ts +71 -0
- package/dist/neutral/StorageMeta/sequence/Sequence.d.ts.map +1 -0
- package/dist/neutral/StorageMeta/sequence/index.d.ts +4 -0
- package/dist/neutral/StorageMeta/sequence/index.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +1 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +50 -22
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/isPayload.d.ts +4 -4
- package/dist/neutral/isPayload.d.ts.map +1 -1
- package/dist/node/Error.d.ts +2 -2
- package/dist/node/Error.d.ts.map +1 -1
- package/dist/node/PayloadSet/PayloadSetSchema.d.ts +2 -2
- package/dist/node/PayloadSet/PayloadSetSchema.d.ts.map +1 -1
- package/dist/node/Schema.d.ts +2 -2
- package/dist/node/StorageMeta/DataHash.d.ts +14 -0
- package/dist/node/StorageMeta/DataHash.d.ts.map +1 -0
- package/dist/node/StorageMeta/Hash.d.ts +15 -0
- package/dist/node/StorageMeta/Hash.d.ts.map +1 -0
- package/dist/node/StorageMeta/Sequence.d.ts +13 -70
- package/dist/node/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/node/StorageMeta/StorageMeta.d.ts +8 -21
- package/dist/node/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/node/StorageMeta/index.d.ts +3 -2
- package/dist/node/StorageMeta/index.d.ts.map +1 -1
- package/dist/node/StorageMeta/{SequenceComparer.d.ts → sequence/Comparer.d.ts} +1 -1
- package/dist/node/StorageMeta/sequence/Comparer.d.ts.map +1 -0
- package/dist/{browser/StorageMeta/SequenceParser.d.ts → node/StorageMeta/sequence/Parser.d.ts} +1 -1
- package/dist/node/StorageMeta/sequence/Parser.d.ts.map +1 -0
- package/dist/node/StorageMeta/sequence/Sequence.d.ts +71 -0
- package/dist/node/StorageMeta/sequence/Sequence.d.ts.map +1 -0
- package/dist/node/StorageMeta/sequence/index.d.ts +4 -0
- package/dist/node/StorageMeta/sequence/index.d.ts.map +1 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.mjs +50 -22
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/isPayload.d.ts +4 -4
- package/dist/node/isPayload.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/Error.ts +2 -2
- package/src/PayloadSet/PayloadSetSchema.ts +2 -2
- package/src/StorageMeta/DataHash.ts +18 -0
- package/src/StorageMeta/Hash.ts +19 -0
- package/src/StorageMeta/Sequence.ts +11 -71
- package/src/StorageMeta/StorageMeta.ts +7 -39
- package/src/StorageMeta/index.ts +3 -2
- package/src/StorageMeta/{SequenceComparer.ts → sequence/Comparer.ts} +1 -1
- package/src/StorageMeta/sequence/Sequence.ts +78 -0
- package/src/StorageMeta/sequence/index.ts +3 -0
- package/src/index.ts +1 -0
- package/dist/browser/StorageMeta/SequenceComparer.d.ts.map +0 -1
- package/dist/browser/StorageMeta/SequenceParser.d.ts.map +0 -1
- package/dist/neutral/StorageMeta/SequenceComparer.d.ts.map +0 -1
- package/dist/neutral/StorageMeta/SequenceParser.d.ts.map +0 -1
- package/dist/node/StorageMeta/SequenceComparer.d.ts.map +0 -1
- package/dist/node/StorageMeta/SequenceParser.d.ts.map +0 -1
- /package/src/StorageMeta/{SequenceParser.ts → sequence/Parser.ts} +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -41,7 +41,41 @@ var isSchema = (value) => {
|
|
|
41
41
|
};
|
|
42
42
|
var asSchema = AsTypeFactory.create(isSchema);
|
|
43
43
|
|
|
44
|
+
// src/StorageMeta/DataHash.ts
|
|
45
|
+
import { isHash } from "@xylabs/hex";
|
|
46
|
+
import { AsObjectFactory as AsObjectFactory2 } from "@xylabs/object";
|
|
47
|
+
var isDataHashStorageMeta = (value) => {
|
|
48
|
+
return isHash(value?._dataHash);
|
|
49
|
+
};
|
|
50
|
+
var asDataHashStorageMeta = AsObjectFactory2.create(isDataHashStorageMeta);
|
|
51
|
+
var asOptionalDataHashStorageMeta = AsObjectFactory2.createOptional(isDataHashStorageMeta);
|
|
52
|
+
|
|
53
|
+
// src/StorageMeta/Hash.ts
|
|
54
|
+
import { isHash as isHash2 } from "@xylabs/hex";
|
|
55
|
+
import { AsObjectFactory as AsObjectFactory3 } from "@xylabs/object";
|
|
56
|
+
var isHashStorageMeta = (value) => {
|
|
57
|
+
return isDataHashStorageMeta(value) && isHash2(value?._hash);
|
|
58
|
+
};
|
|
59
|
+
var asHashStorageMeta = AsObjectFactory3.create(isHashStorageMeta);
|
|
60
|
+
var asOptionalHashStorageMeta = AsObjectFactory3.createOptional(isHashStorageMeta);
|
|
61
|
+
|
|
44
62
|
// src/StorageMeta/Sequence.ts
|
|
63
|
+
import { AsObjectFactory as AsObjectFactory4 } from "@xylabs/object";
|
|
64
|
+
var isSequenceStorageMeta = (value) => {
|
|
65
|
+
return value?._sequence !== void 0;
|
|
66
|
+
};
|
|
67
|
+
var asSequenceStorageMeta = AsObjectFactory4.create(isSequenceStorageMeta);
|
|
68
|
+
var asOptionalSequenceStorageMeta = AsObjectFactory4.createOptional(isSequenceStorageMeta);
|
|
69
|
+
|
|
70
|
+
// src/StorageMeta/sequence/Parser.ts
|
|
71
|
+
import { toUint8Array } from "@xylabs/arraybuffer";
|
|
72
|
+
import { assertEx } from "@xylabs/assert";
|
|
73
|
+
import {
|
|
74
|
+
isAddress,
|
|
75
|
+
toHex
|
|
76
|
+
} from "@xylabs/hex";
|
|
77
|
+
|
|
78
|
+
// src/StorageMeta/sequence/Sequence.ts
|
|
45
79
|
import { isHex } from "@xylabs/hex";
|
|
46
80
|
var isEpoch = (value) => {
|
|
47
81
|
return isHex(value) && value.length === SequenceConstants.epochBytes * 2;
|
|
@@ -93,13 +127,7 @@ var SequenceConstants = {
|
|
|
93
127
|
...QualifiedSequenceConstants
|
|
94
128
|
};
|
|
95
129
|
|
|
96
|
-
// src/StorageMeta/
|
|
97
|
-
import { toUint8Array } from "@xylabs/arraybuffer";
|
|
98
|
-
import { assertEx } from "@xylabs/assert";
|
|
99
|
-
import {
|
|
100
|
-
isAddress,
|
|
101
|
-
toHex
|
|
102
|
-
} from "@xylabs/hex";
|
|
130
|
+
// src/StorageMeta/sequence/Parser.ts
|
|
103
131
|
var SequenceParser = class _SequenceParser {
|
|
104
132
|
static privateConstructorKey = Date.now().toString();
|
|
105
133
|
data;
|
|
@@ -192,7 +220,7 @@ var SequenceParser = class _SequenceParser {
|
|
|
192
220
|
}
|
|
193
221
|
};
|
|
194
222
|
|
|
195
|
-
// src/StorageMeta/
|
|
223
|
+
// src/StorageMeta/sequence/Comparer.ts
|
|
196
224
|
var local = (a, b) => {
|
|
197
225
|
const aa = SequenceParser.from(a);
|
|
198
226
|
const bb = SequenceParser.from(b);
|
|
@@ -206,19 +234,12 @@ var qualified = (a, b) => {
|
|
|
206
234
|
var SequenceComparer = { local, qualified };
|
|
207
235
|
|
|
208
236
|
// src/StorageMeta/StorageMeta.ts
|
|
209
|
-
import {
|
|
210
|
-
import { AsObjectFactory as AsObjectFactory2 } from "@xylabs/object";
|
|
211
|
-
var isSequenceMeta = (value) => {
|
|
212
|
-
return value?._sequence !== void 0;
|
|
213
|
-
};
|
|
214
|
-
var isHashMeta = (value) => {
|
|
215
|
-
return isHash(value?._hash) && isHash(value?._dataHash);
|
|
216
|
-
};
|
|
237
|
+
import { AsObjectFactory as AsObjectFactory5 } from "@xylabs/object";
|
|
217
238
|
var isStorageMeta = (value) => {
|
|
218
|
-
return
|
|
239
|
+
return isSequenceStorageMeta(value) && isHashStorageMeta(value);
|
|
219
240
|
};
|
|
220
|
-
var
|
|
221
|
-
var asOptionalStorageMeta =
|
|
241
|
+
var asStorageStorageMeta = AsObjectFactory5.create(isStorageMeta);
|
|
242
|
+
var asOptionalStorageMeta = AsObjectFactory5.createOptional(isStorageMeta);
|
|
222
243
|
export {
|
|
223
244
|
LocalSequenceConstants,
|
|
224
245
|
ModuleErrorSchema,
|
|
@@ -232,13 +253,20 @@ export {
|
|
|
232
253
|
SequenceNonceComponentLengths,
|
|
233
254
|
SequenceParser,
|
|
234
255
|
asAnyPayload,
|
|
256
|
+
asDataHashStorageMeta,
|
|
257
|
+
asHashStorageMeta,
|
|
258
|
+
asOptionalDataHashStorageMeta,
|
|
259
|
+
asOptionalHashStorageMeta,
|
|
260
|
+
asOptionalSequenceStorageMeta,
|
|
235
261
|
asOptionalStorageMeta,
|
|
236
262
|
asPayload,
|
|
237
263
|
asSchema,
|
|
238
|
-
|
|
264
|
+
asSequenceStorageMeta,
|
|
265
|
+
asStorageStorageMeta,
|
|
239
266
|
isAnyPayload,
|
|
267
|
+
isDataHashStorageMeta,
|
|
240
268
|
isEpoch,
|
|
241
|
-
|
|
269
|
+
isHashStorageMeta,
|
|
242
270
|
isLocalSequence,
|
|
243
271
|
isModuleError,
|
|
244
272
|
isNonce,
|
|
@@ -248,7 +276,7 @@ export {
|
|
|
248
276
|
isQualifiedSequence,
|
|
249
277
|
isSchema,
|
|
250
278
|
isSequence,
|
|
251
|
-
|
|
279
|
+
isSequenceStorageMeta,
|
|
252
280
|
isStorageMeta,
|
|
253
281
|
notPayloadOfSchemaType
|
|
254
282
|
};
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/isPayload.ts","../../src/isPayloadOfSchemaType.ts","../../src/Error.ts","../../src/PayloadSet/PayloadSetSchema.ts","../../src/Schema.ts","../../src/StorageMeta/Sequence.ts","../../src/StorageMeta/SequenceParser.ts","../../src/StorageMeta/SequenceComparer.ts","../../src/StorageMeta/StorageMeta.ts"],"sourcesContent":["import { AsObjectFactory, isObject } from '@xylabs/object'\n\nimport type { Payload } from './Payload.ts'\n\nexport const isAnyPayload = (value: unknown): value is Payload => {\n if (isObject(value)) {\n return typeof value.schema === 'string'\n }\n return false\n}\n\nexport const asAnyPayload = AsObjectFactory.create(isAnyPayload)\n\nexport const isPayload\n = <T extends Payload>(schema: string[]) =>\n (value: unknown): value is T => {\n if (isAnyPayload(value)) {\n return schema.includes(value.schema)\n }\n return false\n }\n\nexport const asPayload = <T extends Payload>(schema: string[]) => AsObjectFactory.create((value: unknown): value is T => isPayload(schema)(value))\n","import { isAnyPayload } from './isPayload.ts'\nimport type { Payload, WithSources } from './Payload.ts'\n\nexport function isPayloadOfSchemaType<T extends Payload | never = never>(schema: T['schema']) {\n return (x?: unknown | null): x is T => isAnyPayload(x) && x?.schema === schema\n}\n\nexport const isPayloadOfSchemaTypeWithSources = <T extends Payload | never = never>(schema: T['schema']) => {\n return (x?: unknown | null): x is WithSources<T> =>\n isPayloadOfSchemaType<WithSources<T>>(schema)(x) && x.$sources !== undefined && Array.isArray(x.$sources)\n}\n\nexport const notPayloadOfSchemaType = <T extends Payload | never = never>(schema: T['schema']) => {\n return (x?: unknown | null): x is T => !isAnyPayload(x) || x?.schema !== schema\n}\n\n// test types -- keep for future validation, but comment out\n\n/*\ntype TestSchema = 'network.xyo.test'\nconst TestSchema: TestSchema = 'network.xyo.test'\n\ntype Test = Payload<{ field: string }, TestSchema>\n\nconst testPayload: Test = { field: 'test', schema: TestSchema }\n\nconst testPayloads: Payload[] = [testPayload]\n\nconst isTest: Test[] = testPayloads.filter(isPayloadOfSchemaType<Payload>(TestSchema))\n\nconst isTestFromMetaTyped = testMetaPayloads.filter(isPayloadOfSchemaType<Test>(TestSchema))\n*/\n","import type { Hash } from '@xylabs/hex'\nimport type { JsonValue } from '@xylabs/object'\n\nimport { isPayloadOfSchemaType } from './isPayloadOfSchemaType.ts'\nimport type { Payload } from './Payload.ts'\n\nexport type ModuleErrorSchema = 'network.xyo.error.module'\nexport const ModuleErrorSchema: ModuleErrorSchema = 'network.xyo.error.module'\n\nexport type ModuleError = Payload<{\n details?: JsonValue\n message?: string\n name?: string\n query?: Hash\n schema: ModuleErrorSchema\n}>\n\nexport const isModuleError = isPayloadOfSchemaType<ModuleError>(ModuleErrorSchema)\n","export type PayloadSetSchema = 'network.xyo.payload.set'\nexport const PayloadSetSchema: PayloadSetSchema = 'network.xyo.payload.set'\n","import type { EmptyObject } from '@xylabs/object'\nimport { AsTypeFactory } from '@xylabs/object'\n\n/** Schema type in Javascript is a string */\nexport type Schema = string\n\nexport const PayloadSchema = 'network.xyo.payload' as const\nexport type PayloadSchema = typeof PayloadSchema\n\nexport const isSchema = (value: unknown): value is Schema => {\n return typeof value === 'string'\n}\n\nexport const asSchema = AsTypeFactory.create<Schema>(isSchema)\n\n/** Schema fields for a Payload */\nexport interface SchemaFields extends EmptyObject {\n /** Schema of the object */\n schema: Schema\n}\n\n/** Add the Schema Fields to an object */\nexport type WithSchema<T extends EmptyObject | void = void> = T extends EmptyObject ? SchemaFields & T : SchemaFields\n","import type { Address, Hex } from '@xylabs/hex'\nimport { isHex } from '@xylabs/hex'\n\n// we use Exclude to intentionally make the type not equal to string\nexport type LocalSequence = Hex & Exclude<string, 'reserved-local-sequence-value'>\nexport type QualifiedSequence = Hex & Exclude<string, 'reserved-qualified-sequence-value'>\nexport type Sequence = LocalSequence | QualifiedSequence\n\nexport type Epoch = Hex & Exclude<string, 'reserved-epoch-sequence-value'>\n\nexport const isEpoch = (value: unknown): value is Epoch => {\n return isHex(value) && (value as string).length === SequenceConstants.epochBytes * 2\n}\n\nexport type Nonce = Hex & Exclude<string, 'reserved-nonce-sequence-value'>\n\nexport const isNonce = (value: unknown): value is Epoch => {\n return isHex(value) && (value as string).length === SequenceConstants.nonceBytes * 2\n}\n\nexport const isLocalSequence = (value: unknown): value is Sequence => {\n return isHex(value) && (value as string).length === SequenceConstants.localSequenceBytes * 2\n}\n\nexport const isQualifiedSequence = (value: unknown): value is Sequence => {\n return isHex(value) && (value as string).length === SequenceConstants.qualifiedSequenceBytes * 2\n}\n\nexport const isSequence = (value: unknown): value is Sequence => {\n return isLocalSequence(value) || isQualifiedSequence(value)\n}\n\nexport const SequenceNonceComponentLengths = {\n nonceIndexBytes: 4,\n nonceHashBytes: 4,\n}\n\nexport const SequenceComponentLengths = {\n ...SequenceNonceComponentLengths,\n epochBytes: 8,\n nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,\n addressBytes: 20,\n}\n\nexport const SequenceComponentMinMax = {\n minEpoch: '0'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,\n maxEpoch: 'f'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,\n minNonce: '0'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,\n maxNonce: 'f'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,\n minAddress: '0'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,\n maxAddress: 'f'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,\n}\n\nexport const LocalSequenceConstants = {\n ...SequenceComponentLengths,\n ...SequenceComponentMinMax,\n localSequenceBytes: SequenceComponentLengths.epochBytes + SequenceComponentLengths.nonceBytes,\n minLocalSequence: SequenceComponentMinMax.minEpoch + SequenceComponentMinMax.minNonce as LocalSequence,\n maxLocalSequence: SequenceComponentMinMax.maxEpoch + SequenceComponentMinMax.maxNonce as LocalSequence,\n}\n\nexport const QualifiedSequenceConstants = {\n qualifiedSequenceBytes: LocalSequenceConstants.localSequenceBytes + SequenceComponentLengths.addressBytes,\n minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,\n maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress as QualifiedSequence,\n}\n\nexport const SequenceConstants = {\n ...LocalSequenceConstants,\n ...QualifiedSequenceConstants,\n}\n\n// \"11111111111111112222222222222222\" is and example of a local sequence string\n\n// \"111111111111111122222222222222223333333333333333333333333333333333333333\" is and example of a local sequence string\n// epoch = \"1111111111111111\"\n// nonce = \"2222222222222222\"\n// address = \"3333333333333333333333333333333333333333\"\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport {\n type Address,\n type Hash, type Hex,\n isAddress,\n toHex,\n} from '@xylabs/hex'\n\nimport type {\n Epoch, LocalSequence, Nonce, QualifiedSequence,\n Sequence,\n} from './Sequence.ts'\nimport {\n isQualifiedSequence, isSequence, SequenceConstants,\n} from './Sequence.ts'\n\nexport class SequenceParser {\n protected static privateConstructorKey = Date.now().toString()\n\n private readonly data: Readonly<Uint8Array>\n\n protected constructor(privateConstructorKey: string, hex: Hex) {\n assertEx(SequenceParser.privateConstructorKey === privateConstructorKey, () => 'Use create function instead of constructor')\n const paddedHex = toHex(hex, {\n prefix: false,\n bitLength: (hex.length <= SequenceConstants.localSequenceBytes * 2)\n ? SequenceConstants.localSequenceBytes * 8\n : SequenceConstants.qualifiedSequenceBytes * 8,\n })\n this.data = toUint8Array(paddedHex)\n }\n\n get address(): Address {\n const start = SequenceConstants.localSequenceBytes\n const end = SequenceConstants.qualifiedSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get epoch(): Epoch {\n const start = 0\n const end = SequenceConstants.epochBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get localSequence(): LocalSequence {\n const start = 0\n const end = SequenceConstants.localSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get nonce(): Nonce {\n const start = SequenceConstants.epochBytes\n const end = SequenceConstants.localSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get qualifiedSequence(): QualifiedSequence {\n const start = 0\n const end = SequenceConstants.qualifiedSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n static from(sequence: Sequence, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hash, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hex, address?: Address): SequenceParser\n static from(timestamp: Hex, nonce: Nonce, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hash, index?: number, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hex, index?: number, address?: Address): SequenceParser\n static from(timestamp: Hex, nonce: Nonce, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hash, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hex, address?: Address): SequenceParser\n static from(timestamp: number, nonce: Nonce, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hash, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hex, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, nonce: Nonce, index?: number, address?: Address): SequenceParser\n static from(\n timestampOrSequence: Sequence | Hex | number,\n nonceOrAddress: Hash | Nonce,\n addressOrIndex?: Address | number,\n addressOnly?: Address,\n ): SequenceParser {\n const address = typeof addressOrIndex === 'number' ? addressOnly : addressOrIndex\n const index = typeof addressOrIndex === 'number' ? addressOrIndex : undefined\n if (isSequence(timestampOrSequence)) {\n if (nonceOrAddress) {\n assertEx(!isQualifiedSequence(timestampOrSequence), () => 'Providing both a qualified sequence and a address is not allowed')\n assertEx(isAddress(nonceOrAddress), () => 'Invalid address provided')\n return new this(SequenceParser.privateConstructorKey, (timestampOrSequence + address) as Hex)\n }\n return new this(SequenceParser.privateConstructorKey, timestampOrSequence)\n }\n const epoch = SequenceParser.toEpoch(timestampOrSequence)\n const nonce = SequenceParser.toNonce(nonceOrAddress, index)\n const addressHex: Hex = address ? toHex(address, { bitLength: SequenceConstants.addressBytes * 8 }) : SequenceConstants.minAddress\n const hexString = (epoch + nonce + addressHex) as Hex\n assertEx(isSequence(hexString), () => `Invalid sequence [${hexString}] [${epoch}, ${nonce}, ${addressHex}]`)\n return new this(SequenceParser.privateConstructorKey, hexString)\n }\n\n static parse(value: Hex | string | ArrayBufferLike): SequenceParser {\n const hex = toHex(value)\n if (isSequence(hex)) {\n return new this(SequenceParser.privateConstructorKey, hex)\n }\n throw new Error(`Invalid sequence [${value}]`)\n }\n\n // can convert a short number/hex to an epoch (treats it as the whole value) or extract an epoch from a sequence\n static toEpoch(value: number | Hex | Epoch): Epoch {\n assertEx(\n typeof value !== 'number' || Number.isInteger(value),\n () => 'Value must be in integer',\n )\n const hex = toHex(value, { prefix: false })\n if (hex.length <= SequenceConstants.epochBytes * 2) {\n return toHex(value, { prefix: false, bitLength: SequenceConstants.epochBytes * 8 }) as Epoch\n }\n if (isSequence(hex)) {\n return hex.slice(0, SequenceConstants.epochBytes * 2) as Epoch\n }\n throw new Error(`Value could not be converted to epoch [${hex}]`)\n }\n\n // can convert a short number/hex to a nonce (treats it as the whole value) or extract an nonce from a sequence\n static toNonce(value: Hash | Hex, index = 0): Nonce {\n assertEx(\n typeof value !== 'number' || Number.isInteger(value),\n () => 'Value must be in integer',\n )\n const hex = toHex(value, { prefix: false })\n if (isSequence(hex)) {\n return hex.slice(SequenceConstants.epochBytes * 2, SequenceConstants.localSequenceBytes * 2) as Nonce\n }\n const hashHex = toHex((hex as string), { prefix: false, bitLength: SequenceConstants.nonceHashBytes * 8 }).slice(-SequenceConstants.nonceHashBytes * 2)\n const indexHex = toHex(index, { prefix: false, bitLength: SequenceConstants.nonceIndexBytes * 8 }).slice(-SequenceConstants.nonceIndexBytes * 2)\n return (indexHex + hashHex).slice(-SequenceConstants.nonceBytes * 2) as Nonce\n }\n}\n","import type { Compare } from '@xylabs/object'\n\nimport type { Sequence } from './Sequence.ts'\nimport { SequenceParser } from './SequenceParser.ts'\n\nconst local: Compare<Sequence> = (a, b) => {\n const aa = SequenceParser.from(a)\n const bb = SequenceParser.from(b)\n return aa.localSequence > bb.localSequence ? 1 : aa.localSequence < bb.localSequence ? -1 : 0\n}\n\nconst qualified: Compare<Sequence> = (a, b) => {\n const aa = SequenceParser.from(a)\n const bb = SequenceParser.from(b)\n return aa.qualifiedSequence > bb.qualifiedSequence ? 1 : aa.qualifiedSequence < bb.qualifiedSequence ? -1 : 0\n}\n\nexport const SequenceComparer = { local, qualified }\n","import { type Hash, isHash } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xylabs/object'\n\nimport type { Payload } from '../Payload.ts'\nimport type { Sequence } from './Sequence.ts'\n\nexport interface SequenceMeta {\n _sequence: Sequence\n}\n\nexport type WithPartialSequenceMeta<T extends Payload = Payload> = Partial<WithSequenceMeta<T>>\n\nexport type WithSequenceMeta<T extends Payload = Payload> = T & SequenceMeta\n\nexport interface HashMeta {\n _dataHash: Hash\n _hash: Hash\n}\n\nexport type WithPartialHashMeta<T extends Payload = Payload> = Partial<WithHashMeta<T>>\n\nexport type WithHashMeta<T extends Payload = Payload> = T & HashMeta\n\nexport interface StorageMeta extends SequenceMeta, HashMeta {}\n\nexport type WithPartialStorageMeta<T extends Payload = Payload> = Partial<WithStorageMeta<T>>\n\nexport type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta\n\nexport const isSequenceMeta = (value: unknown): value is SequenceMeta => {\n return (value as WithSequenceMeta)?._sequence !== undefined\n}\n\nexport const isHashMeta = (value: unknown): value is HashMeta => {\n return isHash((value as WithHashMeta)?._hash) && isHash((value as WithHashMeta)?._dataHash)\n}\n\nexport const isStorageMeta = (value: unknown): value is StorageMeta => {\n return isSequenceMeta(value) && isHashMeta(value)\n}\nexport const asStorageMeta = AsObjectFactory.create(isStorageMeta)\nexport const asOptionalStorageMeta = AsObjectFactory.createOptional(isStorageMeta)\n\n// \"00005a7f354762f3ac1bc5ddc6cfd08d14\" is and example of a local sequence string\n\n// \"00005a7f354762f3ac1bc5ddc6cfd08d14a123456789abcdef0123\" is and example of a local sequence string\n// epoch = \"00005a7f354762f3ac\"\n// nonce = \"1bc5ddc6cfd08d14\"\n// address = \"a123456789abcdef0123\"\n"],"mappings":"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","names":["AsObjectFactory"]}
|
|
1
|
+
{"version":3,"sources":["../../src/isPayload.ts","../../src/isPayloadOfSchemaType.ts","../../src/Error.ts","../../src/PayloadSet/PayloadSetSchema.ts","../../src/Schema.ts","../../src/StorageMeta/DataHash.ts","../../src/StorageMeta/Hash.ts","../../src/StorageMeta/Sequence.ts","../../src/StorageMeta/sequence/Parser.ts","../../src/StorageMeta/sequence/Sequence.ts","../../src/StorageMeta/sequence/Comparer.ts","../../src/StorageMeta/StorageMeta.ts"],"sourcesContent":["import { AsObjectFactory, isObject } from '@xylabs/object'\n\nimport type { Payload } from './Payload.ts'\n\nexport const isAnyPayload = (value: unknown): value is Payload => {\n if (isObject(value)) {\n return typeof value.schema === 'string'\n }\n return false\n}\n\nexport const asAnyPayload = AsObjectFactory.create(isAnyPayload)\n\nexport const isPayload\n = <T extends Payload>(schema: string[]) =>\n (value: unknown): value is T => {\n if (isAnyPayload(value)) {\n return schema.includes(value.schema)\n }\n return false\n }\n\nexport const asPayload = <T extends Payload>(schema: string[]) => AsObjectFactory.create((value: unknown): value is T => isPayload(schema)(value))\n","import { isAnyPayload } from './isPayload.ts'\nimport type { Payload, WithSources } from './Payload.ts'\n\nexport function isPayloadOfSchemaType<T extends Payload | never = never>(schema: T['schema']) {\n return (x?: unknown | null): x is T => isAnyPayload(x) && x?.schema === schema\n}\n\nexport const isPayloadOfSchemaTypeWithSources = <T extends Payload | never = never>(schema: T['schema']) => {\n return (x?: unknown | null): x is WithSources<T> =>\n isPayloadOfSchemaType<WithSources<T>>(schema)(x) && x.$sources !== undefined && Array.isArray(x.$sources)\n}\n\nexport const notPayloadOfSchemaType = <T extends Payload | never = never>(schema: T['schema']) => {\n return (x?: unknown | null): x is T => !isAnyPayload(x) || x?.schema !== schema\n}\n\n// test types -- keep for future validation, but comment out\n\n/*\ntype TestSchema = 'network.xyo.test'\nconst TestSchema: TestSchema = 'network.xyo.test'\n\ntype Test = Payload<{ field: string }, TestSchema>\n\nconst testPayload: Test = { field: 'test', schema: TestSchema }\n\nconst testPayloads: Payload[] = [testPayload]\n\nconst isTest: Test[] = testPayloads.filter(isPayloadOfSchemaType<Payload>(TestSchema))\n\nconst isTestFromMetaTyped = testMetaPayloads.filter(isPayloadOfSchemaType<Test>(TestSchema))\n*/\n","import type { Hash } from '@xylabs/hex'\nimport type { JsonValue } from '@xylabs/object'\n\nimport { isPayloadOfSchemaType } from './isPayloadOfSchemaType.ts'\nimport type { Payload } from './Payload.ts'\n\nexport const ModuleErrorSchema = 'network.xyo.error.module' as const\nexport type ModuleErrorSchema = typeof ModuleErrorSchema\n\nexport type ModuleError = Payload<{\n details?: JsonValue\n message?: string\n name?: string\n query?: Hash\n schema: ModuleErrorSchema\n}>\n\nexport const isModuleError = isPayloadOfSchemaType<ModuleError>(ModuleErrorSchema)\n","export const PayloadSetSchema = 'network.xyo.payload.set' as const\nexport type PayloadSetSchema = typeof PayloadSetSchema\n","import type { EmptyObject } from '@xylabs/object'\nimport { AsTypeFactory } from '@xylabs/object'\n\n/** Schema type in Javascript is a string */\nexport type Schema = string\n\nexport const PayloadSchema = 'network.xyo.payload' as const\nexport type PayloadSchema = typeof PayloadSchema\n\nexport const isSchema = (value: unknown): value is Schema => {\n return typeof value === 'string'\n}\n\nexport const asSchema = AsTypeFactory.create<Schema>(isSchema)\n\n/** Schema fields for a Payload */\nexport interface SchemaFields extends EmptyObject {\n /** Schema of the object */\n schema: Schema\n}\n\n/** Add the Schema Fields to an object */\nexport type WithSchema<T extends EmptyObject | void = void> = T extends EmptyObject ? SchemaFields & T : SchemaFields\n","import { type Hash, isHash } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xylabs/object'\n\nimport type { Payload } from '../Payload.ts'\n\nexport interface DataHashStorageMeta {\n _dataHash: Hash\n}\n\nexport type WithDataHashStorageMeta<T extends Payload = Payload> = T & DataHashStorageMeta\nexport type WithPartialDataHashStorageMeta<T extends Payload = Payload> = Partial<WithDataHashStorageMeta<T>>\n\nexport const isDataHashStorageMeta = (value: unknown): value is DataHashStorageMeta => {\n return isHash((value as WithDataHashStorageMeta)?._dataHash)\n}\n\nexport const asDataHashStorageMeta = AsObjectFactory.create<DataHashStorageMeta>(isDataHashStorageMeta)\nexport const asOptionalDataHashStorageMeta = AsObjectFactory.createOptional<DataHashStorageMeta>(isDataHashStorageMeta)\n","import { type Hash, isHash } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xylabs/object'\n\nimport type { Payload } from '../Payload.ts'\nimport { type DataHashStorageMeta, isDataHashStorageMeta } from './DataHash.ts'\n\nexport interface HashStorageMeta extends DataHashStorageMeta {\n _hash: Hash\n}\n\nexport type WithHashStorageMeta<T extends Payload = Payload> = T & HashStorageMeta\nexport type WithPartialHashStorageMeta<T extends Payload = Payload> = Partial<WithHashStorageMeta<T>>\n\nexport const isHashStorageMeta = (value: unknown): value is HashStorageMeta => {\n return isDataHashStorageMeta(value) && isHash((value as WithHashStorageMeta)?._hash)\n}\n\nexport const asHashStorageMeta = AsObjectFactory.create<HashStorageMeta>(isHashStorageMeta)\nexport const asOptionalHashStorageMeta = AsObjectFactory.createOptional<HashStorageMeta>(isHashStorageMeta)\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport type { Payload } from '../Payload.ts'\nimport type { Sequence } from './sequence/index.ts'\n\nexport interface SequenceStorageMeta {\n _sequence: Sequence\n}\n\nexport type WithSequenceStorageMeta<T extends Payload = Payload> = T & SequenceStorageMeta\nexport type WithPartialSequenceStorageMeta<T extends Payload = Payload> = Partial<WithSequenceStorageMeta<T>>\n\nexport const isSequenceStorageMeta = (value: unknown): value is SequenceStorageMeta => {\n return (value as WithSequenceStorageMeta)?._sequence !== undefined\n}\n\nexport const asSequenceStorageMeta = AsObjectFactory.create(isSequenceStorageMeta)\nexport const asOptionalSequenceStorageMeta = AsObjectFactory.createOptional(isSequenceStorageMeta)\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport {\n type Address,\n type Hash, type Hex,\n isAddress,\n toHex,\n} from '@xylabs/hex'\n\nimport type {\n Epoch, LocalSequence, Nonce, QualifiedSequence,\n Sequence,\n} from './Sequence.ts'\nimport {\n isQualifiedSequence, isSequence, SequenceConstants,\n} from './Sequence.ts'\n\nexport class SequenceParser {\n protected static privateConstructorKey = Date.now().toString()\n\n private readonly data: Readonly<Uint8Array>\n\n protected constructor(privateConstructorKey: string, hex: Hex) {\n assertEx(SequenceParser.privateConstructorKey === privateConstructorKey, () => 'Use create function instead of constructor')\n const paddedHex = toHex(hex, {\n prefix: false,\n bitLength: (hex.length <= SequenceConstants.localSequenceBytes * 2)\n ? SequenceConstants.localSequenceBytes * 8\n : SequenceConstants.qualifiedSequenceBytes * 8,\n })\n this.data = toUint8Array(paddedHex)\n }\n\n get address(): Address {\n const start = SequenceConstants.localSequenceBytes\n const end = SequenceConstants.qualifiedSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get epoch(): Epoch {\n const start = 0\n const end = SequenceConstants.epochBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get localSequence(): LocalSequence {\n const start = 0\n const end = SequenceConstants.localSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get nonce(): Nonce {\n const start = SequenceConstants.epochBytes\n const end = SequenceConstants.localSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n get qualifiedSequence(): QualifiedSequence {\n const start = 0\n const end = SequenceConstants.qualifiedSequenceBytes\n return toHex(this.data.slice(start, end).buffer, { prefix: false })\n }\n\n static from(sequence: Sequence, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hash, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hex, address?: Address): SequenceParser\n static from(timestamp: Hex, nonce: Nonce, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hash, index?: number, address?: Address): SequenceParser\n static from(timestamp: Hex, hash: Hex, index?: number, address?: Address): SequenceParser\n static from(timestamp: Hex, nonce: Nonce, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hash, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hex, address?: Address): SequenceParser\n static from(timestamp: number, nonce: Nonce, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hash, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, hash: Hex, index?: number, address?: Address): SequenceParser\n static from(timestamp: number, nonce: Nonce, index?: number, address?: Address): SequenceParser\n static from(\n timestampOrSequence: Sequence | Hex | number,\n nonceOrAddress: Hash | Nonce,\n addressOrIndex?: Address | number,\n addressOnly?: Address,\n ): SequenceParser {\n const address = typeof addressOrIndex === 'number' ? addressOnly : addressOrIndex\n const index = typeof addressOrIndex === 'number' ? addressOrIndex : undefined\n if (isSequence(timestampOrSequence)) {\n if (nonceOrAddress) {\n assertEx(!isQualifiedSequence(timestampOrSequence), () => 'Providing both a qualified sequence and a address is not allowed')\n assertEx(isAddress(nonceOrAddress), () => 'Invalid address provided')\n return new this(SequenceParser.privateConstructorKey, (timestampOrSequence + address) as Hex)\n }\n return new this(SequenceParser.privateConstructorKey, timestampOrSequence)\n }\n const epoch = SequenceParser.toEpoch(timestampOrSequence)\n const nonce = SequenceParser.toNonce(nonceOrAddress, index)\n const addressHex: Hex = address ? toHex(address, { bitLength: SequenceConstants.addressBytes * 8 }) : SequenceConstants.minAddress\n const hexString = (epoch + nonce + addressHex) as Hex\n assertEx(isSequence(hexString), () => `Invalid sequence [${hexString}] [${epoch}, ${nonce}, ${addressHex}]`)\n return new this(SequenceParser.privateConstructorKey, hexString)\n }\n\n static parse(value: Hex | string | ArrayBufferLike): SequenceParser {\n const hex = toHex(value)\n if (isSequence(hex)) {\n return new this(SequenceParser.privateConstructorKey, hex)\n }\n throw new Error(`Invalid sequence [${value}]`)\n }\n\n // can convert a short number/hex to an epoch (treats it as the whole value) or extract an epoch from a sequence\n static toEpoch(value: number | Hex | Epoch): Epoch {\n assertEx(\n typeof value !== 'number' || Number.isInteger(value),\n () => 'Value must be in integer',\n )\n const hex = toHex(value, { prefix: false })\n if (hex.length <= SequenceConstants.epochBytes * 2) {\n return toHex(value, { prefix: false, bitLength: SequenceConstants.epochBytes * 8 }) as Epoch\n }\n if (isSequence(hex)) {\n return hex.slice(0, SequenceConstants.epochBytes * 2) as Epoch\n }\n throw new Error(`Value could not be converted to epoch [${hex}]`)\n }\n\n // can convert a short number/hex to a nonce (treats it as the whole value) or extract an nonce from a sequence\n static toNonce(value: Hash | Hex, index = 0): Nonce {\n assertEx(\n typeof value !== 'number' || Number.isInteger(value),\n () => 'Value must be in integer',\n )\n const hex = toHex(value, { prefix: false })\n if (isSequence(hex)) {\n return hex.slice(SequenceConstants.epochBytes * 2, SequenceConstants.localSequenceBytes * 2) as Nonce\n }\n const hashHex = toHex((hex as string), { prefix: false, bitLength: SequenceConstants.nonceHashBytes * 8 }).slice(-SequenceConstants.nonceHashBytes * 2)\n const indexHex = toHex(index, { prefix: false, bitLength: SequenceConstants.nonceIndexBytes * 8 }).slice(-SequenceConstants.nonceIndexBytes * 2)\n return (indexHex + hashHex).slice(-SequenceConstants.nonceBytes * 2) as Nonce\n }\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { isHex } from '@xylabs/hex'\n\n// we use Exclude to intentionally make the type not equal to string\nexport type LocalSequence = Hex & Exclude<string, 'reserved-local-sequence-value'>\nexport type QualifiedSequence = Hex & Exclude<string, 'reserved-qualified-sequence-value'>\nexport type Sequence = LocalSequence | QualifiedSequence\n\nexport type Epoch = Hex & Exclude<string, 'reserved-epoch-sequence-value'>\n\nexport const isEpoch = (value: unknown): value is Epoch => {\n return isHex(value) && (value as string).length === SequenceConstants.epochBytes * 2\n}\n\nexport type Nonce = Hex & Exclude<string, 'reserved-nonce-sequence-value'>\n\nexport const isNonce = (value: unknown): value is Epoch => {\n return isHex(value) && (value as string).length === SequenceConstants.nonceBytes * 2\n}\n\nexport const isLocalSequence = (value: unknown): value is Sequence => {\n return isHex(value) && (value as string).length === SequenceConstants.localSequenceBytes * 2\n}\n\nexport const isQualifiedSequence = (value: unknown): value is Sequence => {\n return isHex(value) && (value as string).length === SequenceConstants.qualifiedSequenceBytes * 2\n}\n\nexport const isSequence = (value: unknown): value is Sequence => {\n return isLocalSequence(value) || isQualifiedSequence(value)\n}\n\nexport const SequenceNonceComponentLengths = {\n nonceIndexBytes: 4,\n nonceHashBytes: 4,\n}\n\nexport const SequenceComponentLengths = {\n ...SequenceNonceComponentLengths,\n epochBytes: 8,\n nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,\n addressBytes: 20,\n}\n\nexport const SequenceComponentMinMax = {\n minEpoch: '0'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,\n maxEpoch: 'f'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,\n minNonce: '0'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,\n maxNonce: 'f'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,\n minAddress: '0'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,\n maxAddress: 'f'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,\n}\n\nexport const LocalSequenceConstants = {\n ...SequenceComponentLengths,\n ...SequenceComponentMinMax,\n localSequenceBytes: SequenceComponentLengths.epochBytes + SequenceComponentLengths.nonceBytes,\n minLocalSequence: SequenceComponentMinMax.minEpoch + SequenceComponentMinMax.minNonce as LocalSequence,\n maxLocalSequence: SequenceComponentMinMax.maxEpoch + SequenceComponentMinMax.maxNonce as LocalSequence,\n}\n\nexport const QualifiedSequenceConstants = {\n qualifiedSequenceBytes: LocalSequenceConstants.localSequenceBytes + SequenceComponentLengths.addressBytes,\n minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,\n maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress as QualifiedSequence,\n}\n\nexport const SequenceConstants = {\n ...LocalSequenceConstants,\n ...QualifiedSequenceConstants,\n}\n\n// \"11111111111111112222222222222222\" is and example of a local sequence string\n\n// \"111111111111111122222222222222223333333333333333333333333333333333333333\" is and example of a local sequence string\n// epoch = \"1111111111111111\"\n// nonce = \"2222222222222222\"\n// address = \"3333333333333333333333333333333333333333\"\n","import type { Compare } from '@xylabs/object'\n\nimport { SequenceParser } from './Parser.ts'\nimport type { Sequence } from './Sequence.ts'\n\nconst local: Compare<Sequence> = (a, b) => {\n const aa = SequenceParser.from(a)\n const bb = SequenceParser.from(b)\n return aa.localSequence > bb.localSequence ? 1 : aa.localSequence < bb.localSequence ? -1 : 0\n}\n\nconst qualified: Compare<Sequence> = (a, b) => {\n const aa = SequenceParser.from(a)\n const bb = SequenceParser.from(b)\n return aa.qualifiedSequence > bb.qualifiedSequence ? 1 : aa.qualifiedSequence < bb.qualifiedSequence ? -1 : 0\n}\n\nexport const SequenceComparer = { local, qualified }\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport type { Payload } from '../Payload.ts'\nimport { type HashStorageMeta, isHashStorageMeta } from './Hash.ts'\nimport { isSequenceStorageMeta, type SequenceStorageMeta } from './Sequence.ts'\n\nexport interface StorageMeta extends SequenceStorageMeta, HashStorageMeta {}\n\nexport type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta\nexport type WithPartialStorageMeta<T extends Payload = Payload> = T & Partial<StorageMeta>\n\nexport const isStorageMeta = (value: unknown): value is StorageMeta => {\n return isSequenceStorageMeta(value) && isHashStorageMeta(value)\n}\n\nexport const asStorageStorageMeta = AsObjectFactory.create(isStorageMeta)\nexport const asOptionalStorageMeta = AsObjectFactory.createOptional(isStorageMeta)\n"],"mappings":";AAAA,SAAS,iBAAiB,gBAAgB;AAInC,IAAM,eAAe,CAAC,UAAqC;AAChE,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,OAAO,MAAM,WAAW;AAAA,EACjC;AACA,SAAO;AACT;AAEO,IAAM,eAAe,gBAAgB,OAAO,YAAY;AAExD,IAAM,YACT,CAAoB,WACpB,CAAC,UAA+B;AAC9B,MAAI,aAAa,KAAK,GAAG;AACvB,WAAO,OAAO,SAAS,MAAM,MAAM;AAAA,EACrC;AACA,SAAO;AACT;AAEG,IAAM,YAAY,CAAoB,WAAqB,gBAAgB,OAAO,CAAC,UAA+B,UAAU,MAAM,EAAE,KAAK,CAAC;;;ACnB1I,SAAS,sBAAyD,QAAqB;AAC5F,SAAO,CAAC,MAA+B,aAAa,CAAC,KAAK,GAAG,WAAW;AAC1E;AAEO,IAAM,mCAAmC,CAAoC,WAAwB;AAC1G,SAAO,CAAC,MACN,sBAAsC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,UAAa,MAAM,QAAQ,EAAE,QAAQ;AAC5G;AAEO,IAAM,yBAAyB,CAAoC,WAAwB;AAChG,SAAO,CAAC,MAA+B,CAAC,aAAa,CAAC,KAAK,GAAG,WAAW;AAC3E;;;ACRO,IAAM,oBAAoB;AAW1B,IAAM,gBAAgB,sBAAmC,iBAAiB;;;ACjB1E,IAAM,mBAAmB;;;ACChC,SAAS,qBAAqB;AAKvB,IAAM,gBAAgB;AAGtB,IAAM,WAAW,CAAC,UAAoC;AAC3D,SAAO,OAAO,UAAU;AAC1B;AAEO,IAAM,WAAW,cAAc,OAAe,QAAQ;;;ACb7D,SAAoB,cAAc;AAClC,SAAS,mBAAAA,wBAAuB;AAWzB,IAAM,wBAAwB,CAAC,UAAiD;AACrF,SAAO,OAAQ,OAAmC,SAAS;AAC7D;AAEO,IAAM,wBAAwBA,iBAAgB,OAA4B,qBAAqB;AAC/F,IAAM,gCAAgCA,iBAAgB,eAAoC,qBAAqB;;;ACjBtH,SAAoB,UAAAC,eAAc;AAClC,SAAS,mBAAAC,wBAAuB;AAYzB,IAAM,oBAAoB,CAAC,UAA6C;AAC7E,SAAO,sBAAsB,KAAK,KAAKC,QAAQ,OAA+B,KAAK;AACrF;AAEO,IAAM,oBAAoBC,iBAAgB,OAAwB,iBAAiB;AACnF,IAAM,4BAA4BA,iBAAgB,eAAgC,iBAAiB;;;AClB1G,SAAS,mBAAAC,wBAAuB;AAYzB,IAAM,wBAAwB,CAAC,UAAiD;AACrF,SAAQ,OAAmC,cAAc;AAC3D;AAEO,IAAM,wBAAwBA,iBAAgB,OAAO,qBAAqB;AAC1E,IAAM,gCAAgCA,iBAAgB,eAAe,qBAAqB;;;ACjBjG,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB;AAAA,EAGE;AAAA,EACA;AAAA,OACK;;;ACNP,SAAS,aAAa;AASf,IAAM,UAAU,CAAC,UAAmC;AACzD,SAAO,MAAM,KAAK,KAAM,MAAiB,WAAW,kBAAkB,aAAa;AACrF;AAIO,IAAM,UAAU,CAAC,UAAmC;AACzD,SAAO,MAAM,KAAK,KAAM,MAAiB,WAAW,kBAAkB,aAAa;AACrF;AAEO,IAAM,kBAAkB,CAAC,UAAsC;AACpE,SAAO,MAAM,KAAK,KAAM,MAAiB,WAAW,kBAAkB,qBAAqB;AAC7F;AAEO,IAAM,sBAAsB,CAAC,UAAsC;AACxE,SAAO,MAAM,KAAK,KAAM,MAAiB,WAAW,kBAAkB,yBAAyB;AACjG;AAEO,IAAM,aAAa,CAAC,UAAsC;AAC/D,SAAO,gBAAgB,KAAK,KAAK,oBAAoB,KAAK;AAC5D;AAEO,IAAM,gCAAgC;AAAA,EAC3C,iBAAiB;AAAA,EACjB,gBAAgB;AAClB;AAEO,IAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,YAAY;AAAA,EACZ,YAAY,8BAA8B,kBAAkB,8BAA8B;AAAA,EAC1F,cAAc;AAChB;AAEO,IAAM,0BAA0B;AAAA,EACrC,UAAU,IAAI,OAAO,yBAAyB,aAAa,CAAC;AAAA,EAC5D,UAAU,IAAI,OAAO,yBAAyB,aAAa,CAAC;AAAA,EAC5D,UAAU,IAAI,OAAO,yBAAyB,aAAa,CAAC;AAAA,EAC5D,UAAU,IAAI,OAAO,yBAAyB,aAAa,CAAC;AAAA,EAC5D,YAAY,IAAI,OAAO,yBAAyB,eAAe,CAAC;AAAA,EAChE,YAAY,IAAI,OAAO,yBAAyB,eAAe,CAAC;AAClE;AAEO,IAAM,yBAAyB;AAAA,EACpC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,oBAAoB,yBAAyB,aAAa,yBAAyB;AAAA,EACnF,kBAAkB,wBAAwB,WAAW,wBAAwB;AAAA,EAC7E,kBAAkB,wBAAwB,WAAW,wBAAwB;AAC/E;AAEO,IAAM,6BAA6B;AAAA,EACxC,wBAAwB,uBAAuB,qBAAqB,yBAAyB;AAAA,EAC7F,sBAAsB,uBAAuB,mBAAmB,wBAAwB;AAAA,EACxF,sBAAsB,uBAAuB,mBAAmB,wBAAwB;AAC1F;AAEO,IAAM,oBAAoB;AAAA,EAC/B,GAAG;AAAA,EACH,GAAG;AACL;;;ADrDO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EAC1B,OAAiB,wBAAwB,KAAK,IAAI,EAAE,SAAS;AAAA,EAE5C;AAAA,EAEP,YAAY,uBAA+B,KAAU;AAC7D,aAAS,gBAAe,0BAA0B,uBAAuB,MAAM,4CAA4C;AAC3H,UAAM,YAAY,MAAM,KAAK;AAAA,MAC3B,QAAQ;AAAA,MACR,WAAY,IAAI,UAAU,kBAAkB,qBAAqB,IAC7D,kBAAkB,qBAAqB,IACvC,kBAAkB,yBAAyB;AAAA,IACjD,CAAC;AACD,SAAK,OAAO,aAAa,SAAS;AAAA,EACpC;AAAA,EAEA,IAAI,UAAmB;AACrB,UAAM,QAAQ,kBAAkB;AAChC,UAAM,MAAM,kBAAkB;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAEA,IAAI,QAAe;AACjB,UAAM,QAAQ;AACd,UAAM,MAAM,kBAAkB;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAEA,IAAI,gBAA+B;AACjC,UAAM,QAAQ;AACd,UAAM,MAAM,kBAAkB;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAEA,IAAI,QAAe;AACjB,UAAM,QAAQ,kBAAkB;AAChC,UAAM,MAAM,kBAAkB;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAEA,IAAI,oBAAuC;AACzC,UAAM,QAAQ;AACd,UAAM,MAAM,kBAAkB;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAeA,OAAO,KACL,qBACA,gBACA,gBACA,aACgB;AAChB,UAAM,UAAU,OAAO,mBAAmB,WAAW,cAAc;AACnE,UAAM,QAAQ,OAAO,mBAAmB,WAAW,iBAAiB;AACpE,QAAI,WAAW,mBAAmB,GAAG;AACnC,UAAI,gBAAgB;AAClB,iBAAS,CAAC,oBAAoB,mBAAmB,GAAG,MAAM,kEAAkE;AAC5H,iBAAS,UAAU,cAAc,GAAG,MAAM,0BAA0B;AACpE,eAAO,IAAI,KAAK,gBAAe,uBAAwB,sBAAsB,OAAe;AAAA,MAC9F;AACA,aAAO,IAAI,KAAK,gBAAe,uBAAuB,mBAAmB;AAAA,IAC3E;AACA,UAAM,QAAQ,gBAAe,QAAQ,mBAAmB;AACxD,UAAM,QAAQ,gBAAe,QAAQ,gBAAgB,KAAK;AAC1D,UAAM,aAAkB,UAAU,MAAM,SAAS,EAAE,WAAW,kBAAkB,eAAe,EAAE,CAAC,IAAI,kBAAkB;AACxH,UAAM,YAAa,QAAQ,QAAQ;AACnC,aAAS,WAAW,SAAS,GAAG,MAAM,qBAAqB,SAAS,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,GAAG;AAC3G,WAAO,IAAI,KAAK,gBAAe,uBAAuB,SAAS;AAAA,EACjE;AAAA,EAEA,OAAO,MAAM,OAAuD;AAClE,UAAM,MAAM,MAAM,KAAK;AACvB,QAAI,WAAW,GAAG,GAAG;AACnB,aAAO,IAAI,KAAK,gBAAe,uBAAuB,GAAG;AAAA,IAC3D;AACA,UAAM,IAAI,MAAM,qBAAqB,KAAK,GAAG;AAAA,EAC/C;AAAA;AAAA,EAGA,OAAO,QAAQ,OAAoC;AACjD;AAAA,MACE,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK;AAAA,MACnD,MAAM;AAAA,IACR;AACA,UAAM,MAAM,MAAM,OAAO,EAAE,QAAQ,MAAM,CAAC;AAC1C,QAAI,IAAI,UAAU,kBAAkB,aAAa,GAAG;AAClD,aAAO,MAAM,OAAO,EAAE,QAAQ,OAAO,WAAW,kBAAkB,aAAa,EAAE,CAAC;AAAA,IACpF;AACA,QAAI,WAAW,GAAG,GAAG;AACnB,aAAO,IAAI,MAAM,GAAG,kBAAkB,aAAa,CAAC;AAAA,IACtD;AACA,UAAM,IAAI,MAAM,0CAA0C,GAAG,GAAG;AAAA,EAClE;AAAA;AAAA,EAGA,OAAO,QAAQ,OAAmB,QAAQ,GAAU;AAClD;AAAA,MACE,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK;AAAA,MACnD,MAAM;AAAA,IACR;AACA,UAAM,MAAM,MAAM,OAAO,EAAE,QAAQ,MAAM,CAAC;AAC1C,QAAI,WAAW,GAAG,GAAG;AACnB,aAAO,IAAI,MAAM,kBAAkB,aAAa,GAAG,kBAAkB,qBAAqB,CAAC;AAAA,IAC7F;AACA,UAAM,UAAU,MAAO,KAAgB,EAAE,QAAQ,OAAO,WAAW,kBAAkB,iBAAiB,EAAE,CAAC,EAAE,MAAM,CAAC,kBAAkB,iBAAiB,CAAC;AACtJ,UAAM,WAAW,MAAM,OAAO,EAAE,QAAQ,OAAO,WAAW,kBAAkB,kBAAkB,EAAE,CAAC,EAAE,MAAM,CAAC,kBAAkB,kBAAkB,CAAC;AAC/I,YAAQ,WAAW,SAAS,MAAM,CAAC,kBAAkB,aAAa,CAAC;AAAA,EACrE;AACF;;;AErIA,IAAM,QAA2B,CAAC,GAAG,MAAM;AACzC,QAAM,KAAK,eAAe,KAAK,CAAC;AAChC,QAAM,KAAK,eAAe,KAAK,CAAC;AAChC,SAAO,GAAG,gBAAgB,GAAG,gBAAgB,IAAI,GAAG,gBAAgB,GAAG,gBAAgB,KAAK;AAC9F;AAEA,IAAM,YAA+B,CAAC,GAAG,MAAM;AAC7C,QAAM,KAAK,eAAe,KAAK,CAAC;AAChC,QAAM,KAAK,eAAe,KAAK,CAAC;AAChC,SAAO,GAAG,oBAAoB,GAAG,oBAAoB,IAAI,GAAG,oBAAoB,GAAG,oBAAoB,KAAK;AAC9G;AAEO,IAAM,mBAAmB,EAAE,OAAO,UAAU;;;ACjBnD,SAAS,mBAAAC,wBAAuB;AAWzB,IAAM,gBAAgB,CAAC,UAAyC;AACrE,SAAO,sBAAsB,KAAK,KAAK,kBAAkB,KAAK;AAChE;AAEO,IAAM,uBAAuBC,iBAAgB,OAAO,aAAa;AACjE,IAAM,wBAAwBA,iBAAgB,eAAe,aAAa;","names":["AsObjectFactory","isHash","AsObjectFactory","isHash","AsObjectFactory","AsObjectFactory","AsObjectFactory","AsObjectFactory"]}
|
package/dist/node/isPayload.d.ts
CHANGED
|
@@ -3,16 +3,16 @@ export declare const isAnyPayload: (value: unknown) => value is Payload;
|
|
|
3
3
|
export declare const asAnyPayload: {
|
|
4
4
|
<TType extends import("@xylabs/object").DeepRestrictToStringKeys<{
|
|
5
5
|
schema: import("./Schema.ts").Schema;
|
|
6
|
-
}>>(value: import(".store/@xylabs-promise-npm-4.
|
|
6
|
+
}>>(value: import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").AnyNonPromise, config?: import("@xylabs/object").TypeCheckConfig): TType | undefined;
|
|
7
7
|
<TType extends import("@xylabs/object").DeepRestrictToStringKeys<{
|
|
8
8
|
schema: import("./Schema.ts").Schema;
|
|
9
|
-
}>>(value: import(".store/@xylabs-promise-npm-4.
|
|
9
|
+
}>>(value: import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").AnyNonPromise, assert: import("@xylabs/object").StringOrAlertFunction<import("@xylabs/object").DeepRestrictToStringKeys<{
|
|
10
10
|
schema: import("./Schema.ts").Schema;
|
|
11
11
|
}>>, config?: import("@xylabs/object").TypeCheckConfig): TType;
|
|
12
12
|
};
|
|
13
13
|
export declare const isPayload: <T extends Payload>(schema: string[]) => (value: unknown) => value is T;
|
|
14
14
|
export declare const asPayload: <T extends Payload>(schema: string[]) => {
|
|
15
|
-
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.
|
|
16
|
-
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.
|
|
15
|
+
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").AnyNonPromise, config?: import("@xylabs/object").TypeCheckConfig): TType | undefined;
|
|
16
|
+
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.5.1-97d36b712b/package").AnyNonPromise, assert: import("@xylabs/object").StringOrAlertFunction<T>, config?: import("@xylabs/object").TypeCheckConfig): TType;
|
|
17
17
|
};
|
|
18
18
|
//# sourceMappingURL=isPayload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isPayload.d.ts","sourceRoot":"","sources":["../../src/isPayload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,KAAK,IAAI,OAKtD,CAAA;AAED,eAAO,MAAM,YAAY;;;sBAHrB,
|
|
1
|
+
{"version":3,"file":"isPayload.d.ts","sourceRoot":"","sources":["../../src/isPayload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,KAAK,IAAI,OAKtD,CAAA;AAED,eAAO,MAAM,YAAY;;;sBAHrB,qDAGD,iCAAiC,gBAAoB;;;sBAIpD,qDAAc;;yBAEyB,gBAEjC;CARsD,CAAA;AAEhE,eAAO,MAAM,SAAS,GACjB,CAAC,SAAS,OAAO,UAAU,MAAM,EAAE,aAC5B,OAAO,KAAG,KAAK,IAAI,CAK1B,CAAA;AAEL,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,OAAO,UAAU,MAAM,EAAE;oCAdzD,qDAGD,iCAAiC,gBAAoB;oCAIpD,qDAAc,4FAEyB,gBAEjC;CAGwI,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/payload-model",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.10",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -37,17 +37,17 @@
|
|
|
37
37
|
"module": "dist/neutral/index.mjs",
|
|
38
38
|
"types": "dist/neutral/index.d.ts",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@xylabs/arraybuffer": "^4.
|
|
41
|
-
"@xylabs/assert": "^4.
|
|
42
|
-
"@xylabs/hex": "^4.
|
|
43
|
-
"@xylabs/object": "^4.
|
|
40
|
+
"@xylabs/arraybuffer": "^4.5.1",
|
|
41
|
+
"@xylabs/assert": "^4.5.1",
|
|
42
|
+
"@xylabs/hex": "^4.5.1",
|
|
43
|
+
"@xylabs/object": "^4.5.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
47
47
|
"@xylabs/tsconfig": "^4.2.6",
|
|
48
|
-
"@xylabs/vitest-extended": "^4.
|
|
49
|
-
"typescript": "^5.7.
|
|
50
|
-
"vitest": "^
|
|
48
|
+
"@xylabs/vitest-extended": "^4.5.1",
|
|
49
|
+
"typescript": "^5.7.3",
|
|
50
|
+
"vitest": "^3.0.4"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
package/src/Error.ts
CHANGED
|
@@ -4,8 +4,8 @@ import type { JsonValue } from '@xylabs/object'
|
|
|
4
4
|
import { isPayloadOfSchemaType } from './isPayloadOfSchemaType.ts'
|
|
5
5
|
import type { Payload } from './Payload.ts'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
export
|
|
7
|
+
export const ModuleErrorSchema = 'network.xyo.error.module' as const
|
|
8
|
+
export type ModuleErrorSchema = typeof ModuleErrorSchema
|
|
9
9
|
|
|
10
10
|
export type ModuleError = Payload<{
|
|
11
11
|
details?: JsonValue
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export const PayloadSetSchema = 'network.xyo.payload.set' as const
|
|
2
|
+
export type PayloadSetSchema = typeof PayloadSetSchema
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Hash, isHash } from '@xylabs/hex'
|
|
2
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
3
|
+
|
|
4
|
+
import type { Payload } from '../Payload.ts'
|
|
5
|
+
|
|
6
|
+
export interface DataHashStorageMeta {
|
|
7
|
+
_dataHash: Hash
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type WithDataHashStorageMeta<T extends Payload = Payload> = T & DataHashStorageMeta
|
|
11
|
+
export type WithPartialDataHashStorageMeta<T extends Payload = Payload> = Partial<WithDataHashStorageMeta<T>>
|
|
12
|
+
|
|
13
|
+
export const isDataHashStorageMeta = (value: unknown): value is DataHashStorageMeta => {
|
|
14
|
+
return isHash((value as WithDataHashStorageMeta)?._dataHash)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const asDataHashStorageMeta = AsObjectFactory.create<DataHashStorageMeta>(isDataHashStorageMeta)
|
|
18
|
+
export const asOptionalDataHashStorageMeta = AsObjectFactory.createOptional<DataHashStorageMeta>(isDataHashStorageMeta)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Hash, isHash } from '@xylabs/hex'
|
|
2
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
3
|
+
|
|
4
|
+
import type { Payload } from '../Payload.ts'
|
|
5
|
+
import { type DataHashStorageMeta, isDataHashStorageMeta } from './DataHash.ts'
|
|
6
|
+
|
|
7
|
+
export interface HashStorageMeta extends DataHashStorageMeta {
|
|
8
|
+
_hash: Hash
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type WithHashStorageMeta<T extends Payload = Payload> = T & HashStorageMeta
|
|
12
|
+
export type WithPartialHashStorageMeta<T extends Payload = Payload> = Partial<WithHashStorageMeta<T>>
|
|
13
|
+
|
|
14
|
+
export const isHashStorageMeta = (value: unknown): value is HashStorageMeta => {
|
|
15
|
+
return isDataHashStorageMeta(value) && isHash((value as WithHashStorageMeta)?._hash)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const asHashStorageMeta = AsObjectFactory.create<HashStorageMeta>(isHashStorageMeta)
|
|
19
|
+
export const asOptionalHashStorageMeta = AsObjectFactory.createOptional<HashStorageMeta>(isHashStorageMeta)
|
|
@@ -1,78 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { isHex } from '@xylabs/hex'
|
|
1
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type QualifiedSequence = Hex & Exclude<string, 'reserved-qualified-sequence-value'>
|
|
7
|
-
export type Sequence = LocalSequence | QualifiedSequence
|
|
3
|
+
import type { Payload } from '../Payload.ts'
|
|
4
|
+
import type { Sequence } from './sequence/index.ts'
|
|
8
5
|
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
export const isEpoch = (value: unknown): value is Epoch => {
|
|
12
|
-
return isHex(value) && (value as string).length === SequenceConstants.epochBytes * 2
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export type Nonce = Hex & Exclude<string, 'reserved-nonce-sequence-value'>
|
|
16
|
-
|
|
17
|
-
export const isNonce = (value: unknown): value is Epoch => {
|
|
18
|
-
return isHex(value) && (value as string).length === SequenceConstants.nonceBytes * 2
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const isLocalSequence = (value: unknown): value is Sequence => {
|
|
22
|
-
return isHex(value) && (value as string).length === SequenceConstants.localSequenceBytes * 2
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const isQualifiedSequence = (value: unknown): value is Sequence => {
|
|
26
|
-
return isHex(value) && (value as string).length === SequenceConstants.qualifiedSequenceBytes * 2
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const isSequence = (value: unknown): value is Sequence => {
|
|
30
|
-
return isLocalSequence(value) || isQualifiedSequence(value)
|
|
6
|
+
export interface SequenceStorageMeta {
|
|
7
|
+
_sequence: Sequence
|
|
31
8
|
}
|
|
32
9
|
|
|
33
|
-
export
|
|
34
|
-
|
|
35
|
-
nonceHashBytes: 4,
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const SequenceComponentLengths = {
|
|
39
|
-
...SequenceNonceComponentLengths,
|
|
40
|
-
epochBytes: 8,
|
|
41
|
-
nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,
|
|
42
|
-
addressBytes: 20,
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export const SequenceComponentMinMax = {
|
|
46
|
-
minEpoch: '0'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,
|
|
47
|
-
maxEpoch: 'f'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,
|
|
48
|
-
minNonce: '0'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,
|
|
49
|
-
maxNonce: 'f'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,
|
|
50
|
-
minAddress: '0'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,
|
|
51
|
-
maxAddress: 'f'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,
|
|
52
|
-
}
|
|
10
|
+
export type WithSequenceStorageMeta<T extends Payload = Payload> = T & SequenceStorageMeta
|
|
11
|
+
export type WithPartialSequenceStorageMeta<T extends Payload = Payload> = Partial<WithSequenceStorageMeta<T>>
|
|
53
12
|
|
|
54
|
-
export const
|
|
55
|
-
|
|
56
|
-
...SequenceComponentMinMax,
|
|
57
|
-
localSequenceBytes: SequenceComponentLengths.epochBytes + SequenceComponentLengths.nonceBytes,
|
|
58
|
-
minLocalSequence: SequenceComponentMinMax.minEpoch + SequenceComponentMinMax.minNonce as LocalSequence,
|
|
59
|
-
maxLocalSequence: SequenceComponentMinMax.maxEpoch + SequenceComponentMinMax.maxNonce as LocalSequence,
|
|
13
|
+
export const isSequenceStorageMeta = (value: unknown): value is SequenceStorageMeta => {
|
|
14
|
+
return (value as WithSequenceStorageMeta)?._sequence !== undefined
|
|
60
15
|
}
|
|
61
16
|
|
|
62
|
-
export const
|
|
63
|
-
|
|
64
|
-
minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,
|
|
65
|
-
maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress as QualifiedSequence,
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const SequenceConstants = {
|
|
69
|
-
...LocalSequenceConstants,
|
|
70
|
-
...QualifiedSequenceConstants,
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// "11111111111111112222222222222222" is and example of a local sequence string
|
|
74
|
-
|
|
75
|
-
// "111111111111111122222222222222223333333333333333333333333333333333333333" is and example of a local sequence string
|
|
76
|
-
// epoch = "1111111111111111"
|
|
77
|
-
// nonce = "2222222222222222"
|
|
78
|
-
// address = "3333333333333333333333333333333333333333"
|
|
17
|
+
export const asSequenceStorageMeta = AsObjectFactory.create(isSequenceStorageMeta)
|
|
18
|
+
export const asOptionalSequenceStorageMeta = AsObjectFactory.createOptional(isSequenceStorageMeta)
|
|
@@ -1,49 +1,17 @@
|
|
|
1
|
-
import { type Hash, isHash } from '@xylabs/hex'
|
|
2
1
|
import { AsObjectFactory } from '@xylabs/object'
|
|
3
2
|
|
|
4
3
|
import type { Payload } from '../Payload.ts'
|
|
5
|
-
import type
|
|
4
|
+
import { type HashStorageMeta, isHashStorageMeta } from './Hash.ts'
|
|
5
|
+
import { isSequenceStorageMeta, type SequenceStorageMeta } from './Sequence.ts'
|
|
6
6
|
|
|
7
|
-
export interface
|
|
8
|
-
_sequence: Sequence
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type WithPartialSequenceMeta<T extends Payload = Payload> = Partial<WithSequenceMeta<T>>
|
|
12
|
-
|
|
13
|
-
export type WithSequenceMeta<T extends Payload = Payload> = T & SequenceMeta
|
|
14
|
-
|
|
15
|
-
export interface HashMeta {
|
|
16
|
-
_dataHash: Hash
|
|
17
|
-
_hash: Hash
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type WithPartialHashMeta<T extends Payload = Payload> = Partial<WithHashMeta<T>>
|
|
21
|
-
|
|
22
|
-
export type WithHashMeta<T extends Payload = Payload> = T & HashMeta
|
|
23
|
-
|
|
24
|
-
export interface StorageMeta extends SequenceMeta, HashMeta {}
|
|
25
|
-
|
|
26
|
-
export type WithPartialStorageMeta<T extends Payload = Payload> = Partial<WithStorageMeta<T>>
|
|
7
|
+
export interface StorageMeta extends SequenceStorageMeta, HashStorageMeta {}
|
|
27
8
|
|
|
28
9
|
export type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta
|
|
29
|
-
|
|
30
|
-
export const isSequenceMeta = (value: unknown): value is SequenceMeta => {
|
|
31
|
-
return (value as WithSequenceMeta)?._sequence !== undefined
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export const isHashMeta = (value: unknown): value is HashMeta => {
|
|
35
|
-
return isHash((value as WithHashMeta)?._hash) && isHash((value as WithHashMeta)?._dataHash)
|
|
36
|
-
}
|
|
10
|
+
export type WithPartialStorageMeta<T extends Payload = Payload> = T & Partial<StorageMeta>
|
|
37
11
|
|
|
38
12
|
export const isStorageMeta = (value: unknown): value is StorageMeta => {
|
|
39
|
-
return
|
|
13
|
+
return isSequenceStorageMeta(value) && isHashStorageMeta(value)
|
|
40
14
|
}
|
|
41
|
-
export const asStorageMeta = AsObjectFactory.create(isStorageMeta)
|
|
42
|
-
export const asOptionalStorageMeta = AsObjectFactory.createOptional(isStorageMeta)
|
|
43
15
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// "00005a7f354762f3ac1bc5ddc6cfd08d14a123456789abcdef0123" is and example of a local sequence string
|
|
47
|
-
// epoch = "00005a7f354762f3ac"
|
|
48
|
-
// nonce = "1bc5ddc6cfd08d14"
|
|
49
|
-
// address = "a123456789abcdef0123"
|
|
16
|
+
export const asStorageStorageMeta = AsObjectFactory.create(isStorageMeta)
|
|
17
|
+
export const asOptionalStorageMeta = AsObjectFactory.createOptional(isStorageMeta)
|
package/src/StorageMeta/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Compare } from '@xylabs/object'
|
|
2
2
|
|
|
3
|
+
import { SequenceParser } from './Parser.ts'
|
|
3
4
|
import type { Sequence } from './Sequence.ts'
|
|
4
|
-
import { SequenceParser } from './SequenceParser.ts'
|
|
5
5
|
|
|
6
6
|
const local: Compare<Sequence> = (a, b) => {
|
|
7
7
|
const aa = SequenceParser.from(a)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Address, Hex } from '@xylabs/hex'
|
|
2
|
+
import { isHex } from '@xylabs/hex'
|
|
3
|
+
|
|
4
|
+
// we use Exclude to intentionally make the type not equal to string
|
|
5
|
+
export type LocalSequence = Hex & Exclude<string, 'reserved-local-sequence-value'>
|
|
6
|
+
export type QualifiedSequence = Hex & Exclude<string, 'reserved-qualified-sequence-value'>
|
|
7
|
+
export type Sequence = LocalSequence | QualifiedSequence
|
|
8
|
+
|
|
9
|
+
export type Epoch = Hex & Exclude<string, 'reserved-epoch-sequence-value'>
|
|
10
|
+
|
|
11
|
+
export const isEpoch = (value: unknown): value is Epoch => {
|
|
12
|
+
return isHex(value) && (value as string).length === SequenceConstants.epochBytes * 2
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type Nonce = Hex & Exclude<string, 'reserved-nonce-sequence-value'>
|
|
16
|
+
|
|
17
|
+
export const isNonce = (value: unknown): value is Epoch => {
|
|
18
|
+
return isHex(value) && (value as string).length === SequenceConstants.nonceBytes * 2
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const isLocalSequence = (value: unknown): value is Sequence => {
|
|
22
|
+
return isHex(value) && (value as string).length === SequenceConstants.localSequenceBytes * 2
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const isQualifiedSequence = (value: unknown): value is Sequence => {
|
|
26
|
+
return isHex(value) && (value as string).length === SequenceConstants.qualifiedSequenceBytes * 2
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const isSequence = (value: unknown): value is Sequence => {
|
|
30
|
+
return isLocalSequence(value) || isQualifiedSequence(value)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const SequenceNonceComponentLengths = {
|
|
34
|
+
nonceIndexBytes: 4,
|
|
35
|
+
nonceHashBytes: 4,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const SequenceComponentLengths = {
|
|
39
|
+
...SequenceNonceComponentLengths,
|
|
40
|
+
epochBytes: 8,
|
|
41
|
+
nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,
|
|
42
|
+
addressBytes: 20,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const SequenceComponentMinMax = {
|
|
46
|
+
minEpoch: '0'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,
|
|
47
|
+
maxEpoch: 'f'.repeat(SequenceComponentLengths.epochBytes * 2) as Epoch,
|
|
48
|
+
minNonce: '0'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,
|
|
49
|
+
maxNonce: 'f'.repeat(SequenceComponentLengths.nonceBytes * 2) as Nonce,
|
|
50
|
+
minAddress: '0'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,
|
|
51
|
+
maxAddress: 'f'.repeat(SequenceComponentLengths.addressBytes * 2) as Address,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const LocalSequenceConstants = {
|
|
55
|
+
...SequenceComponentLengths,
|
|
56
|
+
...SequenceComponentMinMax,
|
|
57
|
+
localSequenceBytes: SequenceComponentLengths.epochBytes + SequenceComponentLengths.nonceBytes,
|
|
58
|
+
minLocalSequence: SequenceComponentMinMax.minEpoch + SequenceComponentMinMax.minNonce as LocalSequence,
|
|
59
|
+
maxLocalSequence: SequenceComponentMinMax.maxEpoch + SequenceComponentMinMax.maxNonce as LocalSequence,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const QualifiedSequenceConstants = {
|
|
63
|
+
qualifiedSequenceBytes: LocalSequenceConstants.localSequenceBytes + SequenceComponentLengths.addressBytes,
|
|
64
|
+
minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,
|
|
65
|
+
maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress as QualifiedSequence,
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const SequenceConstants = {
|
|
69
|
+
...LocalSequenceConstants,
|
|
70
|
+
...QualifiedSequenceConstants,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// "11111111111111112222222222222222" is and example of a local sequence string
|
|
74
|
+
|
|
75
|
+
// "111111111111111122222222222222223333333333333333333333333333333333333333" is and example of a local sequence string
|
|
76
|
+
// epoch = "1111111111111111"
|
|
77
|
+
// nonce = "2222222222222222"
|
|
78
|
+
// address = "3333333333333333333333333333333333333333"
|
package/src/index.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceComparer.d.ts","sourceRoot":"","sources":["../../../src/StorageMeta/SequenceComparer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAiB7C,eAAO,MAAM,gBAAgB;;;CAAuB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceParser.d.ts","sourceRoot":"","sources":["../../../src/StorageMeta/SequenceParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceComparer.d.ts","sourceRoot":"","sources":["../../../src/StorageMeta/SequenceComparer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAiB7C,eAAO,MAAM,gBAAgB;;;CAAuB,CAAA"}
|