@xyo-network/boundwitness-builder 2.90.23 → 2.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Builder.d.cts +2 -2
- package/dist/browser/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts +2 -2
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts +2 -2
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts +2 -2
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts +2 -2
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts +2 -2
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +15 -15
- package/src/Builder.ts +7 -7
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
package/dist/node/Builder.d.cts
CHANGED
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/node/Builder.d.mts
CHANGED
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/node/Builder.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-mod
|
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
9
9
|
readonly accounts?: AccountInstance[];
|
|
10
|
-
readonly destination?:
|
|
10
|
+
readonly destination?: Hash[];
|
|
11
11
|
readonly payloadHashes?: TBoundWitness['payload_hashes'];
|
|
12
12
|
readonly payloadSchemas?: TBoundWitness['payload_schemas'];
|
|
13
13
|
readonly payloads?: TPayload[];
|
|
@@ -48,7 +48,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
48
48
|
static previousHash<T extends BoundWitness>(boundWitness: T, address: Address): string | undefined;
|
|
49
49
|
protected static linkingFields<T extends BoundWitness = BoundWitness>(accounts: AccountInstance[], payloads?: Payload[], timestamp?: number): Promise<Omit<T, "schema" | "$meta" | "$hash">>;
|
|
50
50
|
protected static metaFields(dataHash: Hash, otherMeta?: JsonObject, accounts?: AccountInstance[], previousHashes?: (Hash | null)[], destination?: Address[], sourceQuery?: Hash): Promise<JsonObject>;
|
|
51
|
-
protected static signature<T extends BoundWitness>(payload: T, address: Address): string
|
|
51
|
+
protected static signature<T extends BoundWitness>(payload: T, address: Address): Lowercase<string>;
|
|
52
52
|
protected static signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]>;
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGnF,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEhH,MAAM,WAAW,0BAA0B,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO,CAC/H,SAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","PayloadBuilderBase","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","_buildMutex","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","Mutex","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,yBAA4C;AAC5C,oBAAyB;AACzB,iBAAkD;AAGlD,gCAAiD;AACjD,kBAA8C;AAC9C,6BAA0E;AAE1E,yBAAsB;AAef,IAAMA,uBAAN,MAAMA,6BAAmHC,0CAAAA;EAKtHC;EACAC;EACAC;EACAC,UAAyB,CAAA;EACzBC;EACAC;EACAC;EACAC;EACAC;EAERC,YAAYC,SAA+D;AACzE,UAAM;MAAE,GAAGA;MAASC,QAAQC;IAAmB,CAAA;AAC/C,UAAM,EAAEC,UAAUC,eAAeC,gBAAgBC,UAAUC,aAAaC,WAAWC,YAAW,IAAKT,WAAW,CAAC;AAC/G,SAAKV,YAAYa,YAAY,CAAA;AAC7B,SAAKT,iBAAiBU;AACtB,SAAKT,kBAAkBU;AACvB,SAAKT,YAAYU,YAAY,CAAA;AAC7B,SAAKT,eAAeU;AACpB,SAAKhB,eAAekB;AACpB,SAAKX,aAAaU,aAAa;EACjC;EAEA,IAAcE,YAAuB;AACnC,WAAO,KAAKpB,UAAUqB,IAAI,CAACC,YAAYA,QAAQC,QAAQC,YAAW,CAAA;EACpE;EAEA,IAAcT,iBAA2B;AACvC,WACE,KAAKV,mBACL,KAAKC,UAAUe,IAAI,CAACI,YAAAA;AAClB,iBAAOC,wBAASD,QAAQd,QAAQ,MAAM,KAAKgB,qBAAqBF,OAAAA,CAAAA;IAClE,CAAA;EAEJ;EAEA,IAAcG,sBAA8C;AAC1D,WAAO,KAAK5B,UAAUqB,IAAI,CAACC,YAAYA,QAAQO,qBAAqB,IAAA;EACtE;EAEA,IAAcC,iBAAkC;AAC9C,WAAO,KAAK9B,UAAUqB,IAAI,CAACC,YAAYA,QAAQS,gBAAgB,IAAA;EACjE;EAEA,IAAcb,YAAoB;AAChC,WAAQ,KAAKV,aAAa,OAAO,KAAKA,eAAe,WAAW,KAAKA,aAAawB,KAAKC,IAAG;EAC5F;EAEA,OAAOC,aAAqCT,SAAYF,SAAkB;AACxE,UAAMY,QAAQV,QAAQL,UAAUgB,QAAQb,OAAAA;AACxC,QAAIY,UAAU,IAAI;AAChB,YAAM,IAAIE,MAAM,iBAAA;IAClB;AACA,WAAOF;EACT;EAEA,aAAaG,MAA0C5B,SAAoD;AACzG,WAAO,MAAM,IAAIZ,qBAAoBY,OAAAA,EAAS4B,MAAK;EACrD;EAEA,aAAsBC,mBACpB5B,QACA6B,QACqC;AACrC,WAAO,MAAMzC,0CAAmBwC,mBAAmB5B,QAAQ6B,aAASC,+BAAkBD,MAAAA,IAAUE,MAAAA;EAClG;EAEA,aAAsBC,eACpBhC,QACA6B,QACAI,OACAC,OACA3B,WACsB;AACtB,WAAO,MAAMnB,0CAAmB4C,eAAehC,QAAQ6B,QAAQI,OAAOC,OAAO3B,SAAAA;EAC/E;EAEA,OAAOa,aAAqCe,cAAiBvB,SAAkB;AAzGjF;AA0GI,YAAOuB,kBAAaC,gBAAgB,KAAKb,aAAaY,cAAcvB,OAAAA,CAAAA,MAA7DuB,mBAAwEtB;EACjF;EAEA,aAAuBwB,cACrBnC,UACAG,UACAE,YAAYc,KAAKC,IAAG,GACpB;AACA,UAAMb,YAAYP,SAASQ,IAAI,CAACC,gBAAY2B,+BAAmB3B,QAAQ4B,cAAc;MAAEC,QAAQ;IAAM,CAAA,CAAA;AACrG,UAAMJ,kBAAkBlC,SAASQ,IAAI,CAACC,YAAYA,QAAQS,gBAAgB,IAAA;AAC1E,UAAMqB,iBAAiBpC,WAAW,MAAMqC,sCAAeC,WAAWtC,QAAAA,IAAY,CAAA;AAC9E,UAAMuC,kBAAkBvC,qCAAUK,IAAI,CAAC,EAAEV,OAAM,MAAOA;AACtD,WAAO;MAAES;MAAWgC;MAAgBG;MAAiBR;MAAiB7B;IAAU;EAClF;EAEA,aAAgCsC,WAC9BC,UACAC,WACA7C,UACAiB,gBACAX,aACAF,aACqB;AACrB,UAAM0C,OAAmB;MAAE,GAAI,MAAM5D,0CAAmByD,WAAWC,UAAUC,SAAAA;IAAY;AAEzF,SAAI7C,qCAAU+C,YAAU9B,iDAAgB8B,SAAQ;AAC9ClC,kCAASb,SAAS+C,WAAW9B,eAAe8B,QAAQ,mDAAA;AACpDD,WAAKE,aAAa,MAAM,KAAKA,WAAWhD,UAAU4C,UAAU3B,cAAAA;IAC9D;AAEA,QAAIb,aAAa;AACf0C,WAAK1C,cAAcA;IACrB;AAEA,QAAIE,aAAa;AACfwC,WAAKxC,cAAcA;IACrB;AAEA,WAAOwC;EACT;EAEA,OAAiBG,UAAkCrC,SAAYF,SAAkB;AAC/E,WAAOE,QAAQmB,MAAMiB,WAAW,KAAK3B,aAAaT,SAASF,OAAAA,CAAAA;EAC7D;EAEA,aAAuBsC,WAAWhD,UAA6BkD,MAAYjC,gBAAkE;AAC3I,UAAMkC,gBAAYC,kCAAcF,IAAAA;AAChC,UAAMG,sBAAsBpC,iDAAgBT,IAAI,CAAC8C,OAAQA,SAAKC,iCAAaD,EAAAA,IAAMzB;AACjF,WAAO,MAAM2B,QAAQC,IAAIzD,SAASQ,IAAI,OAAOC,SAASa,cAAUc,+BAAmB,MAAM3B,QAAQiD,KAAKP,WAAWE,oBAAoB/B,KAAAA,CAAM,CAAA,CAAA,CAAA;EAC7I;EAEA,OAAeqC,sBAAsBC,IAA8D;AA7JrG;AA8JI/C,kCAAS+C,QAAGrB,mBAAHqB,mBAAmBb,cAAWa,QAAGlB,oBAAHkB,mBAAoBb,SAAQ,8BAAA;AACnElC,gCAAS,CAAC+C,GAAGrB,eAAesB,KAAK,CAACX,SAAS,CAACA,IAAAA,GAAO,MAAM,uBAAA;AACzDrC,gCAAS,CAAC+C,GAAGlB,gBAAgBmB,KAAK,CAAC/D,WAAW,CAACA,MAAAA,GAAS,wBAAA;EAC1D;EAEA,MAAM2B,QAA2F;AAC/F,WAAO,MAAMxC,qBAAoB6E,YAAYC,aAAa,YAAA;AApK9D;AAqKM,YAAMrC,qBAAsB,MAAM,KAAKA,mBAAkB;AACzD,YAAMM,SAAS,MAAMQ,sCAAef,MAAMC,kBAAAA,GAAqBM;AAC/D,YAAMD,QAAQ,MAAM,KAAKY,WAAWX,KAAAA;AAEpC,YAAMgC,MAAM;QACV,GAAGtC;QACHM;QACAD;MACF;AACA,aAAO;QACLiC;QACA,MAAMR,QAAQC,KAAI,UAAKhE,cAAL,mBAAgBe,IAAI,CAACI,YAAY4B,sCAAef,MAAMb,OAAAA,EAAAA;QACxE,MAAM4C,QAAQC,KAAI,UAAKnE,YAAL,mBAAckB,IAAI,CAACyD,UAAUzB,sCAAef,MAAMwC,KAAAA,EAAAA;;IAExE,CAAA;EACF;EAEA,MAAevC,qBAAsE;AACnF,UAAMC,SAAS,MAAM,KAAKQ,cAAa;AACvC,UAAM+B,SAAS,MAAMjF,qBAAoByC,mBAAkC,KAAKyC,SAASxC,MAAAA;AAEzF1C,yBAAoB0E,sBAAsBO,MAAAA;AAE1C,WAAOA;EACT;EAEAD,MAAMrD,SAAuB;AAC3BC,gCAAS,KAAKxB,iBAAiBwC,QAAW,4CAAA;AAC1C,QAAIjB,SAAS;AACX,WAAKtB,QAAQ8E,SAAKvD,4BAASwD,wBAAWzD,OAAAA,CAAAA,CAAAA;IACxC;AACA,WAAO;EACT;EAEA0D,OAAOA,QAAiC;AACtC,QAAIA,QAAQ;AACVA,aAAO9D,IAAI,CAACyD,UAAAA;AACV,YAAIA,UAAU,MAAM;AAClB,eAAKA,MAAMA,KAAAA;QACb;MACF,CAAA;IACF;AACA,WAAO;EACT;EAEAM,OAAOA,QAAgBzE,QAAkB;AACvCe,gCAAS,KAAKV,SAAS4C,WAAW,GAAG,8CAAA;AACrC,SAAKxD,iBAAiBgF;AACtB,SAAK/E,kBAAkBM;AACvB,WAAO;EACT;EAEAc,QAAQA,SAAoB;AAC1BC,gCAAS,KAAKtB,mBAAmBsC,QAAW,8CAAA;AAC5C,QAAIjB,SAAS;AACX,WAAKnB,UAAU2E,SAAKvD,4BAASwD,wBAAqBzD,OAAAA,CAAAA,CAAAA;IACpD;AACA,WAAO;EACT;EAEAT,SAASA,UAAgC;AACvC,QAAIA;AACFA,eAASK,IAAI,CAACI,YAAAA;AACZ,YAAIA,YAAY,MAAM;AACpB,eAAKA,QAAQA,OAAAA;QACf;MACF,CAAA;AACF,WAAO;EACT;EAEAR,YAAYoE,OAAc;AACxB,SAAK9E,eAAe8E,+BAAO7D;AAC3B,WAAO;EACT;EAEA8D,QAAQhE,SAA0B;AAhPpC;AAiPI,eAAKtB,cAAL,mBAAgBiF,KAAK3D;AACrB,WAAO;EACT;EAEAiE,UAAU1E,UAA6B;AArPzC;AAsPI,eAAKb,cAAL,mBAAgBiF,KAAAA,GAAQpE;AACxB,WAAO;EACT;EAEA,MAAyB2C,WAAWC,UAAqC;AACvE,WAAO,MAAM3D,qBAAoB0D,WAAWC,UAAU,KAAK+B,QAAQ,KAAKxF,WAAW,KAAK8B,gBAAgB,KAAK7B,cAAc,KAAKM,YAAY;EAC9I;EAEA,MAAgBsD,WAAW4B,OAAa3D,gBAAkE;AACxG,UAAMiC,WAAOE,kCAAcwB,KAAAA;AAC3B,UAAMvB,sBAAsBpC,eAAeT,IAAI,CAAC8C,OAAQA,SAAKC,iCAAaD,EAAAA,IAAMzB,MAAAA;AAChF,WAAO,MAAM2B,QAAQC,IAAI,KAAKtE,UAAUqB,IAAI,OAAOC,SAASa,cAAUc,+BAAmB,MAAM3B,QAAQiD,KAAKR,MAAMG,oBAAoB/B,KAAAA,CAAM,CAAA,CAAA,CAAA;EAC9I;EAEA,MAAca,gBAAgB;AAC5B,WAAO,MAAMlD,qBAAoBkD,cAA6B,KAAKhD,WAAW,KAAKM,WAAW,KAAKY,SAAS;EAC9G;EAEQS,qBAAqBF,SAAkB;AAC7C,WAAO;EAA4BiE,KAAKC,UAAUlE,SAAS,MAAM,CAAA,CAAA;EACnE;AACF;AAnPgI1B;AAI9H,cAJWD,sBAIa6E,eAAc,IAAIiB,yBAAAA;AAJrC,IAAM9F,sBAAN;;;ACxBP,IAAA+F,iBAAyB;AACzB,IAAAC,6BAA2D;AAC3D,qBAA+B;AAKxB,IAAMC,4BAAN,MAAMA,kCAGHC,oBAAAA;EACAC;EAER,MAAeC,qBAAsE;AACnF,WAAO;MACL,GAAI,MAAM,MAAMA,mBAAAA;MAChBC,WAAOC,yBAAS,KAAKH,QAAQ,oBAAA,EAAsBI;MACnDC,QAAQC;IACV;EACF;EAEA,MAAeC,iBAAmD;AAChE,WAAO;MACL,GAAI,MAAM,MAAMA,eAAAA;MAChBL,WAAOC,yBAAS,KAAKH,QAAQ,oBAAA,EAAsBI;MACnDC,QAAQC;IACV;EACF;EAEA,MAAMJ,MAAwBA,OAAU;AACtC,SAAKF,SAAS,MAAMQ,8BAAeC,MAAMP,KAAAA;AACzC,UAAM,KAAKQ,QAAQ,KAAKV,MAAM;AAC9B,WAAO;EACT;AACF;AAxBUD;AAHH,IAAMD,2BAAN;","names":["BoundWitnessBuilder","PayloadBuilderBase","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","_buildMutex","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","Mutex","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","_buildMutex","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","Mutex","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\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 previousHashBuffers(): (ArrayBuffer | 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 protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\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 async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\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 = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\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 PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\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 errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\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 payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","_buildMutex","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","Mutex","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
package/package.json
CHANGED
|
@@ -10,24 +10,24 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/arraybuffer": "^
|
|
14
|
-
"@xylabs/assert": "^
|
|
15
|
-
"@xylabs/hex": "^
|
|
16
|
-
"@xylabs/object": "^
|
|
17
|
-
"@xyo-network/account-model": "~2.
|
|
18
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
19
|
-
"@xyo-network/hash": "~2.
|
|
20
|
-
"@xyo-network/payload": "~2.
|
|
21
|
-
"@xyo-network/payload-builder": "~2.
|
|
22
|
-
"@xyo-network/payload-model": "~2.
|
|
13
|
+
"@xylabs/arraybuffer": "^3.0.0",
|
|
14
|
+
"@xylabs/assert": "^3.0.0",
|
|
15
|
+
"@xylabs/hex": "^3.0.0",
|
|
16
|
+
"@xylabs/object": "^3.0.0",
|
|
17
|
+
"@xyo-network/account-model": "~2.91.0",
|
|
18
|
+
"@xyo-network/boundwitness-model": "~2.91.0",
|
|
19
|
+
"@xyo-network/hash": "~2.91.0",
|
|
20
|
+
"@xyo-network/payload": "~2.91.0",
|
|
21
|
+
"@xyo-network/payload-builder": "~2.91.0",
|
|
22
|
+
"@xyo-network/payload-model": "~2.91.0",
|
|
23
23
|
"async-mutex": "^0.4.1"
|
|
24
24
|
},
|
|
25
25
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@xylabs/object": "^
|
|
28
|
-
"@xylabs/ts-scripts-yarn3": "^3.
|
|
29
|
-
"@xylabs/tsconfig": "^3.
|
|
30
|
-
"@xyo-network/account": "~2.
|
|
27
|
+
"@xylabs/object": "^3.0.0",
|
|
28
|
+
"@xylabs/ts-scripts-yarn3": "^3.4.1",
|
|
29
|
+
"@xylabs/tsconfig": "^3.4.1",
|
|
30
|
+
"@xyo-network/account": "~2.91.0",
|
|
31
31
|
"typescript": "^5.3.3"
|
|
32
32
|
},
|
|
33
33
|
"exports": {
|
|
@@ -68,6 +68,6 @@
|
|
|
68
68
|
},
|
|
69
69
|
"sideEffects": false,
|
|
70
70
|
"types": "dist/node/index.d.ts",
|
|
71
|
-
"version": "2.
|
|
71
|
+
"version": "2.91.0",
|
|
72
72
|
"type": "module"
|
|
73
73
|
}
|
package/src/Builder.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payl
|
|
|
14
14
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>
|
|
15
15
|
extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
16
16
|
readonly accounts?: AccountInstance[]
|
|
17
|
-
readonly destination?:
|
|
17
|
+
readonly destination?: Hash[]
|
|
18
18
|
readonly payloadHashes?: TBoundWitness['payload_hashes']
|
|
19
19
|
readonly payloadSchemas?: TBoundWitness['payload_schemas']
|
|
20
20
|
readonly payloads?: TPayload[]
|
|
@@ -28,11 +28,11 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
|
|
|
28
28
|
> {
|
|
29
29
|
private static readonly _buildMutex = new Mutex()
|
|
30
30
|
private _accounts: AccountInstance[]
|
|
31
|
-
private _destination?:
|
|
32
|
-
private _errorHashes?:
|
|
31
|
+
private _destination?: Hash[]
|
|
32
|
+
private _errorHashes?: Hash[]
|
|
33
33
|
private _errors: ModuleError[] = []
|
|
34
|
-
private _payloadHashes?:
|
|
35
|
-
private _payloadSchemas?:
|
|
34
|
+
private _payloadHashes?: Hash[]
|
|
35
|
+
private _payloadSchemas?: Schema[]
|
|
36
36
|
private _payloads: TPayload[]
|
|
37
37
|
private _sourceQuery?: Hash
|
|
38
38
|
private _timestamp: boolean | number
|
|
@@ -50,7 +50,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
protected get addresses(): Address[] {
|
|
53
|
-
return this._accounts.map((account) => account.address.toLowerCase())
|
|
53
|
+
return this._accounts.map((account) => account.address.toLowerCase()) as Address[]
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
protected get payloadSchemas(): string[] {
|
|
@@ -234,7 +234,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
sourceQuery(query?: Hash) {
|
|
237
|
-
this._sourceQuery = query?.toLowerCase()
|
|
237
|
+
this._sourceQuery = query?.toLowerCase() as Hash
|
|
238
238
|
return this
|
|
239
239
|
}
|
|
240
240
|
|