@arkiv-network/sdk 0.3.2-dev.0 → 0.3.2-dev.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 (32) hide show
  1. package/dist/chains/index.d.ts +25 -25
  2. package/dist/{entity-OY78HYxA.d.cts → entity-DvQtQL8v.d.ts} +7 -1
  3. package/dist/entity-DvQtQL8v.d.ts.map +1 -0
  4. package/dist/{entity-o4fwHXKf.d.ts → entity-jTQZmEAd.d.cts} +7 -1
  5. package/dist/entity-jTQZmEAd.d.cts.map +1 -0
  6. package/dist/index.cjs +1 -1
  7. package/dist/index.d.cts +2 -2
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js +1 -1
  10. package/dist/query/index.cjs +1 -1
  11. package/dist/query/index.d.cts +2 -2
  12. package/dist/query/index.d.ts +2 -2
  13. package/dist/query/index.js +1 -1
  14. package/dist/{queryBuilder-CboWSREN.d.ts → queryBuilder-BBtwhH0G.d.ts} +17 -2
  15. package/dist/{queryBuilder-CboWSREN.d.ts.map → queryBuilder-BBtwhH0G.d.ts.map} +1 -1
  16. package/dist/{queryBuilder-n9ocnT4P.cjs → queryBuilder-D-bqHg3w.cjs} +29 -2
  17. package/dist/{queryBuilder-BueP5de6.js → queryBuilder-D22Tamry.js} +30 -3
  18. package/dist/queryBuilder-D22Tamry.js.map +1 -0
  19. package/dist/{queryBuilder-Bm1zGqKA.d.cts → queryBuilder-DkhyyeFr.d.cts} +17 -2
  20. package/dist/{queryBuilder-Bm1zGqKA.d.cts.map → queryBuilder-DkhyyeFr.d.cts.map} +1 -1
  21. package/dist/types/index.d.cts +1 -1
  22. package/dist/types/index.d.ts +1 -1
  23. package/dist/utils/index.d.cts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/query/engine.test.ts +69 -0
  26. package/src/query/engine.ts +8 -3
  27. package/src/query/queryBuilder.test.ts +34 -0
  28. package/src/query/queryBuilder.ts +33 -0
  29. package/src/types/rpcSchema.ts +7 -0
  30. package/dist/entity-OY78HYxA.d.cts.map +0 -1
  31. package/dist/entity-o4fwHXKf.d.ts.map +0 -1
  32. package/dist/queryBuilder-BueP5de6.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import * as viem8 from "viem";
1
+ import * as viem0 from "viem";
2
2
 
3
3
  //#region src/chains/kaolin.d.ts
4
4
  declare const kaolin: {
@@ -11,13 +11,13 @@ declare const kaolin: {
11
11
  };
12
12
  blockTime?: number | undefined | undefined;
13
13
  contracts?: {
14
- [x: string]: viem8.ChainContract | {
15
- [sourceId: number]: viem8.ChainContract | undefined;
14
+ [x: string]: viem0.ChainContract | {
15
+ [sourceId: number]: viem0.ChainContract | undefined;
16
16
  } | undefined;
17
- ensRegistry?: viem8.ChainContract | undefined;
18
- ensUniversalResolver?: viem8.ChainContract | undefined;
19
- multicall3?: viem8.ChainContract | undefined;
20
- erc6492Verifier?: viem8.ChainContract | undefined;
17
+ ensRegistry?: viem0.ChainContract | undefined;
18
+ ensUniversalResolver?: viem0.ChainContract | undefined;
19
+ multicall3?: viem0.ChainContract | undefined;
20
+ erc6492Verifier?: viem0.ChainContract | undefined;
21
21
  } | undefined;
22
22
  ensTlds?: readonly string[] | undefined;
23
23
  id: 60138453025;
@@ -37,9 +37,9 @@ declare const kaolin: {
37
37
  sourceId?: number | undefined | undefined;
38
38
  testnet: true;
39
39
  custom?: Record<string, unknown> | undefined;
40
- fees?: viem8.ChainFees<undefined> | undefined;
40
+ fees?: viem0.ChainFees<undefined> | undefined;
41
41
  formatters?: undefined;
42
- serializers?: viem8.ChainSerializers<undefined, viem8.TransactionSerializable> | undefined;
42
+ serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
43
43
  readonly network: "kaolin";
44
44
  };
45
45
  //#endregion
@@ -59,13 +59,13 @@ declare const localhost: {
59
59
  } | undefined | undefined;
60
60
  blockTime?: number | undefined | undefined;
61
61
  contracts?: {
62
- [x: string]: viem8.ChainContract | {
63
- [sourceId: number]: viem8.ChainContract | undefined;
62
+ [x: string]: viem0.ChainContract | {
63
+ [sourceId: number]: viem0.ChainContract | undefined;
64
64
  } | undefined;
65
- ensRegistry?: viem8.ChainContract | undefined;
66
- ensUniversalResolver?: viem8.ChainContract | undefined;
67
- multicall3?: viem8.ChainContract | undefined;
68
- erc6492Verifier?: viem8.ChainContract | undefined;
65
+ ensRegistry?: viem0.ChainContract | undefined;
66
+ ensUniversalResolver?: viem0.ChainContract | undefined;
67
+ multicall3?: viem0.ChainContract | undefined;
68
+ erc6492Verifier?: viem0.ChainContract | undefined;
69
69
  } | undefined;
70
70
  ensTlds?: readonly string[] | undefined;
71
71
  id: 1337;
@@ -84,9 +84,9 @@ declare const localhost: {
84
84
  sourceId?: number | undefined | undefined;
85
85
  testnet?: boolean | undefined | undefined;
86
86
  custom?: Record<string, unknown> | undefined;
87
- fees?: viem8.ChainFees<undefined> | undefined;
87
+ fees?: viem0.ChainFees<undefined> | undefined;
88
88
  formatters?: undefined;
89
- serializers?: viem8.ChainSerializers<undefined, viem8.TransactionSerializable> | undefined;
89
+ serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
90
90
  };
91
91
  //#endregion
92
92
  //#region src/chains/marketplace.d.ts
@@ -100,13 +100,13 @@ declare const marketplace: {
100
100
  };
101
101
  blockTime?: number | undefined | undefined;
102
102
  contracts?: {
103
- [x: string]: viem8.ChainContract | {
104
- [sourceId: number]: viem8.ChainContract | undefined;
103
+ [x: string]: viem0.ChainContract | {
104
+ [sourceId: number]: viem0.ChainContract | undefined;
105
105
  } | undefined;
106
- ensRegistry?: viem8.ChainContract | undefined;
107
- ensUniversalResolver?: viem8.ChainContract | undefined;
108
- multicall3?: viem8.ChainContract | undefined;
109
- erc6492Verifier?: viem8.ChainContract | undefined;
106
+ ensRegistry?: viem0.ChainContract | undefined;
107
+ ensUniversalResolver?: viem0.ChainContract | undefined;
108
+ multicall3?: viem0.ChainContract | undefined;
109
+ erc6492Verifier?: viem0.ChainContract | undefined;
110
110
  } | undefined;
111
111
  ensTlds?: readonly string[] | undefined;
112
112
  id: 60138453027;
@@ -126,9 +126,9 @@ declare const marketplace: {
126
126
  sourceId?: number | undefined | undefined;
127
127
  testnet: true;
128
128
  custom?: Record<string, unknown> | undefined;
129
- fees?: viem8.ChainFees<undefined> | undefined;
129
+ fees?: viem0.ChainFees<undefined> | undefined;
130
130
  formatters?: undefined;
131
- serializers?: viem8.ChainSerializers<undefined, viem8.TransactionSerializable> | undefined;
131
+ serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
132
132
  readonly network: "marketplace";
133
133
  };
134
134
  //#endregion
@@ -19,9 +19,15 @@ type RpcEntity = {
19
19
  value: number;
20
20
  }];
21
21
  };
22
+ type RpcOrderByAttribute = {
23
+ name: string;
24
+ type: "string" | "numeric";
25
+ desc: boolean;
26
+ };
22
27
  type RpcQueryOptions = {
23
28
  atBlock?: number;
24
29
  includeData?: RpcIncludeData;
30
+ orderBy?: RpcOrderByAttribute[];
25
31
  resultsPerPage?: number;
26
32
  cursor?: string;
27
33
  };
@@ -237,4 +243,4 @@ declare class Entity {
237
243
  }
238
244
  //#endregion
239
245
  export { ArkivRpcSchema as _, MutateEntitiesReturnType as a, RpcQueryOptions as b, ExtendEntityParameters as c, DeleteEntityReturnType as d, CreateEntityParameters as f, ArkivClient as g, ChangeOwnershipReturnType as h, MutateEntitiesParameters as i, ExtendEntityReturnType as l, ChangeOwnershipParameters as m, TxParams as n, UpdateEntityParameters as o, CreateEntityReturnType as p, Attribute as r, UpdateEntityReturnType as s, Entity as t, DeleteEntityParameters as u, RpcEntity as v, MimeType as x, RpcIncludeData as y };
240
- //# sourceMappingURL=entity-OY78HYxA.d.cts.map
246
+ //# sourceMappingURL=entity-DvQtQL8v.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-DvQtQL8v.d.ts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
@@ -19,9 +19,15 @@ type RpcEntity = {
19
19
  value: number;
20
20
  }];
21
21
  };
22
+ type RpcOrderByAttribute = {
23
+ name: string;
24
+ type: "string" | "numeric";
25
+ desc: boolean;
26
+ };
22
27
  type RpcQueryOptions = {
23
28
  atBlock?: number;
24
29
  includeData?: RpcIncludeData;
30
+ orderBy?: RpcOrderByAttribute[];
25
31
  resultsPerPage?: number;
26
32
  cursor?: string;
27
33
  };
@@ -237,4 +243,4 @@ declare class Entity {
237
243
  }
238
244
  //#endregion
239
245
  export { ArkivRpcSchema as _, MutateEntitiesReturnType as a, RpcQueryOptions as b, ExtendEntityParameters as c, DeleteEntityReturnType as d, CreateEntityParameters as f, ArkivClient as g, ChangeOwnershipReturnType as h, MutateEntitiesParameters as i, ExtendEntityReturnType as l, ChangeOwnershipParameters as m, TxParams as n, UpdateEntityParameters as o, CreateEntityReturnType as p, Attribute as r, UpdateEntityReturnType as s, Entity as t, DeleteEntityParameters as u, RpcEntity as v, MimeType as x, RpcIncludeData as y };
240
- //# sourceMappingURL=entity-o4fwHXKf.d.ts.map
246
+ //# sourceMappingURL=entity-jTQZmEAd.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-jTQZmEAd.d.cts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_queryBuilder = require('./queryBuilder-n9ocnT4P.cjs');
1
+ const require_queryBuilder = require('./queryBuilder-D-bqHg3w.cjs');
2
2
  const require_consts = require('./consts-BV9DVKgE.cjs');
3
3
  let viem = require("viem");
4
4
 
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-OY78HYxA.cjs";
2
- import { t as QueryBuilder } from "./queryBuilder-Bm1zGqKA.cjs";
1
+ import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-jTQZmEAd.cjs";
2
+ import { t as QueryBuilder } from "./queryBuilder-DkhyyeFr.cjs";
3
3
  import { Account, Account as Account$1, Address, Address as Address$1, Chain, Chain as Chain$1, Client, Hex, Hex as Hex$1, ParseAccount, Prettify, PublicActions, PublicClientConfig, PublicClientConfig as PublicClientConfig$1, RpcSchema, RpcSchema as RpcSchema$1, Transport, Transport as Transport$1, WalletActions, WalletClientConfig, http, toBytes, toHex, toRlp, webSocket } from "viem";
4
4
 
5
5
  //#region src/types/events.d.ts
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-o4fwHXKf.js";
2
- import { t as QueryBuilder } from "./queryBuilder-CboWSREN.js";
1
+ import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-DvQtQL8v.js";
2
+ import { t as QueryBuilder } from "./queryBuilder-BBtwhH0G.js";
3
3
  import { Account, Account as Account$1, Address, Address as Address$1, Chain, Chain as Chain$1, Client, Hex, Hex as Hex$1, ParseAccount, Prettify, PublicActions, PublicClientConfig, PublicClientConfig as PublicClientConfig$1, RpcSchema, RpcSchema as RpcSchema$1, Transport, Transport as Transport$1, WalletActions, WalletClientConfig, http, toBytes, toHex, toRlp, webSocket } from "viem";
4
4
 
5
5
  //#region src/types/events.d.ts
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as NoEntityFoundError, r as entityFromRpcResult, t as QueryBuilder } from "./queryBuilder-BueP5de6.js";
1
+ import { a as NoEntityFoundError, r as entityFromRpcResult, t as QueryBuilder } from "./queryBuilder-D22Tamry.js";
2
2
  import { n as BLOCK_TIME, t as ARKIV_ADDRESS } from "./consts-CHtLBwGd.js";
3
3
  import { createClient, decodeEventLog, http, parseAbi, publicActions, toBytes, toBytes as toBytes$1, toHex, toHex as toHex$1, toRlp, toRlp as toRlp$1, walletActions, webSocket } from "viem";
4
4
 
@@ -1,4 +1,4 @@
1
- const require_queryBuilder = require('../queryBuilder-n9ocnT4P.cjs');
1
+ const require_queryBuilder = require('../queryBuilder-D-bqHg3w.cjs');
2
2
 
3
3
  //#region src/query/predicate.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import "../entity-OY78HYxA.cjs";
2
- import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-Bm1zGqKA.cjs";
1
+ import "../entity-jTQZmEAd.cjs";
2
+ import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-DkhyyeFr.cjs";
3
3
 
4
4
  //#region src/query/errors.d.ts
5
5
  declare class NoMoreResultsError extends Error {
@@ -1,5 +1,5 @@
1
- import "../entity-o4fwHXKf.js";
2
- import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-CboWSREN.js";
1
+ import "../entity-DvQtQL8v.js";
2
+ import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-BBtwhH0G.js";
3
3
 
4
4
  //#region src/query/errors.d.ts
5
5
  declare class NoMoreResultsError extends Error {
@@ -1,4 +1,4 @@
1
- import { a as NoEntityFoundError, i as NoCursorOrLimitError, n as QueryResult, o as NoMoreResultsError, s as OffsetCannotBeLessThanZeroError, t as QueryBuilder } from "../queryBuilder-BueP5de6.js";
1
+ import { a as NoEntityFoundError, i as NoCursorOrLimitError, n as QueryResult, o as NoMoreResultsError, s as OffsetCannotBeLessThanZeroError, t as QueryBuilder } from "../queryBuilder-D22Tamry.js";
2
2
 
3
3
  //#region src/query/predicate.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { g as ArkivClient, t as Entity } from "./entity-o4fwHXKf.js";
1
+ import { g as ArkivClient, t as Entity } from "./entity-DvQtQL8v.js";
2
2
  import { Hex } from "viem";
3
3
 
4
4
  //#region src/query/predicate.d.ts
@@ -138,6 +138,7 @@ declare class QueryResult {
138
138
  declare class QueryBuilder {
139
139
  private _client;
140
140
  private _ownedBy;
141
+ private _orderBy;
141
142
  private _validAtBlock;
142
143
  private _withAttributes;
143
144
  private _withMetadata;
@@ -156,6 +157,20 @@ declare class QueryBuilder {
156
157
  * builder.ownedBy("0x1234567890123456789012345678901234567890")
157
158
  */
158
159
  ownedBy(ownedBy: Hex): this;
160
+ /**
161
+ * Sets the orderBy for the query.
162
+ * It can be called multiple times to order by multiple attributes.
163
+ * The order of the attributes is important. The first attribute is the primary order by attribute.
164
+ * @param attributeName - The name of the attribute to order by
165
+ * @param attributeType - The type of the attribute to order by (string or number)
166
+ * @param descending - The boolean value to set the order by descending
167
+ * @returns The QueryBuilder instance
168
+ *
169
+ * @example
170
+ * const builder = new QueryBuilder(client)
171
+ * builder.orderBy("name", "string", true)
172
+ */
173
+ orderBy(attributeName: string, attributeType: "string" | "number", descending?: boolean | undefined): this;
159
174
  /**
160
175
  * Sets the withAttributes flag which will return the attributes for the entities if true
161
176
  * @param withAttributes - The boolean value to set
@@ -258,4 +273,4 @@ declare class QueryBuilder {
258
273
  }
259
274
  //#endregion
260
275
  export { PredicateType as a, gt as c, lte as d, neq as f, PredicateContainerType as i, gte as l, or as m, QueryResult as n, and as o, not as p, Predicate as r, eq as s, QueryBuilder as t, lt as u };
261
- //# sourceMappingURL=queryBuilder-CboWSREN.d.ts.map
276
+ //# sourceMappingURL=queryBuilder-BBtwhH0G.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilder-CboWSREN.d.ts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACSa,iBF2BG,GAAA,CE3BS,UAAA,EF2BO,SE3BP,EAAA,CAAA,EF2BqB,SE3BrB;;;;;;;;;;;iBFyCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEEd,YAAA,CFFc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,aAAuC;EAczC,QAAG,eAAuC;EAc1C,QAAE,aAAuC;EAczC,QAAG,YAAuC;EAc1C,QAAE,MAAA;EAcF,QAAG,OAAA;EAaH,QAAG,WAAe;sBEjHZ;;;ADpBtB;;;;;;;mBCkCmB;;;AAzBnB;;;;;;;EAqLa,cAAA,CAAA,cAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAlDO,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WA+BA"}
1
+ {"version":3,"file":"queryBuilder-BBtwhH0G.d.ts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACUa,iBF0BG,GAAA,CE1BS,UAAA,EF0BO,SE1BP,EAAA,CAAA,EF0BqB,SE1BrB;;;;;;;;;;;iBFwCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEGd,YAAA,CFHc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,QAAA;EAcF,QAAG,aAAuC;EAc1C,QAAE,eAAuC;EAczC,QAAG,aAAuC;EAc1C,QAAE,YAAuC;EAczC,QAAG,MAAA;EAaH,QAAG,OAAA;;sBE/GG;;ADtBtB;;;;;;;;mBCoCmB;;AA1BnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAiKoB,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WAgCA"}
@@ -82,8 +82,8 @@ function processPredicates(predicates) {
82
82
  }).join(" && ");
83
83
  }
84
84
  async function processQuery(client, queryParams) {
85
- const { predicates, limit, cursor, ownedBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
86
- console.debug(`Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
85
+ const { predicates, limit, cursor, ownedBy, orderBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
86
+ console.debug(`Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
87
87
  let query = processPredicates(predicates);
88
88
  if (ownedBy) query += ` && $owner=${ownedBy}`;
89
89
  query = query.trim();
@@ -99,9 +99,11 @@ async function processQuery(client, queryParams) {
99
99
  if (validAtBlock !== void 0) queryOptions.atBlock = Number(validAtBlock);
100
100
  if (limit !== void 0) queryOptions.resultsPerPage = limit;
101
101
  if (cursor !== void 0) queryOptions.cursor = cursor;
102
+ if (orderBy !== void 0) queryOptions.orderBy = orderBy;
102
103
  console.debug(`Built query to send: ${query}, queryOptions: ${JSON.stringify({
103
104
  includeData: queryOptions.includeData,
104
105
  atBlock: queryOptions.atBlock?.toString(),
106
+ orderBy: queryOptions.orderBy,
105
107
  resultsPerPage: queryOptions.resultsPerPage,
106
108
  cursor: queryOptions.cursor
107
109
  })}`);
@@ -163,6 +165,7 @@ var QueryResult = class {
163
165
  var QueryBuilder = class {
164
166
  _client;
165
167
  _ownedBy;
168
+ _orderBy;
166
169
  _validAtBlock;
167
170
  _withAttributes;
168
171
  _withMetadata;
@@ -188,6 +191,28 @@ var QueryBuilder = class {
188
191
  return this;
189
192
  }
190
193
  /**
194
+ * Sets the orderBy for the query.
195
+ * It can be called multiple times to order by multiple attributes.
196
+ * The order of the attributes is important. The first attribute is the primary order by attribute.
197
+ * @param attributeName - The name of the attribute to order by
198
+ * @param attributeType - The type of the attribute to order by (string or number)
199
+ * @param descending - The boolean value to set the order by descending
200
+ * @returns The QueryBuilder instance
201
+ *
202
+ * @example
203
+ * const builder = new QueryBuilder(client)
204
+ * builder.orderBy("name", "string", true)
205
+ */
206
+ orderBy(attributeName, attributeType, descending = void 0) {
207
+ if (!this._orderBy) this._orderBy = [];
208
+ this._orderBy.push({
209
+ name: attributeName,
210
+ type: attributeType === "number" ? "numeric" : attributeType,
211
+ desc: !!descending
212
+ });
213
+ return this;
214
+ }
215
+ /**
191
216
  * Sets the withAttributes flag which will return the attributes for the entities if true
192
217
  * @param withAttributes - The boolean value to set
193
218
  * @returns The QueryBuilder instance
@@ -303,6 +328,7 @@ var QueryBuilder = class {
303
328
  limit: this._limit,
304
329
  cursor: this._cursor,
305
330
  ownedBy: this._ownedBy,
331
+ orderBy: this._orderBy,
306
332
  validAtBlock: this._validAtBlock,
307
333
  withAttributes: this._withAttributes,
308
334
  withMetadata: this._withMetadata,
@@ -328,6 +354,7 @@ var QueryBuilder = class {
328
354
  limit: this._limit,
329
355
  cursor: this._cursor,
330
356
  ownedBy: this._ownedBy,
357
+ orderBy: void 0,
331
358
  validAtBlock: this._validAtBlock,
332
359
  withAttributes: false,
333
360
  withMetadata: false,
@@ -82,8 +82,8 @@ function processPredicates(predicates) {
82
82
  }).join(" && ");
83
83
  }
84
84
  async function processQuery(client, queryParams) {
85
- const { predicates, limit, cursor, ownedBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
86
- console.debug(`Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
85
+ const { predicates, limit, cursor, ownedBy, orderBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
86
+ console.debug(`Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
87
87
  let query = processPredicates(predicates);
88
88
  if (ownedBy) query += ` && $owner=${ownedBy}`;
89
89
  query = query.trim();
@@ -99,9 +99,11 @@ async function processQuery(client, queryParams) {
99
99
  if (validAtBlock !== void 0) queryOptions.atBlock = Number(validAtBlock);
100
100
  if (limit !== void 0) queryOptions.resultsPerPage = limit;
101
101
  if (cursor !== void 0) queryOptions.cursor = cursor;
102
+ if (orderBy !== void 0) queryOptions.orderBy = orderBy;
102
103
  console.debug(`Built query to send: ${query}, queryOptions: ${JSON.stringify({
103
104
  includeData: queryOptions.includeData,
104
105
  atBlock: queryOptions.atBlock?.toString(),
106
+ orderBy: queryOptions.orderBy,
105
107
  resultsPerPage: queryOptions.resultsPerPage,
106
108
  cursor: queryOptions.cursor
107
109
  })}`);
@@ -163,6 +165,7 @@ var QueryResult = class {
163
165
  var QueryBuilder = class {
164
166
  _client;
165
167
  _ownedBy;
168
+ _orderBy;
166
169
  _validAtBlock;
167
170
  _withAttributes;
168
171
  _withMetadata;
@@ -188,6 +191,28 @@ var QueryBuilder = class {
188
191
  return this;
189
192
  }
190
193
  /**
194
+ * Sets the orderBy for the query.
195
+ * It can be called multiple times to order by multiple attributes.
196
+ * The order of the attributes is important. The first attribute is the primary order by attribute.
197
+ * @param attributeName - The name of the attribute to order by
198
+ * @param attributeType - The type of the attribute to order by (string or number)
199
+ * @param descending - The boolean value to set the order by descending
200
+ * @returns The QueryBuilder instance
201
+ *
202
+ * @example
203
+ * const builder = new QueryBuilder(client)
204
+ * builder.orderBy("name", "string", true)
205
+ */
206
+ orderBy(attributeName, attributeType, descending = void 0) {
207
+ if (!this._orderBy) this._orderBy = [];
208
+ this._orderBy.push({
209
+ name: attributeName,
210
+ type: attributeType === "number" ? "numeric" : attributeType,
211
+ desc: !!descending
212
+ });
213
+ return this;
214
+ }
215
+ /**
191
216
  * Sets the withAttributes flag which will return the attributes for the entities if true
192
217
  * @param withAttributes - The boolean value to set
193
218
  * @returns The QueryBuilder instance
@@ -303,6 +328,7 @@ var QueryBuilder = class {
303
328
  limit: this._limit,
304
329
  cursor: this._cursor,
305
330
  ownedBy: this._ownedBy,
331
+ orderBy: this._orderBy,
306
332
  validAtBlock: this._validAtBlock,
307
333
  withAttributes: this._withAttributes,
308
334
  withMetadata: this._withMetadata,
@@ -328,6 +354,7 @@ var QueryBuilder = class {
328
354
  limit: this._limit,
329
355
  cursor: this._cursor,
330
356
  ownedBy: this._ownedBy,
357
+ orderBy: void 0,
331
358
  validAtBlock: this._validAtBlock,
332
359
  withAttributes: false,
333
360
  withMetadata: false,
@@ -338,4 +365,4 @@ var QueryBuilder = class {
338
365
 
339
366
  //#endregion
340
367
  export { NoEntityFoundError as a, NoCursorOrLimitError as i, QueryResult as n, NoMoreResultsError as o, entityFromRpcResult as r, OffsetCannotBeLessThanZeroError as s, QueryBuilder as t };
341
- //# sourceMappingURL=queryBuilder-BueP5de6.js.map
368
+ //# sourceMappingURL=queryBuilder-D22Tamry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilder-D22Tamry.js","names":["predicate","queryOptions: RpcQueryOptions"],"sources":["../src/query/errors.ts","../src/types/entity.ts","../src/utils/entities.ts","../src/query/engine.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":["export class NoMoreResultsError extends Error {\n constructor() {\n super(\"No more results\")\n }\n}\n\nexport class NoCursorOrLimitError extends Error {\n constructor() {\n super(\"Cursor and limit must be defined to fetch next\")\n }\n}\n\nexport class OffsetCannotBeLessThanZeroError extends Error {\n constructor() {\n super(\"Offset cannot be less than 0\")\n }\n}\n\nexport class NoEntityFoundError extends Error {\n constructor() {\n super(\"No entity found\")\n }\n}\n","import { bytesToString, type Hex } from \"viem\"\nimport type { MimeType } from \"../types\"\nimport type { Attribute } from \"./attributes\"\n\nexport class Entity {\n key: Hex\n owner: Hex\n expiresAtBlock: bigint\n payload: Uint8Array\n attributes: Attribute[]\n contentType: MimeType\n\n constructor(\n key: Hex,\n contentType: MimeType,\n owner: Hex,\n expiresAtBlock: bigint,\n payload: Uint8Array,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return bytesToString(this.payload)\n }\n\n toJson(): any {\n return JSON.parse(bytesToString(this.payload))\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt,\n toBytes(rpcEntity.value),\n [\n ...(rpcEntity.stringAttributes ?? []).map(({ key, value }) => ({\n key,\n value,\n })),\n ...(rpcEntity.numericAttributes ?? []).map(({ key, value }) => ({\n key,\n value: Number(value),\n })),\n ],\n )\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcOrderByAttribute, RpcQueryOptions } from \"../types/rpcSchema\"\nimport type { Predicate } from \"./predicate\"\n\nfunction processPredicates(predicates: Predicate[]): string {\n const processValue = (value: string | number) => {\n if (typeof value === \"string\") {\n return `\"${value}\"`\n }\n return value\n }\n return predicates\n .map((predicate) => {\n switch (predicate.type) {\n case \"eq\":\n return `${predicate.key} = ${processValue(predicate.value)}`\n case \"neq\":\n return `${predicate.key} != ${processValue(predicate.value)}`\n case \"gt\":\n return `${predicate.key} > ${processValue(predicate.value)}`\n case \"gte\":\n return `${predicate.key} >= ${processValue(predicate.value)}`\n case \"lt\":\n return `${predicate.key} < ${processValue(predicate.value)}`\n case \"lte\":\n return `${predicate.key} <= ${processValue(predicate.value)}`\n case \"not\":\n return `!${predicate.key}`\n case \"or\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" || \")})`\n case \"and\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" && \")})`\n default:\n return \"\"\n }\n })\n .join(\" && \")\n}\n\nexport async function processQuery(\n client: ArkivClient,\n queryParams: {\n predicates: Predicate[]\n limit: number | undefined\n cursor: string | undefined\n ownedBy: Hex | undefined\n orderBy: RpcOrderByAttribute[] | undefined\n validAtBlock?: bigint | undefined\n withAttributes?: boolean | undefined\n withMetadata?: boolean | undefined\n withPayload?: boolean | undefined\n },\n) {\n const {\n predicates,\n limit,\n cursor,\n ownedBy,\n orderBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n withPayload,\n } = queryParams\n\n console.debug(\n `Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,\n )\n\n let query = processPredicates(predicates)\n if (ownedBy) {\n query += ` && $owner=${ownedBy}`\n }\n\n // remove leading and trailing spaces and leading &&\n query = query.trim()\n if (query.startsWith(\"&& \")) {\n query = query.slice(3)\n }\n\n const queryOptions: RpcQueryOptions = {\n includeData: {\n key: true,\n attributes: withAttributes ?? false,\n payload: withPayload ?? false,\n contentType: withMetadata ?? false,\n expiration: withMetadata ?? false,\n owner: withMetadata ?? false,\n },\n }\n\n if (validAtBlock !== undefined) {\n queryOptions.atBlock = Number(validAtBlock)\n }\n if (limit !== undefined) {\n queryOptions.resultsPerPage = limit\n }\n if (cursor !== undefined) {\n queryOptions.cursor = cursor\n }\n if (orderBy !== undefined) {\n queryOptions.orderBy = orderBy\n }\n\n console.debug(\n `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), orderBy: queryOptions.orderBy, resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,\n )\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n console.debug(\"Raw result from query: \", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nexport class QueryResult {\n entities: Entity[]\n private _endOfIteration: boolean\n private _cursor: string | undefined\n private _limit: number | undefined\n private _validAtBlock: bigint | undefined\n private _queryBuilder: QueryBuilder\n\n // Public getters for internal state\n get queryBuilder(): QueryBuilder {\n return this._queryBuilder\n }\n\n get cursor(): string | undefined {\n return this._cursor\n }\n\n constructor(\n entities: Entity[],\n queryBuilder: QueryBuilder,\n cursor: string | undefined,\n limit: number | undefined,\n validAtBlock: bigint | undefined,\n ) {\n this.entities = entities\n this._queryBuilder = queryBuilder\n this._endOfIteration = !limit || entities.length < limit\n this._cursor = cursor\n this._limit = limit\n this._validAtBlock = validAtBlock\n }\n\n async next() {\n if (this._cursor === undefined || this._limit === undefined) {\n throw new NoCursorOrLimitError()\n }\n if (this._endOfIteration) {\n throw new NoMoreResultsError()\n }\n this._queryBuilder.cursor(this._cursor)\n const result = await this._queryBuilder.fetch()\n this.entities = result.entities\n // Update the query builder reference\n this._queryBuilder = result.queryBuilder\n // Check if we've reached the end (no more cursor or we got fewer entities than limit)\n this._endOfIteration = !result.cursor || result.entities.length < this._limit\n // Update the cursor\n this._cursor = result.cursor\n\n // TODO check current block height and if it is not too old\n console.debug(\"Current block height for next page: \", this._validAtBlock)\n }\n\n hasNextPage() {\n return !this._endOfIteration\n }\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcOrderByAttribute } from \"../types/rpcSchema\"\nimport { entityFromRpcResult } from \"../utils/entities\"\nimport { processQuery } from \"./engine\"\nimport type { Predicate } from \"./predicate\"\nimport { QueryResult } from \"./queryResult\"\n\n/**\n * QueryBuilder is a helper class to build queries to the Arkiv DBChains.\n * It can be used to fetch entities from the Arkiv DBChains. It follows the Builder pattern allowing chaining of methods.\n * @param client - The Arkiv client\n * @returns The QueryBuilder instance {@link QueryBuilder}\n */\nexport class QueryBuilder {\n private _client: ArkivClient\n private _ownedBy: Hex | undefined\n private _orderBy: RpcOrderByAttribute[] | undefined\n private _validAtBlock: bigint | undefined\n private _withAttributes: boolean | undefined\n private _withMetadata: boolean | undefined\n private _withPayload: boolean | undefined\n private _limit: number | undefined\n private _cursor: string | undefined\n private _predicates: Predicate[]\n\n constructor(client: ArkivClient) {\n this._client = client\n this._predicates = []\n }\n\n /**\n * Sets the ownedBy filter\n * @param ownedBy - The address of the owner\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.ownedBy(\"0x1234567890123456789012345678901234567890\")\n */\n ownedBy(ownedBy: Hex) {\n this._ownedBy = ownedBy\n return this\n }\n\n /**\n * Sets the orderBy for the query.\n * It can be called multiple times to order by multiple attributes.\n * The order of the attributes is important. The first attribute is the primary order by attribute.\n * @param attributeName - The name of the attribute to order by\n * @param attributeType - The type of the attribute to order by (string or number)\n * @param descending - The boolean value to set the order by descending\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(\"name\", \"string\", true)\n */\n orderBy(\n attributeName: string,\n attributeType: \"string\" | \"number\",\n descending: boolean | undefined = undefined,\n ) {\n if (!this._orderBy) {\n this._orderBy = []\n }\n this._orderBy.push({\n name: attributeName,\n type: attributeType === \"number\" ? \"numeric\" : attributeType,\n desc: !!descending,\n } as RpcOrderByAttribute)\n return this\n }\n\n /**\n * Sets the withAttributes flag which will return the attributes for the entities if true\n * @param withAttributes - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withAttributes(true)\n */\n withAttributes(withAttributes: boolean = true) {\n this._withAttributes = withAttributes\n return this\n }\n\n /**\n * Sets the withMetadata flag which will return the metadata (like owner, expiredAt, etc.) for the entities if true\n * @param withMetadata - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withMetadata(true)\n */\n withMetadata(withMetadata: boolean = true) {\n this._withMetadata = withMetadata\n return this\n }\n\n /**\n * Sets the withPayload flag which will return the payload for the entities if true\n * @param withPayload - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withPayload(true)\n */\n withPayload(withPayload: boolean = true) {\n this._withPayload = withPayload\n return this\n }\n\n /**\n * Sets the limit for the query\n * @param limit - The number of entities to return\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.limit(10)\n */\n limit(limit: number) {\n this._limit = limit\n return this\n }\n\n /**\n * Sets the cursor for the query - it is advances setting which rather shouldn't be used manually but it is provided from query result if limit is used (pagination).\n * @param cursor - The cursor to set which tells to RPC Query server where to start or continue the query.\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.offset(10)\n */\n cursor(cursor: string) {\n this._cursor = cursor\n return this\n }\n\n /**\n * Sets the validAtBlock for the query which tells at which block height the state we are intested.\n * If not set, the latest block is used.\n * @param validAtBlock - The block number to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.validAtBlock(10000)\n */\n validAtBlock(validAtBlock: bigint) {\n this._validAtBlock = validAtBlock\n return this\n }\n\n /**\n * Sets the predicates for the query limiting the results. It can be a single predicate or an array of predicates combined with 'and'.\n * Predicates can be nested using 'or' and 'and' predicates.\n * @param predicates - The predicates to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.where(eq(\"name\", \"John\"))\n * builder.where([eq(\"name\", \"John\"), eq(\"age\", 30)])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), and([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), and([eq(\"age\", 32), eq(\"age\", 33)])])])])\n */\n where(predicates: Predicate[] | Predicate) {\n if (Array.isArray(predicates)) {\n this._predicates.push(...predicates)\n } else {\n this._predicates.push(predicates)\n }\n return this\n }\n\n /**\n * Fetches the entities from the query. Re\n * It will return a QueryResult instance which can be used to fetch the next and previous pages.\n * @returns The QueryResult instance {@link QueryResult}\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).fetch()\n * // result = { entities: [Entity, Entity, Entity], next: async () => QueryResult, previous: async () => QueryResult }\n */\n async fetch() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n orderBy: this._orderBy,\n validAtBlock: this._validAtBlock,\n withAttributes: this._withAttributes,\n withMetadata: this._withMetadata,\n withPayload: this._withPayload,\n })\n\n const entities = await Promise.all(\n queryResult.data.map((entity) => entityFromRpcResult(entity)),\n )\n\n this.cursor(queryResult.cursor)\n this.validAtBlock(queryResult.blockNumber)\n\n return new QueryResult(entities, this, this._cursor, this._limit, this._validAtBlock)\n }\n\n /**\n * Counts the entities from the query.\n * @returns The number of entities\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).count()\n * // result = 10\n */\n async count() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n orderBy: undefined,\n validAtBlock: this._validAtBlock,\n withAttributes: false,\n withMetadata: false,\n withPayload: false,\n })\n\n return queryResult.data.length ?? 0\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { g as ArkivClient, t as Entity } from "./entity-OY78HYxA.cjs";
1
+ import { g as ArkivClient, t as Entity } from "./entity-jTQZmEAd.cjs";
2
2
  import { Hex } from "viem";
3
3
 
4
4
  //#region src/query/predicate.d.ts
@@ -138,6 +138,7 @@ declare class QueryResult {
138
138
  declare class QueryBuilder {
139
139
  private _client;
140
140
  private _ownedBy;
141
+ private _orderBy;
141
142
  private _validAtBlock;
142
143
  private _withAttributes;
143
144
  private _withMetadata;
@@ -156,6 +157,20 @@ declare class QueryBuilder {
156
157
  * builder.ownedBy("0x1234567890123456789012345678901234567890")
157
158
  */
158
159
  ownedBy(ownedBy: Hex): this;
160
+ /**
161
+ * Sets the orderBy for the query.
162
+ * It can be called multiple times to order by multiple attributes.
163
+ * The order of the attributes is important. The first attribute is the primary order by attribute.
164
+ * @param attributeName - The name of the attribute to order by
165
+ * @param attributeType - The type of the attribute to order by (string or number)
166
+ * @param descending - The boolean value to set the order by descending
167
+ * @returns The QueryBuilder instance
168
+ *
169
+ * @example
170
+ * const builder = new QueryBuilder(client)
171
+ * builder.orderBy("name", "string", true)
172
+ */
173
+ orderBy(attributeName: string, attributeType: "string" | "number", descending?: boolean | undefined): this;
159
174
  /**
160
175
  * Sets the withAttributes flag which will return the attributes for the entities if true
161
176
  * @param withAttributes - The boolean value to set
@@ -258,4 +273,4 @@ declare class QueryBuilder {
258
273
  }
259
274
  //#endregion
260
275
  export { PredicateType as a, gt as c, lte as d, neq as f, PredicateContainerType as i, gte as l, or as m, QueryResult as n, and as o, not as p, Predicate as r, eq as s, QueryBuilder as t, lt as u };
261
- //# sourceMappingURL=queryBuilder-Bm1zGqKA.d.cts.map
276
+ //# sourceMappingURL=queryBuilder-DkhyyeFr.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilder-Bm1zGqKA.d.cts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACSa,iBF2BG,GAAA,CE3BS,UAAA,EF2BO,SE3BP,EAAA,CAAA,EF2BqB,SE3BrB;;;;;;;;;;;iBFyCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEEd,YAAA,CFFc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,aAAuC;EAczC,QAAG,eAAuC;EAc1C,QAAE,aAAuC;EAczC,QAAG,YAAuC;EAc1C,QAAE,MAAA;EAcF,QAAG,OAAA;EAaH,QAAG,WAAe;sBEjHZ;;;ADpBtB;;;;;;;mBCkCmB;;;AAzBnB;;;;;;;EAqLa,cAAA,CAAA,cAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAlDO,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WA+BA"}
1
+ {"version":3,"file":"queryBuilder-DkhyyeFr.d.cts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACUa,iBF0BG,GAAA,CE1BS,UAAA,EF0BO,SE1BP,EAAA,CAAA,EF0BqB,SE1BrB;;;;;;;;;;;iBFwCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEGd,YAAA,CFHc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,QAAA;EAcF,QAAG,aAAuC;EAc1C,QAAE,eAAuC;EAczC,QAAG,aAAuC;EAc1C,QAAE,YAAuC;EAczC,QAAG,MAAA;EAaH,QAAG,OAAA;;sBE/GG;;ADtBtB;;;;;;;;mBCoCmB;;AA1BnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAiKoB,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WAgCA"}
@@ -1,2 +1,2 @@
1
- import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-OY78HYxA.cjs";
1
+ import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-jTQZmEAd.cjs";
2
2
  export { ArkivRpcSchema, Attribute, ChangeOwnershipParameters, ChangeOwnershipReturnType, CreateEntityParameters, CreateEntityReturnType, DeleteEntityParameters, DeleteEntityReturnType, Entity, ExtendEntityParameters, ExtendEntityReturnType, MimeType, MutateEntitiesParameters, MutateEntitiesReturnType, RpcEntity, RpcIncludeData, RpcQueryOptions, TxParams, UpdateEntityParameters, UpdateEntityReturnType };
@@ -1,2 +1,2 @@
1
- import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-o4fwHXKf.js";
1
+ import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-DvQtQL8v.js";
2
2
  export { ArkivRpcSchema, Attribute, ChangeOwnershipParameters, ChangeOwnershipReturnType, CreateEntityParameters, CreateEntityReturnType, DeleteEntityParameters, DeleteEntityReturnType, Entity, ExtendEntityParameters, ExtendEntityReturnType, MimeType, MutateEntitiesParameters, MutateEntitiesReturnType, RpcEntity, RpcIncludeData, RpcQueryOptions, TxParams, UpdateEntityParameters, UpdateEntityReturnType };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts","../../src/utils/payload.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;ECTP,SAAA,EAAA,CAAA,KAAa,EAAA,MAAA,EAAgB,GAAA,MAAA;EAI7B,UAAA,EAAA,CAAA,MAAe,EAAA,MAAA,EAAgB,GAAA,MAAA;mBDK5B;;;;iBCTH,aAAA,gBAA6B;iBAI7B,eAAA,gBAA+B"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts","../../src/utils/payload.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;ECTP,SAAA,EAAA,CAAA,KAAa,EAAA,MAAA,EAAA,GAAgB,MAAA;EAI7B,UAAA,EAAA,CAAA,MAAe,EAAA,MAAA,EAAA,GAAgB,MAAA;mBDK5B;;;;iBCTH,aAAA,gBAA6B;iBAI7B,eAAA,gBAA+B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkiv-network/sdk",
3
- "version": "0.3.2-dev.0",
3
+ "version": "0.3.2-dev.1",
4
4
  "description": "TypeScript client library for Arkiv's blockchains interactions",
5
5
  "type": "module",
6
6
  "target": "esnext",
@@ -15,6 +15,7 @@ describe("processQuery tests", () => {
15
15
  limit: undefined,
16
16
  cursor: undefined,
17
17
  ownedBy: undefined,
18
+ orderBy: undefined,
18
19
  validAtBlock: undefined,
19
20
  withAttributes: undefined,
20
21
  withMetadata: undefined,
@@ -53,6 +54,7 @@ describe("processQuery tests", () => {
53
54
  limit: undefined,
54
55
  cursor: undefined,
55
56
  ownedBy: undefined,
57
+ orderBy: undefined,
56
58
  validAtBlock: undefined,
57
59
  withAttributes: undefined,
58
60
  withMetadata: undefined,
@@ -92,6 +94,7 @@ describe("processQuery tests", () => {
92
94
  limit: undefined,
93
95
  cursor: undefined,
94
96
  ownedBy: undefined,
97
+ orderBy: undefined,
95
98
  validAtBlock: undefined,
96
99
  withAttributes: undefined,
97
100
  withMetadata: undefined,
@@ -131,6 +134,7 @@ describe("processQuery tests", () => {
131
134
  limit: undefined,
132
135
  cursor: undefined,
133
136
  ownedBy: undefined,
137
+ orderBy: undefined,
134
138
  validAtBlock: undefined,
135
139
  withAttributes: undefined,
136
140
  withMetadata: undefined,
@@ -176,6 +180,7 @@ describe("processQuery tests", () => {
176
180
  limit: undefined,
177
181
  cursor: undefined,
178
182
  ownedBy: undefined,
183
+ orderBy: undefined,
179
184
  validAtBlock: undefined,
180
185
  withAttributes: undefined,
181
186
  withMetadata: undefined,
@@ -203,6 +208,7 @@ describe("processQuery tests", () => {
203
208
  const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
204
209
  await processQuery(client, {
205
210
  predicates,
211
+ orderBy: undefined,
206
212
  limit: undefined,
207
213
  cursor: undefined,
208
214
  ownedBy: "0x123",
@@ -232,6 +238,7 @@ describe("processQuery tests", () => {
232
238
  predicates,
233
239
  limit: undefined,
234
240
  cursor: undefined,
241
+ orderBy: undefined,
235
242
  validAtBlock: undefined,
236
243
  withAttributes: undefined,
237
244
  withMetadata: undefined,
@@ -256,12 +263,74 @@ describe("processQuery tests", () => {
256
263
  })
257
264
  })
258
265
 
266
+ it("should process simple predicates with orderBy", async () => {
267
+ const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
268
+ await processQuery(client, {
269
+ predicates,
270
+ orderBy: [{ name: "key", type: "string", descending: true }],
271
+ limit: undefined,
272
+ cursor: undefined,
273
+ ownedBy: undefined,
274
+ })
275
+
276
+ expect(client.request).lastCalledWith({
277
+ method: "arkiv_query",
278
+ params: [
279
+ `key = "value"`,
280
+ {
281
+ orderBy: [{ name: "key", type: "string", descending: true }],
282
+ includeData: {
283
+ key: true,
284
+ attributes: false,
285
+ contentType: false,
286
+ payload: false,
287
+ expiration: false,
288
+ owner: false,
289
+ },
290
+ },
291
+ ],
292
+ })
293
+ })
294
+
295
+ it("should process only orderBy", async () => {
296
+ const predicates = [] as Predicate[]
297
+ await processQuery(client, {
298
+ predicates,
299
+ limit: undefined,
300
+ cursor: undefined,
301
+ ownedBy: undefined,
302
+ orderBy: [{ name: "key", type: "string", descending: true }],
303
+ validAtBlock: undefined,
304
+ withAttributes: undefined,
305
+ withMetadata: undefined,
306
+ })
307
+
308
+ expect(client.request).lastCalledWith({
309
+ method: "arkiv_query",
310
+ params: [
311
+ "",
312
+ {
313
+ orderBy: [{ name: "key", type: "string", descending: true }],
314
+ includeData: {
315
+ key: true,
316
+ attributes: false,
317
+ contentType: false,
318
+ payload: false,
319
+ expiration: false,
320
+ owner: false,
321
+ },
322
+ },
323
+ ],
324
+ })
325
+ })
326
+
259
327
  it("should process simple predicate with validAtBlock and paging", async () => {
260
328
  const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
261
329
  await processQuery(client, {
262
330
  predicates,
263
331
  limit: 10,
264
332
  cursor: undefined,
333
+ orderBy: undefined,
265
334
  validAtBlock: 123n,
266
335
  ownedBy: "0x123",
267
336
  })
@@ -1,6 +1,6 @@
1
1
  import type { Hex } from "viem"
2
2
  import type { ArkivClient } from "../clients/baseClient"
3
- import type { RpcQueryOptions } from "../types/rpcSchema"
3
+ import type { RpcOrderByAttribute, RpcQueryOptions } from "../types/rpcSchema"
4
4
  import type { Predicate } from "./predicate"
5
5
 
6
6
  function processPredicates(predicates: Predicate[]): string {
@@ -45,6 +45,7 @@ export async function processQuery(
45
45
  limit: number | undefined
46
46
  cursor: string | undefined
47
47
  ownedBy: Hex | undefined
48
+ orderBy: RpcOrderByAttribute[] | undefined
48
49
  validAtBlock?: bigint | undefined
49
50
  withAttributes?: boolean | undefined
50
51
  withMetadata?: boolean | undefined
@@ -56,6 +57,7 @@ export async function processQuery(
56
57
  limit,
57
58
  cursor,
58
59
  ownedBy,
60
+ orderBy,
59
61
  validAtBlock,
60
62
  withAttributes,
61
63
  withMetadata,
@@ -63,7 +65,7 @@ export async function processQuery(
63
65
  } = queryParams
64
66
 
65
67
  console.debug(
66
- `Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,
68
+ `Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,
67
69
  )
68
70
 
69
71
  let query = processPredicates(predicates)
@@ -97,9 +99,12 @@ export async function processQuery(
97
99
  if (cursor !== undefined) {
98
100
  queryOptions.cursor = cursor
99
101
  }
102
+ if (orderBy !== undefined) {
103
+ queryOptions.orderBy = orderBy
104
+ }
100
105
 
101
106
  console.debug(
102
- `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,
107
+ `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), orderBy: queryOptions.orderBy, resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,
103
108
  )
104
109
 
105
110
  const result = await client.request({
@@ -46,6 +46,7 @@ describe("QueryBuilder", () => {
46
46
  limit: undefined,
47
47
  offset: undefined,
48
48
  ownedBy: undefined,
49
+ orderBy: undefined,
49
50
  validBeforeBlock: undefined,
50
51
  withAttributes: undefined,
51
52
  withMetadata: undefined,
@@ -67,6 +68,7 @@ describe("QueryBuilder", () => {
67
68
  limit: undefined,
68
69
  offset: undefined,
69
70
  ownedBy: undefined,
71
+ orderBy: undefined,
70
72
  validBeforeBlock: undefined,
71
73
  withAttributes: undefined,
72
74
  withMetadata: undefined,
@@ -96,6 +98,7 @@ describe("QueryBuilder", () => {
96
98
  limit: undefined,
97
99
  offset: undefined,
98
100
  ownedBy: undefined,
101
+ orderBy: undefined,
99
102
  validBeforeBlock: undefined,
100
103
  withAttributes: undefined,
101
104
  withMetadata: undefined,
@@ -117,6 +120,7 @@ describe("QueryBuilder", () => {
117
120
  limit: undefined,
118
121
  offset: undefined,
119
122
  ownedBy: undefined,
123
+ orderBy: undefined,
120
124
  validBeforeBlock: undefined,
121
125
  withAttributes: undefined,
122
126
  withMetadata: undefined,
@@ -141,6 +145,7 @@ describe("QueryBuilder", () => {
141
145
  limit: undefined,
142
146
  offset: undefined,
143
147
  ownedBy: undefined,
148
+ orderBy: undefined,
144
149
  validBeforeBlock: undefined,
145
150
  withAttributes: undefined,
146
151
  withMetadata: undefined,
@@ -164,6 +169,7 @@ describe("QueryBuilder", () => {
164
169
  limit: undefined,
165
170
  offset: undefined,
166
171
  ownedBy: owner,
172
+ orderBy: undefined,
167
173
  validBeforeBlock: undefined,
168
174
  withAttributes: undefined,
169
175
  withMetadata: undefined,
@@ -171,6 +177,27 @@ describe("QueryBuilder", () => {
171
177
  })
172
178
  })
173
179
 
180
+ test("orderBy() sets orderBy", async () => {
181
+ mockProcessQuery.mockResolvedValue({
182
+ data: [],
183
+ })
184
+
185
+ const builder = new QueryBuilder(mockClient)
186
+ await builder.orderBy("name", "string", true).fetch()
187
+
188
+ expect(mockProcessQuery).toHaveBeenCalledWith(mockClient, {
189
+ predicates: [],
190
+ limit: undefined,
191
+ offset: undefined,
192
+ ownedBy: undefined,
193
+ orderBy: [{ name: "name", type: "string", desc: true }],
194
+ validAtBlock: undefined,
195
+ withAttributes: undefined,
196
+ withMetadata: undefined,
197
+ withPayload: undefined,
198
+ })
199
+ })
200
+
174
201
  test("limit() sets limit", async () => {
175
202
  mockProcessQuery.mockResolvedValue({
176
203
  data: [],
@@ -184,6 +211,7 @@ describe("QueryBuilder", () => {
184
211
  limit: 10,
185
212
  offset: undefined,
186
213
  ownedBy: undefined,
214
+ orderBy: undefined,
187
215
  validBeforeBlock: undefined,
188
216
  withAttributes: undefined,
189
217
  withMetadata: undefined,
@@ -204,6 +232,7 @@ describe("QueryBuilder", () => {
204
232
  limit: undefined,
205
233
  cursor: "0xABC123",
206
234
  ownedBy: undefined,
235
+ orderBy: undefined,
207
236
  validAtBlock: undefined,
208
237
  withAttributes: undefined,
209
238
  withMetadata: undefined,
@@ -224,6 +253,7 @@ describe("QueryBuilder", () => {
224
253
  limit: undefined,
225
254
  offset: undefined,
226
255
  ownedBy: undefined,
256
+ orderBy: undefined,
227
257
  validBeforeBlock: undefined,
228
258
  withAttributes: true,
229
259
  withMetadata: undefined,
@@ -244,6 +274,7 @@ describe("QueryBuilder", () => {
244
274
  limit: undefined,
245
275
  cursor: undefined,
246
276
  ownedBy: undefined,
277
+ orderBy: undefined,
247
278
  validBeforeBlock: undefined,
248
279
  withAttributes: false,
249
280
  withMetadata: undefined,
@@ -264,6 +295,7 @@ describe("QueryBuilder", () => {
264
295
  limit: undefined,
265
296
  cursor: undefined,
266
297
  ownedBy: undefined,
298
+ orderBy: undefined,
267
299
  validAtBlock: undefined,
268
300
  withAttributes: undefined,
269
301
  withMetadata: true,
@@ -284,6 +316,7 @@ describe("QueryBuilder", () => {
284
316
  limit: undefined,
285
317
  cursor: undefined,
286
318
  ownedBy: undefined,
319
+ orderBy: undefined,
287
320
  validAtBlock: undefined,
288
321
  withAttributes: undefined,
289
322
  withMetadata: false,
@@ -304,6 +337,7 @@ describe("QueryBuilder", () => {
304
337
  limit: undefined,
305
338
  cursor: undefined,
306
339
  ownedBy: undefined,
340
+ orderBy: undefined,
307
341
  validAtBlock: undefined,
308
342
  withAttributes: undefined,
309
343
  withMetadata: undefined,
@@ -1,5 +1,6 @@
1
1
  import type { Hex } from "viem"
2
2
  import type { ArkivClient } from "../clients/baseClient"
3
+ import type { RpcOrderByAttribute } from "../types/rpcSchema"
3
4
  import { entityFromRpcResult } from "../utils/entities"
4
5
  import { processQuery } from "./engine"
5
6
  import type { Predicate } from "./predicate"
@@ -14,6 +15,7 @@ import { QueryResult } from "./queryResult"
14
15
  export class QueryBuilder {
15
16
  private _client: ArkivClient
16
17
  private _ownedBy: Hex | undefined
18
+ private _orderBy: RpcOrderByAttribute[] | undefined
17
19
  private _validAtBlock: bigint | undefined
18
20
  private _withAttributes: boolean | undefined
19
21
  private _withMetadata: boolean | undefined
@@ -41,6 +43,35 @@ export class QueryBuilder {
41
43
  return this
42
44
  }
43
45
 
46
+ /**
47
+ * Sets the orderBy for the query.
48
+ * It can be called multiple times to order by multiple attributes.
49
+ * The order of the attributes is important. The first attribute is the primary order by attribute.
50
+ * @param attributeName - The name of the attribute to order by
51
+ * @param attributeType - The type of the attribute to order by (string or number)
52
+ * @param descending - The boolean value to set the order by descending
53
+ * @returns The QueryBuilder instance
54
+ *
55
+ * @example
56
+ * const builder = new QueryBuilder(client)
57
+ * builder.orderBy("name", "string", true)
58
+ */
59
+ orderBy(
60
+ attributeName: string,
61
+ attributeType: "string" | "number",
62
+ descending: boolean | undefined = undefined,
63
+ ) {
64
+ if (!this._orderBy) {
65
+ this._orderBy = []
66
+ }
67
+ this._orderBy.push({
68
+ name: attributeName,
69
+ type: attributeType === "number" ? "numeric" : attributeType,
70
+ desc: !!descending,
71
+ } as RpcOrderByAttribute)
72
+ return this
73
+ }
74
+
44
75
  /**
45
76
  * Sets the withAttributes flag which will return the attributes for the entities if true
46
77
  * @param withAttributes - The boolean value to set
@@ -167,6 +198,7 @@ export class QueryBuilder {
167
198
  limit: this._limit,
168
199
  cursor: this._cursor,
169
200
  ownedBy: this._ownedBy,
201
+ orderBy: this._orderBy,
170
202
  validAtBlock: this._validAtBlock,
171
203
  withAttributes: this._withAttributes,
172
204
  withMetadata: this._withMetadata,
@@ -198,6 +230,7 @@ export class QueryBuilder {
198
230
  limit: this._limit,
199
231
  cursor: this._cursor,
200
232
  ownedBy: this._ownedBy,
233
+ orderBy: undefined,
201
234
  validAtBlock: this._validAtBlock,
202
235
  withAttributes: false,
203
236
  withMetadata: false,
@@ -11,9 +11,16 @@ export type RpcEntity = {
11
11
  numericAttributes?: [{ key: string; value: number }]
12
12
  }
13
13
 
14
+ export type RpcOrderByAttribute = {
15
+ name: string
16
+ type: "string" | "numeric"
17
+ desc: boolean
18
+ }
19
+
14
20
  export type RpcQueryOptions = {
15
21
  atBlock?: number
16
22
  includeData?: RpcIncludeData
23
+ orderBy?: RpcOrderByAttribute[]
17
24
  resultsPerPage?: number
18
25
  cursor?: string
19
26
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-OY78HYxA.d.cts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-o4fwHXKf.d.ts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryBuilder-BueP5de6.js","names":["predicate","queryOptions: RpcQueryOptions"],"sources":["../src/query/errors.ts","../src/types/entity.ts","../src/utils/entities.ts","../src/query/engine.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":["export class NoMoreResultsError extends Error {\n constructor() {\n super(\"No more results\")\n }\n}\n\nexport class NoCursorOrLimitError extends Error {\n constructor() {\n super(\"Cursor and limit must be defined to fetch next\")\n }\n}\n\nexport class OffsetCannotBeLessThanZeroError extends Error {\n constructor() {\n super(\"Offset cannot be less than 0\")\n }\n}\n\nexport class NoEntityFoundError extends Error {\n constructor() {\n super(\"No entity found\")\n }\n}\n","import { bytesToString, type Hex } from \"viem\"\nimport type { MimeType } from \"../types\"\nimport type { Attribute } from \"./attributes\"\n\nexport class Entity {\n key: Hex\n owner: Hex\n expiresAtBlock: bigint\n payload: Uint8Array\n attributes: Attribute[]\n contentType: MimeType\n\n constructor(\n key: Hex,\n contentType: MimeType,\n owner: Hex,\n expiresAtBlock: bigint,\n payload: Uint8Array,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return bytesToString(this.payload)\n }\n\n toJson(): any {\n return JSON.parse(bytesToString(this.payload))\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt,\n toBytes(rpcEntity.value),\n [\n ...(rpcEntity.stringAttributes ?? []).map(({ key, value }) => ({\n key,\n value,\n })),\n ...(rpcEntity.numericAttributes ?? []).map(({ key, value }) => ({\n key,\n value: Number(value),\n })),\n ],\n )\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcQueryOptions } from \"../types/rpcSchema\"\nimport type { Predicate } from \"./predicate\"\n\nfunction processPredicates(predicates: Predicate[]): string {\n const processValue = (value: string | number) => {\n if (typeof value === \"string\") {\n return `\"${value}\"`\n }\n return value\n }\n return predicates\n .map((predicate) => {\n switch (predicate.type) {\n case \"eq\":\n return `${predicate.key} = ${processValue(predicate.value)}`\n case \"neq\":\n return `${predicate.key} != ${processValue(predicate.value)}`\n case \"gt\":\n return `${predicate.key} > ${processValue(predicate.value)}`\n case \"gte\":\n return `${predicate.key} >= ${processValue(predicate.value)}`\n case \"lt\":\n return `${predicate.key} < ${processValue(predicate.value)}`\n case \"lte\":\n return `${predicate.key} <= ${processValue(predicate.value)}`\n case \"not\":\n return `!${predicate.key}`\n case \"or\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" || \")})`\n case \"and\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" && \")})`\n default:\n return \"\"\n }\n })\n .join(\" && \")\n}\n\nexport async function processQuery(\n client: ArkivClient,\n queryParams: {\n predicates: Predicate[]\n limit: number | undefined\n cursor: string | undefined\n ownedBy: Hex | undefined\n validAtBlock?: bigint | undefined\n withAttributes?: boolean | undefined\n withMetadata?: boolean | undefined\n withPayload?: boolean | undefined\n },\n) {\n const {\n predicates,\n limit,\n cursor,\n ownedBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n withPayload,\n } = queryParams\n\n console.debug(\n `Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,\n )\n\n let query = processPredicates(predicates)\n if (ownedBy) {\n query += ` && $owner=${ownedBy}`\n }\n\n // remove leading and trailing spaces and leading &&\n query = query.trim()\n if (query.startsWith(\"&& \")) {\n query = query.slice(3)\n }\n\n const queryOptions: RpcQueryOptions = {\n includeData: {\n key: true,\n attributes: withAttributes ?? false,\n payload: withPayload ?? false,\n contentType: withMetadata ?? false,\n expiration: withMetadata ?? false,\n owner: withMetadata ?? false,\n },\n }\n\n if (validAtBlock !== undefined) {\n queryOptions.atBlock = Number(validAtBlock)\n }\n if (limit !== undefined) {\n queryOptions.resultsPerPage = limit\n }\n if (cursor !== undefined) {\n queryOptions.cursor = cursor\n }\n\n console.debug(\n `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,\n )\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n console.debug(\"Raw result from query: \", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nexport class QueryResult {\n entities: Entity[]\n private _endOfIteration: boolean\n private _cursor: string | undefined\n private _limit: number | undefined\n private _validAtBlock: bigint | undefined\n private _queryBuilder: QueryBuilder\n\n // Public getters for internal state\n get queryBuilder(): QueryBuilder {\n return this._queryBuilder\n }\n\n get cursor(): string | undefined {\n return this._cursor\n }\n\n constructor(\n entities: Entity[],\n queryBuilder: QueryBuilder,\n cursor: string | undefined,\n limit: number | undefined,\n validAtBlock: bigint | undefined,\n ) {\n this.entities = entities\n this._queryBuilder = queryBuilder\n this._endOfIteration = !limit || entities.length < limit\n this._cursor = cursor\n this._limit = limit\n this._validAtBlock = validAtBlock\n }\n\n async next() {\n if (this._cursor === undefined || this._limit === undefined) {\n throw new NoCursorOrLimitError()\n }\n if (this._endOfIteration) {\n throw new NoMoreResultsError()\n }\n this._queryBuilder.cursor(this._cursor)\n const result = await this._queryBuilder.fetch()\n this.entities = result.entities\n // Update the query builder reference\n this._queryBuilder = result.queryBuilder\n // Check if we've reached the end (no more cursor or we got fewer entities than limit)\n this._endOfIteration = !result.cursor || result.entities.length < this._limit\n // Update the cursor\n this._cursor = result.cursor\n\n // TODO check current block height and if it is not too old\n console.debug(\"Current block height for next page: \", this._validAtBlock)\n }\n\n hasNextPage() {\n return !this._endOfIteration\n }\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport { entityFromRpcResult } from \"../utils/entities\"\nimport { processQuery } from \"./engine\"\nimport type { Predicate } from \"./predicate\"\nimport { QueryResult } from \"./queryResult\"\n\n/**\n * QueryBuilder is a helper class to build queries to the Arkiv DBChains.\n * It can be used to fetch entities from the Arkiv DBChains. It follows the Builder pattern allowing chaining of methods.\n * @param client - The Arkiv client\n * @returns The QueryBuilder instance {@link QueryBuilder}\n */\nexport class QueryBuilder {\n private _client: ArkivClient\n private _ownedBy: Hex | undefined\n private _validAtBlock: bigint | undefined\n private _withAttributes: boolean | undefined\n private _withMetadata: boolean | undefined\n private _withPayload: boolean | undefined\n private _limit: number | undefined\n private _cursor: string | undefined\n private _predicates: Predicate[]\n\n constructor(client: ArkivClient) {\n this._client = client\n this._predicates = []\n }\n\n /**\n * Sets the ownedBy filter\n * @param ownedBy - The address of the owner\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.ownedBy(\"0x1234567890123456789012345678901234567890\")\n */\n ownedBy(ownedBy: Hex) {\n this._ownedBy = ownedBy\n return this\n }\n\n /**\n * Sets the withAttributes flag which will return the attributes for the entities if true\n * @param withAttributes - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withAttributes(true)\n */\n withAttributes(withAttributes: boolean = true) {\n this._withAttributes = withAttributes\n return this\n }\n\n /**\n * Sets the withMetadata flag which will return the metadata (like owner, expiredAt, etc.) for the entities if true\n * @param withMetadata - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withMetadata(true)\n */\n withMetadata(withMetadata: boolean = true) {\n this._withMetadata = withMetadata\n return this\n }\n\n /**\n * Sets the withPayload flag which will return the payload for the entities if true\n * @param withPayload - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withPayload(true)\n */\n withPayload(withPayload: boolean = true) {\n this._withPayload = withPayload\n return this\n }\n\n /**\n * Sets the limit for the query\n * @param limit - The number of entities to return\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.limit(10)\n */\n limit(limit: number) {\n this._limit = limit\n return this\n }\n\n /**\n * Sets the cursor for the query - it is advances setting which rather shouldn't be used manually but it is provided from query result if limit is used (pagination).\n * @param cursor - The cursor to set which tells to RPC Query server where to start or continue the query.\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.offset(10)\n */\n cursor(cursor: string) {\n this._cursor = cursor\n return this\n }\n\n /**\n * Sets the validAtBlock for the query which tells at which block height the state we are intested.\n * If not set, the latest block is used.\n * @param validAtBlock - The block number to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.validAtBlock(10000)\n */\n validAtBlock(validAtBlock: bigint) {\n this._validAtBlock = validAtBlock\n return this\n }\n\n /**\n * Sets the predicates for the query limiting the results. It can be a single predicate or an array of predicates combined with 'and'.\n * Predicates can be nested using 'or' and 'and' predicates.\n * @param predicates - The predicates to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.where(eq(\"name\", \"John\"))\n * builder.where([eq(\"name\", \"John\"), eq(\"age\", 30)])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), and([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), and([eq(\"age\", 32), eq(\"age\", 33)])])])])\n */\n where(predicates: Predicate[] | Predicate) {\n if (Array.isArray(predicates)) {\n this._predicates.push(...predicates)\n } else {\n this._predicates.push(predicates)\n }\n return this\n }\n\n /**\n * Fetches the entities from the query. Re\n * It will return a QueryResult instance which can be used to fetch the next and previous pages.\n * @returns The QueryResult instance {@link QueryResult}\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).fetch()\n * // result = { entities: [Entity, Entity, Entity], next: async () => QueryResult, previous: async () => QueryResult }\n */\n async fetch() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n validAtBlock: this._validAtBlock,\n withAttributes: this._withAttributes,\n withMetadata: this._withMetadata,\n withPayload: this._withPayload,\n })\n\n const entities = await Promise.all(\n queryResult.data.map((entity) => entityFromRpcResult(entity)),\n )\n\n this.cursor(queryResult.cursor)\n this.validAtBlock(queryResult.blockNumber)\n\n return new QueryResult(entities, this, this._cursor, this._limit, this._validAtBlock)\n }\n\n /**\n * Counts the entities from the query.\n * @returns The number of entities\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).count()\n * // result = 10\n */\n async count() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n validAtBlock: this._validAtBlock,\n withAttributes: false,\n withMetadata: false,\n withPayload: false,\n })\n\n return queryResult.data.length ?? 0\n }\n}\n"],"mappings":"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"}