UNPKG

micro-stacks

Version:

Tiny libraries for building Stacks apps.

69 lines (64 loc) 13 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var common = require('micro-stacks/common'); var crypto = require('micro-stacks/crypto'); var me=128,B=128,P=BigInt("0xffffffffffffffffffffffffffffffff"),M=BigInt(0),U=BigInt("0x7fffffffffffffffffffffffffffffff"),w=BigInt("-170141183460469231731687303715884105728"),tr=32,nr=65,ir=32,or=64,ar=34,ge=(i=>(i[i.Origin=1]="Origin",i[i.Standard=2]="Standard",i[i.Contract=3]="Contract",i))(ge||{}),A=(n=>(n[n.Int=0]="Int",n[n.UInt=1]="UInt",n[n.Buffer=2]="Buffer",n[n.BoolTrue=3]="BoolTrue",n[n.BoolFalse=4]="BoolFalse",n[n.PrincipalStandard=5]="PrincipalStandard",n[n.PrincipalContract=6]="PrincipalContract",n[n.ResponseOk=7]="ResponseOk",n[n.ResponseErr=8]="ResponseErr",n[n.OptionalNone=9]="OptionalNone",n[n.OptionalSome=10]="OptionalSome",n[n.List=11]="List",n[n.Tuple=12]="Tuple",n[n.StringASCII=13]="StringASCII",n[n.StringUTF8=14]="StringUTF8",n))(A||{});var I=()=>({type:3}),O=()=>({type:4}),pr=e=>e?I():O();var L=e=>{if(e.length>1e6)throw new Error("Cannot construct clarity buffer that is greater than 1MB");return {type:2,buffer:Uint8Array.from(e)}},ur=e=>L(common.utf8ToBytes(e));var Z=e=>{let r=common.intToBigInt(e,!0);if(r>U)throw new RangeError(`Cannot construct clarity integer from value greater than ${U.toString()}`);if(r<w)throw new RangeError(`Cannot construct clarity integer form value less than ${w.toString()}`);if(common.intToBytes(r).byteLength>128)throw new RangeError(`Cannot construct clarity integer from value greater than ${128} bits`);return {type:0,value:r}},K=e=>{let r=common.intToBigInt(e);if(r<M)throw new RangeError("Cannot construct unsigned clarity integer from negative value");if(r>P)throw new RangeError(`Cannot construct unsigned clarity integer greater than ${P.toString()}`);return {type:1,value:r}};function W(e){return {type:11,list:e}}function R(){return {type:9}}function E(e){return {type:10,value:e}}function gr(e){return e?E(e):R()}function te(e){return /^[a-zA-Z]([a-zA-Z0-9]|[-_!?+<>=/*])*$|^[-+=/*]$|^[<>]=?$/.test(e)&&e.length<128}var Be=(a=>(a[a.Address=0]="Address",a[a.Principal=1]="Principal",a[a.LengthPrefixedString=2]="LengthPrefixedString",a[a.MemoString=3]="MemoString",a[a.AssetInfo=4]="AssetInfo",a[a.PostCondition=5]="PostCondition",a[a.PublicKey=6]="PublicKey",a[a.LengthPrefixedList=7]="LengthPrefixedList",a[a.Payload=8]="Payload",a[a.MessageSignature=9]="MessageSignature",a[a.TransactionAuthField=10]="TransactionAuthField",a))(Be||{});function N(e){let r=crypto.c32addressDecode(e);return {type:0,version:r[0],hash160:common.bytesToHex(r[1])}}function k(e){return crypto.c32address(e.version,common.hexToBytes(e.hash160))}var Pe=(e,r)=>e?common.utf8ToBytes(e).length>r:!1;function C(e,r,t){let i=r||1,s=t||128;if(Pe(e,s))throw new Error(`String length exceeds maximum bytes ${s.toString()}`);return {type:2,content:e,lengthPrefixBytes:i,maxLengthBytes:s}}function _(e){let r=new common.BufferArray;return r.appendHexString(common.intToHexString(e.version,1)),r.appendHexString(e.hash160),r.concatBuffer()}function $(e){let r=new common.BufferArray,t=common.utf8ToBytes(e.content),i=t.byteLength;return r.appendHexString(common.intToHexString(i,e.lengthPrefixBytes)),r.push(t),r.concatBuffer()}function F(e,r,t){r=r||1;let i=common.hexStringToInt(common.bytesToHex(e.readBuffer(r))),s=common.bytesToUtf8(e.readBuffer(i));return C(s,r,t??128)}function z(e){let r=common.hexStringToInt(common.bytesToHex(e.readBuffer(1))),t=common.bytesToHex(e.readBuffer(20));return {type:0,version:r,hash160:t}}function d(e){if(e.type===5)return k(e.address);if(e.type===6)return `${k(e.address)}.${e.contractName.content}`;throw new Error(`Unexpected principal data: ${JSON.stringify(e)}`)}function Ir(e){if(e.includes(".")){let[r,t]=e.split(".");return Ie(r,t)}else return we(e)}function we(e){let r=N(e);return {type:5,address:r}}function ie(e){return {type:5,address:e}}function ne(e,r){let t=N(e),i=C(r);return H(t,i)}function Ie(e,r){if(e.includes(".")){let[t,i]=e.split(".");return ne(t,i)}if(!r)throw TypeError("[micro-stacks] contractPrincipalCV requires contractName value");return ne(e,r)}function H(e,r){if(common.utf8ToBytes(r.content).byteLength>=128)throw new Error("Contract name must be less than 128 bytes");return {type:6,address:e,contractName:r}}function Or(e,r){let t=C(r);return {type:6,address:e.address,contractName:t}}function oe(e){return {type:8,value:e}}function ae(e){return {type:7,value:e}}var S=e=>({type:13,data:e}),se=e=>({type:14,data:e}),Er=(e,r)=>{switch(r){case"ascii":return S(e);case"utf8":return S(e)}};function pe(e){for(let r in e)if(!te(r))throw new Error(`"${r}" is not a valid Clarity name`);return {type:12,data:e}}var Oe=(o=>(o[o.ClarityAbiTypeUInt128=1]="ClarityAbiTypeUInt128",o[o.ClarityAbiTypeInt128=2]="ClarityAbiTypeInt128",o[o.ClarityAbiTypeBool=3]="ClarityAbiTypeBool",o[o.ClarityAbiTypePrincipal=4]="ClarityAbiTypePrincipal",o[o.ClarityAbiTypeNone=5]="ClarityAbiTypeNone",o[o.ClarityAbiTypeBuffer=6]="ClarityAbiTypeBuffer",o[o.ClarityAbiTypeResponse=7]="ClarityAbiTypeResponse",o[o.ClarityAbiTypeOptional=8]="ClarityAbiTypeOptional",o[o.ClarityAbiTypeTuple=9]="ClarityAbiTypeTuple",o[o.ClarityAbiTypeList=10]="ClarityAbiTypeList",o[o.ClarityAbiTypeStringAscii=11]="ClarityAbiTypeStringAscii",o[o.ClarityAbiTypeStringUtf8=12]="ClarityAbiTypeStringUtf8",o[o.ClarityAbiTypeTraitReference=13]="ClarityAbiTypeTraitReference",o))(Oe||{});function V(e,r="hex"){switch(e.type){case 3:return "true";case 4:return "false";case 0:return e.value.toString();case 1:return `u${e.value.toString()}`;case 2:if(r==="tryAscii"){let t=common.bytesToAscii(e.buffer);if(/[ -~]/.test(t))return JSON.stringify(t)}return `0x${common.bytesToHex(e.buffer)}`;case 9:return "none";case 10:return `(some ${V(e.value,r)})`;case 8:return `(err ${V(e.value,r)})`;case 7:return `(ok ${V(e.value,r)})`;case 5:case 6:return d(e);case 11:return `(list ${e.list.map(t=>V(t,r)).join(" ")})`;case 12:return `(tuple ${Object.keys(e.data).map(t=>`(${t} ${V(e.data[t],r)})`).join(" ")})`;case 13:return `"${e.data}"`;case 14:return `u"${e.data}"`}}function l(e){switch(e.type){case 3:case 4:return "bool";case 0:return "int";case 1:return "uint";case 2:return `(buff ${e.buffer.length})`;case 9:return "(optional none)";case 10:return `(optional ${l(e.value)})`;case 8:return `(response UnknownType ${l(e.value)})`;case 7:return `(response ${l(e.value)} UnknownType)`;case 5:case 6:return "principal";case 11:return `(list ${e.list.length} ${e.list.length?l(e.list[0]):"UnknownType"})`;case 12:return `(tuple ${Object.keys(e.data).map(r=>`(${r} ${l(e.data[r])})`).join(" ")})`;case 13:return `(string-ascii ${common.asciiToBytes(e.data).length})`;case 14:return `(string-utf8 ${common.utf8ToBytes(e.data).length})`}}function T(e){let r=h(e,!0);switch(e.type){case 8:return {type:l(e),value:r,success:!1};case 7:return {type:l(e),value:r,success:!0};default:return {type:l(e),value:r}}}function h(e,r=!1){switch(e.type){case 3:return !0;case 4:return !1;case 0:case 1:return r?e.value.toString():e.value;case 2:return `0x${common.bytesToHex(e.buffer)}`;case 9:return null;case 10:return T(e.value);case 8:return T(e.value);case 7:return T(e.value);case 5:case 6:return d(e);case 11:return e.list.map(s=>T(s));case 12:let t={};return Object.keys(e.data).map(s=>[s,T(e.data[s])]).forEach(([s,p])=>{t[s]=p;}),t;case 13:return e.data;case 14:return e.data}}function u(e,r=!1){switch(e.type){case 3:return !0;case 4:return !1;case 0:case 1:return r?e.value.toString():e.value;case 2:return e.buffer;case 9:return null;case 10:return u(e.value,r);case 8:return u(e.value,r);case 7:return u(e.value,r);case 5:case 6:return d(e);case 11:return e.list.map(i=>u(i,r));case 12:let t={};return Object.keys(e.data).forEach(i=>{t[i]=u(e.data[i],r);}),t;case 13:return e.data;case 14:return e.data}}function f(e,r){let t=new common.BufferArray,i=Uint8Array.from([e]);return t.push(i),t.push(r),t.concatBuffer()}function He(e){return Uint8Array.from([e.type])}function je(e){return e.type===9?new Uint8Array([e.type]):f(e.type,m(e.value))}function De(e){let r=new Uint8Array(4);return new DataView(r.buffer,r.byteOffset,r.byteLength).setUint32(r.byteOffset,e.buffer.length),f(e.type,common.concatByteArrays([r,Uint8Array.from(e.buffer)]))}function Je(e){let r=common.intToHexString(common.toTwos(e.value),16),t=common.hexToBytes(r);return f(e.type,t)}function Ye(e){let r=common.intToHexString(e.value,16),t=common.hexToBytes(r);return f(e.type,t)}function Ge(e){return f(e.type,_(e.address))}function ve(e){return f(e.type,common.concatByteArrays([_(e.address),$(e.contractName)]))}function Me(e){return f(e.type,m(e.value))}function Xe(e){let r=new common.BufferArray,t=new Uint8Array(4);common.writeUInt32BE(t,e.list.length,0),r.push(t);for(let i of e.list){let s=m(i);r.push(s);}return f(e.type,r.concatBuffer())}function Ze(e){let r=[],t=new Uint8Array(4);new DataView(t.buffer,t.byteOffset,t.byteLength).setUint32(t.byteOffset,Object.keys(e.data).length),r.push(t);let s=Object.keys(e.data).sort((p,y)=>{let g=common.utf8ToBytes(p),x=common.utf8ToBytes(y);return common.compare(g,x)});for(let p of s){let y=C(p);r.push($(y));let g=m(e.data[p]);r.push(g);}return f(e.type,common.concatByteArrays(r))}function ue(e,r){let t=new common.BufferArray,s=(r==="ascii"?common.asciiToBytes:common.utf8ToBytes)(e.data),p=new Uint8Array(4);return new DataView(p.buffer,p.byteOffset,p.byteLength).setUint32(p.byteOffset,s.length),t.push(p),t.push(s),f(e.type,t.concatBuffer())}function Ke(e){return ue(e,"ascii")}function We(e){return ue(e,"utf8")}function m(e){switch(e.type){case 3:case 4:return He(e);case 9:case 10:return je(e);case 2:return De(e);case 0:return Je(e);case 1:return Ye(e);case 5:return Ge(e);case 6:return ve(e);case 7:case 8:return Me(e);case 11:return Xe(e);case 12:return Ze(e);case 13:return Ke(e);case 14:return We(e);default:throw new Error("Unable to serialize. Invalid Clarity Value.")}}function c(e){let r;if(typeof e=="string"){let i=e.slice(0,2).toLowerCase()==="0x";r=new common.BufferReader(common.hexToBytes(i?e.slice(2):e));}else e instanceof Uint8Array?r=new common.BufferReader(e):r=e;switch(r.readUInt8Enum(A,i=>{throw new common.DeserializationError(`Cannot recognize Clarity Type: ${i}`)})){case 0:return Z(r.readBuffer(16));case 1:return K(r.readBuffer(16));case 2:let i=r.readUInt32BE();return L(r.readBuffer(i));case 3:return I();case 4:return O();case 5:let s=z(r);return ie(s);case 6:let p=z(r),y=F(r);return H(p,y);case 7:return ae(c(r));case 8:return oe(c(r));case 9:return R();case 10:return E(c(r));case 11:let g=r.readUInt32BE(),x=[];for(let n=0;n<g;n++)x.push(c(r));return W(x);case 12:let Ce=r.readUInt32BE(),G={};for(let n=0;n<Ce;n++){let v=F(r).content;if(v===void 0)throw new common.DeserializationError('"content" is undefined');G[v]=c(r);}return pe(G);case 13:let a=r.readUInt32BE(),de=common.bytesToAscii(r.readBuffer(a));return S(de);case 14:let o=r.readUInt32BE(),Te=common.bytesToUtf8(r.readBuffer(o));return se(Te);default:throw new common.DeserializationError("Unable to deserialize Clarity Value from buffer. Could not find valid Clarity Type.")}}function Vt(e){return `0x${common.bytesToHex(m(e))}`}function ye(e){return c(e)}function xt(e,r=!0){return h(ye(e),r)}function At(e,r=!0){return u(ye(e),r)} exports.CLARITY_INT_SIZE = B; exports.COINBASE_BUFFER_LENGTH_BYTES = tr; exports.COMPRESSED_PUBKEY_LENGTH_BYTES = ir; exports.ClarityAbiTypeId = Oe; exports.ClarityType = A; exports.MAX_I128 = U; exports.MAX_STRING_LENGTH_BYTES = me; exports.MAX_U128 = P; exports.MEMO_MAX_LENGTH_BYTES = ar; exports.MIN_I128 = w; exports.MIN_U128 = M; exports.PostConditionPrincipalID = ge; exports.RECOVERABLE_ECDSA_SIG_LENGTH_BYTES = nr; exports.StacksMessageType = Be; exports.UNCOMPRESSED_PUBKEY_LENGTH_BYTES = or; exports.addressToString = k; exports.boolCV = pr; exports.bufferCV = L; exports.bufferCVFromString = ur; exports.contractPrincipalCV = Ie; exports.contractPrincipalCVFromAddress = H; exports.contractPrincipalCVFromStandard = Or; exports.createAddress = N; exports.createLPString = C; exports.cvToHex = Vt; exports.cvToJSON = T; exports.cvToString = V; exports.cvToTrueValue = u; exports.cvToValue = h; exports.deserializeAddress = z; exports.deserializeCV = c; exports.deserializeLPString = F; exports.exceedsMaxLengthBytes = Pe; exports.falseCV = O; exports.getCVTypeString = l; exports.hexToCV = ye; exports.hexToCvValue = xt; exports.hexToValue = At; exports.intCV = Z; exports.isClarityName = te; exports.listCV = W; exports.noneCV = R; exports.optionalCVOf = gr; exports.principalCV = Ir; exports.principalToString = d; exports.responseErrorCV = oe; exports.responseOkCV = ae; exports.serializeAddress = _; exports.serializeCV = m; exports.serializeLPString = $; exports.someCV = E; exports.standardPrincipalCV = we; exports.standardPrincipalCVFromAddress = ie; exports.stringAsciiCV = S; exports.stringCV = Er; exports.stringUtf8CV = se; exports.trueCV = I; exports.tupleCV = pe; exports.uintCV = K;