@mysten/sui
Version:
Sui TypeScript API(Work in Progress)
483 lines (482 loc) • 19 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var v1_exports = {};
__export(v1_exports, {
NormalizedCallArg: () => NormalizedCallArg,
ObjectRef: () => ObjectRef,
SerializedTransactionDataV1: () => SerializedTransactionDataV1,
StructTag: () => StructTag,
TransactionArgument: () => TransactionArgument,
TypeTag: () => TypeTag,
serializeV1TransactionData: () => serializeV1TransactionData,
transactionDataFromV1: () => transactionDataFromV1
});
module.exports = __toCommonJS(v1_exports);
var import_bcs = require("@mysten/bcs");
var import_valibot = require("valibot");
var import_bcs2 = require("../../bcs/index.js");
var import_internal = require("./internal.js");
const ObjectRef = (0, import_valibot.object)({
digest: (0, import_valibot.string)(),
objectId: (0, import_valibot.string)(),
version: (0, import_valibot.union)([(0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()), (0, import_valibot.string)(), (0, import_valibot.bigint)()])
});
const ObjectArg = (0, import_internal.safeEnum)({
ImmOrOwned: ObjectRef,
Shared: (0, import_valibot.object)({
objectId: import_internal.ObjectID,
initialSharedVersion: import_internal.JsonU64,
mutable: (0, import_valibot.boolean)()
}),
Receiving: ObjectRef
});
const NormalizedCallArg = (0, import_internal.safeEnum)({
Object: ObjectArg,
Pure: (0, import_valibot.array)((0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()))
});
const TransactionInput = (0, import_valibot.union)([
(0, import_valibot.object)({
kind: (0, import_valibot.literal)("Input"),
index: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()),
value: (0, import_valibot.unknown)(),
type: (0, import_valibot.optional)((0, import_valibot.literal)("object"))
}),
(0, import_valibot.object)({
kind: (0, import_valibot.literal)("Input"),
index: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()),
value: (0, import_valibot.unknown)(),
type: (0, import_valibot.literal)("pure")
})
]);
const TransactionExpiration = (0, import_valibot.union)([
(0, import_valibot.object)({ Epoch: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()) }),
(0, import_valibot.object)({ None: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) })
]);
const StringEncodedBigint = (0, import_valibot.pipe)(
(0, import_valibot.union)([(0, import_valibot.number)(), (0, import_valibot.string)(), (0, import_valibot.bigint)()]),
(0, import_valibot.check)((val) => {
if (!["string", "number", "bigint"].includes(typeof val)) return false;
try {
BigInt(val);
return true;
} catch {
return false;
}
})
);
const TypeTag = (0, import_valibot.union)([
(0, import_valibot.object)({ bool: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ u8: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ u64: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ u128: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ address: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ signer: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ vector: (0, import_valibot.lazy)(() => TypeTag) }),
(0, import_valibot.object)({ struct: (0, import_valibot.lazy)(() => StructTag) }),
(0, import_valibot.object)({ u16: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ u32: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) }),
(0, import_valibot.object)({ u256: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) })
]);
const StructTag = (0, import_valibot.object)({
address: (0, import_valibot.string)(),
module: (0, import_valibot.string)(),
name: (0, import_valibot.string)(),
typeParams: (0, import_valibot.array)(TypeTag)
});
const GasConfig = (0, import_valibot.object)({
budget: (0, import_valibot.optional)(StringEncodedBigint),
price: (0, import_valibot.optional)(StringEncodedBigint),
payment: (0, import_valibot.optional)((0, import_valibot.array)(ObjectRef)),
owner: (0, import_valibot.optional)((0, import_valibot.string)())
});
const TransactionArgumentTypes = [
TransactionInput,
(0, import_valibot.object)({ kind: (0, import_valibot.literal)("GasCoin") }),
(0, import_valibot.object)({ kind: (0, import_valibot.literal)("Result"), index: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()) }),
(0, import_valibot.object)({
kind: (0, import_valibot.literal)("NestedResult"),
index: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()),
resultIndex: (0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)())
})
];
const TransactionArgument = (0, import_valibot.union)([...TransactionArgumentTypes]);
const MoveCallTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("MoveCall"),
target: (0, import_valibot.pipe)(
(0, import_valibot.string)(),
(0, import_valibot.check)((target) => target.split("::").length === 3)
),
typeArguments: (0, import_valibot.array)((0, import_valibot.string)()),
arguments: (0, import_valibot.array)(TransactionArgument)
});
const TransferObjectsTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("TransferObjects"),
objects: (0, import_valibot.array)(TransactionArgument),
address: TransactionArgument
});
const SplitCoinsTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("SplitCoins"),
coin: TransactionArgument,
amounts: (0, import_valibot.array)(TransactionArgument)
});
const MergeCoinsTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("MergeCoins"),
destination: TransactionArgument,
sources: (0, import_valibot.array)(TransactionArgument)
});
const MakeMoveVecTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("MakeMoveVec"),
type: (0, import_valibot.union)([(0, import_valibot.object)({ Some: TypeTag }), (0, import_valibot.object)({ None: (0, import_valibot.nullable)((0, import_valibot.literal)(true)) })]),
objects: (0, import_valibot.array)(TransactionArgument)
});
const PublishTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("Publish"),
modules: (0, import_valibot.array)((0, import_valibot.array)((0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()))),
dependencies: (0, import_valibot.array)((0, import_valibot.string)())
});
const UpgradeTransaction = (0, import_valibot.object)({
kind: (0, import_valibot.literal)("Upgrade"),
modules: (0, import_valibot.array)((0, import_valibot.array)((0, import_valibot.pipe)((0, import_valibot.number)(), (0, import_valibot.integer)()))),
dependencies: (0, import_valibot.array)((0, import_valibot.string)()),
packageId: (0, import_valibot.string)(),
ticket: TransactionArgument
});
const TransactionTypes = [
MoveCallTransaction,
TransferObjectsTransaction,
SplitCoinsTransaction,
MergeCoinsTransaction,
PublishTransaction,
UpgradeTransaction,
MakeMoveVecTransaction
];
const TransactionType = (0, import_valibot.union)([...TransactionTypes]);
const SerializedTransactionDataV1 = (0, import_valibot.object)({
version: (0, import_valibot.literal)(1),
sender: (0, import_valibot.optional)((0, import_valibot.string)()),
expiration: (0, import_valibot.nullish)(TransactionExpiration),
gasConfig: GasConfig,
inputs: (0, import_valibot.array)(TransactionInput),
transactions: (0, import_valibot.array)(TransactionType)
});
function serializeV1TransactionData(transactionData) {
const inputs = transactionData.inputs.map(
(input, index) => {
if (input.Object) {
return {
kind: "Input",
index,
value: {
Object: input.Object.ImmOrOwnedObject ? {
ImmOrOwned: input.Object.ImmOrOwnedObject
} : input.Object.Receiving ? {
Receiving: {
digest: input.Object.Receiving.digest,
version: input.Object.Receiving.version,
objectId: input.Object.Receiving.objectId
}
} : {
Shared: {
mutable: input.Object.SharedObject.mutable,
initialSharedVersion: input.Object.SharedObject.initialSharedVersion,
objectId: input.Object.SharedObject.objectId
}
}
},
type: "object"
};
}
if (input.Pure) {
return {
kind: "Input",
index,
value: {
Pure: Array.from((0, import_bcs.fromBase64)(input.Pure.bytes))
},
type: "pure"
};
}
if (input.UnresolvedPure) {
return {
kind: "Input",
type: "pure",
index,
value: input.UnresolvedPure.value
};
}
if (input.UnresolvedObject) {
return {
kind: "Input",
type: "object",
index,
value: input.UnresolvedObject.objectId
};
}
throw new Error("Invalid input");
}
);
return {
version: 1,
sender: transactionData.sender ?? void 0,
expiration: transactionData.expiration?.$kind === "Epoch" ? { Epoch: Number(transactionData.expiration.Epoch) } : transactionData.expiration ? { None: true } : null,
gasConfig: {
owner: transactionData.gasData.owner ?? void 0,
budget: transactionData.gasData.budget ?? void 0,
price: transactionData.gasData.price ?? void 0,
payment: transactionData.gasData.payment ?? void 0
},
inputs,
transactions: transactionData.commands.map((command) => {
if (command.MakeMoveVec) {
return {
kind: "MakeMoveVec",
type: command.MakeMoveVec.type === null ? { None: true } : { Some: import_bcs2.TypeTagSerializer.parseFromStr(command.MakeMoveVec.type) },
objects: command.MakeMoveVec.elements.map(
(arg) => convertTransactionArgument(arg, inputs)
)
};
}
if (command.MergeCoins) {
return {
kind: "MergeCoins",
destination: convertTransactionArgument(command.MergeCoins.destination, inputs),
sources: command.MergeCoins.sources.map((arg) => convertTransactionArgument(arg, inputs))
};
}
if (command.MoveCall) {
return {
kind: "MoveCall",
target: `${command.MoveCall.package}::${command.MoveCall.module}::${command.MoveCall.function}`,
typeArguments: command.MoveCall.typeArguments,
arguments: command.MoveCall.arguments.map(
(arg) => convertTransactionArgument(arg, inputs)
)
};
}
if (command.Publish) {
return {
kind: "Publish",
modules: command.Publish.modules.map((mod) => Array.from((0, import_bcs.fromBase64)(mod))),
dependencies: command.Publish.dependencies
};
}
if (command.SplitCoins) {
return {
kind: "SplitCoins",
coin: convertTransactionArgument(command.SplitCoins.coin, inputs),
amounts: command.SplitCoins.amounts.map((arg) => convertTransactionArgument(arg, inputs))
};
}
if (command.TransferObjects) {
return {
kind: "TransferObjects",
objects: command.TransferObjects.objects.map(
(arg) => convertTransactionArgument(arg, inputs)
),
address: convertTransactionArgument(command.TransferObjects.address, inputs)
};
}
if (command.Upgrade) {
return {
kind: "Upgrade",
modules: command.Upgrade.modules.map((mod) => Array.from((0, import_bcs.fromBase64)(mod))),
dependencies: command.Upgrade.dependencies,
packageId: command.Upgrade.package,
ticket: convertTransactionArgument(command.Upgrade.ticket, inputs)
};
}
throw new Error(`Unknown transaction ${Object.keys(command)}`);
})
};
}
function convertTransactionArgument(arg, inputs) {
if (arg.$kind === "GasCoin") {
return { kind: "GasCoin" };
}
if (arg.$kind === "Result") {
return { kind: "Result", index: arg.Result };
}
if (arg.$kind === "NestedResult") {
return { kind: "NestedResult", index: arg.NestedResult[0], resultIndex: arg.NestedResult[1] };
}
if (arg.$kind === "Input") {
return inputs[arg.Input];
}
throw new Error(`Invalid argument ${Object.keys(arg)}`);
}
function transactionDataFromV1(data) {
return (0, import_valibot.parse)(import_internal.TransactionData, {
version: 2,
sender: data.sender ?? null,
expiration: data.expiration ? "Epoch" in data.expiration ? { Epoch: data.expiration.Epoch } : { None: true } : null,
gasData: {
owner: data.gasConfig.owner ?? null,
budget: data.gasConfig.budget?.toString() ?? null,
price: data.gasConfig.price?.toString() ?? null,
payment: data.gasConfig.payment?.map((ref) => ({
digest: ref.digest,
objectId: ref.objectId,
version: ref.version.toString()
})) ?? null
},
inputs: data.inputs.map((input) => {
if (input.kind === "Input") {
if ((0, import_valibot.is)(NormalizedCallArg, input.value)) {
const value = (0, import_valibot.parse)(NormalizedCallArg, input.value);
if (value.Object) {
if (value.Object.ImmOrOwned) {
return {
Object: {
ImmOrOwnedObject: {
objectId: value.Object.ImmOrOwned.objectId,
version: String(value.Object.ImmOrOwned.version),
digest: value.Object.ImmOrOwned.digest
}
}
};
}
if (value.Object.Shared) {
return {
Object: {
SharedObject: {
mutable: value.Object.Shared.mutable ?? null,
initialSharedVersion: value.Object.Shared.initialSharedVersion,
objectId: value.Object.Shared.objectId
}
}
};
}
if (value.Object.Receiving) {
return {
Object: {
Receiving: {
digest: value.Object.Receiving.digest,
version: String(value.Object.Receiving.version),
objectId: value.Object.Receiving.objectId
}
}
};
}
throw new Error("Invalid object input");
}
return {
Pure: {
bytes: (0, import_bcs.toBase64)(new Uint8Array(value.Pure))
}
};
}
if (input.type === "object") {
return {
UnresolvedObject: {
objectId: input.value
}
};
}
return {
UnresolvedPure: {
value: input.value
}
};
}
throw new Error("Invalid input");
}),
commands: data.transactions.map((transaction) => {
switch (transaction.kind) {
case "MakeMoveVec":
return {
MakeMoveVec: {
type: "Some" in transaction.type ? import_bcs2.TypeTagSerializer.tagToString(transaction.type.Some) : null,
elements: transaction.objects.map((arg) => parseV1TransactionArgument(arg))
}
};
case "MergeCoins": {
return {
MergeCoins: {
destination: parseV1TransactionArgument(transaction.destination),
sources: transaction.sources.map((arg) => parseV1TransactionArgument(arg))
}
};
}
case "MoveCall": {
const [pkg, mod, fn] = transaction.target.split("::");
return {
MoveCall: {
package: pkg,
module: mod,
function: fn,
typeArguments: transaction.typeArguments,
arguments: transaction.arguments.map((arg) => parseV1TransactionArgument(arg))
}
};
}
case "Publish": {
return {
Publish: {
modules: transaction.modules.map((mod) => (0, import_bcs.toBase64)(Uint8Array.from(mod))),
dependencies: transaction.dependencies
}
};
}
case "SplitCoins": {
return {
SplitCoins: {
coin: parseV1TransactionArgument(transaction.coin),
amounts: transaction.amounts.map((arg) => parseV1TransactionArgument(arg))
}
};
}
case "TransferObjects": {
return {
TransferObjects: {
objects: transaction.objects.map((arg) => parseV1TransactionArgument(arg)),
address: parseV1TransactionArgument(transaction.address)
}
};
}
case "Upgrade": {
return {
Upgrade: {
modules: transaction.modules.map((mod) => (0, import_bcs.toBase64)(Uint8Array.from(mod))),
dependencies: transaction.dependencies,
package: transaction.packageId,
ticket: parseV1TransactionArgument(transaction.ticket)
}
};
}
}
throw new Error(`Unknown transaction ${Object.keys(transaction)}`);
})
});
}
function parseV1TransactionArgument(arg) {
switch (arg.kind) {
case "GasCoin": {
return { GasCoin: true };
}
case "Result":
return { Result: arg.index };
case "NestedResult": {
return { NestedResult: [arg.index, arg.resultIndex] };
}
case "Input": {
return { Input: arg.index };
}
}
}
//# sourceMappingURL=v1.js.map
;