@gala-chain/launchpad-sdk 7.0.0-beta.5 → 7.0.0-beta.6

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.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/dist/LaunchpadSDK.d.ts +344 -1
  3. package/dist/LaunchpadSDK.d.ts.map +1 -1
  4. package/dist/api/dto/BondingCurveDTOs.d.ts +1 -1
  5. package/dist/bridge/BridgeService.d.ts.map +1 -1
  6. package/dist/bridge/constants/tokens.d.ts.map +1 -1
  7. package/dist/bridge/types/bridgeable-token.dto.d.ts +6 -2
  8. package/dist/bridge/types/bridgeable-token.dto.d.ts.map +1 -1
  9. package/dist/bridge/utils/tokenMetadataResolver.d.ts +2 -2
  10. package/dist/bridge/utils/tokenMetadataResolver.d.ts.map +1 -1
  11. package/dist/constants/version.generated.d.ts +1 -1
  12. package/dist/index.browser.d.ts +1 -2
  13. package/dist/index.browser.d.ts.map +1 -1
  14. package/dist/index.browser.esm.js +1 -1
  15. package/dist/index.cjs +1 -1
  16. package/dist/index.esm.js +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/launchpad/strings-instructions.d.ts.map +1 -1
  19. package/dist/native.cjs +1 -1
  20. package/dist/native.esm.js +1 -1
  21. package/dist/react/index.d.ts +1 -1
  22. package/dist/react/index.d.ts.map +1 -1
  23. package/dist/react.cjs +1 -1
  24. package/dist/react.esm.js +1 -1
  25. package/dist/services/BridgeableTokenService.d.ts.map +1 -1
  26. package/dist/services/DexService.d.ts +8 -1
  27. package/dist/services/DexService.d.ts.map +1 -1
  28. package/dist/services/LaunchpadService.d.ts +7 -0
  29. package/dist/services/LaunchpadService.d.ts.map +1 -1
  30. package/dist/services/PoolService.d.ts +22 -0
  31. package/dist/services/PoolService.d.ts.map +1 -1
  32. package/dist/services/StreamWebSocketService.d.ts +10 -0
  33. package/dist/services/StreamWebSocketService.d.ts.map +1 -1
  34. package/dist/services/TokenClassKeyService.d.ts +0 -22
  35. package/dist/services/TokenClassKeyService.d.ts.map +1 -1
  36. package/dist/tokens/transfers.d.ts +6 -2
  37. package/dist/tokens/transfers.d.ts.map +1 -1
  38. package/dist/utils/data-transform-patterns.d.ts +1 -1
  39. package/dist/utils/data-transform-patterns.d.ts.map +1 -1
  40. package/dist/utils/delimiter-parser.d.ts +3 -2
  41. package/dist/utils/delimiter-parser.d.ts.map +1 -1
  42. package/dist/utils/token-format-converter.d.ts +15 -130
  43. package/dist/utils/token-format-converter.d.ts.map +1 -1
  44. package/dist/utils/token-instance-resolver.d.ts +5 -3
  45. package/dist/utils/token-instance-resolver.d.ts.map +1 -1
  46. package/dist/utils/token-parser.d.ts +2 -2
  47. package/dist/utils/token-parser.d.ts.map +1 -1
  48. package/dist/utils/tokenNormalizer.d.ts +2 -1
  49. package/dist/utils/tokenNormalizer.d.ts.map +1 -1
  50. package/dist/utils/validation.d.ts +0 -16
  51. package/dist/utils/validation.d.ts.map +1 -1
  52. package/dist/wallet/detection.d.ts.map +1 -1
  53. package/dist/wallet/index.d.ts +3 -4
  54. package/dist/wallet/index.d.ts.map +1 -1
  55. package/dist/wallet/types.d.ts +2 -2
  56. package/dist/wallet.cjs +1 -1
  57. package/dist/wallet.esm.js +1 -1
  58. package/package.json +160 -164
  59. package/LICENSE +0 -21
  60. package/dist/services/TokenMetadataService.d.ts +0 -509
  61. package/dist/services/TokenMetadataService.d.ts.map +0 -1
  62. package/dist/wallet/GalaChainConnectProvider.d.ts +0 -125
  63. package/dist/wallet/GalaChainConnectProvider.d.ts.map +0 -1
@@ -1,114 +1,42 @@
1
1
  /**
2
- * TokenFormatConverter - Unified token format conversion utilities
2
+ * Token delimiter conversion helpers (pipe <-> dollar) and sort-order conversion.
3
3
  *
4
- * Handles bidirectional conversions between:
5
- * - Pipe-delimited ↔ Dollar-delimited formats (API conversions)
6
- * - Token objects ↔ String formats (Launchpad ↔ GSwap conversions)
7
- *
8
- * ⚠️ CRITICAL ARCHITECTURAL NOTE:
9
- * This utility is for FORMAT CONVERSION ONLY (pipe-delimited ↔ object/string).
10
- * Do NOT use for symbol extraction or metadata inference!
11
- *
12
- * ⚠️ BREAKING CHANGE (v5.0.0):
13
- * Bare token symbols (e.g., "GALA") are NO LONGER accepted.
14
- * You MUST use full tokenId format: "GALA|Unit|none|none"
15
- * For launchpad bonding curve tokens, use tokenName: "anime"
16
- *
17
- * For symbol/metadata resolution:
18
- * - Use GalaChainService.fetchTokenClassFromChain() to query real blockchain data
19
- * - Use DexService.fetchTokenDetails() for complete token metadata
20
- * - Use data from GSwap SDK responses directly (already contains correct symbols)
21
- *
22
- * Launchpad SDK uses: { collection, category, type, additionalKey }
23
- * GSwap SDK uses: "GALA|Unit|none|none" (pipe-delimited string)
4
+ * These convert FORMATS ONLY. A token class key carries no symbol and a symbol carries no class
5
+ * key, so nothing here infers one from the other: a bare symbol is never expanded into a key.
6
+ * For symbol/metadata use GalaChainService.fetchTokenClassFromChain() or DexService.fetchTokenDetails().
24
7
  *
25
8
  * @packageDocumentation
26
9
  */
27
- import type { TokenClassKey } from '../types/common';
28
- import type { TokenClassKey as TokenClass } from '../types/common';
29
- export declare class TokenFormatConverter {
30
- /**
31
- * Convert Launchpad token format to GSwap format (pipe-delimited string)
32
- *
33
- * ⚠️ BREAKING CHANGE (v5.0.0):
34
- * Bare token symbols (e.g., "GALA") are NO LONGER accepted.
35
- * You MUST use full tokenId format: "GALA|Unit|none|none"
36
- *
37
- * Input examples:
38
- * - "GALA|Unit|none|none" → "GALA|Unit|none|none" (valid)
39
- * - "Token|Unit|BENE|client:xxx" → "Token|Unit|BENE|client:xxx" (valid)
40
- * - { collection: "GALA", category: "Unit", type: "none", additionalKey: "none" } → "GALA|Unit|none|none" (valid)
41
- * - "GALA" → throws ValidationError (INVALID - use pipe-delimited format)
42
- * Output: "GALA|Unit|none|none"
43
- *
44
- * @throws ValidationError if bare symbol is provided without pipe-delimited format
45
- */
46
- toLaunchpadFormat(token: unknown): string;
47
- /**
48
- * Convert GSwap format (pipe-delimited) to TokenClass object
49
- *
50
- * ⚠️ WARNING: For API format conversion ONLY
51
- * This does NOT provide real symbol/metadata - it's structural only.
52
- * USE parseToken() utility instead for proper token format handling (src/utils/token-parser.ts)
53
- * For actual token data, use GalaChainService.fetchTokenClassFromChain()
54
- *
55
- * Input examples:
56
- * - "GALA|Unit|none|none" → { collection: "GALA", category: "Unit", type: "none", additionalKey: "none" }
57
- * - { type: "GALA", ... } → proper TokenClassKey
58
- * Output: TokenClassKey with collection, category, type, additionalKey
59
- */
60
- toTokenClass(token: unknown): TokenClass;
61
- /**
62
- * INTERNAL USE ONLY: Normalize API response data that may contain bare symbols.
63
- *
64
- * This is specifically for normalizing data from GSwap API responses where
65
- * tokens may come back as bare symbols or pipe-delimited format.
66
- *
67
- * ⚠️ DO NOT use this for user-facing input validation!
68
- * For user input, use toLaunchpadFormat() which enforces proper format.
69
- *
70
- * Input: "GALA" → "GALA|Unit|none|none"
71
- * Input: "GALA|Unit|none|none" → "GALA|Unit|none|none" (unchanged)
72
- */
73
- normalizeInternalApiResponse(token: string): string;
74
- /**
75
- * Normalize any token format to pipe-delimited GSwap format
76
- *
77
- * ⚠️ BREAKING CHANGE (v5.0.0):
78
- * Bare token symbols (e.g., "GALA") are NO LONGER accepted.
79
- * You MUST use full tokenId format: "GALA|Unit|none|none"
80
- *
81
- * Input: "GALA|Unit|none|none" or { collection: "GALA", category: "Unit", type: "none", additionalKey: "none" }
82
- * Output: "GALA|Unit|none|none"
83
- *
84
- * @throws ValidationError if bare symbol is provided without pipe-delimited format
85
- */
86
- normalize(token: string | TokenClass): string;
87
- }
88
10
  /**
89
11
  * Convert pipe-delimited token ID to dollar-delimited format for API
90
12
  *
13
+ * Only the delimiter changes; the fields are left untouched.
14
+ *
91
15
  * @param pipeToken Pipe-delimited format: "GUSDC|Unit|none|eth:0x..."
92
- * @returns Dollar-delimited format: "Token$Unit$GUSDC$eth:0x..."
16
+ * @returns Dollar-delimited format: "GUSDC$Unit$none$eth:0x..."
93
17
  * @throws Error if token is null or empty
94
18
  *
95
19
  * @example
96
20
  * ```typescript
97
21
  * pipeFormatToDollarFormat("GUSDC|Unit|none|eth:0x123")
98
- * // Returns: "Token$Unit$GUSDC$eth:0x123"
22
+ * // Returns: "GUSDC$Unit$none$eth:0x123"
99
23
  * ```
100
24
  */
101
25
  export declare function pipeFormatToDollarFormat(pipeToken: string): string;
102
26
  /**
103
27
  * Convert dollar-delimited API response to pipe-delimited format
104
28
  *
105
- * @param dollarToken Dollar-delimited format: "Token$Unit$GUSDC$eth:0x..."
29
+ * The `$` form is parsed from the RIGHT (category, type, additionalKey are the last three
30
+ * segments), because real collections contain `$` themselves: `$GMUSIC$Unit$none$none` becomes
31
+ * `$GMUSIC|Unit|none|none`, never `|GMUSIC|Unit|none|none`.
32
+ *
33
+ * @param dollarToken Dollar-delimited format: "GUSDC$Unit$none$eth:0x..."
106
34
  * @returns Pipe-delimited format: "GUSDC|Unit|none|eth:0x..."
107
- * @throws Error if token is null or empty
35
+ * @throws ValidationError if the token is not a valid class key
108
36
  *
109
37
  * @example
110
38
  * ```typescript
111
- * dollarFormatToPipeFormat("Token$Unit$GUSDC$eth:0x123")
39
+ * dollarFormatToPipeFormat("GUSDC$Unit$none$eth:0x123")
112
40
  * // Returns: "GUSDC|Unit|none|eth:0x123"
113
41
  * ```
114
42
  */
@@ -129,47 +57,4 @@ export declare function dollarFormatToPipeFormat(dollarToken: string): string;
129
57
  * ```
130
58
  */
131
59
  export declare function convertSortOrderToApi(sortOrder?: 'ASC' | 'DESC'): 'asc' | 'desc' | undefined;
132
- /**
133
- * Parse dollar-delimited token string into TokenClassKey components (LEFT-TO-RIGHT)
134
- *
135
- * Dollar-delimited format: "Token$Unit$SYMBOL$additionalKey"
136
- * Handles additionalKey that may contain $ characters by treating everything after the third $
137
- * as part of additionalKey and rejoining with $.
138
- *
139
- * **WARNING:** This function parses LEFT-TO-RIGHT which does NOT handle the edge case
140
- * where the collection name contains $ (e.g., "$MUSIC$Unit$none$none").
141
- * For tokens that may have $ in the collection, use `parseDollarDelimitedTokenSafe`
142
- * from `./token-parser.ts` which parses RIGHT-TO-LEFT.
143
- *
144
- * ## When to use which function:
145
- *
146
- * - **parseDollarDelimitedToken** (this function): When you're certain the collection
147
- * does NOT contain $ characters. Slightly simpler, parses left-to-right.
148
- *
149
- * - **parseDollarDelimitedTokenSafe** (from token-parser.ts): When you need to handle
150
- * the "$MUSIC" edge case where collection name starts with $. Parses right-to-left.
151
- *
152
- * @param dollarToken Dollar-delimited token string to parse
153
- * @returns TokenClassKey object with collection, category, type, additionalKey
154
- * @throws ValidationError if the token format is invalid
155
- *
156
- * @example
157
- * ```typescript
158
- * const tokenClass = parseDollarDelimitedToken('GUSDC$Unit$none$eth:0x...');
159
- * // → { collection: "GUSDC", category: "Unit", type: "none", additionalKey: "eth:0x..." }
160
- *
161
- * // Handles additionalKey with $ characters
162
- * const complex = parseDollarDelimitedToken('SYMBOL$Unit$none$eth:0x$1234$5678');
163
- * // → { collection: "SYMBOL", category: "Unit", type: "none", additionalKey: "eth:0x$1234$5678" }
164
- *
165
- * // WARNING: Does NOT handle $ in collection correctly!
166
- * // parseDollarDelimitedToken('$MUSIC$Unit$none$none')
167
- * // → { collection: "", category: "MUSIC", type: "Unit", additionalKey: "none$none" } // WRONG!
168
- * // Use parseDollarDelimitedTokenSafe for this case.
169
- * ```
170
- *
171
- * @see parseDollarDelimitedTokenSafe - Handles $ in collection name (RIGHT-TO-LEFT parsing)
172
- * @since 3.32.0
173
- */
174
- export declare function parseDollarDelimitedToken(dollarToken: string): TokenClassKey;
175
60
  //# sourceMappingURL=token-format-converter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-format-converter.d.ts","sourceRoot":"","sources":["../../src/utils/token-format-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOnE,qBAAa,oBAAoB;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CACf,KAAK,EAAE,OAAO,GACb,MAAM;IAyCT;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU;IA6BxC;;;;;;;;;;;OAWG;IACH,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAenD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;CAY9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAM5F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAG5E"}
1
+ {"version":3,"file":"token-format-converter.d.ts","sourceRoot":"","sources":["../../src/utils/token-format-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAM5F"}
@@ -10,18 +10,20 @@ interface TokenResolver {
10
10
  resolveTokenToVault(tokenName: string): Promise<string | null>;
11
11
  }
12
12
  /**
13
- * Resolve a token name from a launchpad pool or standard GalaChain format.
13
+ * Resolve a launchpad token name to its token instance via its vault address. Throws when the
14
+ * name has no launchpad pool: a class key is never guessed from a name.
14
15
  *
15
16
  * @param tokenName - Token name to resolve.
16
17
  * @param resolver - Token resolver service.
17
18
  * @param logger - Logger receiving resolution diagnostics.
18
19
  * @param launchpadLog - Optional launchpad resolution log label.
19
20
  * @returns Parsed token instance key.
21
+ * @throws ValidationError if the name has no launchpad vault.
20
22
  *
21
23
  * @example
22
24
  * ```typescript
23
- * const key = await resolveTokenInstanceFromName('GALA', resolver, logger);
24
- * console.log(key.collection); // "GALA"
25
+ * const key = await resolveTokenInstanceFromName('anime', resolver, logger);
26
+ * console.log(key.collection); // "Token"
25
27
  * ```
26
28
  */
27
29
  export declare function resolveTokenInstanceFromName(tokenName: string, resolver: TokenResolver, logger: Logger, launchpadLog?: string): Promise<TokenInstanceShape>;
@@ -1 +1 @@
1
- {"version":3,"file":"token-instance-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/token-instance-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,YAAY,SAAyC,GACpD,OAAO,CAAC,kBAAkB,CAAC,CAiC7B"}
1
+ {"version":3,"file":"token-instance-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/token-instance-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,YAAY,SAAyC,GACpD,OAAO,CAAC,kBAAkB,CAAC,CA0B7B"}
@@ -32,7 +32,7 @@ import type { TokenClassKey } from '../types/common';
32
32
  * if (isPipeDelimited(token)) {
33
33
  * return parsePipeDelimitedToken(token); // Fastest path
34
34
  * } else if (isDollarDelimited(token)) {
35
- * return parseDollarDelimitedTokenSafe(token); // Fast path
35
+ * return parseDollarDelimitedToken(token); // Fast path
36
36
  * }
37
37
  * ```
38
38
  */
@@ -143,7 +143,7 @@ export declare function parsePipeDelimitedToken(token: string): TokenClassKey;
143
143
  * @internal Used by parseToken()
144
144
  * @throws ValidationError if format is invalid
145
145
  */
146
- export declare function parseDollarDelimitedTokenSafe(token: string): TokenClassKey;
146
+ export declare function parseDollarDelimitedToken(token: string): TokenClassKey;
147
147
  /**
148
148
  * Check if token string is in pipe-delimited format
149
149
  *
@@ -1 +1 @@
1
- {"version":3,"file":"token-parser.d.ts","sourceRoot":"","sources":["../../src/utils/token-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,GAC/C,aAAa,CAyCf;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAGpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAG1E;AAGD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAe1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAqBtE"}
1
+ {"version":3,"file":"token-parser.d.ts","sourceRoot":"","sources":["../../src/utils/token-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,GAC/C,aAAa,CAyCf;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAGpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAGtE;AAGD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAe1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAqBtE"}
@@ -117,7 +117,8 @@ export declare function parseVaultAddressToTokenClassKey(vaultAddress: string):
117
117
  */
118
118
  export declare function parseVaultAddressToTokenInstance(vaultAddress: string): TokenInstanceKey;
119
119
  /**
120
- * Extracts the token symbol/type from a vault address
120
+ * Extracts the launchpad token symbol (carried in `type` of the shared `Token` collection) from a
121
+ * launchpad vault address. Throws for any other collection: a symbol cannot be derived from a class key.
121
122
  *
122
123
  * Vault address format: "service|Token$Unit$SYMBOL$eth:address$launchpad"
123
124
  * The symbol is the 3rd component (index 2) after splitting the token part by $.
@@ -1 +1 @@
1
- {"version":3,"file":"tokenNormalizer.d.ts","sourceRoot":"","sources":["../../src/utils/tokenNormalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIhF,OAAO,EAEL,eAAe,IAAI,qBAAqB,EAEzC,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAsE9E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAOhF;AAED;;;;;;;;GAQG;AACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CActD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAGpF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAMvF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAMjE"}
1
+ {"version":3,"file":"tokenNormalizer.d.ts","sourceRoot":"","sources":["../../src/utils/tokenNormalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIhF,OAAO,EAEL,eAAe,IAAI,qBAAqB,EAEzC,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAsE9E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAOhF;AAED;;;;;;;;GAQG;AACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CActD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAGpF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAMvF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAYxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAMjE"}
@@ -105,22 +105,6 @@ export declare function isValidAddressFormat(address: string): address is Addres
105
105
  * ```
106
106
  */
107
107
  export declare function validateNumericString(value: string, fieldName: string, allowZero?: boolean): void;
108
- /**
109
- * Generates a vault address for token operations
110
- *
111
- * Format: service|Token$Unit$[SYMBOL]$eth:[CREATOR_ADDRESS]$launchpad
112
- *
113
- * @param tokenSymbol Token symbol (e.g., "BOBA", "CMPASY")
114
- * @param creatorAddress Creator's wallet address (without 0x prefix)
115
- * @returns Vault address string for token operations
116
- *
117
- * @example
118
- * ```typescript
119
- * const vaultAddress = generateTokenVaultAddress("BOBA", "9401b171307be656f00f9e18df756643fd3a91de");
120
- * // Returns: "service|Token$Unit$BOBA$eth:9401b171307be656f00f9e18df756643fd3a91de$launchpad"
121
- * ```
122
- */
123
- export declare function generateTokenVaultAddress(tokenSymbol: string, creatorAddress: string): string;
124
108
  /**
125
109
  * Extracts token symbol and creator address from a vault address
126
110
  *
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACV,MAAM,2BAA2B,CAAC;AAkBnC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKlE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAkB,GAC5B,IAAI,CAKN;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAKtE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAK3D;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,IAAI,aAAa,CAO1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAc,GACxB,IAAI,CAGN;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,MAAM,CAuBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBxD"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACV,MAAM,2BAA2B,CAAC;AAiBnC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKlE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAkB,GAC5B,IAAI,CAKN;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAKxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAKtE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAK3D;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,IAAI,aAAa,CAO1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAc,GACxB,IAAI,CAGN;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/wallet/detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,cAAc,EAGd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAcpB,CAAC;AA2BX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqGzF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAChD,MAAM,IAAI,CAyDZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAGpG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/wallet/detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,cAAc,EAGd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAcpB,CAAC;AAiEX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsHzF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAChD,MAAM,IAAI,CAyDZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAGpG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Provides a unified interface for working with different wallet types:
5
5
  * - Private key wallets (ethers.js)
6
- * - Browser extension wallets (MetaMask, Coinbase, etc.)
7
- * - @gala-chain/connect wallets
6
+ * - Browser extension wallets (MetaMask, Coinbase, Trust, etc.)
7
+ * - Gala Wallet (window.gala)
8
8
  *
9
9
  * @example
10
10
  * ```typescript
@@ -35,7 +35,7 @@
35
35
  * // Use with SDK
36
36
  * const sdk = new LaunchpadSDK({
37
37
  * walletProvider: provider,
38
- * environment: 'production'
38
+ * env: 'prod'
39
39
  * });
40
40
  * ```
41
41
  *
@@ -44,7 +44,6 @@
44
44
  export type { DetectedWallet, Eip1193Provider, Eip6963AnnounceProviderEvent, Eip6963ProviderDetail, Eip6963ProviderInfo, TypedDataDomain, TypedDataField, WalletConnectionState, WalletDetectionResult, WalletProvider, WalletProviderConfig, WalletProviderType, } from './types';
45
45
  export { WalletProviderError, WalletProviderErrorCode, } from './types';
46
46
  export { ExternalWalletProvider } from './ExternalWalletProvider';
47
- export { type GalaChainConnectClient, GalaChainConnectProvider, } from './GalaChainConnectProvider';
48
47
  export { GalaWalletProvider } from './GalaWalletProvider';
49
48
  export { PrivateKeyProvider } from './PrivateKeyProvider';
50
49
  export { detectWallets, getWalletByRdns, hasAnyWallet, isWalletAvailable, KNOWN_WALLET_RDNS, subscribeToWalletChanges, } from './detection';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,YAAY,EACV,cAAc,EACd,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,KAAK,sBAAsB,EAC3B,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EACL,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,YAAY,EACV,cAAc,EACd,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EACL,aAAa,EACb,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
@@ -32,8 +32,8 @@ export type WalletProviderType = 'privateKey' | 'external';
32
32
  *
33
33
  * This interface abstracts wallet operations to support multiple wallet backends:
34
34
  * - Private key wallets (ethers.js Wallet)
35
- * - Browser extension wallets (MetaMask, Coinbase, etc. via EIP-1193)
36
- * - @gala-chain/connect wallets
35
+ * - Browser extension wallets (MetaMask, Coinbase, Trust, etc. via EIP-1193)
36
+ * - Gala Wallet (window.gala)
37
37
  *
38
38
  * @example
39
39
  * ```typescript
package/dist/wallet.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e,r=require("ethers");class t extends Error{constructor(e,r,t){super(e),this.code=r,this.originalError=t,this.name="WalletProviderError"}}function n(e,r,t){return{types:{EIP712Domain:s(e),...r},primaryType:Object.keys(r)[0],domain:o(e),message:t}}function s(e){const r=[];return void 0!==e.name&&r.push({name:"name",type:"string"}),void 0!==e.version&&r.push({name:"version",type:"string"}),void 0!==e.chainId&&r.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&r.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&r.push({name:"salt",type:"bytes32"}),r}function o(e){const r={};return void 0!==e.name&&(r.name=e.name),void 0!==e.version&&(r.version=e.version),void 0!==e.chainId&&(r.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(r.verifyingContract=e.verifyingContract),void 0!==e.salt&&(r.salt=e.salt),r}function i(e){return`0x${Buffer.from(e,"utf8").toString("hex")}`}async function a(e,r,t){return e.request({method:"personal_sign",params:[i(t),r]})}async function d(e,r,t,s,o){return e.request({method:"eth_signTypedData_v4",params:[r,JSON.stringify(n(t,s,o))]})}exports.WalletProviderErrorCode=void 0,(e=exports.WalletProviderErrorCode||(exports.WalletProviderErrorCode={})).USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN";class c{constructor(e){this.connectedAddress=null,this.provider=e,this.eventHandlers=function(e,t,n){if(null==e||"function"!=typeof e.on)return{accountsChanged:null,disconnect:null};const s=e=>{const n=e[0];t(void 0===n?null:r.getAddress(n))},o=()=>n();return e.on("accountsChanged",s),e.on("disconnect",o),{accountsChanged:s,disconnect:o}}(e,e=>{this.connectedAddress=e},()=>{this.connectedAddress=null})}removeEventListeners(){!function(e,r){if("function"!=typeof e.removeListener)return;null!==r.accountsChanged&&e.removeListener("accountsChanged",r.accountsChanged);null!==r.disconnect&&e.removeListener("disconnect",r.disconnect)}(this.provider,this.eventHandlers)}}async function l(e,r,n){try{return await e()}catch(e){if(e instanceof t)throw e;return r(e,n)}}const u=4001,h=4100,v=4900,A=4901;class p extends c{constructor(e){if(super(e),this.providerType="external",null==e)throw new t("EIP-1193 provider is required",exports.WalletProviderErrorCode.INVALID_CONFIG)}handleProviderError(e,r){const n=e;if(n.code===u)throw new t(`User rejected ${r}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(n.code===h)throw new t("Wallet is not authorized",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);if(n.code===v||n.code===A)throw this.connectedAddress=null,new t("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);throw new t(n.message??`${r} failed`,r.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(!this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new t("No accounts returned from wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);const n=e[0];if(void 0===n)throw new t("No accounts returned from wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);return this.connectedAddress=r.getAddress(n),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),l(()=>a(this.provider,this.connectedAddress,e),(e,r)=>this.handleProviderError(e,r),"sign message")}async signTypedData(e,r,t){return this.ensureConnected(),l(()=>d(this.provider,this.connectedAddress,e,r,t),(e,r)=>this.handleProviderError(e,r),"sign typed data")}async getAddress(){await Promise.resolve(),this.ensureConnected();const e=this.connectedAddress;if(null==e)throw new t("Wallet is not connected",exports.WalletProviderErrorCode.NOT_CONNECTED);return e}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){return Promise.reject(new t("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE))}getProvider(){return this.provider}}let E=null;async function w(){if(!1===E)return null;try{const e=["@gala-chain","connect"].join("/"),r=await import(e);return E=!0,r}catch{return E=!1,null}}class g{constructor(e){if(this.providerType="external",this.connectedAddress=null,!e)throw new t("@gala-chain/connect client is required",exports.WalletProviderErrorCode.INVALID_CONFIG);if("function"!=typeof e.signMessage)throw new t("Invalid @gala-chain/connect client: signMessage method is required",exports.WalletProviderErrorCode.INVALID_CONFIG);this.client=e}static async createBrowserClient(e){const r=await w();if(null==r)throw new t("Failed to create BrowserConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);const{BrowserConnectClient:n}=r,s=n,o=e?new s(e):new s;return new g(o)}static async createTrustWalletClient(){const e=await w();if(null==e)throw new t("Failed to create TrustWalletConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE);const{TrustWalletConnectClient:r}=e,n=new r;return new g(n)}static async isAvailable(){return null!==await w()}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED);return this.connectedAddress}async connect(){try{if("function"==typeof this.client.connect){const e=await this.client.connect();if(null!=e&&e.length>0)return this.connectedAddress=r.getAddress(e),this.connectedAddress}if("function"==typeof this.client.getAccount){const e=await this.client.getAccount();if(null!=e&&e.length>0)return this.connectedAddress=r.getAddress(e),this.connectedAddress}throw new t("Failed to connect: no account returned",exports.WalletProviderErrorCode.CONNECTION_FAILED)}catch(e){if(e instanceof t)throw e;const r=e instanceof Error?e.message:String(e);if(r.length>0&&(r.includes("rejected")||r.includes("denied")))throw new t("User rejected connection",exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);throw new t("Failed to connect to wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED,e instanceof Error?e:void 0)}}async disconnect(){"function"==typeof this.client.disconnect&&await this.client.disconnect(),this.connectedAddress=null}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{return await this.client.signMessage(e)}catch(e){const r=e instanceof Error?e.message:String(e);if(r.includes("rejected")||r.includes("denied"))throw new t("User rejected signing",exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);throw new t("Failed to sign message",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}signTypedData(e,r,n){return Promise.reject(new t("signTypedData is not supported by GalaChainConnectProvider. Use ExternalWalletProvider with the underlying EIP-1193 provider instead.",exports.WalletProviderErrorCode.SIGNING_FAILED))}async getAddress(){return await Promise.resolve(),this.ensureConnected()}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){return Promise.reject(new t("Private key is not accessible with @gala-chain/connect. Use PrivateKeyProvider if you need private key access.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE))}getClient(){return this.client}}class C{constructor(e){this.providerType="privateKey",this.connected=!0;try{this.wallet=new r.Wallet(e)}catch(e){throw new t("Invalid private key provided",exports.WalletProviderErrorCode.INVALID_CONFIG,e instanceof Error?e:void 0)}}static fromWallet(e){return new C(e.privateKey)}async signMessage(e){try{return await this.wallet.signMessage(e)}catch(e){throw new t("Failed to sign message",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,r,n){try{return await this.wallet.signTypedData(e,r,n)}catch(e){throw new t("Failed to sign typed data",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}getAddress(){return Promise.resolve(r.getAddress(this.wallet.address))}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}disconnect(){return this.connected=!1,Promise.resolve()}isConnected(){return this.connected}getPrivateKey(){return Promise.resolve(this.wallet.privateKey)}getWallet(){return this.wallet}}const f={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},y={[f.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4=",[f.GALA]:"data:image/png;base64,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"};function I(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}function N(){if(!I())return null;return window.ethereum??null}async function P(e=500){const r=[],t=new Map;return I()?new Promise(n=>{const s=new Set,o=e=>{const n=e,{info:o,provider:i}=n.detail;if(s.has(o.uuid))return;s.add(o.uuid);const a={id:o.rdns||o.uuid,name:o.name,rdns:o.rdns||o.uuid,icon:o.icon??y[o.rdns||""]??"",provider:i,isInjected:!1};r.push(a),t.set(a.id,a)};window.addEventListener("eip6963:announceProvider",o),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",o),0===r.length){const e=N();if(e){const n=window;let s="Browser Wallet",o="injected";n.ethereum?.isMetaMask?(s="MetaMask",o=f.METAMASK):n.ethereum?.isCoinbaseWallet?(s="Coinbase Wallet",o=f.COINBASE):n.ethereum?.isTrust&&(s="Trust Wallet",o=f.TRUST_WALLET);const i={id:o,name:s,rdns:o,icon:y[o]??"",provider:e,isInjected:!0};r.push(i),t.set(i.id,i)}}const e=window;if(e.gala?.request&&!t.has(f.GALA)){const n={id:f.GALA,name:"Gala Wallet",rdns:f.GALA,icon:y[f.GALA]??"",provider:e.gala,isInjected:!0};r.push(n),t.set(n.id,n)}n({wallets:r,byId:t,hasWallets:r.length>0,...void 0===r[0]?{}:{primary:r[0]}})},e)}):{wallets:r,byId:t,hasWallets:!1}}async function m(e,r){return(await P(r)).byId.get(e)??null}function W(e){return"privateKey"===e.providerType}function L(e){return"object"==typeof e&&null!==e&&"request"in e&&"function"==typeof e.request}exports.ExternalWalletProvider=p,exports.GalaChainConnectProvider=g,exports.GalaWalletProvider=class extends c{constructor(e){if(super(e),this.providerType="external",this.galaRawAddress=null,!e)throw new t("Gala Wallet provider is required",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE)}parseGalaError(e){if(e instanceof Error)try{const r=JSON.parse(e.message);if("object"==typeof r&&null!==r){const t=r,n={message:"string"==typeof t.message?t.message:e.message};return"number"==typeof t.code&&(n.code=t.code),n}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(e,r){const n=this.parseGalaError(e);if(4001===n.code)throw new t(`User rejected ${r}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(4900===n.code)throw this.connectedAddress=null,new t("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);const s=n.message?n.message:`${r} failed`;throw new t(s,r.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new t("No accounts returned from Gala Wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);const n=e[0];if(void 0===n)throw new t("No accounts returned from Gala Wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);this.galaRawAddress=n;let s=n;return s.startsWith("eth|")?s=`0x${s.slice(4)}`:s.startsWith("0x")||(s=`0x${s}`),this.connectedAddress=r.getAddress(s),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.galaRawAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),l(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),a(this.provider,this.connectedAddress,e)),(e,r)=>this.handleProviderError(e,r),"sign message")}async signTypedData(e,r,t){return this.ensureConnected(),l(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),d(this.provider,this.connectedAddress,e,r,t)),(e,r)=>this.handleProviderError(e,r),"sign typed data")}getAddress(){return this.ensureConnected(),Promise.resolve(this.connectedAddress)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){throw new t("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}},exports.KNOWN_WALLET_RDNS=f,exports.PrivateKeyProvider=C,exports.WalletProviderError=t,exports.createProviderFromEip1193=function(e){return new p(e)},exports.createProviderFromWallet=function(e){return C.fromWallet(e)},exports.createWalletProvider=function(e){if(null!==e.privateKey&&void 0!==e.privateKey&&e.privateKey.length>0)return new C(e.privateKey);if(null!==e.eip1193Provider&&void 0!==e.eip1193Provider)return new p(e.eip1193Provider);throw new t("Invalid wallet provider config: must provide either privateKey or eip1193Provider",exports.WalletProviderErrorCode.INVALID_CONFIG)},exports.detectWallets=P,exports.ensureConnected=async function(e){return e.isConnected()?e.getAddress():e.connect()},exports.getInjectedEip1193Provider=function(){if("undefined"==typeof window)return null;const e=window.ethereum;return L(e)?e:null},exports.getPrivateKeyIfAvailable=async function(e){if(W(e))try{return await e.getPrivateKey()}catch{return}},exports.getWalletByRdns=m,exports.hasAnyWallet=function(){return null!==N()},exports.isEip1193Provider=L,exports.isExternalProvider=function(e){return"external"===e.providerType},exports.isPrivateKeyProvider=W,exports.isWalletAvailable=async function(e,r){return null!==await m(e,r)},exports.providerToWallet=function(e){if(e&&W(e))return e.getWallet()},exports.subscribeToWalletChanges=function(e){if(!I())return()=>{};let r=!0,t={wallets:[],byId:new Map,hasWallets:!1};const n=n=>{if(!r)return;const s=n,{info:o,provider:i}=s.detail,a=o.rdns||o.uuid;if(t.byId.has(a))return;const d={id:a,name:o.name,rdns:a,icon:o.icon??"",provider:i,isInjected:!1},c=[...t.wallets,d],l=new Map(t.byId);l.set(d.id,d),t={wallets:c,byId:l,hasWallets:!0,...void 0===c[0]?{}:{primary:c[0]}},e(t)};return window.addEventListener("eip6963:announceProvider",n),P().then(n=>{r&&(t=n,e(n))}),()=>{r=!1,window.removeEventListener("eip6963:announceProvider",n)}},exports.walletToProvider=function(e){if(e)return C.fromWallet(e)};
1
+ "use strict";var e,r=require("ethers");class t extends Error{constructor(e,r,t){super(e),this.code=r,this.originalError=t,this.name="WalletProviderError"}}function n(e,r,t){return{types:{EIP712Domain:s(e),...r},primaryType:Object.keys(r)[0],domain:o(e),message:t}}function s(e){const r=[];return void 0!==e.name&&r.push({name:"name",type:"string"}),void 0!==e.version&&r.push({name:"version",type:"string"}),void 0!==e.chainId&&r.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&r.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&r.push({name:"salt",type:"bytes32"}),r}function o(e){const r={};return void 0!==e.name&&(r.name=e.name),void 0!==e.version&&(r.version=e.version),void 0!==e.chainId&&(r.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(r.verifyingContract=e.verifyingContract),void 0!==e.salt&&(r.salt=e.salt),r}function i(e){return`0x${Buffer.from(e,"utf8").toString("hex")}`}async function a(e,r,t){return e.request({method:"personal_sign",params:[i(t),r]})}async function d(e,r,t,s,o){return e.request({method:"eth_signTypedData_v4",params:[r,JSON.stringify(n(t,s,o))]})}exports.WalletProviderErrorCode=void 0,(e=exports.WalletProviderErrorCode||(exports.WalletProviderErrorCode={})).USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN";class c{constructor(e){this.connectedAddress=null,this.provider=e,this.eventHandlers=function(e,t,n){if(null==e||"function"!=typeof e.on)return{accountsChanged:null,disconnect:null};const s=e=>{const n=e[0];t(void 0===n?null:r.getAddress(n))},o=()=>n();return e.on("accountsChanged",s),e.on("disconnect",o),{accountsChanged:s,disconnect:o}}(e,e=>{this.connectedAddress=e},()=>{this.connectedAddress=null})}removeEventListeners(){!function(e,r){if("function"!=typeof e.removeListener)return;null!==r.accountsChanged&&e.removeListener("accountsChanged",r.accountsChanged);null!==r.disconnect&&e.removeListener("disconnect",r.disconnect)}(this.provider,this.eventHandlers)}}async function l(e,r,n){try{return await e()}catch(e){if(e instanceof t)throw e;return r(e,n)}}const u=4001,h=4100,v=4900,A=4901;class p extends c{constructor(e){if(super(e),this.providerType="external",null==e)throw new t("EIP-1193 provider is required",exports.WalletProviderErrorCode.INVALID_CONFIG)}handleProviderError(e,r){const n=e;if(n.code===u)throw new t(`User rejected ${r}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(n.code===h)throw new t("Wallet is not authorized",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);if(n.code===v||n.code===A)throw this.connectedAddress=null,new t("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);throw new t(n.message??`${r} failed`,r.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(!this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new t("No accounts returned from wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);const n=e[0];if(void 0===n)throw new t("No accounts returned from wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);return this.connectedAddress=r.getAddress(n),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),l(()=>a(this.provider,this.connectedAddress,e),(e,r)=>this.handleProviderError(e,r),"sign message")}async signTypedData(e,r,t){return this.ensureConnected(),l(()=>d(this.provider,this.connectedAddress,e,r,t),(e,r)=>this.handleProviderError(e,r),"sign typed data")}async getAddress(){await Promise.resolve(),this.ensureConnected();const e=this.connectedAddress;if(null==e)throw new t("Wallet is not connected",exports.WalletProviderErrorCode.NOT_CONNECTED);return e}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){return Promise.reject(new t("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE))}getProvider(){return this.provider}}class E{constructor(e){this.providerType="privateKey",this.connected=!0;try{this.wallet=new r.Wallet(e)}catch(e){throw new t("Invalid private key provided",exports.WalletProviderErrorCode.INVALID_CONFIG,e instanceof Error?e:void 0)}}static fromWallet(e){return new E(e.privateKey)}async signMessage(e){try{return await this.wallet.signMessage(e)}catch(e){throw new t("Failed to sign message",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,r,n){try{return await this.wallet.signTypedData(e,r,n)}catch(e){throw new t("Failed to sign typed data",exports.WalletProviderErrorCode.SIGNING_FAILED,e instanceof Error?e:void 0)}}getAddress(){return Promise.resolve(r.getAddress(this.wallet.address))}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}disconnect(){return this.connected=!1,Promise.resolve()}isConnected(){return this.connected}getPrivateKey(){return Promise.resolve(this.wallet.privateKey)}getWallet(){return this.wallet}}const w={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},f={[w.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4=",[w.GALA]:"data:image/png;base64,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"};function g(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}function y(){if(!g())return null;return window.ethereum??null}function N(e){return"object"==typeof e&&null!==e&&"function"==typeof e.request}async function m(e=500){const r=[],t=new Map;return g()?new Promise(n=>{const s=new Set,o=e=>{const n=e,{info:o,provider:i}=n.detail;if(s.has(o.uuid))return;s.add(o.uuid);const a={id:o.rdns||o.uuid,name:o.name,rdns:o.rdns||o.uuid,icon:o.icon??f[o.rdns||""]??"",provider:i,isInjected:!1};r.push(a),t.set(a.id,a)};window.addEventListener("eip6963:announceProvider",o),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",o),0===r.length){const e=y();if(e){const n=window;let s="Browser Wallet",o="injected";n.ethereum?.isMetaMask?(s="MetaMask",o=w.METAMASK):n.ethereum?.isCoinbaseWallet?(s="Coinbase Wallet",o=w.COINBASE):n.ethereum?.isTrust&&(s="Trust Wallet",o=w.TRUST_WALLET);const i={id:o,name:s,rdns:o,icon:f[o]??"",provider:e,isInjected:!0};r.push(i),t.set(i.id,i)}}if(!t.has(w.TRUST_WALLET)){const e=function(){if(!g())return null;const e=window;if(N(e.ethereum)&&e.ethereum.isTrust)return e.ethereum;const r=e.ethereum?.providers?.find(e=>N(e)&&!0===e.isTrust);return void 0!==r?r:N(e.trustwallet)?e.trustwallet:null}();if(null!==e&&!r.some(r=>r.provider===e)){const n={id:w.TRUST_WALLET,name:"Trust Wallet",rdns:w.TRUST_WALLET,icon:f[w.TRUST_WALLET]??"",provider:e,isInjected:!0};r.push(n),t.set(n.id,n)}}const e=window;if(e.gala?.request&&!t.has(w.GALA)){const n={id:w.GALA,name:"Gala Wallet",rdns:w.GALA,icon:f[w.GALA]??"",provider:e.gala,isInjected:!0};r.push(n),t.set(n.id,n)}n({wallets:r,byId:t,hasWallets:r.length>0,...void 0===r[0]?{}:{primary:r[0]}})},e)}):{wallets:r,byId:t,hasWallets:!1}}async function I(e,r){return(await m(r)).byId.get(e)??null}function C(e){return"privateKey"===e.providerType}function P(e){return"object"==typeof e&&null!==e&&"request"in e&&"function"==typeof e.request}exports.ExternalWalletProvider=p,exports.GalaWalletProvider=class extends c{constructor(e){if(super(e),this.providerType="external",this.galaRawAddress=null,!e)throw new t("Gala Wallet provider is required",exports.WalletProviderErrorCode.PROVIDER_NOT_AVAILABLE)}parseGalaError(e){if(e instanceof Error)try{const r=JSON.parse(e.message);if("object"==typeof r&&null!==r){const t=r,n={message:"string"==typeof t.message?t.message:e.message};return"number"==typeof t.code&&(n.code=t.code),n}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(e,r){const n=this.parseGalaError(e);if(4001===n.code)throw new t(`User rejected ${r}`,exports.WalletProviderErrorCode.USER_REJECTED,e instanceof Error?e:void 0);if(4900===n.code)throw this.connectedAddress=null,new t("Wallet disconnected",exports.WalletProviderErrorCode.NOT_CONNECTED,e instanceof Error?e:void 0);const s=n.message?n.message:`${r} failed`;throw new t(s,r.includes("sign")?exports.WalletProviderErrorCode.SIGNING_FAILED:exports.WalletProviderErrorCode.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",exports.WalletProviderErrorCode.NOT_CONNECTED)}async connect(){try{const e=await this.provider.request({method:"eth_requestAccounts"});if(null==e||0===e.length)throw new t("No accounts returned from Gala Wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);const n=e[0];if(void 0===n)throw new t("No accounts returned from Gala Wallet",exports.WalletProviderErrorCode.CONNECTION_FAILED);this.galaRawAddress=n;let s=n;return s.startsWith("eth|")?s=`0x${s.slice(4)}`:s.startsWith("0x")||(s=`0x${s}`),this.connectedAddress=r.getAddress(s),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.galaRawAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),l(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),a(this.provider,this.connectedAddress,e)),(e,r)=>this.handleProviderError(e,r),"sign message")}async signTypedData(e,r,t){return this.ensureConnected(),l(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),d(this.provider,this.connectedAddress,e,r,t)),(e,r)=>this.handleProviderError(e,r),"sign typed data")}getAddress(){return this.ensureConnected(),Promise.resolve(this.connectedAddress)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){throw new t("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",exports.WalletProviderErrorCode.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}},exports.KNOWN_WALLET_RDNS=w,exports.PrivateKeyProvider=E,exports.WalletProviderError=t,exports.createProviderFromEip1193=function(e){return new p(e)},exports.createProviderFromWallet=function(e){return E.fromWallet(e)},exports.createWalletProvider=function(e){if(null!==e.privateKey&&void 0!==e.privateKey&&e.privateKey.length>0)return new E(e.privateKey);if(null!==e.eip1193Provider&&void 0!==e.eip1193Provider)return new p(e.eip1193Provider);throw new t("Invalid wallet provider config: must provide either privateKey or eip1193Provider",exports.WalletProviderErrorCode.INVALID_CONFIG)},exports.detectWallets=m,exports.ensureConnected=async function(e){return e.isConnected()?e.getAddress():e.connect()},exports.getInjectedEip1193Provider=function(){if("undefined"==typeof window)return null;const e=window.ethereum;return P(e)?e:null},exports.getPrivateKeyIfAvailable=async function(e){if(C(e))try{return await e.getPrivateKey()}catch{return}},exports.getWalletByRdns=I,exports.hasAnyWallet=function(){return null!==y()},exports.isEip1193Provider=P,exports.isExternalProvider=function(e){return"external"===e.providerType},exports.isPrivateKeyProvider=C,exports.isWalletAvailable=async function(e,r){return null!==await I(e,r)},exports.providerToWallet=function(e){if(e&&C(e))return e.getWallet()},exports.subscribeToWalletChanges=function(e){if(!g())return()=>{};let r=!0,t={wallets:[],byId:new Map,hasWallets:!1};const n=n=>{if(!r)return;const s=n,{info:o,provider:i}=s.detail,a=o.rdns||o.uuid;if(t.byId.has(a))return;const d={id:a,name:o.name,rdns:a,icon:o.icon??"",provider:i,isInjected:!1},c=[...t.wallets,d],l=new Map(t.byId);l.set(d.id,d),t={wallets:c,byId:l,hasWallets:!0,...void 0===c[0]?{}:{primary:c[0]}},e(t)};return window.addEventListener("eip6963:announceProvider",n),m().then(n=>{r&&(t=n,e(n))}),()=>{r=!1,window.removeEventListener("eip6963:announceProvider",n)}},exports.walletToProvider=function(e){if(e)return E.fromWallet(e)};
@@ -1 +1 @@
1
- import{getAddress as e,Wallet as n}from"ethers";class t extends Error{constructor(e,n,t){super(e),this.code=n,this.originalError=t,this.name="WalletProviderError"}}var r;function s(e,n,t){return{types:{EIP712Domain:i(e),...n},primaryType:Object.keys(n)[0],domain:o(e),message:t}}function i(e){const n=[];return void 0!==e.name&&n.push({name:"name",type:"string"}),void 0!==e.version&&n.push({name:"version",type:"string"}),void 0!==e.chainId&&n.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&n.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&n.push({name:"salt",type:"bytes32"}),n}function o(e){const n={};return void 0!==e.name&&(n.name=e.name),void 0!==e.version&&(n.version=e.version),void 0!==e.chainId&&(n.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(n.verifyingContract=e.verifyingContract),void 0!==e.salt&&(n.salt=e.salt),n}function a(e){return`0x${Buffer.from(e,"utf8").toString("hex")}`}async function c(e,n,t){return e.request({method:"personal_sign",params:[a(t),n]})}async function d(e,n,t,r,i){return e.request({method:"eth_signTypedData_v4",params:[n,JSON.stringify(s(t,r,i))]})}!function(e){e.USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN"}(r||(r={}));class l{constructor(n){this.connectedAddress=null,this.provider=n,this.eventHandlers=function(n,t,r){if(null==n||"function"!=typeof n.on)return{accountsChanged:null,disconnect:null};const s=n=>{const r=n[0];t(void 0===r?null:e(r))},i=()=>r();return n.on("accountsChanged",s),n.on("disconnect",i),{accountsChanged:s,disconnect:i}}(n,e=>{this.connectedAddress=e},()=>{this.connectedAddress=null})}removeEventListeners(){!function(e,n){if("function"!=typeof e.removeListener)return;null!==n.accountsChanged&&e.removeListener("accountsChanged",n.accountsChanged);null!==n.disconnect&&e.removeListener("disconnect",n.disconnect)}(this.provider,this.eventHandlers)}}async function u(e,n,r){try{return await e()}catch(e){if(e instanceof t)throw e;return n(e,r)}}const h=4001,A=4100,w=4900,v=4901;class g extends l{constructor(e){if(super(e),this.providerType="external",null==e)throw new t("EIP-1193 provider is required",r.INVALID_CONFIG)}handleProviderError(e,n){const s=e;if(s.code===h)throw new t(`User rejected ${n}`,r.USER_REJECTED,e instanceof Error?e:void 0);if(s.code===A)throw new t("Wallet is not authorized",r.NOT_CONNECTED,e instanceof Error?e:void 0);if(s.code===w||s.code===v)throw this.connectedAddress=null,new t("Wallet disconnected",r.NOT_CONNECTED,e instanceof Error?e:void 0);throw new t(s.message??`${n} failed`,n.includes("sign")?r.SIGNING_FAILED:r.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(!this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",r.NOT_CONNECTED)}async connect(){try{const n=await this.provider.request({method:"eth_requestAccounts"});if(null==n||0===n.length)throw new t("No accounts returned from wallet",r.CONNECTION_FAILED);const s=n[0];if(void 0===s)throw new t("No accounts returned from wallet",r.CONNECTION_FAILED);return this.connectedAddress=e(s),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),u(()=>c(this.provider,this.connectedAddress,e),(e,n)=>this.handleProviderError(e,n),"sign message")}async signTypedData(e,n,t){return this.ensureConnected(),u(()=>d(this.provider,this.connectedAddress,e,n,t),(e,n)=>this.handleProviderError(e,n),"sign typed data")}async getAddress(){await Promise.resolve(),this.ensureConnected();const e=this.connectedAddress;if(null==e)throw new t("Wallet is not connected",r.NOT_CONNECTED);return e}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){return Promise.reject(new t("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",r.PRIVATE_KEY_NOT_ACCESSIBLE))}getProvider(){return this.provider}}let E=null;async function f(){if(!1===E)return null;try{const e=["@gala-chain","connect"].join("/"),n=await import(e);return E=!0,n}catch{return E=!1,null}}class y{constructor(e){if(this.providerType="external",this.connectedAddress=null,!e)throw new t("@gala-chain/connect client is required",r.INVALID_CONFIG);if("function"!=typeof e.signMessage)throw new t("Invalid @gala-chain/connect client: signMessage method is required",r.INVALID_CONFIG);this.client=e}static async createBrowserClient(e){const n=await f();if(null==n)throw new t("Failed to create BrowserConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",r.PROVIDER_NOT_AVAILABLE);const{BrowserConnectClient:s}=n,i=s,o=e?new i(e):new i;return new y(o)}static async createTrustWalletClient(){const e=await f();if(null==e)throw new t("Failed to create TrustWalletConnectClient: @gala-chain/connect is not installed. Install it with: npm install @gala-chain/connect",r.PROVIDER_NOT_AVAILABLE);const{TrustWalletConnectClient:n}=e,s=new n;return new y(s)}static async isAvailable(){return null!==await f()}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",r.NOT_CONNECTED);return this.connectedAddress}async connect(){try{if("function"==typeof this.client.connect){const n=await this.client.connect();if(null!=n&&n.length>0)return this.connectedAddress=e(n),this.connectedAddress}if("function"==typeof this.client.getAccount){const n=await this.client.getAccount();if(null!=n&&n.length>0)return this.connectedAddress=e(n),this.connectedAddress}throw new t("Failed to connect: no account returned",r.CONNECTION_FAILED)}catch(e){if(e instanceof t)throw e;const n=e instanceof Error?e.message:String(e);if(n.length>0&&(n.includes("rejected")||n.includes("denied")))throw new t("User rejected connection",r.USER_REJECTED,e instanceof Error?e:void 0);throw new t("Failed to connect to wallet",r.CONNECTION_FAILED,e instanceof Error?e:void 0)}}async disconnect(){"function"==typeof this.client.disconnect&&await this.client.disconnect(),this.connectedAddress=null}isConnected(){return null!==this.connectedAddress}async signMessage(e){this.ensureConnected();try{return await this.client.signMessage(e)}catch(e){const n=e instanceof Error?e.message:String(e);if(n.includes("rejected")||n.includes("denied"))throw new t("User rejected signing",r.USER_REJECTED,e instanceof Error?e:void 0);throw new t("Failed to sign message",r.SIGNING_FAILED,e instanceof Error?e:void 0)}}signTypedData(e,n,s){return Promise.reject(new t("signTypedData is not supported by GalaChainConnectProvider. Use ExternalWalletProvider with the underlying EIP-1193 provider instead.",r.SIGNING_FAILED))}async getAddress(){return await Promise.resolve(),this.ensureConnected()}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){return Promise.reject(new t("Private key is not accessible with @gala-chain/connect. Use PrivateKeyProvider if you need private key access.",r.PRIVATE_KEY_NOT_ACCESSIBLE))}getClient(){return this.client}}class p extends l{constructor(e){if(super(e),this.providerType="external",this.galaRawAddress=null,!e)throw new t("Gala Wallet provider is required",r.PROVIDER_NOT_AVAILABLE)}parseGalaError(e){if(e instanceof Error)try{const n=JSON.parse(e.message);if("object"==typeof n&&null!==n){const t=n,r={message:"string"==typeof t.message?t.message:e.message};return"number"==typeof t.code&&(r.code=t.code),r}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(e,n){const s=this.parseGalaError(e);if(4001===s.code)throw new t(`User rejected ${n}`,r.USER_REJECTED,e instanceof Error?e:void 0);if(4900===s.code)throw this.connectedAddress=null,new t("Wallet disconnected",r.NOT_CONNECTED,e instanceof Error?e:void 0);const i=s.message?s.message:`${n} failed`;throw new t(i,n.includes("sign")?r.SIGNING_FAILED:r.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new t("Wallet is not connected. Call connect() first.",r.NOT_CONNECTED)}async connect(){try{const n=await this.provider.request({method:"eth_requestAccounts"});if(null==n||0===n.length)throw new t("No accounts returned from Gala Wallet",r.CONNECTION_FAILED);const s=n[0];if(void 0===s)throw new t("No accounts returned from Gala Wallet",r.CONNECTION_FAILED);this.galaRawAddress=s;let i=s;return i.startsWith("eth|")?i=`0x${i.slice(4)}`:i.startsWith("0x")||(i=`0x${i}`),this.connectedAddress=e(i),this.connectedAddress}catch(e){if(e instanceof t)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.galaRawAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),u(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),c(this.provider,this.connectedAddress,e)),(e,n)=>this.handleProviderError(e,n),"sign message")}async signTypedData(e,n,t){return this.ensureConnected(),u(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),d(this.provider,this.connectedAddress,e,n,t)),(e,n)=>this.handleProviderError(e,n),"sign typed data")}getAddress(){return this.ensureConnected(),Promise.resolve(this.connectedAddress)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){throw new t("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",r.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}}class I{constructor(e){this.providerType="privateKey",this.connected=!0;try{this.wallet=new n(e)}catch(e){throw new t("Invalid private key provided",r.INVALID_CONFIG,e instanceof Error?e:void 0)}}static fromWallet(e){return new I(e.privateKey)}async signMessage(e){try{return await this.wallet.signMessage(e)}catch(e){throw new t("Failed to sign message",r.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,n,s){try{return await this.wallet.signTypedData(e,n,s)}catch(e){throw new t("Failed to sign typed data",r.SIGNING_FAILED,e instanceof Error?e:void 0)}}getAddress(){return Promise.resolve(e(this.wallet.address))}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}disconnect(){return this.connected=!1,Promise.resolve()}isConnected(){return this.connected}getPrivateKey(){return Promise.resolve(this.wallet.privateKey)}getWallet(){return this.wallet}}const N={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},m={[N.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4=",[N.GALA]:"data:image/png;base64,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"};function C(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}function L(){if(!C())return null;return window.ethereum??null}async function O(e=500){const n=[],t=new Map;return C()?new Promise(r=>{const s=new Set,i=e=>{const r=e,{info:i,provider:o}=r.detail;if(s.has(i.uuid))return;s.add(i.uuid);const a={id:i.rdns||i.uuid,name:i.name,rdns:i.rdns||i.uuid,icon:i.icon??m[i.rdns||""]??"",provider:o,isInjected:!1};n.push(a),t.set(a.id,a)};window.addEventListener("eip6963:announceProvider",i),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",i),0===n.length){const e=L();if(e){const r=window;let s="Browser Wallet",i="injected";r.ethereum?.isMetaMask?(s="MetaMask",i=N.METAMASK):r.ethereum?.isCoinbaseWallet?(s="Coinbase Wallet",i=N.COINBASE):r.ethereum?.isTrust&&(s="Trust Wallet",i=N.TRUST_WALLET);const o={id:i,name:s,rdns:i,icon:m[i]??"",provider:e,isInjected:!0};n.push(o),t.set(o.id,o)}}const e=window;if(e.gala?.request&&!t.has(N.GALA)){const r={id:N.GALA,name:"Gala Wallet",rdns:N.GALA,icon:m[N.GALA]??"",provider:e.gala,isInjected:!0};n.push(r),t.set(r.id,r)}r({wallets:n,byId:t,hasWallets:n.length>0,...void 0===n[0]?{}:{primary:n[0]}})},e)}):{wallets:n,byId:t,hasWallets:!1}}function T(e){if(!C())return()=>{};let n=!0,t={wallets:[],byId:new Map,hasWallets:!1};const r=r=>{if(!n)return;const s=r,{info:i,provider:o}=s.detail,a=i.rdns||i.uuid;if(t.byId.has(a))return;const c={id:a,name:i.name,rdns:a,icon:i.icon??"",provider:o,isInjected:!1},d=[...t.wallets,c],l=new Map(t.byId);l.set(c.id,c),t={wallets:d,byId:l,hasWallets:!0,...void 0===d[0]?{}:{primary:d[0]}},e(t)};return window.addEventListener("eip6963:announceProvider",r),O().then(r=>{n&&(t=r,e(r))}),()=>{n=!1,window.removeEventListener("eip6963:announceProvider",r)}}async function D(e,n){return(await O(n)).byId.get(e)??null}async function P(e,n){return null!==await D(e,n)}function S(){return null!==L()}function M(e){if(null!==e.privateKey&&void 0!==e.privateKey&&e.privateKey.length>0)return new I(e.privateKey);if(null!==e.eip1193Provider&&void 0!==e.eip1193Provider)return new g(e.eip1193Provider);throw new t("Invalid wallet provider config: must provide either privateKey or eip1193Provider",r.INVALID_CONFIG)}function F(e){return I.fromWallet(e)}function G(e){return new g(e)}function R(e){return"privateKey"===e.providerType}function V(e){return"external"===e.providerType}async function W(e){if(R(e))try{return await e.getPrivateKey()}catch{return}}function B(e){if(e)return I.fromWallet(e)}function U(e){if(e&&R(e))return e.getWallet()}async function K(e){return e.isConnected()?e.getAddress():e.connect()}function b(e){return"object"==typeof e&&null!==e&&"request"in e&&"function"==typeof e.request}function _(){if("undefined"==typeof window)return null;const e=window.ethereum;return b(e)?e:null}export{g as ExternalWalletProvider,y as GalaChainConnectProvider,p as GalaWalletProvider,N as KNOWN_WALLET_RDNS,I as PrivateKeyProvider,t as WalletProviderError,r as WalletProviderErrorCode,G as createProviderFromEip1193,F as createProviderFromWallet,M as createWalletProvider,O as detectWallets,K as ensureConnected,_ as getInjectedEip1193Provider,W as getPrivateKeyIfAvailable,D as getWalletByRdns,S as hasAnyWallet,b as isEip1193Provider,V as isExternalProvider,R as isPrivateKeyProvider,P as isWalletAvailable,U as providerToWallet,T as subscribeToWalletChanges,B as walletToProvider};
1
+ import{getAddress as e,Wallet as t}from"ethers";class n extends Error{constructor(e,t,n){super(e),this.code=t,this.originalError=n,this.name="WalletProviderError"}}var r;function s(e,t,n){return{types:{EIP712Domain:i(e),...t},primaryType:Object.keys(t)[0],domain:o(e),message:n}}function i(e){const t=[];return void 0!==e.name&&t.push({name:"name",type:"string"}),void 0!==e.version&&t.push({name:"version",type:"string"}),void 0!==e.chainId&&t.push({name:"chainId",type:"uint256"}),void 0!==e.verifyingContract&&t.push({name:"verifyingContract",type:"address"}),void 0!==e.salt&&t.push({name:"salt",type:"bytes32"}),t}function o(e){const t={};return void 0!==e.name&&(t.name=e.name),void 0!==e.version&&(t.version=e.version),void 0!==e.chainId&&(t.chainId="bigint"==typeof e.chainId||"number"==typeof e.chainId?`0x${e.chainId.toString(16)}`:e.chainId),void 0!==e.verifyingContract&&(t.verifyingContract=e.verifyingContract),void 0!==e.salt&&(t.salt=e.salt),t}function a(e){return`0x${Buffer.from(e,"utf8").toString("hex")}`}async function d(e,t,n){return e.request({method:"personal_sign",params:[a(n),t]})}async function c(e,t,n,r,i){return e.request({method:"eth_signTypedData_v4",params:[t,JSON.stringify(s(n,r,i))]})}!function(e){e.USER_REJECTED="USER_REJECTED",e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTION_FAILED="CONNECTION_FAILED",e.SIGNING_FAILED="SIGNING_FAILED",e.PROVIDER_NOT_AVAILABLE="PROVIDER_NOT_AVAILABLE",e.PRIVATE_KEY_NOT_ACCESSIBLE="PRIVATE_KEY_NOT_ACCESSIBLE",e.INVALID_CONFIG="INVALID_CONFIG",e.CHAIN_MISMATCH="CHAIN_MISMATCH",e.UNKNOWN="UNKNOWN"}(r||(r={}));class l{constructor(t){this.connectedAddress=null,this.provider=t,this.eventHandlers=function(t,n,r){if(null==t||"function"!=typeof t.on)return{accountsChanged:null,disconnect:null};const s=t=>{const r=t[0];n(void 0===r?null:e(r))},i=()=>r();return t.on("accountsChanged",s),t.on("disconnect",i),{accountsChanged:s,disconnect:i}}(t,e=>{this.connectedAddress=e},()=>{this.connectedAddress=null})}removeEventListeners(){!function(e,t){if("function"!=typeof e.removeListener)return;null!==t.accountsChanged&&e.removeListener("accountsChanged",t.accountsChanged);null!==t.disconnect&&e.removeListener("disconnect",t.disconnect)}(this.provider,this.eventHandlers)}}async function u(e,t,r){try{return await e()}catch(e){if(e instanceof n)throw e;return t(e,r)}}const h=4001,A=4100,v=4900,w=4901;class f extends l{constructor(e){if(super(e),this.providerType="external",null==e)throw new n("EIP-1193 provider is required",r.INVALID_CONFIG)}handleProviderError(e,t){const s=e;if(s.code===h)throw new n(`User rejected ${t}`,r.USER_REJECTED,e instanceof Error?e:void 0);if(s.code===A)throw new n("Wallet is not authorized",r.NOT_CONNECTED,e instanceof Error?e:void 0);if(s.code===v||s.code===w)throw this.connectedAddress=null,new n("Wallet disconnected",r.NOT_CONNECTED,e instanceof Error?e:void 0);throw new n(s.message??`${t} failed`,t.includes("sign")?r.SIGNING_FAILED:r.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(!this.connectedAddress)throw new n("Wallet is not connected. Call connect() first.",r.NOT_CONNECTED)}async connect(){try{const t=await this.provider.request({method:"eth_requestAccounts"});if(null==t||0===t.length)throw new n("No accounts returned from wallet",r.CONNECTION_FAILED);const s=t[0];if(void 0===s)throw new n("No accounts returned from wallet",r.CONNECTION_FAILED);return this.connectedAddress=e(s),this.connectedAddress}catch(e){if(e instanceof n)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.removeEventListeners();try{await this.provider.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),u(()=>d(this.provider,this.connectedAddress,e),(e,t)=>this.handleProviderError(e,t),"sign message")}async signTypedData(e,t,n){return this.ensureConnected(),u(()=>c(this.provider,this.connectedAddress,e,t,n),(e,t)=>this.handleProviderError(e,t),"sign typed data")}async getAddress(){await Promise.resolve(),this.ensureConnected();const e=this.connectedAddress;if(null==e)throw new n("Wallet is not connected",r.NOT_CONNECTED);return e}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async getPrivateKey(){return Promise.reject(new n("Private key is not accessible with external wallet providers. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",r.PRIVATE_KEY_NOT_ACCESSIBLE))}getProvider(){return this.provider}}class p extends l{constructor(e){if(super(e),this.providerType="external",this.galaRawAddress=null,!e)throw new n("Gala Wallet provider is required",r.PROVIDER_NOT_AVAILABLE)}parseGalaError(e){if(e instanceof Error)try{const t=JSON.parse(e.message);if("object"==typeof t&&null!==t){const n=t,r={message:"string"==typeof n.message?n.message:e.message};return"number"==typeof n.code&&(r.code=n.code),r}return{message:e.message}}catch{return{message:e.message}}return{message:String(e)}}handleProviderError(e,t){const s=this.parseGalaError(e);if(4001===s.code)throw new n(`User rejected ${t}`,r.USER_REJECTED,e instanceof Error?e:void 0);if(4900===s.code)throw this.connectedAddress=null,new n("Wallet disconnected",r.NOT_CONNECTED,e instanceof Error?e:void 0);const i=s.message?s.message:`${t} failed`;throw new n(i,t.includes("sign")?r.SIGNING_FAILED:r.UNKNOWN,e instanceof Error?e:void 0)}ensureConnected(){if(null===this.connectedAddress||void 0===this.connectedAddress)throw new n("Wallet is not connected. Call connect() first.",r.NOT_CONNECTED)}async connect(){try{const t=await this.provider.request({method:"eth_requestAccounts"});if(null==t||0===t.length)throw new n("No accounts returned from Gala Wallet",r.CONNECTION_FAILED);const s=t[0];if(void 0===s)throw new n("No accounts returned from Gala Wallet",r.CONNECTION_FAILED);this.galaRawAddress=s;let i=s;return i.startsWith("eth|")?i=`0x${i.slice(4)}`:i.startsWith("0x")||(i=`0x${i}`),this.connectedAddress=e(i),this.connectedAddress}catch(e){if(e instanceof n)throw e;return this.handleProviderError(e,"connect")}}async disconnect(){this.connectedAddress=null,this.galaRawAddress=null,this.removeEventListeners();try{await this.provider.disconnect()}catch{}}isConnected(){return null!==this.connectedAddress}async signMessage(e){return this.ensureConnected(),u(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),d(this.provider,this.connectedAddress,e)),(e,t)=>this.handleProviderError(e,t),"sign message")}async signTypedData(e,t,n){return this.ensureConnected(),u(async()=>(await this.provider.setAddress(this.galaRawAddress??this.connectedAddress),c(this.provider,this.connectedAddress,e,t,n)),(e,t)=>this.handleProviderError(e,t),"sign typed data")}getAddress(){return this.ensureConnected(),Promise.resolve(this.connectedAddress)}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}getPrivateKey(){throw new n("Private key is not accessible with Gala Wallet. Use PrivateKeyProvider if you need private key access for @gala-chain operations.",r.PRIVATE_KEY_NOT_ACCESSIBLE)}getProvider(){return this.provider}}class E{constructor(e){this.providerType="privateKey",this.connected=!0;try{this.wallet=new t(e)}catch(e){throw new n("Invalid private key provided",r.INVALID_CONFIG,e instanceof Error?e:void 0)}}static fromWallet(e){return new E(e.privateKey)}async signMessage(e){try{return await this.wallet.signMessage(e)}catch(e){throw new n("Failed to sign message",r.SIGNING_FAILED,e instanceof Error?e:void 0)}}async signTypedData(e,t,s){try{return await this.wallet.signTypedData(e,t,s)}catch(e){throw new n("Failed to sign typed data",r.SIGNING_FAILED,e instanceof Error?e:void 0)}}getAddress(){return Promise.resolve(e(this.wallet.address))}async getGalaAddress(){return`eth|${(await this.getAddress()).slice(2)}`}async connect(){return this.connected=!0,this.getAddress()}disconnect(){return this.connected=!1,Promise.resolve()}isConnected(){return this.connected}getPrivateKey(){return Promise.resolve(this.wallet.privateKey)}getWallet(){return this.wallet}}const g={METAMASK:"io.metamask",METAMASK_FLASK:"io.metamask.flask",COINBASE:"com.coinbase.wallet",TRUST_WALLET:"com.trustwallet.app",PHANTOM:"app.phantom",RAINBOW:"me.rainbow",OKX:"com.okex.wallet",RABBY:"io.rabby",BRAVE:"com.brave.wallet",FRAME:"sh.frame",LEDGER:"com.ledger",ZERION:"io.zerion.wallet",GALA:"com.gala.wallet"},y={[g.METAMASK]:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIxLjU0IDQuMjJsLTguMzQgNi4yMSAxLjU0LTMuNjUtLTUuNTMtMi41MXoiIGZpbGw9IiNFMjc2MUIiLz48L3N2Zz4=",[g.GALA]:"data:image/png;base64,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"};function m(){return"undefined"!=typeof window&&"function"==typeof window.dispatchEvent}function N(){if(!m())return null;return window.ethereum??null}function I(e){return"object"==typeof e&&null!==e&&"function"==typeof e.request}async function L(e=500){const t=[],n=new Map;return m()?new Promise(r=>{const s=new Set,i=e=>{const r=e,{info:i,provider:o}=r.detail;if(s.has(i.uuid))return;s.add(i.uuid);const a={id:i.rdns||i.uuid,name:i.name,rdns:i.rdns||i.uuid,icon:i.icon??y[i.rdns||""]??"",provider:o,isInjected:!1};t.push(a),n.set(a.id,a)};window.addEventListener("eip6963:announceProvider",i),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{if(window.removeEventListener("eip6963:announceProvider",i),0===t.length){const e=N();if(e){const r=window;let s="Browser Wallet",i="injected";r.ethereum?.isMetaMask?(s="MetaMask",i=g.METAMASK):r.ethereum?.isCoinbaseWallet?(s="Coinbase Wallet",i=g.COINBASE):r.ethereum?.isTrust&&(s="Trust Wallet",i=g.TRUST_WALLET);const o={id:i,name:s,rdns:i,icon:y[i]??"",provider:e,isInjected:!0};t.push(o),n.set(o.id,o)}}if(!n.has(g.TRUST_WALLET)){const e=function(){if(!m())return null;const e=window;if(I(e.ethereum)&&e.ethereum.isTrust)return e.ethereum;const t=e.ethereum?.providers?.find(e=>I(e)&&!0===e.isTrust);return void 0!==t?t:I(e.trustwallet)?e.trustwallet:null}();if(null!==e&&!t.some(t=>t.provider===e)){const r={id:g.TRUST_WALLET,name:"Trust Wallet",rdns:g.TRUST_WALLET,icon:y[g.TRUST_WALLET]??"",provider:e,isInjected:!0};t.push(r),n.set(r.id,r)}}const e=window;if(e.gala?.request&&!n.has(g.GALA)){const r={id:g.GALA,name:"Gala Wallet",rdns:g.GALA,icon:y[g.GALA]??"",provider:e.gala,isInjected:!0};t.push(r),n.set(r.id,r)}r({wallets:t,byId:n,hasWallets:t.length>0,...void 0===t[0]?{}:{primary:t[0]}})},e)}):{wallets:t,byId:n,hasWallets:!1}}function C(e){if(!m())return()=>{};let t=!0,n={wallets:[],byId:new Map,hasWallets:!1};const r=r=>{if(!t)return;const s=r,{info:i,provider:o}=s.detail,a=i.rdns||i.uuid;if(n.byId.has(a))return;const d={id:a,name:i.name,rdns:a,icon:i.icon??"",provider:o,isInjected:!1},c=[...n.wallets,d],l=new Map(n.byId);l.set(d.id,d),n={wallets:c,byId:l,hasWallets:!0,...void 0===c[0]?{}:{primary:c[0]}},e(n)};return window.addEventListener("eip6963:announceProvider",r),L().then(r=>{t&&(n=r,e(r))}),()=>{t=!1,window.removeEventListener("eip6963:announceProvider",r)}}async function T(e,t){return(await L(t)).byId.get(e)??null}async function O(e,t){return null!==await T(e,t)}function D(){return null!==N()}function S(e){if(null!==e.privateKey&&void 0!==e.privateKey&&e.privateKey.length>0)return new E(e.privateKey);if(null!==e.eip1193Provider&&void 0!==e.eip1193Provider)return new f(e.eip1193Provider);throw new n("Invalid wallet provider config: must provide either privateKey or eip1193Provider",r.INVALID_CONFIG)}function M(e){return E.fromWallet(e)}function P(e){return new f(e)}function W(e){return"privateKey"===e.providerType}function G(e){return"external"===e.providerType}async function R(e){if(W(e))try{return await e.getPrivateKey()}catch{return}}function U(e){if(e)return E.fromWallet(e)}function F(e){if(e&&W(e))return e.getWallet()}async function V(e){return e.isConnected()?e.getAddress():e.connect()}function b(e){return"object"==typeof e&&null!==e&&"request"in e&&"function"==typeof e.request}function B(){if("undefined"==typeof window)return null;const e=window.ethereum;return b(e)?e:null}export{f as ExternalWalletProvider,p as GalaWalletProvider,g as KNOWN_WALLET_RDNS,E as PrivateKeyProvider,n as WalletProviderError,r as WalletProviderErrorCode,P as createProviderFromEip1193,M as createProviderFromWallet,S as createWalletProvider,L as detectWallets,V as ensureConnected,B as getInjectedEip1193Provider,R as getPrivateKeyIfAvailable,T as getWalletByRdns,D as hasAnyWallet,b as isEip1193Provider,G as isExternalProvider,W as isPrivateKeyProvider,O as isWalletAvailable,F as providerToWallet,C as subscribeToWalletChanges,U as walletToProvider};