@stellar/stellar-sdk 16.0.1 → 16.1.0
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/README.md +2 -2
- package/dist/stellar-sdk-axios.js +5608 -4598
- package/dist/stellar-sdk-axios.js.map +1 -1
- package/dist/stellar-sdk-axios.min.js +12 -11
- package/dist/stellar-sdk-axios.min.js.map +1 -1
- package/dist/stellar-sdk.js +3902 -3434
- package/dist/stellar-sdk.js.map +1 -1
- package/dist/stellar-sdk.min.js +17 -17
- package/dist/stellar-sdk.min.js.map +1 -1
- package/lib/axios/cjs/base/auth.js +107 -0
- package/lib/axios/cjs/base/auth.js.map +1 -1
- package/lib/axios/cjs/base/keypair.js +39 -0
- package/lib/axios/cjs/base/keypair.js.map +1 -1
- package/lib/axios/cjs/base/scval.js +34 -0
- package/lib/axios/cjs/base/scval.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/cli/index.js +1 -1
- package/lib/axios/cjs/cli/index.js.map +1 -1
- package/lib/axios/cjs/contract/assembled_transaction.js +8 -7
- package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/client.js +56 -3
- package/lib/axios/cjs/contract/client.js.map +1 -1
- package/lib/axios/cjs/contract/spec.js +7 -3
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/errors/transaction_failed.js +62 -0
- package/lib/axios/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/axios/cjs/errors/wrap_http_error.js +20 -0
- package/lib/axios/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/cjs/federation/server.js +14 -15
- package/lib/axios/cjs/federation/server.js.map +1 -1
- package/lib/axios/cjs/horizon/call_builder.js +20 -0
- package/lib/axios/cjs/horizon/call_builder.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_api.js +5 -0
- 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/server.js +20 -26
- package/lib/axios/cjs/horizon/server.js.map +1 -1
- package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/axios/cjs/index.js +4 -0
- package/lib/axios/cjs/index.js.map +1 -1
- package/lib/axios/cjs/rpc/api.js.map +1 -1
- package/lib/axios/cjs/rpc/axios.js +1 -1
- package/lib/axios/cjs/rpc/server.js +163 -8
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/esm/base/auth.d.ts +141 -0
- package/lib/axios/esm/base/auth.js +106 -1
- package/lib/axios/esm/base/auth.js.map +1 -1
- package/lib/axios/esm/base/index.d.ts +2 -2
- package/lib/axios/esm/base/keypair.d.ts +27 -0
- package/lib/axios/esm/base/keypair.js +39 -0
- package/lib/axios/esm/base/keypair.js.map +1 -1
- package/lib/axios/esm/base/scval.d.ts +4 -0
- package/lib/axios/esm/base/scval.js +34 -0
- package/lib/axios/esm/base/scval.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/cli/index.js +1 -1
- package/lib/axios/esm/cli/index.js.map +1 -1
- package/lib/axios/esm/contract/assembled_transaction.d.ts +1 -1
- package/lib/axios/esm/contract/assembled_transaction.js +9 -8
- package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/esm/contract/client.d.ts +49 -3
- package/lib/axios/esm/contract/client.js +56 -3
- package/lib/axios/esm/contract/client.js.map +1 -1
- package/lib/axios/esm/contract/spec.js +7 -3
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/errors/index.d.ts +1 -0
- package/lib/axios/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/axios/esm/errors/transaction_failed.js +60 -0
- package/lib/axios/esm/errors/transaction_failed.js.map +1 -0
- package/lib/axios/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/axios/esm/errors/wrap_http_error.js +18 -0
- package/lib/axios/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/esm/federation/server.js +14 -15
- package/lib/axios/esm/federation/server.js.map +1 -1
- package/lib/axios/esm/horizon/call_builder.js +20 -0
- package/lib/axios/esm/horizon/call_builder.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/axios/esm/horizon/horizon_api.js +5 -0
- 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/server.d.ts +10 -4
- package/lib/axios/esm/horizon/server.js +20 -26
- package/lib/axios/esm/horizon/server.js.map +1 -1
- package/lib/axios/esm/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/axios/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/axios/esm/index.js +2 -1
- package/lib/axios/esm/index.js.map +1 -1
- package/lib/axios/esm/rpc/api.d.ts +21 -0
- package/lib/axios/esm/rpc/api.js.map +1 -1
- package/lib/axios/esm/rpc/axios.js +1 -1
- package/lib/axios/esm/rpc/server.d.ts +104 -1
- package/lib/axios/esm/rpc/server.js +163 -8
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/cjs/base/auth.js +107 -0
- package/lib/cjs/base/auth.js.map +1 -1
- package/lib/cjs/base/keypair.js +39 -0
- package/lib/cjs/base/keypair.js.map +1 -1
- package/lib/cjs/base/scval.js +34 -0
- package/lib/cjs/base/scval.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/cli/index.js +1 -1
- package/lib/cjs/cli/index.js.map +1 -1
- package/lib/cjs/contract/assembled_transaction.js +8 -7
- package/lib/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/cjs/contract/client.js +56 -3
- package/lib/cjs/contract/client.js.map +1 -1
- package/lib/cjs/contract/spec.js +7 -3
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/errors/transaction_failed.js +62 -0
- package/lib/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/cjs/errors/wrap_http_error.js +20 -0
- package/lib/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/cjs/federation/server.js +14 -15
- package/lib/cjs/federation/server.js.map +1 -1
- package/lib/cjs/horizon/call_builder.js +20 -0
- package/lib/cjs/horizon/call_builder.js.map +1 -1
- package/lib/cjs/horizon/horizon_api.js +5 -0
- package/lib/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/cjs/horizon/server.js +20 -26
- package/lib/cjs/horizon/server.js.map +1 -1
- package/lib/cjs/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/cjs/index.js +4 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/rpc/api.js.map +1 -1
- package/lib/cjs/rpc/axios.js +1 -1
- package/lib/cjs/rpc/server.js +163 -8
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/esm/base/auth.d.ts +141 -0
- package/lib/esm/base/auth.js +106 -1
- package/lib/esm/base/auth.js.map +1 -1
- package/lib/esm/base/index.d.ts +2 -2
- package/lib/esm/base/keypair.d.ts +27 -0
- package/lib/esm/base/keypair.js +39 -0
- package/lib/esm/base/keypair.js.map +1 -1
- package/lib/esm/base/scval.d.ts +4 -0
- package/lib/esm/base/scval.js +34 -0
- package/lib/esm/base/scval.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/cli/index.js +1 -1
- package/lib/esm/cli/index.js.map +1 -1
- package/lib/esm/contract/assembled_transaction.d.ts +1 -1
- package/lib/esm/contract/assembled_transaction.js +9 -8
- package/lib/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/esm/contract/client.d.ts +49 -3
- package/lib/esm/contract/client.js +56 -3
- package/lib/esm/contract/client.js.map +1 -1
- package/lib/esm/contract/spec.js +7 -3
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/errors/index.d.ts +1 -0
- package/lib/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/esm/errors/transaction_failed.js +60 -0
- package/lib/esm/errors/transaction_failed.js.map +1 -0
- package/lib/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/esm/errors/wrap_http_error.js +18 -0
- package/lib/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/esm/federation/server.js +14 -15
- package/lib/esm/federation/server.js.map +1 -1
- package/lib/esm/horizon/call_builder.js +20 -0
- package/lib/esm/horizon/call_builder.js.map +1 -1
- package/lib/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/esm/horizon/horizon_api.js +5 -0
- package/lib/esm/horizon/horizon_api.js.map +1 -1
- package/lib/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/esm/horizon/server.d.ts +10 -4
- package/lib/esm/horizon/server.js +20 -26
- package/lib/esm/horizon/server.js.map +1 -1
- package/lib/esm/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/rpc/api.d.ts +21 -0
- package/lib/esm/rpc/api.js.map +1 -1
- package/lib/esm/rpc/axios.js +1 -1
- package/lib/esm/rpc/server.d.ts +104 -1
- package/lib/esm/rpc/server.js +163 -8
- package/lib/esm/rpc/server.js.map +1 -1
- package/package.json +27 -30
|
@@ -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-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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"}
|
|
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 nativeToScVal,\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\n // Delegate scSpecTypeVal to the base nativeToScVal helper, which handles\n // strings, numbers/bigints (via ScInt), booleans, null/undefined, arrays,\n // plain objects (sorted), Map, Address, Contract, Uint8Array, and xdr.ScVal\n // passthroughs — keeping this in one place so the two code paths can't\n // drift apart over time.\n if (value === xdr.ScSpecType.scSpecTypeVal().value) {\n return nativeToScVal(val);\n }\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 instanceof 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 const proto = Object.getPrototypeOf(val);\n if (proto !== Object.prototype && proto !== null) {\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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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { xdr } from "../base/index.js";
|
|
2
|
+
import { HorizonApi } from "../horizon/horizon_api.js";
|
|
3
|
+
import { BadResponseError } from "./bad_response.js";
|
|
4
|
+
/**
|
|
5
|
+
* TransactionFailedError is raised when a transaction submitted to Horizon
|
|
6
|
+
* is rejected with a `transaction_failed` error response (HTTP 400). It
|
|
7
|
+
* provides convenient accessors for the result codes and the decoded
|
|
8
|
+
* {@link xdr.TransactionResult}, which are otherwise nested deep inside the
|
|
9
|
+
* raw Horizon response.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```js
|
|
13
|
+
* try {
|
|
14
|
+
* await server.submitTransaction(tx);
|
|
15
|
+
* } catch (err) {
|
|
16
|
+
* if (err instanceof TransactionFailedError) {
|
|
17
|
+
* const { transaction, operations } = err.getResultCodes();
|
|
18
|
+
* console.log(transaction); // e.g. "tx_failed"
|
|
19
|
+
* console.log(operations); // e.g. ["op_underfunded"]
|
|
20
|
+
* console.log(err.getTransactionResult()?.result().switch().name);
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param message - Human-readable error message.
|
|
26
|
+
* @param response - Response details, received from the Horizon server, whose
|
|
27
|
+
* `data` field contains a `transaction_failed` error response with `extras`.
|
|
28
|
+
*/
|
|
29
|
+
export declare class TransactionFailedError extends BadResponseError {
|
|
30
|
+
/**
|
|
31
|
+
* Returns the transaction- and operation-level result codes reported by
|
|
32
|
+
* Horizon, e.g. `{ transaction: "tx_failed", operations: ["op_underfunded"] }`.
|
|
33
|
+
*
|
|
34
|
+
* Horizon omits `operations` when the transaction failed a
|
|
35
|
+
* transaction-level check (e.g. `tx_bad_seq`) and no operations were
|
|
36
|
+
* evaluated; this accessor normalizes that to an empty array.
|
|
37
|
+
*
|
|
38
|
+
* @returns The `result_codes` object from the response's `extras`.
|
|
39
|
+
*/
|
|
40
|
+
getResultCodes(): {
|
|
41
|
+
transaction: HorizonApi.TransactionFailedResultCodes;
|
|
42
|
+
operations: string[];
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Decodes and returns the {@link xdr.TransactionResult} from the response's
|
|
46
|
+
* `extras.result_xdr`, providing structured access to per-operation results.
|
|
47
|
+
*
|
|
48
|
+
* @returns The decoded transaction result, or `null` if the response did not
|
|
49
|
+
* include a `result_xdr`.
|
|
50
|
+
* @throws If the server returned a `result_xdr` that is not valid base64-encoded
|
|
51
|
+
* {@link xdr.TransactionResult} XDR.
|
|
52
|
+
*/
|
|
53
|
+
getTransactionResult(): xdr.TransactionResult | null;
|
|
54
|
+
private extras;
|
|
55
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/int.js';
|
|
2
|
+
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/hyper.js';
|
|
3
|
+
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js';
|
|
4
|
+
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js';
|
|
5
|
+
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js';
|
|
6
|
+
import 'buffer';
|
|
7
|
+
import types from '../base/generated/curr_generated.js';
|
|
8
|
+
import '@noble/hashes/sha2.js';
|
|
9
|
+
import '../base/signing.js';
|
|
10
|
+
import '../base/keypair.js';
|
|
11
|
+
import 'base32.js';
|
|
12
|
+
import '../base/util/continued_fraction.js';
|
|
13
|
+
import '../base/util/bignumber.js';
|
|
14
|
+
import '../base/transaction_builder.js';
|
|
15
|
+
import '../base/muxed_account.js';
|
|
16
|
+
import '../base/scval.js';
|
|
17
|
+
import '../base/numbers/uint128.js';
|
|
18
|
+
import '../base/numbers/uint256.js';
|
|
19
|
+
import '../base/numbers/int128.js';
|
|
20
|
+
import '../base/numbers/int256.js';
|
|
21
|
+
import { BadResponseError } from './bad_response.js';
|
|
22
|
+
|
|
23
|
+
class TransactionFailedError extends BadResponseError {
|
|
24
|
+
/**
|
|
25
|
+
* Returns the transaction- and operation-level result codes reported by
|
|
26
|
+
* Horizon, e.g. `{ transaction: "tx_failed", operations: ["op_underfunded"] }`.
|
|
27
|
+
*
|
|
28
|
+
* Horizon omits `operations` when the transaction failed a
|
|
29
|
+
* transaction-level check (e.g. `tx_bad_seq`) and no operations were
|
|
30
|
+
* evaluated; this accessor normalizes that to an empty array.
|
|
31
|
+
*
|
|
32
|
+
* @returns The `result_codes` object from the response's `extras`.
|
|
33
|
+
*/
|
|
34
|
+
getResultCodes() {
|
|
35
|
+
const { transaction, operations = [] } = this.extras().result_codes;
|
|
36
|
+
return { transaction, operations };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Decodes and returns the {@link xdr.TransactionResult} from the response's
|
|
40
|
+
* `extras.result_xdr`, providing structured access to per-operation results.
|
|
41
|
+
*
|
|
42
|
+
* @returns The decoded transaction result, or `null` if the response did not
|
|
43
|
+
* include a `result_xdr`.
|
|
44
|
+
* @throws If the server returned a `result_xdr` that is not valid base64-encoded
|
|
45
|
+
* {@link xdr.TransactionResult} XDR.
|
|
46
|
+
*/
|
|
47
|
+
getTransactionResult() {
|
|
48
|
+
const resultXdr = this.extras().result_xdr;
|
|
49
|
+
if (!resultXdr) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return types.TransactionResult.fromXDR(resultXdr, "base64");
|
|
53
|
+
}
|
|
54
|
+
extras() {
|
|
55
|
+
return this.response.data.extras;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { TransactionFailedError };
|
|
60
|
+
//# sourceMappingURL=transaction_failed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction_failed.js","sources":["../../../src/errors/transaction_failed.ts"],"sourcesContent":["import { xdr } from \"../base/index.js\";\nimport { HorizonApi } from \"../horizon/horizon_api.js\";\nimport { BadResponseError } from \"./bad_response.js\";\n\n/**\n * TransactionFailedError is raised when a transaction submitted to Horizon\n * is rejected with a `transaction_failed` error response (HTTP 400). It\n * provides convenient accessors for the result codes and the decoded\n * {@link xdr.TransactionResult}, which are otherwise nested deep inside the\n * raw Horizon response.\n *\n * @example\n * ```js\n * try {\n * await server.submitTransaction(tx);\n * } catch (err) {\n * if (err instanceof TransactionFailedError) {\n * const { transaction, operations } = err.getResultCodes();\n * console.log(transaction); // e.g. \"tx_failed\"\n * console.log(operations); // e.g. [\"op_underfunded\"]\n * console.log(err.getTransactionResult()?.result().switch().name);\n * }\n * }\n * ```\n *\n * @param message - Human-readable error message.\n * @param response - Response details, received from the Horizon server, whose\n * `data` field contains a `transaction_failed` error response with `extras`.\n */\nexport class TransactionFailedError extends BadResponseError {\n /**\n * Returns the transaction- and operation-level result codes reported by\n * Horizon, e.g. `{ transaction: \"tx_failed\", operations: [\"op_underfunded\"] }`.\n *\n * Horizon omits `operations` when the transaction failed a\n * transaction-level check (e.g. `tx_bad_seq`) and no operations were\n * evaluated; this accessor normalizes that to an empty array.\n *\n * @returns The `result_codes` object from the response's `extras`.\n */\n public getResultCodes(): {\n transaction: HorizonApi.TransactionFailedResultCodes;\n operations: string[];\n } {\n const { transaction, operations = [] } = this.extras().result_codes;\n return { transaction, operations };\n }\n\n /**\n * Decodes and returns the {@link xdr.TransactionResult} from the response's\n * `extras.result_xdr`, providing structured access to per-operation results.\n *\n * @returns The decoded transaction result, or `null` if the response did not\n * include a `result_xdr`.\n * @throws If the server returned a `result_xdr` that is not valid base64-encoded\n * {@link xdr.TransactionResult} XDR.\n */\n public getTransactionResult(): xdr.TransactionResult | null {\n const resultXdr = this.extras().result_xdr;\n if (!resultXdr) {\n return null;\n }\n return xdr.TransactionResult.fromXDR(resultXdr, \"base64\");\n }\n\n private extras(): HorizonApi.TransactionFailedExtras {\n return (\n this.response.data as HorizonApi.ErrorResponseData.TransactionFailed\n ).extras;\n }\n}\n"],"names":["xdr"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,+BAA+B,gBAAA,CAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWpD,cAAA,GAGL;AACA,IAAA,MAAM,EAAE,aAAa,UAAA,GAAa,IAAG,GAAI,IAAA,CAAK,QAAO,CAAE,YAAA;AACvD,IAAA,OAAO,EAAE,aAAa,UAAA,EAAW;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,oBAAA,GAAqD;AAC1D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,EAAO,CAAE,UAAA;AAChC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAOA,KAAA,CAAI,iBAAA,CAAkB,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC1D;AAAA,EAEQ,MAAA,GAA6C;AACnD,IAAA,OACE,IAAA,CAAK,SAAS,IAAA,CACd,MAAA;AAAA,EACJ;AACF;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NetworkError } from "./network.js";
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes a rejection from the HTTP client into an SDK error. HTTP-level
|
|
4
|
+
* failures from the http client are Error instances carrying a `.response`,
|
|
5
|
+
* so an instanceof check alone would leak them through raw.
|
|
6
|
+
*
|
|
7
|
+
* If the rejection carries an HTTP response (directly or via `.response`),
|
|
8
|
+
* `wrap` is called with the normalized response details to build the SDK
|
|
9
|
+
* error, and the original error is kept reachable via `cause`. Otherwise the
|
|
10
|
+
* original error is returned as-is (coerced to an `Error` if needed).
|
|
11
|
+
*
|
|
12
|
+
* @param error - The rejection value from the HTTP client.
|
|
13
|
+
* @param wrap - Builds the SDK error from the normalized response details.
|
|
14
|
+
* @returns The SDK error, or the original error if it was not HTTP-level.
|
|
15
|
+
*/
|
|
16
|
+
export declare function wrapHttpError(error: any, wrap: (details: {
|
|
17
|
+
data: any;
|
|
18
|
+
status: number;
|
|
19
|
+
statusText: string;
|
|
20
|
+
}) => NetworkError): Error;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function wrapHttpError(error, wrap) {
|
|
2
|
+
const response = error?.response ?? error;
|
|
3
|
+
if (response && typeof response.status === "number") {
|
|
4
|
+
const wrapped = wrap({
|
|
5
|
+
data: response.data,
|
|
6
|
+
status: response.status,
|
|
7
|
+
statusText: response.statusText
|
|
8
|
+
});
|
|
9
|
+
if (error instanceof Error) {
|
|
10
|
+
wrapped.cause = error;
|
|
11
|
+
}
|
|
12
|
+
return wrapped;
|
|
13
|
+
}
|
|
14
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { wrapHttpError };
|
|
18
|
+
//# sourceMappingURL=wrap_http_error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap_http_error.js","sources":["../../../src/errors/wrap_http_error.ts"],"sourcesContent":["import { NetworkError } from \"./network.js\";\n\n/**\n * Normalizes a rejection from the HTTP client into an SDK error. HTTP-level\n * failures from the http client are Error instances carrying a `.response`,\n * so an instanceof check alone would leak them through raw.\n *\n * If the rejection carries an HTTP response (directly or via `.response`),\n * `wrap` is called with the normalized response details to build the SDK\n * error, and the original error is kept reachable via `cause`. Otherwise the\n * original error is returned as-is (coerced to an `Error` if needed).\n *\n * @param error - The rejection value from the HTTP client.\n * @param wrap - Builds the SDK error from the normalized response details.\n * @returns The SDK error, or the original error if it was not HTTP-level.\n */\nexport function wrapHttpError(\n error: any,\n wrap: (details: {\n data: any;\n status: number;\n statusText: string;\n }) => NetworkError,\n): Error {\n const response = error?.response ?? error;\n if (response && typeof response.status === \"number\") {\n const wrapped = wrap({\n data: response.data,\n status: response.status,\n statusText: response.statusText,\n });\n // keep the underlying http client error (headers, config, etc.) reachable\n if (error instanceof Error) {\n wrapped.cause = error;\n }\n return wrapped;\n }\n return error instanceof Error ? error : new Error(String(error));\n}\n"],"names":[],"mappings":"AAgBO,SAAS,aAAA,CACd,OACA,IAAA,EAKO;AACP,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,KAAA;AACpC,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,CAAS,MAAA,KAAW,QAAA,EAAU;AACnD,IAAA,MAAM,UAAU,IAAA,CAAK;AAAA,MACnB,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,IAClB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE;;;;"}
|
|
@@ -20,6 +20,7 @@ import '../base/numbers/int128.js';
|
|
|
20
20
|
import '../base/numbers/int256.js';
|
|
21
21
|
import { Config } from '../config.js';
|
|
22
22
|
import { BadResponseError } from '../errors/bad_response.js';
|
|
23
|
+
import { wrapHttpError } from '../errors/wrap_http_error.js';
|
|
23
24
|
import { Resolver } from '../stellartoml/index.js';
|
|
24
25
|
import { validateDomain } from './utils.js';
|
|
25
26
|
import { fetchClient } from '../http-client/fetch-client.js';
|
|
@@ -201,23 +202,21 @@ class FederationServer {
|
|
|
201
202
|
throw new Error("memo value should be of type string");
|
|
202
203
|
}
|
|
203
204
|
return response.data;
|
|
204
|
-
}).catch((
|
|
205
|
-
if (
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
`federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`
|
|
209
|
-
);
|
|
210
|
-
} else {
|
|
211
|
-
return Promise.reject(response);
|
|
212
|
-
}
|
|
213
|
-
} else {
|
|
214
|
-
return Promise.reject(
|
|
215
|
-
new BadResponseError(
|
|
216
|
-
`Server query failed. Server responded: ${response.status} ${response.statusText}`,
|
|
217
|
-
response.data
|
|
218
|
-
)
|
|
205
|
+
}).catch((error) => {
|
|
206
|
+
if (error instanceof Error && error.message.match(/^maxContentLength size/)) {
|
|
207
|
+
throw new Error(
|
|
208
|
+
`federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`
|
|
219
209
|
);
|
|
220
210
|
}
|
|
211
|
+
return Promise.reject(
|
|
212
|
+
wrapHttpError(
|
|
213
|
+
error,
|
|
214
|
+
(details) => new BadResponseError(
|
|
215
|
+
`Server query failed. Server responded: ${details.status} ${details.statusText}`,
|
|
216
|
+
details
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
);
|
|
221
220
|
});
|
|
222
221
|
}
|
|
223
222
|
}
|