@stellar/stellar-sdk 16.0.1 → 16.2.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 +41 -2
- package/dist/stellar-sdk-axios.js +5401 -3690
- 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 +4850 -3681
- 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 +147 -30
- package/lib/axios/cjs/base/auth.js.map +1 -1
- package/lib/axios/cjs/base/index.js +113 -0
- package/lib/axios/cjs/base/index.js.map +1 -0
- 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/client.js +170 -0
- package/lib/axios/cjs/bindings/client.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/bindings/generator.js +45 -16
- package/lib/axios/cjs/bindings/generator.js.map +1 -1
- package/lib/axios/cjs/bindings/types.js +151 -1
- package/lib/axios/cjs/bindings/types.js.map +1 -1
- package/lib/axios/cjs/bindings/utils.js +10 -0
- package/lib/axios/cjs/bindings/utils.js.map +1 -1
- package/lib/axios/cjs/cli/index.js +19 -22
- package/lib/axios/cjs/cli/index.js.map +1 -1
- package/lib/axios/cjs/cli/util.js +1 -20
- package/lib/axios/cjs/cli/util.js.map +1 -1
- package/lib/axios/cjs/contract/assembled_transaction.js +39 -17
- package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/basic_node_signer.js +8 -42
- package/lib/axios/cjs/contract/basic_node_signer.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/event_spec.js +164 -0
- package/lib/axios/cjs/contract/event_spec.js.map +1 -0
- package/lib/axios/cjs/contract/index.js +2 -0
- package/lib/axios/cjs/contract/index.js.map +1 -1
- package/lib/axios/cjs/contract/sent_transaction.js +0 -20
- package/lib/axios/cjs/contract/sent_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/signer.js +96 -0
- package/lib/axios/cjs/contract/signer.js.map +1 -0
- package/lib/axios/cjs/contract/spec.js +107 -3
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/contract/types.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 +15 -35
- package/lib/axios/cjs/federation/server.js.map +1 -1
- package/lib/axios/cjs/horizon/account_response.js +0 -20
- package/lib/axios/cjs/horizon/account_response.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/index.js +66 -65
- 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 +181 -13
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/cjs/rpc/transaction.js +2 -20
- package/lib/axios/cjs/rpc/transaction.js.map +1 -1
- package/lib/axios/cjs/webauth/challenge_transaction.js +7 -22
- package/lib/axios/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/cjs/webauth/utils.js +1 -20
- package/lib/axios/cjs/webauth/utils.js.map +1 -1
- package/lib/axios/esm/base/auth.d.ts +181 -13
- package/lib/axios/esm/base/auth.js +146 -31
- 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/index.js +44 -0
- package/lib/axios/esm/base/index.js.map +1 -0
- 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/client.d.ts +39 -0
- package/lib/axios/esm/bindings/client.js +171 -1
- package/lib/axios/esm/bindings/client.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/bindings/generator.d.ts +34 -0
- package/lib/axios/esm/bindings/generator.js +45 -16
- package/lib/axios/esm/bindings/generator.js.map +1 -1
- package/lib/axios/esm/bindings/types.d.ts +42 -0
- package/lib/axios/esm/bindings/types.js +153 -3
- package/lib/axios/esm/bindings/types.js.map +1 -1
- package/lib/axios/esm/bindings/utils.d.ts +10 -0
- package/lib/axios/esm/bindings/utils.js +9 -1
- package/lib/axios/esm/bindings/utils.js.map +1 -1
- package/lib/axios/esm/cli/index.js +19 -22
- package/lib/axios/esm/cli/index.js.map +1 -1
- package/lib/axios/esm/cli/util.d.ts +1 -1
- package/lib/axios/esm/cli/util.js +1 -20
- package/lib/axios/esm/cli/util.js.map +1 -1
- package/lib/axios/esm/contract/assembled_transaction.d.ts +7 -5
- package/lib/axios/esm/contract/assembled_transaction.js +39 -17
- package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/esm/contract/basic_node_signer.d.ts +3 -0
- package/lib/axios/esm/contract/basic_node_signer.js +8 -42
- package/lib/axios/esm/contract/basic_node_signer.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/event_spec.d.ts +78 -0
- package/lib/axios/esm/contract/event_spec.js +159 -0
- package/lib/axios/esm/contract/event_spec.js.map +1 -0
- package/lib/axios/esm/contract/index.d.ts +3 -0
- package/lib/axios/esm/contract/index.js +1 -0
- package/lib/axios/esm/contract/index.js.map +1 -1
- package/lib/axios/esm/contract/sent_transaction.js +0 -20
- package/lib/axios/esm/contract/sent_transaction.js.map +1 -1
- package/lib/axios/esm/contract/signer.d.ts +104 -0
- package/lib/axios/esm/contract/signer.js +91 -0
- package/lib/axios/esm/contract/signer.js.map +1 -0
- package/lib/axios/esm/contract/spec.d.ts +84 -0
- package/lib/axios/esm/contract/spec.js +107 -3
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/contract/types.d.ts +25 -8
- package/lib/axios/esm/contract/types.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 +15 -35
- package/lib/axios/esm/federation/server.js.map +1 -1
- package/lib/axios/esm/horizon/account_response.js +0 -20
- package/lib/axios/esm/horizon/account_response.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/index.js +27 -29
- 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 +115 -3
- package/lib/axios/esm/rpc/server.js +181 -13
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/axios/esm/rpc/transaction.js +2 -20
- package/lib/axios/esm/rpc/transaction.js.map +1 -1
- package/lib/axios/esm/webauth/challenge_transaction.js +7 -22
- package/lib/axios/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/esm/webauth/utils.js +1 -20
- package/lib/axios/esm/webauth/utils.js.map +1 -1
- package/lib/cjs/base/auth.js +147 -30
- package/lib/cjs/base/auth.js.map +1 -1
- package/lib/cjs/base/index.js +113 -0
- package/lib/cjs/base/index.js.map +1 -0
- 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/client.js +170 -0
- package/lib/cjs/bindings/client.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/bindings/generator.js +45 -16
- package/lib/cjs/bindings/generator.js.map +1 -1
- package/lib/cjs/bindings/types.js +151 -1
- package/lib/cjs/bindings/types.js.map +1 -1
- package/lib/cjs/bindings/utils.js +10 -0
- package/lib/cjs/bindings/utils.js.map +1 -1
- package/lib/cjs/cli/index.js +19 -22
- package/lib/cjs/cli/index.js.map +1 -1
- package/lib/cjs/cli/util.js +1 -20
- package/lib/cjs/cli/util.js.map +1 -1
- package/lib/cjs/contract/assembled_transaction.js +39 -17
- package/lib/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/cjs/contract/basic_node_signer.js +8 -42
- package/lib/cjs/contract/basic_node_signer.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/event_spec.js +164 -0
- package/lib/cjs/contract/event_spec.js.map +1 -0
- package/lib/cjs/contract/index.js +2 -0
- package/lib/cjs/contract/index.js.map +1 -1
- package/lib/cjs/contract/sent_transaction.js +0 -20
- package/lib/cjs/contract/sent_transaction.js.map +1 -1
- package/lib/cjs/contract/signer.js +96 -0
- package/lib/cjs/contract/signer.js.map +1 -0
- package/lib/cjs/contract/spec.js +107 -3
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/contract/types.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 +15 -35
- package/lib/cjs/federation/server.js.map +1 -1
- package/lib/cjs/horizon/account_response.js +0 -20
- package/lib/cjs/horizon/account_response.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/index.js +66 -65
- 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 +181 -13
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/cjs/rpc/transaction.js +2 -20
- package/lib/cjs/rpc/transaction.js.map +1 -1
- package/lib/cjs/webauth/challenge_transaction.js +7 -22
- package/lib/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/cjs/webauth/utils.js +1 -20
- package/lib/cjs/webauth/utils.js.map +1 -1
- package/lib/esm/base/auth.d.ts +181 -13
- package/lib/esm/base/auth.js +146 -31
- package/lib/esm/base/auth.js.map +1 -1
- package/lib/esm/base/index.d.ts +2 -2
- package/lib/esm/base/index.js +44 -0
- package/lib/esm/base/index.js.map +1 -0
- 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/client.d.ts +39 -0
- package/lib/esm/bindings/client.js +171 -1
- package/lib/esm/bindings/client.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/bindings/generator.d.ts +34 -0
- package/lib/esm/bindings/generator.js +45 -16
- package/lib/esm/bindings/generator.js.map +1 -1
- package/lib/esm/bindings/types.d.ts +42 -0
- package/lib/esm/bindings/types.js +153 -3
- package/lib/esm/bindings/types.js.map +1 -1
- package/lib/esm/bindings/utils.d.ts +10 -0
- package/lib/esm/bindings/utils.js +9 -1
- package/lib/esm/bindings/utils.js.map +1 -1
- package/lib/esm/cli/index.js +19 -22
- package/lib/esm/cli/index.js.map +1 -1
- package/lib/esm/cli/util.d.ts +1 -1
- package/lib/esm/cli/util.js +1 -20
- package/lib/esm/cli/util.js.map +1 -1
- package/lib/esm/contract/assembled_transaction.d.ts +7 -5
- package/lib/esm/contract/assembled_transaction.js +39 -17
- package/lib/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/esm/contract/basic_node_signer.d.ts +3 -0
- package/lib/esm/contract/basic_node_signer.js +8 -42
- package/lib/esm/contract/basic_node_signer.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/event_spec.d.ts +78 -0
- package/lib/esm/contract/event_spec.js +159 -0
- package/lib/esm/contract/event_spec.js.map +1 -0
- package/lib/esm/contract/index.d.ts +3 -0
- package/lib/esm/contract/index.js +1 -0
- package/lib/esm/contract/index.js.map +1 -1
- package/lib/esm/contract/sent_transaction.js +0 -20
- package/lib/esm/contract/sent_transaction.js.map +1 -1
- package/lib/esm/contract/signer.d.ts +104 -0
- package/lib/esm/contract/signer.js +91 -0
- package/lib/esm/contract/signer.js.map +1 -0
- package/lib/esm/contract/spec.d.ts +84 -0
- package/lib/esm/contract/spec.js +107 -3
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/contract/types.d.ts +25 -8
- package/lib/esm/contract/types.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 +15 -35
- package/lib/esm/federation/server.js.map +1 -1
- package/lib/esm/horizon/account_response.js +0 -20
- package/lib/esm/horizon/account_response.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/index.js +27 -29
- 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 +115 -3
- package/lib/esm/rpc/server.js +181 -13
- package/lib/esm/rpc/server.js.map +1 -1
- package/lib/esm/rpc/transaction.js +2 -20
- package/lib/esm/rpc/transaction.js.map +1 -1
- package/lib/esm/webauth/challenge_transaction.js +7 -22
- package/lib/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/esm/webauth/utils.js +1 -20
- package/lib/esm/webauth/utils.js.map +1 -1
- package/package.json +35 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/bindings/utils.ts"],"sourcesContent":["import { xdr } from \"../base/index.js\";\nexport function isNameReserved(name: string): boolean {\n const reservedNames = [\n // Keywords\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n // Future reserved words\n \"enum\",\n // Strict mode reserved words\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n // Contextual keywords\n \"async\",\n \"await\",\n \"constructor\",\n // Literals\n \"null\",\n \"true\",\n \"false\",\n ];\n return reservedNames.includes(name);\n}\n/**\n * Sanitize a name to avoid reserved keywords\n * @param identifier - The identifier to sanitize\n * @returns The sanitized identifier\n */\nexport function sanitizeIdentifier(identifier: string): string {\n // Strip any characters outside the ASCII identifier-safe set [a-zA-Z0-9_$]\n const sanitized = identifier.replace(/[^a-zA-Z0-9_$]/g, \"_\");\n\n if (isNameReserved(sanitized)) {\n return sanitized + \"_\";\n }\n\n if (/^\\d/.test(sanitized)) {\n return \"_\" + sanitized;\n }\n\n // If the identifier was entirely special characters, provide a fallback\n if (sanitized === \"\" || /^_+$/.test(sanitized)) {\n return \"_unnamed\";\n }\n\n return sanitized;\n}\n\n/**\n * Escape a string for safe interpolation inside a double-quoted JavaScript string literal.\n */\nexport function escapeStringLiteral(str: string): string {\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\n/**\n * Generate TypeScript type from XDR type definition\n */\nexport function parseTypeFromTypeDef(\n typeDef: xdr.ScSpecTypeDef,\n isFunctionInput = false,\n): string {\n switch (typeDef.switch()) {\n case xdr.ScSpecType.scSpecTypeVal():\n return \"any\";\n case xdr.ScSpecType.scSpecTypeBool():\n return \"boolean\";\n case xdr.ScSpecType.scSpecTypeVoid():\n return \"null\";\n case xdr.ScSpecType.scSpecTypeError():\n return \"Error\";\n case xdr.ScSpecType.scSpecTypeU32():\n case xdr.ScSpecType.scSpecTypeI32():\n return \"number\";\n case xdr.ScSpecType.scSpecTypeU64():\n case xdr.ScSpecType.scSpecTypeI64():\n case xdr.ScSpecType.scSpecTypeTimepoint():\n case xdr.ScSpecType.scSpecTypeDuration():\n case xdr.ScSpecType.scSpecTypeU128():\n case xdr.ScSpecType.scSpecTypeI128():\n case xdr.ScSpecType.scSpecTypeU256():\n case xdr.ScSpecType.scSpecTypeI256():\n return \"bigint\";\n case xdr.ScSpecType.scSpecTypeBytes():\n case xdr.ScSpecType.scSpecTypeBytesN():\n return \"Buffer\";\n case xdr.ScSpecType.scSpecTypeString():\n return \"string\";\n case xdr.ScSpecType.scSpecTypeSymbol():\n return \"string\";\n case xdr.ScSpecType.scSpecTypeAddress():\n case xdr.ScSpecType.scSpecTypeMuxedAddress(): {\n // function inputs can accept either string or Address\n if (isFunctionInput) {\n return \"string | Address\";\n }\n // Otherwise for backward compatibility use string\n return \"string\";\n }\n case xdr.ScSpecType.scSpecTypeVec(): {\n const vecType = parseTypeFromTypeDef(\n typeDef.vec().elementType(),\n isFunctionInput,\n );\n return `Array<${vecType}>`;\n }\n case xdr.ScSpecType.scSpecTypeMap(): {\n const keyType = parseTypeFromTypeDef(\n typeDef.map().keyType(),\n isFunctionInput,\n );\n const valueType = parseTypeFromTypeDef(\n typeDef.map().valueType(),\n isFunctionInput,\n );\n return `Map<${keyType}, ${valueType}>`;\n }\n case xdr.ScSpecType.scSpecTypeTuple(): {\n const tupleTypes = typeDef\n .tuple()\n .valueTypes()\n .map((t: xdr.ScSpecTypeDef) =>\n parseTypeFromTypeDef(t, isFunctionInput),\n );\n return `[${tupleTypes.join(\", \")}]`;\n }\n case xdr.ScSpecType.scSpecTypeOption(): {\n // Handle nested options\n while (\n typeDef.option().valueType().switch() ===\n xdr.ScSpecType.scSpecTypeOption()\n ) {\n typeDef = typeDef.option().valueType();\n }\n const optionType = parseTypeFromTypeDef(\n typeDef.option().valueType(),\n isFunctionInput,\n );\n\n return `${optionType} | null`;\n }\n case xdr.ScSpecType.scSpecTypeResult(): {\n const okType = parseTypeFromTypeDef(\n typeDef.result().okType(),\n isFunctionInput,\n );\n const errorType = parseTypeFromTypeDef(\n typeDef.result().errorType(),\n isFunctionInput,\n );\n return `Result<${okType}, ${errorType}>`;\n }\n case xdr.ScSpecType.scSpecTypeUdt(): {\n const udtName = sanitizeIdentifier(typeDef.udt().name().toString());\n return udtName;\n }\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Imports needed for generating bindings\n */\nexport interface BindingImports {\n /** Imports needed from type definitions */\n typeFileImports: Set<string>;\n /** Imports needed from the Stellar SDK in the contract namespace */\n stellarContractImports: Set<string>;\n /** Imports needed from Stellar SDK in the global namespace */\n stellarImports: Set<string>;\n /** Whether Buffer import is needed */\n needsBufferImport: boolean;\n}\n\n/**\n * Extract nested type definitions from container types\n */\nfunction extractNestedTypes(typeDef: xdr.ScSpecTypeDef): xdr.ScSpecTypeDef[] {\n switch (typeDef.switch()) {\n case xdr.ScSpecType.scSpecTypeVec():\n return [typeDef.vec().elementType()];\n\n case xdr.ScSpecType.scSpecTypeMap():\n return [typeDef.map().keyType(), typeDef.map().valueType()];\n\n case xdr.ScSpecType.scSpecTypeTuple():\n return typeDef.tuple().valueTypes();\n\n case xdr.ScSpecType.scSpecTypeOption():\n return [typeDef.option().valueType()];\n\n case xdr.ScSpecType.scSpecTypeResult():\n return [typeDef.result().okType(), typeDef.result().errorType()];\n\n default:\n return [];\n }\n}\n\n/**\n * Visitor to collect imports from a single type definition\n */\nfunction visitTypeDef(\n typeDef: xdr.ScSpecTypeDef,\n accumulator: BindingImports,\n): void {\n const typeSwitch = typeDef.switch();\n\n // Handle leaf types (no nested types)\n switch (typeSwitch) {\n case xdr.ScSpecType.scSpecTypeUdt():\n accumulator.typeFileImports.add(\n sanitizeIdentifier(typeDef.udt().name().toString()),\n );\n return;\n\n case xdr.ScSpecType.scSpecTypeAddress():\n case xdr.ScSpecType.scSpecTypeMuxedAddress():\n accumulator.stellarImports.add(\"Address\");\n return;\n\n case xdr.ScSpecType.scSpecTypeBytes():\n case xdr.ScSpecType.scSpecTypeBytesN():\n accumulator.needsBufferImport = true;\n return;\n\n case xdr.ScSpecType.scSpecTypeVal():\n accumulator.stellarImports.add(\"xdr\");\n return;\n\n case xdr.ScSpecType.scSpecTypeResult():\n accumulator.stellarContractImports.add(\"Result\");\n // Fall through to handle nested types\n break;\n\n // Primitive types that need no imports\n case xdr.ScSpecType.scSpecTypeBool():\n case xdr.ScSpecType.scSpecTypeVoid():\n case xdr.ScSpecType.scSpecTypeError():\n case xdr.ScSpecType.scSpecTypeU32():\n case xdr.ScSpecType.scSpecTypeI32():\n case xdr.ScSpecType.scSpecTypeU64():\n case xdr.ScSpecType.scSpecTypeI64():\n case xdr.ScSpecType.scSpecTypeTimepoint():\n case xdr.ScSpecType.scSpecTypeDuration():\n case xdr.ScSpecType.scSpecTypeU128():\n case xdr.ScSpecType.scSpecTypeI128():\n case xdr.ScSpecType.scSpecTypeU256():\n case xdr.ScSpecType.scSpecTypeI256():\n case xdr.ScSpecType.scSpecTypeString():\n case xdr.ScSpecType.scSpecTypeSymbol():\n return;\n }\n\n // Handle container types (have nested types)\n const nestedTypes = extractNestedTypes(typeDef);\n nestedTypes.forEach((nested) => visitTypeDef(nested, accumulator));\n}\n\n/**\n * Generate imports needed for a list of type definitions\n */\nexport function generateTypeImports(\n typeDefs: xdr.ScSpecTypeDef[],\n): BindingImports {\n const imports: BindingImports = {\n typeFileImports: new Set<string>(),\n stellarContractImports: new Set<string>(),\n stellarImports: new Set<string>(),\n needsBufferImport: false,\n };\n\n // Visit each type definition\n typeDefs.forEach((typeDef) => visitTypeDef(typeDef, imports));\n\n return imports;\n}\n\n/**\n * Options for formatting imports\n */\nexport interface FormatImportsOptions {\n /** Whether to include imports from types.ts */\n includeTypeFileImports?: boolean;\n /** Additional imports needed from stellar/stellar-sdk/contract */\n additionalStellarContractImports?: string[];\n /** Additional imports needed from stellar/stellar-sdk */\n additionalStellarImports?: string[];\n}\n\n/**\n * Format imports into import statement strings\n */\nexport function formatImports(\n imports: BindingImports,\n options?: FormatImportsOptions,\n): string {\n const importLines: string[] = [];\n\n const typeFileImports = imports.typeFileImports;\n const stellarContractImports = [\n ...imports.stellarContractImports,\n ...(options?.additionalStellarContractImports || []),\n ];\n const stellarImports = [\n ...imports.stellarImports,\n ...(options?.additionalStellarImports || []),\n ];\n // Type file imports (only if enabled)\n if (options?.includeTypeFileImports && typeFileImports.size > 0) {\n importLines.push(\n `import {${Array.from(typeFileImports).join(\", \")}} from './types.js';`,\n );\n }\n\n // Stellar contract imports\n if (stellarContractImports.length > 0) {\n const uniqueContractImports = Array.from(new Set(stellarContractImports));\n importLines.push(\n `import {${uniqueContractImports.join(\", \")}} from '@stellar/stellar-sdk/contract';`,\n );\n }\n\n // Stellar SDK imports\n if (stellarImports.length > 0) {\n const uniqueStellarImports = Array.from(new Set(stellarImports));\n importLines.push(\n `import {${uniqueStellarImports.join(\", \")}} from '@stellar/stellar-sdk';`,\n );\n }\n\n // Buffer import\n if (imports.needsBufferImport) {\n importLines.push(`import { Buffer } from 'buffer';`);\n }\n\n return importLines.join(\"\\n\");\n}\n\n/**\n * Escape special characters in JSDoc comment content\n */\nfunction escapeJSDocContent(text: string): string {\n return (\n text\n // Escape closing comment sequences that would break the JSDoc block\n .replace(/\\*\\//g, \"* /\")\n // Escape @ symbols at word boundaries to prevent accidental JSDoc tags\n // We allow common JSDoc tags to pass through\n .replace(\n /@(?!(param|returns?|type|throws?|example|deprecated|see|link|since|author|version|description|summary)\\b)/g,\n \"\\\\@\",\n )\n );\n}\n\n/**\n * Format a comment string as JSDoc with proper escaping\n */\nexport function formatJSDocComment(comment: string, indentLevel = 0): string {\n if (comment.trim() === \"\") {\n return \"\";\n }\n const indent = \" \".repeat(indentLevel);\n\n // Escape special characters and split into lines\n const escapedComment = escapeJSDocContent(comment);\n const lines = escapedComment\n .split(\"\\n\")\n .map((line) => `${indent} * ${line}`.trimEnd());\n\n return `${indent}/**\\n${lines.join(\"\\n\")}\\n${indent} */\\n`;\n}\n\nexport function isTupleStruct(udtStruct: xdr.ScSpecUdtStructV0): boolean {\n const fields = udtStruct.fields();\n // A tuple struct has unnamed fields\n return fields.every(\n (field, index) => field.name().toString().trim() === index.toString(),\n );\n}\n"],"names":["xdr"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/bindings/utils.ts"],"sourcesContent":["import { xdr } from \"../base/index.js\";\nexport function isNameReserved(name: string): boolean {\n const reservedNames = [\n // Keywords\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n // Future reserved words\n \"enum\",\n // Strict mode reserved words\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n // Contextual keywords\n \"async\",\n \"await\",\n \"constructor\",\n // Literals\n \"null\",\n \"true\",\n \"false\",\n ];\n return reservedNames.includes(name);\n}\n/**\n * Sanitize a name to avoid reserved keywords\n * @param identifier - The identifier to sanitize\n * @returns The sanitized identifier\n */\nexport function sanitizeIdentifier(identifier: string): string {\n // Strip any characters outside the ASCII identifier-safe set [a-zA-Z0-9_$]\n const sanitized = identifier.replace(/[^a-zA-Z0-9_$]/g, \"_\");\n\n if (isNameReserved(sanitized)) {\n return sanitized + \"_\";\n }\n\n if (/^\\d/.test(sanitized)) {\n return \"_\" + sanitized;\n }\n\n // If the identifier was entirely special characters, provide a fallback\n if (sanitized === \"\" || /^_+$/.test(sanitized)) {\n return \"_unnamed\";\n }\n\n return sanitized;\n}\n\n/**\n * Escape a string for safe interpolation inside a double-quoted JavaScript string literal.\n */\nexport function escapeStringLiteral(str: string): string {\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\n/**\n * Generate TypeScript type from XDR type definition\n */\nexport function parseTypeFromTypeDef(\n typeDef: xdr.ScSpecTypeDef,\n isFunctionInput = false,\n): string {\n switch (typeDef.switch()) {\n case xdr.ScSpecType.scSpecTypeVal():\n return \"any\";\n case xdr.ScSpecType.scSpecTypeBool():\n return \"boolean\";\n case xdr.ScSpecType.scSpecTypeVoid():\n return \"null\";\n case xdr.ScSpecType.scSpecTypeError():\n return \"Error\";\n case xdr.ScSpecType.scSpecTypeU32():\n case xdr.ScSpecType.scSpecTypeI32():\n return \"number\";\n case xdr.ScSpecType.scSpecTypeU64():\n case xdr.ScSpecType.scSpecTypeI64():\n case xdr.ScSpecType.scSpecTypeTimepoint():\n case xdr.ScSpecType.scSpecTypeDuration():\n case xdr.ScSpecType.scSpecTypeU128():\n case xdr.ScSpecType.scSpecTypeI128():\n case xdr.ScSpecType.scSpecTypeU256():\n case xdr.ScSpecType.scSpecTypeI256():\n return \"bigint\";\n case xdr.ScSpecType.scSpecTypeBytes():\n case xdr.ScSpecType.scSpecTypeBytesN():\n return \"Buffer\";\n case xdr.ScSpecType.scSpecTypeString():\n return \"string\";\n case xdr.ScSpecType.scSpecTypeSymbol():\n return \"string\";\n case xdr.ScSpecType.scSpecTypeAddress():\n case xdr.ScSpecType.scSpecTypeMuxedAddress(): {\n // function inputs can accept either string or Address\n if (isFunctionInput) {\n return \"string | Address\";\n }\n // Otherwise for backward compatibility use string\n return \"string\";\n }\n case xdr.ScSpecType.scSpecTypeVec(): {\n const vecType = parseTypeFromTypeDef(\n typeDef.vec().elementType(),\n isFunctionInput,\n );\n return `Array<${vecType}>`;\n }\n case xdr.ScSpecType.scSpecTypeMap(): {\n const keyType = parseTypeFromTypeDef(\n typeDef.map().keyType(),\n isFunctionInput,\n );\n const valueType = parseTypeFromTypeDef(\n typeDef.map().valueType(),\n isFunctionInput,\n );\n return `Map<${keyType}, ${valueType}>`;\n }\n case xdr.ScSpecType.scSpecTypeTuple(): {\n const tupleTypes = typeDef\n .tuple()\n .valueTypes()\n .map((t: xdr.ScSpecTypeDef) =>\n parseTypeFromTypeDef(t, isFunctionInput),\n );\n return `[${tupleTypes.join(\", \")}]`;\n }\n case xdr.ScSpecType.scSpecTypeOption(): {\n // Handle nested options\n while (\n typeDef.option().valueType().switch() ===\n xdr.ScSpecType.scSpecTypeOption()\n ) {\n typeDef = typeDef.option().valueType();\n }\n const optionType = parseTypeFromTypeDef(\n typeDef.option().valueType(),\n isFunctionInput,\n );\n\n return `${optionType} | null`;\n }\n case xdr.ScSpecType.scSpecTypeResult(): {\n const okType = parseTypeFromTypeDef(\n typeDef.result().okType(),\n isFunctionInput,\n );\n const errorType = parseTypeFromTypeDef(\n typeDef.result().errorType(),\n isFunctionInput,\n );\n return `Result<${okType}, ${errorType}>`;\n }\n case xdr.ScSpecType.scSpecTypeUdt(): {\n const udtName = sanitizeIdentifier(typeDef.udt().name().toString());\n return udtName;\n }\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Imports needed for generating bindings\n */\nexport interface BindingImports {\n /** Imports needed from type definitions */\n typeFileImports: Set<string>;\n /** Imports needed from the Stellar SDK in the contract namespace */\n stellarContractImports: Set<string>;\n /** Imports needed from Stellar SDK in the global namespace */\n stellarImports: Set<string>;\n /** Whether Buffer import is needed */\n needsBufferImport: boolean;\n}\n\n/**\n * Extract nested type definitions from container types\n */\nfunction extractNestedTypes(typeDef: xdr.ScSpecTypeDef): xdr.ScSpecTypeDef[] {\n switch (typeDef.switch()) {\n case xdr.ScSpecType.scSpecTypeVec():\n return [typeDef.vec().elementType()];\n\n case xdr.ScSpecType.scSpecTypeMap():\n return [typeDef.map().keyType(), typeDef.map().valueType()];\n\n case xdr.ScSpecType.scSpecTypeTuple():\n return typeDef.tuple().valueTypes();\n\n case xdr.ScSpecType.scSpecTypeOption():\n return [typeDef.option().valueType()];\n\n case xdr.ScSpecType.scSpecTypeResult():\n return [typeDef.result().okType(), typeDef.result().errorType()];\n\n default:\n return [];\n }\n}\n\n/**\n * Visitor to collect imports from a single type definition\n */\nfunction visitTypeDef(\n typeDef: xdr.ScSpecTypeDef,\n accumulator: BindingImports,\n): void {\n const typeSwitch = typeDef.switch();\n\n // Handle leaf types (no nested types)\n switch (typeSwitch) {\n case xdr.ScSpecType.scSpecTypeUdt():\n accumulator.typeFileImports.add(\n sanitizeIdentifier(typeDef.udt().name().toString()),\n );\n return;\n\n case xdr.ScSpecType.scSpecTypeAddress():\n case xdr.ScSpecType.scSpecTypeMuxedAddress():\n accumulator.stellarImports.add(\"Address\");\n return;\n\n case xdr.ScSpecType.scSpecTypeBytes():\n case xdr.ScSpecType.scSpecTypeBytesN():\n accumulator.needsBufferImport = true;\n return;\n\n case xdr.ScSpecType.scSpecTypeVal():\n accumulator.stellarImports.add(\"xdr\");\n return;\n\n case xdr.ScSpecType.scSpecTypeResult():\n accumulator.stellarContractImports.add(\"Result\");\n // Fall through to handle nested types\n break;\n\n // Primitive types that need no imports\n case xdr.ScSpecType.scSpecTypeBool():\n case xdr.ScSpecType.scSpecTypeVoid():\n case xdr.ScSpecType.scSpecTypeError():\n case xdr.ScSpecType.scSpecTypeU32():\n case xdr.ScSpecType.scSpecTypeI32():\n case xdr.ScSpecType.scSpecTypeU64():\n case xdr.ScSpecType.scSpecTypeI64():\n case xdr.ScSpecType.scSpecTypeTimepoint():\n case xdr.ScSpecType.scSpecTypeDuration():\n case xdr.ScSpecType.scSpecTypeU128():\n case xdr.ScSpecType.scSpecTypeI128():\n case xdr.ScSpecType.scSpecTypeU256():\n case xdr.ScSpecType.scSpecTypeI256():\n case xdr.ScSpecType.scSpecTypeString():\n case xdr.ScSpecType.scSpecTypeSymbol():\n return;\n }\n\n // Handle container types (have nested types)\n const nestedTypes = extractNestedTypes(typeDef);\n nestedTypes.forEach((nested) => visitTypeDef(nested, accumulator));\n}\n\n/**\n * Generate imports needed for a list of type definitions\n */\nexport function generateTypeImports(\n typeDefs: xdr.ScSpecTypeDef[],\n): BindingImports {\n const imports: BindingImports = {\n typeFileImports: new Set<string>(),\n stellarContractImports: new Set<string>(),\n stellarImports: new Set<string>(),\n needsBufferImport: false,\n };\n\n // Visit each type definition\n typeDefs.forEach((typeDef) => visitTypeDef(typeDef, imports));\n\n return imports;\n}\n\n/**\n * Options for formatting imports\n */\nexport interface FormatImportsOptions {\n /** Whether to include imports from types.ts */\n includeTypeFileImports?: boolean;\n /** Additional imports needed from stellar/stellar-sdk/contract */\n additionalStellarContractImports?: string[];\n /** Additional imports needed from stellar/stellar-sdk */\n additionalStellarImports?: string[];\n}\n\n/**\n * Format imports into import statement strings\n */\nexport function formatImports(\n imports: BindingImports,\n options?: FormatImportsOptions,\n): string {\n const importLines: string[] = [];\n\n const typeFileImports = imports.typeFileImports;\n const stellarContractImports = [\n ...imports.stellarContractImports,\n ...(options?.additionalStellarContractImports || []),\n ];\n const stellarImports = [\n ...imports.stellarImports,\n ...(options?.additionalStellarImports || []),\n ];\n // Type file imports (only if enabled)\n if (options?.includeTypeFileImports && typeFileImports.size > 0) {\n importLines.push(\n `import {${Array.from(typeFileImports).join(\", \")}} from './types.js';`,\n );\n }\n\n // Stellar contract imports\n if (stellarContractImports.length > 0) {\n const uniqueContractImports = Array.from(new Set(stellarContractImports));\n importLines.push(\n `import {${uniqueContractImports.join(\", \")}} from '@stellar/stellar-sdk/contract';`,\n );\n }\n\n // Stellar SDK imports\n if (stellarImports.length > 0) {\n const uniqueStellarImports = Array.from(new Set(stellarImports));\n importLines.push(\n `import {${uniqueStellarImports.join(\", \")}} from '@stellar/stellar-sdk';`,\n );\n }\n\n // Buffer import\n if (imports.needsBufferImport) {\n importLines.push(`import { Buffer } from 'buffer';`);\n }\n\n return importLines.join(\"\\n\");\n}\n\n/**\n * Escape special characters in JSDoc comment content\n */\nfunction escapeJSDocContent(text: string): string {\n return (\n text\n // Escape closing comment sequences that would break the JSDoc block\n .replace(/\\*\\//g, \"* /\")\n // Escape @ symbols at word boundaries to prevent accidental JSDoc tags\n // We allow common JSDoc tags to pass through\n .replace(\n /@(?!(param|returns?|type|throws?|example|deprecated|see|link|since|author|version|description|summary)\\b)/g,\n \"\\\\@\",\n )\n );\n}\n\n/**\n * Format a comment string as JSDoc with proper escaping\n */\nexport function formatJSDocComment(comment: string, indentLevel = 0): string {\n if (comment.trim() === \"\") {\n return \"\";\n }\n const indent = \" \".repeat(indentLevel);\n\n // Escape special characters and split into lines\n const escapedComment = escapeJSDocContent(comment);\n const lines = escapedComment\n .split(\"\\n\")\n .map((line) => `${indent} * ${line}`.trimEnd());\n\n return `${indent}/**\\n${lines.join(\"\\n\")}\\n${indent} */\\n`;\n}\n\n/**\n * Convert a sanitized identifier (snake_case, kebab-case, etc.) to PascalCase.\n * Intended to be applied after {@link sanitizeIdentifier}.\n */\nexport function toPascalCase(identifier: string): string {\n const pascal = identifier\n .split(/[_$]+/)\n .filter((part) => part.length > 0)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n\n return pascal === \"\" ? \"Unnamed\" : pascal;\n}\n\n/**\n * Convert a sanitized identifier (snake_case, kebab-case, etc.) to camelCase.\n * Intended to be applied after {@link sanitizeIdentifier}.\n */\nexport function toCamelCase(identifier: string): string {\n const pascal = toPascalCase(identifier);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nexport function isTupleStruct(udtStruct: xdr.ScSpecUdtStructV0): boolean {\n const fields = udtStruct.fields();\n // A tuple struct has unnamed fields\n return fields.every(\n (field, index) => field.name().toString().trim() === index.toString(),\n );\n}\n"],"names":["xdr"],"mappings":"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"}
|
package/lib/cjs/cli/index.js
CHANGED
|
@@ -4,27 +4,7 @@ var commander = require('commander');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var wasm_fetcher = require('../bindings/wasm_fetcher.js');
|
|
6
6
|
var util = require('./util.js');
|
|
7
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/int.js');
|
|
8
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/hyper.js');
|
|
9
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js');
|
|
10
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js');
|
|
11
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js');
|
|
12
|
-
require('buffer');
|
|
13
|
-
require('../base/generated/curr_generated.js');
|
|
14
|
-
require('@noble/hashes/sha2.js');
|
|
15
|
-
require('../base/signing.js');
|
|
16
|
-
require('../base/keypair.js');
|
|
17
|
-
require('base32.js');
|
|
18
|
-
require('../base/util/continued_fraction.js');
|
|
19
|
-
require('../base/util/bignumber.js');
|
|
20
|
-
require('../base/transaction_builder.js');
|
|
21
|
-
require('../base/muxed_account.js');
|
|
22
7
|
var network = require('../base/network.js');
|
|
23
|
-
require('../base/scval.js');
|
|
24
|
-
require('../base/numbers/uint128.js');
|
|
25
|
-
require('../base/numbers/uint256.js');
|
|
26
|
-
require('../base/numbers/int128.js');
|
|
27
|
-
require('../base/numbers/int256.js');
|
|
28
8
|
|
|
29
9
|
function _interopNamespace(e) {
|
|
30
10
|
if (e && e.__esModule) return e;
|
|
@@ -126,7 +106,7 @@ function runCli() {
|
|
|
126
106
|
let timeout;
|
|
127
107
|
if (options.timeout) {
|
|
128
108
|
timeout = parseInt(options.timeout, 10);
|
|
129
|
-
if (
|
|
109
|
+
if (!/^\d+$/.test(options.timeout.trim()) || timeout <= 0) {
|
|
130
110
|
throw new Error(
|
|
131
111
|
`Invalid timeout value: ${options.timeout}. Must be a positive integer.`
|
|
132
112
|
);
|
|
@@ -147,11 +127,28 @@ function runCli() {
|
|
|
147
127
|
`
|
|
148
128
|
\u2713 Generating TypeScript bindings for "${contractName}"...`
|
|
149
129
|
);
|
|
150
|
-
await util.generateAndWrite(generator, {
|
|
130
|
+
const bindings = await util.generateAndWrite(generator, {
|
|
151
131
|
contractName,
|
|
152
132
|
outputDir: path__namespace.resolve(options.outputDir),
|
|
153
133
|
overwrite: options.overwrite
|
|
154
134
|
});
|
|
135
|
+
for (const d of bindings.diagnostics) {
|
|
136
|
+
if (d.declarations > 1) {
|
|
137
|
+
console.warn(
|
|
138
|
+
`
|
|
139
|
+
\u26A0 Event "${d.rawName}" is declared ${d.declarations} times; declaration ${d.occurrence + 1} generated as ${d.interfaceName} with filter ${d.filterMethodName}(). Review the generated bindings to confirm which declaration you need.`
|
|
140
|
+
);
|
|
141
|
+
} else {
|
|
142
|
+
const renamed = [
|
|
143
|
+
...d.interfaceRenamed ? [d.interfaceName] : [],
|
|
144
|
+
...d.filterMethodRenamed ? [`${d.filterMethodName}()`] : []
|
|
145
|
+
];
|
|
146
|
+
console.warn(
|
|
147
|
+
`
|
|
148
|
+
\u26A0 Event "${d.rawName}": generated name${renamed.length > 1 ? "s" : ""} ${renamed.join(" and ")} ${renamed.length > 1 ? "were" : "was"} renamed to avoid a collision with another generated name.`
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
155
152
|
console.log(
|
|
156
153
|
`
|
|
157
154
|
\u2713 Successfully generated bindings in ${options.outputDir}`
|
package/lib/cjs/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/cli/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport * as path from \"path\";\n\nimport { WasmFetchError } from \"../bindings/wasm_fetcher.js\";\nimport {\n createGenerator,\n generateAndWrite,\n logSourceInfo,\n deriveContractName,\n} from \"./util.js\";\nimport { Networks } from \"../base/index.js\";\n\n// Default RPC URLs for each network\nconst NETWORK_CONFIG: Record<\n string,\n { passphrase: string; rpcUrl: string | null }\n> = {\n testnet: {\n passphrase: Networks.TESTNET,\n rpcUrl: \"https://soroban-testnet.stellar.org\",\n },\n mainnet: {\n passphrase: Networks.PUBLIC,\n rpcUrl: null, // User must provide their own\n },\n futurenet: {\n passphrase: Networks.FUTURENET,\n rpcUrl: \"https://rpc-futurenet.stellar.org\",\n },\n localnet: {\n passphrase: Networks.STANDALONE,\n rpcUrl: \"http://localhost:8000/rpc\",\n },\n};\n\nfunction runCli() {\n const program = new Command();\n\n program\n .name(\"stellar-cli\")\n .description(\"CLI for generating TypeScript bindings for Stellar contracts\")\n .version(\"1.0.0\");\n\n program\n .command(\"generate\")\n .description(\"Generate TypeScript bindings for a Stellar contract\")\n .helpOption(\"-h, --help\", \"Display help for command\")\n .option(\"--wasm <path>\", \"Path to local WASM file\")\n .option(\"--wasm-hash <hash>\", \"Hash of WASM blob on network\")\n .option(\"--contract-id <id>\", \"Contract ID on network\")\n .option(\"--rpc-url <url>\", \"RPC server URL\")\n .option(\n \"--network <network>\",\n \"Network options to use: mainnet, testnet, futurenet, or localnet\",\n )\n .option(\"--output-dir <dir>\", \"Output directory for generated bindings\")\n .option(\n \"--allow-http\",\n \"Allow insecure HTTP connections to RPC server\",\n false,\n )\n .option(\"--timeout <ms>\", \"RPC request timeout in milliseconds\")\n .option(\n \"--headers <json>\",\n 'Custom headers as JSON object (e.g., \\'{\"Authorization\": \"Bearer token\"}\\')',\n )\n .option(\n \"--contract-name <name>\",\n \"Name for the generated contract client class\",\n )\n .option(\"--overwrite\", \"Overwrite existing files\", false)\n .action(async (options) => {\n try {\n // Map network to passphrase and default RPC URL\n let networkPassphrase: string | undefined;\n let rpcUrl: string | undefined = options.rpcUrl;\n let allowHttp: boolean = options.allowHttp;\n\n if (options.network) {\n const network = options.network.toLowerCase();\n const config = NETWORK_CONFIG[network];\n\n if (!config) {\n throw new Error(\n `\\n✗ Invalid network: ${options.network}. Must be mainnet, testnet, futurenet, or localnet`,\n );\n }\n\n networkPassphrase = config.passphrase;\n\n // Use default RPC URL if not provided (only needed for network sources)\n const needsRpcUrl = options.wasmHash || options.contractId;\n if (!rpcUrl && needsRpcUrl) {\n if (config.rpcUrl) {\n rpcUrl = config.rpcUrl;\n console.log(`Using default RPC URL for ${network}: ${rpcUrl}`);\n\n // Auto-enable allowHttp for localnet when using default HTTP URL\n if (network === \"localnet\" && !options.allowHttp) {\n allowHttp = true;\n }\n } else if (network === \"mainnet\") {\n throw new Error(\n `\\n✗ --rpc-url is required for mainnet. Find RPC providers at: https://developers.stellar.org/docs/data/rpc/rpc-providers`,\n );\n }\n }\n }\n\n if (options.outputDir === undefined) {\n throw new Error(\"Output directory (--output-dir) is required\");\n }\n\n // Parse headers JSON if provided\n let headers: Record<string, string> | undefined;\n if (options.headers) {\n try {\n headers = JSON.parse(options.headers);\n } catch {\n throw new Error(`Invalid JSON for --headers: ${options.headers}`);\n }\n }\n\n // Parse timeout if provided\n let timeout: number | undefined;\n if (options.timeout) {\n timeout = parseInt(options.timeout, 10);\n if (Number.isNaN(timeout) || timeout <= 0) {\n throw new Error(\n `Invalid timeout value: ${options.timeout}. Must be a positive integer.`,\n );\n }\n }\n\n console.log(\"Fetching contract...\");\n\n const { generator, source } = await createGenerator({\n wasm: options.wasm,\n wasmHash: options.wasmHash,\n contractId: options.contractId,\n rpcUrl,\n networkPassphrase,\n serverOptions: { allowHttp, timeout, headers },\n });\n\n logSourceInfo(source);\n\n // Derive contract name from source or use provided/default\n const contractName =\n options.contractName || deriveContractName(source) || \"contract\";\n console.log(\n `\\n✓ Generating TypeScript bindings for \"${contractName}\"...`,\n );\n\n await generateAndWrite(generator, {\n contractName,\n outputDir: path.resolve(options.outputDir),\n overwrite: options.overwrite,\n });\n\n console.log(\n `\\n✓ Successfully generated bindings in ${options.outputDir}`,\n );\n console.log(`\\nUsage:`);\n console.log(\n ` import { Client } from './${path.basename(options.outputDir)}';`,\n );\n } catch (error) {\n if (error instanceof WasmFetchError) {\n console.error(`\\n✗ Error: ${error.message}`);\n if (error.cause) {\n console.error(` Caused by: ${error.cause.message}`);\n }\n } else if (error instanceof Error) {\n console.error(`\\n✗ Error: ${error.message}`);\n } else {\n console.error(`\\n✗ Unexpected error:`, error);\n }\n process.exit(1);\n }\n });\n program.parse();\n}\n\nexport { runCli };\n"],"names":["Networks","Command","createGenerator","logSourceInfo","deriveContractName","generateAndWrite","path","WasmFetchError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/cli/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport * as path from \"path\";\n\nimport { WasmFetchError } from \"../bindings/wasm_fetcher.js\";\nimport {\n createGenerator,\n generateAndWrite,\n logSourceInfo,\n deriveContractName,\n} from \"./util.js\";\nimport { Networks } from \"../base/index.js\";\n\n// Default RPC URLs for each network\nconst NETWORK_CONFIG: Record<\n string,\n { passphrase: string; rpcUrl: string | null }\n> = {\n testnet: {\n passphrase: Networks.TESTNET,\n rpcUrl: \"https://soroban-testnet.stellar.org\",\n },\n mainnet: {\n passphrase: Networks.PUBLIC,\n rpcUrl: null, // User must provide their own\n },\n futurenet: {\n passphrase: Networks.FUTURENET,\n rpcUrl: \"https://rpc-futurenet.stellar.org\",\n },\n localnet: {\n passphrase: Networks.STANDALONE,\n rpcUrl: \"http://localhost:8000/rpc\",\n },\n};\n\nfunction runCli() {\n const program = new Command();\n\n program\n .name(\"stellar-cli\")\n .description(\"CLI for generating TypeScript bindings for Stellar contracts\")\n .version(\"1.0.0\");\n\n program\n .command(\"generate\")\n .description(\"Generate TypeScript bindings for a Stellar contract\")\n .helpOption(\"-h, --help\", \"Display help for command\")\n .option(\"--wasm <path>\", \"Path to local WASM file\")\n .option(\"--wasm-hash <hash>\", \"Hash of WASM blob on network\")\n .option(\"--contract-id <id>\", \"Contract ID on network\")\n .option(\"--rpc-url <url>\", \"RPC server URL\")\n .option(\n \"--network <network>\",\n \"Network options to use: mainnet, testnet, futurenet, or localnet\",\n )\n .option(\"--output-dir <dir>\", \"Output directory for generated bindings\")\n .option(\n \"--allow-http\",\n \"Allow insecure HTTP connections to RPC server\",\n false,\n )\n .option(\"--timeout <ms>\", \"RPC request timeout in milliseconds\")\n .option(\n \"--headers <json>\",\n 'Custom headers as JSON object (e.g., \\'{\"Authorization\": \"Bearer token\"}\\')',\n )\n .option(\n \"--contract-name <name>\",\n \"Name for the generated contract client class\",\n )\n .option(\"--overwrite\", \"Overwrite existing files\", false)\n .action(async (options) => {\n try {\n // Map network to passphrase and default RPC URL\n let networkPassphrase: string | undefined;\n let rpcUrl: string | undefined = options.rpcUrl;\n let allowHttp: boolean = options.allowHttp;\n\n if (options.network) {\n const network = options.network.toLowerCase();\n const config = NETWORK_CONFIG[network];\n\n if (!config) {\n throw new Error(\n `\\n✗ Invalid network: ${options.network}. Must be mainnet, testnet, futurenet, or localnet`,\n );\n }\n\n networkPassphrase = config.passphrase;\n\n // Use default RPC URL if not provided (only needed for network sources)\n const needsRpcUrl = options.wasmHash || options.contractId;\n if (!rpcUrl && needsRpcUrl) {\n if (config.rpcUrl) {\n rpcUrl = config.rpcUrl;\n console.log(`Using default RPC URL for ${network}: ${rpcUrl}`);\n\n // Auto-enable allowHttp for localnet when using default HTTP URL\n if (network === \"localnet\" && !options.allowHttp) {\n allowHttp = true;\n }\n } else if (network === \"mainnet\") {\n throw new Error(\n `\\n✗ --rpc-url is required for mainnet. Find RPC providers at: https://developers.stellar.org/docs/data/rpc/rpc-providers`,\n );\n }\n }\n }\n\n if (options.outputDir === undefined) {\n throw new Error(\"Output directory (--output-dir) is required\");\n }\n\n // Parse headers JSON if provided\n let headers: Record<string, string> | undefined;\n if (options.headers) {\n try {\n headers = JSON.parse(options.headers);\n } catch {\n throw new Error(`Invalid JSON for --headers: ${options.headers}`);\n }\n }\n\n // Parse timeout if provided\n let timeout: number | undefined;\n if (options.timeout) {\n timeout = parseInt(options.timeout, 10);\n // require digits only, so values parseInt would otherwise silently\n // truncate (\"10abc\" -> 10, \"10.9\" -> 10) are rejected\n if (!/^\\d+$/.test(options.timeout.trim()) || timeout <= 0) {\n throw new Error(\n `Invalid timeout value: ${options.timeout}. Must be a positive integer.`,\n );\n }\n }\n\n console.log(\"Fetching contract...\");\n\n const { generator, source } = await createGenerator({\n wasm: options.wasm,\n wasmHash: options.wasmHash,\n contractId: options.contractId,\n rpcUrl,\n networkPassphrase,\n serverOptions: { allowHttp, timeout, headers },\n });\n\n logSourceInfo(source);\n\n // Derive contract name from source or use provided/default\n const contractName =\n options.contractName || deriveContractName(source) || \"contract\";\n console.log(\n `\\n✓ Generating TypeScript bindings for \"${contractName}\"...`,\n );\n\n const bindings = await generateAndWrite(generator, {\n contractName,\n outputDir: path.resolve(options.outputDir),\n overwrite: options.overwrite,\n });\n\n for (const d of bindings.diagnostics) {\n if (d.declarations > 1) {\n console.warn(\n `\\n⚠ Event \"${d.rawName}\" is declared ${d.declarations} times; ` +\n `declaration ${d.occurrence + 1} generated as ` +\n `${d.interfaceName} with filter ${d.filterMethodName}(). ` +\n `Review the generated bindings to confirm which declaration ` +\n `you need.`,\n );\n } else {\n const renamed = [\n ...(d.interfaceRenamed ? [d.interfaceName] : []),\n ...(d.filterMethodRenamed ? [`${d.filterMethodName}()`] : []),\n ];\n console.warn(\n `\\n⚠ Event \"${d.rawName}\": generated name` +\n `${renamed.length > 1 ? \"s\" : \"\"} ${renamed.join(\" and \")} ` +\n `${renamed.length > 1 ? \"were\" : \"was\"} renamed to avoid a ` +\n `collision with another generated name.`,\n );\n }\n }\n\n console.log(\n `\\n✓ Successfully generated bindings in ${options.outputDir}`,\n );\n console.log(`\\nUsage:`);\n console.log(\n ` import { Client } from './${path.basename(options.outputDir)}';`,\n );\n } catch (error) {\n if (error instanceof WasmFetchError) {\n console.error(`\\n✗ Error: ${error.message}`);\n if (error.cause) {\n console.error(` Caused by: ${error.cause.message}`);\n }\n } else if (error instanceof Error) {\n console.error(`\\n✗ Error: ${error.message}`);\n } else {\n console.error(`\\n✗ Unexpected error:`, error);\n }\n process.exit(1);\n }\n });\n program.parse();\n}\n\nexport { runCli };\n"],"names":["Networks","Command","createGenerator","logSourceInfo","deriveContractName","generateAndWrite","path","WasmFetchError"],"mappings":"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"}
|
package/lib/cjs/cli/util.js
CHANGED
|
@@ -3,26 +3,6 @@
|
|
|
3
3
|
var fs = require('fs/promises');
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var generator = require('../bindings/generator.js');
|
|
6
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/int.js');
|
|
7
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/hyper.js');
|
|
8
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js');
|
|
9
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js');
|
|
10
|
-
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js');
|
|
11
|
-
require('buffer');
|
|
12
|
-
require('../base/generated/curr_generated.js');
|
|
13
|
-
require('@noble/hashes/sha2.js');
|
|
14
|
-
require('../base/signing.js');
|
|
15
|
-
require('../base/keypair.js');
|
|
16
|
-
require('base32.js');
|
|
17
|
-
require('../base/util/continued_fraction.js');
|
|
18
|
-
require('../base/util/bignumber.js');
|
|
19
|
-
require('../base/transaction_builder.js');
|
|
20
|
-
require('../base/muxed_account.js');
|
|
21
|
-
require('../base/scval.js');
|
|
22
|
-
require('../base/numbers/uint128.js');
|
|
23
|
-
require('../base/numbers/uint256.js');
|
|
24
|
-
require('../base/numbers/int128.js');
|
|
25
|
-
require('../base/numbers/int256.js');
|
|
26
6
|
var wasm_fetcher = require('../bindings/wasm_fetcher.js');
|
|
27
7
|
var server = require('../rpc/server.js');
|
|
28
8
|
|
|
@@ -147,6 +127,7 @@ async function generateAndWrite(generator, options) {
|
|
|
147
127
|
const { outputDir, overwrite = false, ...genOptions } = options;
|
|
148
128
|
const bindings = generator.generate(genOptions);
|
|
149
129
|
await writeBindings(outputDir, bindings, overwrite);
|
|
130
|
+
return bindings;
|
|
150
131
|
}
|
|
151
132
|
function logSourceInfo(source) {
|
|
152
133
|
console.log("\nSource:");
|
package/lib/cjs/cli/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sources":["../../../src/cli/util.ts"],"sourcesContent":["import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport {\n BindingGenerator,\n type GeneratedBindings,\n type GenerateOptions,\n} from \"../bindings/generator.js\";\nimport { WasmFetchError } from \"../bindings/index.js\";\nimport { RpcServer } from \"../rpc/server.js\";\n\nexport type GenerateAndWriteOptions = GenerateOptions & {\n outputDir: string;\n overwrite?: boolean;\n};\n\n/**\n * Source information about where the contract was fetched from\n */\nexport type ContractSource =\n | { type: \"file\"; path: string }\n | { type: \"wasm-hash\"; hash: string; rpcUrl: string; network: string }\n | {\n type: \"contract-id\";\n contractId: string;\n rpcUrl: string;\n network: string;\n };\n\nexport type CreateGeneratorArgs = {\n wasm?: string;\n wasmHash?: string;\n contractId?: string;\n rpcUrl?: string;\n networkPassphrase?: string;\n serverOptions?: RpcServer.Options;\n};\n\nexport type CreateGeneratorResult = {\n generator: BindingGenerator;\n source: ContractSource;\n};\n\n/**\n * Verify that the server is on the expected network\n */\nasync function verifyNetwork(\n server: RpcServer,\n expectedPassphrase: string,\n): Promise<void> {\n const networkResponse = await server.getNetwork();\n if (networkResponse.passphrase !== expectedPassphrase) {\n throw new WasmFetchError(\n `Network mismatch: expected \"${expectedPassphrase}\", got \"${networkResponse.passphrase}\"`,\n );\n }\n}\n\n/**\n * Create a BindingGenerator from local file, network hash, or contract ID\n */\nexport async function createGenerator(\n args: CreateGeneratorArgs,\n): Promise<CreateGeneratorResult> {\n // Validate exactly one source is provided\n const sources = [args.wasm, args.wasmHash, args.contractId].filter(Boolean);\n if (sources.length === 0) {\n throw new WasmFetchError(\n \"Must provide one of: --wasm, --wasm-hash, or --contract-id\",\n );\n }\n if (sources.length > 1) {\n throw new WasmFetchError(\n \"Must provide only one of: --wasm, --wasm-hash, or --contract-id\",\n );\n }\n\n // Local WASM file\n if (args.wasm) {\n const wasmBuffer = await fs.readFile(args.wasm);\n return {\n generator: BindingGenerator.fromWasm(wasmBuffer),\n source: { type: \"file\", path: args.wasm },\n };\n }\n\n // Network sources require RPC URL and network\n if (!args.rpcUrl) {\n throw new WasmFetchError(\n \"--rpc-url is required when fetching from network\",\n );\n }\n if (!args.networkPassphrase) {\n throw new WasmFetchError(\n \"--network is required when fetching from network\",\n );\n }\n\n const server = new RpcServer(args.rpcUrl, args.serverOptions);\n await verifyNetwork(server, args.networkPassphrase);\n\n // WASM hash\n if (args.wasmHash) {\n return {\n generator: await BindingGenerator.fromWasmHash(args.wasmHash, server),\n source: {\n type: \"wasm-hash\",\n hash: args.wasmHash,\n rpcUrl: args.rpcUrl,\n network: args.networkPassphrase,\n },\n };\n }\n\n if (args.contractId) {\n const generator = await BindingGenerator.fromContractId(\n args.contractId,\n server,\n );\n return {\n generator,\n source: {\n type: \"contract-id\",\n contractId: args.contractId,\n rpcUrl: args.rpcUrl,\n network: args.networkPassphrase,\n },\n };\n }\n\n throw new WasmFetchError(\"Invalid arguments\");\n}\n\n/**\n * Write generated bindings to disk\n */\nexport async function writeBindings(\n outputDir: string,\n bindings: GeneratedBindings,\n overwrite: boolean,\n): Promise<void> {\n // Check if output directory exists\n try {\n const stat = await fs.stat(outputDir);\n if (stat.isFile()) {\n throw new Error(`Output path is a file: ${outputDir}`);\n }\n if (!overwrite) {\n throw new Error(`Directory exists (use --overwrite): ${outputDir}`);\n }\n await fs.rm(outputDir, { recursive: true, force: true });\n } catch (error: any) {\n if (error.code !== \"ENOENT\") throw error;\n }\n\n await fs.mkdir(path.join(outputDir, \"src\"), { recursive: true });\n\n const writes = [\n fs.writeFile(path.join(outputDir, \"src/index.ts\"), bindings.index),\n fs.writeFile(path.join(outputDir, \"src/client.ts\"), bindings.client),\n fs.writeFile(path.join(outputDir, \".gitignore\"), bindings.gitignore),\n fs.writeFile(path.join(outputDir, \"README.md\"), bindings.readme),\n fs.writeFile(path.join(outputDir, \"package.json\"), bindings.packageJson),\n fs.writeFile(path.join(outputDir, \"tsconfig.json\"), bindings.tsConfig),\n ];\n\n if (bindings.types.trim()) {\n writes.push(\n fs.writeFile(path.join(outputDir, \"src/types.ts\"), bindings.types),\n );\n }\n\n await Promise.all(writes);\n}\n/**\n * Generate and write bindings to disk\n */\nexport async function generateAndWrite(\n generator: BindingGenerator,\n options: GenerateAndWriteOptions,\n): Promise<void> {\n const { outputDir, overwrite = false, ...genOptions } = options;\n const bindings = generator.generate(genOptions);\n await writeBindings(outputDir, bindings, overwrite);\n}\n\n/**\n * Log source information\n */\nexport function logSourceInfo(source: ContractSource): void {\n console.log(\"\\nSource:\");\n switch (source.type) {\n case \"file\":\n console.log(` Type: Local file`);\n console.log(` Path: ${source.path}`);\n break;\n case \"wasm-hash\":\n console.log(` Type: WASM hash`);\n console.log(` Hash: ${source.hash}`);\n console.log(` RPC: ${source.rpcUrl}`);\n console.log(` Network: ${source.network}`);\n break;\n case \"contract-id\":\n console.log(` Type: Contract ID`);\n console.log(` Address: ${source.contractId}`);\n console.log(` RPC: ${source.rpcUrl}`);\n console.log(` Network: ${source.network}`);\n break;\n }\n}\n\n/**\n * Derive contract name from source path\n */\nexport function deriveContractName(source: ContractSource): string | null {\n if (source.type !== \"file\") return null;\n\n return path\n .basename(source.path, path.extname(source.path))\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/_/g, \"-\")\n .toLowerCase();\n}\n"],"names":["WasmFetchError","fs","BindingGenerator","server","RpcServer","generator","path"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../src/cli/util.ts"],"sourcesContent":["import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport {\n BindingGenerator,\n type GeneratedBindings,\n type GenerateOptions,\n} from \"../bindings/generator.js\";\nimport { WasmFetchError } from \"../bindings/index.js\";\nimport { RpcServer } from \"../rpc/server.js\";\n\nexport type GenerateAndWriteOptions = GenerateOptions & {\n outputDir: string;\n overwrite?: boolean;\n};\n\n/**\n * Source information about where the contract was fetched from\n */\nexport type ContractSource =\n | { type: \"file\"; path: string }\n | { type: \"wasm-hash\"; hash: string; rpcUrl: string; network: string }\n | {\n type: \"contract-id\";\n contractId: string;\n rpcUrl: string;\n network: string;\n };\n\nexport type CreateGeneratorArgs = {\n wasm?: string;\n wasmHash?: string;\n contractId?: string;\n rpcUrl?: string;\n networkPassphrase?: string;\n serverOptions?: RpcServer.Options;\n};\n\nexport type CreateGeneratorResult = {\n generator: BindingGenerator;\n source: ContractSource;\n};\n\n/**\n * Verify that the server is on the expected network\n */\nasync function verifyNetwork(\n server: RpcServer,\n expectedPassphrase: string,\n): Promise<void> {\n const networkResponse = await server.getNetwork();\n if (networkResponse.passphrase !== expectedPassphrase) {\n throw new WasmFetchError(\n `Network mismatch: expected \"${expectedPassphrase}\", got \"${networkResponse.passphrase}\"`,\n );\n }\n}\n\n/**\n * Create a BindingGenerator from local file, network hash, or contract ID\n */\nexport async function createGenerator(\n args: CreateGeneratorArgs,\n): Promise<CreateGeneratorResult> {\n // Validate exactly one source is provided\n const sources = [args.wasm, args.wasmHash, args.contractId].filter(Boolean);\n if (sources.length === 0) {\n throw new WasmFetchError(\n \"Must provide one of: --wasm, --wasm-hash, or --contract-id\",\n );\n }\n if (sources.length > 1) {\n throw new WasmFetchError(\n \"Must provide only one of: --wasm, --wasm-hash, or --contract-id\",\n );\n }\n\n // Local WASM file\n if (args.wasm) {\n const wasmBuffer = await fs.readFile(args.wasm);\n return {\n generator: BindingGenerator.fromWasm(wasmBuffer),\n source: { type: \"file\", path: args.wasm },\n };\n }\n\n // Network sources require RPC URL and network\n if (!args.rpcUrl) {\n throw new WasmFetchError(\n \"--rpc-url is required when fetching from network\",\n );\n }\n if (!args.networkPassphrase) {\n throw new WasmFetchError(\n \"--network is required when fetching from network\",\n );\n }\n\n const server = new RpcServer(args.rpcUrl, args.serverOptions);\n await verifyNetwork(server, args.networkPassphrase);\n\n // WASM hash\n if (args.wasmHash) {\n return {\n generator: await BindingGenerator.fromWasmHash(args.wasmHash, server),\n source: {\n type: \"wasm-hash\",\n hash: args.wasmHash,\n rpcUrl: args.rpcUrl,\n network: args.networkPassphrase,\n },\n };\n }\n\n if (args.contractId) {\n const generator = await BindingGenerator.fromContractId(\n args.contractId,\n server,\n );\n return {\n generator,\n source: {\n type: \"contract-id\",\n contractId: args.contractId,\n rpcUrl: args.rpcUrl,\n network: args.networkPassphrase,\n },\n };\n }\n\n throw new WasmFetchError(\"Invalid arguments\");\n}\n\n/**\n * Write generated bindings to disk\n */\nexport async function writeBindings(\n outputDir: string,\n bindings: GeneratedBindings,\n overwrite: boolean,\n): Promise<void> {\n // Check if output directory exists\n try {\n const stat = await fs.stat(outputDir);\n if (stat.isFile()) {\n throw new Error(`Output path is a file: ${outputDir}`);\n }\n if (!overwrite) {\n throw new Error(`Directory exists (use --overwrite): ${outputDir}`);\n }\n await fs.rm(outputDir, { recursive: true, force: true });\n } catch (error: any) {\n if (error.code !== \"ENOENT\") throw error;\n }\n\n await fs.mkdir(path.join(outputDir, \"src\"), { recursive: true });\n\n const writes = [\n fs.writeFile(path.join(outputDir, \"src/index.ts\"), bindings.index),\n fs.writeFile(path.join(outputDir, \"src/client.ts\"), bindings.client),\n fs.writeFile(path.join(outputDir, \".gitignore\"), bindings.gitignore),\n fs.writeFile(path.join(outputDir, \"README.md\"), bindings.readme),\n fs.writeFile(path.join(outputDir, \"package.json\"), bindings.packageJson),\n fs.writeFile(path.join(outputDir, \"tsconfig.json\"), bindings.tsConfig),\n ];\n\n if (bindings.types.trim()) {\n writes.push(\n fs.writeFile(path.join(outputDir, \"src/types.ts\"), bindings.types),\n );\n }\n\n await Promise.all(writes);\n}\n/**\n * Generate and write bindings to disk\n */\nexport async function generateAndWrite(\n generator: BindingGenerator,\n options: GenerateAndWriteOptions,\n): Promise<GeneratedBindings> {\n const { outputDir, overwrite = false, ...genOptions } = options;\n const bindings = generator.generate(genOptions);\n await writeBindings(outputDir, bindings, overwrite);\n return bindings;\n}\n\n/**\n * Log source information\n */\nexport function logSourceInfo(source: ContractSource): void {\n console.log(\"\\nSource:\");\n switch (source.type) {\n case \"file\":\n console.log(` Type: Local file`);\n console.log(` Path: ${source.path}`);\n break;\n case \"wasm-hash\":\n console.log(` Type: WASM hash`);\n console.log(` Hash: ${source.hash}`);\n console.log(` RPC: ${source.rpcUrl}`);\n console.log(` Network: ${source.network}`);\n break;\n case \"contract-id\":\n console.log(` Type: Contract ID`);\n console.log(` Address: ${source.contractId}`);\n console.log(` RPC: ${source.rpcUrl}`);\n console.log(` Network: ${source.network}`);\n break;\n }\n}\n\n/**\n * Derive contract name from source path\n */\nexport function deriveContractName(source: ContractSource): string | null {\n if (source.type !== \"file\") return null;\n\n return path\n .basename(source.path, path.extname(source.path))\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/_/g, \"-\")\n .toLowerCase();\n}\n"],"names":["WasmFetchError","fs","BindingGenerator","server","RpcServer","generator","path"],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ require('../base/numbers/uint128.js');
|
|
|
24
24
|
require('../base/numbers/uint256.js');
|
|
25
25
|
require('../base/numbers/int128.js');
|
|
26
26
|
require('../base/numbers/int256.js');
|
|
27
|
+
var signer = require('./signer.js');
|
|
27
28
|
var api = require('../rpc/api.js');
|
|
28
29
|
var server = require('../rpc/server.js');
|
|
29
30
|
var transaction = require('../rpc/transaction.js');
|
|
@@ -341,7 +342,10 @@ class AssembledTransaction {
|
|
|
341
342
|
await tx.simulate({ restore: false });
|
|
342
343
|
return tx;
|
|
343
344
|
}
|
|
344
|
-
simulate = async ({
|
|
345
|
+
simulate = async ({
|
|
346
|
+
restore,
|
|
347
|
+
useUpgradedAuth
|
|
348
|
+
} = {}) => {
|
|
345
349
|
if (!this.built) {
|
|
346
350
|
if (!this.raw) {
|
|
347
351
|
throw new Error(
|
|
@@ -351,9 +355,15 @@ class AssembledTransaction {
|
|
|
351
355
|
this.built = this.raw.build();
|
|
352
356
|
}
|
|
353
357
|
restore = restore ?? this.options.restore;
|
|
358
|
+
useUpgradedAuth = useUpgradedAuth ?? this.options.useUpgradedAuth;
|
|
354
359
|
delete this.simulationResult;
|
|
355
360
|
delete this.simulationTransactionData;
|
|
356
|
-
this.simulation = await this.server.simulateTransaction(
|
|
361
|
+
this.simulation = await this.server.simulateTransaction(
|
|
362
|
+
this.built,
|
|
363
|
+
void 0,
|
|
364
|
+
void 0,
|
|
365
|
+
useUpgradedAuth
|
|
366
|
+
);
|
|
357
367
|
if (restore && api.Api.isSimulationRestore(this.simulation)) {
|
|
358
368
|
const account = await utils.getAccount(this.options, this.server);
|
|
359
369
|
const result = await this.restoreFootprint(
|
|
@@ -370,7 +380,7 @@ class AssembledTransaction {
|
|
|
370
380
|
networkPassphrase: this.options.networkPassphrase
|
|
371
381
|
}).addOperation(op).setTimeout(this.options.timeoutInSeconds ?? types.DEFAULT_TIMEOUT);
|
|
372
382
|
delete this.built;
|
|
373
|
-
await this.simulate();
|
|
383
|
+
await this.simulate({ useUpgradedAuth });
|
|
374
384
|
return this;
|
|
375
385
|
}
|
|
376
386
|
throw new AssembledTransaction.Errors.RestorationFailure(
|
|
@@ -455,7 +465,11 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
455
465
|
"This is a read call. It requires no signature or sending. Use `force: true` to sign and send anyway."
|
|
456
466
|
);
|
|
457
467
|
}
|
|
458
|
-
|
|
468
|
+
const signTx = signer.toSignTransaction(
|
|
469
|
+
signTransaction,
|
|
470
|
+
this.options.networkPassphrase
|
|
471
|
+
);
|
|
472
|
+
if (!signTx) {
|
|
459
473
|
throw new AssembledTransaction.Errors.NoSigner(
|
|
460
474
|
"You must provide a signTransaction function, either when calling `signAndSend` or when initializing your Client"
|
|
461
475
|
);
|
|
@@ -486,7 +500,7 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
486
500
|
if (this.options.submit !== void 0)
|
|
487
501
|
signOpts.submit = this.options.submit;
|
|
488
502
|
if (this.options.submitUrl) signOpts.submitUrl = this.options.submitUrl;
|
|
489
|
-
const { signedTxXdr: signature, error } = await
|
|
503
|
+
const { signedTxXdr: signature, error } = await signTx(
|
|
490
504
|
this.built.toXDR(),
|
|
491
505
|
signOpts
|
|
492
506
|
);
|
|
@@ -525,8 +539,11 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
525
539
|
watcher
|
|
526
540
|
} = {}) => {
|
|
527
541
|
if (!this.signed) {
|
|
528
|
-
const signer =
|
|
529
|
-
|
|
542
|
+
const signer$1 = signer.toSignTransaction(
|
|
543
|
+
signTransaction || this.options.signTransaction,
|
|
544
|
+
this.options.networkPassphrase
|
|
545
|
+
);
|
|
546
|
+
const wrappedSignTransaction = this.options.submit && signer$1 ? (tx, opts) => signer$1(tx, { ...opts, submit: false }) : signTransaction;
|
|
530
547
|
await this.sign({ force, signTransaction: wrappedSignTransaction });
|
|
531
548
|
}
|
|
532
549
|
return this.send(watcher);
|
|
@@ -566,15 +583,16 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
566
583
|
const rawInvokeHostFunctionOp = this.built.operations[0];
|
|
567
584
|
return [
|
|
568
585
|
...new Set(
|
|
569
|
-
(rawInvokeHostFunctionOp.auth ?? []).map((entry) => auth.
|
|
570
|
-
(
|
|
586
|
+
(rawInvokeHostFunctionOp.auth ?? []).map((entry) => auth.inspectAuthEntry(entry)).filter(
|
|
587
|
+
(info) => (
|
|
571
588
|
// skip source-account credentials (no address payload), which
|
|
572
|
-
// are covered by the envelope signature on the source account
|
|
573
|
-
|
|
589
|
+
// are covered by the envelope signature on the source account.
|
|
590
|
+
// Only the top-level credentials (signers[0]) matter here — this
|
|
591
|
+
// method reports (and signAuthEntries signs) the top-level
|
|
592
|
+
// address, so unsigned delegate nodes must not keep it listed.
|
|
593
|
+
info.address !== null && (includeAlreadySigned || !info.signers[0].signed)
|
|
574
594
|
)
|
|
575
|
-
).map(
|
|
576
|
-
(addrAuth) => address.Address.fromScAddress(addrAuth.address()).toString()
|
|
577
|
-
)
|
|
595
|
+
).map((info) => info.address)
|
|
578
596
|
)
|
|
579
597
|
];
|
|
580
598
|
};
|
|
@@ -597,11 +615,15 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
597
615
|
signAuthEntries = async ({
|
|
598
616
|
expiration = (async () => (await this.server.getLatestLedger()).sequence + 100)(),
|
|
599
617
|
signAuthEntry = this.options.signAuthEntry,
|
|
600
|
-
address: address$1 = this.options.publicKey,
|
|
618
|
+
address: address$1 = signer.signerAddress(signAuthEntry) ?? this.options.publicKey,
|
|
601
619
|
authorizeEntry = auth.authorizeEntry
|
|
602
620
|
} = {}) => {
|
|
603
621
|
if (!this.built)
|
|
604
622
|
throw new Error("Transaction has not yet been assembled or simulated");
|
|
623
|
+
const signAuth = signer.toSignAuthEntry(
|
|
624
|
+
signAuthEntry,
|
|
625
|
+
this.options.networkPassphrase
|
|
626
|
+
);
|
|
605
627
|
if (authorizeEntry === auth.authorizeEntry) {
|
|
606
628
|
const needsNonInvokerSigningBy = this.needsNonInvokerSigningBy();
|
|
607
629
|
if (needsNonInvokerSigningBy.length === 0) {
|
|
@@ -614,7 +636,7 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
614
636
|
`No auth entries for public key "${address$1}"`
|
|
615
637
|
);
|
|
616
638
|
}
|
|
617
|
-
if (!
|
|
639
|
+
if (!signAuth) {
|
|
618
640
|
throw new AssembledTransaction.Errors.NoSigner(
|
|
619
641
|
"You must provide `signAuthEntry` or a custom `authorizeEntry`"
|
|
620
642
|
);
|
|
@@ -634,7 +656,7 @@ You can set \`restore\` to true in the method options in order to automatically
|
|
|
634
656
|
addrAuth.address()
|
|
635
657
|
).toString();
|
|
636
658
|
if (authEntryAddress !== address$1) continue;
|
|
637
|
-
const sign =
|
|
659
|
+
const sign = signAuth ?? Promise.resolve;
|
|
638
660
|
authEntries[i] = await authorizeEntry(
|
|
639
661
|
entry,
|
|
640
662
|
async (preimage) => {
|