@xyo-network/payload-model 3.6.0-rc.8 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Error.d.ts +0 -2
- package/dist/browser/Error.d.ts.map +1 -1
- package/dist/browser/Payload.d.ts +2 -1
- package/dist/browser/Payload.d.ts.map +1 -1
- package/dist/browser/PayloadFindFilter.d.ts +0 -2
- package/dist/browser/PayloadFindFilter.d.ts.map +1 -1
- package/dist/browser/Schema.d.ts +2 -2
- package/dist/browser/StorageMeta/Sequence.d.ts +16 -4
- package/dist/browser/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/browser/StorageMeta/SequenceComparer.d.ts +6 -0
- package/dist/browser/StorageMeta/SequenceComparer.d.ts.map +1 -0
- package/dist/browser/StorageMeta/SequenceParser.d.ts +7 -1
- package/dist/browser/StorageMeta/SequenceParser.d.ts.map +1 -1
- package/dist/browser/StorageMeta/StorageMeta.d.ts +5 -0
- package/dist/browser/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/browser/StorageMeta/index.d.ts +1 -0
- package/dist/browser/StorageMeta/index.d.ts.map +1 -1
- package/dist/browser/index.mjs +36 -8
- 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 +0 -2
- package/dist/neutral/Error.d.ts.map +1 -1
- package/dist/neutral/Payload.d.ts +2 -1
- package/dist/neutral/Payload.d.ts.map +1 -1
- package/dist/neutral/PayloadFindFilter.d.ts +0 -2
- package/dist/neutral/PayloadFindFilter.d.ts.map +1 -1
- package/dist/neutral/Schema.d.ts +2 -2
- package/dist/neutral/StorageMeta/Sequence.d.ts +16 -4
- package/dist/neutral/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/SequenceComparer.d.ts +6 -0
- package/dist/neutral/StorageMeta/SequenceComparer.d.ts.map +1 -0
- package/dist/neutral/StorageMeta/SequenceParser.d.ts +7 -1
- package/dist/neutral/StorageMeta/SequenceParser.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/StorageMeta.d.ts +5 -0
- package/dist/neutral/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/neutral/StorageMeta/index.d.ts +1 -0
- package/dist/neutral/StorageMeta/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +36 -8
- 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 +0 -2
- package/dist/node/Error.d.ts.map +1 -1
- package/dist/node/Payload.d.ts +2 -1
- package/dist/node/Payload.d.ts.map +1 -1
- package/dist/node/PayloadFindFilter.d.ts +0 -2
- package/dist/node/PayloadFindFilter.d.ts.map +1 -1
- package/dist/node/Schema.d.ts +2 -2
- package/dist/node/StorageMeta/Sequence.d.ts +16 -4
- package/dist/node/StorageMeta/Sequence.d.ts.map +1 -1
- package/dist/node/StorageMeta/SequenceComparer.d.ts +6 -0
- package/dist/node/StorageMeta/SequenceComparer.d.ts.map +1 -0
- package/dist/node/StorageMeta/SequenceParser.d.ts +7 -1
- package/dist/node/StorageMeta/SequenceParser.d.ts.map +1 -1
- package/dist/node/StorageMeta/StorageMeta.d.ts +5 -0
- package/dist/node/StorageMeta/StorageMeta.d.ts.map +1 -1
- package/dist/node/StorageMeta/index.d.ts +1 -0
- package/dist/node/StorageMeta/index.d.ts.map +1 -1
- package/dist/node/index.mjs +36 -8
- 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 +9 -10
- package/src/Error.ts +0 -1
- package/src/Payload.ts +3 -1
- package/src/PayloadFindFilter.ts +0 -3
- package/src/StorageMeta/Sequence.ts +9 -3
- package/src/StorageMeta/SequenceComparer.ts +18 -0
- package/src/StorageMeta/SequenceParser.ts +19 -5
- package/src/StorageMeta/StorageMeta.ts +3 -0
- package/src/StorageMeta/index.ts +1 -0
package/dist/node/index.mjs
CHANGED
|
@@ -58,9 +58,14 @@ var isQualifiedSequence = (value) => {
|
|
|
58
58
|
var isSequence = (value) => {
|
|
59
59
|
return isLocalSequence(value) || isQualifiedSequence(value);
|
|
60
60
|
};
|
|
61
|
+
var SequenceNonceComponentLengths = {
|
|
62
|
+
nonceIndexBytes: 4,
|
|
63
|
+
nonceHashBytes: 4
|
|
64
|
+
};
|
|
61
65
|
var SequenceComponentLengths = {
|
|
66
|
+
...SequenceNonceComponentLengths,
|
|
62
67
|
epochBytes: 8,
|
|
63
|
-
nonceBytes:
|
|
68
|
+
nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,
|
|
64
69
|
addressBytes: 20
|
|
65
70
|
};
|
|
66
71
|
var SequenceComponentMinMax = {
|
|
@@ -80,8 +85,8 @@ var LocalSequenceConstants = {
|
|
|
80
85
|
};
|
|
81
86
|
var QualifiedSequenceConstants = {
|
|
82
87
|
qualifiedSequenceBytes: LocalSequenceConstants.localSequenceBytes + SequenceComponentLengths.addressBytes,
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress,
|
|
89
|
+
maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress
|
|
85
90
|
};
|
|
86
91
|
var SequenceConstants = {
|
|
87
92
|
...LocalSequenceConstants,
|
|
@@ -131,7 +136,9 @@ var SequenceParser = class _SequenceParser {
|
|
|
131
136
|
const end = SequenceConstants.qualifiedSequenceBytes;
|
|
132
137
|
return toHex(this.data.slice(start, end).buffer, { prefix: false });
|
|
133
138
|
}
|
|
134
|
-
static from(timestampOrSequence, nonceOrAddress,
|
|
139
|
+
static from(timestampOrSequence, nonceOrAddress, addressOrIndex, addressOnly) {
|
|
140
|
+
const address = typeof addressOrIndex === "number" ? addressOnly : addressOrIndex;
|
|
141
|
+
const index = typeof addressOrIndex === "number" ? addressOrIndex : void 0;
|
|
135
142
|
if (isSequence(timestampOrSequence)) {
|
|
136
143
|
if (nonceOrAddress) {
|
|
137
144
|
assertEx(!isQualifiedSequence(timestampOrSequence), () => "Providing both a qualified sequence and a address is not allowed");
|
|
@@ -141,7 +148,7 @@ var SequenceParser = class _SequenceParser {
|
|
|
141
148
|
return new this(_SequenceParser.privateConstructorKey, timestampOrSequence);
|
|
142
149
|
}
|
|
143
150
|
const epoch = _SequenceParser.toEpoch(timestampOrSequence);
|
|
144
|
-
const nonce = _SequenceParser.toNonce(nonceOrAddress);
|
|
151
|
+
const nonce = _SequenceParser.toNonce(nonceOrAddress, index);
|
|
145
152
|
const addressHex = address ? toHex(address, { bitLength: SequenceConstants.addressBytes * 8 }) : SequenceConstants.minAddress;
|
|
146
153
|
const hexString = epoch + nonce + addressHex;
|
|
147
154
|
assertEx(isSequence(hexString), () => `Invalid sequence [${hexString}] [${epoch}, ${nonce}, ${addressHex}]`);
|
|
@@ -170,7 +177,7 @@ var SequenceParser = class _SequenceParser {
|
|
|
170
177
|
throw new Error(`Value could not be converted to epoch [${hex}]`);
|
|
171
178
|
}
|
|
172
179
|
// can convert a short number/hex to a nonce (treats it as the whole value) or extract an nonce from a sequence
|
|
173
|
-
static toNonce(value) {
|
|
180
|
+
static toNonce(value, index = 0) {
|
|
174
181
|
assertEx(
|
|
175
182
|
typeof value !== "number" || Number.isInteger(value),
|
|
176
183
|
() => "Value must be in integer"
|
|
@@ -179,13 +186,28 @@ var SequenceParser = class _SequenceParser {
|
|
|
179
186
|
if (isSequence(hex)) {
|
|
180
187
|
return hex.slice(SequenceConstants.epochBytes * 2, SequenceConstants.localSequenceBytes * 2);
|
|
181
188
|
}
|
|
182
|
-
const
|
|
183
|
-
|
|
189
|
+
const hashHex = toHex(hex, { prefix: false, bitLength: SequenceConstants.nonceHashBytes * 8 }).slice(-SequenceConstants.nonceHashBytes * 2);
|
|
190
|
+
const indexHex = toHex(index, { prefix: false, bitLength: SequenceConstants.nonceIndexBytes * 8 }).slice(-SequenceConstants.nonceIndexBytes * 2);
|
|
191
|
+
return (indexHex + hashHex).slice(-SequenceConstants.nonceBytes * 2);
|
|
184
192
|
}
|
|
185
193
|
};
|
|
186
194
|
|
|
195
|
+
// src/StorageMeta/SequenceComparer.ts
|
|
196
|
+
var local = (a, b) => {
|
|
197
|
+
const aa = SequenceParser.from(a);
|
|
198
|
+
const bb = SequenceParser.from(b);
|
|
199
|
+
return aa.localSequence > bb.localSequence ? 1 : aa.localSequence < bb.localSequence ? -1 : 0;
|
|
200
|
+
};
|
|
201
|
+
var qualified = (a, b) => {
|
|
202
|
+
const aa = SequenceParser.from(a);
|
|
203
|
+
const bb = SequenceParser.from(b);
|
|
204
|
+
return aa.qualifiedSequence > bb.qualifiedSequence ? 1 : aa.qualifiedSequence < bb.qualifiedSequence ? -1 : 0;
|
|
205
|
+
};
|
|
206
|
+
var SequenceComparer = { local, qualified };
|
|
207
|
+
|
|
187
208
|
// src/StorageMeta/StorageMeta.ts
|
|
188
209
|
import { isHash } from "@xylabs/hex";
|
|
210
|
+
import { AsObjectFactory as AsObjectFactory2 } from "@xylabs/object";
|
|
189
211
|
var isSequenceMeta = (value) => {
|
|
190
212
|
return value?._sequence !== void 0;
|
|
191
213
|
};
|
|
@@ -195,19 +217,25 @@ var isHashMeta = (value) => {
|
|
|
195
217
|
var isStorageMeta = (value) => {
|
|
196
218
|
return isSequenceMeta(value) && isHashMeta(value);
|
|
197
219
|
};
|
|
220
|
+
var asStorageMeta = AsObjectFactory2.create(isStorageMeta);
|
|
221
|
+
var asOptionalStorageMeta = AsObjectFactory2.createOptional(isStorageMeta);
|
|
198
222
|
export {
|
|
199
223
|
LocalSequenceConstants,
|
|
200
224
|
ModuleErrorSchema,
|
|
201
225
|
PayloadSchema,
|
|
202
226
|
PayloadSetSchema,
|
|
203
227
|
QualifiedSequenceConstants,
|
|
228
|
+
SequenceComparer,
|
|
204
229
|
SequenceComponentLengths,
|
|
205
230
|
SequenceComponentMinMax,
|
|
206
231
|
SequenceConstants,
|
|
232
|
+
SequenceNonceComponentLengths,
|
|
207
233
|
SequenceParser,
|
|
208
234
|
asAnyPayload,
|
|
235
|
+
asOptionalStorageMeta,
|
|
209
236
|
asPayload,
|
|
210
237
|
asSchema,
|
|
238
|
+
asStorageMeta,
|
|
211
239
|
isAnyPayload,
|
|
212
240
|
isEpoch,
|
|
213
241
|
isHashMeta,
|
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/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 const isPayloadOfSchemaType = <T extends Payload>(schema: string) => {\n return (x?: unknown | null): x is T => isAnyPayload(x) && x?.schema === schema\n}\n\nexport const isPayloadOfSchemaTypeWithSources = <T extends Payload>(schema: string) => {\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>(schema: string) => {\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(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 sources?: Hash[]\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 SequenceComponentLengths = {\n epochBytes: 8,\n nonceBytes: 8,\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 minLocalSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,\n maxLocalSequence: 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: 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(timestampOrSequence: Sequence | Hex | number, nonceOrAddress: Hash | Nonce, address?: Address): SequenceParser {\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)\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): 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 hash = toHex((hex as string), { prefix: false, bitLength: SequenceConstants.nonceBytes * 8 })\n return hash.slice(-SequenceConstants.nonceBytes * 2) as Nonce\n }\n}\n","import { type Hash, isHash } from '@xylabs/hex'\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}\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":[]}
|
|
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 const isPayloadOfSchemaType = <T extends Payload>(schema: string) => {\n return (x?: unknown | null): x is T => isAnyPayload(x) && x?.schema === schema\n}\n\nexport const isPayloadOfSchemaTypeWithSources = <T extends Payload>(schema: string) => {\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>(schema: string) => {\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(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"]}
|
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.4.
|
|
6
|
+
}>>(value: import(".store/@xylabs-promise-npm-4.4.26-eff161fa33/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.4.
|
|
9
|
+
}>>(value: import(".store/@xylabs-promise-npm-4.4.26-eff161fa33/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.4.
|
|
16
|
-
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.4.
|
|
15
|
+
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.4.26-eff161fa33/package").AnyNonPromise, config?: import("@xylabs/object").TypeCheckConfig): TType | undefined;
|
|
16
|
+
<TType extends T>(value: import(".store/@xylabs-promise-npm-4.4.26-eff161fa33/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;;;
|
|
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,sDAGD,iCAAiC,gBAAoB;;;sBAIpD,sDAAc;;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,sDAGD,iCAAiC,gBAAoB;oCAIpD,sDAAc,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.0
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -37,20 +37,19 @@
|
|
|
37
37
|
"module": "dist/neutral/index.mjs",
|
|
38
38
|
"types": "dist/neutral/index.d.ts",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@xylabs/arraybuffer": "^4.4.
|
|
41
|
-
"@xylabs/assert": "^4.4.
|
|
42
|
-
"@xylabs/hex": "^4.4.
|
|
43
|
-
"@xylabs/object": "^4.4.
|
|
40
|
+
"@xylabs/arraybuffer": "^4.4.26",
|
|
41
|
+
"@xylabs/assert": "^4.4.26",
|
|
42
|
+
"@xylabs/hex": "^4.4.26",
|
|
43
|
+
"@xylabs/object": "^4.4.26"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@xylabs/ts-scripts-yarn3": "^4.2.
|
|
47
|
-
"@xylabs/tsconfig": "^4.2.
|
|
48
|
-
"@xylabs/vitest-extended": "^4.4.
|
|
46
|
+
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
47
|
+
"@xylabs/tsconfig": "^4.2.6",
|
|
48
|
+
"@xylabs/vitest-extended": "^4.4.26",
|
|
49
49
|
"typescript": "^5.7.2",
|
|
50
50
|
"vitest": "^2.1.8"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
|
-
}
|
|
55
|
-
"stableVersion": "3.5.2"
|
|
54
|
+
}
|
|
56
55
|
}
|
package/src/Error.ts
CHANGED
package/src/Payload.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/hex'
|
|
2
2
|
import type {
|
|
3
|
-
DeepOmitStartsWith, DeepRestrictToStringKeys, EmptyObject,
|
|
3
|
+
DeepOmitStartsWith, DeepPickStartsWith, DeepRestrictToStringKeys, EmptyObject,
|
|
4
4
|
} from '@xylabs/object'
|
|
5
5
|
|
|
6
6
|
import type { Schema, WithSchema } from './Schema.ts'
|
|
@@ -51,3 +51,5 @@ export type WithoutMeta<T extends EmptyObject> = WithoutClientMeta<WithoutStorag
|
|
|
51
51
|
|
|
52
52
|
export type WithoutSchema<T extends WithOptionalSchema<Payload>> = Omit<T, 'schema'>
|
|
53
53
|
export type WithOptionalSchema<T extends EmptyObject = EmptyObject> = WithoutSchema<T> & Partial<T & SchemaField>
|
|
54
|
+
|
|
55
|
+
export type WithOnlyClientMeta<T extends EmptyObject> = DeepPickStartsWith<T, '$'>
|
package/src/PayloadFindFilter.ts
CHANGED
|
@@ -30,9 +30,15 @@ export const isSequence = (value: unknown): value is Sequence => {
|
|
|
30
30
|
return isLocalSequence(value) || isQualifiedSequence(value)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
export const SequenceNonceComponentLengths = {
|
|
34
|
+
nonceIndexBytes: 4,
|
|
35
|
+
nonceHashBytes: 4,
|
|
36
|
+
}
|
|
37
|
+
|
|
33
38
|
export const SequenceComponentLengths = {
|
|
39
|
+
...SequenceNonceComponentLengths,
|
|
34
40
|
epochBytes: 8,
|
|
35
|
-
nonceBytes:
|
|
41
|
+
nonceBytes: SequenceNonceComponentLengths.nonceIndexBytes + SequenceNonceComponentLengths.nonceHashBytes,
|
|
36
42
|
addressBytes: 20,
|
|
37
43
|
}
|
|
38
44
|
|
|
@@ -55,8 +61,8 @@ export const LocalSequenceConstants = {
|
|
|
55
61
|
|
|
56
62
|
export const QualifiedSequenceConstants = {
|
|
57
63
|
qualifiedSequenceBytes: LocalSequenceConstants.localSequenceBytes + SequenceComponentLengths.addressBytes,
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
minQualifiedSequence: LocalSequenceConstants.minLocalSequence + SequenceComponentMinMax.minAddress as QualifiedSequence,
|
|
65
|
+
maxQualifiedSequence: LocalSequenceConstants.maxLocalSequence + SequenceComponentMinMax.maxAddress as QualifiedSequence,
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
export const SequenceConstants = {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Compare } from '@xylabs/object'
|
|
2
|
+
|
|
3
|
+
import type { Sequence } from './Sequence.ts'
|
|
4
|
+
import { SequenceParser } from './SequenceParser.ts'
|
|
5
|
+
|
|
6
|
+
const local: Compare<Sequence> = (a, b) => {
|
|
7
|
+
const aa = SequenceParser.from(a)
|
|
8
|
+
const bb = SequenceParser.from(b)
|
|
9
|
+
return aa.localSequence > bb.localSequence ? 1 : aa.localSequence < bb.localSequence ? -1 : 0
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const qualified: Compare<Sequence> = (a, b) => {
|
|
13
|
+
const aa = SequenceParser.from(a)
|
|
14
|
+
const bb = SequenceParser.from(b)
|
|
15
|
+
return aa.qualifiedSequence > bb.qualifiedSequence ? 1 : aa.qualifiedSequence < bb.qualifiedSequence ? -1 : 0
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const SequenceComparer = { local, qualified }
|
|
@@ -65,10 +65,23 @@ export class SequenceParser {
|
|
|
65
65
|
static from(timestamp: Hex, hash: Hash, address?: Address): SequenceParser
|
|
66
66
|
static from(timestamp: Hex, hash: Hex, address?: Address): SequenceParser
|
|
67
67
|
static from(timestamp: Hex, nonce: Nonce, address?: Address): SequenceParser
|
|
68
|
+
static from(timestamp: Hex, hash: Hash, index?: number, address?: Address): SequenceParser
|
|
69
|
+
static from(timestamp: Hex, hash: Hex, index?: number, address?: Address): SequenceParser
|
|
70
|
+
static from(timestamp: Hex, nonce: Nonce, index?: number, address?: Address): SequenceParser
|
|
68
71
|
static from(timestamp: number, hash: Hash, address?: Address): SequenceParser
|
|
69
72
|
static from(timestamp: number, hash: Hex, address?: Address): SequenceParser
|
|
70
73
|
static from(timestamp: number, nonce: Nonce, address?: Address): SequenceParser
|
|
71
|
-
static from(
|
|
74
|
+
static from(timestamp: number, hash: Hash, index?: number, address?: Address): SequenceParser
|
|
75
|
+
static from(timestamp: number, hash: Hex, index?: number, address?: Address): SequenceParser
|
|
76
|
+
static from(timestamp: number, nonce: Nonce, index?: number, address?: Address): SequenceParser
|
|
77
|
+
static from(
|
|
78
|
+
timestampOrSequence: Sequence | Hex | number,
|
|
79
|
+
nonceOrAddress: Hash | Nonce,
|
|
80
|
+
addressOrIndex?: Address | number,
|
|
81
|
+
addressOnly?: Address,
|
|
82
|
+
): SequenceParser {
|
|
83
|
+
const address = typeof addressOrIndex === 'number' ? addressOnly : addressOrIndex
|
|
84
|
+
const index = typeof addressOrIndex === 'number' ? addressOrIndex : undefined
|
|
72
85
|
if (isSequence(timestampOrSequence)) {
|
|
73
86
|
if (nonceOrAddress) {
|
|
74
87
|
assertEx(!isQualifiedSequence(timestampOrSequence), () => 'Providing both a qualified sequence and a address is not allowed')
|
|
@@ -78,7 +91,7 @@ export class SequenceParser {
|
|
|
78
91
|
return new this(SequenceParser.privateConstructorKey, timestampOrSequence)
|
|
79
92
|
}
|
|
80
93
|
const epoch = SequenceParser.toEpoch(timestampOrSequence)
|
|
81
|
-
const nonce = SequenceParser.toNonce(nonceOrAddress)
|
|
94
|
+
const nonce = SequenceParser.toNonce(nonceOrAddress, index)
|
|
82
95
|
const addressHex: Hex = address ? toHex(address, { bitLength: SequenceConstants.addressBytes * 8 }) : SequenceConstants.minAddress
|
|
83
96
|
const hexString = (epoch + nonce + addressHex) as Hex
|
|
84
97
|
assertEx(isSequence(hexString), () => `Invalid sequence [${hexString}] [${epoch}, ${nonce}, ${addressHex}]`)
|
|
@@ -110,7 +123,7 @@ export class SequenceParser {
|
|
|
110
123
|
}
|
|
111
124
|
|
|
112
125
|
// can convert a short number/hex to a nonce (treats it as the whole value) or extract an nonce from a sequence
|
|
113
|
-
static toNonce(value: Hash | Hex): Nonce {
|
|
126
|
+
static toNonce(value: Hash | Hex, index = 0): Nonce {
|
|
114
127
|
assertEx(
|
|
115
128
|
typeof value !== 'number' || Number.isInteger(value),
|
|
116
129
|
() => 'Value must be in integer',
|
|
@@ -119,7 +132,8 @@ export class SequenceParser {
|
|
|
119
132
|
if (isSequence(hex)) {
|
|
120
133
|
return hex.slice(SequenceConstants.epochBytes * 2, SequenceConstants.localSequenceBytes * 2) as Nonce
|
|
121
134
|
}
|
|
122
|
-
const
|
|
123
|
-
|
|
135
|
+
const hashHex = toHex((hex as string), { prefix: false, bitLength: SequenceConstants.nonceHashBytes * 8 }).slice(-SequenceConstants.nonceHashBytes * 2)
|
|
136
|
+
const indexHex = toHex(index, { prefix: false, bitLength: SequenceConstants.nonceIndexBytes * 8 }).slice(-SequenceConstants.nonceIndexBytes * 2)
|
|
137
|
+
return (indexHex + hashHex).slice(-SequenceConstants.nonceBytes * 2) as Nonce
|
|
124
138
|
}
|
|
125
139
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Hash, isHash } from '@xylabs/hex'
|
|
2
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
2
3
|
|
|
3
4
|
import type { Payload } from '../Payload.ts'
|
|
4
5
|
import type { Sequence } from './Sequence.ts'
|
|
@@ -37,6 +38,8 @@ export const isHashMeta = (value: unknown): value is HashMeta => {
|
|
|
37
38
|
export const isStorageMeta = (value: unknown): value is StorageMeta => {
|
|
38
39
|
return isSequenceMeta(value) && isHashMeta(value)
|
|
39
40
|
}
|
|
41
|
+
export const asStorageMeta = AsObjectFactory.create(isStorageMeta)
|
|
42
|
+
export const asOptionalStorageMeta = AsObjectFactory.createOptional(isStorageMeta)
|
|
40
43
|
|
|
41
44
|
// "00005a7f354762f3ac1bc5ddc6cfd08d14" is and example of a local sequence string
|
|
42
45
|
|
package/src/StorageMeta/index.ts
CHANGED