@xyo-network/boundwitness-builder 2.75.0 → 2.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/browser/Builder.d.cts +41 -0
  2. package/dist/browser/Builder.d.cts.map +1 -0
  3. package/dist/browser/Builder.js +3 -4
  4. package/dist/browser/Builder.js.map +1 -1
  5. package/dist/browser/Query/QueryBoundWitness.d.cts +17 -0
  6. package/dist/browser/Query/QueryBoundWitness.d.cts.map +1 -0
  7. package/dist/browser/Query/QueryBoundWitness.js +2 -3
  8. package/dist/browser/Query/QueryBoundWitness.js.map +1 -1
  9. package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts +11 -0
  10. package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts.map +1 -0
  11. package/dist/browser/Query/QueryBoundWitnessBuilder.js +8 -150
  12. package/dist/browser/Query/QueryBoundWitnessBuilder.js.map +1 -1
  13. package/dist/browser/Query/QueryBoundWitnessValidator.d.cts +11 -0
  14. package/dist/browser/Query/QueryBoundWitnessValidator.d.cts.map +1 -0
  15. package/dist/browser/Query/QueryBoundWitnessValidator.js +4 -10
  16. package/dist/browser/Query/QueryBoundWitnessValidator.js.map +1 -1
  17. package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts +18 -0
  18. package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts.map +1 -0
  19. package/dist/browser/Query/QueryBoundWitnessWrapper.js +10 -64
  20. package/dist/browser/Query/QueryBoundWitnessWrapper.js.map +1 -1
  21. package/dist/browser/Query/index.d.cts +5 -0
  22. package/dist/browser/Query/index.d.cts.map +1 -0
  23. package/dist/browser/Query/index.js +4 -270
  24. package/dist/browser/Query/index.js.map +1 -1
  25. package/dist/browser/index.d.cts +3 -0
  26. package/dist/browser/index.d.cts.map +1 -0
  27. package/dist/browser/index.js +2 -269
  28. package/dist/browser/index.js.map +1 -1
  29. package/dist/docs.json +18622 -0
  30. package/dist/node/Builder.d.cts +41 -0
  31. package/dist/node/Builder.d.cts.map +1 -0
  32. package/dist/node/Builder.js +15 -9
  33. package/dist/node/Builder.js.map +1 -1
  34. package/dist/node/Builder.mjs +14 -9
  35. package/dist/node/Builder.mjs.map +1 -1
  36. package/dist/node/Query/QueryBoundWitness.d.cts +17 -0
  37. package/dist/node/Query/QueryBoundWitness.d.cts.map +1 -0
  38. package/dist/node/Query/QueryBoundWitness.js +4 -2
  39. package/dist/node/Query/QueryBoundWitness.js.map +1 -1
  40. package/dist/node/Query/QueryBoundWitness.mjs +3 -2
  41. package/dist/node/Query/QueryBoundWitness.mjs.map +1 -1
  42. package/dist/node/Query/QueryBoundWitnessBuilder.d.cts +11 -0
  43. package/dist/node/Query/QueryBoundWitnessBuilder.d.cts.map +1 -0
  44. package/dist/node/Query/QueryBoundWitnessBuilder.js +155 -7
  45. package/dist/node/Query/QueryBoundWitnessBuilder.js.map +1 -1
  46. package/dist/node/Query/QueryBoundWitnessBuilder.mjs +155 -8
  47. package/dist/node/Query/QueryBoundWitnessBuilder.mjs.map +1 -1
  48. package/dist/node/Query/QueryBoundWitnessValidator.d.cts +11 -0
  49. package/dist/node/Query/QueryBoundWitnessValidator.d.cts.map +1 -0
  50. package/dist/node/Query/QueryBoundWitnessValidator.js +13 -6
  51. package/dist/node/Query/QueryBoundWitnessValidator.js.map +1 -1
  52. package/dist/node/Query/QueryBoundWitnessValidator.mjs +11 -5
  53. package/dist/node/Query/QueryBoundWitnessValidator.mjs.map +1 -1
  54. package/dist/node/Query/QueryBoundWitnessWrapper.d.cts +18 -0
  55. package/dist/node/Query/QueryBoundWitnessWrapper.d.cts.map +1 -0
  56. package/dist/node/Query/QueryBoundWitnessWrapper.js +66 -11
  57. package/dist/node/Query/QueryBoundWitnessWrapper.js.map +1 -1
  58. package/dist/node/Query/QueryBoundWitnessWrapper.mjs +64 -10
  59. package/dist/node/Query/QueryBoundWitnessWrapper.mjs.map +1 -1
  60. package/dist/node/Query/index.d.cts +5 -0
  61. package/dist/node/Query/index.d.cts.map +1 -0
  62. package/dist/node/Query/index.js +287 -9
  63. package/dist/node/Query/index.js.map +1 -1
  64. package/dist/node/Query/index.mjs +275 -4
  65. package/dist/node/Query/index.mjs.map +1 -1
  66. package/dist/node/index.d.cts +3 -0
  67. package/dist/node/index.d.cts.map +1 -0
  68. package/dist/node/index.js +287 -5
  69. package/dist/node/index.js.map +1 -1
  70. package/dist/node/index.mjs +274 -2
  71. package/dist/node/index.mjs.map +1 -1
  72. package/package.json +17 -17
@@ -0,0 +1,41 @@
1
+ import { AccountInstance } from '@xyo-network/account-model';
2
+ import { BoundWitness } from '@xyo-network/boundwitness-model';
3
+ import { Data } from '@xyo-network/core';
4
+ import { ModuleError, Payload } from '@xyo-network/payload-model';
5
+ import { Logger } from '@xyo-network/shared';
6
+ export interface BoundWitnessBuilderConfig {
7
+ /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */
8
+ readonly inlinePayloads?: boolean;
9
+ readonly meta?: boolean;
10
+ readonly timestamp?: boolean;
11
+ }
12
+ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{
13
+ schema: string;
14
+ }> = BoundWitness, TPayload extends Payload = Payload> {
15
+ readonly config: BoundWitnessBuilderConfig;
16
+ protected readonly logger?: Logger | undefined;
17
+ private static readonly _buildMutex;
18
+ private _accounts;
19
+ private _errorHashes;
20
+ private _errors;
21
+ private _payloadHashes;
22
+ private _payloadSchemas;
23
+ private _payloads;
24
+ private _timestamp;
25
+ constructor(config?: BoundWitnessBuilderConfig, logger?: Logger | undefined);
26
+ private get _payload_schemas();
27
+ build(meta?: boolean): Promise<[TBoundWitness, TPayload[], ModuleError[]]>;
28
+ error(payload?: ModuleError): this;
29
+ errors(errors?: (ModuleError | null)[]): this;
30
+ hashableFields(): Promise<TBoundWitness>;
31
+ hashes(hashes: string[], schema: string[]): this;
32
+ payload(payload?: TPayload): this;
33
+ payloads(payloads?: (TPayload | null)[]): this;
34
+ witness(account: AccountInstance): this;
35
+ witnesses(accounts: AccountInstance[]): this;
36
+ protected signatures(_hash: string, previousHashes: (string | Data | undefined)[]): Promise<string[]>;
37
+ private getPayloadHashes;
38
+ private inlinePayloads;
39
+ private missingSchemaMessage;
40
+ }
41
+ //# sourceMappingURL=Builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,IAAI,EAA6B,MAAM,mBAAmB,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,WAAW,yBAAyB;IACxC,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,mBAAmB,CAAC,aAAa,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO;IAWtI,QAAQ,CAAC,MAAM,EAAE,yBAAyB;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAX5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAc;IACjD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAGpB,MAAM,GAAE,yBAAqD,EACnD,MAAM,CAAC,oBAAQ;IAGpC,OAAO,KAAK,gBAAgB,GAO3B;IAEK,KAAK,CAAC,IAAI,UAAQ,GAAG,OAAO,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IA6B9E,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW;IAS3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE;IAShC,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IA0B9C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAOzC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ;IAS1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;IASvC,OAAO,CAAC,OAAO,EAAE,eAAe;IAKhC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE;cAKrB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE;YAOzE,gBAAgB;IAI9B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,oBAAoB;CAG7B"}
@@ -1,4 +1,3 @@
1
- // src/Builder.ts
2
1
  import { assertEx } from "@xylabs/assert";
3
2
  import { Buffer } from "@xylabs/buffer";
4
3
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
@@ -6,7 +5,7 @@ import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
6
5
  import { PayloadHasher, sortFields } from "@xyo-network/core";
7
6
  import { PayloadWrapper } from "@xyo-network/payload";
8
7
  import { Mutex } from "async-mutex";
9
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
8
+ class BoundWitnessBuilder {
10
9
  constructor(config = { inlinePayloads: false }, logger) {
11
10
  this.config = config;
12
11
  this.logger = logger;
@@ -25,7 +24,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
25
24
  });
26
25
  }
27
26
  async build(meta = false) {
28
- return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
27
+ return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {
29
28
  const hashableFields = await this.hashableFields();
30
29
  const _hash = await BoundWitnessWrapper.hashAsync(hashableFields);
31
30
  const previousHashes = this._accounts.map((account) => account.previousHash);
@@ -133,7 +132,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
133
132
  return `Builder: Missing Schema
134
133
  ${JSON.stringify(payload, null, 2)}`;
135
134
  }
136
- };
135
+ }
137
136
  export {
138
137
  BoundWitnessBuilder
139
138
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\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 const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\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 async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\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 const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\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 async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,17 @@
1
+ import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
2
+ import { Payload } from '@xyo-network/payload-model';
3
+ export type QueryBoundWitnessSchema = BoundWitnessSchema;
4
+ export declare const QueryBoundWitnessSchema: QueryBoundWitnessSchema;
5
+ export type QueryBoundWitness = BoundWitness<{
6
+ query: string;
7
+ resultSet?: string;
8
+ schema: BoundWitnessSchema;
9
+ }>;
10
+ export declare const isQueryBoundWitness: (x?: Payload | null) => x is import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/boundwitness-model").BoundWitnessFields & {
11
+ query: string;
12
+ resultSet?: string | undefined;
13
+ schema: BoundWitnessSchema;
14
+ }, "schema"> & {
15
+ schema: "network.xyo.boundwitness";
16
+ };
17
+ //# sourceMappingURL=QueryBoundWitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBoundWitness.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAkB,MAAM,iCAAiC,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,CAAA;AACxD,eAAO,MAAM,uBAAuB,EAAE,uBAA4C,CAAA;AAElF,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAAC,CAAA;AAEF,eAAO,MAAM,mBAAmB,OAAQ,OAAO,GAAG,IAAI;WAL7C,MAAM;;YAEL,kBAAkB;;;CAGyH,CAAA"}
@@ -1,7 +1,6 @@
1
- // src/Query/QueryBoundWitness.ts
2
1
  import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
3
- var QueryBoundWitnessSchema = BoundWitnessSchema;
4
- var isQueryBoundWitness = (x) => isBoundWitness(x) && x?.query !== void 0;
2
+ const QueryBoundWitnessSchema = BoundWitnessSchema;
3
+ const isQueryBoundWitness = (x) => isBoundWitness(x) && x?.query !== void 0;
5
4
  export {
6
5
  QueryBoundWitnessSchema,
7
6
  isQueryBoundWitness
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":";AAAA,SAAuB,oBAAoB,sBAAsB;AAI1D,IAAM,0BAAmD;AAQzD,IAAM,sBAAsB,CAAC,MAA+C,eAAe,CAAC,KAAM,GAAyB,UAAU;","names":[]}
1
+ {"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":"AAAA,SAAuB,oBAAoB,sBAAsB;AAI1D,MAAM,0BAAmD;AAQzD,MAAM,sBAAsB,CAAC,MAA+C,eAAe,CAAC,KAAM,GAAyB,UAAU;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { PayloadSetPayload, Query } from '@xyo-network/payload-model';
2
+ import { BoundWitnessBuilder } from '../Builder';
3
+ import { QueryBoundWitness } from './QueryBoundWitness';
4
+ export declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
5
+ private _query;
6
+ private _resultSet;
7
+ hashableFields(): Promise<TBoundWitness>;
8
+ query<T extends TQuery>(query: T): this;
9
+ resultSet<T extends PayloadSetPayload>(payloadSet: T): this;
10
+ }
11
+ //# sourceMappingURL=QueryBoundWitnessBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBoundWitnessBuilder.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAA;AAEhF,qBAAa,wBAAwB,CACnC,aAAa,SAAS,iBAAiB,GAAG,iBAAiB,EAC3D,MAAM,SAAS,KAAK,GAAG,KAAK,CAC5B,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,UAAU,CAA+C;IAElD,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IAQvD,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC;IAMhC,SAAS,CAAC,CAAC,SAAS,iBAAiB,EAAE,UAAU,EAAE,CAAC;CAKrD"}
@@ -1,170 +1,28 @@
1
- // src/Query/QueryBoundWitnessBuilder.ts
2
- import { assertEx as assertEx2 } from "@xylabs/assert";
3
- import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
4
-
5
- // src/Builder.ts
6
1
  import { assertEx } from "@xylabs/assert";
7
- import { Buffer } from "@xylabs/buffer";
8
- import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
9
- import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
10
- import { PayloadHasher, sortFields } from "@xyo-network/core";
11
- import { PayloadWrapper } from "@xyo-network/payload";
12
- import { Mutex } from "async-mutex";
13
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
14
- constructor(config = { inlinePayloads: false }, logger) {
15
- this.config = config;
16
- this.logger = logger;
17
- }
18
- static _buildMutex = new Mutex();
19
- _accounts = [];
20
- _errorHashes;
21
- _errors = [];
22
- _payloadHashes;
23
- _payloadSchemas;
24
- _payloads = [];
25
- _timestamp = Date.now();
26
- get _payload_schemas() {
27
- return this._payloadSchemas ?? this._payloads.map((payload) => {
28
- return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
29
- });
30
- }
31
- async build(meta = false) {
32
- return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
33
- const hashableFields = await this.hashableFields();
34
- const _hash = await BoundWitnessWrapper.hashAsync(hashableFields);
35
- const previousHashes = this._accounts.map((account) => account.previousHash);
36
- const ret = {
37
- ...hashableFields,
38
- _signatures: await this.signatures(_hash, previousHashes)
39
- };
40
- if (meta ?? this.config?.meta) {
41
- const bwWithMeta = ret;
42
- bwWithMeta._client = "js";
43
- bwWithMeta._hash = _hash;
44
- bwWithMeta._timestamp = this._timestamp;
45
- }
46
- if (this.config.inlinePayloads) {
47
- const anyRet = ret;
48
- anyRet._payloads = this.inlinePayloads();
49
- }
50
- return [ret, this._payloads, this._errors];
51
- });
52
- }
53
- error(payload) {
54
- const unwrappedPayload = PayloadWrapper.unwrap(payload);
55
- assertEx(this._errorHashes === void 0, "Can not set errors when hashes already set");
56
- if (unwrappedPayload) {
57
- this._errors.push(assertEx(sortFields(unwrappedPayload)));
58
- }
59
- return this;
60
- }
61
- errors(errors) {
62
- errors?.forEach((error) => {
63
- if (error !== null) {
64
- this.error(error);
65
- }
66
- });
67
- return this;
68
- }
69
- async hashableFields() {
70
- const addresses = this._accounts.map((account) => account.address);
71
- const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
72
- const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
73
- const payload_schemas = assertEx(this._payload_schemas, "Missing payload_schemas");
74
- const result = {
75
- addresses: assertEx(addresses, "Missing addresses"),
76
- payload_hashes,
77
- payload_schemas,
78
- previous_hashes,
79
- schema: BoundWitnessSchema
80
- };
81
- assertEx(result.payload_hashes?.length === result.payload_schemas?.length, "Payload hash/schema mismatch");
82
- assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
83
- assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
84
- if (this.config.timestamp ?? true) {
85
- result.timestamp = this._timestamp;
86
- }
87
- return result;
88
- }
89
- hashes(hashes, schema) {
90
- assertEx(this.payloads.length === 0, "Can not set hashes when payloads already set");
91
- this._payloadHashes = hashes;
92
- this._payloadSchemas = schema;
93
- return this;
94
- }
95
- payload(payload) {
96
- const unwrappedPayload = PayloadWrapper.unwrap(payload);
97
- assertEx(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
98
- if (unwrappedPayload) {
99
- this._payloads.push(assertEx(sortFields(unwrappedPayload)));
100
- }
101
- return this;
102
- }
103
- payloads(payloads) {
104
- payloads?.forEach((payload) => {
105
- if (payload !== null) {
106
- this.payload(payload);
107
- }
108
- });
109
- return this;
110
- }
111
- witness(account) {
112
- this._accounts?.push(account);
113
- return this;
114
- }
115
- witnesses(accounts) {
116
- this._accounts?.push(...accounts);
117
- return this;
118
- }
119
- async signatures(_hash, previousHashes) {
120
- const hash = Buffer.from(_hash, "hex");
121
- return await Promise.all(
122
- this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString("hex"))
123
- );
124
- }
125
- async getPayloadHashes() {
126
- return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload)));
127
- }
128
- inlinePayloads() {
129
- return this._payloads.map((payload, index) => {
130
- return {
131
- ...payload,
132
- schema: this._payload_schemas[index]
133
- };
134
- });
135
- }
136
- missingSchemaMessage(payload) {
137
- return `Builder: Missing Schema
138
- ${JSON.stringify(payload, null, 2)}`;
139
- }
140
- };
141
-
142
- // src/Query/QueryBoundWitness.ts
143
- import { BoundWitnessSchema as BoundWitnessSchema2, isBoundWitness } from "@xyo-network/boundwitness-model";
144
- var QueryBoundWitnessSchema = BoundWitnessSchema2;
145
-
146
- // src/Query/QueryBoundWitnessBuilder.ts
147
- var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
2
+ import { PayloadWrapper } from "@xyo-network/payload-wrapper";
3
+ import { BoundWitnessBuilder } from "../Builder";
4
+ import { QueryBoundWitnessSchema } from "./QueryBoundWitness";
5
+ class QueryBoundWitnessBuilder extends BoundWitnessBuilder {
148
6
  _query;
149
7
  _resultSet;
150
8
  async hashableFields() {
151
9
  return {
152
10
  ...await super.hashableFields(),
153
- query: assertEx2(await this._query?.hashAsync(), "No Query Specified"),
11
+ query: assertEx(await this._query?.hashAsync(), "No Query Specified"),
154
12
  schema: QueryBoundWitnessSchema
155
13
  };
156
14
  }
157
15
  query(query) {
158
- this._query = PayloadWrapper2.wrap(query);
16
+ this._query = PayloadWrapper.wrap(query);
159
17
  this.payload(this._query.payload());
160
18
  return this;
161
19
  }
162
20
  resultSet(payloadSet) {
163
- this._resultSet = PayloadWrapper2.wrap(payloadSet);
21
+ this._resultSet = PayloadWrapper.wrap(payloadSet);
164
22
  this.payload(this._resultSet.payload());
165
23
  return this;
166
24
  }
167
- };
25
+ }
168
26
  export {
169
27
  QueryBoundWitnessBuilder
170
28
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Query/QueryBoundWitnessBuilder.ts","../../../src/Builder.ts","../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n\n resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\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 const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\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 async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":"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","names":["assertEx","PayloadWrapper","BoundWitnessSchema","assertEx","PayloadWrapper"]}
1
+ {"version":3,"sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n\n resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAEzB,SAAS,sBAAsB;AAE/B,SAAS,2BAA2B;AACpC,SAA4B,+BAA+B;AAEpD,MAAM,iCAGH,oBAAmC;AAAA,EACnC;AAAA,EACA;AAAA,EAER,MAAe,iBAAyC;AACtD,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,eAAe;AAAA,MAC/B,OAAO,SAAS,MAAM,KAAK,QAAQ,UAAU,GAAG,oBAAoB;AAAA,MACpE,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAwB,OAAU;AAChC,SAAK,SAAS,eAAe,KAAK,KAAK;AACvC,SAAK,QAAQ,KAAK,OAAO,QAAQ,CAAC;AAClC,WAAO;AAAA,EACT;AAAA,EAEA,UAAuC,YAAe;AACpD,SAAK,aAAa,eAAe,KAAK,UAAU;AAChD,SAAK,QAAQ,KAAK,WAAW,QAAQ,CAAC;AACtC,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator';
2
+ import { Query } from '@xyo-network/payload-model';
3
+ import { QueryBoundWitness } from './QueryBoundWitness';
4
+ export declare class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {
5
+ private _query;
6
+ protected get expectedSchema(): string;
7
+ static isQueryBoundWitnessValidator(obj: unknown): boolean;
8
+ validate(): Promise<Error[]>;
9
+ validateResultSet(): Promise<Error[]>;
10
+ }
11
+ //# sourceMappingURL=QueryBoundWitnessValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBoundWitnessValidator.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAG3E,OAAO,EAAqB,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAGrE,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAA;AAChF,qBAAa,0BAA0B,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,qBAAqB,CAAC,iBAAiB,CAAC;IAC/G,OAAO,CAAC,MAAM,CAA+B;IAE7C,cAAuB,cAAc,IAAI,MAAM,CAE9C;IAED,MAAM,CAAC,4BAA4B,CAAC,GAAG,EAAE,OAAO;IAIjC,QAAQ;IAOjB,iBAAiB;CAwBxB"}
@@ -1,22 +1,16 @@
1
- // src/Query/QueryBoundWitnessValidator.ts
2
1
  import { assertEx } from "@xylabs/assert";
3
2
  import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
4
3
  import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
5
4
  import { handleError } from "@xyo-network/error";
6
5
  import { PayloadWrapper } from "@xyo-network/payload-wrapper";
7
-
8
- // src/Query/QueryBoundWitness.ts
9
- import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
10
- var QueryBoundWitnessSchema = BoundWitnessSchema;
11
-
12
- // src/Query/QueryBoundWitnessValidator.ts
13
- var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends BoundWitnessValidator {
6
+ import { QueryBoundWitnessSchema } from "./QueryBoundWitness";
7
+ class QueryBoundWitnessValidator extends BoundWitnessValidator {
14
8
  _query;
15
9
  get expectedSchema() {
16
10
  return QueryBoundWitnessSchema;
17
11
  }
18
12
  static isQueryBoundWitnessValidator(obj) {
19
- return obj?.constructor === _QueryBoundWitnessValidator;
13
+ return obj?.constructor === QueryBoundWitnessValidator;
20
14
  }
21
15
  async validate() {
22
16
  return [
@@ -48,7 +42,7 @@ var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends Bound
48
42
  }
49
43
  return errors;
50
44
  }
51
- };
45
+ }
52
46
  export {
53
47
  QueryBoundWitnessValidator
54
48
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Query/QueryBoundWitnessValidator.ts","../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { handleError } from '@xyo-network/error'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\nexport class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {\n private _query: PayloadWrapper<T> | undefined\n\n protected override get expectedSchema(): string {\n return QueryBoundWitnessSchema\n }\n\n static isQueryBoundWitnessValidator(obj: unknown) {\n return (obj as QueryBoundWitnessValidator)?.constructor === QueryBoundWitnessValidator\n }\n\n override async validate() {\n return [\n ...(await super.validate()),\n // ...this.validateResultSet()\n ]\n }\n\n async validateResultSet() {\n const errors: Error[] = []\n try {\n const resultSetHash = assertEx(this.obj.resultSet, 'Missing ResultSet')\n const wrapper = BoundWitnessWrapper.parse(this.obj)\n const resultSet = PayloadWrapper.wrap<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)\n const required = resultSet?.payload().required\n if (required) {\n Object.entries(required).forEach(([key, value]) => {\n const found = wrapper.payloadSchemas.reduce((count, schema) => {\n return count + (schema === key ? 1 : 0)\n }, 0)\n if (found !== value) {\n errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`))\n }\n })\n }\n } catch (ex) {\n handleError(ex, (error) => {\n errors.push(error)\n })\n }\n return errors\n }\n}\n","import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AACpC,SAAS,mBAAmB;AAE5B,SAAS,sBAAsB;;;ACL/B,SAAuB,oBAAoB,sBAAsB;AAI1D,IAAM,0BAAmD;;;ADIzD,IAAM,6BAAN,MAAM,oCAA4D,sBAAyC;AAAA,EACxG;AAAA,EAER,IAAuB,iBAAyB;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,6BAA6B,KAAc;AAChD,WAAQ,KAAoC,gBAAgB;AAAA,EAC9D;AAAA,EAEA,MAAe,WAAW;AACxB,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,SAAS;AAAA;AAAA,IAE3B;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB;AACxB,UAAM,SAAkB,CAAC;AACzB,QAAI;AACF,YAAM,gBAAgB,SAAS,KAAK,IAAI,WAAW,mBAAmB;AACtE,YAAM,UAAU,oBAAoB,MAAM,KAAK,GAAG;AAClD,YAAM,YAAY,eAAe,MAAyB,MAAM,QAAQ,WAAW,GAAG,aAAa,CAAsB;AACzH,YAAM,WAAW,WAAW,QAAQ,EAAE;AACtC,UAAI,UAAU;AACZ,eAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,gBAAM,QAAQ,QAAQ,eAAe,OAAO,CAAC,OAAO,WAAW;AAC7D,mBAAO,SAAS,WAAW,MAAM,IAAI;AAAA,UACvC,GAAG,CAAC;AACJ,cAAI,UAAU,OAAO;AACnB,mBAAO,KAAK,MAAM,sCAAsC,GAAG,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,UACnF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,IAAI;AACX,kBAAY,IAAI,CAAC,UAAU;AACzB,eAAO,KAAK,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/Query/QueryBoundWitnessValidator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { handleError } from '@xyo-network/error'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\nexport class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {\n private _query: PayloadWrapper<T> | undefined\n\n protected override get expectedSchema(): string {\n return QueryBoundWitnessSchema\n }\n\n static isQueryBoundWitnessValidator(obj: unknown) {\n return (obj as QueryBoundWitnessValidator)?.constructor === QueryBoundWitnessValidator\n }\n\n override async validate() {\n return [\n ...(await super.validate()),\n // ...this.validateResultSet()\n ]\n }\n\n async validateResultSet() {\n const errors: Error[] = []\n try {\n const resultSetHash = assertEx(this.obj.resultSet, 'Missing ResultSet')\n const wrapper = BoundWitnessWrapper.parse(this.obj)\n const resultSet = PayloadWrapper.wrap<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)\n const required = resultSet?.payload().required\n if (required) {\n Object.entries(required).forEach(([key, value]) => {\n const found = wrapper.payloadSchemas.reduce((count, schema) => {\n return count + (schema === key ? 1 : 0)\n }, 0)\n if (found !== value) {\n errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`))\n }\n })\n }\n } catch (ex) {\n handleError(ex, (error) => {\n errors.push(error)\n })\n }\n return errors\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AACpC,SAAS,mBAAmB;AAE5B,SAAS,sBAAsB;AAE/B,SAA4B,+BAA+B;AACpD,MAAM,mCAA4D,sBAAyC;AAAA,EACxG;AAAA,EAER,IAAuB,iBAAyB;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,6BAA6B,KAAc;AAChD,WAAQ,KAAoC,gBAAgB;AAAA,EAC9D;AAAA,EAEA,MAAe,WAAW;AACxB,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,SAAS;AAAA;AAAA,IAE3B;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB;AACxB,UAAM,SAAkB,CAAC;AACzB,QAAI;AACF,YAAM,gBAAgB,SAAS,KAAK,IAAI,WAAW,mBAAmB;AACtE,YAAM,UAAU,oBAAoB,MAAM,KAAK,GAAG;AAClD,YAAM,YAAY,eAAe,MAAyB,MAAM,QAAQ,WAAW,GAAG,aAAa,CAAsB;AACzH,YAAM,WAAW,WAAW,QAAQ,EAAE;AACtC,UAAI,UAAU;AACZ,eAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,gBAAM,QAAQ,QAAQ,eAAe,OAAO,CAAC,OAAO,WAAW;AAC7D,mBAAO,SAAS,WAAW,MAAM,IAAI;AAAA,UACvC,GAAG,CAAC;AACJ,cAAI,UAAU,OAAO;AACnB,mBAAO,KAAK,MAAM,sCAAsC,GAAG,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,UACnF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,IAAI;AACX,kBAAY,IAAI,CAAC,UAAU;AACzB,eAAO,KAAK,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper';
2
+ import { Payload, Query } from '@xyo-network/payload-model';
3
+ import { PayloadWrapper } from '@xyo-network/payload-wrapper';
4
+ import { QueryBoundWitness } from './QueryBoundWitness';
5
+ export declare class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
6
+ private _payloadsWithoutQuery;
7
+ private _query;
8
+ private _resultSet;
9
+ private isQueryBoundWitnessWrapper;
10
+ static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T>;
11
+ getErrors(): Promise<Error[]>;
12
+ getQuery(): Promise<T>;
13
+ getResultSet(): Promise<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
14
+ schema: "network.xyo.payload.set";
15
+ }>;
16
+ getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]>;
17
+ }
18
+ //# sourceMappingURL=QueryBoundWitnessWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBoundWitnessWrapper.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAEvE,OAAO,EAAE,OAAO,EAAqB,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,qBAAa,wBAAwB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,mBAAmB,CAAC,iBAAiB,CAAC;IAC3G,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,0BAA0B,CAAO;IAEzC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAC;IAelG,SAAS;IAIZ,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;IAMtB,YAAY;;;IASH,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;CAaxE"}
@@ -1,74 +1,20 @@
1
- // src/Query/QueryBoundWitnessWrapper.ts
2
- import { assertEx as assertEx2 } from "@xylabs/assert";
3
- import { compact } from "@xylabs/lodash";
4
- import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
5
- import { PayloadHasher } from "@xyo-network/core";
6
- import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
7
-
8
- // src/Query/QueryBoundWitnessValidator.ts
9
1
  import { assertEx } from "@xylabs/assert";
10
- import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
2
+ import { compact } from "@xylabs/lodash";
11
3
  import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
12
- import { handleError } from "@xyo-network/error";
4
+ import { PayloadHasher } from "@xyo-network/core";
13
5
  import { PayloadWrapper } from "@xyo-network/payload-wrapper";
14
-
15
- // src/Query/QueryBoundWitness.ts
16
- import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
17
- var QueryBoundWitnessSchema = BoundWitnessSchema;
18
-
19
- // src/Query/QueryBoundWitnessValidator.ts
20
- var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends BoundWitnessValidator {
21
- _query;
22
- get expectedSchema() {
23
- return QueryBoundWitnessSchema;
24
- }
25
- static isQueryBoundWitnessValidator(obj) {
26
- return obj?.constructor === _QueryBoundWitnessValidator;
27
- }
28
- async validate() {
29
- return [
30
- ...await super.validate()
31
- // ...this.validateResultSet()
32
- ];
33
- }
34
- async validateResultSet() {
35
- const errors = [];
36
- try {
37
- const resultSetHash = assertEx(this.obj.resultSet, "Missing ResultSet");
38
- const wrapper = BoundWitnessWrapper.parse(this.obj);
39
- const resultSet = PayloadWrapper.wrap((await wrapper.payloadMap())[resultSetHash]);
40
- const required = resultSet?.payload().required;
41
- if (required) {
42
- Object.entries(required).forEach(([key, value]) => {
43
- const found = wrapper.payloadSchemas.reduce((count, schema) => {
44
- return count + (schema === key ? 1 : 0);
45
- }, 0);
46
- if (found !== value) {
47
- errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`));
48
- }
49
- });
50
- }
51
- } catch (ex) {
52
- handleError(ex, (error) => {
53
- errors.push(error);
54
- });
55
- }
56
- return errors;
57
- }
58
- };
59
-
60
- // src/Query/QueryBoundWitnessWrapper.ts
61
- var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
6
+ import { QueryBoundWitnessValidator } from "./QueryBoundWitnessValidator";
7
+ class QueryBoundWitnessWrapper extends BoundWitnessWrapper {
62
8
  _payloadsWithoutQuery;
63
9
  _query;
64
10
  _resultSet;
65
11
  isQueryBoundWitnessWrapper = true;
66
12
  static parseQuery(obj, payloads) {
67
- assertEx2(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
13
+ assertEx(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
68
14
  switch (typeof obj) {
69
15
  case "object": {
70
16
  const castWrapper = obj;
71
- const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new _QueryBoundWitnessWrapper(obj, payloads);
17
+ const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper(obj, payloads);
72
18
  return wrapper;
73
19
  }
74
20
  }
@@ -80,12 +26,12 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
80
26
  async getQuery() {
81
27
  const payloadMap = await this.allPayloadMap();
82
28
  this._query = this._query ?? payloadMap[this.boundwitness.query];
83
- return assertEx2(this._query, `Missing Query [${this.boundwitness}]`);
29
+ return assertEx(this._query, `Missing Query [${this.boundwitness}]`);
84
30
  }
85
31
  async getResultSet() {
86
32
  const resultSetHash = this.boundwitness.resultSet;
87
33
  const payloadMap = await this.payloadMap();
88
- return assertEx2(
34
+ return assertEx(
89
35
  this._resultSet = this._resultSet ?? (resultSetHash ? payloadMap[resultSetHash] : void 0),
90
36
  `Missing resultSet [${resultSetHash}]`
91
37
  );
@@ -95,11 +41,11 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
95
41
  (await PayloadHasher.filterExclude(
96
42
  (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
97
43
  this.payload().query
98
- )).map((payload) => PayloadWrapper2.wrap(payload))
44
+ )).map((payload) => PayloadWrapper.wrap(payload))
99
45
  );
100
46
  return this._payloadsWithoutQuery;
101
47
  }
102
- };
48
+ }
103
49
  export {
104
50
  QueryBoundWitnessWrapper
105
51
  };