@solana/errors 2.0.0-experimental.025ef21

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/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2023 Solana Labs, Inc
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ [![npm][npm-image]][npm-url]
2
+ [![npm-downloads][npm-downloads-image]][npm-url]
3
+ [![semantic-release][semantic-release-image]][semantic-release-url]
4
+ <br />
5
+ [![code-style-prettier][code-style-prettier-image]][code-style-prettier-url]
6
+
7
+ [code-style-prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square
8
+ [code-style-prettier-url]: https://github.com/prettier/prettier
9
+ [npm-downloads-image]: https://img.shields.io/npm/dm/@solana/errors/experimental.svg?style=flat
10
+ [npm-image]: https://img.shields.io/npm/v/@solana/errors/experimental.svg?style=flat
11
+ [npm-url]: https://www.npmjs.com/package/@solana/errors/v/experimental
12
+ [semantic-release-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
13
+ [semantic-release-url]: https://github.com/semantic-release/semantic-release
14
+
15
+ # @solana/errors
16
+
17
+ This package brings together every error message across all Solana JavaScript modules.
18
+
19
+ ## Reading error messages
20
+
21
+ ### In development mode
22
+
23
+ When your bundler sets the constant `__DEV__` to `true`, every error message will be included in the bundle. As such, you will be able to read them in plain language wherever they appear.
24
+
25
+ > [!WARNING]
26
+ > The size of your JavaScript bundle will increase significantly with the inclusion of every error message in development mode. Be sure to build your bundle with `__DEV__` set to `false` when you go to production.
27
+
28
+ ### In production mode
29
+
30
+ When your bundler sets the constant `__DEV__` to `false`, error messages will be stripped from the bundle to save space. Only the error code will appear when an error is encountered. Follow the instructions in the error message to convert the error code back to the human-readable error message.
31
+
32
+ For instance, to recover the error text for the error with code `123`:
33
+
34
+ ```shell
35
+ npx @solana/errors decode 123
36
+ ```
37
+
38
+ ## Adding a new error
39
+
40
+ 1. Add a new exported error code constant to `src/codes.ts`.
41
+ 2. Add that new constant to the `SolanaErrorCode` union in `src/codes.ts`.
42
+ 3. If you would like the new error to encapsulate context about the error itself (eg. the public keys for which a transaction is missing signatures) define the shape of that context in `src/details.ts`.
43
+ 4. Add the error's message to `src/messages.ts`. Any context values that you defined above will be interpolated into the message wherever you write `$key`, where `key` is the index of a value in the context (eg. ``'Missing a signature for account `$address`'``).
44
+ 5. Publish a new version of `@solana/errors`.
45
+ 6. Bump the version of `@solana/errors` in the package from which the error is thrown.
46
+
47
+ ## Removing an error message
48
+
49
+ - Don't remove errors.
50
+ - Don't change the meaning of an error message.
51
+ - Don't change or reorder error codes.
52
+ - Don't change or remove members of an error's context.
53
+
54
+ When an older client throws an error, we want to make sure that they can always decode the error. If you make any of the changes above, old clients will, by definition, not have received your changes. This could make the errors that they throw impossible to decode going forward.
55
+
56
+ ## Catching errors
57
+
58
+ When you catch a `SolanaError` and assert its error code using `isSolanaError()`, TypeScript will refine the error's context to the type associated with that error code. You can use that context to render useful error messages, or to make context-aware decisions that help your application to recover from the error.
59
+
60
+ ```ts
61
+ import {
62
+ SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURE,
63
+ SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,
64
+ isSolanaError,
65
+ } from '@solana/errors';
66
+ import { assertTransactionIsFullySigned, getSignatureFromTransaction } from '@solana/transactions';
67
+
68
+ try {
69
+ const transactionSignature = getSignatureFromTransaction(tx);
70
+ assertTransactionIsFullySigned(tx);
71
+ /* ... */
72
+ } catch (e) {
73
+ if (isSolanaError(e, SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES)) {
74
+ displayError(
75
+ "We can't send this transaction without signatures for these addresses:\n- %s",
76
+ // The type of the `context` object is now refined to contain `addresses`.
77
+ e.context.addresses.join('\n- '),
78
+ );
79
+ return;
80
+ } else if (isSolanaError(e, SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE)) {
81
+ if (!tx.feePayer) {
82
+ displayError('Choose a fee payer for this transaction before sending it');
83
+ } else {
84
+ displayError('The fee payer still needs to sign for this transaction');
85
+ }
86
+ return;
87
+ }
88
+ throw e;
89
+ }
90
+ ```
package/bin/cli.js ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env -S node
2
+
3
+ import process from 'node:process';
4
+
5
+ import { run } from '../dist/cli.js';
6
+
7
+ run(process.argv);
package/dist/cli.js ADDED
@@ -0,0 +1,64 @@
1
+ // src/cli.ts
2
+ import chalk from "chalk";
3
+ import { Command, InvalidArgumentError } from "commander";
4
+
5
+ // package.json
6
+ var version = "2.0.0-development";
7
+
8
+ // src/codes.ts
9
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
10
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
11
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
12
+
13
+ // src/messages.ts
14
+ var SolanaErrorMessages = {
15
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
16
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
17
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
18
+ };
19
+
20
+ // src/message-formatter.ts
21
+ function getHumanReadableErrorMessage(code, context = {}) {
22
+ const messageFormatString = SolanaErrorMessages[code];
23
+ const message = messageFormatString.replace(
24
+ /(?<!\\)\$(\w+)/g,
25
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
26
+ );
27
+ return message;
28
+ }
29
+
30
+ // src/cli.ts
31
+ var program = new Command();
32
+ program.name("@solana/errors").description("Decode Solana JavaScript errors thrown in production").version(version);
33
+ program.command("decode").description("Decode a `SolanaErrorCode` to a human-readable message").argument("<code>", "numeric error code to decode", (rawCode) => {
34
+ const code = parseInt(rawCode, 10);
35
+ if (isNaN(code) || `${code}` !== rawCode) {
36
+ throw new InvalidArgumentError("It must be an integer");
37
+ }
38
+ if (!(code in SolanaErrorMessages)) {
39
+ throw new InvalidArgumentError("There exists no error with that code");
40
+ }
41
+ return code;
42
+ }).argument(
43
+ "[encodedContext]",
44
+ "encoded context to interpolate into the error message",
45
+ (encodedContext) => Object.fromEntries(new URLSearchParams(encodedContext).entries())
46
+ ).action((code, context) => {
47
+ const message = getHumanReadableErrorMessage(code, context);
48
+ console.log(`
49
+ ${chalk.bold(
50
+ chalk.rgb(154, 71, 255)("[") + chalk.rgb(144, 108, 244)("D") + chalk.rgb(134, 135, 233)("e") + chalk.rgb(122, 158, 221)("c") + chalk.rgb(110, 178, 209)("o") + chalk.rgb(95, 195, 196)("d") + chalk.rgb(79, 212, 181)("e") + chalk.rgb(57, 227, 166)("d") + chalk.rgb(19, 241, 149)("]")
51
+ ) + chalk.rgb(19, 241, 149)(" Solana error code #" + code)}
52
+ - ${message}`);
53
+ if (context) {
54
+ console.log(`
55
+ ${chalk.yellowBright(chalk.bold("[Context]"))}
56
+ ${JSON.stringify(context, null, 4).split("\n").join("\n ")}`);
57
+ }
58
+ });
59
+ function run(argv) {
60
+ program.parse(argv);
61
+ }
62
+ export {
63
+ run
64
+ };
@@ -0,0 +1,101 @@
1
+ 'use strict';
2
+
3
+ // ../build-scripts/env-shim.ts
4
+ var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
5
+
6
+ // src/codes.ts
7
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
8
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
9
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
10
+
11
+ // src/messages.ts
12
+ var SolanaErrorMessages = {
13
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
14
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
15
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
16
+ };
17
+
18
+ // src/message-formatter.ts
19
+ function encodeValue(value) {
20
+ if (Array.isArray(value)) {
21
+ return (
22
+ /* "[" */
23
+ "%5B" + value.map(
24
+ (element) => typeof element === "string" ? encodeURIComponent(`"${element.replace(/"/g, '\\"')}"`) : encodeValue(element)
25
+ ).join(
26
+ /* ", " */
27
+ "%2C%20"
28
+ ) + /* "]" */
29
+ "%5D"
30
+ );
31
+ } else if (typeof value === "bigint") {
32
+ return `${value}n`;
33
+ } else {
34
+ return encodeURIComponent(
35
+ String(
36
+ Object.getPrototypeOf(value) === null ? (
37
+ // Plain objects with no protoype don't have a `toString` method.
38
+ // Convert them before stringifying them.
39
+ { ...value }
40
+ ) : value
41
+ )
42
+ );
43
+ }
44
+ }
45
+ function encodeObjectContextEntry([key, value]) {
46
+ return `${key}=${encodeValue(value)}`;
47
+ }
48
+ function encodeContextObject(context) {
49
+ return Object.entries(context).map(encodeObjectContextEntry).join("&");
50
+ }
51
+ function getHumanReadableErrorMessage(code, context = {}) {
52
+ const messageFormatString = SolanaErrorMessages[code];
53
+ const message = messageFormatString.replace(
54
+ /(?<!\\)\$(\w+)/g,
55
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
56
+ );
57
+ return message;
58
+ }
59
+ function getErrorMessage(code, context = {}) {
60
+ if (__DEV__) {
61
+ return getHumanReadableErrorMessage(code, context);
62
+ } else {
63
+ let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \`npx @solana/errors decode ${code}`;
64
+ if (Object.keys(context).length) {
65
+ decodingAdviceMessage += ` $"${encodeContextObject(context)}"`;
66
+ }
67
+ return `${decodingAdviceMessage}\``;
68
+ }
69
+ }
70
+
71
+ // src/error.ts
72
+ function isSolanaError(e, code) {
73
+ const isSolanaError2 = e instanceof Error && e.name === "SolanaError";
74
+ if (isSolanaError2) {
75
+ if (code !== void 0) {
76
+ return e.context.__code === code;
77
+ }
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+ var SolanaError = class extends Error {
83
+ context;
84
+ constructor(...[code, context]) {
85
+ const message = getErrorMessage(code, context);
86
+ super(message);
87
+ this.context = {
88
+ __code: code,
89
+ ...context
90
+ };
91
+ this.name = "SolanaError";
92
+ }
93
+ };
94
+
95
+ exports.SOLANA_ERROR__RPC_INTEGER_OVERFLOW = SOLANA_ERROR__RPC_INTEGER_OVERFLOW;
96
+ exports.SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES;
97
+ exports.SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE;
98
+ exports.SolanaError = SolanaError;
99
+ exports.isSolanaError = isSolanaError;
100
+ //# sourceMappingURL=out.js.map
101
+ //# sourceMappingURL=index.browser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../build-scripts/env-shim.ts","../src/codes.ts","../src/messages.ts","../src/message-formatter.ts","../src/error.ts"],"names":["isSolanaError"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACOhG,IAAM,+CAA+C;AACrD,IAAM,qDAAqD;AAC3D,IAAM,qCAAqC;;;ACI3C,IAAM,sBAIR;AAAA,EACD,CAAC,kCAAkC,GAC/B;AAAA,EAGJ,CAAC,4CAA4C,GAAG;AAAA,EAChD,CAAC,kDAAkD,GAC/C;AAER;;;ACxBA,SAAS,YAAY,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB;AAAA;AAAA,MACc,QACV,MACK;AAAA,QAAI,aACD,OAAO,YAAY,WACb,mBAAmB,IAAI,QAAQ,QAAQ,MAAM,KAAK,CAAC,GAAG,IACtD,YAAY,OAAO;AAAA,MAC7B,EACC;AAAA;AAAA,QAAgB;AAAA,MAAQ;AAAA,MACnB;AAAA;AAAA,EAElB,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,GAAG,KAAK;AAAA,EACnB,OAAO;AACH,WAAO;AAAA,MACH;AAAA,QACI,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA;AAAA,UAG3B,EAAE,GAAI,MAAiB;AAAA,YACvB;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,yBAAyB,CAAC,KAAK,KAAK,GAAiD;AAC1F,SAAO,GAAG,GAAG,IAAI,YAAY,KAAK,CAAC;AACvC;AAEA,SAAS,oBAAoB,SAAiB;AAC1C,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,wBAAwB,EAAE,KAAK,GAAG;AACzE;AAEO,SAAS,6BACZ,MACA,UAAkB,CAAC,GACb;AACN,QAAM,sBAAsB,oBAAoB,IAAI;AACpD,QAAM,UAAU,oBAAoB;AAAA,IAAQ;AAAA,IAAmB,CAAC,WAAW,iBACvE,gBAAgB,UAAU,GAAG,QAAQ,YAAoC,CAAC,KAAK;AAAA,EACnF;AACA,SAAO;AACX;AAEO,SAAS,gBAAoD,MAAkB,UAAkB,CAAC,GAAW;AAChH,MAAI,SAAS;AACT,WAAO,6BAA6B,MAAM,OAAO;AAAA,EACrD,OAAO;AACH,QAAI,wBAAwB,iBAAiB,IAAI,8DAA8D,IAAI;AACnH,QAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAM7B,+BAAyB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC/D;AACA,WAAO,GAAG,qBAAqB;AAAA,EACnC;AACJ;;;AC7DO,SAAS,cACZ,GACA,MAC4B;AAC5B,QAAMA,iBAAgB,aAAa,SAAS,EAAE,SAAS;AACvD,MAAIA,gBAAe;AACf,QAAI,SAAS,QAAW;AACpB,aAAQ,EAA8B,QAAQ,WAAW;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAQO,IAAM,cAAN,cAAgF,MAAM;AAAA,EAChF;AAAA,EACT,eACO,CAAC,MAAM,OAAO,GAGnB;AACE,UAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,UAAM,OAAO;AACb,SAAK,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,GAAG;AAAA,IACP;AAGA,SAAK,OAAO;AAAA,EAChB;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't remove error codes\n * - Don't change or reorder error codes.\n */\nexport const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1 as const;\nexport const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2 as const;\nexport const SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3 as const;\n\n/**\n * A union of every Solana error code\n *\n * You might be wondering why this is not a TypeScript enum or const enum.\n *\n * One of the goals of this library is to enable people to use some or none of it without having to\n * bundle all of it.\n *\n * If we made the set of error codes an enum then anyone who imported it (even if to only use a\n * single error code) would be forced to bundle every code and its label.\n *\n * Const enums appear to solve this problem by letting the compiler inline only the codes that are\n * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`\n * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850\n */\nexport type SolanaErrorCode =\n | typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES\n | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE\n | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;\n","import {\n SOLANA_ERROR__RPC_INTEGER_OVERFLOW,\n SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES,\n SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,\n SolanaErrorCode,\n} from './codes';\n\n/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't change the meaning of an error message.\n */\nexport const SolanaErrorMessages: Readonly<{\n // This type makes this data structure exhaustive with respect to `SolanaErrorCode`.\n // TypeScript will fail to build this project if add an error code without a message.\n [P in SolanaErrorCode]: string;\n}> = {\n [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]:\n 'The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was ' +\n '`$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`',\n [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: 'Transaction is missing signatures for addresses: $addresses',\n [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]:\n \"Could not determine this transaction's signature. Make sure that the transaction has \" +\n 'been signed by its fee payer.',\n};\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorMessages } from './messages';\n\nfunction encodeValue(value: unknown): string {\n if (Array.isArray(value)) {\n return (\n /* \"[\" */ '%5B' +\n value\n .map(element =>\n typeof element === 'string'\n ? encodeURIComponent(`\"${element.replace(/\"/g, '\\\\\"')}\"`)\n : encodeValue(element),\n )\n .join(/* \", \" */ '%2C%20') +\n /* \"]\" */ '%5D'\n );\n } else if (typeof value === 'bigint') {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n Object.getPrototypeOf(value) === null\n ? // Plain objects with no protoype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...(value as object) }\n : value,\n ),\n );\n }\n}\n\nfunction encodeObjectContextEntry([key, value]: [string, unknown]): `${typeof key}=${string}` {\n return `${key}=${encodeValue(value)}`;\n}\n\nfunction encodeContextObject(context: object) {\n return Object.entries(context).map(encodeObjectContextEntry).join('&');\n}\n\nexport function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(\n code: TErrorCode,\n context: object = {},\n): string {\n const messageFormatString = SolanaErrorMessages[code];\n const message = messageFormatString.replace(/(?<!\\\\)\\$(\\w+)/g, (substring, variableName) =>\n variableName in context ? `${context[variableName as keyof typeof context]}` : substring,\n );\n return message;\n}\n\nexport function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context: object = {}): string {\n if (__DEV__) {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode ${code}`;\n if (Object.keys(context).length) {\n /**\n * DANGER: Be sure that the shell command is escaped in such a way that makes it\n * impossible for someone to craft malicious context values that would result in\n * an exploit against anyone who bindly copy/pastes it into their terminal.\n */\n decodingAdviceMessage += ` $\"${encodeContextObject(context)}\"`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorContext } from './context';\nimport { getErrorMessage } from './message-formatter';\n\nexport function isSolanaError<TErrorCode extends SolanaErrorCode>(\n e: unknown,\n code?: TErrorCode,\n): e is SolanaError<TErrorCode> {\n const isSolanaError = e instanceof Error && e.name === 'SolanaError';\n if (isSolanaError) {\n if (code !== undefined) {\n return (e as SolanaError<TErrorCode>).context.__code === code;\n }\n return true;\n }\n return false;\n}\n\ntype SolanaErrorCodedContext = Readonly<{\n [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {\n __code: P;\n };\n}>;\n\nexport class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {\n readonly context: SolanaErrorCodedContext[TErrorCode];\n constructor(\n ...[code, context]: SolanaErrorContext[TErrorCode] extends undefined\n ? [code: TErrorCode]\n : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]\n ) {\n const message = getErrorMessage(code, context);\n super(message);\n this.context = {\n __code: code,\n ...context,\n } as SolanaErrorCodedContext[TErrorCode];\n // This is necessary so that `isSolanaError()` can identify a `SolanaError` without having\n // to import the class for use in an `instanceof` check.\n this.name = 'SolanaError';\n }\n}\n"]}
@@ -0,0 +1,95 @@
1
+ // ../build-scripts/env-shim.ts
2
+ var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
3
+
4
+ // src/codes.ts
5
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
6
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
7
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
8
+
9
+ // src/messages.ts
10
+ var SolanaErrorMessages = {
11
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
12
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
13
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
14
+ };
15
+
16
+ // src/message-formatter.ts
17
+ function encodeValue(value) {
18
+ if (Array.isArray(value)) {
19
+ return (
20
+ /* "[" */
21
+ "%5B" + value.map(
22
+ (element) => typeof element === "string" ? encodeURIComponent(`"${element.replace(/"/g, '\\"')}"`) : encodeValue(element)
23
+ ).join(
24
+ /* ", " */
25
+ "%2C%20"
26
+ ) + /* "]" */
27
+ "%5D"
28
+ );
29
+ } else if (typeof value === "bigint") {
30
+ return `${value}n`;
31
+ } else {
32
+ return encodeURIComponent(
33
+ String(
34
+ Object.getPrototypeOf(value) === null ? (
35
+ // Plain objects with no protoype don't have a `toString` method.
36
+ // Convert them before stringifying them.
37
+ { ...value }
38
+ ) : value
39
+ )
40
+ );
41
+ }
42
+ }
43
+ function encodeObjectContextEntry([key, value]) {
44
+ return `${key}=${encodeValue(value)}`;
45
+ }
46
+ function encodeContextObject(context) {
47
+ return Object.entries(context).map(encodeObjectContextEntry).join("&");
48
+ }
49
+ function getHumanReadableErrorMessage(code, context = {}) {
50
+ const messageFormatString = SolanaErrorMessages[code];
51
+ const message = messageFormatString.replace(
52
+ /(?<!\\)\$(\w+)/g,
53
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
54
+ );
55
+ return message;
56
+ }
57
+ function getErrorMessage(code, context = {}) {
58
+ if (__DEV__) {
59
+ return getHumanReadableErrorMessage(code, context);
60
+ } else {
61
+ let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \`npx @solana/errors decode ${code}`;
62
+ if (Object.keys(context).length) {
63
+ decodingAdviceMessage += ` $"${encodeContextObject(context)}"`;
64
+ }
65
+ return `${decodingAdviceMessage}\``;
66
+ }
67
+ }
68
+
69
+ // src/error.ts
70
+ function isSolanaError(e, code) {
71
+ const isSolanaError2 = e instanceof Error && e.name === "SolanaError";
72
+ if (isSolanaError2) {
73
+ if (code !== void 0) {
74
+ return e.context.__code === code;
75
+ }
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ var SolanaError = class extends Error {
81
+ context;
82
+ constructor(...[code, context]) {
83
+ const message = getErrorMessage(code, context);
84
+ super(message);
85
+ this.context = {
86
+ __code: code,
87
+ ...context
88
+ };
89
+ this.name = "SolanaError";
90
+ }
91
+ };
92
+
93
+ export { SOLANA_ERROR__RPC_INTEGER_OVERFLOW, SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES, SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE, SolanaError, isSolanaError };
94
+ //# sourceMappingURL=out.js.map
95
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../build-scripts/env-shim.ts","../src/codes.ts","../src/messages.ts","../src/message-formatter.ts","../src/error.ts"],"names":["isSolanaError"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACOhG,IAAM,+CAA+C;AACrD,IAAM,qDAAqD;AAC3D,IAAM,qCAAqC;;;ACI3C,IAAM,sBAIR;AAAA,EACD,CAAC,kCAAkC,GAC/B;AAAA,EAGJ,CAAC,4CAA4C,GAAG;AAAA,EAChD,CAAC,kDAAkD,GAC/C;AAER;;;ACxBA,SAAS,YAAY,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB;AAAA;AAAA,MACc,QACV,MACK;AAAA,QAAI,aACD,OAAO,YAAY,WACb,mBAAmB,IAAI,QAAQ,QAAQ,MAAM,KAAK,CAAC,GAAG,IACtD,YAAY,OAAO;AAAA,MAC7B,EACC;AAAA;AAAA,QAAgB;AAAA,MAAQ;AAAA,MACnB;AAAA;AAAA,EAElB,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,GAAG,KAAK;AAAA,EACnB,OAAO;AACH,WAAO;AAAA,MACH;AAAA,QACI,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA;AAAA,UAG3B,EAAE,GAAI,MAAiB;AAAA,YACvB;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,yBAAyB,CAAC,KAAK,KAAK,GAAiD;AAC1F,SAAO,GAAG,GAAG,IAAI,YAAY,KAAK,CAAC;AACvC;AAEA,SAAS,oBAAoB,SAAiB;AAC1C,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,wBAAwB,EAAE,KAAK,GAAG;AACzE;AAEO,SAAS,6BACZ,MACA,UAAkB,CAAC,GACb;AACN,QAAM,sBAAsB,oBAAoB,IAAI;AACpD,QAAM,UAAU,oBAAoB;AAAA,IAAQ;AAAA,IAAmB,CAAC,WAAW,iBACvE,gBAAgB,UAAU,GAAG,QAAQ,YAAoC,CAAC,KAAK;AAAA,EACnF;AACA,SAAO;AACX;AAEO,SAAS,gBAAoD,MAAkB,UAAkB,CAAC,GAAW;AAChH,MAAI,SAAS;AACT,WAAO,6BAA6B,MAAM,OAAO;AAAA,EACrD,OAAO;AACH,QAAI,wBAAwB,iBAAiB,IAAI,8DAA8D,IAAI;AACnH,QAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAM7B,+BAAyB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC/D;AACA,WAAO,GAAG,qBAAqB;AAAA,EACnC;AACJ;;;AC7DO,SAAS,cACZ,GACA,MAC4B;AAC5B,QAAMA,iBAAgB,aAAa,SAAS,EAAE,SAAS;AACvD,MAAIA,gBAAe;AACf,QAAI,SAAS,QAAW;AACpB,aAAQ,EAA8B,QAAQ,WAAW;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAQO,IAAM,cAAN,cAAgF,MAAM;AAAA,EAChF;AAAA,EACT,eACO,CAAC,MAAM,OAAO,GAGnB;AACE,UAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,UAAM,OAAO;AACb,SAAK,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,GAAG;AAAA,IACP;AAGA,SAAK,OAAO;AAAA,EAChB;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't remove error codes\n * - Don't change or reorder error codes.\n */\nexport const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1 as const;\nexport const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2 as const;\nexport const SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3 as const;\n\n/**\n * A union of every Solana error code\n *\n * You might be wondering why this is not a TypeScript enum or const enum.\n *\n * One of the goals of this library is to enable people to use some or none of it without having to\n * bundle all of it.\n *\n * If we made the set of error codes an enum then anyone who imported it (even if to only use a\n * single error code) would be forced to bundle every code and its label.\n *\n * Const enums appear to solve this problem by letting the compiler inline only the codes that are\n * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`\n * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850\n */\nexport type SolanaErrorCode =\n | typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES\n | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE\n | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;\n","import {\n SOLANA_ERROR__RPC_INTEGER_OVERFLOW,\n SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES,\n SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,\n SolanaErrorCode,\n} from './codes';\n\n/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't change the meaning of an error message.\n */\nexport const SolanaErrorMessages: Readonly<{\n // This type makes this data structure exhaustive with respect to `SolanaErrorCode`.\n // TypeScript will fail to build this project if add an error code without a message.\n [P in SolanaErrorCode]: string;\n}> = {\n [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]:\n 'The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was ' +\n '`$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`',\n [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: 'Transaction is missing signatures for addresses: $addresses',\n [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]:\n \"Could not determine this transaction's signature. Make sure that the transaction has \" +\n 'been signed by its fee payer.',\n};\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorMessages } from './messages';\n\nfunction encodeValue(value: unknown): string {\n if (Array.isArray(value)) {\n return (\n /* \"[\" */ '%5B' +\n value\n .map(element =>\n typeof element === 'string'\n ? encodeURIComponent(`\"${element.replace(/\"/g, '\\\\\"')}\"`)\n : encodeValue(element),\n )\n .join(/* \", \" */ '%2C%20') +\n /* \"]\" */ '%5D'\n );\n } else if (typeof value === 'bigint') {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n Object.getPrototypeOf(value) === null\n ? // Plain objects with no protoype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...(value as object) }\n : value,\n ),\n );\n }\n}\n\nfunction encodeObjectContextEntry([key, value]: [string, unknown]): `${typeof key}=${string}` {\n return `${key}=${encodeValue(value)}`;\n}\n\nfunction encodeContextObject(context: object) {\n return Object.entries(context).map(encodeObjectContextEntry).join('&');\n}\n\nexport function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(\n code: TErrorCode,\n context: object = {},\n): string {\n const messageFormatString = SolanaErrorMessages[code];\n const message = messageFormatString.replace(/(?<!\\\\)\\$(\\w+)/g, (substring, variableName) =>\n variableName in context ? `${context[variableName as keyof typeof context]}` : substring,\n );\n return message;\n}\n\nexport function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context: object = {}): string {\n if (__DEV__) {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode ${code}`;\n if (Object.keys(context).length) {\n /**\n * DANGER: Be sure that the shell command is escaped in such a way that makes it\n * impossible for someone to craft malicious context values that would result in\n * an exploit against anyone who bindly copy/pastes it into their terminal.\n */\n decodingAdviceMessage += ` $\"${encodeContextObject(context)}\"`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorContext } from './context';\nimport { getErrorMessage } from './message-formatter';\n\nexport function isSolanaError<TErrorCode extends SolanaErrorCode>(\n e: unknown,\n code?: TErrorCode,\n): e is SolanaError<TErrorCode> {\n const isSolanaError = e instanceof Error && e.name === 'SolanaError';\n if (isSolanaError) {\n if (code !== undefined) {\n return (e as SolanaError<TErrorCode>).context.__code === code;\n }\n return true;\n }\n return false;\n}\n\ntype SolanaErrorCodedContext = Readonly<{\n [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {\n __code: P;\n };\n}>;\n\nexport class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {\n readonly context: SolanaErrorCodedContext[TErrorCode];\n constructor(\n ...[code, context]: SolanaErrorContext[TErrorCode] extends undefined\n ? [code: TErrorCode]\n : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]\n ) {\n const message = getErrorMessage(code, context);\n super(message);\n this.context = {\n __code: code,\n ...context,\n } as SolanaErrorCodedContext[TErrorCode];\n // This is necessary so that `isSolanaError()` can identify a `SolanaError` without having\n // to import the class for use in an `instanceof` check.\n this.name = 'SolanaError';\n }\n}\n"]}
@@ -0,0 +1,95 @@
1
+ // ../build-scripts/env-shim.ts
2
+ var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
3
+
4
+ // src/codes.ts
5
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
6
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
7
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
8
+
9
+ // src/messages.ts
10
+ var SolanaErrorMessages = {
11
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
12
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
13
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
14
+ };
15
+
16
+ // src/message-formatter.ts
17
+ function encodeValue(value) {
18
+ if (Array.isArray(value)) {
19
+ return (
20
+ /* "[" */
21
+ "%5B" + value.map(
22
+ (element) => typeof element === "string" ? encodeURIComponent(`"${element.replace(/"/g, '\\"')}"`) : encodeValue(element)
23
+ ).join(
24
+ /* ", " */
25
+ "%2C%20"
26
+ ) + /* "]" */
27
+ "%5D"
28
+ );
29
+ } else if (typeof value === "bigint") {
30
+ return `${value}n`;
31
+ } else {
32
+ return encodeURIComponent(
33
+ String(
34
+ Object.getPrototypeOf(value) === null ? (
35
+ // Plain objects with no protoype don't have a `toString` method.
36
+ // Convert them before stringifying them.
37
+ { ...value }
38
+ ) : value
39
+ )
40
+ );
41
+ }
42
+ }
43
+ function encodeObjectContextEntry([key, value]) {
44
+ return `${key}=${encodeValue(value)}`;
45
+ }
46
+ function encodeContextObject(context) {
47
+ return Object.entries(context).map(encodeObjectContextEntry).join("&");
48
+ }
49
+ function getHumanReadableErrorMessage(code, context = {}) {
50
+ const messageFormatString = SolanaErrorMessages[code];
51
+ const message = messageFormatString.replace(
52
+ /(?<!\\)\$(\w+)/g,
53
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
54
+ );
55
+ return message;
56
+ }
57
+ function getErrorMessage(code, context = {}) {
58
+ if (__DEV__) {
59
+ return getHumanReadableErrorMessage(code, context);
60
+ } else {
61
+ let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \`npx @solana/errors decode ${code}`;
62
+ if (Object.keys(context).length) {
63
+ decodingAdviceMessage += ` $"${encodeContextObject(context)}"`;
64
+ }
65
+ return `${decodingAdviceMessage}\``;
66
+ }
67
+ }
68
+
69
+ // src/error.ts
70
+ function isSolanaError(e, code) {
71
+ const isSolanaError2 = e instanceof Error && e.name === "SolanaError";
72
+ if (isSolanaError2) {
73
+ if (code !== void 0) {
74
+ return e.context.__code === code;
75
+ }
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ var SolanaError = class extends Error {
81
+ context;
82
+ constructor(...[code, context]) {
83
+ const message = getErrorMessage(code, context);
84
+ super(message);
85
+ this.context = {
86
+ __code: code,
87
+ ...context
88
+ };
89
+ this.name = "SolanaError";
90
+ }
91
+ };
92
+
93
+ export { SOLANA_ERROR__RPC_INTEGER_OVERFLOW, SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES, SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE, SolanaError, isSolanaError };
94
+ //# sourceMappingURL=out.js.map
95
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../build-scripts/env-shim.ts","../src/codes.ts","../src/messages.ts","../src/message-formatter.ts","../src/error.ts"],"names":["isSolanaError"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACOhG,IAAM,+CAA+C;AACrD,IAAM,qDAAqD;AAC3D,IAAM,qCAAqC;;;ACI3C,IAAM,sBAIR;AAAA,EACD,CAAC,kCAAkC,GAC/B;AAAA,EAGJ,CAAC,4CAA4C,GAAG;AAAA,EAChD,CAAC,kDAAkD,GAC/C;AAER;;;ACxBA,SAAS,YAAY,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB;AAAA;AAAA,MACc,QACV,MACK;AAAA,QAAI,aACD,OAAO,YAAY,WACb,mBAAmB,IAAI,QAAQ,QAAQ,MAAM,KAAK,CAAC,GAAG,IACtD,YAAY,OAAO;AAAA,MAC7B,EACC;AAAA;AAAA,QAAgB;AAAA,MAAQ;AAAA,MACnB;AAAA;AAAA,EAElB,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,GAAG,KAAK;AAAA,EACnB,OAAO;AACH,WAAO;AAAA,MACH;AAAA,QACI,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA;AAAA,UAG3B,EAAE,GAAI,MAAiB;AAAA,YACvB;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,yBAAyB,CAAC,KAAK,KAAK,GAAiD;AAC1F,SAAO,GAAG,GAAG,IAAI,YAAY,KAAK,CAAC;AACvC;AAEA,SAAS,oBAAoB,SAAiB;AAC1C,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,wBAAwB,EAAE,KAAK,GAAG;AACzE;AAEO,SAAS,6BACZ,MACA,UAAkB,CAAC,GACb;AACN,QAAM,sBAAsB,oBAAoB,IAAI;AACpD,QAAM,UAAU,oBAAoB;AAAA,IAAQ;AAAA,IAAmB,CAAC,WAAW,iBACvE,gBAAgB,UAAU,GAAG,QAAQ,YAAoC,CAAC,KAAK;AAAA,EACnF;AACA,SAAO;AACX;AAEO,SAAS,gBAAoD,MAAkB,UAAkB,CAAC,GAAW;AAChH,MAAI,SAAS;AACT,WAAO,6BAA6B,MAAM,OAAO;AAAA,EACrD,OAAO;AACH,QAAI,wBAAwB,iBAAiB,IAAI,8DAA8D,IAAI;AACnH,QAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAM7B,+BAAyB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC/D;AACA,WAAO,GAAG,qBAAqB;AAAA,EACnC;AACJ;;;AC7DO,SAAS,cACZ,GACA,MAC4B;AAC5B,QAAMA,iBAAgB,aAAa,SAAS,EAAE,SAAS;AACvD,MAAIA,gBAAe;AACf,QAAI,SAAS,QAAW;AACpB,aAAQ,EAA8B,QAAQ,WAAW;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAQO,IAAM,cAAN,cAAgF,MAAM;AAAA,EAChF;AAAA,EACT,eACO,CAAC,MAAM,OAAO,GAGnB;AACE,UAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,UAAM,OAAO;AACb,SAAK,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,GAAG;AAAA,IACP;AAGA,SAAK,OAAO;AAAA,EAChB;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't remove error codes\n * - Don't change or reorder error codes.\n */\nexport const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1 as const;\nexport const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2 as const;\nexport const SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3 as const;\n\n/**\n * A union of every Solana error code\n *\n * You might be wondering why this is not a TypeScript enum or const enum.\n *\n * One of the goals of this library is to enable people to use some or none of it without having to\n * bundle all of it.\n *\n * If we made the set of error codes an enum then anyone who imported it (even if to only use a\n * single error code) would be forced to bundle every code and its label.\n *\n * Const enums appear to solve this problem by letting the compiler inline only the codes that are\n * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`\n * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850\n */\nexport type SolanaErrorCode =\n | typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES\n | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE\n | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;\n","import {\n SOLANA_ERROR__RPC_INTEGER_OVERFLOW,\n SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES,\n SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,\n SolanaErrorCode,\n} from './codes';\n\n/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't change the meaning of an error message.\n */\nexport const SolanaErrorMessages: Readonly<{\n // This type makes this data structure exhaustive with respect to `SolanaErrorCode`.\n // TypeScript will fail to build this project if add an error code without a message.\n [P in SolanaErrorCode]: string;\n}> = {\n [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]:\n 'The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was ' +\n '`$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`',\n [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: 'Transaction is missing signatures for addresses: $addresses',\n [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]:\n \"Could not determine this transaction's signature. Make sure that the transaction has \" +\n 'been signed by its fee payer.',\n};\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorMessages } from './messages';\n\nfunction encodeValue(value: unknown): string {\n if (Array.isArray(value)) {\n return (\n /* \"[\" */ '%5B' +\n value\n .map(element =>\n typeof element === 'string'\n ? encodeURIComponent(`\"${element.replace(/\"/g, '\\\\\"')}\"`)\n : encodeValue(element),\n )\n .join(/* \", \" */ '%2C%20') +\n /* \"]\" */ '%5D'\n );\n } else if (typeof value === 'bigint') {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n Object.getPrototypeOf(value) === null\n ? // Plain objects with no protoype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...(value as object) }\n : value,\n ),\n );\n }\n}\n\nfunction encodeObjectContextEntry([key, value]: [string, unknown]): `${typeof key}=${string}` {\n return `${key}=${encodeValue(value)}`;\n}\n\nfunction encodeContextObject(context: object) {\n return Object.entries(context).map(encodeObjectContextEntry).join('&');\n}\n\nexport function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(\n code: TErrorCode,\n context: object = {},\n): string {\n const messageFormatString = SolanaErrorMessages[code];\n const message = messageFormatString.replace(/(?<!\\\\)\\$(\\w+)/g, (substring, variableName) =>\n variableName in context ? `${context[variableName as keyof typeof context]}` : substring,\n );\n return message;\n}\n\nexport function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context: object = {}): string {\n if (__DEV__) {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode ${code}`;\n if (Object.keys(context).length) {\n /**\n * DANGER: Be sure that the shell command is escaped in such a way that makes it\n * impossible for someone to craft malicious context values that would result in\n * an exploit against anyone who bindly copy/pastes it into their terminal.\n */\n decodingAdviceMessage += ` $\"${encodeContextObject(context)}\"`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorContext } from './context';\nimport { getErrorMessage } from './message-formatter';\n\nexport function isSolanaError<TErrorCode extends SolanaErrorCode>(\n e: unknown,\n code?: TErrorCode,\n): e is SolanaError<TErrorCode> {\n const isSolanaError = e instanceof Error && e.name === 'SolanaError';\n if (isSolanaError) {\n if (code !== undefined) {\n return (e as SolanaError<TErrorCode>).context.__code === code;\n }\n return true;\n }\n return false;\n}\n\ntype SolanaErrorCodedContext = Readonly<{\n [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {\n __code: P;\n };\n}>;\n\nexport class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {\n readonly context: SolanaErrorCodedContext[TErrorCode];\n constructor(\n ...[code, context]: SolanaErrorContext[TErrorCode] extends undefined\n ? [code: TErrorCode]\n : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]\n ) {\n const message = getErrorMessage(code, context);\n super(message);\n this.context = {\n __code: code,\n ...context,\n } as SolanaErrorCodedContext[TErrorCode];\n // This is necessary so that `isSolanaError()` can identify a `SolanaError` without having\n // to import the class for use in an `instanceof` check.\n this.name = 'SolanaError';\n }\n}\n"]}
@@ -0,0 +1,101 @@
1
+ 'use strict';
2
+
3
+ // ../build-scripts/env-shim.ts
4
+ var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
5
+
6
+ // src/codes.ts
7
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
8
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
9
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
10
+
11
+ // src/messages.ts
12
+ var SolanaErrorMessages = {
13
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
14
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
15
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
16
+ };
17
+
18
+ // src/message-formatter.ts
19
+ function encodeValue(value) {
20
+ if (Array.isArray(value)) {
21
+ return (
22
+ /* "[" */
23
+ "%5B" + value.map(
24
+ (element) => typeof element === "string" ? encodeURIComponent(`"${element.replace(/"/g, '\\"')}"`) : encodeValue(element)
25
+ ).join(
26
+ /* ", " */
27
+ "%2C%20"
28
+ ) + /* "]" */
29
+ "%5D"
30
+ );
31
+ } else if (typeof value === "bigint") {
32
+ return `${value}n`;
33
+ } else {
34
+ return encodeURIComponent(
35
+ String(
36
+ Object.getPrototypeOf(value) === null ? (
37
+ // Plain objects with no protoype don't have a `toString` method.
38
+ // Convert them before stringifying them.
39
+ { ...value }
40
+ ) : value
41
+ )
42
+ );
43
+ }
44
+ }
45
+ function encodeObjectContextEntry([key, value]) {
46
+ return `${key}=${encodeValue(value)}`;
47
+ }
48
+ function encodeContextObject(context) {
49
+ return Object.entries(context).map(encodeObjectContextEntry).join("&");
50
+ }
51
+ function getHumanReadableErrorMessage(code, context = {}) {
52
+ const messageFormatString = SolanaErrorMessages[code];
53
+ const message = messageFormatString.replace(
54
+ /(?<!\\)\$(\w+)/g,
55
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
56
+ );
57
+ return message;
58
+ }
59
+ function getErrorMessage(code, context = {}) {
60
+ if (__DEV__) {
61
+ return getHumanReadableErrorMessage(code, context);
62
+ } else {
63
+ let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \`npx @solana/errors decode ${code}`;
64
+ if (Object.keys(context).length) {
65
+ decodingAdviceMessage += ` $"${encodeContextObject(context)}"`;
66
+ }
67
+ return `${decodingAdviceMessage}\``;
68
+ }
69
+ }
70
+
71
+ // src/error.ts
72
+ function isSolanaError(e, code) {
73
+ const isSolanaError2 = e instanceof Error && e.name === "SolanaError";
74
+ if (isSolanaError2) {
75
+ if (code !== void 0) {
76
+ return e.context.__code === code;
77
+ }
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+ var SolanaError = class extends Error {
83
+ context;
84
+ constructor(...[code, context]) {
85
+ const message = getErrorMessage(code, context);
86
+ super(message);
87
+ this.context = {
88
+ __code: code,
89
+ ...context
90
+ };
91
+ this.name = "SolanaError";
92
+ }
93
+ };
94
+
95
+ exports.SOLANA_ERROR__RPC_INTEGER_OVERFLOW = SOLANA_ERROR__RPC_INTEGER_OVERFLOW;
96
+ exports.SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES;
97
+ exports.SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE;
98
+ exports.SolanaError = SolanaError;
99
+ exports.isSolanaError = isSolanaError;
100
+ //# sourceMappingURL=out.js.map
101
+ //# sourceMappingURL=index.node.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../build-scripts/env-shim.ts","../src/codes.ts","../src/messages.ts","../src/message-formatter.ts","../src/error.ts"],"names":["isSolanaError"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACOhG,IAAM,+CAA+C;AACrD,IAAM,qDAAqD;AAC3D,IAAM,qCAAqC;;;ACI3C,IAAM,sBAIR;AAAA,EACD,CAAC,kCAAkC,GAC/B;AAAA,EAGJ,CAAC,4CAA4C,GAAG;AAAA,EAChD,CAAC,kDAAkD,GAC/C;AAER;;;ACxBA,SAAS,YAAY,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB;AAAA;AAAA,MACc,QACV,MACK;AAAA,QAAI,aACD,OAAO,YAAY,WACb,mBAAmB,IAAI,QAAQ,QAAQ,MAAM,KAAK,CAAC,GAAG,IACtD,YAAY,OAAO;AAAA,MAC7B,EACC;AAAA;AAAA,QAAgB;AAAA,MAAQ;AAAA,MACnB;AAAA;AAAA,EAElB,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,GAAG,KAAK;AAAA,EACnB,OAAO;AACH,WAAO;AAAA,MACH;AAAA,QACI,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA;AAAA,UAG3B,EAAE,GAAI,MAAiB;AAAA,YACvB;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,yBAAyB,CAAC,KAAK,KAAK,GAAiD;AAC1F,SAAO,GAAG,GAAG,IAAI,YAAY,KAAK,CAAC;AACvC;AAEA,SAAS,oBAAoB,SAAiB;AAC1C,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,wBAAwB,EAAE,KAAK,GAAG;AACzE;AAEO,SAAS,6BACZ,MACA,UAAkB,CAAC,GACb;AACN,QAAM,sBAAsB,oBAAoB,IAAI;AACpD,QAAM,UAAU,oBAAoB;AAAA,IAAQ;AAAA,IAAmB,CAAC,WAAW,iBACvE,gBAAgB,UAAU,GAAG,QAAQ,YAAoC,CAAC,KAAK;AAAA,EACnF;AACA,SAAO;AACX;AAEO,SAAS,gBAAoD,MAAkB,UAAkB,CAAC,GAAW;AAChH,MAAI,SAAS;AACT,WAAO,6BAA6B,MAAM,OAAO;AAAA,EACrD,OAAO;AACH,QAAI,wBAAwB,iBAAiB,IAAI,8DAA8D,IAAI;AACnH,QAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAM7B,+BAAyB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC/D;AACA,WAAO,GAAG,qBAAqB;AAAA,EACnC;AACJ;;;AC7DO,SAAS,cACZ,GACA,MAC4B;AAC5B,QAAMA,iBAAgB,aAAa,SAAS,EAAE,SAAS;AACvD,MAAIA,gBAAe;AACf,QAAI,SAAS,QAAW;AACpB,aAAQ,EAA8B,QAAQ,WAAW;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAQO,IAAM,cAAN,cAAgF,MAAM;AAAA,EAChF;AAAA,EACT,eACO,CAAC,MAAM,OAAO,GAGnB;AACE,UAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,UAAM,OAAO;AACb,SAAK,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,GAAG;AAAA,IACP;AAGA,SAAK,OAAO;AAAA,EAChB;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't remove error codes\n * - Don't change or reorder error codes.\n */\nexport const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1 as const;\nexport const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2 as const;\nexport const SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3 as const;\n\n/**\n * A union of every Solana error code\n *\n * You might be wondering why this is not a TypeScript enum or const enum.\n *\n * One of the goals of this library is to enable people to use some or none of it without having to\n * bundle all of it.\n *\n * If we made the set of error codes an enum then anyone who imported it (even if to only use a\n * single error code) would be forced to bundle every code and its label.\n *\n * Const enums appear to solve this problem by letting the compiler inline only the codes that are\n * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`\n * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850\n */\nexport type SolanaErrorCode =\n | typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES\n | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE\n | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;\n","import {\n SOLANA_ERROR__RPC_INTEGER_OVERFLOW,\n SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES,\n SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,\n SolanaErrorCode,\n} from './codes';\n\n/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't change the meaning of an error message.\n */\nexport const SolanaErrorMessages: Readonly<{\n // This type makes this data structure exhaustive with respect to `SolanaErrorCode`.\n // TypeScript will fail to build this project if add an error code without a message.\n [P in SolanaErrorCode]: string;\n}> = {\n [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]:\n 'The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was ' +\n '`$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`',\n [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: 'Transaction is missing signatures for addresses: $addresses',\n [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]:\n \"Could not determine this transaction's signature. Make sure that the transaction has \" +\n 'been signed by its fee payer.',\n};\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorMessages } from './messages';\n\nfunction encodeValue(value: unknown): string {\n if (Array.isArray(value)) {\n return (\n /* \"[\" */ '%5B' +\n value\n .map(element =>\n typeof element === 'string'\n ? encodeURIComponent(`\"${element.replace(/\"/g, '\\\\\"')}\"`)\n : encodeValue(element),\n )\n .join(/* \", \" */ '%2C%20') +\n /* \"]\" */ '%5D'\n );\n } else if (typeof value === 'bigint') {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n Object.getPrototypeOf(value) === null\n ? // Plain objects with no protoype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...(value as object) }\n : value,\n ),\n );\n }\n}\n\nfunction encodeObjectContextEntry([key, value]: [string, unknown]): `${typeof key}=${string}` {\n return `${key}=${encodeValue(value)}`;\n}\n\nfunction encodeContextObject(context: object) {\n return Object.entries(context).map(encodeObjectContextEntry).join('&');\n}\n\nexport function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(\n code: TErrorCode,\n context: object = {},\n): string {\n const messageFormatString = SolanaErrorMessages[code];\n const message = messageFormatString.replace(/(?<!\\\\)\\$(\\w+)/g, (substring, variableName) =>\n variableName in context ? `${context[variableName as keyof typeof context]}` : substring,\n );\n return message;\n}\n\nexport function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context: object = {}): string {\n if (__DEV__) {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode ${code}`;\n if (Object.keys(context).length) {\n /**\n * DANGER: Be sure that the shell command is escaped in such a way that makes it\n * impossible for someone to craft malicious context values that would result in\n * an exploit against anyone who bindly copy/pastes it into their terminal.\n */\n decodingAdviceMessage += ` $\"${encodeContextObject(context)}\"`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorContext } from './context';\nimport { getErrorMessage } from './message-formatter';\n\nexport function isSolanaError<TErrorCode extends SolanaErrorCode>(\n e: unknown,\n code?: TErrorCode,\n): e is SolanaError<TErrorCode> {\n const isSolanaError = e instanceof Error && e.name === 'SolanaError';\n if (isSolanaError) {\n if (code !== undefined) {\n return (e as SolanaError<TErrorCode>).context.__code === code;\n }\n return true;\n }\n return false;\n}\n\ntype SolanaErrorCodedContext = Readonly<{\n [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {\n __code: P;\n };\n}>;\n\nexport class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {\n readonly context: SolanaErrorCodedContext[TErrorCode];\n constructor(\n ...[code, context]: SolanaErrorContext[TErrorCode] extends undefined\n ? [code: TErrorCode]\n : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]\n ) {\n const message = getErrorMessage(code, context);\n super(message);\n this.context = {\n __code: code,\n ...context,\n } as SolanaErrorCodedContext[TErrorCode];\n // This is necessary so that `isSolanaError()` can identify a `SolanaError` without having\n // to import the class for use in an `instanceof` check.\n this.name = 'SolanaError';\n }\n}\n"]}
@@ -0,0 +1,95 @@
1
+ // ../build-scripts/env-shim.ts
2
+ var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
3
+
4
+ // src/codes.ts
5
+ var SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1;
6
+ var SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2;
7
+ var SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3;
8
+
9
+ // src/messages.ts
10
+ var SolanaErrorMessages = {
11
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`",
12
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: "Transaction is missing signatures for addresses: $addresses",
13
+ [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
14
+ };
15
+
16
+ // src/message-formatter.ts
17
+ function encodeValue(value) {
18
+ if (Array.isArray(value)) {
19
+ return (
20
+ /* "[" */
21
+ "%5B" + value.map(
22
+ (element) => typeof element === "string" ? encodeURIComponent(`"${element.replace(/"/g, '\\"')}"`) : encodeValue(element)
23
+ ).join(
24
+ /* ", " */
25
+ "%2C%20"
26
+ ) + /* "]" */
27
+ "%5D"
28
+ );
29
+ } else if (typeof value === "bigint") {
30
+ return `${value}n`;
31
+ } else {
32
+ return encodeURIComponent(
33
+ String(
34
+ Object.getPrototypeOf(value) === null ? (
35
+ // Plain objects with no protoype don't have a `toString` method.
36
+ // Convert them before stringifying them.
37
+ { ...value }
38
+ ) : value
39
+ )
40
+ );
41
+ }
42
+ }
43
+ function encodeObjectContextEntry([key, value]) {
44
+ return `${key}=${encodeValue(value)}`;
45
+ }
46
+ function encodeContextObject(context) {
47
+ return Object.entries(context).map(encodeObjectContextEntry).join("&");
48
+ }
49
+ function getHumanReadableErrorMessage(code, context = {}) {
50
+ const messageFormatString = SolanaErrorMessages[code];
51
+ const message = messageFormatString.replace(
52
+ /(?<!\\)\$(\w+)/g,
53
+ (substring, variableName) => variableName in context ? `${context[variableName]}` : substring
54
+ );
55
+ return message;
56
+ }
57
+ function getErrorMessage(code, context = {}) {
58
+ if (__DEV__) {
59
+ return getHumanReadableErrorMessage(code, context);
60
+ } else {
61
+ let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \`npx @solana/errors decode ${code}`;
62
+ if (Object.keys(context).length) {
63
+ decodingAdviceMessage += ` $"${encodeContextObject(context)}"`;
64
+ }
65
+ return `${decodingAdviceMessage}\``;
66
+ }
67
+ }
68
+
69
+ // src/error.ts
70
+ function isSolanaError(e, code) {
71
+ const isSolanaError2 = e instanceof Error && e.name === "SolanaError";
72
+ if (isSolanaError2) {
73
+ if (code !== void 0) {
74
+ return e.context.__code === code;
75
+ }
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ var SolanaError = class extends Error {
81
+ context;
82
+ constructor(...[code, context]) {
83
+ const message = getErrorMessage(code, context);
84
+ super(message);
85
+ this.context = {
86
+ __code: code,
87
+ ...context
88
+ };
89
+ this.name = "SolanaError";
90
+ }
91
+ };
92
+
93
+ export { SOLANA_ERROR__RPC_INTEGER_OVERFLOW, SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES, SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE, SolanaError, isSolanaError };
94
+ //# sourceMappingURL=out.js.map
95
+ //# sourceMappingURL=index.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../build-scripts/env-shim.ts","../src/codes.ts","../src/messages.ts","../src/message-formatter.ts","../src/error.ts"],"names":["isSolanaError"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACOhG,IAAM,+CAA+C;AACrD,IAAM,qDAAqD;AAC3D,IAAM,qCAAqC;;;ACI3C,IAAM,sBAIR;AAAA,EACD,CAAC,kCAAkC,GAC/B;AAAA,EAGJ,CAAC,4CAA4C,GAAG;AAAA,EAChD,CAAC,kDAAkD,GAC/C;AAER;;;ACxBA,SAAS,YAAY,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB;AAAA;AAAA,MACc,QACV,MACK;AAAA,QAAI,aACD,OAAO,YAAY,WACb,mBAAmB,IAAI,QAAQ,QAAQ,MAAM,KAAK,CAAC,GAAG,IACtD,YAAY,OAAO;AAAA,MAC7B,EACC;AAAA;AAAA,QAAgB;AAAA,MAAQ;AAAA,MACnB;AAAA;AAAA,EAElB,WAAW,OAAO,UAAU,UAAU;AAClC,WAAO,GAAG,KAAK;AAAA,EACnB,OAAO;AACH,WAAO;AAAA,MACH;AAAA,QACI,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA;AAAA,UAG3B,EAAE,GAAI,MAAiB;AAAA,YACvB;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,yBAAyB,CAAC,KAAK,KAAK,GAAiD;AAC1F,SAAO,GAAG,GAAG,IAAI,YAAY,KAAK,CAAC;AACvC;AAEA,SAAS,oBAAoB,SAAiB;AAC1C,SAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,wBAAwB,EAAE,KAAK,GAAG;AACzE;AAEO,SAAS,6BACZ,MACA,UAAkB,CAAC,GACb;AACN,QAAM,sBAAsB,oBAAoB,IAAI;AACpD,QAAM,UAAU,oBAAoB;AAAA,IAAQ;AAAA,IAAmB,CAAC,WAAW,iBACvE,gBAAgB,UAAU,GAAG,QAAQ,YAAoC,CAAC,KAAK;AAAA,EACnF;AACA,SAAO;AACX;AAEO,SAAS,gBAAoD,MAAkB,UAAkB,CAAC,GAAW;AAChH,MAAI,SAAS;AACT,WAAO,6BAA6B,MAAM,OAAO;AAAA,EACrD,OAAO;AACH,QAAI,wBAAwB,iBAAiB,IAAI,8DAA8D,IAAI;AACnH,QAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAM7B,+BAAyB,MAAM,oBAAoB,OAAO,CAAC;AAAA,IAC/D;AACA,WAAO,GAAG,qBAAqB;AAAA,EACnC;AACJ;;;AC7DO,SAAS,cACZ,GACA,MAC4B;AAC5B,QAAMA,iBAAgB,aAAa,SAAS,EAAE,SAAS;AACvD,MAAIA,gBAAe;AACf,QAAI,SAAS,QAAW;AACpB,aAAQ,EAA8B,QAAQ,WAAW;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAQO,IAAM,cAAN,cAAgF,MAAM;AAAA,EAChF;AAAA,EACT,eACO,CAAC,MAAM,OAAO,GAGnB;AACE,UAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,UAAM,OAAO;AACb,SAAK,UAAU;AAAA,MACX,QAAQ;AAAA,MACR,GAAG;AAAA,IACP;AAGA,SAAK,OAAO;AAAA,EAChB;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't remove error codes\n * - Don't change or reorder error codes.\n */\nexport const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES = 1 as const;\nexport const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE = 2 as const;\nexport const SOLANA_ERROR__RPC_INTEGER_OVERFLOW = 3 as const;\n\n/**\n * A union of every Solana error code\n *\n * You might be wondering why this is not a TypeScript enum or const enum.\n *\n * One of the goals of this library is to enable people to use some or none of it without having to\n * bundle all of it.\n *\n * If we made the set of error codes an enum then anyone who imported it (even if to only use a\n * single error code) would be forced to bundle every code and its label.\n *\n * Const enums appear to solve this problem by letting the compiler inline only the codes that are\n * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`\n * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850\n */\nexport type SolanaErrorCode =\n | typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES\n | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE\n | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;\n","import {\n SOLANA_ERROR__RPC_INTEGER_OVERFLOW,\n SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES,\n SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE,\n SolanaErrorCode,\n} from './codes';\n\n/**\n * To add a new error, follow the instructions at\n * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error\n *\n * WARNING:\n * - Don't change the meaning of an error message.\n */\nexport const SolanaErrorMessages: Readonly<{\n // This type makes this data structure exhaustive with respect to `SolanaErrorCode`.\n // TypeScript will fail to build this project if add an error code without a message.\n [P in SolanaErrorCode]: string;\n}> = {\n [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]:\n 'The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was ' +\n '`$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`',\n [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: 'Transaction is missing signatures for addresses: $addresses',\n [SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE]:\n \"Could not determine this transaction's signature. Make sure that the transaction has \" +\n 'been signed by its fee payer.',\n};\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorMessages } from './messages';\n\nfunction encodeValue(value: unknown): string {\n if (Array.isArray(value)) {\n return (\n /* \"[\" */ '%5B' +\n value\n .map(element =>\n typeof element === 'string'\n ? encodeURIComponent(`\"${element.replace(/\"/g, '\\\\\"')}\"`)\n : encodeValue(element),\n )\n .join(/* \", \" */ '%2C%20') +\n /* \"]\" */ '%5D'\n );\n } else if (typeof value === 'bigint') {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n Object.getPrototypeOf(value) === null\n ? // Plain objects with no protoype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...(value as object) }\n : value,\n ),\n );\n }\n}\n\nfunction encodeObjectContextEntry([key, value]: [string, unknown]): `${typeof key}=${string}` {\n return `${key}=${encodeValue(value)}`;\n}\n\nfunction encodeContextObject(context: object) {\n return Object.entries(context).map(encodeObjectContextEntry).join('&');\n}\n\nexport function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(\n code: TErrorCode,\n context: object = {},\n): string {\n const messageFormatString = SolanaErrorMessages[code];\n const message = messageFormatString.replace(/(?<!\\\\)\\$(\\w+)/g, (substring, variableName) =>\n variableName in context ? `${context[variableName as keyof typeof context]}` : substring,\n );\n return message;\n}\n\nexport function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context: object = {}): string {\n if (__DEV__) {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode ${code}`;\n if (Object.keys(context).length) {\n /**\n * DANGER: Be sure that the shell command is escaped in such a way that makes it\n * impossible for someone to craft malicious context values that would result in\n * an exploit against anyone who bindly copy/pastes it into their terminal.\n */\n decodingAdviceMessage += ` $\"${encodeContextObject(context)}\"`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n","import { SolanaErrorCode } from './codes';\nimport { SolanaErrorContext } from './context';\nimport { getErrorMessage } from './message-formatter';\n\nexport function isSolanaError<TErrorCode extends SolanaErrorCode>(\n e: unknown,\n code?: TErrorCode,\n): e is SolanaError<TErrorCode> {\n const isSolanaError = e instanceof Error && e.name === 'SolanaError';\n if (isSolanaError) {\n if (code !== undefined) {\n return (e as SolanaError<TErrorCode>).context.__code === code;\n }\n return true;\n }\n return false;\n}\n\ntype SolanaErrorCodedContext = Readonly<{\n [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {\n __code: P;\n };\n}>;\n\nexport class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {\n readonly context: SolanaErrorCodedContext[TErrorCode];\n constructor(\n ...[code, context]: SolanaErrorContext[TErrorCode] extends undefined\n ? [code: TErrorCode]\n : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]\n ) {\n const message = getErrorMessage(code, context);\n super(message);\n this.context = {\n __code: code,\n ...context,\n } as SolanaErrorCodedContext[TErrorCode];\n // This is necessary so that `isSolanaError()` can identify a `SolanaError` without having\n // to import the class for use in an `instanceof` check.\n this.name = 'SolanaError';\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * To add a new error, follow the instructions at
3
+ * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error
4
+ *
5
+ * WARNING:
6
+ * - Don't remove error codes
7
+ * - Don't change or reorder error codes.
8
+ */
9
+ export declare const SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES: 1;
10
+ export declare const SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE: 2;
11
+ export declare const SOLANA_ERROR__RPC_INTEGER_OVERFLOW: 3;
12
+ /**
13
+ * A union of every Solana error code
14
+ *
15
+ * You might be wondering why this is not a TypeScript enum or const enum.
16
+ *
17
+ * One of the goals of this library is to enable people to use some or none of it without having to
18
+ * bundle all of it.
19
+ *
20
+ * If we made the set of error codes an enum then anyone who imported it (even if to only use a
21
+ * single error code) would be forced to bundle every code and its label.
22
+ *
23
+ * Const enums appear to solve this problem by letting the compiler inline only the codes that are
24
+ * actually used. Unfortunately exporting ambient (const) enums from a library like `@solana/errors`
25
+ * is not safe, for a variety of reasons covered here: https://stackoverflow.com/a/28818850
26
+ */
27
+ export type SolanaErrorCode = typeof SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES | typeof SOLANA_ERROR__TRANSACTION_SIGNATURE_NOT_COMPUTABLE | typeof SOLANA_ERROR__RPC_INTEGER_OVERFLOW;
28
+ //# sourceMappingURL=codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,4CAA4C,GAAa,CAAC;AACvE,eAAO,MAAM,kDAAkD,GAAa,CAAC;AAC7E,eAAO,MAAM,kCAAkC,GAAa,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,GACrB,OAAO,4CAA4C,GACnD,OAAO,kDAAkD,GACzD,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { SOLANA_ERROR__RPC_INTEGER_OVERFLOW, SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES, SolanaErrorCode } from './codes.js';
2
+ export type DefaultUnspecifiedErrorContextToUndefined<T> = {
3
+ [P in SolanaErrorCode]: P extends keyof T ? T[P] : undefined;
4
+ };
5
+ /**
6
+ * To add a new error, follow the instructions at
7
+ * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error
8
+ *
9
+ * WARNING:
10
+ * - Don't change or remove members of an error's context.
11
+ */
12
+ export type SolanaErrorContext = DefaultUnspecifiedErrorContextToUndefined<{
13
+ [SOLANA_ERROR__TRANSACTION_MISSING_SIGNATURES]: {
14
+ addresses: string[];
15
+ };
16
+ [SOLANA_ERROR__RPC_INTEGER_OVERFLOW]: {
17
+ argumentLabel: string;
18
+ keyPath: readonly (string | number | symbol)[];
19
+ methodName: string;
20
+ optionalPathLabel: string;
21
+ path?: string;
22
+ value: bigint;
23
+ };
24
+ }>;
25
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kCAAkC,EAClC,4CAA4C,EAC5C,eAAe,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yCAAyC,CAAC,CAAC,IAAI;KACtD,CAAC,IAAI,eAAe,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAC/D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,yCAAyC,CAAC;IACvE,CAAC,4CAA4C,CAAC,EAAE;QAC5C,SAAS,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,CAAC,kCAAkC,CAAC,EAAE;QAClC,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { SolanaErrorCode } from './codes.js';
2
+ import { SolanaErrorContext } from './context.js';
3
+ export declare function isSolanaError<TErrorCode extends SolanaErrorCode>(e: unknown, code?: TErrorCode): e is SolanaError<TErrorCode>;
4
+ type SolanaErrorCodedContext = Readonly<{
5
+ [P in SolanaErrorCode]: (SolanaErrorContext[P] extends undefined ? object : SolanaErrorContext[P]) & {
6
+ __code: P;
7
+ };
8
+ }>;
9
+ export declare class SolanaError<TErrorCode extends SolanaErrorCode = SolanaErrorCode> extends Error {
10
+ readonly context: SolanaErrorCodedContext[TErrorCode];
11
+ constructor(...[code, context]: SolanaErrorContext[TErrorCode] extends undefined ? [code: TErrorCode] : [code: TErrorCode, context: SolanaErrorContext[TErrorCode]]);
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG/C,wBAAgB,aAAa,CAAC,UAAU,SAAS,eAAe,EAC5D,CAAC,EAAE,OAAO,EACV,IAAI,CAAC,EAAE,UAAU,GAClB,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAS9B;AAED,KAAK,uBAAuB,GAAG,QAAQ,CAAC;KACnC,CAAC,IAAI,eAAe,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG;QACjG,MAAM,EAAE,CAAC,CAAC;KACb;CACJ,CAAC,CAAC;AAEH,qBAAa,WAAW,CAAC,UAAU,SAAS,eAAe,GAAG,eAAe,CAAE,SAAQ,KAAK;IACxF,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBAElD,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,SAAS,SAAS,GAC9D,CAAC,IAAI,EAAE,UAAU,CAAC,GAClB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;CAYxE"}
@@ -0,0 +1,3 @@
1
+ export * from './codes.js';
2
+ export * from './error.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { SolanaErrorCode } from './codes.js';
2
+ export declare function getHumanReadableErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context?: object): string;
3
+ export declare function getErrorMessage<TErrorCode extends SolanaErrorCode>(code: TErrorCode, context?: object): string;
4
+ //# sourceMappingURL=message-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/message-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAuC1C,wBAAgB,4BAA4B,CAAC,UAAU,SAAS,eAAe,EAC3E,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,MAAW,GACrB,MAAM,CAMR;AAED,wBAAgB,eAAe,CAAC,UAAU,SAAS,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAelH"}
@@ -0,0 +1,12 @@
1
+ import { SolanaErrorCode } from './codes.js';
2
+ /**
3
+ * To add a new error, follow the instructions at
4
+ * https://github.com/solana-labs/solana-web3.js/tree/master/packages/error#adding-a-new-error
5
+ *
6
+ * WARNING:
7
+ * - Don't change the meaning of an error message.
8
+ */
9
+ export declare const SolanaErrorMessages: Readonly<{
10
+ [P in SolanaErrorCode]: string;
11
+ }>;
12
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,eAAe,EAClB,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC;KAGtC,CAAC,IAAI,eAAe,GAAG,MAAM;CACjC,CASA,CAAC"}
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@solana/errors",
3
+ "version": "2.0.0-experimental.025ef21",
4
+ "description": "Throw, identify, and decode Solana JavaScript errors",
5
+ "exports": {
6
+ "browser": {
7
+ "import": "./dist/index.browser.js",
8
+ "require": "./dist/index.browser.cjs"
9
+ },
10
+ "node": {
11
+ "import": "./dist/index.node.js",
12
+ "require": "./dist/index.node.cjs"
13
+ },
14
+ "react-native": "./dist/index.native.js",
15
+ "types": "./dist/types/index.d.ts"
16
+ },
17
+ "browser": {
18
+ "./dist/index.node.cjs": "./dist/index.browser.cjs",
19
+ "./dist/index.node.js": "./dist/index.browser.js"
20
+ },
21
+ "main": "./dist/index.node.cjs",
22
+ "module": "./dist/index.node.js",
23
+ "react-native": "./dist/index.native.js",
24
+ "types": "./dist/types/index.d.ts",
25
+ "type": "module",
26
+ "files": [
27
+ "./dist/"
28
+ ],
29
+ "sideEffects": false,
30
+ "keywords": [
31
+ "blockchain",
32
+ "solana",
33
+ "web3"
34
+ ],
35
+ "bin": "./bin/cli.js",
36
+ "author": "Solana Labs Maintainers <maintainers@solanalabs.com>",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/solana-labs/solana-web3.js"
41
+ },
42
+ "bugs": {
43
+ "url": "http://github.com/solana-labs/solana-web3.js/issues"
44
+ },
45
+ "browserslist": [
46
+ "supports bigint and not dead",
47
+ "maintained node versions"
48
+ ],
49
+ "engine": {
50
+ "node": ">=17.4"
51
+ },
52
+ "dependencies": {
53
+ "commander": "^11.1.0",
54
+ "chalk": "^5.3.0"
55
+ },
56
+ "devDependencies": {
57
+ "@solana/eslint-config-solana": "^1.0.2",
58
+ "@swc/jest": "^0.2.29",
59
+ "@types/jest": "^29.5.11",
60
+ "@types/node": "18.11.19",
61
+ "@typescript-eslint/eslint-plugin": "^6.13.2",
62
+ "@typescript-eslint/parser": "^6.3.0",
63
+ "agadoo": "^3.0.0",
64
+ "eslint": "^8.45.0",
65
+ "eslint-plugin-jest": "^27.4.2",
66
+ "eslint-plugin-sort-keys-fix": "^1.1.2",
67
+ "jest": "^29.7.0",
68
+ "jest-environment-jsdom": "^29.7.0",
69
+ "jest-runner-eslint": "^2.1.2",
70
+ "jest-runner-prettier": "^1.0.0",
71
+ "prettier": "^3.1",
72
+ "tsup": "^8.0.1",
73
+ "typescript": "^5.2.2",
74
+ "version-from-git": "^1.1.1",
75
+ "@solana/addresses": "2.0.0-experimental.025ef21",
76
+ "build-scripts": "0.0.0",
77
+ "test-config": "0.0.0",
78
+ "tsconfig": "0.0.0"
79
+ },
80
+ "bundlewatch": {
81
+ "defaultCompression": "gzip",
82
+ "files": [
83
+ {
84
+ "path": "./dist/index*.js"
85
+ }
86
+ ]
87
+ },
88
+ "scripts": {
89
+ "compile:js": "tsup --config build-scripts/tsup.config.package.ts && tsup src/cli.ts --format esm",
90
+ "compile:typedefs": "tsc -p ./tsconfig.declarations.json && node node_modules/build-scripts/add-js-extension-to-types.mjs",
91
+ "dev": "jest -c node_modules/test-config/jest-dev.config.ts --rootDir . --watch",
92
+ "publish-packages": "pnpm publish --tag experimental --access public --no-git-checks",
93
+ "style:fix": "pnpm eslint --fix src/* && pnpm prettier -w src/* package.json",
94
+ "test:lint": "jest -c node_modules/test-config/jest-lint.config.ts --rootDir . --silent",
95
+ "test:prettier": "jest -c node_modules/test-config/jest-prettier.config.ts --rootDir . --silent",
96
+ "test:treeshakability:browser": "agadoo dist/index.browser.js",
97
+ "test:treeshakability:native": "agadoo dist/index.native.js",
98
+ "test:treeshakability:node": "agadoo dist/index.node.js",
99
+ "test:typecheck": "tsc --noEmit",
100
+ "test:unit:browser": "jest -c node_modules/test-config/jest-unit.config.browser.ts --rootDir . --silent",
101
+ "test:unit:node": "jest -c node_modules/test-config/jest-unit.config.node.ts --rootDir . --silent"
102
+ }
103
+ }