@xyo-network/boundwitness-builder 4.0.3 → 4.1.1
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/{types → browser}/Builder.d.ts +2 -2
- package/dist/browser/Builder.d.ts.map +1 -0
- package/dist/browser/index.d.ts +55 -0
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/spec/Builder.perf.spec.d.ts +2 -0
- package/dist/browser/spec/Builder.perf.spec.d.ts.map +1 -0
- package/dist/browser/spec/Builder.sequence.spec.d.ts +2 -0
- package/dist/browser/spec/Builder.sequence.spec.d.ts.map +1 -0
- package/dist/browser/spec/Builder.spec.d.ts +2 -0
- package/dist/browser/spec/Builder.spec.d.ts.map +1 -0
- package/dist/neutral/Builder.d.ts +48 -0
- package/dist/neutral/Builder.d.ts.map +1 -0
- package/dist/neutral/Query/QueryBoundWitnessBuilder.d.ts +9 -0
- package/dist/neutral/Query/QueryBoundWitnessBuilder.d.ts.map +1 -0
- package/dist/neutral/Query/index.d.ts +2 -0
- package/dist/neutral/Query/index.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +55 -0
- package/dist/neutral/index.d.ts.map +1 -0
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/spec/Builder.perf.spec.d.ts +2 -0
- package/dist/neutral/spec/Builder.perf.spec.d.ts.map +1 -0
- package/dist/neutral/spec/Builder.sequence.spec.d.ts +2 -0
- package/dist/neutral/spec/Builder.sequence.spec.d.ts.map +1 -0
- package/dist/neutral/spec/Builder.spec.d.ts +2 -0
- package/dist/neutral/spec/Builder.spec.d.ts.map +1 -0
- package/dist/node/Builder.d.ts +48 -0
- package/dist/node/Builder.d.ts.map +1 -0
- package/dist/node/Query/QueryBoundWitnessBuilder.d.ts +9 -0
- package/dist/node/Query/QueryBoundWitnessBuilder.d.ts.map +1 -0
- package/dist/node/Query/index.d.ts +2 -0
- package/dist/node/Query/index.d.ts.map +1 -0
- package/dist/node/index.d.ts +55 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/spec/Builder.perf.spec.d.ts +2 -0
- package/dist/node/spec/Builder.perf.spec.d.ts.map +1 -0
- package/dist/node/spec/Builder.sequence.spec.d.ts +2 -0
- package/dist/node/spec/Builder.sequence.spec.d.ts.map +1 -0
- package/dist/node/spec/Builder.spec.d.ts +2 -0
- package/dist/node/spec/Builder.spec.d.ts.map +1 -0
- package/package.json +18 -18
- package/src/Builder.ts +2 -2
- package/dist/types/Builder.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -3
- /package/dist/{types → browser}/Query/QueryBoundWitnessBuilder.d.ts +0 -0
- /package/dist/{types → browser}/Query/QueryBoundWitnessBuilder.d.ts.map +0 -0
- /package/dist/{types → browser}/Query/index.d.ts +0 -0
- /package/dist/{types → browser}/Query/index.d.ts.map +0 -0
- /package/dist/{types → browser}/index.d.ts.map +0 -0
|
@@ -3,7 +3,7 @@ import type { AccountInstance } from '@xyo-network/account-model';
|
|
|
3
3
|
import type { BoundWitness, Signed, UnsignedBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
4
|
import type { PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
5
|
import { PayloadBuilder } from '@xyo-network/payload-builder';
|
|
6
|
-
import type { ModuleError, Payload, Schema, WithoutClientMeta, WithoutSchema, WithoutStorageMeta } from '@xyo-network/payload-model';
|
|
6
|
+
import type { ModuleError, Payload, Schema, WithoutClientMeta, WithoutMeta, WithoutSchema, WithoutStorageMeta } from '@xyo-network/payload-model';
|
|
7
7
|
export declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
8
|
export type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
9
|
export declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
@@ -27,7 +27,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitn
|
|
|
27
27
|
private static validateGeneratedFields;
|
|
28
28
|
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
29
|
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
-
dataHashableFields(): Promise<
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
31
|
error(payload?: ModuleError): this;
|
|
32
32
|
errors(errors?: (ModuleError | null)[]): this;
|
|
33
33
|
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import { UnsignedBoundWitness, Signed, BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilder, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
|
+
import { Payload, ModuleError, WithoutMeta, WithoutStorageMeta, WithoutClientMeta, WithoutSchema, Schema, Query } from '@xyo-network/payload-model';
|
|
6
|
+
|
|
7
|
+
declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
|
+
type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
|
+
declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
10
|
+
private static readonly _buildMutex;
|
|
11
|
+
private _accounts;
|
|
12
|
+
private _errorHashes?;
|
|
13
|
+
private _errors;
|
|
14
|
+
private _payloadHashes?;
|
|
15
|
+
private _payloadSchemas?;
|
|
16
|
+
private _payloads;
|
|
17
|
+
constructor(options?: Omit<PayloadBuilderOptions, 'schema'>);
|
|
18
|
+
protected get addresses(): Address[];
|
|
19
|
+
protected get payloadSchemas(): string[];
|
|
20
|
+
protected get previousHashBytes(): (ArrayBufferLike | null)[];
|
|
21
|
+
protected get previousHashes(): (Hash | null)[];
|
|
22
|
+
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
23
|
+
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
24
|
+
protected static linkingFields<T extends BoundWitness>(accounts: AccountInstance[], payloads?: Payload[]): Promise<Pick<T, GeneratedBoundWitnessFields>>;
|
|
25
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
26
|
+
protected static signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]>;
|
|
27
|
+
private static validateGeneratedFields;
|
|
28
|
+
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
|
+
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
|
+
error(payload?: ModuleError): this;
|
|
32
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
33
|
+
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
34
|
+
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
35
|
+
payload(payload?: TPayload): this;
|
|
36
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
37
|
+
signer(account: AccountInstance): this;
|
|
38
|
+
signers(accounts: AccountInstance[]): this;
|
|
39
|
+
sourceQuery(sourceQuery: Hash): this;
|
|
40
|
+
/** @deprecated use signer instead */
|
|
41
|
+
witness(account: AccountInstance): this;
|
|
42
|
+
/** @deprecated use signers instead */
|
|
43
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
44
|
+
protected sign(): Promise<string[]>;
|
|
45
|
+
private generatedFields;
|
|
46
|
+
private missingSchemaMessage;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
50
|
+
private _query;
|
|
51
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
52
|
+
query<T extends TQuery>(query: T): this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { BoundWitnessBuilder, GeneratedBoundWitnessFields, QueryBoundWitnessBuilder };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n AnyPayload,\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields() {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.perf.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.perf.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.sequence.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.sequence.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Address, Hash } from '@xylabs/hex';
|
|
2
|
+
import type { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import type { BoundWitness, Signed, UnsignedBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import type { PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder';
|
|
6
|
+
import type { ModuleError, Payload, Schema, WithoutClientMeta, WithoutMeta, WithoutSchema, WithoutStorageMeta } from '@xyo-network/payload-model';
|
|
7
|
+
export declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
|
+
export type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
|
+
export declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
10
|
+
private static readonly _buildMutex;
|
|
11
|
+
private _accounts;
|
|
12
|
+
private _errorHashes?;
|
|
13
|
+
private _errors;
|
|
14
|
+
private _payloadHashes?;
|
|
15
|
+
private _payloadSchemas?;
|
|
16
|
+
private _payloads;
|
|
17
|
+
constructor(options?: Omit<PayloadBuilderOptions, 'schema'>);
|
|
18
|
+
protected get addresses(): Address[];
|
|
19
|
+
protected get payloadSchemas(): string[];
|
|
20
|
+
protected get previousHashBytes(): (ArrayBufferLike | null)[];
|
|
21
|
+
protected get previousHashes(): (Hash | null)[];
|
|
22
|
+
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
23
|
+
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
24
|
+
protected static linkingFields<T extends BoundWitness>(accounts: AccountInstance[], payloads?: Payload[]): Promise<Pick<T, GeneratedBoundWitnessFields>>;
|
|
25
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
26
|
+
protected static signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]>;
|
|
27
|
+
private static validateGeneratedFields;
|
|
28
|
+
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
|
+
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
|
+
error(payload?: ModuleError): this;
|
|
32
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
33
|
+
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
34
|
+
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
35
|
+
payload(payload?: TPayload): this;
|
|
36
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
37
|
+
signer(account: AccountInstance): this;
|
|
38
|
+
signers(accounts: AccountInstance[]): this;
|
|
39
|
+
sourceQuery(sourceQuery: Hash): this;
|
|
40
|
+
/** @deprecated use signer instead */
|
|
41
|
+
witness(account: AccountInstance): this;
|
|
42
|
+
/** @deprecated use signers instead */
|
|
43
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
44
|
+
protected sign(): Promise<string[]>;
|
|
45
|
+
private generatedFields;
|
|
46
|
+
private missingSchemaMessage;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
|
+
import type { Query, WithoutMeta } from '@xyo-network/payload-model';
|
|
3
|
+
import { BoundWitnessBuilder } from '../Builder.ts';
|
|
4
|
+
export declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
5
|
+
private _query;
|
|
6
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
7
|
+
query<T extends TQuery>(query: T): this;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=QueryBoundWitnessBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessBuilder.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD,qBAAa,wBAAwB,CACnC,aAAa,SAAS,iBAAiB,GAAG,iBAAiB,EAC3D,MAAM,SAAS,KAAK,GAAG,KAAK,CAC5B,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAoB;IAEnB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAQxE,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC;CAKjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Query/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import { UnsignedBoundWitness, Signed, BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilder, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
|
+
import { Payload, ModuleError, WithoutMeta, WithoutStorageMeta, WithoutClientMeta, WithoutSchema, Schema, Query } from '@xyo-network/payload-model';
|
|
6
|
+
|
|
7
|
+
declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
|
+
type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
|
+
declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
10
|
+
private static readonly _buildMutex;
|
|
11
|
+
private _accounts;
|
|
12
|
+
private _errorHashes?;
|
|
13
|
+
private _errors;
|
|
14
|
+
private _payloadHashes?;
|
|
15
|
+
private _payloadSchemas?;
|
|
16
|
+
private _payloads;
|
|
17
|
+
constructor(options?: Omit<PayloadBuilderOptions, 'schema'>);
|
|
18
|
+
protected get addresses(): Address[];
|
|
19
|
+
protected get payloadSchemas(): string[];
|
|
20
|
+
protected get previousHashBytes(): (ArrayBufferLike | null)[];
|
|
21
|
+
protected get previousHashes(): (Hash | null)[];
|
|
22
|
+
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
23
|
+
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
24
|
+
protected static linkingFields<T extends BoundWitness>(accounts: AccountInstance[], payloads?: Payload[]): Promise<Pick<T, GeneratedBoundWitnessFields>>;
|
|
25
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
26
|
+
protected static signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]>;
|
|
27
|
+
private static validateGeneratedFields;
|
|
28
|
+
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
|
+
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
|
+
error(payload?: ModuleError): this;
|
|
32
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
33
|
+
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
34
|
+
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
35
|
+
payload(payload?: TPayload): this;
|
|
36
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
37
|
+
signer(account: AccountInstance): this;
|
|
38
|
+
signers(accounts: AccountInstance[]): this;
|
|
39
|
+
sourceQuery(sourceQuery: Hash): this;
|
|
40
|
+
/** @deprecated use signer instead */
|
|
41
|
+
witness(account: AccountInstance): this;
|
|
42
|
+
/** @deprecated use signers instead */
|
|
43
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
44
|
+
protected sign(): Promise<string[]>;
|
|
45
|
+
private generatedFields;
|
|
46
|
+
private missingSchemaMessage;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
50
|
+
private _query;
|
|
51
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
52
|
+
query<T extends TQuery>(query: T): this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { BoundWitnessBuilder, GeneratedBoundWitnessFields, QueryBoundWitnessBuilder };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n AnyPayload,\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields() {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.perf.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.perf.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.sequence.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.sequence.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Address, Hash } from '@xylabs/hex';
|
|
2
|
+
import type { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import type { BoundWitness, Signed, UnsignedBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import type { PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder';
|
|
6
|
+
import type { ModuleError, Payload, Schema, WithoutClientMeta, WithoutMeta, WithoutSchema, WithoutStorageMeta } from '@xyo-network/payload-model';
|
|
7
|
+
export declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
|
+
export type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
|
+
export declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
10
|
+
private static readonly _buildMutex;
|
|
11
|
+
private _accounts;
|
|
12
|
+
private _errorHashes?;
|
|
13
|
+
private _errors;
|
|
14
|
+
private _payloadHashes?;
|
|
15
|
+
private _payloadSchemas?;
|
|
16
|
+
private _payloads;
|
|
17
|
+
constructor(options?: Omit<PayloadBuilderOptions, 'schema'>);
|
|
18
|
+
protected get addresses(): Address[];
|
|
19
|
+
protected get payloadSchemas(): string[];
|
|
20
|
+
protected get previousHashBytes(): (ArrayBufferLike | null)[];
|
|
21
|
+
protected get previousHashes(): (Hash | null)[];
|
|
22
|
+
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
23
|
+
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
24
|
+
protected static linkingFields<T extends BoundWitness>(accounts: AccountInstance[], payloads?: Payload[]): Promise<Pick<T, GeneratedBoundWitnessFields>>;
|
|
25
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
26
|
+
protected static signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]>;
|
|
27
|
+
private static validateGeneratedFields;
|
|
28
|
+
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
|
+
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
|
+
error(payload?: ModuleError): this;
|
|
32
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
33
|
+
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
34
|
+
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
35
|
+
payload(payload?: TPayload): this;
|
|
36
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
37
|
+
signer(account: AccountInstance): this;
|
|
38
|
+
signers(accounts: AccountInstance[]): this;
|
|
39
|
+
sourceQuery(sourceQuery: Hash): this;
|
|
40
|
+
/** @deprecated use signer instead */
|
|
41
|
+
witness(account: AccountInstance): this;
|
|
42
|
+
/** @deprecated use signers instead */
|
|
43
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
44
|
+
protected sign(): Promise<string[]>;
|
|
45
|
+
private generatedFields;
|
|
46
|
+
private missingSchemaMessage;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
2
|
+
import type { Query, WithoutMeta } from '@xyo-network/payload-model';
|
|
3
|
+
import { BoundWitnessBuilder } from '../Builder.ts';
|
|
4
|
+
export declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
5
|
+
private _query;
|
|
6
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
7
|
+
query<T extends TQuery>(query: T): this;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=QueryBoundWitnessBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessBuilder.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD,qBAAa,wBAAwB,CACnC,aAAa,SAAS,iBAAiB,GAAG,iBAAiB,EAC3D,MAAM,SAAS,KAAK,GAAG,KAAK,CAC5B,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAoB;IAEnB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAQxE,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC;CAKjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Query/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
3
|
+
import { UnsignedBoundWitness, Signed, BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilder, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
5
|
+
import { Payload, ModuleError, WithoutMeta, WithoutStorageMeta, WithoutClientMeta, WithoutSchema, Schema, Query } from '@xyo-network/payload-model';
|
|
6
|
+
|
|
7
|
+
declare const GeneratedBoundWitnessFields: readonly ["addresses", "payload_hashes", "payload_schemas", "previous_hashes"];
|
|
8
|
+
type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number];
|
|
9
|
+
declare class BoundWitnessBuilder<TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness, TPayload extends Payload = Payload> extends PayloadBuilder<TBoundWitness, Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>> {
|
|
10
|
+
private static readonly _buildMutex;
|
|
11
|
+
private _accounts;
|
|
12
|
+
private _errorHashes?;
|
|
13
|
+
private _errors;
|
|
14
|
+
private _payloadHashes?;
|
|
15
|
+
private _payloadSchemas?;
|
|
16
|
+
private _payloads;
|
|
17
|
+
constructor(options?: Omit<PayloadBuilderOptions, 'schema'>);
|
|
18
|
+
protected get addresses(): Address[];
|
|
19
|
+
protected get payloadSchemas(): string[];
|
|
20
|
+
protected get previousHashBytes(): (ArrayBufferLike | null)[];
|
|
21
|
+
protected get previousHashes(): (Hash | null)[];
|
|
22
|
+
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
23
|
+
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
24
|
+
protected static linkingFields<T extends BoundWitness>(accounts: AccountInstance[], payloads?: Payload[]): Promise<Pick<T, GeneratedBoundWitnessFields>>;
|
|
25
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
26
|
+
protected static signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]>;
|
|
27
|
+
private static validateGeneratedFields;
|
|
28
|
+
build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>;
|
|
29
|
+
dataHash(): Promise<Lowercase<string>>;
|
|
30
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
31
|
+
error(payload?: ModuleError): this;
|
|
32
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
33
|
+
fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this;
|
|
34
|
+
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
35
|
+
payload(payload?: TPayload): this;
|
|
36
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
37
|
+
signer(account: AccountInstance): this;
|
|
38
|
+
signers(accounts: AccountInstance[]): this;
|
|
39
|
+
sourceQuery(sourceQuery: Hash): this;
|
|
40
|
+
/** @deprecated use signer instead */
|
|
41
|
+
witness(account: AccountInstance): this;
|
|
42
|
+
/** @deprecated use signers instead */
|
|
43
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
44
|
+
protected sign(): Promise<string[]>;
|
|
45
|
+
private generatedFields;
|
|
46
|
+
private missingSchemaMessage;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
50
|
+
private _query;
|
|
51
|
+
dataHashableFields(): Promise<WithoutMeta<TBoundWitness>>;
|
|
52
|
+
query<T extends TQuery>(query: T): this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { BoundWitnessBuilder, GeneratedBoundWitnessFields, QueryBoundWitnessBuilder };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA"}
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n AnyPayload,\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields() {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AAEzB,SAAS,0BAA0B;AAOnC,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,EAAc;AAAA,EAAmB;AAAA,OAC5B;AAEP,SAAS,YAAY,sBAAsB;AAQ3C,SAAS,aAAa;AAEf,IAAM,8BAA8B,CAAC,aAAa,kBAAkB,mBAAmB,iBAAiB;AAG/G,IAAM,iBAAiB,CAAC,UAA6B,eAAe,UAAU;AAC5E,QAAM,YAAY,oBAAI,IAAa;AACnC,aAAW,WAAW,UAAU;AAC9B,QAAI,UAAU,IAAI,QAAQ,OAAO,GAAG;AAClC,UAAI,cAAc;AAChB,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AACA,cAAU,IAAI,QAAQ,OAAO;AAAA,EAC/B;AACA,SAAO;AACT;AAEO,IAAM,sBAAN,MAAM,6BAGH,eAGN;AAAA,EACF,OAAwB,cAAc,IAAI,MAAM;AAAA,EAExC,YAA+B,CAAC;AAAA,EAChC;AAAA,EACA,UAAyB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAwB,CAAC;AAAA,EAEjC,YAAY,SAAiD;AAC3D,UAAM,EAAE,GAAG,SAAS,QAAQ,mBAAmB,CAAC;AAAA,EAClD;AAAA,EAEA,IAAc,YAAuB;AACnC,mBAAe,KAAK,WAAW,IAAI;AACnC,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,QAAQ,YAAY,CAAC;AAAA,EACpE;AAAA,EAEA,IAAc,iBAA2B;AACvC,WACE,KAAK,mBACF,KAAK,UAAU,IAAI,CAAC,YAAY;AACjC,aAAO,SAAS,QAAQ,QAAQ,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA,IAC1E,CAAC;AAAA,EAEL;AAAA,EAEA,IAAc,oBAAgD;AAC5D,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,qBAAqB,IAAI;AAAA,EACxE;AAAA,EAEA,IAAc,iBAAkC;AAC9C,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,gBAAgB,IAAI;AAAA,EACnE;AAAA,EAEA,OAAO,aAAqC,SAAY,SAAkB;AACxE,UAAM,QAAQ,QAAQ,UAAU,QAAQ,OAAO;AAC/C,QAAI,UAAU,IAAI;AAChB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,aAAqC,cAAiB,SAAkB;AAC7E,WAAO,aAAa,gBAAgB,KAAK,aAAa,cAAc,OAAO,CAAC,GAAG,YAAY;AAAA,EAC7F;AAAA,EAEA,aAAuB,cACrB,UACA,UAC+C;AAC/C,UAAM,YAAY,SAAS,IAAI,aAAW,mBAAmB,QAAQ,cAAc,EAAE,QAAQ,MAAM,CAAC,CAAC;AACrG,UAAM,kBAAkB,SAAS,IAAI,aAAW,QAAQ,gBAAgB,IAAI;AAC5E,UAAM,iBAAiB,WAAW,MAAM,qBAAoB,OAAO,QAAQ,IAAI,CAAC;AAChF,UAAM,kBAAkB,UAAU,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,KAAK,CAAC;AAClE,WAAO;AAAA,MACL;AAAA,MAAW;AAAA,MAAgB;AAAA,MAAiB;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,OAAiB,UAAkC,SAAY,SAAkB;AAC/E,WAAO,QAAQ,YAAY,KAAK,aAAa,SAAS,OAAO,CAAC;AAAA,EAChE;AAAA,EAEA,aAAuB,WAAW,UAA6B,UAAmC;AAChG,UAAM,YAAY,cAAc,QAAQ;AACxC,UAAM,sBAAsB,UAAU,IAAI,aAAW,QAAQ,iBAAiB;AAC9E,WAAO,MAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,SAAS,UAAU,oBAAoB,MAAM,QAAQ,KAAK,WAAW,oBAAoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,EACrJ;AAAA,EAEA,OAAe,wBAAwB,QAAyD;AAC9F,aAAS,OAAO,gBAAgB,WAAW,OAAO,iBAAiB,QAAQ,MAAM,8BAA8B;AAC/G,aAAS,CAAC,OAAO,eAAe,KAAK,UAAQ,CAAC,IAAI,GAAG,MAAM,uBAAuB;AAClF,aAAS,CAAC,OAAO,gBAAgB,KAAK,YAAU,CAAC,MAAM,GAAG,MAAM,wBAAwB;AAAA,EAC1F;AAAA,EAEA,MAAe,QAAqE;AAClF,WAAO,MAAM,qBAAoB,YAAY,aAAa,YAAY;AACpE,YAAM,qBAAqB,MAAM,KAAK,mBAAmB;AACzD,YAAM,cAAc,MAAM,KAAK,KAAK;AAEpC,YAAM,MAAM;AAAA,QACV,GAAG,KAAK;AAAA,QAAO,GAAG;AAAA,QAAoB,GAAG,KAAK;AAAA,QAAS;AAAA,MACzD;AACA,aAAO;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW;AACf,UAAM,qBAAqB,MAAM,KAAK,mBAAmB;AACzD,UAAM,OAAO,MAAM,aAAa,KAAK,kBAAkB;AACvD,WAAO;AAAA,EACT;AAAA,EAEA,MAAe,qBAAqB;AAClC,UAAM,kBAAoE,MAAM,KAAK,gBAAgB;AACrG,yBAAoB,wBAAwB,eAAe;AAC3D,UAAM,SAAuC;AAAA,MAC3C,GAAG,eAAe,SAAS,KAAK,WAAW,CAAC,CAAC;AAAA,MAC7C,GAAG;AAAA,IACL;AACA,WAAO,MAAM,qBAAoB,mBAAkC,KAAK,SAAS,MAAM;AAAA,EACzF;AAAA,EAEA,MAAM,SAAuB;AAC3B,aAAS,KAAK,iBAAiB,QAAW,MAAM,4CAA4C;AAC5F,QAAI,SAAS;AACX,WAAK,QAAQ,KAAK,SAAS,WAAW,OAAO,CAAC,CAAC;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAiC;AACtC,QAAI,QAAQ;AACV,iBAAW,SAAS,QAAQ;AAC1B,YAAI,UAAU,MAAM;AAClB,eAAK,MAAM,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAES,OAAO,QAAsH;AAEpI,UAAM,QAAQ,gBAAgB,MAAM;AACpC,eAAW,SAAS,6BAA6B;AAC/C,aAAO,MAAM,KAAK;AAAA,IACpB;AAEA,SAAK,UACD,qBAAoB;AAAA,MACpB,qBAAoB;AAAA,QAClB,WAAW,kBAAkB,KAAK,CAAC;AAAA,MACrC;AAAA,IACF;AACF,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAgB,QAAkB;AACvC,aAAS,KAAK,SAAS,WAAW,GAAG,MAAM,8CAA8C;AACzF,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAAoB;AAC1B,aAAS,KAAK,mBAAmB,QAAW,MAAM,8CAA8C;AAChG,QAAI,SAAS;AACX,WAAK,UAAU,KAAK,SAAS,WAAqB,OAAO,CAAC,CAAC;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAgC;AACvC,QAAI;AACF,iBAAW,WAAW,UAAU;AAC9B,YAAI,YAAY,MAAM;AACpB,eAAK,QAAQ,OAAO;AAAA,QACtB;AAAA,MACF;AACF,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,SAA0B;AAC/B,mBAAe,CAAC,GAAG,KAAK,WAAW,OAAO,GAAG,IAAI;AACjD,SAAK,WAAW,KAAK,OAAO;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,UAA6B;AACnC,mBAAe,CAAC,GAAG,KAAK,WAAW,GAAG,QAAQ,GAAG,IAAI;AACrD,SAAK,WAAW,KAAK,GAAG,QAAQ;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,aAAmB;AAC7B,SAAK,QAAQ;AAAA,MACX,GAAG,KAAK;AAAA,MACR,cAAc;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,QAAQ,SAA0B;AAChC,SAAK,WAAW,KAAK,OAAO;AAC5B,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,UAAU,UAA6B;AACrC,SAAK,WAAW,KAAK,GAAG,QAAQ;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,OAA0B;AACxC,mBAAe,KAAK,WAAW,IAAI;AACnC,UAAM,YAAY,cAAc,MAAM,KAAK,SAAS,CAAC;AACrD,WAAO,MAAM,QAAQ,IAAI,KAAK,UAAU,IAAI,OAAM,YAAW,oBAAoB,MAAM,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,EACtH;AAAA,EAEA,MAAc,kBAA6E;AACzF,WAAO,MAAM,qBAAoB,cAAc,KAAK,WAAW,KAAK,SAAS;AAAA,EAC/E;AAAA,EAEQ,qBAAqB,SAAkB;AAC7C,WAAO;AAAA,EAA4B,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,EACrE;AACF;;;ACtQA,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,kBAAAC,uBAAsB;AAKxB,IAAM,2BAAN,cAGG,oBAAmC;AAAA,EACnC;AAAA,EAER,MAAe,qBAA0D;AACvE,UAAM,SAAS;AAAA,MACb,GAAI,MAAM,MAAM,mBAAmB;AAAA,MACnC,OAAO,MAAMC,gBAAe,SAASC,UAAS,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAAA,IACxF;AACA,WAAO,EAAE,GAAG,OAAO;AAAA,EACrB;AAAA,EAEA,MAAwB,OAAU;AAChC,SAAK,QAAQ,KAAK;AAClB,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AACF;","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n Signed,\n UnsignedBoundWitness,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends UnsignedBoundWitness = UnsignedBoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!fields.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!fields.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = await this.sign()\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutStorageMeta<WithoutClientMeta<WithoutSchema<Omit<TBoundWitness, GeneratedBoundWitnessFields>>>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.perf.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.perf.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.sequence.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.sequence.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Builder.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/boundwitness-builder",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.1",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -21,32 +21,32 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
|
-
"types": "./dist/
|
|
24
|
+
"types": "./dist/neutral/index.d.ts",
|
|
25
25
|
"default": "./dist/neutral/index.mjs"
|
|
26
26
|
},
|
|
27
27
|
"./package.json": "./package.json"
|
|
28
28
|
},
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
|
-
"types": "dist/
|
|
30
|
+
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/arraybuffer": "^4.13.
|
|
33
|
-
"@xylabs/assert": "^4.13.
|
|
34
|
-
"@xylabs/hex": "^4.13.
|
|
35
|
-
"@xyo-network/account-model": "^4.
|
|
36
|
-
"@xyo-network/boundwitness-model": "^4.
|
|
37
|
-
"@xyo-network/hash": "^4.
|
|
38
|
-
"@xyo-network/payload": "^4.
|
|
39
|
-
"@xyo-network/payload-builder": "^4.
|
|
40
|
-
"@xyo-network/payload-model": "^4.
|
|
32
|
+
"@xylabs/arraybuffer": "^4.13.15",
|
|
33
|
+
"@xylabs/assert": "^4.13.15",
|
|
34
|
+
"@xylabs/hex": "^4.13.15",
|
|
35
|
+
"@xyo-network/account-model": "^4.1.1",
|
|
36
|
+
"@xyo-network/boundwitness-model": "^4.1.1",
|
|
37
|
+
"@xyo-network/hash": "^4.1.1",
|
|
38
|
+
"@xyo-network/payload": "^4.1.1",
|
|
39
|
+
"@xyo-network/payload-builder": "^4.1.1",
|
|
40
|
+
"@xyo-network/payload-model": "^4.1.1",
|
|
41
41
|
"async-mutex": "^0.5.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
45
|
-
"@xylabs/tsconfig": "^
|
|
46
|
-
"@xylabs/vitest-extended": "^4.13.
|
|
47
|
-
"@xyo-network/account": "^4.
|
|
48
|
-
"@xyo-network/elliptic": "^4.
|
|
49
|
-
"@xyo-network/wallet": "^4.
|
|
44
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.0-rc.23",
|
|
45
|
+
"@xylabs/tsconfig": "^7.0.0-rc.23",
|
|
46
|
+
"@xylabs/vitest-extended": "^4.13.15",
|
|
47
|
+
"@xyo-network/account": "^4.1.1",
|
|
48
|
+
"@xyo-network/elliptic": "^4.1.1",
|
|
49
|
+
"@xyo-network/wallet": "^4.1.1",
|
|
50
50
|
"typescript": "^5.8.3",
|
|
51
51
|
"vitest": "^3.2.4"
|
|
52
52
|
},
|
package/src/Builder.ts
CHANGED
|
@@ -15,9 +15,9 @@ import {
|
|
|
15
15
|
import type { PayloadBuilderOptions } from '@xyo-network/payload-builder'
|
|
16
16
|
import { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'
|
|
17
17
|
import type {
|
|
18
|
-
AnyPayload,
|
|
19
18
|
ModuleError, Payload, Schema,
|
|
20
19
|
WithoutClientMeta,
|
|
20
|
+
WithoutMeta,
|
|
21
21
|
WithoutSchema,
|
|
22
22
|
WithoutStorageMeta,
|
|
23
23
|
} from '@xyo-network/payload-model'
|
|
@@ -145,7 +145,7 @@ export class BoundWitnessBuilder<
|
|
|
145
145
|
return hash
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
override async dataHashableFields() {
|
|
148
|
+
override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {
|
|
149
149
|
const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()
|
|
150
150
|
BoundWitnessBuilder.validateGeneratedFields(generatedFields)
|
|
151
151
|
const fields: WithoutSchema<TBoundWitness> = {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|