@stellar/stellar-sdk 16.0.0-rc.2 → 16.0.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/stellar-sdk-axios.js +25 -27
- package/dist/stellar-sdk-axios.js.map +1 -1
- package/dist/stellar-sdk-axios.min.js +1 -1
- package/dist/stellar-sdk-axios.min.js.map +1 -1
- package/dist/stellar-sdk.js +26 -28
- package/dist/stellar-sdk.js.map +1 -1
- package/dist/stellar-sdk.min.js +2 -2
- package/dist/stellar-sdk.min.js.map +1 -1
- package/lib/axios/cjs/base/transaction_builder.js +13 -1
- package/lib/axios/cjs/base/transaction_builder.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/bindings/config.js.map +1 -1
- package/lib/axios/cjs/bindings/wasm_fetcher.js +1 -1
- package/lib/axios/cjs/bindings/wasm_fetcher.js.map +1 -1
- package/lib/axios/cjs/contract/assembled_transaction.js +1 -6
- package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/client.js.map +1 -1
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/contract/types.js.map +1 -1
- package/lib/axios/cjs/contract/utils.js.map +1 -1
- package/lib/axios/cjs/contract/wasm_spec_parser.js +1 -1
- package/lib/axios/cjs/contract/wasm_spec_parser.js.map +1 -1
- package/lib/axios/cjs/horizon/call_builder.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/cjs/horizon/horizon_axios_client.js.map +1 -1
- package/lib/axios/cjs/http-client/fetch-client.js +1 -1
- package/lib/axios/cjs/http-client/fetch-client.js.map +1 -1
- package/lib/axios/cjs/http-client/types.js.map +1 -1
- package/lib/axios/cjs/rpc/axios.js +1 -1
- package/lib/axios/cjs/rpc/axios.js.map +1 -1
- package/lib/axios/cjs/rpc/jsonrpc.js.map +1 -1
- package/lib/axios/cjs/rpc/server.js +6 -15
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/esm/base/transaction_builder.js +13 -1
- package/lib/axios/esm/base/transaction_builder.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/bindings/config.js.map +1 -1
- package/lib/axios/esm/bindings/wasm_fetcher.js +1 -1
- package/lib/axios/esm/bindings/wasm_fetcher.js.map +1 -1
- package/lib/axios/esm/contract/assembled_transaction.js +1 -6
- package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/esm/contract/client.js.map +1 -1
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/contract/types.d.ts +0 -9
- package/lib/axios/esm/contract/types.js.map +1 -1
- package/lib/axios/esm/contract/utils.js.map +1 -1
- package/lib/axios/esm/contract/wasm_spec_parser.js +1 -1
- package/lib/axios/esm/contract/wasm_spec_parser.js.map +1 -1
- package/lib/axios/esm/horizon/call_builder.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_api.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/esm/horizon/horizon_axios_client.js.map +1 -1
- package/lib/axios/esm/http-client/fetch-client.js +1 -1
- package/lib/axios/esm/http-client/fetch-client.js.map +1 -1
- package/lib/axios/esm/http-client/types.js.map +1 -1
- package/lib/axios/esm/node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/package.json +3 -0
- package/lib/axios/esm/rpc/axios.js +1 -1
- package/lib/axios/esm/rpc/axios.js.map +1 -1
- package/lib/axios/esm/rpc/jsonrpc.js.map +1 -1
- package/lib/axios/esm/rpc/server.d.ts +2 -7
- package/lib/axios/esm/rpc/server.js +6 -15
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/axios/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/cjs/base/transaction_builder.js +13 -1
- package/lib/cjs/base/transaction_builder.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/bindings/config.js.map +1 -1
- package/lib/cjs/bindings/wasm_fetcher.js +1 -1
- package/lib/cjs/bindings/wasm_fetcher.js.map +1 -1
- package/lib/cjs/contract/assembled_transaction.js +1 -6
- package/lib/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/cjs/contract/client.js.map +1 -1
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/contract/types.js.map +1 -1
- package/lib/cjs/contract/utils.js.map +1 -1
- package/lib/cjs/contract/wasm_spec_parser.js +1 -1
- package/lib/cjs/contract/wasm_spec_parser.js.map +1 -1
- package/lib/cjs/horizon/call_builder.js.map +1 -1
- package/lib/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js.map +1 -1
- package/lib/cjs/http-client/fetch-client.js +1 -1
- package/lib/cjs/http-client/fetch-client.js.map +1 -1
- package/lib/cjs/http-client/types.js.map +1 -1
- package/lib/cjs/rpc/axios.js +1 -1
- package/lib/cjs/rpc/axios.js.map +1 -1
- package/lib/cjs/rpc/jsonrpc.js.map +1 -1
- package/lib/cjs/rpc/server.js +6 -15
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/esm/base/transaction_builder.js +13 -1
- package/lib/esm/base/transaction_builder.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/bindings/config.js.map +1 -1
- package/lib/esm/bindings/wasm_fetcher.js +1 -1
- package/lib/esm/bindings/wasm_fetcher.js.map +1 -1
- package/lib/esm/contract/assembled_transaction.js +1 -6
- package/lib/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/esm/contract/client.js.map +1 -1
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/contract/types.d.ts +0 -9
- package/lib/esm/contract/types.js.map +1 -1
- package/lib/esm/contract/utils.js.map +1 -1
- package/lib/esm/contract/wasm_spec_parser.js +1 -1
- package/lib/esm/contract/wasm_spec_parser.js.map +1 -1
- package/lib/esm/horizon/call_builder.js.map +1 -1
- package/lib/esm/horizon/horizon_api.js.map +1 -1
- package/lib/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/esm/horizon/horizon_axios_client.js.map +1 -1
- package/lib/esm/http-client/fetch-client.js +1 -1
- package/lib/esm/http-client/fetch-client.js.map +1 -1
- package/lib/esm/http-client/types.js.map +1 -1
- package/lib/esm/node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/package.json +3 -0
- package/lib/esm/rpc/axios.js +1 -1
- package/lib/esm/rpc/axios.js.map +1 -1
- package/lib/esm/rpc/jsonrpc.js.map +1 -1
- package/lib/esm/rpc/server.d.ts +2 -7
- package/lib/esm/rpc/server.js +6 -15
- package/lib/esm/rpc/server.js.map +1 -1
- package/lib/esm/webauth/challenge_transaction.js.map +1 -1
- package/package.json +2 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sources":["../../../src/contract/spec.ts"],"sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport {\n type ScIntType,\n XdrLargeInt,\n xdr,\n Address,\n Contract,\n scValToBigInt,\n} from \"../base/index.js\";\nimport { Ok, Err } from \"./rust_result.js\";\nimport { processSpecEntryStream } from \"./utils.js\";\nimport { specFromWasm } from \"./wasm_spec_parser.js\";\n\nexport interface Union<T> {\n tag: string;\n values?: T;\n}\n\nfunction enumToJsonSchema(udt: xdr.ScSpecUdtEnumV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n const title = aCase.name().toString();\n const desc = aCase.doc().toString();\n oneOf.push({\n description: desc,\n title,\n enum: [aCase.value()],\n type: \"number\",\n });\n });\n const res: any = { oneOf };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\nfunction isNumeric(field: xdr.ScSpecUdtStructFieldV0) {\n return /^\\d+$/.test(field.name().toString());\n}\n\nfunction readObj(args: object, input: xdr.ScSpecFunctionInputV0): any {\n const inputName = input.name().toString();\n const entry = Object.entries(args).find(([name]) => name === inputName);\n if (!entry) {\n throw new Error(`Missing field ${inputName}`);\n }\n return entry[1];\n}\n\nfunction findCase(name: string) {\n return function matches(entry: xdr.ScSpecUdtUnionCaseV0) {\n switch (entry.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const tuple = entry.tupleCase();\n return tuple.name().toString() === name;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const voidCase = entry.voidCase();\n return voidCase.name().toString() === name;\n }\n default:\n return false;\n }\n };\n}\n\nfunction stringToScVal(str: string, ty: xdr.ScSpecType): xdr.ScVal {\n switch (ty.value) {\n case xdr.ScSpecType.scSpecTypeString().value:\n return xdr.ScVal.scvString(str);\n case xdr.ScSpecType.scSpecTypeSymbol().value:\n return xdr.ScVal.scvSymbol(str);\n case xdr.ScSpecType.scSpecTypeAddress().value:\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value:\n return Address.fromString(str).toScVal();\n case xdr.ScSpecType.scSpecTypeU64().value:\n return new XdrLargeInt(\"u64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI64().value:\n return new XdrLargeInt(\"i64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU128().value:\n return new XdrLargeInt(\"u128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI128().value:\n return new XdrLargeInt(\"i128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU256().value:\n return new XdrLargeInt(\"u256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI256().value:\n return new XdrLargeInt(\"i256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeBytes().value:\n case xdr.ScSpecType.scSpecTypeBytesN().value:\n return xdr.ScVal.scvBytes(Buffer.from(str, \"base64\"));\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n return xdr.ScVal.scvTimepoint(new xdr.Uint64(str));\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n return xdr.ScVal.scvDuration(new xdr.Uint64(str));\n }\n default:\n throw new TypeError(`invalid type ${ty.name} specified for string value`);\n }\n}\n\nconst PRIMITIVE_DEFINITONS: { [key: string]: JSONSchema7Definition } = {\n U32: {\n type: \"integer\",\n minimum: 0,\n maximum: 4294967295,\n },\n I32: {\n type: \"integer\",\n minimum: -2147483648,\n maximum: 2147483647,\n },\n U64: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Timepoint: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Duration: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n I64: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 21, // Includes additional digit for the potential '-'\n },\n U128: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 39, // 128-bit max value has 39 digits\n },\n I128: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 40, // Includes additional digit for the potential '-'\n },\n U256: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 78, // 256-bit max value has 78 digits\n },\n I256: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 79, // Includes additional digit for the potential '-'\n },\n Address: {\n type: \"string\",\n format: \"address\",\n description: \"Address can be a public key or contract id\",\n },\n MuxedAddress: {\n type: \"string\",\n format: \"address\",\n description:\n \"Stellar public key with M prefix combining a G address and unique ID\",\n },\n ScString: {\n type: \"string\",\n description: \"ScString is a string\",\n },\n ScSymbol: {\n type: \"string\",\n description: \"ScSymbol is a string\",\n },\n DataUrl: {\n type: \"string\",\n pattern:\n \"^(?:[A-Za-z0-9+\\\\/]{4})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$\",\n },\n};\n\n/**\n * Converts an XDR type definition to a JSON schema reference.\n * @param typeDef - type to convert to json schema reference\n * @returns a schema describing the type\n * @hidden\n */\nfunction typeRef(typeDef: xdr.ScSpecTypeDef): JSONSchema7 {\n const t = typeDef.switch();\n const value = t.value;\n let ref;\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVal().value: {\n ref = \"Val\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBool().value: {\n return { type: \"boolean\" };\n }\n case xdr.ScSpecType.scSpecTypeVoid().value: {\n return { type: \"null\" };\n }\n case xdr.ScSpecType.scSpecTypeError().value: {\n ref = \"Error\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU32().value: {\n ref = \"U32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI32().value: {\n ref = \"I32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU64().value: {\n ref = \"U64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI64().value: {\n ref = \"I64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n ref = \"Timepoint\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n ref = \"Duration\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU128().value: {\n ref = \"U128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI128().value: {\n ref = \"I128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU256().value: {\n ref = \"U256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI256().value: {\n ref = \"I256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBytes().value: {\n ref = \"DataUrl\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeString().value: {\n ref = \"ScString\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeSymbol().value: {\n ref = \"ScSymbol\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeAddress().value: {\n ref = \"Address\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value: {\n ref = \"MuxedAddress\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeOption().value: {\n const opt = typeDef.option();\n return typeRef(opt.valueType());\n }\n case xdr.ScSpecType.scSpecTypeResult().value: {\n const result = typeDef.result();\n return typeRef(result.okType());\n }\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const arr = typeDef.vec();\n const reference = typeRef(arr.elementType());\n return {\n type: \"array\",\n items: reference,\n };\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = typeDef.map();\n const items = [typeRef(map.keyType()), typeRef(map.valueType())];\n return {\n type: \"array\",\n items: {\n type: \"array\",\n items,\n minItems: 2,\n maxItems: 2,\n },\n };\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tuple = typeDef.tuple();\n const minItems = tuple.valueTypes().length;\n const maxItems = minItems;\n const items = tuple.valueTypes().map(typeRef);\n return { type: \"array\", items, minItems, maxItems };\n }\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const arr = typeDef.bytesN();\n return {\n $ref: \"#/definitions/DataUrl\",\n maxLength: arr.n(),\n };\n }\n case xdr.ScSpecType.scSpecTypeUdt().value: {\n const udt = typeDef.udt();\n ref = udt.name().toString();\n break;\n }\n }\n return { $ref: `#/definitions/${ref}` };\n}\n\ntype Func = { input: JSONSchema7; output: JSONSchema7 };\n\nfunction isRequired(typeDef: xdr.ScSpecTypeDef): boolean {\n return typeDef.switch().value !== xdr.ScSpecType.scSpecTypeOption().value;\n}\n\nfunction argsAndRequired(\n input: { type: () => xdr.ScSpecTypeDef; name: () => string | Buffer }[],\n): { properties: object; required?: string[] } {\n const properties: any = {};\n const required: string[] = [];\n input.forEach((arg) => {\n const aType = arg.type();\n const name = arg.name().toString();\n properties[name] = typeRef(aType);\n if (isRequired(aType)) {\n required.push(name);\n }\n });\n const res: { properties: object; required?: string[] } = { properties };\n if (required.length > 0) {\n res.required = required;\n }\n return res;\n}\n\nfunction structToJsonSchema(udt: xdr.ScSpecUdtStructV0): object {\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n const items = fields.map((_, i) => typeRef(fields[i].type()));\n return {\n type: \"array\",\n items,\n minItems: fields.length,\n maxItems: fields.length,\n };\n }\n const description = udt.doc().toString();\n const { properties, required }: any = argsAndRequired(fields);\n return {\n description,\n properties,\n required,\n additionalProperties: false,\n type: \"object\",\n };\n}\n\nfunction functionToJsonSchema(func: xdr.ScSpecFunctionV0): Func {\n const { properties, required }: any = argsAndRequired(func.inputs());\n const args: any = {\n additionalProperties: false,\n properties,\n type: \"object\",\n };\n if (required?.length > 0) {\n args.required = required;\n }\n const input: Partial<JSONSchema7> = {\n properties: {\n args,\n },\n };\n const outputs = func.outputs();\n const output: Partial<JSONSchema7> =\n outputs.length > 0\n ? typeRef(outputs[0])\n : typeRef(xdr.ScSpecTypeDef.scSpecTypeVoid());\n const description = func.doc().toString();\n if (description.length > 0) {\n input.description = description;\n }\n input.additionalProperties = false;\n output.additionalProperties = false;\n return {\n input,\n output,\n };\n}\n\nfunction unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n switch (aCase.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const c = aCase.voidCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n },\n additionalProperties: false,\n required: [\"tag\"],\n });\n break;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const c = aCase.tupleCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n values: {\n type: \"array\",\n items: c.type().map(typeRef),\n },\n },\n required: [\"tag\", \"values\"],\n additionalProperties: false,\n });\n }\n }\n });\n\n const res: any = {\n oneOf,\n };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\n/**\n * Provides a ContractSpec class which can contains the XDR types defined by the contract.\n * This allows the class to be used to convert between native and raw `xdr.ScVal`s.\n *\n * Constructs a new ContractSpec from an array of XDR spec entries.\n *\n * @param entries - the XDR spec entries\n * @throws if entries is invalid\n *\n * @example\n * ```ts\n * const specEntries = [...]; // XDR spec entries of a smart contract\n * const contractSpec = new ContractSpec(specEntries);\n *\n * // Convert native value to ScVal\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n *\n * // Call contract\n * const resultScv = await callContract(contractId, 'funcName', scArgs);\n *\n * // Convert result ScVal back to native value\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n *\n * console.log(result); // {success: true}\n * ```\n */\nexport class Spec {\n /**\n * The XDR spec entries.\n */\n public entries: xdr.ScSpecEntry[] = [];\n\n /**\n * Generates a Spec instance from the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns A Promise that resolves to a Spec instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static fromWasm(wasm: Buffer): Spec {\n const spec = specFromWasm(wasm);\n return new Spec(spec);\n }\n\n /**\n * Generates a Spec instance from contract specs in any of the following forms:\n * - An XDR encoded stream of xdr.ScSpecEntry entries, the format of the spec\n * stored inside Wasm files.\n * - A base64 XDR encoded stream of xdr.ScSpecEntry entries.\n * - An array of xdr.ScSpecEntry.\n * - An array of base64 XDR encoded xdr.ScSpecEntry.\n *\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n constructor(entries: Buffer | string | xdr.ScSpecEntry[] | string[]) {\n if (Buffer.isBuffer(entries)) {\n this.entries = processSpecEntryStream(entries as Buffer);\n } else if (typeof entries === \"string\") {\n this.entries = processSpecEntryStream(Buffer.from(entries, \"base64\"));\n } else {\n if (entries.length === 0) {\n throw new Error(\"Contract spec must have at least one entry\");\n }\n const entry = entries[0];\n if (typeof entry === \"string\") {\n this.entries = (entries as string[]).map((s) =>\n xdr.ScSpecEntry.fromXDR(s, \"base64\"),\n );\n } else {\n this.entries = entries as xdr.ScSpecEntry[];\n }\n }\n }\n\n /**\n * Gets the XDR functions from the spec.\n * @returns all contract functions\n */\n funcs(): xdr.ScSpecFunctionV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value,\n )\n .map((entry) => entry.functionV0());\n }\n\n /**\n * Gets the XDR function spec for the given function name.\n *\n * @param name - the name of the function\n * @returns the function spec\n *\n * @throws if no function with the given name exists\n */\n getFunc(name: string): xdr.ScSpecFunctionV0 {\n const entry = this.findEntry(name);\n if (\n entry.switch().value !== xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value\n ) {\n throw new Error(`${name} is not a function`);\n }\n return entry.functionV0();\n }\n\n /**\n * Converts native JS arguments to ScVals for calling a contract function.\n *\n * @param name - the name of the function\n * @param args - the arguments object\n * @returns the converted arguments\n *\n * @throws if argument is missing or incorrect type\n *\n * @example\n * ```ts\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n * ```\n */\n funcArgsToScVals(name: string, args: object): xdr.ScVal[] {\n const fn = this.getFunc(name);\n return fn\n .inputs()\n .map((input) => this.nativeToScVal(readObj(args, input), input.type()));\n }\n\n /**\n * Converts the result ScVal of a function call to a native JS value.\n *\n * @param name - the name of the function\n * @param val_or_base64 - the result ScVal or base64 encoded string\n * @returns the converted native value\n *\n * @throws if return type mismatch or invalid input\n *\n * @example\n * ```ts\n * const resultScv = 'AAA=='; // Base64 encoded ScVal\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n * ```\n */\n funcResToNative(name: string, val_or_base64: xdr.ScVal | string): any {\n const val =\n typeof val_or_base64 === \"string\"\n ? xdr.ScVal.fromXDR(val_or_base64, \"base64\")\n : val_or_base64;\n const func = this.getFunc(name);\n const outputs = func.outputs();\n if (outputs.length === 0) {\n const type = val.switch();\n if (type.value !== xdr.ScValType.scvVoid().value) {\n throw new Error(`Expected void, got ${type.name}`);\n }\n return null;\n }\n if (outputs.length > 1) {\n throw new Error(`Multiple outputs not supported`);\n }\n const output = outputs[0];\n if (output.switch().value === xdr.ScSpecType.scSpecTypeResult().value) {\n if (val.switch().value === xdr.ScValType.scvError().value) {\n return new Err({ message: val.error().toXDR(\"base64\") });\n }\n return new Ok(this.scValToNative(val, output.result().okType()));\n }\n return this.scValToNative(val, output);\n }\n\n /**\n * Finds the XDR spec entry for the given name.\n *\n * @param name - the name to find\n * @returns the entry\n *\n * @throws if no entry with the given name exists\n */\n findEntry(name: string): xdr.ScSpecEntry {\n const entry = this.entries.find(\n (e) => e.value().name().toString() === name,\n );\n if (!entry) {\n throw new Error(`no such entry: ${name}`);\n }\n return entry;\n }\n\n /**\n * Converts a native JS value to an ScVal based on the given type.\n *\n * @param val - the native JS value\n * @param ty - (optional) the expected type\n * @returns the converted ScVal\n *\n * @throws if value cannot be converted to the given type\n */\n nativeToScVal(val: any, ty: xdr.ScSpecTypeDef): xdr.ScVal {\n const t: xdr.ScSpecType = ty.switch();\n const value = t.value;\n if (t.value === xdr.ScSpecType.scSpecTypeUdt().value) {\n const udt = ty.udt();\n return this.nativeToUdt(val, udt.name().toString());\n }\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n const opt = ty.option();\n if (val === null || val === undefined) {\n return xdr.ScVal.scvVoid();\n }\n return this.nativeToScVal(val, opt.valueType());\n }\n switch (typeof val) {\n case \"object\": {\n if (val === null) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was null`,\n );\n }\n }\n\n if (val instanceof xdr.ScVal) {\n return val; // should we copy?\n }\n\n if (val instanceof Address) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.toScVal();\n }\n\n if (val instanceof Contract) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.address().toScVal();\n }\n\n if (val instanceof Uint8Array || Buffer.isBuffer(val)) {\n const copy = Uint8Array.from(val);\n switch (value) {\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const bytesN = ty.bytesN();\n if (copy.length !== bytesN.n()) {\n throw new TypeError(\n `expected ${bytesN.n()} bytes, but got ${copy.length}`,\n );\n }\n //@ts-ignore\n return xdr.ScVal.scvBytes(copy);\n }\n case xdr.ScSpecType.scSpecTypeBytes().value:\n //@ts-ignore\n return xdr.ScVal.scvBytes(copy);\n default:\n throw new TypeError(\n `invalid type (${ty}) specified for Bytes and BytesN`,\n );\n }\n }\n if (Array.isArray(val)) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const vec = ty.vec();\n const elementType = vec.elementType();\n return xdr.ScVal.scvVec(\n val.map((v) => this.nativeToScVal(v, elementType)),\n );\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tup = ty.tuple();\n const valTypes = tup.valueTypes();\n if (val.length !== valTypes.length) {\n throw new TypeError(\n `Tuple expects ${valTypes.length} values, but ${val.length} were provided`,\n );\n }\n return xdr.ScVal.scvVec(\n val.map((v, i) => this.nativeToScVal(v, valTypes[i])),\n );\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = ty.map();\n const keyType = map.keyType();\n const valueType = map.valueType();\n return xdr.ScVal.scvMap(\n val.map((entry) => {\n const key = this.nativeToScVal(entry[0], keyType);\n const mapVal = this.nativeToScVal(entry[1], valueType);\n return new xdr.ScMapEntry({ key, val: mapVal });\n }),\n );\n }\n\n default:\n throw new TypeError(\n `Type ${ty} was not vec, but value was Array`,\n );\n }\n }\n if (val.constructor === Map) {\n if (value !== xdr.ScSpecType.scSpecTypeMap().value) {\n throw new TypeError(`Type ${ty} was not map, but value was Map`);\n }\n const scMap = ty.map();\n const map = val as Map<any, any>;\n const entries: xdr.ScMapEntry[] = [];\n const values = map.entries();\n let res = values.next();\n while (!res.done) {\n const [k, v] = res.value;\n const key = this.nativeToScVal(k, scMap.keyType());\n const mapval = this.nativeToScVal(v, scMap.valueType());\n entries.push(new xdr.ScMapEntry({ key, val: mapval }));\n res = values.next();\n }\n return xdr.ScVal.scvMap(entries);\n }\n\n if ((val.constructor?.name ?? \"\") !== \"Object\") {\n throw new TypeError(\n `cannot interpret ${\n val.constructor?.name\n } value as ScVal (${JSON.stringify(val)})`,\n );\n }\n\n throw new TypeError(\n `Received object ${val} did not match the provided type ${ty}`,\n );\n }\n\n case \"number\":\n case \"bigint\": {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeU32().value:\n if (\n BigInt(val) < BigInt(xdr.Uint32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Uint32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for U32`);\n }\n return xdr.ScVal.scvU32(Number(val));\n case xdr.ScSpecType.scSpecTypeI32().value:\n if (\n // TODO: remove the `-` cast on the min value once js-xdr fixes the issue where it treats the min value as unsigned\n BigInt(val) < -BigInt(xdr.Int32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Int32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for I32`);\n }\n return xdr.ScVal.scvI32(Number(val));\n case xdr.ScSpecType.scSpecTypeU64().value:\n case xdr.ScSpecType.scSpecTypeI64().value:\n case xdr.ScSpecType.scSpecTypeU128().value:\n case xdr.ScSpecType.scSpecTypeI128().value:\n case xdr.ScSpecType.scSpecTypeU256().value:\n case xdr.ScSpecType.scSpecTypeI256().value:\n case xdr.ScSpecType.scSpecTypeTimepoint().value:\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n const intType = t.name.substring(10).toLowerCase() as ScIntType;\n return new XdrLargeInt(intType, val as bigint).toScVal();\n }\n default:\n throw new TypeError(`invalid type (${ty}) specified for integer`);\n }\n }\n case \"string\":\n return stringToScVal(val, t);\n\n case \"boolean\": {\n if (value !== xdr.ScSpecType.scSpecTypeBool().value) {\n throw TypeError(`Type ${ty} was not bool, but value was bool`);\n }\n return xdr.ScVal.scvBool(val);\n }\n case \"undefined\": {\n if (!ty) {\n return xdr.ScVal.scvVoid();\n }\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n case xdr.ScSpecType.scSpecTypeOption().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was undefined`,\n );\n }\n }\n\n case \"function\": // FIXME: Is this too helpful?\n return this.nativeToScVal(val(), ty);\n\n default:\n throw new TypeError(`failed to convert typeof ${typeof val} (${val})`);\n }\n }\n\n private nativeToUdt(val: any, name: string): xdr.ScVal {\n const entry = this.findEntry(name);\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n if (typeof val !== \"number\") {\n throw new TypeError(\n `expected number for enum ${name}, but got ${typeof val}`,\n );\n }\n return this.nativeToEnum(val as number, entry.udtEnumV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.nativeToStruct(val, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.nativeToUnion(val, entry.udtUnionV0());\n default:\n throw new Error(`failed to parse udt ${name}`);\n }\n }\n\n private nativeToUnion(\n val: Union<any>,\n union_: xdr.ScSpecUdtUnionV0,\n ): xdr.ScVal {\n const entryName = val.tag;\n const caseFound = union_.cases().find((entry) => {\n const caseN = entry.value().name().toString();\n return caseN === entryName;\n });\n if (!caseFound) {\n throw new TypeError(`no such enum entry: ${entryName} in ${union_}`);\n }\n const key = xdr.ScVal.scvSymbol(entryName);\n switch (caseFound.switch()) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0(): {\n return xdr.ScVal.scvVec([key]);\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0(): {\n const types = caseFound.tupleCase().type();\n if (Array.isArray(val.values)) {\n if (val.values.length !== types.length) {\n throw new TypeError(\n `union ${union_} expects ${types.length} values, but got ${val.values.length}`,\n );\n }\n const scvals = val.values.map((v, i) =>\n this.nativeToScVal(v, types[i]),\n );\n scvals.unshift(key);\n return xdr.ScVal.scvVec(scvals);\n }\n throw new Error(`failed to parse union case ${caseFound} with ${val}`);\n }\n default:\n throw new Error(`failed to parse union ${union_} with ${val}`);\n }\n }\n\n private nativeToStruct(val: any, struct: xdr.ScSpecUdtStructV0): xdr.ScVal {\n const fields = struct.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n return xdr.ScVal.scvVec(\n fields.map((_, i) => this.nativeToScVal(val[i], fields[i].type())),\n );\n }\n return xdr.ScVal.scvMap(\n fields.map((field) => {\n const name = field.name().toString();\n return new xdr.ScMapEntry({\n key: this.nativeToScVal(name, xdr.ScSpecTypeDef.scSpecTypeSymbol()),\n val: this.nativeToScVal(val[name], field.type()),\n });\n }),\n );\n }\n\n private nativeToEnum(val: number, enum_: xdr.ScSpecUdtEnumV0): xdr.ScVal {\n if (enum_.cases().some((entry) => entry.value() === val)) {\n return xdr.ScVal.scvU32(val);\n }\n throw new TypeError(`no such enum entry: ${val} in ${enum_}`);\n }\n\n /**\n * Converts an base64 encoded ScVal back to a native JS value based on the given type.\n *\n * @param scv - the base64 encoded ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValStrToNative<T>(scv: string, typeDef: xdr.ScSpecTypeDef): T {\n return this.scValToNative<T>(xdr.ScVal.fromXDR(scv, \"base64\"), typeDef);\n }\n\n /**\n * Converts an ScVal back to a native JS value based on the given type.\n *\n * @param scv - the ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValToNative<T>(scv: xdr.ScVal, typeDef: xdr.ScSpecTypeDef): T {\n const t = typeDef.switch();\n const value = t.value;\n\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n default:\n return this.scValToNative(scv, typeDef.option().valueType());\n }\n }\n\n if (value === xdr.ScSpecType.scSpecTypeUdt().value) {\n return this.scValUdtToNative(scv, typeDef.udt());\n }\n\n // we use the verbose xdr.ScValType.<type>.value form here because it's faster\n // than string comparisons and the underlying constants never need to be\n // updated\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n\n // these can be converted to bigints directly\n case xdr.ScValType.scvU64().value:\n case xdr.ScValType.scvI64().value:\n case xdr.ScValType.scvTimepoint().value:\n case xdr.ScValType.scvDuration().value:\n // these can be parsed by internal abstractions note that this can also\n // handle the above two cases, but it's not as efficient (another\n // type-check, parsing, etc.)\n case xdr.ScValType.scvU128().value:\n case xdr.ScValType.scvI128().value:\n case xdr.ScValType.scvU256().value:\n case xdr.ScValType.scvI256().value:\n return scValToBigInt(scv) as T;\n\n case xdr.ScValType.scvVec().value: {\n if (value === xdr.ScSpecType.scSpecTypeVec().value) {\n const vec = typeDef.vec();\n return (scv.vec() ?? []).map((elm) =>\n this.scValToNative(elm, vec.elementType()),\n ) as T;\n }\n if (value === xdr.ScSpecType.scSpecTypeTuple().value) {\n const tuple = typeDef.tuple();\n const valTypes = tuple.valueTypes();\n return (scv.vec() ?? []).map((elm, i) =>\n this.scValToNative(elm, valTypes[i]),\n ) as T;\n }\n throw new TypeError(`Type ${typeDef} was not vec, but ${scv} is`);\n }\n\n case xdr.ScValType.scvAddress().value:\n return Address.fromScVal(scv).toString() as T;\n\n case xdr.ScValType.scvMap().value: {\n const map = scv.map() ?? [];\n if (value === xdr.ScSpecType.scSpecTypeMap().value) {\n const typed = typeDef.map();\n const keyType = typed.keyType();\n const valueType = typed.valueType();\n const res = map.map((entry) => [\n this.scValToNative(entry.key(), keyType),\n this.scValToNative(entry.val(), valueType),\n ]) as T;\n return res;\n }\n throw new TypeError(\n `ScSpecType ${t.name} was not map, but ${JSON.stringify(\n scv,\n null,\n 2,\n )} is`,\n );\n }\n\n // these return the primitive type directly\n case xdr.ScValType.scvBool().value:\n case xdr.ScValType.scvU32().value:\n case xdr.ScValType.scvI32().value:\n case xdr.ScValType.scvBytes().value:\n return scv.value() as T;\n\n case xdr.ScValType.scvString().value:\n case xdr.ScValType.scvSymbol().value: {\n if (\n value !== xdr.ScSpecType.scSpecTypeString().value &&\n value !== xdr.ScSpecType.scSpecTypeSymbol().value\n ) {\n throw new Error(\n `ScSpecType ${\n t.name\n } was not string or symbol, but ${JSON.stringify(scv, null, 2)} is`,\n );\n }\n return scv.value()?.toString() as T;\n }\n\n // in the fallthrough case, just return the underlying value directly\n default:\n throw new TypeError(\n `failed to convert ${JSON.stringify(\n scv,\n null,\n 2,\n )} to native type from type ${t.name}`,\n );\n }\n }\n\n private scValUdtToNative(scv: xdr.ScVal, udt: xdr.ScSpecTypeUdt): any {\n const entry = this.findEntry(udt.name().toString());\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n return this.enumToNative(scv);\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.structToNative(scv, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.unionToNative(scv, entry.udtUnionV0());\n default:\n throw new Error(\n `failed to parse udt ${udt.name().toString()}: ${entry}`,\n );\n }\n }\n\n private unionToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtUnionV0): any {\n const vec = val.vec();\n if (!vec) {\n throw new Error(`${JSON.stringify(val, null, 2)} is not a vec`);\n }\n if (vec.length === 0 && udt.cases.length !== 0) {\n throw new Error(\n `${val} has length 0, but the there are at least one case in the union`,\n );\n }\n const name = vec[0].sym().toString();\n if (vec[0].switch().value !== xdr.ScValType.scvSymbol().value) {\n throw new Error(`${vec[0]} is not a symbol`);\n }\n const entry = udt.cases().find(findCase(name));\n if (!entry) {\n throw new Error(\n `failed to find entry ${name} in union ${udt.name().toString()}`,\n );\n }\n const res: Union<any> = { tag: name };\n if (\n entry.switch().value ===\n xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value\n ) {\n const tuple = entry.tupleCase();\n const ty = tuple.type();\n const values = ty.map((e, i) => this.scValToNative(vec![i + 1], e));\n res.values = values;\n }\n return res;\n }\n\n private structToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtStructV0): any {\n const res: any = {};\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n const r = val\n .vec()\n ?.map((entry, i) => this.scValToNative(entry, fields[i].type()));\n return r;\n }\n val.map()?.forEach((entry, i) => {\n const field = fields[i];\n res[field.name().toString()] = this.scValToNative(\n entry.val(),\n field.type(),\n );\n });\n return res;\n }\n\n private enumToNative(scv: xdr.ScVal): number {\n if (scv.switch().value !== xdr.ScValType.scvU32().value) {\n throw new Error(`Enum must have a u32 value`);\n }\n const num = scv.u32();\n return num;\n }\n\n /**\n * Gets the XDR error cases from the spec.\n *\n * @returns all contract functions\n *\n */\n errorCases(): xdr.ScSpecUdtErrorEnumCaseV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value,\n )\n .flatMap((entry) => (entry.value() as xdr.ScSpecUdtErrorEnumV0).cases());\n }\n\n /**\n * Converts the contract spec to a JSON schema.\n *\n * If `funcName` is provided, the schema will be a reference to the function schema.\n *\n * @param funcName - (optional) the name of the function to convert\n * @returns the converted JSON schema\n *\n * @throws if the contract spec is invalid\n */\n jsonSchema(funcName?: string): JSONSchema7 {\n const definitions: { [key: string]: JSONSchema7Definition } = {};\n\n this.entries.forEach((entry) => {\n switch (entry.switch().value) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value: {\n const udt = entry.udtEnumV0();\n definitions[udt.name().toString()] = enumToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value: {\n const udt = entry.udtStructV0();\n definitions[udt.name().toString()] = structToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value: {\n const udt = entry.udtUnionV0();\n definitions[udt.name().toString()] = unionToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value: {\n const fn = entry.functionV0();\n const fnName = fn.name().toString();\n const { input } = functionToJsonSchema(fn);\n // @ts-ignore\n definitions[fnName] = input;\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value: {\n // console.debug(\"Error enums not supported yet\");\n }\n }\n });\n\n const res: JSONSchema7 = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: { ...PRIMITIVE_DEFINITONS, ...definitions },\n };\n if (funcName) {\n res.$ref = `#/definitions/${funcName}`;\n }\n return res;\n }\n}\n"],"names":["xdr","types"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec.js","sources":["../../../src/contract/spec.ts"],"sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport {\n type ScIntType,\n XdrLargeInt,\n xdr,\n Address,\n Contract,\n scValToBigInt,\n} from \"../base/index.js\";\nimport { Ok, Err } from \"./rust_result.js\";\nimport { processSpecEntryStream } from \"./utils.js\";\nimport { specFromWasm } from \"./wasm_spec_parser.js\";\n\nexport interface Union<T> {\n tag: string;\n values?: T;\n}\n\nfunction enumToJsonSchema(udt: xdr.ScSpecUdtEnumV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n const title = aCase.name().toString();\n const desc = aCase.doc().toString();\n oneOf.push({\n description: desc,\n title,\n enum: [aCase.value()],\n type: \"number\",\n });\n });\n const res: any = { oneOf };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\nfunction isNumeric(field: xdr.ScSpecUdtStructFieldV0) {\n return /^\\d+$/.test(field.name().toString());\n}\n\nfunction readObj(args: object, input: xdr.ScSpecFunctionInputV0): any {\n const inputName = input.name().toString();\n const entry = Object.entries(args).find(([name]) => name === inputName);\n if (!entry) {\n throw new Error(`Missing field ${inputName}`);\n }\n return entry[1];\n}\n\nfunction findCase(name: string) {\n return function matches(entry: xdr.ScSpecUdtUnionCaseV0) {\n switch (entry.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const tuple = entry.tupleCase();\n return tuple.name().toString() === name;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const voidCase = entry.voidCase();\n return voidCase.name().toString() === name;\n }\n default:\n return false;\n }\n };\n}\n\nfunction stringToScVal(str: string, ty: xdr.ScSpecType): xdr.ScVal {\n switch (ty.value) {\n case xdr.ScSpecType.scSpecTypeString().value:\n return xdr.ScVal.scvString(str);\n case xdr.ScSpecType.scSpecTypeSymbol().value:\n return xdr.ScVal.scvSymbol(str);\n case xdr.ScSpecType.scSpecTypeAddress().value:\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value:\n return Address.fromString(str).toScVal();\n case xdr.ScSpecType.scSpecTypeU64().value:\n return new XdrLargeInt(\"u64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI64().value:\n return new XdrLargeInt(\"i64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU128().value:\n return new XdrLargeInt(\"u128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI128().value:\n return new XdrLargeInt(\"i128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU256().value:\n return new XdrLargeInt(\"u256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI256().value:\n return new XdrLargeInt(\"i256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeBytes().value:\n case xdr.ScSpecType.scSpecTypeBytesN().value:\n return xdr.ScVal.scvBytes(Buffer.from(str, \"base64\"));\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n return xdr.ScVal.scvTimepoint(new xdr.Uint64(str));\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n return xdr.ScVal.scvDuration(new xdr.Uint64(str));\n }\n default:\n throw new TypeError(`invalid type ${ty.name} specified for string value`);\n }\n}\n\nconst PRIMITIVE_DEFINITONS: { [key: string]: JSONSchema7Definition } = {\n U32: {\n type: \"integer\",\n minimum: 0,\n maximum: 4294967295,\n },\n I32: {\n type: \"integer\",\n minimum: -2147483648,\n maximum: 2147483647,\n },\n U64: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Timepoint: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Duration: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n I64: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 21, // Includes additional digit for the potential '-'\n },\n U128: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 39, // 128-bit max value has 39 digits\n },\n I128: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 40, // Includes additional digit for the potential '-'\n },\n U256: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 78, // 256-bit max value has 78 digits\n },\n I256: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 79, // Includes additional digit for the potential '-'\n },\n Address: {\n type: \"string\",\n format: \"address\",\n description: \"Address can be a public key or contract id\",\n },\n MuxedAddress: {\n type: \"string\",\n format: \"address\",\n description:\n \"Stellar public key with M prefix combining a G address and unique ID\",\n },\n ScString: {\n type: \"string\",\n description: \"ScString is a string\",\n },\n ScSymbol: {\n type: \"string\",\n description: \"ScSymbol is a string\",\n },\n DataUrl: {\n type: \"string\",\n pattern:\n \"^(?:[A-Za-z0-9+\\\\/]{4})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$\",\n },\n};\n\n/**\n * Converts an XDR type definition to a JSON schema reference.\n * @param typeDef - type to convert to json schema reference\n * @returns a schema describing the type\n * @hidden\n */\nfunction typeRef(typeDef: xdr.ScSpecTypeDef): JSONSchema7 {\n const t = typeDef.switch();\n const value = t.value;\n let ref;\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVal().value: {\n ref = \"Val\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBool().value: {\n return { type: \"boolean\" };\n }\n case xdr.ScSpecType.scSpecTypeVoid().value: {\n return { type: \"null\" };\n }\n case xdr.ScSpecType.scSpecTypeError().value: {\n ref = \"Error\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU32().value: {\n ref = \"U32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI32().value: {\n ref = \"I32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU64().value: {\n ref = \"U64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI64().value: {\n ref = \"I64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n ref = \"Timepoint\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n ref = \"Duration\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU128().value: {\n ref = \"U128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI128().value: {\n ref = \"I128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU256().value: {\n ref = \"U256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI256().value: {\n ref = \"I256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBytes().value: {\n ref = \"DataUrl\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeString().value: {\n ref = \"ScString\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeSymbol().value: {\n ref = \"ScSymbol\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeAddress().value: {\n ref = \"Address\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value: {\n ref = \"MuxedAddress\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeOption().value: {\n const opt = typeDef.option();\n return typeRef(opt.valueType());\n }\n case xdr.ScSpecType.scSpecTypeResult().value: {\n const result = typeDef.result();\n return typeRef(result.okType());\n }\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const arr = typeDef.vec();\n const reference = typeRef(arr.elementType());\n return {\n type: \"array\",\n items: reference,\n };\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = typeDef.map();\n const items = [typeRef(map.keyType()), typeRef(map.valueType())];\n return {\n type: \"array\",\n items: {\n type: \"array\",\n items,\n minItems: 2,\n maxItems: 2,\n },\n };\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tuple = typeDef.tuple();\n const minItems = tuple.valueTypes().length;\n const maxItems = minItems;\n const items = tuple.valueTypes().map(typeRef);\n return { type: \"array\", items, minItems, maxItems };\n }\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const arr = typeDef.bytesN();\n return {\n $ref: \"#/definitions/DataUrl\",\n maxLength: arr.n(),\n };\n }\n case xdr.ScSpecType.scSpecTypeUdt().value: {\n const udt = typeDef.udt();\n ref = udt.name().toString();\n break;\n }\n }\n return { $ref: `#/definitions/${ref}` };\n}\n\ntype Func = { input: JSONSchema7; output: JSONSchema7 };\n\nfunction isRequired(typeDef: xdr.ScSpecTypeDef): boolean {\n return typeDef.switch().value !== xdr.ScSpecType.scSpecTypeOption().value;\n}\n\nfunction argsAndRequired(\n input: { type: () => xdr.ScSpecTypeDef; name: () => string | Buffer }[],\n): { properties: object; required?: string[] } {\n const properties: any = {};\n const required: string[] = [];\n input.forEach((arg) => {\n const aType = arg.type();\n const name = arg.name().toString();\n properties[name] = typeRef(aType);\n if (isRequired(aType)) {\n required.push(name);\n }\n });\n const res: { properties: object; required?: string[] } = { properties };\n if (required.length > 0) {\n res.required = required;\n }\n return res;\n}\n\nfunction structToJsonSchema(udt: xdr.ScSpecUdtStructV0): object {\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n const items = fields.map((_, i) => typeRef(fields[i].type()));\n return {\n type: \"array\",\n items,\n minItems: fields.length,\n maxItems: fields.length,\n };\n }\n const description = udt.doc().toString();\n const { properties, required }: any = argsAndRequired(fields);\n return {\n description,\n properties,\n required,\n additionalProperties: false,\n type: \"object\",\n };\n}\n\nfunction functionToJsonSchema(func: xdr.ScSpecFunctionV0): Func {\n const { properties, required }: any = argsAndRequired(func.inputs());\n const args: any = {\n additionalProperties: false,\n properties,\n type: \"object\",\n };\n if (required?.length > 0) {\n args.required = required;\n }\n const input: Partial<JSONSchema7> = {\n properties: {\n args,\n },\n };\n const outputs = func.outputs();\n const output: Partial<JSONSchema7> =\n outputs.length > 0\n ? typeRef(outputs[0])\n : typeRef(xdr.ScSpecTypeDef.scSpecTypeVoid());\n const description = func.doc().toString();\n if (description.length > 0) {\n input.description = description;\n }\n input.additionalProperties = false;\n output.additionalProperties = false;\n return {\n input,\n output,\n };\n}\n\nfunction unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n switch (aCase.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const c = aCase.voidCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n },\n additionalProperties: false,\n required: [\"tag\"],\n });\n break;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const c = aCase.tupleCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n values: {\n type: \"array\",\n items: c.type().map(typeRef),\n },\n },\n required: [\"tag\", \"values\"],\n additionalProperties: false,\n });\n }\n }\n });\n\n const res: any = {\n oneOf,\n };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\n/**\n * Provides a ContractSpec class which can contains the XDR types defined by the contract.\n * This allows the class to be used to convert between native and raw `xdr.ScVal`s.\n *\n * Constructs a new ContractSpec from an array of XDR spec entries.\n *\n * @param entries - the XDR spec entries\n * @throws if entries is invalid\n *\n * @example\n * ```ts\n * const specEntries = [...]; // XDR spec entries of a smart contract\n * const contractSpec = new ContractSpec(specEntries);\n *\n * // Convert native value to ScVal\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n *\n * // Call contract\n * const resultScv = await callContract(contractId, 'funcName', scArgs);\n *\n * // Convert result ScVal back to native value\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n *\n * console.log(result); // {success: true}\n * ```\n */\nexport class Spec {\n /**\n * The XDR spec entries.\n */\n public entries: xdr.ScSpecEntry[] = [];\n\n /**\n * Generates a Spec instance from the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns A Promise that resolves to a Spec instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static fromWasm(wasm: Buffer): Spec {\n const spec = specFromWasm(wasm);\n return new Spec(spec);\n }\n\n /**\n * Generates a Spec instance from contract specs in any of the following forms:\n * - An XDR encoded stream of xdr.ScSpecEntry entries, the format of the spec\n * stored inside Wasm files.\n * - A base64 XDR encoded stream of xdr.ScSpecEntry entries.\n * - An array of xdr.ScSpecEntry.\n * - An array of base64 XDR encoded xdr.ScSpecEntry.\n *\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n constructor(entries: Buffer | string | xdr.ScSpecEntry[] | string[]) {\n if (Buffer.isBuffer(entries)) {\n this.entries = processSpecEntryStream(entries as Buffer);\n } else if (typeof entries === \"string\") {\n this.entries = processSpecEntryStream(Buffer.from(entries, \"base64\"));\n } else {\n if (entries.length === 0) {\n throw new Error(\"Contract spec must have at least one entry\");\n }\n const entry = entries[0];\n if (typeof entry === \"string\") {\n this.entries = (entries as string[]).map((s) =>\n xdr.ScSpecEntry.fromXDR(s, \"base64\"),\n );\n } else {\n this.entries = entries as xdr.ScSpecEntry[];\n }\n }\n }\n\n /**\n * Gets the XDR functions from the spec.\n * @returns all contract functions\n */\n funcs(): xdr.ScSpecFunctionV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value,\n )\n .map((entry) => entry.functionV0());\n }\n\n /**\n * Gets the XDR function spec for the given function name.\n *\n * @param name - the name of the function\n * @returns the function spec\n *\n * @throws if no function with the given name exists\n */\n getFunc(name: string): xdr.ScSpecFunctionV0 {\n const entry = this.findEntry(name);\n if (\n entry.switch().value !== xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value\n ) {\n throw new Error(`${name} is not a function`);\n }\n return entry.functionV0();\n }\n\n /**\n * Converts native JS arguments to ScVals for calling a contract function.\n *\n * @param name - the name of the function\n * @param args - the arguments object\n * @returns the converted arguments\n *\n * @throws if argument is missing or incorrect type\n *\n * @example\n * ```ts\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n * ```\n */\n funcArgsToScVals(name: string, args: object): xdr.ScVal[] {\n const fn = this.getFunc(name);\n return fn\n .inputs()\n .map((input) => this.nativeToScVal(readObj(args, input), input.type()));\n }\n\n /**\n * Converts the result ScVal of a function call to a native JS value.\n *\n * @param name - the name of the function\n * @param val_or_base64 - the result ScVal or base64 encoded string\n * @returns the converted native value\n *\n * @throws if return type mismatch or invalid input\n *\n * @example\n * ```ts\n * const resultScv = 'AAA=='; // Base64 encoded ScVal\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n * ```\n */\n funcResToNative(name: string, val_or_base64: xdr.ScVal | string): any {\n const val =\n typeof val_or_base64 === \"string\"\n ? xdr.ScVal.fromXDR(val_or_base64, \"base64\")\n : val_or_base64;\n const func = this.getFunc(name);\n const outputs = func.outputs();\n if (outputs.length === 0) {\n const type = val.switch();\n if (type.value !== xdr.ScValType.scvVoid().value) {\n throw new Error(`Expected void, got ${type.name}`);\n }\n return null;\n }\n if (outputs.length > 1) {\n throw new Error(`Multiple outputs not supported`);\n }\n const output = outputs[0];\n if (output.switch().value === xdr.ScSpecType.scSpecTypeResult().value) {\n if (val.switch().value === xdr.ScValType.scvError().value) {\n return new Err({ message: val.error().toXDR(\"base64\") });\n }\n return new Ok(this.scValToNative(val, output.result().okType()));\n }\n return this.scValToNative(val, output);\n }\n\n /**\n * Finds the XDR spec entry for the given name.\n *\n * @param name - the name to find\n * @returns the entry\n *\n * @throws if no entry with the given name exists\n */\n findEntry(name: string): xdr.ScSpecEntry {\n const entry = this.entries.find(\n (e) => e.value().name().toString() === name,\n );\n if (!entry) {\n throw new Error(`no such entry: ${name}`);\n }\n return entry;\n }\n\n /**\n * Converts a native JS value to an ScVal based on the given type.\n *\n * @param val - the native JS value\n * @param ty - (optional) the expected type\n * @returns the converted ScVal\n *\n * @throws if value cannot be converted to the given type\n */\n nativeToScVal(val: any, ty: xdr.ScSpecTypeDef): xdr.ScVal {\n const t: xdr.ScSpecType = ty.switch();\n const value = t.value;\n if (t.value === xdr.ScSpecType.scSpecTypeUdt().value) {\n const udt = ty.udt();\n return this.nativeToUdt(val, udt.name().toString());\n }\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n const opt = ty.option();\n if (val === null || val === undefined) {\n return xdr.ScVal.scvVoid();\n }\n return this.nativeToScVal(val, opt.valueType());\n }\n switch (typeof val) {\n case \"object\": {\n if (val === null) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was null`,\n );\n }\n }\n\n if (val instanceof xdr.ScVal) {\n return val; // should we copy?\n }\n\n if (val instanceof Address) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.toScVal();\n }\n\n if (val instanceof Contract) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.address().toScVal();\n }\n\n if (val instanceof Uint8Array || Buffer.isBuffer(val)) {\n const copy = Uint8Array.from(val);\n switch (value) {\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const bytesN = ty.bytesN();\n if (copy.length !== bytesN.n()) {\n throw new TypeError(\n `expected ${bytesN.n()} bytes, but got ${copy.length}`,\n );\n }\n //@ts-expect-error scvBytes' generated type expects Buffer; copy is a Uint8Array accepted at runtime\n return xdr.ScVal.scvBytes(copy);\n }\n case xdr.ScSpecType.scSpecTypeBytes().value:\n //@ts-expect-error scvBytes' generated type expects Buffer; copy is a Uint8Array accepted at runtime\n return xdr.ScVal.scvBytes(copy);\n default:\n throw new TypeError(\n `invalid type (${ty}) specified for Bytes and BytesN`,\n );\n }\n }\n if (Array.isArray(val)) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const vec = ty.vec();\n const elementType = vec.elementType();\n return xdr.ScVal.scvVec(\n val.map((v) => this.nativeToScVal(v, elementType)),\n );\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tup = ty.tuple();\n const valTypes = tup.valueTypes();\n if (val.length !== valTypes.length) {\n throw new TypeError(\n `Tuple expects ${valTypes.length} values, but ${val.length} were provided`,\n );\n }\n return xdr.ScVal.scvVec(\n val.map((v, i) => this.nativeToScVal(v, valTypes[i])),\n );\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = ty.map();\n const keyType = map.keyType();\n const valueType = map.valueType();\n return xdr.ScVal.scvMap(\n val.map((entry) => {\n const key = this.nativeToScVal(entry[0], keyType);\n const mapVal = this.nativeToScVal(entry[1], valueType);\n return new xdr.ScMapEntry({ key, val: mapVal });\n }),\n );\n }\n\n default:\n throw new TypeError(\n `Type ${ty} was not vec, but value was Array`,\n );\n }\n }\n if (val.constructor === Map) {\n if (value !== xdr.ScSpecType.scSpecTypeMap().value) {\n throw new TypeError(`Type ${ty} was not map, but value was Map`);\n }\n const scMap = ty.map();\n const map = val as Map<any, any>;\n const entries: xdr.ScMapEntry[] = [];\n const values = map.entries();\n let res = values.next();\n while (!res.done) {\n const [k, v] = res.value;\n const key = this.nativeToScVal(k, scMap.keyType());\n const mapval = this.nativeToScVal(v, scMap.valueType());\n entries.push(new xdr.ScMapEntry({ key, val: mapval }));\n res = values.next();\n }\n return xdr.ScVal.scvMap(entries);\n }\n\n if ((val.constructor?.name ?? \"\") !== \"Object\") {\n throw new TypeError(\n `cannot interpret ${\n val.constructor?.name\n } value as ScVal (${JSON.stringify(val)})`,\n );\n }\n\n throw new TypeError(\n `Received object ${val} did not match the provided type ${ty}`,\n );\n }\n\n case \"number\":\n case \"bigint\": {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeU32().value:\n if (\n BigInt(val) < BigInt(xdr.Uint32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Uint32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for U32`);\n }\n return xdr.ScVal.scvU32(Number(val));\n case xdr.ScSpecType.scSpecTypeI32().value:\n if (\n // TODO: remove the `-` cast on the min value once js-xdr fixes the issue where it treats the min value as unsigned\n BigInt(val) < -BigInt(xdr.Int32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Int32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for I32`);\n }\n return xdr.ScVal.scvI32(Number(val));\n case xdr.ScSpecType.scSpecTypeU64().value:\n case xdr.ScSpecType.scSpecTypeI64().value:\n case xdr.ScSpecType.scSpecTypeU128().value:\n case xdr.ScSpecType.scSpecTypeI128().value:\n case xdr.ScSpecType.scSpecTypeU256().value:\n case xdr.ScSpecType.scSpecTypeI256().value:\n case xdr.ScSpecType.scSpecTypeTimepoint().value:\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n const intType = t.name.substring(10).toLowerCase() as ScIntType;\n return new XdrLargeInt(intType, val as bigint).toScVal();\n }\n default:\n throw new TypeError(`invalid type (${ty}) specified for integer`);\n }\n }\n case \"string\":\n return stringToScVal(val, t);\n\n case \"boolean\": {\n if (value !== xdr.ScSpecType.scSpecTypeBool().value) {\n throw TypeError(`Type ${ty} was not bool, but value was bool`);\n }\n return xdr.ScVal.scvBool(val);\n }\n case \"undefined\": {\n if (!ty) {\n return xdr.ScVal.scvVoid();\n }\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n case xdr.ScSpecType.scSpecTypeOption().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was undefined`,\n );\n }\n }\n\n case \"function\": // FIXME: Is this too helpful?\n return this.nativeToScVal(val(), ty);\n\n default:\n throw new TypeError(`failed to convert typeof ${typeof val} (${val})`);\n }\n }\n\n private nativeToUdt(val: any, name: string): xdr.ScVal {\n const entry = this.findEntry(name);\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n if (typeof val !== \"number\") {\n throw new TypeError(\n `expected number for enum ${name}, but got ${typeof val}`,\n );\n }\n return this.nativeToEnum(val as number, entry.udtEnumV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.nativeToStruct(val, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.nativeToUnion(val, entry.udtUnionV0());\n default:\n throw new Error(`failed to parse udt ${name}`);\n }\n }\n\n private nativeToUnion(\n val: Union<any>,\n union_: xdr.ScSpecUdtUnionV0,\n ): xdr.ScVal {\n const entryName = val.tag;\n const caseFound = union_.cases().find((entry) => {\n const caseN = entry.value().name().toString();\n return caseN === entryName;\n });\n if (!caseFound) {\n throw new TypeError(`no such enum entry: ${entryName} in ${union_}`);\n }\n const key = xdr.ScVal.scvSymbol(entryName);\n switch (caseFound.switch()) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0(): {\n return xdr.ScVal.scvVec([key]);\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0(): {\n const types = caseFound.tupleCase().type();\n if (Array.isArray(val.values)) {\n if (val.values.length !== types.length) {\n throw new TypeError(\n `union ${union_} expects ${types.length} values, but got ${val.values.length}`,\n );\n }\n const scvals = val.values.map((v, i) =>\n this.nativeToScVal(v, types[i]),\n );\n scvals.unshift(key);\n return xdr.ScVal.scvVec(scvals);\n }\n throw new Error(`failed to parse union case ${caseFound} with ${val}`);\n }\n default:\n throw new Error(`failed to parse union ${union_} with ${val}`);\n }\n }\n\n private nativeToStruct(val: any, struct: xdr.ScSpecUdtStructV0): xdr.ScVal {\n const fields = struct.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n return xdr.ScVal.scvVec(\n fields.map((_, i) => this.nativeToScVal(val[i], fields[i].type())),\n );\n }\n return xdr.ScVal.scvMap(\n fields.map((field) => {\n const name = field.name().toString();\n return new xdr.ScMapEntry({\n key: this.nativeToScVal(name, xdr.ScSpecTypeDef.scSpecTypeSymbol()),\n val: this.nativeToScVal(val[name], field.type()),\n });\n }),\n );\n }\n\n private nativeToEnum(val: number, enum_: xdr.ScSpecUdtEnumV0): xdr.ScVal {\n if (enum_.cases().some((entry) => entry.value() === val)) {\n return xdr.ScVal.scvU32(val);\n }\n throw new TypeError(`no such enum entry: ${val} in ${enum_}`);\n }\n\n /**\n * Converts an base64 encoded ScVal back to a native JS value based on the given type.\n *\n * @param scv - the base64 encoded ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValStrToNative<T>(scv: string, typeDef: xdr.ScSpecTypeDef): T {\n return this.scValToNative<T>(xdr.ScVal.fromXDR(scv, \"base64\"), typeDef);\n }\n\n /**\n * Converts an ScVal back to a native JS value based on the given type.\n *\n * @param scv - the ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValToNative<T>(scv: xdr.ScVal, typeDef: xdr.ScSpecTypeDef): T {\n const t = typeDef.switch();\n const value = t.value;\n\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n default:\n return this.scValToNative(scv, typeDef.option().valueType());\n }\n }\n\n if (value === xdr.ScSpecType.scSpecTypeUdt().value) {\n return this.scValUdtToNative(scv, typeDef.udt());\n }\n\n // we use the verbose xdr.ScValType.<type>.value form here because it's faster\n // than string comparisons and the underlying constants never need to be\n // updated\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n\n // these can be converted to bigints directly\n case xdr.ScValType.scvU64().value:\n case xdr.ScValType.scvI64().value:\n case xdr.ScValType.scvTimepoint().value:\n case xdr.ScValType.scvDuration().value:\n // these can be parsed by internal abstractions note that this can also\n // handle the above two cases, but it's not as efficient (another\n // type-check, parsing, etc.)\n case xdr.ScValType.scvU128().value:\n case xdr.ScValType.scvI128().value:\n case xdr.ScValType.scvU256().value:\n case xdr.ScValType.scvI256().value:\n return scValToBigInt(scv) as T;\n\n case xdr.ScValType.scvVec().value: {\n if (value === xdr.ScSpecType.scSpecTypeVec().value) {\n const vec = typeDef.vec();\n return (scv.vec() ?? []).map((elm) =>\n this.scValToNative(elm, vec.elementType()),\n ) as T;\n }\n if (value === xdr.ScSpecType.scSpecTypeTuple().value) {\n const tuple = typeDef.tuple();\n const valTypes = tuple.valueTypes();\n return (scv.vec() ?? []).map((elm, i) =>\n this.scValToNative(elm, valTypes[i]),\n ) as T;\n }\n throw new TypeError(`Type ${typeDef} was not vec, but ${scv} is`);\n }\n\n case xdr.ScValType.scvAddress().value:\n return Address.fromScVal(scv).toString() as T;\n\n case xdr.ScValType.scvMap().value: {\n const map = scv.map() ?? [];\n if (value === xdr.ScSpecType.scSpecTypeMap().value) {\n const typed = typeDef.map();\n const keyType = typed.keyType();\n const valueType = typed.valueType();\n const res = map.map((entry) => [\n this.scValToNative(entry.key(), keyType),\n this.scValToNative(entry.val(), valueType),\n ]) as T;\n return res;\n }\n throw new TypeError(\n `ScSpecType ${t.name} was not map, but ${JSON.stringify(\n scv,\n null,\n 2,\n )} is`,\n );\n }\n\n // these return the primitive type directly\n case xdr.ScValType.scvBool().value:\n case xdr.ScValType.scvU32().value:\n case xdr.ScValType.scvI32().value:\n case xdr.ScValType.scvBytes().value:\n return scv.value() as T;\n\n case xdr.ScValType.scvString().value:\n case xdr.ScValType.scvSymbol().value: {\n if (\n value !== xdr.ScSpecType.scSpecTypeString().value &&\n value !== xdr.ScSpecType.scSpecTypeSymbol().value\n ) {\n throw new Error(\n `ScSpecType ${\n t.name\n } was not string or symbol, but ${JSON.stringify(scv, null, 2)} is`,\n );\n }\n return scv.value()?.toString() as T;\n }\n\n // in the fallthrough case, just return the underlying value directly\n default:\n throw new TypeError(\n `failed to convert ${JSON.stringify(\n scv,\n null,\n 2,\n )} to native type from type ${t.name}`,\n );\n }\n }\n\n private scValUdtToNative(scv: xdr.ScVal, udt: xdr.ScSpecTypeUdt): any {\n const entry = this.findEntry(udt.name().toString());\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n return this.enumToNative(scv);\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.structToNative(scv, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.unionToNative(scv, entry.udtUnionV0());\n default:\n throw new Error(\n `failed to parse udt ${udt.name().toString()}: ${entry}`,\n );\n }\n }\n\n private unionToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtUnionV0): any {\n const vec = val.vec();\n if (!vec) {\n throw new Error(`${JSON.stringify(val, null, 2)} is not a vec`);\n }\n if (vec.length === 0 && udt.cases.length !== 0) {\n throw new Error(\n `${val} has length 0, but the there are at least one case in the union`,\n );\n }\n const name = vec[0].sym().toString();\n if (vec[0].switch().value !== xdr.ScValType.scvSymbol().value) {\n throw new Error(`${vec[0]} is not a symbol`);\n }\n const entry = udt.cases().find(findCase(name));\n if (!entry) {\n throw new Error(\n `failed to find entry ${name} in union ${udt.name().toString()}`,\n );\n }\n const res: Union<any> = { tag: name };\n if (\n entry.switch().value ===\n xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value\n ) {\n const tuple = entry.tupleCase();\n const ty = tuple.type();\n const values = ty.map((e, i) => this.scValToNative(vec![i + 1], e));\n res.values = values;\n }\n return res;\n }\n\n private structToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtStructV0): any {\n const res: any = {};\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n const r = val\n .vec()\n ?.map((entry, i) => this.scValToNative(entry, fields[i].type()));\n return r;\n }\n val.map()?.forEach((entry, i) => {\n const field = fields[i];\n res[field.name().toString()] = this.scValToNative(\n entry.val(),\n field.type(),\n );\n });\n return res;\n }\n\n private enumToNative(scv: xdr.ScVal): number {\n if (scv.switch().value !== xdr.ScValType.scvU32().value) {\n throw new Error(`Enum must have a u32 value`);\n }\n const num = scv.u32();\n return num;\n }\n\n /**\n * Gets the XDR error cases from the spec.\n *\n * @returns all contract functions\n *\n */\n errorCases(): xdr.ScSpecUdtErrorEnumCaseV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value,\n )\n .flatMap((entry) => (entry.value() as xdr.ScSpecUdtErrorEnumV0).cases());\n }\n\n /**\n * Converts the contract spec to a JSON schema.\n *\n * If `funcName` is provided, the schema will be a reference to the function schema.\n *\n * @param funcName - (optional) the name of the function to convert\n * @returns the converted JSON schema\n *\n * @throws if the contract spec is invalid\n */\n jsonSchema(funcName?: string): JSONSchema7 {\n const definitions: { [key: string]: JSONSchema7Definition } = {};\n\n this.entries.forEach((entry) => {\n switch (entry.switch().value) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value: {\n const udt = entry.udtEnumV0();\n definitions[udt.name().toString()] = enumToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value: {\n const udt = entry.udtStructV0();\n definitions[udt.name().toString()] = structToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value: {\n const udt = entry.udtUnionV0();\n definitions[udt.name().toString()] = unionToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value: {\n const fn = entry.functionV0();\n const fnName = fn.name().toString();\n const { input } = functionToJsonSchema(fn);\n definitions[fnName] = input;\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value: {\n // console.debug(\"Error enums not supported yet\");\n }\n }\n });\n\n const res: JSONSchema7 = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: { ...PRIMITIVE_DEFINITONS, ...definitions },\n };\n if (funcName) {\n res.$ref = `#/definitions/${funcName}`;\n }\n return res;\n }\n}\n"],"names":["xdr","types"],"mappings":"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"}
|
|
@@ -209,15 +209,6 @@ export type MethodOptions = {
|
|
|
209
209
|
* @defaultValue false
|
|
210
210
|
*/
|
|
211
211
|
restore?: boolean;
|
|
212
|
-
/**
|
|
213
|
-
* Request `SOROBAN_CREDENTIALS_ADDRESS_V2` (CAP-71) auth credentials from
|
|
214
|
-
* simulation instead of the legacy `SOROBAN_CREDENTIALS_ADDRESS`. V2
|
|
215
|
-
* credentials are only valid on networks that have activated CAP-71, so leave
|
|
216
|
-
* this off until the activation vote passes for your target network. The
|
|
217
|
-
* default flips to `true` once V2 becomes mandatory.
|
|
218
|
-
* @defaultValue false
|
|
219
|
-
*/
|
|
220
|
-
authV2?: boolean;
|
|
221
212
|
/**
|
|
222
213
|
* The public key of the source account for this transaction.
|
|
223
214
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/contract/types.ts"],"sourcesContent":["/* disable PascalCase naming convention, to avoid breaking change */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Transaction, xdr } from \"../base/index.js\";\nimport type { SentTransaction } from \"./sent_transaction.js\";\nimport type { Client } from \"./client.js\";\nimport { Server } from \"../rpc/index.js\";\n\nexport type XDR_BASE64 = string;\n/**\n * An unsigned 32-bit integer.\n */\nexport type u32 = number;\n/**\n * A signed 32-bit integer.\n */\nexport type i32 = number;\n/**\n * An unsigned 64-bit integer.\n */\nexport type u64 = bigint;\n/**\n * A signed 64-bit integer.\n */\nexport type i64 = bigint;\n/**\n * An unsigned 128-bit integer.\n */\nexport type u128 = bigint;\n/**\n * A signed 128-bit integer.\n */\nexport type i128 = bigint;\n/**\n * An unsigned 256-bit integer.\n */\nexport type u256 = bigint;\n/**\n * A signed 256-bit integer.\n */\nexport type i256 = bigint;\nexport type Option<T> = T | undefined;\n/**\n * @deprecated Use {@link Timepoint} instead.\n */\nexport type Typepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Timepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Duration = bigint;\n\n/**\n * A \"regular\" transaction, as opposed to a FeeBumpTransaction.\n */\nexport type Tx = Transaction;\n\nexport interface WalletError {\n message: string; // general description message returned to the client app\n code: number; // unique error code\n ext?: Array<string>; // optional extended details\n}\n\n/**\n * A function to request a wallet to sign a built transaction\n *\n * This function takes an XDR provided by the requester and applies a signature to it.\n * It returns a base64-encoded string XDR-encoded Transaction Envelope with Decorated Signatures\n * and the signer address back to the requester.\n *\n * @param xdr - The XDR string representing the transaction to be signed.\n * @param opts - Options for signing the transaction.\n * - `networkPassphrase`: The network's passphrase on which the transaction is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n * - `submit`: If set to true, submits the transaction immediately after signing.\n * - `submitUrl`: The URL of the network to which the transaction should be submitted, if applicable.\n *\n * @returns A promise resolving to an object with the signed transaction XDR and optional signer address and error.\n */\nexport type SignTransaction = (\n xdr: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n submit?: boolean;\n submitUrl?: string;\n },\n) => Promise<\n {\n signedTxXdr: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * A function to request a wallet to sign an authorization entry preimage.\n *\n * Similar to signing a transaction, this function takes an authorization entry preimage provided by the\n * requester and applies a signature to it.\n * It returns a signed hash of the same authorization entry and the signer address back to the requester.\n *\n * @param authEntry - The authorization entry preimage to be signed.\n * @param opts - Options for signing the authorization entry.\n * - `networkPassphrase`: The network's passphrase on which the authorization entry is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n *\n * @returns A promise resolving to an object with the signed authorization entry and optional signer address and error.\n */\nexport type SignAuthEntry = (\n authEntry: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<\n {\n signedAuthEntry: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * Options for a smart contract client.\n */\nexport type ClientOptions = {\n /**\n * The public key of the source account for this transaction. You can\n * override this for specific methods later; see {@link MethodOptions}.\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated. If you do not provide it during\n * initialization, you can provide it later, either when you initialize a\n * method (see {@link MethodOptions}) or when you call\n * {@link contract.AssembledTransaction.signAndSend | signAndSend}.\n *\n * Matches signature of `signTransaction` from Freighter.\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties. If you do not provide it during initialization, you can\n * provide it later either when you initialize a method (see {@link MethodOptions})\n * or when you call {@link contract.AssembledTransaction.signAuthEntries | signAuthEntries}.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n */\n signAuthEntry?: SignAuthEntry;\n /** The address of the contract the client will interact with. */\n contractId: string;\n /**\n * The network passphrase for the Stellar network this contract is deployed\n * to.\n */\n networkPassphrase: string;\n /**\n * The URL of the RPC instance that will be used to interact with this\n * contract.\n */\n rpcUrl: string;\n /**\n * If true, will allow HTTP requests to the RPC. If false, will\n * only allow HTTPS requests.\n * @defaultValue false\n */\n allowHttp?: boolean;\n /** Optional headers to include in requests to the RPC. */\n headers?: Record<string, string>;\n /**\n * This gets filled in automatically from the ContractSpec when you\n * instantiate a {@link Client}.\n *\n * Background: If the contract you're calling uses the `#[contracterror]`\n * macro to create an `Error` enum, then those errors get included in the\n * on-chain XDR that also describes your contract's methods. Each error will\n * have a specific number.\n *\n * A Client makes method calls with an {@link contract.AssembledTransaction | AssembledTransaction}.\n * When one of these method calls encounters an error, `AssembledTransaction`\n * will first attempt to parse the error as an \"official\" `contracterror`\n * error, by using this passed-in `errorTypes` object. See `parseError`\n * on {@link contract.AssembledTransaction}. If `errorTypes` is blank or no\n * matching error is found, then it will throw the raw error.\n * @defaultValue `{}`\n */\n errorTypes?: Record<number, { message: string }>;\n /**\n * The Server instance to use for RPC calls. If not provided, one will be\n * created automatically from `rpcUrl` and `serverOptions`.\n */\n server?: Server;\n};\n\n/**\n * Options for a smart contract method invocation.\n */\nexport type MethodOptions = {\n /**\n * The fee to pay for the transaction.\n * @defaultValue 100\n */\n fee?: string;\n\n /**\n * The timebounds which should be set for transactions generated by this\n * contract client. {@link contract.DEFAULT_TIMEOUT}\n * @defaultValue 300\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the\n * AssembledTransaction.\n * @defaultValue true\n */\n simulate?: boolean;\n\n /**\n * If true, will automatically attempt to restore the transaction if there\n * are archived entries that need renewal.\n * @defaultValue false\n */\n restore?: boolean;\n\n /**\n * Request `SOROBAN_CREDENTIALS_ADDRESS_V2` (CAP-71) auth credentials from\n * simulation instead of the legacy `SOROBAN_CREDENTIALS_ADDRESS`. V2\n * credentials are only valid on networks that have activated CAP-71, so leave\n * this off until the activation vote passes for your target network. The\n * default flips to `true` once V2 becomes mandatory.\n * @defaultValue false\n */\n authV2?: boolean;\n\n /**\n * The public key of the source account for this transaction.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated.\n *\n * Matches signature of `signTransaction` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signAuthEntry?: SignAuthEntry;\n};\n\nexport type AssembledTransactionOptions<T = string> = MethodOptions &\n ClientOptions & {\n method: string;\n args?: any[];\n parseResultXdr: (xdr: xdr.ScVal) => T;\n\n /**\n * The address of the account that should sign the transaction. Useful when\n * a wallet holds multiple addresses to ensure signing with the intended one.\n */\n address?: string;\n\n /**\n * This option will be passed through to the SEP43-compatible wallet extension. If true, and if the wallet supports it, the transaction will be signed and immediately submitted to the network by the wallet, bypassing the submit logic in {@link SentTransaction}.\n * @defaultValue false\n */\n submit?: boolean;\n\n /**\n * The URL of the network to which the transaction should be submitted.\n * Only applicable when 'submit' is set to true.\n */\n submitUrl?: string;\n };\n\n/**\n * The default timebounds, in seconds, during which a transaction will be valid.\n * This is attached to the transaction _before_ transaction simulation (it is\n * needed for simulation to succeed). It is also re-calculated and re-added\n * _before_ transaction signing.\n * @defaultValue 300\n */\nexport const DEFAULT_TIMEOUT = 5 * 60;\n\n/**\n * An impossible account on the Stellar network\n * @defaultValue GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\n */\nexport const NULL_ACCOUNT =\n \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n"],"names":[],"mappings":"AA6SO,MAAM,kBAAkB,CAAA,GAAI;AAM5B,MAAM,YAAA,GACX;;;;"}
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/contract/types.ts"],"sourcesContent":["/* Type aliases below intentionally use non-PascalCase names (e.g. `XDR_BASE64`,\n `u32`) to preserve the public API — renaming them would be a breaking change. */\n\nimport { Transaction, xdr } from \"../base/index.js\";\nimport type { SentTransaction } from \"./sent_transaction.js\";\nimport type { Client } from \"./client.js\";\nimport { Server } from \"../rpc/index.js\";\n\nexport type XDR_BASE64 = string;\n/**\n * An unsigned 32-bit integer.\n */\nexport type u32 = number;\n/**\n * A signed 32-bit integer.\n */\nexport type i32 = number;\n/**\n * An unsigned 64-bit integer.\n */\nexport type u64 = bigint;\n/**\n * A signed 64-bit integer.\n */\nexport type i64 = bigint;\n/**\n * An unsigned 128-bit integer.\n */\nexport type u128 = bigint;\n/**\n * A signed 128-bit integer.\n */\nexport type i128 = bigint;\n/**\n * An unsigned 256-bit integer.\n */\nexport type u256 = bigint;\n/**\n * A signed 256-bit integer.\n */\nexport type i256 = bigint;\nexport type Option<T> = T | undefined;\n/**\n * @deprecated Use {@link Timepoint} instead.\n */\nexport type Typepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Timepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Duration = bigint;\n\n/**\n * A \"regular\" transaction, as opposed to a FeeBumpTransaction.\n */\nexport type Tx = Transaction;\n\nexport interface WalletError {\n message: string; // general description message returned to the client app\n code: number; // unique error code\n ext?: Array<string>; // optional extended details\n}\n\n/**\n * A function to request a wallet to sign a built transaction\n *\n * This function takes an XDR provided by the requester and applies a signature to it.\n * It returns a base64-encoded string XDR-encoded Transaction Envelope with Decorated Signatures\n * and the signer address back to the requester.\n *\n * @param xdr - The XDR string representing the transaction to be signed.\n * @param opts - Options for signing the transaction.\n * - `networkPassphrase`: The network's passphrase on which the transaction is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n * - `submit`: If set to true, submits the transaction immediately after signing.\n * - `submitUrl`: The URL of the network to which the transaction should be submitted, if applicable.\n *\n * @returns A promise resolving to an object with the signed transaction XDR and optional signer address and error.\n */\nexport type SignTransaction = (\n xdr: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n submit?: boolean;\n submitUrl?: string;\n },\n) => Promise<\n {\n signedTxXdr: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * A function to request a wallet to sign an authorization entry preimage.\n *\n * Similar to signing a transaction, this function takes an authorization entry preimage provided by the\n * requester and applies a signature to it.\n * It returns a signed hash of the same authorization entry and the signer address back to the requester.\n *\n * @param authEntry - The authorization entry preimage to be signed.\n * @param opts - Options for signing the authorization entry.\n * - `networkPassphrase`: The network's passphrase on which the authorization entry is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n *\n * @returns A promise resolving to an object with the signed authorization entry and optional signer address and error.\n */\nexport type SignAuthEntry = (\n authEntry: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<\n {\n signedAuthEntry: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * Options for a smart contract client.\n */\nexport type ClientOptions = {\n /**\n * The public key of the source account for this transaction. You can\n * override this for specific methods later; see {@link MethodOptions}.\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated. If you do not provide it during\n * initialization, you can provide it later, either when you initialize a\n * method (see {@link MethodOptions}) or when you call\n * {@link contract.AssembledTransaction.signAndSend | signAndSend}.\n *\n * Matches signature of `signTransaction` from Freighter.\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties. If you do not provide it during initialization, you can\n * provide it later either when you initialize a method (see {@link MethodOptions})\n * or when you call {@link contract.AssembledTransaction.signAuthEntries | signAuthEntries}.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n */\n signAuthEntry?: SignAuthEntry;\n /** The address of the contract the client will interact with. */\n contractId: string;\n /**\n * The network passphrase for the Stellar network this contract is deployed\n * to.\n */\n networkPassphrase: string;\n /**\n * The URL of the RPC instance that will be used to interact with this\n * contract.\n */\n rpcUrl: string;\n /**\n * If true, will allow HTTP requests to the RPC. If false, will\n * only allow HTTPS requests.\n * @defaultValue false\n */\n allowHttp?: boolean;\n /** Optional headers to include in requests to the RPC. */\n headers?: Record<string, string>;\n /**\n * This gets filled in automatically from the ContractSpec when you\n * instantiate a {@link Client}.\n *\n * Background: If the contract you're calling uses the `#[contracterror]`\n * macro to create an `Error` enum, then those errors get included in the\n * on-chain XDR that also describes your contract's methods. Each error will\n * have a specific number.\n *\n * A Client makes method calls with an {@link contract.AssembledTransaction | AssembledTransaction}.\n * When one of these method calls encounters an error, `AssembledTransaction`\n * will first attempt to parse the error as an \"official\" `contracterror`\n * error, by using this passed-in `errorTypes` object. See `parseError`\n * on {@link contract.AssembledTransaction}. If `errorTypes` is blank or no\n * matching error is found, then it will throw the raw error.\n * @defaultValue `{}`\n */\n errorTypes?: Record<number, { message: string }>;\n /**\n * The Server instance to use for RPC calls. If not provided, one will be\n * created automatically from `rpcUrl` and `serverOptions`.\n */\n server?: Server;\n};\n\n/**\n * Options for a smart contract method invocation.\n */\nexport type MethodOptions = {\n /**\n * The fee to pay for the transaction.\n * @defaultValue 100\n */\n fee?: string;\n\n /**\n * The timebounds which should be set for transactions generated by this\n * contract client. {@link contract.DEFAULT_TIMEOUT}\n * @defaultValue 300\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the\n * AssembledTransaction.\n * @defaultValue true\n */\n simulate?: boolean;\n\n /**\n * If true, will automatically attempt to restore the transaction if there\n * are archived entries that need renewal.\n * @defaultValue false\n */\n restore?: boolean;\n\n /**\n * The public key of the source account for this transaction.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated.\n *\n * Matches signature of `signTransaction` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signAuthEntry?: SignAuthEntry;\n};\n\nexport type AssembledTransactionOptions<T = string> = MethodOptions &\n ClientOptions & {\n method: string;\n args?: any[];\n parseResultXdr: (xdr: xdr.ScVal) => T;\n\n /**\n * The address of the account that should sign the transaction. Useful when\n * a wallet holds multiple addresses to ensure signing with the intended one.\n */\n address?: string;\n\n /**\n * This option will be passed through to the SEP43-compatible wallet extension. If true, and if the wallet supports it, the transaction will be signed and immediately submitted to the network by the wallet, bypassing the submit logic in {@link SentTransaction}.\n * @defaultValue false\n */\n submit?: boolean;\n\n /**\n * The URL of the network to which the transaction should be submitted.\n * Only applicable when 'submit' is set to true.\n */\n submitUrl?: string;\n };\n\n/**\n * The default timebounds, in seconds, during which a transaction will be valid.\n * This is attached to the transaction _before_ transaction simulation (it is\n * needed for simulation to succeed). It is also re-calculated and re-added\n * _before_ transaction signing.\n * @defaultValue 300\n */\nexport const DEFAULT_TIMEOUT = 5 * 60;\n\n/**\n * An impossible account on the Stellar network\n * @defaultValue GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\n */\nexport const NULL_ACCOUNT =\n \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n"],"names":[],"mappings":"AAoSO,MAAM,kBAAkB,CAAA,GAAI;AAM5B,MAAM,YAAA,GACX;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/contract/utils.ts"],"sourcesContent":["import { xdr, cereal, Account } from \"../base/index.js\";\nimport { Server } from \"../rpc/index.js\";\nimport { type AssembledTransaction } from \"./assembled_transaction.js\";\nimport { NULL_ACCOUNT, type AssembledTransactionOptions } from \"./types.js\";\n\n/**\n * Keep calling a `fn` for `timeoutInSeconds` seconds, if `keepWaitingIf` is\n * true. Returns an array of all attempts to call the function.\n * @hidden\n */\nexport async function withExponentialBackoff<T>(\n /** Function to call repeatedly */\n fn: (previousFailure?: T) => Promise<T>,\n /** Condition to check when deciding whether or not to call `fn` again */\n keepWaitingIf: (result: T) => boolean,\n /** How long to wait between the first and second call */\n timeoutInSeconds: number,\n /** What to multiply `timeoutInSeconds` by, each subsequent attempt */\n exponentialFactor = 1.5,\n /** Whether to log extra info */\n verbose = false,\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n attempts.push(await fn());\n if (!keepWaitingIf(attempts[attempts.length - 1])) return attempts;\n\n const waitUntil = new Date(Date.now() + timeoutInSeconds * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (\n Date.now() < waitUntil &&\n keepWaitingIf(attempts[attempts.length - 1])\n ) {\n count += 1;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n timeoutInSeconds * 1000\n }ms)`,\n );\n }\n // eslint-disable-next-line\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime *= exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n\n attempts.push(await fn(attempts[attempts.length - 1]));\n if (verbose && keepWaitingIf(attempts[attempts.length - 1])) {\n console.info(\n `${count}. Called ${fn}; ${\n attempts.length\n } prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2,\n )}`,\n );\n }\n }\n\n return attempts;\n}\n\n/**\n * If contracts are implemented using the `#[contracterror]` macro, then the\n * errors get included in the on-chain XDR that also describes your contract's\n * methods. Each error will have a specific number. This Regular Expression\n * matches these \"expected error types\" that a contract may throw, and helps\n * {@link AssembledTransaction} parse these errors.\n *\n * @defaultValue `/Error\\(Contract, #(\\d+)\\)/`\n */\nexport const contractErrorPattern = /Error\\(Contract, #(\\d+)\\)/;\n\n/**\n * A TypeScript type guard that checks if an object has a `toString` method.\n * @hidden\n */\nexport function implementsToString(\n /** some object that may or may not have a `toString` method */\n obj: unknown,\n): obj is { toString(): string } {\n return typeof obj === \"object\" && obj !== null && \"toString\" in obj;\n}\n\nexport function parseWasmCustomSections(\n buffer: Buffer,\n): Map<string, Uint8Array[]> {\n const sections = new Map<string, Uint8Array[]>();\n const arrayBuffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n );\n\n let offset = 0;\n\n // Helper to read bytes with bounds checking\n const read = (length: number): Uint8Array => {\n if (offset + length > buffer.byteLength) throw new Error(\"Buffer overflow\");\n const bytes = new Uint8Array(arrayBuffer, offset, length);\n offset += length;\n return bytes;\n };\n /**\n * Decodes a variable-length encoded unsigned 32-bit integer (LEB128 format) from the WASM binary.\n *\n * This function implements the WebAssembly LEB128 (Little Endian Base 128) variable-length\n * encoding scheme for unsigned integers. In this encoding:\n * - Each byte uses 7 bits for the actual value\n * - The most significant bit (MSB) indicates if more bytes follow (1) or not (0)\n * - Values are stored with the least significant bytes first\n *\n * @returns The decoded 32-bit unsigned integer\n * @throws If the encoding is invalid or exceeds 32 bits\n */\n function readVarUint32(): number {\n let value = 0;\n let shift = 0;\n while (true) {\n const byte = read(1)[0]; // Read a single byte from the buffer\n value |= (byte & 0x7f) << shift; // Extract 7 bits and shift to correct position\n if ((byte & 0x80) === 0) break; // If MSB is 0, we've reached the last byte\n if ((shift += 7) >= 32) throw new Error(\"Invalid WASM value\"); // Ensure we don't exceed 32 bits\n }\n return value >>> 0; // Force conversion to unsigned 32-bit integer\n }\n // Validate header\n if ([...read(4)].join() !== \"0,97,115,109\")\n throw new Error(\"Invalid WASM magic\");\n if ([...read(4)].join() !== \"1,0,0,0\")\n throw new Error(\"Invalid WASM version\");\n\n while (offset < buffer.byteLength) {\n const sectionId = read(1)[0];\n const sectionLength = readVarUint32();\n const start = offset;\n\n if (sectionId === 0) {\n // Custom section\n const nameLen = readVarUint32();\n\n if (nameLen > 0 && offset + nameLen <= start + sectionLength) {\n const nameBytes = read(nameLen);\n const payload = read(sectionLength - (offset - start));\n\n try {\n const name = new TextDecoder(\"utf-8\", { fatal: true }).decode(\n nameBytes,\n );\n if (payload.length > 0) {\n sections.set(name, (sections.get(name) || []).concat(payload));\n }\n } catch {\n /* Invalid UTF-8 */\n }\n }\n }\n // Always advance to end of section\n offset = start + sectionLength;\n }\n\n return sections;\n}\n\n/**\n * Reads a binary stream of ScSpecEntries into an array for processing by ContractSpec\n * @hidden\n */\nexport function processSpecEntryStream(buffer: Buffer) {\n const reader = new cereal.XdrReader(buffer);\n const res: xdr.ScSpecEntry[] = [];\n while (!reader.eof) {\n // @ts-ignore\n res.push(xdr.ScSpecEntry.read(reader));\n }\n return res;\n}\n\nexport async function getAccount<T>(\n options: AssembledTransactionOptions<T>,\n server: Server,\n): Promise<Account> {\n return options.publicKey\n ? server.getAccount(options.publicKey)\n : new Account(NULL_ACCOUNT, \"0\");\n}\n"],"names":["xdr"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/contract/utils.ts"],"sourcesContent":["import { xdr, cereal, Account } from \"../base/index.js\";\nimport { Server } from \"../rpc/index.js\";\nimport { type AssembledTransaction } from \"./assembled_transaction.js\";\nimport { NULL_ACCOUNT, type AssembledTransactionOptions } from \"./types.js\";\n\n/**\n * Keep calling a `fn` for `timeoutInSeconds` seconds, if `keepWaitingIf` is\n * true. Returns an array of all attempts to call the function.\n * @hidden\n */\nexport async function withExponentialBackoff<T>(\n /** Function to call repeatedly */\n fn: (previousFailure?: T) => Promise<T>,\n /** Condition to check when deciding whether or not to call `fn` again */\n keepWaitingIf: (result: T) => boolean,\n /** How long to wait between the first and second call */\n timeoutInSeconds: number,\n /** What to multiply `timeoutInSeconds` by, each subsequent attempt */\n exponentialFactor = 1.5,\n /** Whether to log extra info */\n verbose = false,\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n attempts.push(await fn());\n if (!keepWaitingIf(attempts[attempts.length - 1])) return attempts;\n\n const waitUntil = new Date(Date.now() + timeoutInSeconds * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (\n Date.now() < waitUntil &&\n keepWaitingIf(attempts[attempts.length - 1])\n ) {\n count += 1;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n timeoutInSeconds * 1000\n }ms)`,\n );\n }\n\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime *= exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n\n attempts.push(await fn(attempts[attempts.length - 1]));\n if (verbose && keepWaitingIf(attempts[attempts.length - 1])) {\n console.info(\n `${count}. Called ${fn}; ${\n attempts.length\n } prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2,\n )}`,\n );\n }\n }\n\n return attempts;\n}\n\n/**\n * If contracts are implemented using the `#[contracterror]` macro, then the\n * errors get included in the on-chain XDR that also describes your contract's\n * methods. Each error will have a specific number. This Regular Expression\n * matches these \"expected error types\" that a contract may throw, and helps\n * {@link AssembledTransaction} parse these errors.\n *\n * @defaultValue `/Error\\(Contract, #(\\d+)\\)/`\n */\nexport const contractErrorPattern = /Error\\(Contract, #(\\d+)\\)/;\n\n/**\n * A TypeScript type guard that checks if an object has a `toString` method.\n * @hidden\n */\nexport function implementsToString(\n /** some object that may or may not have a `toString` method */\n obj: unknown,\n): obj is { toString(): string } {\n return typeof obj === \"object\" && obj !== null && \"toString\" in obj;\n}\n\nexport function parseWasmCustomSections(\n buffer: Buffer,\n): Map<string, Uint8Array[]> {\n const sections = new Map<string, Uint8Array[]>();\n const arrayBuffer = buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n );\n\n let offset = 0;\n\n // Helper to read bytes with bounds checking\n const read = (length: number): Uint8Array => {\n if (offset + length > buffer.byteLength) throw new Error(\"Buffer overflow\");\n const bytes = new Uint8Array(arrayBuffer, offset, length);\n offset += length;\n return bytes;\n };\n /**\n * Decodes a variable-length encoded unsigned 32-bit integer (LEB128 format) from the WASM binary.\n *\n * This function implements the WebAssembly LEB128 (Little Endian Base 128) variable-length\n * encoding scheme for unsigned integers. In this encoding:\n * - Each byte uses 7 bits for the actual value\n * - The most significant bit (MSB) indicates if more bytes follow (1) or not (0)\n * - Values are stored with the least significant bytes first\n *\n * @returns The decoded 32-bit unsigned integer\n * @throws If the encoding is invalid or exceeds 32 bits\n */\n function readVarUint32(): number {\n let value = 0;\n let shift = 0;\n while (true) {\n const byte = read(1)[0]; // Read a single byte from the buffer\n value |= (byte & 0x7f) << shift; // Extract 7 bits and shift to correct position\n if ((byte & 0x80) === 0) break; // If MSB is 0, we've reached the last byte\n if ((shift += 7) >= 32) throw new Error(\"Invalid WASM value\"); // Ensure we don't exceed 32 bits\n }\n return value >>> 0; // Force conversion to unsigned 32-bit integer\n }\n // Validate header\n if ([...read(4)].join() !== \"0,97,115,109\")\n throw new Error(\"Invalid WASM magic\");\n if ([...read(4)].join() !== \"1,0,0,0\")\n throw new Error(\"Invalid WASM version\");\n\n while (offset < buffer.byteLength) {\n const sectionId = read(1)[0];\n const sectionLength = readVarUint32();\n const start = offset;\n\n if (sectionId === 0) {\n // Custom section\n const nameLen = readVarUint32();\n\n if (nameLen > 0 && offset + nameLen <= start + sectionLength) {\n const nameBytes = read(nameLen);\n const payload = read(sectionLength - (offset - start));\n\n try {\n const name = new TextDecoder(\"utf-8\", { fatal: true }).decode(\n nameBytes,\n );\n if (payload.length > 0) {\n sections.set(name, (sections.get(name) || []).concat(payload));\n }\n } catch {\n /* Invalid UTF-8 */\n }\n }\n }\n // Always advance to end of section\n offset = start + sectionLength;\n }\n\n return sections;\n}\n\n/**\n * Reads a binary stream of ScSpecEntries into an array for processing by ContractSpec\n * @hidden\n */\nexport function processSpecEntryStream(buffer: Buffer) {\n const reader = new cereal.XdrReader(buffer);\n const res: xdr.ScSpecEntry[] = [];\n while (!reader.eof) {\n // @ts-expect-error ScSpecEntry.read expects the generated XdrReader type; reader is cereal.XdrReader\n res.push(xdr.ScSpecEntry.read(reader));\n }\n return res;\n}\n\nexport async function getAccount<T>(\n options: AssembledTransactionOptions<T>,\n server: Server,\n): Promise<Account> {\n return options.publicKey\n ? server.getAccount(options.publicKey)\n : new Account(NULL_ACCOUNT, \"0\");\n}\n"],"names":["xdr"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { parseWasmCustomSections } from './utils.js';
|
|
|
3
3
|
|
|
4
4
|
function specFromWasm(wasm) {
|
|
5
5
|
const customData = parseWasmCustomSections(wasm);
|
|
6
|
-
|
|
6
|
+
const xdrSections = customData.get("contractspecv0");
|
|
7
7
|
if (!xdrSections || xdrSections.length === 0) {
|
|
8
8
|
throw new Error("Could not obtain contract spec from wasm");
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm_spec_parser.js","sources":["../../../src/contract/wasm_spec_parser.ts"],"sourcesContent":["import { parseWasmCustomSections } from \"./utils.js\";\n/**\n * Obtains the contract spec XDR from a contract's wasm binary.\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns The XDR buffer representing the contract spec.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\nexport function specFromWasm(wasm: Buffer) {\n const customData = parseWasmCustomSections(wasm);\n
|
|
1
|
+
{"version":3,"file":"wasm_spec_parser.js","sources":["../../../src/contract/wasm_spec_parser.ts"],"sourcesContent":["import { parseWasmCustomSections } from \"./utils.js\";\n/**\n * Obtains the contract spec XDR from a contract's wasm binary.\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns The XDR buffer representing the contract spec.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\nexport function specFromWasm(wasm: Buffer) {\n const customData = parseWasmCustomSections(wasm);\n const xdrSections = customData.get(\"contractspecv0\");\n\n if (!xdrSections || xdrSections.length === 0) {\n throw new Error(\"Could not obtain contract spec from wasm\");\n }\n\n return Buffer.from(xdrSections[0]);\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,aAAa,IAAA,EAAc;AACzC,EAAA,MAAM,UAAA,GAAa,wBAAwB,IAAI,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,gBAAgB,CAAA;AAEnD,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,CAAC,CAAC,CAAA;AACnC;;;;"}
|