@iota/graphql-transport 0.0.0-dev-20251015065834
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/CHANGELOG.md +248 -0
- package/LICENSE +201 -0
- package/README.md +104 -0
- package/dist/cjs/generated/queries.d.ts +9099 -0
- package/dist/cjs/generated/queries.js +3021 -0
- package/dist/cjs/generated/queries.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/mappers/bcs.d.ts +4 -0
- package/dist/cjs/mappers/bcs.js +71 -0
- package/dist/cjs/mappers/bcs.js.map +7 -0
- package/dist/cjs/mappers/checkpoint.d.ts +3 -0
- package/dist/cjs/mappers/checkpoint.js +64 -0
- package/dist/cjs/mappers/checkpoint.js.map +7 -0
- package/dist/cjs/mappers/display.d.ts +8 -0
- package/dist/cjs/mappers/display.js +43 -0
- package/dist/cjs/mappers/display.js.map +7 -0
- package/dist/cjs/mappers/move.d.ts +57 -0
- package/dist/cjs/mappers/move.js +231 -0
- package/dist/cjs/mappers/move.js.map +7 -0
- package/dist/cjs/mappers/object.d.ts +10 -0
- package/dist/cjs/mappers/object.js +79 -0
- package/dist/cjs/mappers/object.js.map +7 -0
- package/dist/cjs/mappers/owner.d.ts +3 -0
- package/dist/cjs/mappers/owner.js +48 -0
- package/dist/cjs/mappers/owner.js.map +7 -0
- package/dist/cjs/mappers/stakes.d.ts +3 -0
- package/dist/cjs/mappers/stakes.js +48 -0
- package/dist/cjs/mappers/stakes.js.map +7 -0
- package/dist/cjs/mappers/transaction-block.d.ts +7 -0
- package/dist/cjs/mappers/transaction-block.js +487 -0
- package/dist/cjs/mappers/transaction-block.js.map +7 -0
- package/dist/cjs/mappers/util.d.ts +2 -0
- package/dist/cjs/mappers/util.js +31 -0
- package/dist/cjs/mappers/util.js.map +7 -0
- package/dist/cjs/mappers/validator.d.ts +3 -0
- package/dist/cjs/mappers/validator.js +64 -0
- package/dist/cjs/mappers/validator.js.map +7 -0
- package/dist/cjs/methods.d.ts +19 -0
- package/dist/cjs/methods.js +1377 -0
- package/dist/cjs/methods.js.map +7 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/transport.d.ts +44 -0
- package/dist/cjs/transport.js +155 -0
- package/dist/cjs/transport.js.map +7 -0
- package/dist/esm/generated/queries.d.ts +9099 -0
- package/dist/esm/generated/queries.js +3001 -0
- package/dist/esm/generated/queries.js.map +7 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/mappers/bcs.d.ts +4 -0
- package/dist/esm/mappers/bcs.js +51 -0
- package/dist/esm/mappers/bcs.js.map +7 -0
- package/dist/esm/mappers/checkpoint.d.ts +3 -0
- package/dist/esm/mappers/checkpoint.js +44 -0
- package/dist/esm/mappers/checkpoint.js.map +7 -0
- package/dist/esm/mappers/display.d.ts +8 -0
- package/dist/esm/mappers/display.js +23 -0
- package/dist/esm/mappers/display.js.map +7 -0
- package/dist/esm/mappers/move.d.ts +57 -0
- package/dist/esm/mappers/move.js +211 -0
- package/dist/esm/mappers/move.js.map +7 -0
- package/dist/esm/mappers/object.d.ts +10 -0
- package/dist/esm/mappers/object.js +59 -0
- package/dist/esm/mappers/object.js.map +7 -0
- package/dist/esm/mappers/owner.d.ts +3 -0
- package/dist/esm/mappers/owner.js +28 -0
- package/dist/esm/mappers/owner.js.map +7 -0
- package/dist/esm/mappers/stakes.d.ts +3 -0
- package/dist/esm/mappers/stakes.js +28 -0
- package/dist/esm/mappers/stakes.js.map +7 -0
- package/dist/esm/mappers/transaction-block.d.ts +7 -0
- package/dist/esm/mappers/transaction-block.js +467 -0
- package/dist/esm/mappers/transaction-block.js.map +7 -0
- package/dist/esm/mappers/util.d.ts +2 -0
- package/dist/esm/mappers/util.js +11 -0
- package/dist/esm/mappers/util.js.map +7 -0
- package/dist/esm/mappers/validator.d.ts +3 -0
- package/dist/esm/mappers/validator.js +44 -0
- package/dist/esm/mappers/validator.js.map +7 -0
- package/dist/esm/methods.d.ts +19 -0
- package/dist/esm/methods.js +1406 -0
- package/dist/esm/methods.js.map +7 -0
- package/dist/esm/package.json +5 -0
- package/dist/esm/transport.d.ts +44 -0
- package/dist/esm/transport.js +135 -0
- package/dist/esm/transport.js.map +7 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './transport.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './transport.js';\n"],
|
|
5
|
+
"mappings": "AAIA,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { toBase64 } from "@iota/bcs";
|
|
2
|
+
import { bcs } from "@iota/iota-sdk/bcs";
|
|
3
|
+
import { toShortTypeString } from "./util.js";
|
|
4
|
+
function layoutToBcs(layout) {
|
|
5
|
+
switch (layout) {
|
|
6
|
+
case "address":
|
|
7
|
+
return bcs.Address;
|
|
8
|
+
case "bool":
|
|
9
|
+
return bcs.Bool;
|
|
10
|
+
case "u8":
|
|
11
|
+
return bcs.U8;
|
|
12
|
+
case "u16":
|
|
13
|
+
return bcs.U16;
|
|
14
|
+
case "u32":
|
|
15
|
+
return bcs.U32;
|
|
16
|
+
case "u64":
|
|
17
|
+
return bcs.U64;
|
|
18
|
+
case "u128":
|
|
19
|
+
return bcs.U128;
|
|
20
|
+
case "u256":
|
|
21
|
+
return bcs.U256;
|
|
22
|
+
}
|
|
23
|
+
if ("vector" in layout) {
|
|
24
|
+
return bcs.vector(layoutToBcs(layout.vector));
|
|
25
|
+
}
|
|
26
|
+
if ("struct" in layout) {
|
|
27
|
+
const fields = {};
|
|
28
|
+
for (const { name, layout: field } of layout.struct.fields) {
|
|
29
|
+
fields[name] = layoutToBcs(field);
|
|
30
|
+
}
|
|
31
|
+
let struct = bcs.struct(layout.struct.type, fields);
|
|
32
|
+
const structName = toShortTypeString(layout.struct.type);
|
|
33
|
+
if (structName === "0x2::object::ID") {
|
|
34
|
+
struct = struct.transform({
|
|
35
|
+
input: (id) => typeof id === "string" ? { bytes: id } : id,
|
|
36
|
+
output: (id) => id.id
|
|
37
|
+
});
|
|
38
|
+
return struct;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unknown layout: ${layout}`);
|
|
42
|
+
}
|
|
43
|
+
function mapJsonToBcs(json, layout) {
|
|
44
|
+
const schema = layoutToBcs(layout);
|
|
45
|
+
return toBase64(schema.serialize(json).toBytes());
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
layoutToBcs,
|
|
49
|
+
mapJsonToBcs
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=bcs.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/bcs.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@iota/bcs';\nimport type { BcsType } from '@iota/bcs';\nimport { bcs } from '@iota/iota-sdk/bcs';\n\nimport type { MoveTypeLayout } from './move.js';\nimport { toShortTypeString } from './util.js';\n\nexport function layoutToBcs(layout: MoveTypeLayout): BcsType<any> {\n switch (layout) {\n case 'address':\n return bcs.Address;\n case 'bool':\n return bcs.Bool;\n case 'u8':\n return bcs.U8;\n case 'u16':\n return bcs.U16;\n case 'u32':\n return bcs.U32;\n case 'u64':\n return bcs.U64;\n case 'u128':\n return bcs.U128;\n case 'u256':\n return bcs.U256;\n }\n\n if ('vector' in layout) {\n return bcs.vector(layoutToBcs(layout.vector));\n }\n\n if ('struct' in layout) {\n const fields: Record<string, BcsType<any>> = {};\n\n for (const { name, layout: field } of layout.struct.fields) {\n fields[name] = layoutToBcs(field);\n }\n\n let struct = bcs.struct(layout.struct.type, fields);\n const structName = toShortTypeString(layout.struct.type);\n\n if (structName === '0x2::object::ID') {\n struct = struct.transform({\n input: (id: any) => (typeof id === 'string' ? { bytes: id } : id) as never,\n output: (id) => id.id,\n });\n\n return struct;\n }\n }\n\n throw new Error(`Unknown layout: ${layout}`);\n}\n\nexport function mapJsonToBcs(json: unknown, layout: MoveTypeLayout) {\n const schema = layoutToBcs(layout);\n return toBase64(schema.serialize(json).toBytes());\n}\n"],
|
|
5
|
+
"mappings": "AAIA,SAAS,gBAAgB;AAEzB,SAAS,WAAW;AAGpB,SAAS,yBAAyB;AAE3B,SAAS,YAAY,QAAsC;AAC9D,UAAQ,QAAQ;AAAA,IACZ,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,IACf,KAAK;AACD,aAAO,IAAI;AAAA,EACnB;AAEA,MAAI,YAAY,QAAQ;AACpB,WAAO,IAAI,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EAChD;AAEA,MAAI,YAAY,QAAQ;AACpB,UAAM,SAAuC,CAAC;AAE9C,eAAW,EAAE,MAAM,QAAQ,MAAM,KAAK,OAAO,OAAO,QAAQ;AACxD,aAAO,IAAI,IAAI,YAAY,KAAK;AAAA,IACpC;AAEA,QAAI,SAAS,IAAI,OAAO,OAAO,OAAO,MAAM,MAAM;AAClD,UAAM,aAAa,kBAAkB,OAAO,OAAO,IAAI;AAEvD,QAAI,eAAe,mBAAmB;AAClC,eAAS,OAAO,UAAU;AAAA,QACtB,OAAO,CAAC,OAAa,OAAO,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI;AAAA,QAC9D,QAAQ,CAAC,OAAO,GAAG;AAAA,MACvB,CAAC;AAED,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,QAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAC/C;AAEO,SAAS,aAAa,MAAe,QAAwB;AAChE,QAAM,SAAS,YAAY,MAAM;AACjC,SAAO,SAAS,OAAO,UAAU,IAAI,EAAE,QAAQ,CAAC;AACpD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function mapGraphQLCheckpointToRpcCheckpoint(checkpoint) {
|
|
2
|
+
const endOfEpochTx = checkpoint.endOfEpoch.nodes[0];
|
|
3
|
+
let endOfEpochData;
|
|
4
|
+
if (endOfEpochTx?.kind?.__typename === "EndOfEpochTransaction" && endOfEpochTx.kind?.transactions.nodes[0].__typename === "ChangeEpochTransactionV2") {
|
|
5
|
+
endOfEpochData = {
|
|
6
|
+
epochCommitments: [],
|
|
7
|
+
// TODO
|
|
8
|
+
nextEpochCommittee: endOfEpochTx.kind.transactions.nodes[0].epoch?.validatorSet?.committeeMembers?.nodes.map(
|
|
9
|
+
(val) => [val.credentials?.authorityPubKey, val.votingPower?.toString()]
|
|
10
|
+
) ?? [],
|
|
11
|
+
nextEpochProtocolVersion: String(
|
|
12
|
+
endOfEpochTx.kind.transactions.nodes[0].epoch?.protocolConfigs.protocolVersion
|
|
13
|
+
),
|
|
14
|
+
epochSupplyChange: 0
|
|
15
|
+
// TODO: https://github.com/iotaledger/iota/issues/1738
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
checkpointCommitments: [],
|
|
20
|
+
// TODO
|
|
21
|
+
digest: checkpoint.digest,
|
|
22
|
+
endOfEpochData,
|
|
23
|
+
epoch: String(checkpoint.epoch?.epochId),
|
|
24
|
+
epochRollingGasCostSummary: {
|
|
25
|
+
computationCost: checkpoint.rollingGasSummary?.computationCost,
|
|
26
|
+
computationCostBurned: checkpoint.rollingGasSummary?.computationCostBurned,
|
|
27
|
+
nonRefundableStorageFee: checkpoint.rollingGasSummary?.nonRefundableStorageFee,
|
|
28
|
+
storageCost: checkpoint.rollingGasSummary?.storageCost,
|
|
29
|
+
storageRebate: checkpoint.rollingGasSummary?.storageRebate
|
|
30
|
+
},
|
|
31
|
+
networkTotalTransactions: String(checkpoint.networkTotalTransactions),
|
|
32
|
+
...checkpoint.previousCheckpointDigest ? { previousDigest: checkpoint.previousCheckpointDigest } : {},
|
|
33
|
+
sequenceNumber: String(checkpoint.sequenceNumber),
|
|
34
|
+
timestampMs: new Date(checkpoint.timestamp).getTime().toString(),
|
|
35
|
+
transactions: checkpoint.transactionBlocks?.nodes.map(
|
|
36
|
+
(transactionBlock) => transactionBlock.digest
|
|
37
|
+
) ?? [],
|
|
38
|
+
validatorSignature: checkpoint.validatorSignatures
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
mapGraphQLCheckpointToRpcCheckpoint
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/checkpoint.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Checkpoint, EndOfEpochData } from '@iota/iota-sdk/client';\n\nimport type { Rpc_Checkpoint_FieldsFragment } from '../generated/queries.js';\n\nexport function mapGraphQLCheckpointToRpcCheckpoint(\n checkpoint: Rpc_Checkpoint_FieldsFragment,\n): Checkpoint {\n const endOfEpochTx = checkpoint.endOfEpoch.nodes[0];\n let endOfEpochData: EndOfEpochData | undefined;\n\n if (\n endOfEpochTx?.kind?.__typename === 'EndOfEpochTransaction' &&\n endOfEpochTx.kind?.transactions.nodes[0].__typename === 'ChangeEpochTransactionV2'\n ) {\n endOfEpochData = {\n epochCommitments: [], // TODO\n nextEpochCommittee:\n endOfEpochTx.kind.transactions.nodes[0].epoch?.validatorSet?.committeeMembers?.nodes.map(\n (val) => [val.credentials?.authorityPubKey, val.votingPower?.toString()!],\n ) ?? [],\n nextEpochProtocolVersion: String(\n endOfEpochTx.kind.transactions.nodes[0].epoch?.protocolConfigs.protocolVersion,\n ),\n epochSupplyChange: 0, // TODO: https://github.com/iotaledger/iota/issues/1738\n };\n }\n\n return {\n checkpointCommitments: [], // TODO\n digest: checkpoint.digest,\n endOfEpochData,\n epoch: String(checkpoint.epoch?.epochId),\n epochRollingGasCostSummary: {\n computationCost: checkpoint.rollingGasSummary?.computationCost,\n computationCostBurned: checkpoint.rollingGasSummary?.computationCostBurned,\n nonRefundableStorageFee: checkpoint.rollingGasSummary?.nonRefundableStorageFee,\n storageCost: checkpoint.rollingGasSummary?.storageCost,\n storageRebate: checkpoint.rollingGasSummary?.storageRebate,\n },\n networkTotalTransactions: String(checkpoint.networkTotalTransactions),\n ...(checkpoint.previousCheckpointDigest\n ? { previousDigest: checkpoint.previousCheckpointDigest }\n : {}),\n sequenceNumber: String(checkpoint.sequenceNumber),\n timestampMs: new Date(checkpoint.timestamp).getTime().toString(),\n transactions:\n checkpoint.transactionBlocks?.nodes.map(\n (transactionBlock) => transactionBlock.digest!,\n ) ?? [],\n validatorSignature: checkpoint.validatorSignatures,\n };\n}\n"],
|
|
5
|
+
"mappings": "AAQO,SAAS,oCACZ,YACU;AACV,QAAM,eAAe,WAAW,WAAW,MAAM,CAAC;AAClD,MAAI;AAEJ,MACI,cAAc,MAAM,eAAe,2BACnC,aAAa,MAAM,aAAa,MAAM,CAAC,EAAE,eAAe,4BAC1D;AACE,qBAAiB;AAAA,MACb,kBAAkB,CAAC;AAAA;AAAA,MACnB,oBACI,aAAa,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO,cAAc,kBAAkB,MAAM;AAAA,QACjF,CAAC,QAAQ,CAAC,IAAI,aAAa,iBAAiB,IAAI,aAAa,SAAS,CAAE;AAAA,MAC5E,KAAK,CAAC;AAAA,MACV,0BAA0B;AAAA,QACtB,aAAa,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAAA,MACA,mBAAmB;AAAA;AAAA,IACvB;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,uBAAuB,CAAC;AAAA;AAAA,IACxB,QAAQ,WAAW;AAAA,IACnB;AAAA,IACA,OAAO,OAAO,WAAW,OAAO,OAAO;AAAA,IACvC,4BAA4B;AAAA,MACxB,iBAAiB,WAAW,mBAAmB;AAAA,MAC/C,uBAAuB,WAAW,mBAAmB;AAAA,MACrD,yBAAyB,WAAW,mBAAmB;AAAA,MACvD,aAAa,WAAW,mBAAmB;AAAA,MAC3C,eAAe,WAAW,mBAAmB;AAAA,IACjD;AAAA,IACA,0BAA0B,OAAO,WAAW,wBAAwB;AAAA,IACpE,GAAI,WAAW,2BACT,EAAE,gBAAgB,WAAW,yBAAyB,IACtD,CAAC;AAAA,IACP,gBAAgB,OAAO,WAAW,cAAc;AAAA,IAChD,aAAa,IAAI,KAAK,WAAW,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC/D,cACI,WAAW,mBAAmB,MAAM;AAAA,MAChC,CAAC,qBAAqB,iBAAiB;AAAA,IAC3C,KAAK,CAAC;AAAA,IACV,oBAAoB,WAAW;AAAA,EACnC;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function formatDisplay(object) {
|
|
2
|
+
const display = {
|
|
3
|
+
data: null,
|
|
4
|
+
error: null
|
|
5
|
+
};
|
|
6
|
+
if (object.display) {
|
|
7
|
+
object.display.forEach((displayItem) => {
|
|
8
|
+
if (displayItem.error) {
|
|
9
|
+
display.error = displayItem.error;
|
|
10
|
+
} else if (displayItem.value != null) {
|
|
11
|
+
if (!display.data) {
|
|
12
|
+
display.data = {};
|
|
13
|
+
}
|
|
14
|
+
display.data[displayItem.key] = displayItem.value;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return display;
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
formatDisplay
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/display.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { DisplayFieldsResponse } from '@iota/iota-sdk/client';\n\nexport function formatDisplay(object: {\n display?:\n | {\n key: string;\n value?: string | null | undefined;\n error?: string | null | undefined;\n }[]\n | null;\n}) {\n const display: DisplayFieldsResponse = {\n data: null,\n error: null,\n };\n\n if (object.display) {\n object.display.forEach((displayItem) => {\n if (displayItem.error) {\n display!.error = displayItem.error as never;\n } else if (displayItem.value != null) {\n if (!display!.data) {\n display!.data = {};\n }\n display!.data[displayItem.key] = displayItem.value;\n }\n });\n }\n\n return display;\n}\n"],
|
|
5
|
+
"mappings": "AAMO,SAAS,cAAc,QAQ3B;AACC,QAAM,UAAiC;AAAA,IACnC,MAAM;AAAA,IACN,OAAO;AAAA,EACX;AAEA,MAAI,OAAO,SAAS;AAChB,WAAO,QAAQ,QAAQ,CAAC,gBAAgB;AACpC,UAAI,YAAY,OAAO;AACnB,gBAAS,QAAQ,YAAY;AAAA,MACjC,WAAW,YAAY,SAAS,MAAM;AAClC,YAAI,CAAC,QAAS,MAAM;AAChB,kBAAS,OAAO,CAAC;AAAA,QACrB;AACA,gBAAS,KAAK,YAAY,GAAG,IAAI,YAAY;AAAA,MACjD;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO;AACX;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { MoveValue, IotaMoveNormalizedFunction, IotaMoveNormalizedModule, IotaMoveNormalizedStruct, IotaMoveNormalizedType } from '@iota/iota-sdk/client';
|
|
2
|
+
import type { Rpc_Move_Function_FieldsFragment, Rpc_Move_Module_FieldsFragment, Rpc_Move_Struct_FieldsFragment } from '../generated/queries.js';
|
|
3
|
+
export type OpenMoveTypeSignatureBody = 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | {
|
|
4
|
+
vector: OpenMoveTypeSignatureBody;
|
|
5
|
+
} | {
|
|
6
|
+
datatype: {
|
|
7
|
+
package: string;
|
|
8
|
+
module: string;
|
|
9
|
+
type: string;
|
|
10
|
+
typeParameters?: [OpenMoveTypeSignatureBody];
|
|
11
|
+
};
|
|
12
|
+
} | {
|
|
13
|
+
typeParameter: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function mapOpenMoveType(type: {
|
|
16
|
+
ref?: '&' | '&mut';
|
|
17
|
+
body: OpenMoveTypeSignatureBody;
|
|
18
|
+
}): IotaMoveNormalizedType;
|
|
19
|
+
export declare function mapNormalizedType(type: OpenMoveTypeSignatureBody): IotaMoveNormalizedType;
|
|
20
|
+
export declare function mapNormalizedMoveFunction(fn: Rpc_Move_Function_FieldsFragment): IotaMoveNormalizedFunction;
|
|
21
|
+
export declare function mapNormalizedMoveStruct(struct: Rpc_Move_Struct_FieldsFragment): IotaMoveNormalizedStruct;
|
|
22
|
+
export declare function mapNormalizedMoveModule(module: Rpc_Move_Module_FieldsFragment, address: string): IotaMoveNormalizedModule;
|
|
23
|
+
type MoveData = {
|
|
24
|
+
Address: number[];
|
|
25
|
+
} | {
|
|
26
|
+
UID: number[];
|
|
27
|
+
} | {
|
|
28
|
+
ID: number[];
|
|
29
|
+
} | {
|
|
30
|
+
Bool: boolean;
|
|
31
|
+
} | {
|
|
32
|
+
Number: string;
|
|
33
|
+
} | {
|
|
34
|
+
String: string;
|
|
35
|
+
} | {
|
|
36
|
+
Vector: MoveData[];
|
|
37
|
+
} | {
|
|
38
|
+
Option: MoveData | null;
|
|
39
|
+
} | {
|
|
40
|
+
Struct: [{
|
|
41
|
+
name: string;
|
|
42
|
+
value: MoveData;
|
|
43
|
+
}];
|
|
44
|
+
};
|
|
45
|
+
export type MoveTypeLayout = 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | {
|
|
46
|
+
vector: MoveTypeLayout;
|
|
47
|
+
} | {
|
|
48
|
+
struct: {
|
|
49
|
+
type: string;
|
|
50
|
+
fields: {
|
|
51
|
+
name: string;
|
|
52
|
+
layout: MoveTypeLayout;
|
|
53
|
+
}[];
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export declare function moveDataToRpcContent(data: MoveData, layout: MoveTypeLayout): MoveValue;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { normalizeIotaAddress, parseStructTag } from "@iota/iota-sdk/utils";
|
|
2
|
+
import { toShortTypeString } from "./util.js";
|
|
3
|
+
function mapOpenMoveType(type) {
|
|
4
|
+
const body = mapNormalizedType(type.body);
|
|
5
|
+
if (type.ref === "&") {
|
|
6
|
+
return {
|
|
7
|
+
Reference: body
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
if (type.ref === "&mut") {
|
|
11
|
+
return {
|
|
12
|
+
MutableReference: body
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return body;
|
|
16
|
+
}
|
|
17
|
+
function mapNormalizedType(type) {
|
|
18
|
+
switch (type) {
|
|
19
|
+
case "address":
|
|
20
|
+
return "Address";
|
|
21
|
+
case "bool":
|
|
22
|
+
return "Bool";
|
|
23
|
+
case "u8":
|
|
24
|
+
return "U8";
|
|
25
|
+
case "u16":
|
|
26
|
+
return "U16";
|
|
27
|
+
case "u32":
|
|
28
|
+
return "U32";
|
|
29
|
+
case "u64":
|
|
30
|
+
return "U64";
|
|
31
|
+
case "u128":
|
|
32
|
+
return "U128";
|
|
33
|
+
case "u256":
|
|
34
|
+
return "U256";
|
|
35
|
+
}
|
|
36
|
+
if ("vector" in type) {
|
|
37
|
+
return {
|
|
38
|
+
Vector: mapNormalizedType(type.vector)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if ("typeParameter" in type) {
|
|
42
|
+
return {
|
|
43
|
+
TypeParameter: type.typeParameter
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if ("datatype" in type) {
|
|
47
|
+
return {
|
|
48
|
+
Struct: {
|
|
49
|
+
address: toShortTypeString(type.datatype.package),
|
|
50
|
+
module: type.datatype.module,
|
|
51
|
+
name: type.datatype.type,
|
|
52
|
+
typeArguments: type.datatype.typeParameters?.map(mapNormalizedType) ?? []
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
throw new Error("Invalid type");
|
|
57
|
+
}
|
|
58
|
+
function mapNormalizedMoveFunction(fn) {
|
|
59
|
+
return {
|
|
60
|
+
visibility: `${fn.visibility?.[0]}${fn.visibility?.slice(1).toLowerCase()}`,
|
|
61
|
+
isEntry: fn.isEntry,
|
|
62
|
+
typeParameters: fn.typeParameters?.map((param) => ({
|
|
63
|
+
abilities: param.constraints?.map(
|
|
64
|
+
(constraint) => `${constraint[0]}${constraint.slice(1).toLowerCase()}`
|
|
65
|
+
) ?? []
|
|
66
|
+
})) ?? [],
|
|
67
|
+
return: fn.return?.map((param) => mapOpenMoveType(param.signature)) ?? [],
|
|
68
|
+
parameters: fn.parameters?.map((param) => mapOpenMoveType(param.signature)) ?? []
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function mapNormalizedMoveStruct(struct) {
|
|
72
|
+
return {
|
|
73
|
+
abilities: {
|
|
74
|
+
abilities: struct.abilities?.map(
|
|
75
|
+
(ability) => `${ability[0]}${ability.slice(1).toLowerCase()}`
|
|
76
|
+
) ?? []
|
|
77
|
+
},
|
|
78
|
+
fields: struct.fields?.map((field) => ({
|
|
79
|
+
name: field.name,
|
|
80
|
+
type: mapOpenMoveType(field.type?.signature)
|
|
81
|
+
})) ?? [],
|
|
82
|
+
typeParameters: struct.typeParameters?.map((param) => ({
|
|
83
|
+
isPhantom: param.isPhantom,
|
|
84
|
+
constraints: {
|
|
85
|
+
abilities: param.constraints?.map(
|
|
86
|
+
(constraint) => `${constraint[0]}${constraint.slice(1).toLowerCase()}`
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
})) ?? []
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function mapNormalizedMoveModule(module, address) {
|
|
93
|
+
const exposedFunctions = {};
|
|
94
|
+
const structs = {};
|
|
95
|
+
module.functions?.nodes.filter(
|
|
96
|
+
(func) => func.visibility === "PUBLIC" || func.isEntry || func.visibility === "FRIEND"
|
|
97
|
+
).forEach((func) => {
|
|
98
|
+
exposedFunctions[func.name] = mapNormalizedMoveFunction(func);
|
|
99
|
+
});
|
|
100
|
+
module.structs?.nodes.forEach((struct) => {
|
|
101
|
+
structs[struct.name] = mapNormalizedMoveStruct(struct);
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
address: toShortTypeString(address),
|
|
105
|
+
name: module.name,
|
|
106
|
+
fileFormatVersion: module.fileFormatVersion,
|
|
107
|
+
friends: module.friends.nodes?.map((friend) => ({
|
|
108
|
+
address: toShortTypeString(friend.package.address),
|
|
109
|
+
name: friend.name
|
|
110
|
+
})) ?? [],
|
|
111
|
+
structs,
|
|
112
|
+
exposedFunctions
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function moveDataToRpcContent(data, layout) {
|
|
116
|
+
if ("Address" in data) {
|
|
117
|
+
return normalizeIotaAddress(
|
|
118
|
+
data.Address.map((byte) => byte.toString(16).padStart(2, "0")).join("")
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
if ("UID" in data) {
|
|
122
|
+
return {
|
|
123
|
+
id: normalizeIotaAddress(
|
|
124
|
+
data.UID.map((byte) => byte.toString(16).padStart(2, "0")).join("")
|
|
125
|
+
)
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if ("ID" in data) {
|
|
129
|
+
return normalizeIotaAddress(
|
|
130
|
+
data.ID.map((byte) => byte.toString(16).padStart(2, "0")).join("")
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
if ("Bool" in data) {
|
|
134
|
+
return data.Bool;
|
|
135
|
+
}
|
|
136
|
+
if ("Number" in data) {
|
|
137
|
+
return layout === "u64" || layout === "u128" || layout === "u256" ? String(data.Number) : Number.parseInt(data.Number, 10);
|
|
138
|
+
}
|
|
139
|
+
if ("String" in data) {
|
|
140
|
+
return data.String;
|
|
141
|
+
}
|
|
142
|
+
if ("Vector" in data) {
|
|
143
|
+
if (typeof layout !== "object" || !("vector" in layout)) {
|
|
144
|
+
throw new Error(`Invalid layout for data: ${JSON.stringify(data)}`);
|
|
145
|
+
}
|
|
146
|
+
const itemLayout = layout.vector;
|
|
147
|
+
return data.Vector.map((item) => moveDataToRpcContent(item, itemLayout));
|
|
148
|
+
}
|
|
149
|
+
if ("Option" in data) {
|
|
150
|
+
if (data.Option === null) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
if (typeof layout !== "object" || !("struct" in layout)) {
|
|
154
|
+
throw new Error(`Invalid layout for Option data: ${JSON.stringify(layout)}`);
|
|
155
|
+
}
|
|
156
|
+
const vecField = layout.struct.fields.find((field) => field.name === "vec");
|
|
157
|
+
if (!vecField) {
|
|
158
|
+
throw new Error(`Could not find the expected 'vec' field in the Option layout.`);
|
|
159
|
+
}
|
|
160
|
+
const innerLayout = vecField.layout;
|
|
161
|
+
const innerData = data.Option;
|
|
162
|
+
if (typeof innerLayout === "object" && "vector" in innerLayout && innerData && !("Vector" in innerData)) {
|
|
163
|
+
const itemLayout = innerLayout.vector;
|
|
164
|
+
return moveDataToRpcContent(innerData, itemLayout);
|
|
165
|
+
}
|
|
166
|
+
return moveDataToRpcContent(innerData, innerLayout);
|
|
167
|
+
}
|
|
168
|
+
if ("Struct" in data) {
|
|
169
|
+
const result = {};
|
|
170
|
+
if (typeof layout !== "object" || !("struct" in layout)) {
|
|
171
|
+
throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);
|
|
172
|
+
}
|
|
173
|
+
data.Struct.forEach((item, index) => {
|
|
174
|
+
const { name, layout: itemLayout } = layout.struct.fields[index];
|
|
175
|
+
result[name] = moveDataToRpcContent(item.value, itemLayout);
|
|
176
|
+
});
|
|
177
|
+
const tag = parseStructTag(layout.struct.type);
|
|
178
|
+
const structName = `${toShortTypeString(tag.address)}::${tag.module}::${tag.name}`;
|
|
179
|
+
switch (structName) {
|
|
180
|
+
case "0x1::string::String":
|
|
181
|
+
case "0x1::ascii::String":
|
|
182
|
+
return result["bytes"];
|
|
183
|
+
case "0x2::url::Url":
|
|
184
|
+
return result["url"];
|
|
185
|
+
case "0x2::object::ID":
|
|
186
|
+
return result["bytes"];
|
|
187
|
+
case "0x2::object::UID":
|
|
188
|
+
return {
|
|
189
|
+
id: result["id"]
|
|
190
|
+
};
|
|
191
|
+
case "0x2::balance::Balance":
|
|
192
|
+
return result["value"];
|
|
193
|
+
case "0x1::option::Option":
|
|
194
|
+
return result["vec"][0] ?? null;
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
type: toShortTypeString(layout.struct.type),
|
|
198
|
+
fields: result
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
throw new Error("Invalid move data: " + JSON.stringify(data));
|
|
202
|
+
}
|
|
203
|
+
export {
|
|
204
|
+
mapNormalizedMoveFunction,
|
|
205
|
+
mapNormalizedMoveModule,
|
|
206
|
+
mapNormalizedMoveStruct,
|
|
207
|
+
mapNormalizedType,
|
|
208
|
+
mapOpenMoveType,
|
|
209
|
+
moveDataToRpcContent
|
|
210
|
+
};
|
|
211
|
+
//# sourceMappingURL=move.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/move.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n MoveStruct,\n MoveValue,\n IotaMoveAbility,\n IotaMoveNormalizedFunction,\n IotaMoveNormalizedModule,\n IotaMoveNormalizedStruct,\n IotaMoveNormalizedType,\n} from '@iota/iota-sdk/client';\nimport { normalizeIotaAddress, parseStructTag } from '@iota/iota-sdk/utils';\n\nimport type {\n Rpc_Move_Function_FieldsFragment,\n Rpc_Move_Module_FieldsFragment,\n Rpc_Move_Struct_FieldsFragment,\n} from '../generated/queries.js';\nimport { toShortTypeString } from './util.js';\n\nexport type OpenMoveTypeSignatureBody =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: OpenMoveTypeSignatureBody }\n | {\n datatype: {\n package: string;\n module: string;\n type: string;\n typeParameters?: [OpenMoveTypeSignatureBody];\n };\n }\n | { typeParameter: number };\n\nexport function mapOpenMoveType(type: { ref?: '&' | '&mut'; body: OpenMoveTypeSignatureBody }) {\n const body = mapNormalizedType(type.body);\n\n if (type.ref === '&') {\n return {\n Reference: body,\n };\n }\n\n if (type.ref === '&mut') {\n return {\n MutableReference: body,\n };\n }\n\n return body;\n}\n\nexport function mapNormalizedType(type: OpenMoveTypeSignatureBody): IotaMoveNormalizedType {\n switch (type) {\n case 'address':\n return 'Address';\n case 'bool':\n return 'Bool';\n case 'u8':\n return 'U8';\n case 'u16':\n return 'U16';\n case 'u32':\n return 'U32';\n case 'u64':\n return 'U64';\n case 'u128':\n return 'U128';\n case 'u256':\n return 'U256';\n }\n\n if ('vector' in type) {\n return {\n Vector: mapNormalizedType(type.vector),\n };\n }\n\n if ('typeParameter' in type) {\n return {\n TypeParameter: type.typeParameter,\n };\n }\n\n if ('datatype' in type) {\n return {\n Struct: {\n address: toShortTypeString(type.datatype.package),\n module: type.datatype.module,\n name: type.datatype.type,\n typeArguments: type.datatype.typeParameters?.map(mapNormalizedType) ?? [],\n },\n };\n }\n\n throw new Error('Invalid type');\n}\n\nexport function mapNormalizedMoveFunction(\n fn: Rpc_Move_Function_FieldsFragment,\n): IotaMoveNormalizedFunction {\n return {\n visibility: `${fn.visibility?.[0]}${fn.visibility?.slice(1).toLowerCase()}` as never,\n isEntry: fn.isEntry!,\n typeParameters:\n fn.typeParameters?.map((param) => ({\n abilities:\n param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n })) ?? [],\n return: fn.return?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n parameters: fn.parameters?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n };\n}\n\nexport function mapNormalizedMoveStruct(\n struct: Rpc_Move_Struct_FieldsFragment,\n): IotaMoveNormalizedStruct {\n return {\n abilities: {\n abilities:\n struct.abilities?.map(\n (ability) =>\n `${ability[0]}${ability.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n },\n fields:\n struct.fields?.map((field) => ({\n name: field.name,\n type: mapOpenMoveType(field.type?.signature),\n })) ?? [],\n typeParameters:\n struct.typeParameters?.map((param) => ({\n isPhantom: param.isPhantom!,\n constraints: {\n abilities: param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ),\n },\n })) ?? [],\n };\n}\n\nexport function mapNormalizedMoveModule(\n module: Rpc_Move_Module_FieldsFragment,\n address: string,\n): IotaMoveNormalizedModule {\n const exposedFunctions: Record<string, IotaMoveNormalizedFunction> = {};\n const structs: Record<string, IotaMoveNormalizedStruct> = {};\n\n module.functions?.nodes\n .filter(\n (func) => func.visibility === 'PUBLIC' || func.isEntry || func.visibility === 'FRIEND',\n )\n .forEach((func) => {\n exposedFunctions[func.name] = mapNormalizedMoveFunction(func);\n });\n\n module.structs?.nodes.forEach((struct) => {\n structs[struct.name] = mapNormalizedMoveStruct(struct);\n });\n\n return {\n address: toShortTypeString(address),\n name: module.name,\n fileFormatVersion: module.fileFormatVersion,\n friends:\n module.friends.nodes?.map((friend) => ({\n address: toShortTypeString(friend.package.address),\n name: friend.name,\n })) ?? [],\n structs,\n exposedFunctions,\n };\n}\n\ntype MoveData =\n | { Address: number[] }\n | { UID: number[] }\n | { ID: number[] }\n | { Bool: boolean }\n | { Number: string }\n | { String: string }\n | { Vector: MoveData[] }\n | { Option: MoveData | null }\n | { Struct: [{ name: string; value: MoveData }] };\n\nexport type MoveTypeLayout =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: MoveTypeLayout }\n | {\n struct: {\n type: string;\n fields: { name: string; layout: MoveTypeLayout }[];\n };\n };\n\nexport function moveDataToRpcContent(data: MoveData, layout: MoveTypeLayout): MoveValue {\n if ('Address' in data) {\n return normalizeIotaAddress(\n data.Address.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('UID' in data) {\n return {\n id: normalizeIotaAddress(\n data.UID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n ),\n };\n }\n\n if ('ID' in data) {\n return normalizeIotaAddress(\n data.ID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('Bool' in data) {\n return data.Bool;\n }\n\n if ('Number' in data) {\n return layout === 'u64' || layout === 'u128' || layout === 'u256'\n ? String(data.Number)\n : Number.parseInt(data.Number, 10);\n }\n\n if ('String' in data) {\n return data.String;\n }\n\n if ('Vector' in data) {\n if (typeof layout !== 'object' || !('vector' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}`);\n }\n const itemLayout = layout.vector;\n return data.Vector.map((item) => moveDataToRpcContent(item, itemLayout));\n }\n\n if ('Option' in data) {\n if (data.Option === null) {\n return null;\n }\n\n if (typeof layout !== 'object' || !('struct' in layout)) {\n throw new Error(`Invalid layout for Option data: ${JSON.stringify(layout)}`);\n }\n\n const vecField = layout.struct.fields.find((field) => field.name === 'vec');\n if (!vecField) {\n throw new Error(`Could not find the expected 'vec' field in the Option layout.`);\n }\n\n const innerLayout = vecField.layout;\n const innerData = data.Option;\n\n if (\n typeof innerLayout === 'object' &&\n 'vector' in innerLayout &&\n innerData &&\n !('Vector' in innerData)\n ) {\n const itemLayout = innerLayout.vector;\n return moveDataToRpcContent(innerData, itemLayout);\n }\n\n return moveDataToRpcContent(innerData, innerLayout);\n }\n\n if ('Struct' in data) {\n const result: MoveStruct = {};\n\n if (typeof layout !== 'object' || !('struct' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);\n }\n\n data.Struct.forEach((item, index) => {\n const { name, layout: itemLayout } = layout.struct.fields[index];\n\n result[name] = moveDataToRpcContent(item.value, itemLayout);\n });\n\n // https://github.com/iotaledger/iota/blob/5849f6845a3ab9fdb4c17523994adad461478a4c/crates/iota-json-rpc-types/src/iota_move.rs#L481\n const tag = parseStructTag(layout.struct.type);\n const structName = `${toShortTypeString(tag.address)}::${tag.module}::${tag.name}`;\n\n switch (structName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return result['bytes'];\n case '0x2::url::Url':\n return result['url'];\n case '0x2::object::ID':\n return result['bytes'];\n case '0x2::object::UID':\n return {\n id: result['id'] as string,\n };\n case '0x2::balance::Balance':\n return result['value'];\n case '0x1::option::Option':\n return (result['vec'] as MoveValue[])[0] ?? null;\n }\n\n return {\n type: toShortTypeString(layout.struct.type),\n fields: result,\n };\n }\n\n throw new Error('Invalid move data: ' + JSON.stringify(data));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IotaObjectResponse } from '@iota/iota-sdk/client';
|
|
2
|
+
import type { Rpc_Move_Object_FieldsFragment, Rpc_Object_FieldsFragment } from '../generated/queries.js';
|
|
3
|
+
export declare function mapGraphQLObjectToRpcObject(object: Rpc_Object_FieldsFragment, options?: {
|
|
4
|
+
showBcs?: boolean | null;
|
|
5
|
+
showContent?: boolean;
|
|
6
|
+
}): NonNullable<IotaObjectResponse['data']>;
|
|
7
|
+
export declare function mapGraphQLMoveObjectToRpcObject(object: Rpc_Move_Object_FieldsFragment, options?: {
|
|
8
|
+
showBcs?: boolean | null;
|
|
9
|
+
showContent?: boolean;
|
|
10
|
+
}): NonNullable<IotaObjectResponse['data']>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { formatDisplay } from "./display.js";
|
|
2
|
+
import { moveDataToRpcContent } from "./move.js";
|
|
3
|
+
import { mapGraphQLOwnerToRpcOwner } from "./owner.js";
|
|
4
|
+
import { toShortTypeString } from "./util.js";
|
|
5
|
+
function mapGraphQLObjectToRpcObject(object, options = {}) {
|
|
6
|
+
return {
|
|
7
|
+
bcs: options?.showBcs ? {
|
|
8
|
+
dataType: "moveObject",
|
|
9
|
+
bcsBytes: object.asMoveObject?.contents?.bcs,
|
|
10
|
+
version: object.version,
|
|
11
|
+
type: toShortTypeString(object.asMoveObject?.contents?.type.repr)
|
|
12
|
+
} : void 0,
|
|
13
|
+
content: options.showContent ? {
|
|
14
|
+
dataType: "moveObject",
|
|
15
|
+
...moveDataToRpcContent(
|
|
16
|
+
object.asMoveObject?.contents?.data,
|
|
17
|
+
object.asMoveObject?.contents?.type.layout
|
|
18
|
+
)
|
|
19
|
+
} : void 0,
|
|
20
|
+
digest: object.digest,
|
|
21
|
+
display: formatDisplay(object),
|
|
22
|
+
objectId: object.objectId,
|
|
23
|
+
owner: mapGraphQLOwnerToRpcOwner(object.owner),
|
|
24
|
+
previousTransaction: object.previousTransactionBlock?.digest,
|
|
25
|
+
storageRebate: object.storageRebate,
|
|
26
|
+
type: toShortTypeString(object.asMoveObject?.contents?.type.repr),
|
|
27
|
+
version: String(object.version)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function mapGraphQLMoveObjectToRpcObject(object, options = {}) {
|
|
31
|
+
return {
|
|
32
|
+
bcs: options?.showBcs ? {
|
|
33
|
+
dataType: "moveObject",
|
|
34
|
+
bcsBytes: object?.contents?.bcs,
|
|
35
|
+
version: object.version,
|
|
36
|
+
type: toShortTypeString(object?.contents?.type.repr)
|
|
37
|
+
} : void 0,
|
|
38
|
+
content: options.showContent ? {
|
|
39
|
+
dataType: "moveObject",
|
|
40
|
+
...moveDataToRpcContent(
|
|
41
|
+
object?.contents?.data,
|
|
42
|
+
object?.contents?.type.layout
|
|
43
|
+
)
|
|
44
|
+
} : void 0,
|
|
45
|
+
digest: object.digest,
|
|
46
|
+
display: formatDisplay(object),
|
|
47
|
+
objectId: object.objectId,
|
|
48
|
+
owner: mapGraphQLOwnerToRpcOwner(object.owner),
|
|
49
|
+
previousTransaction: object.previousTransactionBlock?.digest,
|
|
50
|
+
storageRebate: object.storageRebate,
|
|
51
|
+
type: toShortTypeString(object?.contents?.type.repr),
|
|
52
|
+
version: String(object.version)
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
mapGraphQLMoveObjectToRpcObject,
|
|
57
|
+
mapGraphQLObjectToRpcObject
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=object.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/object.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaObjectResponse } from '@iota/iota-sdk/client';\n\nimport type {\n MoveValue,\n Rpc_Move_Object_FieldsFragment,\n Rpc_Object_FieldsFragment,\n} from '../generated/queries.js';\nimport { formatDisplay } from './display.js';\nimport { moveDataToRpcContent } from './move.js';\nimport { mapGraphQLOwnerToRpcOwner } from './owner.js';\nimport { toShortTypeString } from './util.js';\n\nexport function mapGraphQLObjectToRpcObject(\n object: Rpc_Object_FieldsFragment,\n options: { showBcs?: boolean | null; showContent?: boolean } = {},\n): NonNullable<IotaObjectResponse['data']> {\n return {\n bcs: options?.showBcs\n ? {\n dataType: 'moveObject' as const,\n bcsBytes: object.asMoveObject?.contents?.bcs,\n version: object.version as unknown as string,\n type: toShortTypeString(object.asMoveObject?.contents?.type.repr!),\n }\n : undefined,\n content: options.showContent\n ? {\n dataType: 'moveObject' as const,\n ...(moveDataToRpcContent(\n object.asMoveObject?.contents?.data!,\n object.asMoveObject?.contents?.type.layout!,\n ) as {\n fields: {\n [key: string]: MoveValue;\n };\n type: string;\n }),\n }\n : undefined,\n digest: object.digest!,\n display: formatDisplay(object),\n objectId: object.objectId,\n owner: mapGraphQLOwnerToRpcOwner(object.owner),\n previousTransaction: object.previousTransactionBlock?.digest,\n storageRebate: object.storageRebate,\n type: toShortTypeString(object.asMoveObject?.contents?.type.repr!),\n version: String(object.version),\n };\n}\n\nexport function mapGraphQLMoveObjectToRpcObject(\n object: Rpc_Move_Object_FieldsFragment,\n options: { showBcs?: boolean | null; showContent?: boolean } = {},\n): NonNullable<IotaObjectResponse['data']> {\n return {\n bcs: options?.showBcs\n ? {\n dataType: 'moveObject' as const,\n bcsBytes: object?.contents?.bcs,\n version: object.version as unknown as string,\n type: toShortTypeString(object?.contents?.type.repr!),\n }\n : undefined,\n content: options.showContent\n ? {\n dataType: 'moveObject' as const,\n ...(moveDataToRpcContent(\n object?.contents?.data!,\n object?.contents?.type.layout!,\n ) as {\n fields: {\n [key: string]: MoveValue;\n };\n type: string;\n }),\n }\n : undefined,\n digest: object.digest!,\n display: formatDisplay(object),\n objectId: object.objectId,\n owner: mapGraphQLOwnerToRpcOwner(object.owner),\n previousTransaction: object.previousTransactionBlock?.digest,\n storageRebate: object.storageRebate,\n type: toShortTypeString(object?.contents?.type.repr!),\n version: String(object.version),\n };\n}\n"],
|
|
5
|
+
"mappings": "AAWA,SAAS,qBAAqB;AAC9B,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAC1C,SAAS,yBAAyB;AAE3B,SAAS,4BACZ,QACA,UAA+D,CAAC,GACzB;AACvC,SAAO;AAAA,IACH,KAAK,SAAS,UACR;AAAA,MACI,UAAU;AAAA,MACV,UAAU,OAAO,cAAc,UAAU;AAAA,MACzC,SAAS,OAAO;AAAA,MAChB,MAAM,kBAAkB,OAAO,cAAc,UAAU,KAAK,IAAK;AAAA,IACrE,IACA;AAAA,IACN,SAAS,QAAQ,cACX;AAAA,MACI,UAAU;AAAA,MACV,GAAI;AAAA,QACA,OAAO,cAAc,UAAU;AAAA,QAC/B,OAAO,cAAc,UAAU,KAAK;AAAA,MACxC;AAAA,IAMJ,IACA;AAAA,IACN,QAAQ,OAAO;AAAA,IACf,SAAS,cAAc,MAAM;AAAA,IAC7B,UAAU,OAAO;AAAA,IACjB,OAAO,0BAA0B,OAAO,KAAK;AAAA,IAC7C,qBAAqB,OAAO,0BAA0B;AAAA,IACtD,eAAe,OAAO;AAAA,IACtB,MAAM,kBAAkB,OAAO,cAAc,UAAU,KAAK,IAAK;AAAA,IACjE,SAAS,OAAO,OAAO,OAAO;AAAA,EAClC;AACJ;AAEO,SAAS,gCACZ,QACA,UAA+D,CAAC,GACzB;AACvC,SAAO;AAAA,IACH,KAAK,SAAS,UACR;AAAA,MACI,UAAU;AAAA,MACV,UAAU,QAAQ,UAAU;AAAA,MAC5B,SAAS,OAAO;AAAA,MAChB,MAAM,kBAAkB,QAAQ,UAAU,KAAK,IAAK;AAAA,IACxD,IACA;AAAA,IACN,SAAS,QAAQ,cACX;AAAA,MACI,UAAU;AAAA,MACV,GAAI;AAAA,QACA,QAAQ,UAAU;AAAA,QAClB,QAAQ,UAAU,KAAK;AAAA,MAC3B;AAAA,IAMJ,IACA;AAAA,IACN,QAAQ,OAAO;AAAA,IACf,SAAS,cAAc,MAAM;AAAA,IAC7B,UAAU,OAAO;AAAA,IACjB,OAAO,0BAA0B,OAAO,KAAK;AAAA,IAC7C,qBAAqB,OAAO,0BAA0B;AAAA,IACtD,eAAe,OAAO;AAAA,IACtB,MAAM,kBAAkB,QAAQ,UAAU,KAAK,IAAK;AAAA,IACpD,SAAS,OAAO,OAAO,OAAO;AAAA,EAClC;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function mapGraphQLOwnerToRpcOwner(owner) {
|
|
2
|
+
switch (owner?.__typename) {
|
|
3
|
+
case "AddressOwner":
|
|
4
|
+
return owner.owner?.asObject ? {
|
|
5
|
+
ObjectOwner: owner.owner?.asObject.address
|
|
6
|
+
} : {
|
|
7
|
+
AddressOwner: owner.owner?.asAddress?.address
|
|
8
|
+
};
|
|
9
|
+
case "Parent":
|
|
10
|
+
return {
|
|
11
|
+
ObjectOwner: owner.parent?.address
|
|
12
|
+
};
|
|
13
|
+
case "Shared": {
|
|
14
|
+
return {
|
|
15
|
+
Shared: {
|
|
16
|
+
initial_shared_version: String(owner.initialSharedVersion)
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
case "Immutable":
|
|
21
|
+
return "Immutable";
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
mapGraphQLOwnerToRpcOwner
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=owner.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mappers/owner.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ObjectOwner } from '@iota/iota-sdk/client';\n\nimport type { Rpc_Object_FieldsFragment } from '../generated/queries.js';\n\nexport function mapGraphQLOwnerToRpcOwner(\n owner: Rpc_Object_FieldsFragment['owner'],\n): ObjectOwner | null {\n switch (owner?.__typename) {\n case 'AddressOwner':\n return owner.owner?.asObject\n ? {\n ObjectOwner: owner.owner?.asObject.address!,\n }\n : {\n AddressOwner: owner.owner?.asAddress?.address!,\n };\n case 'Parent':\n return {\n ObjectOwner: owner.parent?.address,\n };\n case 'Shared': {\n return {\n Shared: {\n initial_shared_version: String(owner.initialSharedVersion),\n },\n };\n }\n case 'Immutable':\n return 'Immutable';\n }\n\n return null;\n}\n"],
|
|
5
|
+
"mappings": "AAQO,SAAS,0BACZ,OACkB;AAClB,UAAQ,OAAO,YAAY;AAAA,IACvB,KAAK;AACD,aAAO,MAAM,OAAO,WACd;AAAA,QACI,aAAa,MAAM,OAAO,SAAS;AAAA,MACvC,IACA;AAAA,QACI,cAAc,MAAM,OAAO,WAAW;AAAA,MAC1C;AAAA,IACV,KAAK;AACD,aAAO;AAAA,QACH,aAAa,MAAM,QAAQ;AAAA,MAC/B;AAAA,IACJ,KAAK,UAAU;AACX,aAAO;AAAA,QACH,QAAQ;AAAA,UACJ,wBAAwB,OAAO,MAAM,oBAAoB;AAAA,QAC7D;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,KAAK;AACD,aAAO;AAAA,EACf;AAEA,SAAO;AACX;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|