wowok
Version:
Wowok Blockchain TypeScript API
1 lines • 4.1 kB
JavaScript
import{array,boolean,check,integer,lazy,literal,nullable,nullish,number,object,optional,pipe,record,string,transform,tuple,union,unknown}from'valibot';import{isValidWowAddress,normalizeWowAddress}from'../../utils/wow-types.js';export function safeEnum(a){const b=Object['entries'](a)['map'](([c,d])=>object({[c]:d}));return pipe(union(b),transform(c=>({...c,'$kind':Object['keys'](c)[0x0]})));}export const WowAddress=pipe(string(),transform(a=>normalizeWowAddress(a)),check(isValidWowAddress));export const ObjectID=WowAddress;export const BCSBytes=string();export const JsonU64=pipe(union([string(),pipe(number(),integer())]),check(a=>{try{return BigInt(a),BigInt(a)>=0x0&&BigInt(a)<=0xffffffffffffffffn;}catch{return![];}},'Invalid\x20u64'));export const ObjectRefSchema=object({'objectId':WowAddress,'version':JsonU64,'digest':string()});export const ArgumentSchema=pipe(union([object({'GasCoin':literal(!![])}),object({'Input':pipe(number(),integer()),'type':optional(literal('pure'))}),object({'Input':pipe(number(),integer()),'type':optional(literal('object'))}),object({'Result':pipe(number(),integer())}),object({'NestedResult':tuple([pipe(number(),integer()),pipe(number(),integer())])})]),transform(a=>({...a,'$kind':Object['keys'](a)[0x0]})));export const GasDataSchema=object({'budget':nullable(JsonU64),'price':nullable(JsonU64),'owner':nullable(WowAddress),'payment':nullable(array(ObjectRefSchema))});export const StructTagSchema=object({'address':string(),'module':string(),'name':string(),'typeParams':array(string())});export const OpenMoveTypeSignatureBodySchema=union([literal('address'),literal('bool'),literal('u8'),literal('u16'),literal('u32'),literal('u64'),literal('u128'),literal('u256'),object({'vector':lazy(()=>OpenMoveTypeSignatureBodySchema)}),object({'datatype':object({'package':string(),'module':string(),'type':string(),'typeParameters':array(lazy(()=>OpenMoveTypeSignatureBodySchema))})}),object({'typeParameter':pipe(number(),integer())})]);export const OpenMoveTypeSignatureSchema=object({'ref':nullable(union([literal('&'),literal('&mut')])),'body':OpenMoveTypeSignatureBodySchema});const ProgrammableMoveCallSchema=object({'package':ObjectID,'module':string(),'function':string(),'typeArguments':array(string()),'arguments':array(ArgumentSchema),'_argumentTypes':optional(nullable(array(OpenMoveTypeSignatureSchema)))});export const $Intent=object({'name':string(),'inputs':record(string(),union([ArgumentSchema,array(ArgumentSchema)])),'data':record(string(),unknown())});export const CommandSchema=safeEnum({'MoveCall':ProgrammableMoveCallSchema,'TransferObjects':object({'objects':array(ArgumentSchema),'address':ArgumentSchema}),'SplitCoins':object({'coin':ArgumentSchema,'amounts':array(ArgumentSchema)}),'MergeCoins':object({'destination':ArgumentSchema,'sources':array(ArgumentSchema)}),'Publish':object({'modules':array(BCSBytes),'dependencies':array(ObjectID)}),'MakeMoveVec':object({'type':nullable(string()),'elements':array(ArgumentSchema)}),'Upgrade':object({'modules':array(BCSBytes),'dependencies':array(ObjectID),'package':ObjectID,'ticket':ArgumentSchema}),'$Intent':$Intent});export const ObjectArgSchema=safeEnum({'ImmOrOwnedObject':ObjectRefSchema,'SharedObject':object({'objectId':ObjectID,'initialSharedVersion':JsonU64,'mutable':boolean()}),'Receiving':ObjectRefSchema});const CallArgSchema=safeEnum({'Object':ObjectArgSchema,'Pure':object({'bytes':BCSBytes}),'UnresolvedPure':object({'value':unknown()}),'UnresolvedObject':object({'objectId':ObjectID,'version':optional(nullable(JsonU64)),'digest':optional(nullable(string())),'initialSharedVersion':optional(nullable(JsonU64)),'mutable':optional(nullable(boolean()))})});export const NormalizedCallArg=safeEnum({'Object':ObjectArgSchema,'Pure':object({'bytes':BCSBytes})});export const TransactionExpiration=safeEnum({'None':literal(!![]),'Epoch':JsonU64});export const TransactionDataSchema=object({'version':literal(0x2),'sender':nullish(WowAddress),'expiration':nullish(TransactionExpiration),'gasData':GasDataSchema,'inputs':array(CallArgSchema),'commands':array(CommandSchema)});