@arkiv-network/sdk 0.4.4 → 0.5.0-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.
- package/dist/chains/index.cjs +5 -88
- package/dist/chains/index.d.cts +33 -33
- package/dist/chains/index.js +2 -85
- package/dist/chains-BDsOtN2a.js +107 -0
- package/dist/chains-BDsOtN2a.js.map +1 -0
- package/dist/chains-XCO31x6G.cjs +124 -0
- package/dist/chunk-pbleEpgJ.cjs +44 -0
- package/dist/{entity-CWj4qVCX.d.ts → entity-D7fzI0Hc.d.ts} +1 -1
- package/dist/{entity-CWj4qVCX.d.ts.map → entity-D7fzI0Hc.d.ts.map} +1 -1
- package/dist/index.cjs +29 -9
- package/dist/index.d.cts +31 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +33 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -5
- package/dist/index.js.map +1 -1
- package/dist/payload-CJN8fTvX.d.cts +6 -0
- package/dist/payload-CJN8fTvX.d.cts.map +1 -0
- package/dist/payload-DKBYYjeA.js +18 -0
- package/dist/payload-DKBYYjeA.js.map +1 -0
- package/dist/payload-Da9gJMG5.d.ts +6 -0
- package/dist/payload-Da9gJMG5.d.ts.map +1 -0
- package/dist/payload-eB1a8vZH.cjs +41 -0
- package/dist/query/index.cjs +1 -1
- package/dist/query/index.d.ts +2 -2
- package/dist/query/index.js +1 -1
- package/dist/{queryBuilder-CXcMv0Uc.d.ts → queryBuilder-BGz98Y1C.d.ts} +2 -2
- package/dist/{queryBuilder-CXcMv0Uc.d.ts.map → queryBuilder-BGz98Y1C.d.ts.map} +1 -1
- package/dist/{queryBuilder-DVs4ZIyZ.js → queryBuilder-Cy7vf54g.js} +1 -1
- package/dist/{queryBuilder-DVs4ZIyZ.js.map → queryBuilder-Cy7vf54g.js.map} +1 -1
- package/dist/{queryBuilder-Cn5JJRMM.cjs → queryBuilder-DS2Q9bgk.cjs} +2 -30
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/dist/utils/index.cjs +4 -15
- package/dist/utils/index.d.cts +1 -4
- package/dist/utils/index.d.cts.map +1 -1
- package/dist/utils/index.d.ts +1 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -11
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/public/subscribeEntityEvents.ts +1 -1
- package/src/clients/decorators/arkivPublic.ts +20 -0
- package/src/index.ts +4 -0
- package/src/utils/chains.test.ts +97 -0
- package/src/utils/chains.ts +19 -0
- package/dist/chains/index.js.map +0 -1
- package/dist/consts-BV9DVKgE.cjs +0 -18
- package/dist/consts-CHtLBwGd.js +0 -7
- package/dist/consts-CHtLBwGd.js.map +0 -1
- /package/dist/{types-CBTc19th.cjs → types-H-TSmRpm.js} +0 -0
- /package/dist/{types-Cv8NMtbo.js → types-o3zWarRp.cjs} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { toBytes } from "viem";
|
|
2
|
+
|
|
3
|
+
//#region src/consts.ts
|
|
4
|
+
const ARKIV_ADDRESS = "0x00000000000000000000000000000061726b6976";
|
|
5
|
+
const BLOCK_TIME = 2;
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region src/utils/payload.ts
|
|
9
|
+
function jsonToPayload(json) {
|
|
10
|
+
return toBytes(JSON.stringify(json));
|
|
11
|
+
}
|
|
12
|
+
function stringToPayload(data) {
|
|
13
|
+
return toBytes(data);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { BLOCK_TIME as i, stringToPayload as n, ARKIV_ADDRESS as r, jsonToPayload as t };
|
|
18
|
+
//# sourceMappingURL=payload-DKBYYjeA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-DKBYYjeA.js","names":[],"sources":["../src/consts.ts","../src/utils/payload.ts"],"sourcesContent":["export const ARKIV_ADDRESS = \"0x00000000000000000000000000000061726b6976\" as `0x${string}`\nexport const BLOCK_TIME = 2 // 2 seconds\n","import { toBytes } from \"viem\"\n\nexport function jsonToPayload(json: object): Uint8Array {\n return toBytes(JSON.stringify(json))\n}\n\nexport function stringToPayload(data: string): Uint8Array {\n return toBytes(data)\n}\n"],"mappings":";;;AAAA,MAAa,gBAAgB;AAC7B,MAAa,aAAa;;;;ACC1B,SAAgB,cAAc,MAA0B;AACtD,QAAO,QAAQ,KAAK,UAAU,KAAK,CAAC;;AAGtC,SAAgB,gBAAgB,MAA0B;AACxD,QAAO,QAAQ,KAAK"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/utils/payload.d.ts
|
|
2
|
+
declare function jsonToPayload(json: object): Uint8Array;
|
|
3
|
+
declare function stringToPayload(data: string): Uint8Array;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { stringToPayload as n, jsonToPayload as t };
|
|
6
|
+
//# sourceMappingURL=payload-Da9gJMG5.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-Da9gJMG5.d.ts","names":[],"sources":["../src/utils/payload.ts"],"sourcesContent":[],"mappings":";iBAEgB,aAAA,gBAA6B;AAA7B,iBAIA,eAAA,CAJ6B,IAAU,EAAA,MAAA,CAAA,EAIR,UAJQ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-pbleEpgJ.cjs');
|
|
2
|
+
let viem = require("viem");
|
|
3
|
+
|
|
4
|
+
//#region src/consts.ts
|
|
5
|
+
const ARKIV_ADDRESS = "0x00000000000000000000000000000061726b6976";
|
|
6
|
+
const BLOCK_TIME = 2;
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region src/utils/payload.ts
|
|
10
|
+
function jsonToPayload(json) {
|
|
11
|
+
return (0, viem.toBytes)(JSON.stringify(json));
|
|
12
|
+
}
|
|
13
|
+
function stringToPayload(data) {
|
|
14
|
+
return (0, viem.toBytes)(data);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
Object.defineProperty(exports, 'ARKIV_ADDRESS', {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return ARKIV_ADDRESS;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, 'BLOCK_TIME', {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return BLOCK_TIME;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, 'jsonToPayload', {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return jsonToPayload;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, 'stringToPayload', {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return stringToPayload;
|
|
40
|
+
}
|
|
41
|
+
});
|
package/dist/query/index.cjs
CHANGED
package/dist/query/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../entity-
|
|
2
|
-
import { a as Predicate, c as and, d as gte, f as lt, g as or, h as not, i as QueryResult, l as eq, m as neq, n as asc, o as PredicateContainerType, p as lte, r as desc, s as PredicateType, t as QueryBuilder, u as gt } from "../queryBuilder-
|
|
1
|
+
import "../entity-D7fzI0Hc.js";
|
|
2
|
+
import { a as Predicate, c as and, d as gte, f as lt, g as or, h as not, i as QueryResult, l as eq, m as neq, n as asc, o as PredicateContainerType, p as lte, r as desc, s as PredicateType, t as QueryBuilder, u as gt } from "../queryBuilder-BGz98Y1C.js";
|
|
3
3
|
|
|
4
4
|
//#region src/query/errors.d.ts
|
|
5
5
|
declare class NoMoreResultsError extends Error {
|
package/dist/query/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as NoMoreResultsError, i as QueryResult, l as OffsetCannotBeLessThanZeroError, n as asc, o as NoCursorOrLimitError, r as desc, s as NoEntityFoundError, t as QueryBuilder } from "../queryBuilder-
|
|
1
|
+
import { c as NoMoreResultsError, i as QueryResult, l as OffsetCannotBeLessThanZeroError, n as asc, o as NoCursorOrLimitError, r as desc, s as NoEntityFoundError, t as QueryBuilder } from "../queryBuilder-Cy7vf54g.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-
|
|
1
|
+
import { g as ArkivClient, t as Entity } from "./entity-D7fzI0Hc.js";
|
|
2
2
|
import { Hex } from "viem";
|
|
3
3
|
|
|
4
4
|
//#region src/query/predicate.d.ts
|
|
@@ -311,4 +311,4 @@ declare class QueryBuilder {
|
|
|
311
311
|
}
|
|
312
312
|
//#endregion
|
|
313
313
|
export { Predicate as a, and as c, gte as d, lt as f, or as g, not as h, QueryResult as i, eq as l, neq as m, asc as n, PredicateContainerType as o, lte as p, desc as r, PredicateType as s, QueryBuilder as t, gt as u };
|
|
314
|
-
//# sourceMappingURL=queryBuilder-
|
|
314
|
+
//# sourceMappingURL=queryBuilder-BGz98Y1C.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder-
|
|
1
|
+
{"version":3,"file":"queryBuilder-BGz98Y1C.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;;AClB7C;;;;;;;;;;ACCK,iBFgCW,GAAA,CEhCK,UAAA,EFgCW,SEhCX,EAAA,CAAA,EFgCyB,SEhCzB;AAerB;AAiBA;AAaA;;;;;;;;AAmPa,iBFlPG,EAAA,CEkPH,GAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,GAAA,MAAA,CAAA,EFlP4C,SEkP5C;;;;;;;;;;;iBFpOG,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cClIrB,WAAA;YACD;EDRA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECKI,YDLJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECAjB,MDA+B,EAAA,EAAA,YAAS,ECCpC,YDDoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECDP,ODCO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA,KEQK,gBAAA,GFRoB;EACb,IAAA,EAAA,MAAA;EAEA,IAAA,EAAA,QAAS,GAAA,QAAA;EAET,KAAA,EAAA,KAAA,GAAA,MAAA;CAKA;;;AAeZ;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcgB,iBErGA,GAAA,CFqG0C,aAAS,EAAA,MAAA,EAAA,aAAA,EAAA,QAAA,GAAA,QAAA,CAAA,EErGa,gBFqGb;AAanE;;;;AClIA;;;;;AAgCY,iBCCI,IAAA,CDDJ,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,QAAA,GAAA,QAAA,CAAA,ECCqE,gBDDrE;;;;;ACjC+B;AAiB3C;AAiBgB,cAaH,YAAA,CAboE;EAapE,QAAA,OAAY;EAYH,QAAA,QAAA;EAcH,QAAA,QAAA;EA+BS,QAAA,aAAA;EAuIR,QAAA,eAAA;EAAc,QAAA,aAAA;EAmBrB,QAAA,YAAA;EAAA,QAAA,MAAA;EAgCA,QAAA,OAAA;EAAA,QAAA,WAAA;sBAvOS;;;;;;;;;;mBAcH;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA+BS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAuIR,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WAgCA"}
|
|
@@ -426,4 +426,4 @@ var QueryBuilder = class {
|
|
|
426
426
|
|
|
427
427
|
//#endregion
|
|
428
428
|
export { entityFromRpcResult as a, NoMoreResultsError as c, QueryResult as i, OffsetCannotBeLessThanZeroError as l, asc as n, NoCursorOrLimitError as o, desc as r, NoEntityFoundError as s, QueryBuilder as t, getLogger as u };
|
|
429
|
-
//# sourceMappingURL=queryBuilder-
|
|
429
|
+
//# sourceMappingURL=queryBuilder-Cy7vf54g.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder-DVs4ZIyZ.js","names":["logger","logger","predicate","queryOptions: RpcQueryOptions","order"],"sources":["../src/utils/logger.ts","../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":["import createDebug from \"debug\"\n\nconst ROOT_NAMESPACE = \"arkiv\"\n\nexport const getLogger = (scope: string) => createDebug(`${ROOT_NAMESPACE}:${scope}`)\n\nexport const enableDebug = (namespaces: string): void => {\n createDebug.enable(namespaces)\n}\n\nexport const disableDebug = (): void => {\n createDebug.disable()\n}\n","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 contentType: MimeType | undefined\n owner: Hex | undefined\n expiresAtBlock: bigint | undefined\n createdAtBlock: bigint | undefined\n lastModifiedAtBlock: bigint | undefined\n transactionIndexInBlock: bigint | undefined\n operationIndexInTransaction: bigint | undefined\n payload: Uint8Array | undefined\n attributes: Attribute[]\n\n constructor(\n key: Hex,\n contentType: MimeType | undefined = undefined,\n owner: Hex | undefined = undefined,\n expiresAtBlock: bigint | undefined = undefined,\n createdAtBlock: bigint | undefined = undefined,\n lastModifiedAtBlock: bigint | undefined = undefined,\n transactionIndexInBlock: bigint | undefined = undefined,\n operationIndexInTransaction: bigint | undefined = undefined,\n payload: Uint8Array | undefined = undefined,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.createdAtBlock = createdAtBlock\n this.lastModifiedAtBlock = lastModifiedAtBlock\n this.transactionIndexInBlock = transactionIndexInBlock\n this.operationIndexInTransaction = operationIndexInTransaction\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return this.payload ? bytesToString(this.payload) : \"\"\n }\n\n toJson(): any {\n return this.payload ? JSON.parse(bytesToString(this.payload)) : {}\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\nimport { getLogger } from \"./logger\"\n\nconst logger = getLogger(\"utils:entities\")\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n logger(\"entityFromRpcResult %o\", rpcEntity)\n\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt !== undefined ? BigInt(rpcEntity.expiresAt) : undefined,\n rpcEntity.createdAtBlock !== undefined ? BigInt(rpcEntity.createdAtBlock) : undefined,\n rpcEntity.lastModifiedAtBlock !== undefined ? BigInt(rpcEntity.lastModifiedAtBlock) : undefined,\n rpcEntity.transactionIndexInBlock !== undefined\n ? BigInt(rpcEntity.transactionIndexInBlock)\n : undefined,\n rpcEntity.operationIndexInTransaction !== undefined\n ? BigInt(rpcEntity.operationIndexInTransaction)\n : undefined,\n rpcEntity.value !== undefined ? toBytes(rpcEntity.value) : undefined,\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 { RpcIncludeData, RpcOrderByAttribute, RpcQueryOptions } from \"../types/rpcSchema\"\nimport { getLogger } from \"../utils/logger\"\nimport type { Predicate } from \"./predicate\"\n\nconst logger = getLogger(\"query:engine\")\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 logger(\"Processing query with params %o\", {\n predicates,\n cursor,\n limit,\n ownedBy,\n orderBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n 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 createdAtBlock: withMetadata ?? false,\n lastModifiedAtBlock: withMetadata ?? false,\n transactionIndexInBlock: withMetadata ?? false,\n operationIndexInTransaction: withMetadata ?? false,\n } as RpcIncludeData,\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 logger(\"Built query to send %s %o\", query, {\n includeData: queryOptions.includeData,\n atBlock: queryOptions.atBlock?.toString(),\n orderBy: queryOptions.orderBy,\n resultsPerPage: queryOptions.resultsPerPage,\n cursor: queryOptions.cursor,\n })\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n logger(\"Raw result from query %o\", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { getLogger } from \"../utils/logger\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nconst logger = getLogger(\"query:result\")\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 logger(\"Current block height for next page %s\", this._validAtBlock?.toString() ?? \"unknown\")\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\ntype OrderByAttribute = {\n name: string\n type: \"string\" | \"number\"\n order: \"asc\" | \"desc\"\n}\n\n/**\n * Helper function to create an ascending 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 * @returns The OrderByAttribute instance\n *\n * @example\n * const ascAttribute = asc(\"name\", \"string\")\n */\nexport function asc(attributeName: string, attributeType: \"string\" | \"number\"): OrderByAttribute {\n return {\n name: attributeName,\n type: attributeType,\n order: \"asc\",\n }\n}\n\n/**\n * Helper function to create a descending 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 * @returns The OrderByAttribute instance\n *\n * @example\n * const descAttribute = desc(\"name\", \"string\")\n */\nexport function desc(attributeName: string, attributeType: \"string\" | \"number\"): OrderByAttribute {\n return {\n name: attributeName,\n type: attributeType,\n order: \"desc\",\n }\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 order - The order to set the order by (asc or desc)\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(\"name\", \"string\", \"desc\")\n */\n orderBy(attributeName: string, attributeType: \"string\" | \"number\", order?: \"asc\" | \"desc\"): this\n /**\n * Sets the orderBy for the query.\n * This method takes the OrderByAttribute object as an argument and is mainly\n * used to use the helper functions asc() and desc() to create the OrderByAttribute instances.\n * @param orderByAttribute - The OrderByAttribute instance to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(asc(\"name\", \"string\"))\n * builder.orderBy(desc(\"name\", \"string\"))\n */\n orderBy(orderByAttribute: OrderByAttribute): this\n orderBy(\n attributeNameOrOrderByAttribute: string | OrderByAttribute,\n attributeType?: \"string\" | \"number\",\n order: \"asc\" | \"desc\" = \"asc\",\n ) {\n if (!this._orderBy) {\n this._orderBy = []\n }\n\n const pushOrderByAttribute = ({ name, type, order }: OrderByAttribute) => {\n this._orderBy?.push({\n name,\n type: type === \"number\" ? \"numeric\" : type,\n desc: order === \"desc\",\n })\n }\n\n if (typeof attributeNameOrOrderByAttribute === \"string\") {\n if (!attributeType) {\n throw new Error(\"attributeType is required when using positional orderBy arguments\")\n }\n pushOrderByAttribute({\n name: attributeNameOrOrderByAttribute,\n type: attributeType,\n order,\n })\n } else {\n pushOrderByAttribute(attributeNameOrOrderByAttribute)\n }\n\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
|
+
{"version":3,"file":"queryBuilder-Cy7vf54g.js","names":["logger","logger","predicate","queryOptions: RpcQueryOptions","order"],"sources":["../src/utils/logger.ts","../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":["import createDebug from \"debug\"\n\nconst ROOT_NAMESPACE = \"arkiv\"\n\nexport const getLogger = (scope: string) => createDebug(`${ROOT_NAMESPACE}:${scope}`)\n\nexport const enableDebug = (namespaces: string): void => {\n createDebug.enable(namespaces)\n}\n\nexport const disableDebug = (): void => {\n createDebug.disable()\n}\n","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 contentType: MimeType | undefined\n owner: Hex | undefined\n expiresAtBlock: bigint | undefined\n createdAtBlock: bigint | undefined\n lastModifiedAtBlock: bigint | undefined\n transactionIndexInBlock: bigint | undefined\n operationIndexInTransaction: bigint | undefined\n payload: Uint8Array | undefined\n attributes: Attribute[]\n\n constructor(\n key: Hex,\n contentType: MimeType | undefined = undefined,\n owner: Hex | undefined = undefined,\n expiresAtBlock: bigint | undefined = undefined,\n createdAtBlock: bigint | undefined = undefined,\n lastModifiedAtBlock: bigint | undefined = undefined,\n transactionIndexInBlock: bigint | undefined = undefined,\n operationIndexInTransaction: bigint | undefined = undefined,\n payload: Uint8Array | undefined = undefined,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.createdAtBlock = createdAtBlock\n this.lastModifiedAtBlock = lastModifiedAtBlock\n this.transactionIndexInBlock = transactionIndexInBlock\n this.operationIndexInTransaction = operationIndexInTransaction\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return this.payload ? bytesToString(this.payload) : \"\"\n }\n\n toJson(): any {\n return this.payload ? JSON.parse(bytesToString(this.payload)) : {}\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\nimport { getLogger } from \"./logger\"\n\nconst logger = getLogger(\"utils:entities\")\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n logger(\"entityFromRpcResult %o\", rpcEntity)\n\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt !== undefined ? BigInt(rpcEntity.expiresAt) : undefined,\n rpcEntity.createdAtBlock !== undefined ? BigInt(rpcEntity.createdAtBlock) : undefined,\n rpcEntity.lastModifiedAtBlock !== undefined ? BigInt(rpcEntity.lastModifiedAtBlock) : undefined,\n rpcEntity.transactionIndexInBlock !== undefined\n ? BigInt(rpcEntity.transactionIndexInBlock)\n : undefined,\n rpcEntity.operationIndexInTransaction !== undefined\n ? BigInt(rpcEntity.operationIndexInTransaction)\n : undefined,\n rpcEntity.value !== undefined ? toBytes(rpcEntity.value) : undefined,\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 { RpcIncludeData, RpcOrderByAttribute, RpcQueryOptions } from \"../types/rpcSchema\"\nimport { getLogger } from \"../utils/logger\"\nimport type { Predicate } from \"./predicate\"\n\nconst logger = getLogger(\"query:engine\")\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 logger(\"Processing query with params %o\", {\n predicates,\n cursor,\n limit,\n ownedBy,\n orderBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n 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 createdAtBlock: withMetadata ?? false,\n lastModifiedAtBlock: withMetadata ?? false,\n transactionIndexInBlock: withMetadata ?? false,\n operationIndexInTransaction: withMetadata ?? false,\n } as RpcIncludeData,\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 logger(\"Built query to send %s %o\", query, {\n includeData: queryOptions.includeData,\n atBlock: queryOptions.atBlock?.toString(),\n orderBy: queryOptions.orderBy,\n resultsPerPage: queryOptions.resultsPerPage,\n cursor: queryOptions.cursor,\n })\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n logger(\"Raw result from query %o\", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { getLogger } from \"../utils/logger\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nconst logger = getLogger(\"query:result\")\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 logger(\"Current block height for next page %s\", this._validAtBlock?.toString() ?? \"unknown\")\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\ntype OrderByAttribute = {\n name: string\n type: \"string\" | \"number\"\n order: \"asc\" | \"desc\"\n}\n\n/**\n * Helper function to create an ascending 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 * @returns The OrderByAttribute instance\n *\n * @example\n * const ascAttribute = asc(\"name\", \"string\")\n */\nexport function asc(attributeName: string, attributeType: \"string\" | \"number\"): OrderByAttribute {\n return {\n name: attributeName,\n type: attributeType,\n order: \"asc\",\n }\n}\n\n/**\n * Helper function to create a descending 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 * @returns The OrderByAttribute instance\n *\n * @example\n * const descAttribute = desc(\"name\", \"string\")\n */\nexport function desc(attributeName: string, attributeType: \"string\" | \"number\"): OrderByAttribute {\n return {\n name: attributeName,\n type: attributeType,\n order: \"desc\",\n }\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 order - The order to set the order by (asc or desc)\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(\"name\", \"string\", \"desc\")\n */\n orderBy(attributeName: string, attributeType: \"string\" | \"number\", order?: \"asc\" | \"desc\"): this\n /**\n * Sets the orderBy for the query.\n * This method takes the OrderByAttribute object as an argument and is mainly\n * used to use the helper functions asc() and desc() to create the OrderByAttribute instances.\n * @param orderByAttribute - The OrderByAttribute instance to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(asc(\"name\", \"string\"))\n * builder.orderBy(desc(\"name\", \"string\"))\n */\n orderBy(orderByAttribute: OrderByAttribute): this\n orderBy(\n attributeNameOrOrderByAttribute: string | OrderByAttribute,\n attributeType?: \"string\" | \"number\",\n order: \"asc\" | \"desc\" = \"asc\",\n ) {\n if (!this._orderBy) {\n this._orderBy = []\n }\n\n const pushOrderByAttribute = ({ name, type, order }: OrderByAttribute) => {\n this._orderBy?.push({\n name,\n type: type === \"number\" ? \"numeric\" : type,\n desc: order === \"desc\",\n })\n }\n\n if (typeof attributeNameOrOrderByAttribute === \"string\") {\n if (!attributeType) {\n throw new Error(\"attributeType is required when using positional orderBy arguments\")\n }\n pushOrderByAttribute({\n name: attributeNameOrOrderByAttribute,\n type: attributeType,\n order,\n })\n } else {\n pushOrderByAttribute(attributeNameOrOrderByAttribute)\n }\n\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,29 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc$1) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
-
key = keys[i];
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
-
get: ((k) => from[k]).bind(null, key),
|
|
13
|
-
enumerable: !(desc$1 = __getOwnPropDesc(from, key)) || desc$1.enumerable
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
|
|
23
|
-
//#endregion
|
|
1
|
+
const require_chunk = require('./chunk-pbleEpgJ.cjs');
|
|
24
2
|
let viem = require("viem");
|
|
25
3
|
let debug = require("debug");
|
|
26
|
-
debug = __toESM(debug);
|
|
4
|
+
debug = require_chunk.__toESM(debug);
|
|
27
5
|
|
|
28
6
|
//#region src/utils/logger.ts
|
|
29
7
|
const ROOT_NAMESPACE = "arkiv";
|
|
@@ -485,12 +463,6 @@ Object.defineProperty(exports, 'QueryResult', {
|
|
|
485
463
|
return QueryResult;
|
|
486
464
|
}
|
|
487
465
|
});
|
|
488
|
-
Object.defineProperty(exports, '__toESM', {
|
|
489
|
-
enumerable: true,
|
|
490
|
-
get: function () {
|
|
491
|
-
return __toESM;
|
|
492
|
-
}
|
|
493
|
-
});
|
|
494
466
|
Object.defineProperty(exports, 'asc', {
|
|
495
467
|
enumerable: true,
|
|
496
468
|
get: function () {
|
package/dist/types/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require('../types-
|
|
1
|
+
require('../types-o3zWarRp.cjs');
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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-
|
|
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-D7fzI0Hc.js";
|
|
2
2
|
export { ArkivRpcSchema, Attribute, ChangeOwnershipParameters, ChangeOwnershipReturnType, CreateEntityParameters, CreateEntityReturnType, DeleteEntityParameters, DeleteEntityReturnType, Entity, ExtendEntityParameters, ExtendEntityReturnType, MimeType, MutateEntitiesParameters, MutateEntitiesReturnType, RpcEntity, RpcIncludeData, RpcQueryOptions, TxParams, UpdateEntityParameters, UpdateEntityReturnType };
|
package/dist/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "../types-
|
|
1
|
+
import "../types-H-TSmRpm.js";
|
package/dist/utils/index.cjs
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_consts = require('../consts-BV9DVKgE.cjs');
|
|
3
|
-
let viem = require("viem");
|
|
1
|
+
const require_payload = require('../payload-eB1a8vZH.cjs');
|
|
4
2
|
|
|
5
3
|
//#region src/utils/expirationTime.ts
|
|
6
4
|
const ExpirationTime = {
|
|
@@ -11,23 +9,14 @@ const ExpirationTime = {
|
|
|
11
9
|
fromWeeks: (weeks) => weeks * 7 * 24 * 60 * 60,
|
|
12
10
|
fromMonths: (months) => months * 30 * 24 * 60 * 60,
|
|
13
11
|
fromYears: (years) => years * 365 * 24 * 60 * 60,
|
|
14
|
-
fromBlocks: (blocks) => blocks *
|
|
12
|
+
fromBlocks: (blocks) => blocks * require_payload.BLOCK_TIME,
|
|
15
13
|
fromDate: (date) => Math.floor(date.getTime() / 1e3) - Math.floor(Date.now() / 1e3)
|
|
16
14
|
};
|
|
17
15
|
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/utils/payload.ts
|
|
20
|
-
function jsonToPayload(json) {
|
|
21
|
-
return (0, viem.toBytes)(JSON.stringify(json));
|
|
22
|
-
}
|
|
23
|
-
function stringToPayload(data) {
|
|
24
|
-
return (0, viem.toBytes)(data);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
16
|
//#endregion
|
|
28
17
|
exports.ExpirationTime = ExpirationTime;
|
|
29
|
-
exports.jsonToPayload = jsonToPayload;
|
|
30
|
-
exports.stringToPayload = stringToPayload;
|
|
18
|
+
exports.jsonToPayload = require_payload.jsonToPayload;
|
|
19
|
+
exports.stringToPayload = require_payload.stringToPayload;
|
|
31
20
|
var viem_utils = require("viem/utils");
|
|
32
21
|
Object.keys(viem_utils).forEach(function (k) {
|
|
33
22
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
package/dist/utils/index.d.cts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { n as stringToPayload, t as jsonToPayload } from "../payload-CJN8fTvX.cjs";
|
|
1
2
|
export * from "viem/utils";
|
|
2
3
|
|
|
3
4
|
//#region src/utils/expirationTime.d.ts
|
|
@@ -13,9 +14,5 @@ declare const ExpirationTime: {
|
|
|
13
14
|
fromDate: (date: Date) => number;
|
|
14
15
|
};
|
|
15
16
|
//#endregion
|
|
16
|
-
//#region src/utils/payload.d.ts
|
|
17
|
-
declare function jsonToPayload(json: object): Uint8Array;
|
|
18
|
-
declare function stringToPayload(data: string): Uint8Array;
|
|
19
|
-
//#endregion
|
|
20
17
|
export { ExpirationTime, jsonToPayload, stringToPayload };
|
|
21
18
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":[],"mappings":";;;;cAEa;;;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;mBAAJ"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { n as stringToPayload, t as jsonToPayload } from "../payload-Da9gJMG5.js";
|
|
1
2
|
export * from "viem/utils";
|
|
2
3
|
|
|
3
4
|
//#region src/utils/expirationTime.d.ts
|
|
@@ -13,9 +14,5 @@ declare const ExpirationTime: {
|
|
|
13
14
|
fromDate: (date: Date) => number;
|
|
14
15
|
};
|
|
15
16
|
//#endregion
|
|
16
|
-
//#region src/utils/payload.d.ts
|
|
17
|
-
declare function jsonToPayload(json: object): Uint8Array;
|
|
18
|
-
declare function stringToPayload(data: string): Uint8Array;
|
|
19
|
-
//#endregion
|
|
20
17
|
export { ExpirationTime, jsonToPayload, stringToPayload };
|
|
21
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/utils/expirationTime.ts"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":[],"mappings":";;;;cAEa;;;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;mBAAJ"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { toBytes } from "viem";
|
|
1
|
+
import { i as BLOCK_TIME, n as stringToPayload, t as jsonToPayload } from "../payload-DKBYYjeA.js";
|
|
3
2
|
|
|
4
3
|
export * from "viem/utils"
|
|
5
4
|
|
|
@@ -16,15 +15,6 @@ const ExpirationTime = {
|
|
|
16
15
|
fromDate: (date) => Math.floor(date.getTime() / 1e3) - Math.floor(Date.now() / 1e3)
|
|
17
16
|
};
|
|
18
17
|
|
|
19
|
-
//#endregion
|
|
20
|
-
//#region src/utils/payload.ts
|
|
21
|
-
function jsonToPayload(json) {
|
|
22
|
-
return toBytes(JSON.stringify(json));
|
|
23
|
-
}
|
|
24
|
-
function stringToPayload(data) {
|
|
25
|
-
return toBytes(data);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
18
|
//#endregion
|
|
29
19
|
export { ExpirationTime, jsonToPayload, stringToPayload };
|
|
30
20
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/utils/expirationTime.ts"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":["import { BLOCK_TIME } from \"../consts\"\n\nexport const ExpirationTime = {\n fromSeconds: (seconds: number) => seconds,\n fromMinutes: (minutes: number) => minutes * 60,\n fromHours: (hours: number) => hours * 60 * 60,\n fromDays: (days: number) => days * 24 * 60 * 60,\n fromWeeks: (weeks: number) => weeks * 7 * 24 * 60 * 60,\n fromMonths: (months: number) => months * 30 * 24 * 60 * 60,\n fromYears: (years: number) => years * 365 * 24 * 60 * 60,\n fromBlocks: (blocks: number) => blocks * BLOCK_TIME,\n fromDate: (date: Date) => Math.floor(date.getTime() / 1000) - Math.floor(Date.now() / 1000),\n}\n"],"mappings":";;;;;AAEA,MAAa,iBAAiB;CAC5B,cAAc,YAAoB;CAClC,cAAc,YAAoB,UAAU;CAC5C,YAAY,UAAkB,QAAQ,KAAK;CAC3C,WAAW,SAAiB,OAAO,KAAK,KAAK;CAC7C,YAAY,UAAkB,QAAQ,IAAI,KAAK,KAAK;CACpD,aAAa,WAAmB,SAAS,KAAK,KAAK,KAAK;CACxD,YAAY,UAAkB,QAAQ,MAAM,KAAK,KAAK;CACtD,aAAa,WAAmB,SAAS;CACzC,WAAW,SAAe,KAAK,MAAM,KAAK,SAAS,GAAG,IAAK,GAAG,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;CAC5F"}
|
package/package.json
CHANGED
|
@@ -46,7 +46,7 @@ export async function subscribeEntityEvents(
|
|
|
46
46
|
): Promise<() => void> {
|
|
47
47
|
const unsubscribe = (client as PublicArkivClient).watchEvent({
|
|
48
48
|
pollingInterval: pollingInterval ?? 1000,
|
|
49
|
-
fromBlock
|
|
49
|
+
fromBlock,
|
|
50
50
|
events: arkivABI,
|
|
51
51
|
onLogs: (logs) => {
|
|
52
52
|
logger("logs from subscribeEntityEvents %o", logs)
|
|
@@ -136,6 +136,26 @@ export type PublicArkivActions<
|
|
|
136
136
|
blockDuration: number
|
|
137
137
|
}>
|
|
138
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Subscribes to entity events.
|
|
141
|
+
* @param events to watch - {onError, onEntityCreated, onEntityUpdated, onEntityDeleted, onEntityExpiresInExtended}
|
|
142
|
+
* @param pollingInterval - The polling interval in milliseconds. {@link number}
|
|
143
|
+
* @param fromBlock - The block number to start from. {@link bigint}
|
|
144
|
+
* @returns A function to unsubscribe from the events. {() => void}
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* import { createPublicClient, http } from 'arkiv'
|
|
148
|
+
* import { kaolin } from 'arkiv/chains'
|
|
149
|
+
*
|
|
150
|
+
* const client = createPublicClient({
|
|
151
|
+
* chain: kaolin,
|
|
152
|
+
* transport: http(),
|
|
153
|
+
* })
|
|
154
|
+
* const unsubscribe = await client.subscribeEntityEvents({
|
|
155
|
+
* onError: (error) => console.error("subscribeEntityEvents error", error),
|
|
156
|
+
* })
|
|
157
|
+
* unsubscribe() // unsubscribe from the events
|
|
158
|
+
*/
|
|
139
159
|
subscribeEntityEvents: (
|
|
140
160
|
{
|
|
141
161
|
onError,
|
package/src/index.ts
CHANGED
|
@@ -10,3 +10,7 @@ export { createWalletClient } from "./clients/createWalletClient"
|
|
|
10
10
|
|
|
11
11
|
// re-export arkiv types in main index file
|
|
12
12
|
export * from "./types"
|
|
13
|
+
|
|
14
|
+
// re-export chosen utils
|
|
15
|
+
export { chainFromName } from "./utils/chains"
|
|
16
|
+
export { jsonToPayload, stringToPayload } from "./utils/payload"
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test"
|
|
2
|
+
import { kaolin, localhost, marketplace, mendoza } from "../chains"
|
|
3
|
+
import { chainFromName } from "./chains"
|
|
4
|
+
|
|
5
|
+
describe("chainFromName", () => {
|
|
6
|
+
describe("valid chain names", () => {
|
|
7
|
+
test("returns kaolin chain for 'kaolin'", () => {
|
|
8
|
+
const chain = chainFromName("kaolin")
|
|
9
|
+
expect(chain).toBe(kaolin)
|
|
10
|
+
expect(chain.id).toBe(60138453025)
|
|
11
|
+
expect(chain.name).toBe("Kaolin")
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test("returns mendoza chain for 'mendoza'", () => {
|
|
15
|
+
const chain = chainFromName("mendoza")
|
|
16
|
+
expect(chain).toBe(mendoza)
|
|
17
|
+
expect(chain.id).toBe(60138453056)
|
|
18
|
+
expect(chain.name).toBe("Mendoza")
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test("returns localhost chain for 'localhost'", () => {
|
|
22
|
+
const chain = chainFromName("localhost")
|
|
23
|
+
expect(chain).toBe(localhost)
|
|
24
|
+
expect(chain.id).toBe(1337)
|
|
25
|
+
expect(chain.name).toBe("Localhost")
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test("returns marketplace chain for 'marketplace'", () => {
|
|
29
|
+
const chain = chainFromName("marketplace")
|
|
30
|
+
expect(chain).toBe(marketplace)
|
|
31
|
+
expect(chain.id).toBe(60138453027)
|
|
32
|
+
expect(chain.name).toBe("Marketplace")
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
describe("case insensitivity", () => {
|
|
37
|
+
test("handles uppercase chain names", () => {
|
|
38
|
+
expect(chainFromName("KAOLIN")).toBe(kaolin)
|
|
39
|
+
expect(chainFromName("MENDOZA")).toBe(mendoza)
|
|
40
|
+
expect(chainFromName("LOCALHOST")).toBe(localhost)
|
|
41
|
+
expect(chainFromName("MARKETPLACE")).toBe(marketplace)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test("handles mixed case chain names", () => {
|
|
45
|
+
expect(chainFromName("Kaolin")).toBe(kaolin)
|
|
46
|
+
expect(chainFromName("Mendoza")).toBe(mendoza)
|
|
47
|
+
expect(chainFromName("Localhost")).toBe(localhost)
|
|
48
|
+
expect(chainFromName("Marketplace")).toBe(marketplace)
|
|
49
|
+
expect(chainFromName("kAoLiN")).toBe(kaolin)
|
|
50
|
+
expect(chainFromName("MeNdOzA")).toBe(mendoza)
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
describe("error handling", () => {
|
|
55
|
+
test("throws error for unknown chain name", () => {
|
|
56
|
+
expect(() => chainFromName("unknown")).toThrow("Unknown chain: unknown")
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
test("throws error for empty string", () => {
|
|
60
|
+
expect(() => chainFromName("")).toThrow("Unknown chain: ")
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test("throws error for chain name with whitespace", () => {
|
|
64
|
+
expect(() => chainFromName("kaolin ")).toThrow("Unknown chain: kaolin ")
|
|
65
|
+
expect(() => chainFromName(" kaolin")).toThrow("Unknown chain: kaolin")
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
test("throws error for similar but incorrect chain names", () => {
|
|
69
|
+
expect(() => chainFromName("kaolinn")).toThrow("Unknown chain: kaolinn")
|
|
70
|
+
expect(() => chainFromName("mendoz")).toThrow("Unknown chain: mendoz")
|
|
71
|
+
expect(() => chainFromName("local")).toThrow("Unknown chain: local")
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
describe("chain properties", () => {
|
|
76
|
+
test("returned chain has required viem Chain properties", () => {
|
|
77
|
+
const chain = chainFromName("kaolin")
|
|
78
|
+
|
|
79
|
+
expect(chain).toHaveProperty("id")
|
|
80
|
+
expect(chain).toHaveProperty("name")
|
|
81
|
+
expect(chain).toHaveProperty("network")
|
|
82
|
+
expect(chain).toHaveProperty("nativeCurrency")
|
|
83
|
+
expect(chain).toHaveProperty("rpcUrls")
|
|
84
|
+
expect(typeof chain.id).toBe("number")
|
|
85
|
+
expect(typeof chain.name).toBe("string")
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test("returned chain has rpcUrls configured", () => {
|
|
89
|
+
const chain = chainFromName("mendoza")
|
|
90
|
+
|
|
91
|
+
expect(chain.rpcUrls).toBeDefined()
|
|
92
|
+
expect(chain.rpcUrls.default).toBeDefined()
|
|
93
|
+
expect(chain.rpcUrls.default.http).toBeInstanceOf(Array)
|
|
94
|
+
expect(chain.rpcUrls.default.http.length).toBeGreaterThan(0)
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Chain } from "viem"
|
|
2
|
+
import * as chains from "../chains"
|
|
3
|
+
|
|
4
|
+
// Create a lookup map from all exported chains
|
|
5
|
+
const chainMap = new Map(Object.entries(chains).map(([key, value]) => [key.toLowerCase(), value]))
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get a chain from its name
|
|
9
|
+
* @param name - The name of the chain, case insensitive
|
|
10
|
+
* @returns The chain
|
|
11
|
+
* @throws An error if the chain is not found
|
|
12
|
+
*/
|
|
13
|
+
export function chainFromName(name: string): Chain {
|
|
14
|
+
const chain = chainMap.get(name.toLowerCase())
|
|
15
|
+
if (!chain) {
|
|
16
|
+
throw new Error(`Unknown chain: ${name}`)
|
|
17
|
+
}
|
|
18
|
+
return chain as Chain
|
|
19
|
+
}
|
package/dist/chains/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/chains/kaolin.ts","../../src/chains/localhost.ts","../../src/chains/marketplace.ts","../../src/chains/mendoza.ts"],"sourcesContent":["import { defineChain } from \"viem\"\n\nexport const kaolin = defineChain({\n id: 60138453025,\n name: \"Kaolin\",\n network: \"kaolin\",\n nativeCurrency: {\n name: \"Ethereum\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://kaolin.hoodi.arkiv.network/rpc\"],\n webSocket: [\"wss://kaolin.hoodi.arkiv.network/rpc/ws\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Kaolin Arkiv Explorer\",\n url: \"https://explorer.kaolin.hoodi.arkiv.network\",\n apiUrl: \"https://explorer.kaolin.hoodi.arkiv.network/api\",\n },\n },\n testnet: true,\n})\n","import { defineChain } from \"viem\"\n\nexport const localhost = defineChain({\n id: 1337,\n name: \"Localhost\",\n nativeCurrency: {\n decimals: 18,\n name: \"Ether\",\n symbol: \"ETH\",\n },\n rpcUrls: {\n default: { http: [\"http://127.0.0.1:8545\"] },\n },\n})\n","import { defineChain } from \"viem\"\n\nexport const marketplace = defineChain({\n id: 60138453027,\n name: \"Marketplace\",\n network: \"marketplace\",\n nativeCurrency: {\n name: \"Ethereum\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://marketplace.hoodi.arkiv.network/rpc\"],\n webSocket: [\"wss://marketplace.hoodi.arkiv.network/rpc/ws\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Marketplace Arkiv Explorer\",\n url: \"https://explorer.marketplace.hoodi.arkiv.network\",\n apiUrl: \"https://explorer.marketplace.hoodi.arkiv.network/api\",\n },\n },\n testnet: true,\n})\n","import { defineChain } from \"viem\"\n\nexport const mendoza = defineChain({\n id: 60138453056,\n name: \"Mendoza\",\n network: \"mendoza\",\n nativeCurrency: {\n name: \"Ethereum\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://mendoza.hoodi.arkiv.network/rpc\"],\n webSocket: [\"wss://mendoza.hoodi.arkiv.network/rpc/ws\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Mendoza Arkiv Explorer\",\n url: \"https://explorer.mendoza.hoodi.arkiv.network\",\n apiUrl: \"https://explorer.mendoza.hoodi.arkiv.network/api\",\n },\n },\n testnet: true,\n})\n"],"mappings":";;;AAEA,MAAa,SAAS,YAAY;CAChC,IAAI;CACJ,MAAM;CACN,SAAS;CACT,gBAAgB;EACd,MAAM;EACN,QAAQ;EACR,UAAU;EACX;CACD,SAAS,EACP,SAAS;EACP,MAAM,CAAC,yCAAyC;EAChD,WAAW,CAAC,0CAA0C;EACvD,EACF;CACD,gBAAgB,EACd,SAAS;EACP,MAAM;EACN,KAAK;EACL,QAAQ;EACT,EACF;CACD,SAAS;CACV,CAAC;;;;ACvBF,MAAa,YAAY,YAAY;CACnC,IAAI;CACJ,MAAM;CACN,gBAAgB;EACd,UAAU;EACV,MAAM;EACN,QAAQ;EACT;CACD,SAAS,EACP,SAAS,EAAE,MAAM,CAAC,wBAAwB,EAAE,EAC7C;CACF,CAAC;;;;ACXF,MAAa,cAAc,YAAY;CACrC,IAAI;CACJ,MAAM;CACN,SAAS;CACT,gBAAgB;EACd,MAAM;EACN,QAAQ;EACR,UAAU;EACX;CACD,SAAS,EACP,SAAS;EACP,MAAM,CAAC,8CAA8C;EACrD,WAAW,CAAC,+CAA+C;EAC5D,EACF;CACD,gBAAgB,EACd,SAAS;EACP,MAAM;EACN,KAAK;EACL,QAAQ;EACT,EACF;CACD,SAAS;CACV,CAAC;;;;ACvBF,MAAa,UAAU,YAAY;CACjC,IAAI;CACJ,MAAM;CACN,SAAS;CACT,gBAAgB;EACd,MAAM;EACN,QAAQ;EACR,UAAU;EACX;CACD,SAAS,EACP,SAAS;EACP,MAAM,CAAC,0CAA0C;EACjD,WAAW,CAAC,2CAA2C;EACxD,EACF;CACD,gBAAgB,EACd,SAAS;EACP,MAAM;EACN,KAAK;EACL,QAAQ;EACT,EACF;CACD,SAAS;CACV,CAAC"}
|