@polyester/sdk 0.24.1 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +18 -12
- package/dist/account-signer/create-polyester-account-signer.d.ts +9 -5
- package/dist/account-signer/create-polyester-account-signer.d.ts.map +1 -1
- package/dist/account-signer/create-polyester-account-signer.js +9 -5
- package/dist/account-signer/create-polyester-account-signer.js.map +1 -1
- package/dist/account-signer/types.d.ts +9 -3
- package/dist/account-signer/types.d.ts.map +1 -1
- package/dist/account-signer/types.js.map +1 -1
- package/dist/core-client.d.ts +3 -0
- package/dist/core-client.d.ts.map +1 -1
- package/dist/core-client.js +5 -0
- package/dist/core-client.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +0 -4
- package/dist/environment.js.map +1 -1
- package/dist/gen/auth/v1/auth_pb.d.ts +7 -4
- package/dist/gen/auth/v1/auth_pb.d.ts.map +1 -1
- package/dist/gen/auth/v1/auth_pb.js.map +1 -1
- package/dist/gen/claims/v1/claims_pb.d.ts +313 -0
- package/dist/gen/claims/v1/claims_pb.d.ts.map +1 -0
- package/dist/gen/claims/v1/claims_pb.js +135 -0
- package/dist/gen/claims/v1/claims_pb.js.map +1 -0
- package/dist/gen/index.d.ts +2 -1
- package/dist/gen/index.js +2 -1
- package/dist/gen/orders/v1/orders_pb.d.ts +50 -3
- package/dist/gen/orders/v1/orders_pb.d.ts.map +1 -1
- package/dist/gen/orders/v1/orders_pb.js +55 -43
- package/dist/gen/orders/v1/orders_pb.js.map +1 -1
- package/dist/gen/orders/v1/orders_read_pb.d.ts +10 -0
- package/dist/gen/orders/v1/orders_read_pb.d.ts.map +1 -1
- package/dist/gen/orders/v1/orders_read_pb.js +3 -1
- package/dist/gen/orders/v1/orders_read_pb.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/services/accounts/accounts.schemas.d.ts +2 -2
- package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
- package/dist/services/accounts/accounts.schemas.js +3 -3
- package/dist/services/accounts/accounts.schemas.js.map +1 -1
- package/dist/services/address-book/address-book.schemas.d.ts +67 -68
- package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
- package/dist/services/address-book/address-book.schemas.js +11 -13
- package/dist/services/address-book/address-book.schemas.js.map +1 -1
- package/dist/services/api-keys/api-keys.schemas.d.ts +1 -2
- package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
- package/dist/services/api-keys/api-keys.schemas.js +4 -9
- package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
- package/dist/services/auth/auth.d.ts +2 -3
- package/dist/services/auth/auth.d.ts.map +1 -1
- package/dist/services/auth/auth.js +4 -2
- package/dist/services/auth/auth.js.map +1 -1
- package/dist/services/auth/cookie-constants.d.ts +1 -1
- package/dist/services/auth/cookie-constants.d.ts.map +1 -1
- package/dist/services/auth/cookie-constants.js +1 -1
- package/dist/services/auth/cookie-constants.js.map +1 -1
- package/dist/services/balances/balances.schemas.d.ts +3 -3
- package/dist/services/balances/balances.schemas.d.ts.map +1 -1
- package/dist/services/balances/balances.schemas.js +7 -12
- package/dist/services/balances/balances.schemas.js.map +1 -1
- package/dist/services/candles/candles.schemas.d.ts +3 -3
- package/dist/services/candles/candles.schemas.d.ts.map +1 -1
- package/dist/services/candles/candles.schemas.js +5 -6
- package/dist/services/candles/candles.schemas.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +3 -3
- package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.js +2 -3
- package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
- package/dist/services/claims/claims.codecs.d.ts +8 -0
- package/dist/services/claims/claims.codecs.d.ts.map +1 -0
- package/dist/services/claims/claims.codecs.js +17 -0
- package/dist/services/claims/claims.codecs.js.map +1 -0
- package/dist/services/claims/claims.d.ts +19 -0
- package/dist/services/claims/claims.d.ts.map +1 -0
- package/dist/services/claims/claims.js +30 -0
- package/dist/services/claims/claims.js.map +1 -0
- package/dist/services/claims/claims.schemas.d.ts +122 -0
- package/dist/services/claims/claims.schemas.d.ts.map +1 -0
- package/dist/services/claims/claims.schemas.js +47 -0
- package/dist/services/claims/claims.schemas.js.map +1 -0
- package/dist/services/claims/claims.types.d.ts +3 -0
- package/dist/services/claims/index.d.ts +5 -0
- package/dist/services/heatmap/heatmap.schemas.d.ts +4 -4
- package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.js +10 -10
- package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.js +1 -5
- package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.d.ts +63 -63
- package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.js +10 -11
- package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +3 -3
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/mfa/mfa.schemas.d.ts +11 -11
- package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
- package/dist/services/mfa/mfa.schemas.js +4 -5
- package/dist/services/mfa/mfa.schemas.js.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.d.ts +1 -1
- package/dist/services/orders/order-enums.codecs.js +2 -1
- package/dist/services/orders/order-enums.codecs.js.map +1 -1
- package/dist/services/orders/order-errors.schemas.d.ts +4 -5
- package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-batch.schemas.d.ts +110 -32
- package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-batch.schemas.js +9 -10
- package/dist/services/orders/orders-batch.schemas.js.map +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +111 -8
- package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-input.schemas.js +20 -4
- package/dist/services/orders/orders-input.schemas.js.map +1 -1
- package/dist/services/orders/orders-modify.schemas.d.ts +2 -2
- package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-modify.schemas.js +3 -3
- package/dist/services/orders/orders-modify.schemas.js.map +1 -1
- package/dist/services/orders/orders-output.schemas.d.ts +48 -32
- package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-output.schemas.js +16 -16
- package/dist/services/orders/orders-output.schemas.js.map +1 -1
- package/dist/services/orders/orders-risk.schemas.d.ts +0 -1
- package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-risk.schemas.js +4 -4
- package/dist/services/orders/orders-risk.schemas.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +4 -4
- package/dist/services/policies/shared.codecs.js +3 -3
- package/dist/services/policies/shared.codecs.js.map +1 -1
- package/dist/services/policies/shared.d.ts +0 -1
- package/dist/services/policies/shared.d.ts.map +1 -1
- package/dist/services/policies/shared.js +2 -3
- package/dist/services/policies/shared.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +2 -2
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +2 -5
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
- package/dist/services/rate-limits/rate-limits.schemas.d.ts +6 -7
- package/dist/services/rate-limits/rate-limits.schemas.d.ts.map +1 -1
- package/dist/services/rate-limits/rate-limits.schemas.js +2 -3
- package/dist/services/rate-limits/rate-limits.schemas.js.map +1 -1
- package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
- package/dist/services/social-verification/social-verification.schemas.js +4 -4
- package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +23 -24
- package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.js +10 -12
- package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
- package/dist/services/trades/trades.schemas.d.ts +1 -1
- package/dist/services/trades/trades.schemas.d.ts.map +1 -1
- package/dist/services/trades/trades.schemas.js +4 -8
- package/dist/services/trades/trades.schemas.js.map +1 -1
- package/dist/services/transfers/transfers.schemas.d.ts +3 -4
- package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
- package/dist/services/transfers/transfers.schemas.js +5 -10
- package/dist/services/transfers/transfers.schemas.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +2 -2
- package/dist/services/triggers/triggers-output.schemas.d.ts +56 -58
- package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.js +34 -36
- package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
- package/dist/services/whiteboard/whiteboard.schemas.d.ts +42 -42
- package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
- package/dist/services/whiteboard/whiteboard.schemas.js +9 -10
- package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
- package/dist/shared/proto-enum-codec.js +11 -6
- package/dist/shared/proto-enum-codec.js.map +1 -1
- package/dist/shared/rate-limit.schemas.d.ts +4 -5
- package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
- package/dist/shared/rate-limit.schemas.js +41 -46
- package/dist/shared/rate-limit.schemas.js.map +1 -1
- package/dist/shared/schemas.js +5 -1
- package/dist/shared/schemas.js.map +1 -1
- package/dist/utils/timestamp.js +8 -1
- package/dist/utils/timestamp.js.map +1 -1
- package/dist/wired-services.d.ts.map +1 -1
- package/dist/wired-services.js +2 -0
- package/dist/wired-services.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @polyester/sdk
|
|
2
2
|
|
|
3
|
+
## 0.25.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Preserve auth sessions across regional gateways and bump the display-session cookie version. ([#154](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/154))
|
|
8
|
+
|
|
9
|
+
## 0.25.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- Add daily reward claim status and claiming, and support good-til-date limit orders with expiry validation and order expiry output. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))
|
|
14
|
+
|
|
15
|
+
- Decode unknown proto enum values on read paths as `"unspecified"` instead of throwing a `ValidationError`. When the server adds a new enum member that this SDK build does not know, the affected field now degrades to `"unspecified"` and the rest of the payload stays readable. Public output unions are unchanged since they already included `"unspecified"`. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))
|
|
16
|
+
|
|
17
|
+
- Validate wallet login signatures as 65-byte hexadecimal EOA signatures while preserving universal signature support for subaccount creation. ([#152](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/152))
|
|
18
|
+
|
|
3
19
|
## 0.24.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -18,30 +18,36 @@ npm install @polyester/sdk
|
|
|
18
18
|
|
|
19
19
|
## Browser
|
|
20
20
|
|
|
21
|
-
Polyester accounts are smart accounts
|
|
22
|
-
derives the account
|
|
21
|
+
Polyester accounts are smart accounts. You bring an owner wallet, the SDK
|
|
22
|
+
derives the smart account address, and the owner EOA signs the login challenge.
|
|
23
|
+
Nothing gets deployed just to log in.
|
|
23
24
|
|
|
24
25
|
```ts
|
|
25
26
|
import { PolyesterBrowserClient, POLYESTER_DEVNET_ENVIRONMENT } from "@polyester/sdk";
|
|
27
|
+
import type { AccountSigner } from "@polyester/sdk";
|
|
26
28
|
import { createPolyesterAccountSigner } from "@polyester/sdk/account-signer";
|
|
27
29
|
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
owner,
|
|
31
|
-
});
|
|
30
|
+
const environment = POLYESTER_DEVNET_ENVIRONMENT;
|
|
31
|
+
const { accountAddress } = createPolyesterAccountSigner({ environment, owner });
|
|
32
32
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const accountSigner: AccountSigner = {
|
|
34
|
+
environmentFingerprint: environment.fingerprint,
|
|
35
|
+
accountAddress,
|
|
36
|
+
ownerAddress: owner.address,
|
|
37
|
+
// Login expects a raw 65-byte EIP-191 signature from the owner EOA.
|
|
38
|
+
signMessage: (message) => owner.signMessage({ message }),
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const client = new PolyesterBrowserClient({ environment, accountSigner });
|
|
37
42
|
|
|
38
43
|
await client.auth.login({ provider: "turnkey" });
|
|
39
44
|
|
|
40
45
|
const { orders } = await client.orders.listOpen();
|
|
41
46
|
```
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
`createPolyesterAccountSigner` on its own returns Safe/ERC-6492 wrapped
|
|
49
|
+
signatures. Those are accepted for subaccount creation but rejected by login,
|
|
50
|
+
which is why the quickstart only uses it to derive the account address.
|
|
45
51
|
|
|
46
52
|
## Server
|
|
47
53
|
|
|
@@ -11,16 +11,20 @@ interface CreatePolyesterAccountSignerParams {
|
|
|
11
11
|
saltNonce?: bigint;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Derives the Polyester Safe smart account address and a Safe/ERC-6492 signer
|
|
15
|
+
* without any RPC calls.
|
|
15
16
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* The returned signMessage produces ERC-6492 wrapped signatures matching what
|
|
18
|
+
* toSafeSmartAccount.signMessage() would produce for an undeployed Safe. That
|
|
19
|
+
* form is accepted for subaccount creation but NOT for login, which requires the
|
|
20
|
+
* owner EOA's raw 65-byte EIP-191 signature. For login, use this only to derive
|
|
21
|
+
* accountAddress and build an AccountSigner whose signMessage calls
|
|
22
|
+
* owner.signMessage directly (see the README quickstart).
|
|
19
23
|
*
|
|
20
24
|
* For actual chain interactions (UserOperations), use createPolyesterSmartAccount instead.
|
|
21
25
|
*
|
|
22
26
|
* @param params - Owner account and optional salt nonce
|
|
23
|
-
* @returns An AccountSigner
|
|
27
|
+
* @returns An AccountSigner with the derived Safe address and a wrapped signer
|
|
24
28
|
*/
|
|
25
29
|
declare function createPolyesterAccountSigner(params: CreatePolyesterAccountSignerParams): AccountSigner;
|
|
26
30
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-polyester-account-signer.d.ts","names":[],"sources":["../../src/account-signer/create-polyester-account-signer.ts"],"mappings":";;;;UAaiB;;EAEb,aAAa;;EAEb,OAAO;;EAEP
|
|
1
|
+
{"version":3,"file":"create-polyester-account-signer.d.ts","names":[],"sources":["../../src/account-signer/create-polyester-account-signer.ts"],"mappings":";;;;UAaiB;;EAEb,aAAa;;EAEb,OAAO;;EAEP;;;;;;;;;;;;;;;;;;iBAyDY,6BACZ,QAAQ,qCACT"}
|
|
@@ -47,16 +47,20 @@ function wrapErc6492Signature(factoryAddress, factoryCalldata, signature) {
|
|
|
47
47
|
return concat([encoded, ERC6492_MAGIC_SUFFIX]);
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
|
-
*
|
|
50
|
+
* Derives the Polyester Safe smart account address and a Safe/ERC-6492 signer
|
|
51
|
+
* without any RPC calls.
|
|
51
52
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* The returned signMessage produces ERC-6492 wrapped signatures matching what
|
|
54
|
+
* toSafeSmartAccount.signMessage() would produce for an undeployed Safe. That
|
|
55
|
+
* form is accepted for subaccount creation but NOT for login, which requires the
|
|
56
|
+
* owner EOA's raw 65-byte EIP-191 signature. For login, use this only to derive
|
|
57
|
+
* accountAddress and build an AccountSigner whose signMessage calls
|
|
58
|
+
* owner.signMessage directly (see the README quickstart).
|
|
55
59
|
*
|
|
56
60
|
* For actual chain interactions (UserOperations), use createPolyesterSmartAccount instead.
|
|
57
61
|
*
|
|
58
62
|
* @param params - Owner account and optional salt nonce
|
|
59
|
-
* @returns An AccountSigner
|
|
63
|
+
* @returns An AccountSigner with the derived Safe address and a wrapped signer
|
|
60
64
|
*/
|
|
61
65
|
function createPolyesterAccountSigner(params) {
|
|
62
66
|
const { environment, owner, saltNonce = 0n } = params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-polyester-account-signer.js","names":[],"sources":["../../src/account-signer/create-polyester-account-signer.ts"],"sourcesContent":["import type { Address, Hex, LocalAccount } from \"viem\";\nimport { concat, encodeAbiParameters, hashMessage, hashTypedData, toBytes } from \"viem\";\nimport {\n predictSafeAddressWithData,\n type PredictSafeAddressParams,\n} from \"./predict-safe-address.js\";\nimport type { AccountSigner, HexAddress } from \"./types.js\";\nimport type { PolyesterEnvironment } from \"../environment.js\";\n\n/** ERC-6492 magic suffix for counterfactual signature verification */\nconst ERC6492_MAGIC_SUFFIX: Hex =\n \"0x6492649264926492649264926492649264926492649264926492649264926492\";\n\nexport interface CreatePolyesterAccountSignerParams {\n /** The environment this signer should authenticate against */\n environment: PolyesterEnvironment;\n /** The owner account (EOA) that will sign messages */\n owner: LocalAccount;\n /** Salt nonce for deriving different Safe addresses from the same owner (default: 0n) */\n saltNonce?: bigint;\n}\n\n/**\n * Adjusts the V value in a signature for Safe's eth_sign verification.\n * Safe expects V to be 31+ for eth_sign signatures (27 base + 4 for eth_sign marker).\n */\nfunction adjustVInSignature(signature: Hex): Hex {\n const ETHEREUM_V_VALUES = [0, 1, 27, 28];\n const MIN_VALID_V_VALUE_FOR_SAFE_ECDSA = 27;\n\n let signatureV = Number.parseInt(signature.slice(-2), 16);\n if (!ETHEREUM_V_VALUES.includes(signatureV)) {\n throw new Error(\"Invalid signature V value\");\n }\n\n // for eth_sign: add 27 if V < 27, then add 4\n if (signatureV < MIN_VALID_V_VALUE_FOR_SAFE_ECDSA) {\n signatureV += MIN_VALID_V_VALUE_FOR_SAFE_ECDSA;\n }\n signatureV += 4;\n\n return (signature.slice(0, -2) + signatureV.toString(16).padStart(2, \"0\")) as Hex;\n}\n\n/**\n * Wraps a signature in ERC-6492 format for counterfactual verification.\n * This allows signature verification before the Safe is deployed.\n */\nfunction wrapErc6492Signature(factoryAddress: Address, factoryCalldata: Hex, signature: Hex): Hex {\n const encoded = encodeAbiParameters(\n [\n { name: \"factory\", type: \"address\" },\n { name: \"factoryCalldata\", type: \"bytes\" },\n { name: \"signature\", type: \"bytes\" },\n ],\n [factoryAddress, factoryCalldata, signature],\n );\n return concat([encoded, ERC6492_MAGIC_SUFFIX]);\n}\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"create-polyester-account-signer.js","names":[],"sources":["../../src/account-signer/create-polyester-account-signer.ts"],"sourcesContent":["import type { Address, Hex, LocalAccount } from \"viem\";\nimport { concat, encodeAbiParameters, hashMessage, hashTypedData, toBytes } from \"viem\";\nimport {\n predictSafeAddressWithData,\n type PredictSafeAddressParams,\n} from \"./predict-safe-address.js\";\nimport type { AccountSigner, HexAddress } from \"./types.js\";\nimport type { PolyesterEnvironment } from \"../environment.js\";\n\n/** ERC-6492 magic suffix for counterfactual signature verification */\nconst ERC6492_MAGIC_SUFFIX: Hex =\n \"0x6492649264926492649264926492649264926492649264926492649264926492\";\n\nexport interface CreatePolyesterAccountSignerParams {\n /** The environment this signer should authenticate against */\n environment: PolyesterEnvironment;\n /** The owner account (EOA) that will sign messages */\n owner: LocalAccount;\n /** Salt nonce for deriving different Safe addresses from the same owner (default: 0n) */\n saltNonce?: bigint;\n}\n\n/**\n * Adjusts the V value in a signature for Safe's eth_sign verification.\n * Safe expects V to be 31+ for eth_sign signatures (27 base + 4 for eth_sign marker).\n */\nfunction adjustVInSignature(signature: Hex): Hex {\n const ETHEREUM_V_VALUES = [0, 1, 27, 28];\n const MIN_VALID_V_VALUE_FOR_SAFE_ECDSA = 27;\n\n let signatureV = Number.parseInt(signature.slice(-2), 16);\n if (!ETHEREUM_V_VALUES.includes(signatureV)) {\n throw new Error(\"Invalid signature V value\");\n }\n\n // for eth_sign: add 27 if V < 27, then add 4\n if (signatureV < MIN_VALID_V_VALUE_FOR_SAFE_ECDSA) {\n signatureV += MIN_VALID_V_VALUE_FOR_SAFE_ECDSA;\n }\n signatureV += 4;\n\n return (signature.slice(0, -2) + signatureV.toString(16).padStart(2, \"0\")) as Hex;\n}\n\n/**\n * Wraps a signature in ERC-6492 format for counterfactual verification.\n * This allows signature verification before the Safe is deployed.\n */\nfunction wrapErc6492Signature(factoryAddress: Address, factoryCalldata: Hex, signature: Hex): Hex {\n const encoded = encodeAbiParameters(\n [\n { name: \"factory\", type: \"address\" },\n { name: \"factoryCalldata\", type: \"bytes\" },\n { name: \"signature\", type: \"bytes\" },\n ],\n [factoryAddress, factoryCalldata, signature],\n );\n return concat([encoded, ERC6492_MAGIC_SUFFIX]);\n}\n\n/**\n * Derives the Polyester Safe smart account address and a Safe/ERC-6492 signer\n * without any RPC calls.\n *\n * The returned signMessage produces ERC-6492 wrapped signatures matching what\n * toSafeSmartAccount.signMessage() would produce for an undeployed Safe. That\n * form is accepted for subaccount creation but NOT for login, which requires the\n * owner EOA's raw 65-byte EIP-191 signature. For login, use this only to derive\n * accountAddress and build an AccountSigner whose signMessage calls\n * owner.signMessage directly (see the README quickstart).\n *\n * For actual chain interactions (UserOperations), use createPolyesterSmartAccount instead.\n *\n * @param params - Owner account and optional salt nonce\n * @returns An AccountSigner with the derived Safe address and a wrapped signer\n */\nexport function createPolyesterAccountSigner(\n params: CreatePolyesterAccountSignerParams,\n): AccountSigner {\n const { environment, owner, saltNonce = 0n } = params;\n const {\n safeProxyFactoryAddress,\n safeSingletonAddress,\n safeModuleSetupAddress,\n safe4337ModuleAddress,\n multiSendAddress,\n } = environment.accountAbstraction.safe;\n const chainId = environment.chain.id;\n\n const predictParams: PredictSafeAddressParams = {\n owners: [owner.address],\n saltNonce,\n safeProxyFactoryAddress,\n safeSingletonAddress,\n safeModuleSetupAddress,\n safe4337ModuleAddress,\n multiSendAddress,\n };\n\n const { address, factoryCalldata } = predictSafeAddressWithData(predictParams);\n\n return {\n environmentFingerprint: environment.fingerprint,\n accountAddress: address as HexAddress,\n ownerAddress: owner.address as HexAddress,\n signMessage: async (message: string): Promise<Hex> => {\n // 1. hash the original message (what Safe calls generateSafeMessageMessage for strings)\n const messageHash = hashMessage(message);\n\n // 2. create EIP-712 typed data hash matching Safe's signMessage\n const safeMessageHash = hashTypedData({\n domain: {\n chainId,\n verifyingContract: address,\n },\n types: {\n SafeMessage: [{ name: \"message\", type: \"bytes\" }],\n },\n primaryType: \"SafeMessage\",\n message: {\n message: messageHash,\n },\n });\n\n // 3. sign the Safe message hash with raw bytes\n const ownerSignature = await owner.signMessage({\n message: { raw: toBytes(safeMessageHash) },\n });\n\n // 4. adjust V value for Safe's eth_sign verification\n const innerSignature = adjustVInSignature(ownerSignature as Hex);\n\n // 5. wrap in ERC-6492 format for counterfactual verification\n return wrapErc6492Signature(safeProxyFactoryAddress, factoryCalldata, innerSignature);\n },\n };\n}\n"],"mappings":";;;;AAUA,MAAM,uBACF;;;;;AAeJ,SAAS,mBAAmB,WAAqB;CAC7C,MAAM,oBAAoB;EAAC;EAAG;EAAG;EAAI;CAAE;CACvC,MAAM,mCAAmC;CAEzC,IAAI,aAAa,OAAO,SAAS,UAAU,MAAM,EAAE,GAAG,EAAE;CACxD,IAAI,CAAC,kBAAkB,SAAS,UAAU,GACtC,MAAM,IAAI,MAAM,2BAA2B;CAI/C,IAAI,aAAa,kCACb,cAAc;CAElB,cAAc;CAEd,OAAQ,UAAU,MAAM,GAAG,EAAE,IAAI,WAAW,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;AAC5E;;;;;AAMA,SAAS,qBAAqB,gBAAyB,iBAAsB,WAAqB;CAC9F,MAAM,UAAU,oBACZ;EACI;GAAE,MAAM;GAAW,MAAM;EAAU;EACnC;GAAE,MAAM;GAAmB,MAAM;EAAQ;EACzC;GAAE,MAAM;GAAa,MAAM;EAAQ;CACvC,GACA;EAAC;EAAgB;EAAiB;CAAS,CAC/C;CACA,OAAO,OAAO,CAAC,SAAS,oBAAoB,CAAC;AACjD;;;;;;;;;;;;;;;;;AAkBA,SAAgB,6BACZ,QACa;CACb,MAAM,EAAE,aAAa,OAAO,YAAY,OAAO;CAC/C,MAAM,EACF,yBACA,sBACA,wBACA,uBACA,qBACA,YAAY,mBAAmB;CACnC,MAAM,UAAU,YAAY,MAAM;CAElC,MAAM,gBAA0C;EAC5C,QAAQ,CAAC,MAAM,OAAO;EACtB;EACA;EACA;EACA;EACA;EACA;CACJ;CAEA,MAAM,EAAE,SAAS,oBAAoB,2BAA2B,aAAa;CAE7E,OAAO;EACH,wBAAwB,YAAY;EACpC,gBAAgB;EAChB,cAAc,MAAM;EACpB,aAAa,OAAO,YAAkC;GAElD,MAAM,cAAc,YAAY,OAAO;GAGvC,MAAM,kBAAkB,cAAc;IAClC,QAAQ;KACJ;KACA,mBAAmB;IACvB;IACA,OAAO,EACH,aAAa,CAAC;KAAE,MAAM;KAAW,MAAM;IAAQ,CAAC,EACpD;IACA,aAAa;IACb,SAAS,EACL,SAAS,YACb;GACJ,CAAC;GAQD,MAAM,iBAAiB,mBAAmB,MALb,MAAM,YAAY,EAC3C,SAAS,EAAE,KAAK,QAAQ,eAAe,EAAE,EAC7C,CAAC,CAG8D;GAG/D,OAAO,qBAAqB,yBAAyB,iBAAiB,cAAc;EACxF;CACJ;AACJ"}
|
|
@@ -4,8 +4,10 @@ type HexAddress = `0x${string}`;
|
|
|
4
4
|
/**
|
|
5
5
|
* Minimal account signer interface for SDK operations.
|
|
6
6
|
*
|
|
7
|
-
* The SDK authenticates the Polyester smart account address.
|
|
8
|
-
* is
|
|
7
|
+
* The SDK authenticates the Polyester smart account address. When ownerAddress
|
|
8
|
+
* is present it is declared as the LOGIN challenge signer, and signMessage must
|
|
9
|
+
* return that EOA's raw 65-byte EIP-191 signature: login rejects Safe/ERC-6492
|
|
10
|
+
* wrapped signatures. Subaccount creation accepts either form.
|
|
9
11
|
*/
|
|
10
12
|
interface AccountSigner {
|
|
11
13
|
/** Fingerprint of the PolyesterEnvironment this signer was created for */
|
|
@@ -14,7 +16,11 @@ interface AccountSigner {
|
|
|
14
16
|
readonly accountAddress: HexAddress;
|
|
15
17
|
/** The owner/EOA address. Declared as the LOGIN challenge signer when present; otherwise accountAddress signs. */
|
|
16
18
|
readonly ownerAddress?: HexAddress;
|
|
17
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Sign the exact UTF-8 message with EIP-191 semantics. For login this must be
|
|
21
|
+
* the owner EOA's raw 65-byte signature (0x + 130 hex chars), not a
|
|
22
|
+
* smart-account wrapped one.
|
|
23
|
+
*/
|
|
18
24
|
signMessage(message: string): Promise<Hex>;
|
|
19
25
|
}
|
|
20
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/account-signer/types.ts"],"mappings":";;KAIY
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/account-signer/types.ts"],"mappings":";;KAIY;;;;;;;;;UAUK;;WAEJ;;WAGA,gBAAgB;;WAGhB,eAAe;;;;;;EAOxB,YAAY,kBAAkB,QAAQ;;;;;;KAO9B,6BAA6B,uBAAuB,QAAQ;;;;;KAM5D,sBAAsB,gBAAgB;;;;iBAKlC,uBACZ,QAAQ,sBACT,UAAU;;;;iBA4BS,qBAClB,QAAQ,kCACT,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/account-signer/types.ts"],"sourcesContent":["import type { Hex } from \"viem\";\nimport { isEvmAddress } from \"../utils/evm.js\";\nimport { ConfigurationError } from \"../shared/errors.js\";\n\nexport type HexAddress = `0x${string}`;\n\n/**\n * Minimal account signer interface for SDK operations.\n *\n * The SDK authenticates the Polyester smart account address.
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/account-signer/types.ts"],"sourcesContent":["import type { Hex } from \"viem\";\nimport { isEvmAddress } from \"../utils/evm.js\";\nimport { ConfigurationError } from \"../shared/errors.js\";\n\nexport type HexAddress = `0x${string}`;\n\n/**\n * Minimal account signer interface for SDK operations.\n *\n * The SDK authenticates the Polyester smart account address. When ownerAddress\n * is present it is declared as the LOGIN challenge signer, and signMessage must\n * return that EOA's raw 65-byte EIP-191 signature: login rejects Safe/ERC-6492\n * wrapped signatures. Subaccount creation accepts either form.\n */\nexport interface AccountSigner {\n /** Fingerprint of the PolyesterEnvironment this signer was created for */\n readonly environmentFingerprint: string;\n\n /** The smart account address (used for authentication and trading) */\n readonly accountAddress: HexAddress;\n\n /** The owner/EOA address. Declared as the LOGIN challenge signer when present; otherwise accountAddress signs. */\n readonly ownerAddress?: HexAddress;\n\n /**\n * Sign the exact UTF-8 message with EIP-191 semantics. For login this must be\n * the owner EOA's raw 65-byte signature (0x + 130 hex chars), not a\n * smart-account wrapped one.\n */\n signMessage(message: string): Promise<Hex>;\n}\n\n/**\n * Factory function type for lazy account signer initialization.\n * Useful when the signer might not be available at client creation time.\n */\nexport type AccountSignerFactory = () => AccountSigner | null | Promise<AccountSigner | null>;\n\n/**\n * Account signer configuration for the client.\n * Can be a signer instance or a factory for lazy initialization.\n */\nexport type AccountSignerConfig = AccountSigner | AccountSignerFactory;\n\n/**\n * Helper to check if an account signer config is a factory function.\n */\nexport function isAccountSignerFactory(\n config: AccountSignerConfig,\n): config is AccountSignerFactory {\n return typeof config === \"function\";\n}\n\n/**\n * Asserts that a value implements the account signer contract.\n */\nexport function assertAccountSigner(value: AccountSigner): void {\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\"Account signer must be an object or factory function.\");\n }\n if (!value.environmentFingerprint) {\n throw new ConfigurationError(\"Account signer must include an environmentFingerprint.\");\n }\n if (!isEvmAddress(value.accountAddress)) {\n throw new ConfigurationError(\"Account signer must include a valid accountAddress.\");\n }\n if (value.ownerAddress && !isEvmAddress(value.ownerAddress)) {\n throw new ConfigurationError(\"Account signer ownerAddress must be a valid address.\");\n }\n if (typeof value.signMessage !== \"function\") {\n throw new ConfigurationError(\"Account signer must include a signMessage function.\");\n }\n}\n\n/**\n * Helper to resolve an account signer from config.\n */\nexport async function resolveAccountSigner(\n config: AccountSignerConfig | undefined,\n): Promise<AccountSigner | null> {\n if (!config) return null;\n const accountSigner = isAccountSignerFactory(config) ? await config() : config;\n if (accountSigner) assertAccountSigner(accountSigner);\n return accountSigner;\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,uBACZ,QAC8B;CAC9B,OAAO,OAAO,WAAW;AAC7B;;;;AAKA,SAAgB,oBAAoB,OAA4B;CAC5D,IAAI,OAAO,UAAU,YAAY,UAAU,MACvC,MAAM,IAAI,mBAAmB,uDAAuD;CAExF,IAAI,CAAC,MAAM,wBACP,MAAM,IAAI,mBAAmB,wDAAwD;CAEzF,IAAI,CAAC,aAAa,MAAM,cAAc,GAClC,MAAM,IAAI,mBAAmB,qDAAqD;CAEtF,IAAI,MAAM,gBAAgB,CAAC,aAAa,MAAM,YAAY,GACtD,MAAM,IAAI,mBAAmB,sDAAsD;CAEvF,IAAI,OAAO,MAAM,gBAAgB,YAC7B,MAAM,IAAI,mBAAmB,qDAAqD;AAE1F;;;;AAKA,eAAsB,qBAClB,QAC6B;CAC7B,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,gBAAgB,uBAAuB,MAAM,IAAI,MAAM,OAAO,IAAI;CACxE,IAAI,eAAe,oBAAoB,aAAa;CACpD,OAAO;AACX"}
|
package/dist/core-client.d.ts
CHANGED
|
@@ -55,6 +55,8 @@ import { ZipperService } from "./services/zipper/zipper.js";
|
|
|
55
55
|
import "./services/zipper/index.js";
|
|
56
56
|
import { MfaService } from "./services/mfa/mfa.js";
|
|
57
57
|
import "./services/mfa/index.js";
|
|
58
|
+
import { ClaimsService } from "./services/claims/claims.js";
|
|
59
|
+
import "./services/claims/index.js";
|
|
58
60
|
import { VipService } from "./services/vip/vip.js";
|
|
59
61
|
import "./services/vip/index.js";
|
|
60
62
|
import { FeesService } from "./services/fees/fees.js";
|
|
@@ -158,6 +160,7 @@ declare class PolyesterClient {
|
|
|
158
160
|
get whiteboard(): WhiteboardService;
|
|
159
161
|
get zipper(): ZipperService;
|
|
160
162
|
get mfa(): MfaService;
|
|
163
|
+
get claims(): ClaimsService;
|
|
161
164
|
get vip(): VipService;
|
|
162
165
|
get fees(): FeesService;
|
|
163
166
|
get tradingRateLimits(): RateLimitService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.d.ts","names":[],"sources":["../src/core-client.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"core-client.d.ts","names":[],"sources":["../src/core-client.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyFY,8BAA8B,KAAK;UAErC;EACN,aAAa;EACb,eAAe;EACf,OAAO,kBAAkB;EACzB,WAAW;;;;;EAKX;;;;;;;EAOA,aAAa;;;;;;EAMb,iBAAiB;;KAGhB;;EAGK,SAAS;EACT;EACA;;EAGA;;;;;;EAMA,kBAAkB;;;;;EAKlB,cAAc;;;KAIZ,4BAA4B,8BAA8B;;KAG1D,wBAAwB;UAc1B;EACN,YAAY;EACZ,UAAU;EACV,aAAa;EACb,aAAa;;UAGP;EACN,cAAc,SAAS,8BAA8B;;;;;;;;;cAqC5C;;qBACU,YAAY;EA+CnB,YAAA,QAAQ,uBAAuB,UAAS;MAyBhD,YAAY;MAoBZ,WAAW;MAwCX,QAAQ;MAaR,YAAY;MAIZ,WAAW;MAQX,eAAe;MAQf,WAAW;MAQX,kBAAkB;MAOlB,cAAc;MAQd,kBAAkB;MAQlB,aAAa;MAQb,WAAW;MAQX,aAAa;MAIb,UAAU;MASV,UAAU;MASV,YAAY;MASZ,YAAY;MASZ,aAAa;MAQb,qBAAqB;MAQrB,oBAAoB;MAapB,WAAW;MAIX,eAAe;MAQf,eAAe;MAIf,sBAAsB;MAItB,cAAc;MAId,UAAU;MAQV,OAAO;MAIP,UAAU;MAIV,OAAO;MAIP,QAAQ;MAIR,qBAAqB;;;;;YAWf,4BAA4B"}
|
package/dist/core-client.js
CHANGED
|
@@ -27,6 +27,7 @@ import { SocialVerificationService } from "./services/social-verification/social
|
|
|
27
27
|
import { WhiteboardService } from "./services/whiteboard/whiteboard.js";
|
|
28
28
|
import { ZipperService } from "./services/zipper/zipper.js";
|
|
29
29
|
import { MfaService } from "./services/mfa/mfa.js";
|
|
30
|
+
import { ClaimsService } from "./services/claims/claims.js";
|
|
30
31
|
import { VipService } from "./services/vip/vip.js";
|
|
31
32
|
import { FeesService } from "./services/fees/fees.js";
|
|
32
33
|
import { RateLimitService } from "./services/rate-limits/rate-limits.js";
|
|
@@ -128,6 +129,7 @@ var PolyesterClient = class {
|
|
|
128
129
|
#whiteboard;
|
|
129
130
|
#zipper;
|
|
130
131
|
#mfa;
|
|
132
|
+
#claims;
|
|
131
133
|
#vip;
|
|
132
134
|
#fees;
|
|
133
135
|
#tradingRateLimits;
|
|
@@ -276,6 +278,9 @@ var PolyesterClient = class {
|
|
|
276
278
|
get mfa() {
|
|
277
279
|
return this.#mfa ??= new MfaService(this.transports);
|
|
278
280
|
}
|
|
281
|
+
get claims() {
|
|
282
|
+
return this.#claims ??= new ClaimsService(this.transports);
|
|
283
|
+
}
|
|
279
284
|
get vip() {
|
|
280
285
|
return this.#vip ??= new VipService(this.transports);
|
|
281
286
|
}
|
package/dist/core-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.js","names":["#environment","#authProvider","#realtimeConfig","#configRealtimeClient","#configCatalog","#configCatalogSnapshot","#configCatalogCell","#createAuth","#realtime","#catalog","#getScales","#scales","#resolverInitialized","#resolver","#auth","#accounts","#apiKeys","#getResolver","#subaccounts","#candles","#chainAnalytics","#marketData","#marketOverview","#orderbook","#heatmap","#lifecycle","#trades","#orders","#triggers","#balances","#transfers","#internalTransfers","#tradingWithdraws","#deposit","#addressBook","#guardSigner","#socialVerification","#whiteboard","#zipper","#mfa","#vip","#fees","#tradingRateLimits"],"sources":["../src/core-client.ts"],"sourcesContent":["import type { Interceptor } from \"@connectrpc/connect\";\nimport { ConfigurationError } from \"./shared/errors.js\";\nimport {\n createApiKeyEd25519AuthHeaders,\n createTransports,\n resolveJwtToken,\n type AuthAndPublicApiTransports,\n type Transports,\n type JwtAuthProvider,\n type ApiKeyEd25519AuthProvider,\n} from \"./shared/transports.js\";\nimport { parsePolyesterEnvironment, type PolyesterEnvironment } from \"./environment.js\";\nimport { AccountsService } from \"./services/accounts/index.js\";\nimport { ApiKeysService } from \"./services/api-keys/index.js\";\nimport { AuthService } from \"./services/auth/auth.js\";\nimport { SubaccountsService } from \"./services/subaccounts/index.js\";\nimport { CandlesService } from \"./services/candles/index.js\";\nimport { ChainAnalyticsService } from \"./services/chain-analytics/index.js\";\nimport { MarketDataService } from \"./services/market-data/index.js\";\nimport { MarketOverviewService } from \"./services/market-overview/index.js\";\nimport { OrderbookService } from \"./services/orderbook/index.js\";\nimport { HeatmapService } from \"./services/heatmap/index.js\";\nimport { LifecycleService } from \"./services/lifecycle/index.js\";\nimport { TradesService } from \"./services/trades/index.js\";\nimport { OrdersService } from \"./services/orders/index.js\";\nimport { TriggersService } from \"./services/triggers/index.js\";\nimport { BalancesService } from \"./services/balances/index.js\";\nimport { TransfersService } from \"./services/transfers/index.js\";\nimport { InternalTransfersService } from \"./services/internal-transfers/index.js\";\nimport { TradingWithdrawsService } from \"./services/trading-withdraws/index.js\";\nimport { DepositService } from \"./services/deposit/index.js\";\nimport { AddressBookService } from \"./services/address-book/index.js\";\nimport { GuardSignerService } from \"./services/guard-signer/index.js\";\nimport { SocialVerificationService } from \"./services/social-verification/index.js\";\nimport { WhiteboardService } from \"./services/whiteboard/index.js\";\nimport { ZipperService } from \"./services/zipper/index.js\";\nimport { MfaService } from \"./services/mfa/index.js\";\nimport { VipService } from \"./services/vip/index.js\";\nimport { FeesService } from \"./services/fees/index.js\";\nimport { RateLimitService } from \"./services/rate-limits/index.js\";\nimport type { SubaccountResolver } from \"./services/subaccount-resolver.js\";\nimport {\n createPolyesterCatalog,\n type CatalogSnapshot,\n type CatalogSnapshotCell,\n type ClientCatalog,\n} from \"./catalogs/index.js\";\nimport { createCatalogSdkScales, type SdkScales } from \"./shared/decimal-surface.js\";\nimport { RealtimeClient, type PolyesterRealtime, type RealtimeConfig } from \"./realtime/index.js\";\n\nfunction realtimeAuthFromProvider(\n auth: JwtAuthProvider | ApiKeyEd25519AuthProvider | undefined,\n): Pick<RealtimeConfig, \"getAuthHeaders\" | \"hasAuth\"> {\n if (!auth) return {};\n if (auth.kind === \"jwt\") {\n return {\n getAuthHeaders: async () => {\n const token = await resolveJwtToken(auth);\n const headers: Record<string, string> = {};\n if (token) headers.authorization = `Bearer ${token}`;\n return headers;\n },\n hasAuth: () => {\n try {\n const token = auth.getToken();\n if (token !== null && typeof token !== \"string\") {\n // Async credentials are validated by the token request.\n void token.catch(() => {});\n return true;\n }\n return token !== null && token.length > 0;\n } catch {\n // Let the token request report provider failures as AuthenticationError.\n return true;\n }\n },\n };\n }\n return {\n getAuthHeaders: (request) =>\n createApiKeyEd25519AuthHeaders(auth, {\n url: request.url,\n method: request.method,\n }),\n hasAuth: () => true,\n };\n}\n\nexport type PolyesterRealtimeAuthConfig = Pick<RealtimeConfig, \"getAuthHeaders\" | \"hasAuth\">;\n\ninterface PolyesterClientCommonConfig {\n environment: PolyesterEnvironment;\n interceptors?: Interceptor[];\n auth?: JwtAuthProvider | ApiKeyEd25519AuthProvider;\n realtime?: PolyesterRealtimeAuthConfig;\n /**\n * Connect wire format. Defaults to binary for production performance.\n * Use `json` for human-readable debugging.\n */\n wireFormat?: \"binary\" | \"json\";\n /**\n * Advanced: inject pre-built Connect transports (in-memory mocks, custom\n * stacks). When provided, the SDK does not build its own transports and the\n * built-in auth/error-mapping interceptors are NOT applied — the injected\n * transports own their full interceptor chain.\n */\n transports?: Transports;\n /**\n * Advanced: inject a realtime implementation (in-memory mocks, custom\n * stacks). When provided, the SDK skips constructing its Centrifuge-backed\n * realtime client and the `realtime` auth config is ignored.\n */\n realtimeClient?: PolyesterRealtime;\n}\n\ntype PolyesterCatalogConfig =\n | {\n /** Client-owned catalog store. */\n catalog: ClientCatalog;\n catalogSnapshot?: never;\n catalogCell?: never;\n }\n | {\n catalog?: never;\n /**\n * Explicit initial catalog snapshot, commonly hydrated from server-rendered data.\n * Combines with `catalogCell` as the cell's initial value without clobbering a\n * pre-populated cell.\n */\n catalogSnapshot?: CatalogSnapshot;\n /**\n * External snapshot storage for the client-built catalog. A cell backed by a\n * reactive source makes every catalog read reactive.\n */\n catalogCell?: CatalogSnapshotCell;\n };\n\n/** Configuration shared by every Polyester client. */\nexport type PolyesterClientBaseConfig = PolyesterClientCommonConfig & PolyesterCatalogConfig;\n\n/** Configuration for the base Polyester client. */\nexport type PolyesterClientConfig = PolyesterClientBaseConfig;\n\n/** Preserves the exclusive catalog configuration while projecting client config fields. */\nexport function pickPolyesterCatalogConfig(\n config: PolyesterClientBaseConfig,\n): PolyesterCatalogConfig {\n return config.catalog === undefined\n ? {\n catalogSnapshot: config.catalogSnapshot,\n catalogCell: config.catalogCell,\n }\n : { catalog: config.catalog };\n}\n\ninterface AuthServiceFactoryContext {\n transports: AuthAndPublicApiTransports;\n realtime: PolyesterRealtime;\n subaccounts: SubaccountsService;\n environment: PolyesterEnvironment;\n}\n\ninterface PolyesterClientRuntimeConfig {\n createAuth?: (context: AuthServiceFactoryContext) => AuthService;\n}\n\n/**\n * Parses the configuration shared by every public client constructor.\n */\nexport function parsePolyesterClientConfig<TConfig extends PolyesterClientBaseConfig>(\n config: TConfig,\n): TConfig {\n if (typeof config !== \"object\" || config === null || Array.isArray(config)) {\n throw new ConfigurationError(\"Client configuration must be an object.\");\n }\n const environment = parsePolyesterEnvironment(config.environment);\n if (\n config.wireFormat !== undefined &&\n config.wireFormat !== \"binary\" &&\n config.wireFormat !== \"json\"\n ) {\n throw new ConfigurationError('wireFormat must be either \"binary\" or \"json\".');\n }\n if (config.catalog && config.catalogSnapshot) {\n throw new ConfigurationError(\"Provide either catalog or catalogSnapshot, not both.\");\n }\n if (config.catalog && config.catalogCell) {\n throw new ConfigurationError(\"Provide either catalog or catalogCell, not both.\");\n }\n\n return Object.assign({}, config, { environment });\n}\n\n/**\n * Base SDK client that wires transports, realtime, catalogs, and all public service clients for a Polyester environment.\n *\n * Services are constructed lazily on first property access (and memoized) so\n * that creating a client — which happens for every SSR request in server\n * hooks — only pays for the services the caller actually touches.\n */\nexport class PolyesterClient {\n protected readonly transports: Transports;\n\n readonly #environment: PolyesterEnvironment;\n readonly #authProvider: JwtAuthProvider | ApiKeyEd25519AuthProvider | undefined;\n readonly #realtimeConfig: PolyesterRealtimeAuthConfig | undefined;\n readonly #configRealtimeClient: PolyesterRealtime | undefined;\n readonly #configCatalog: ClientCatalog | undefined;\n readonly #configCatalogSnapshot: CatalogSnapshot | undefined;\n readonly #configCatalogCell: CatalogSnapshotCell | undefined;\n readonly #createAuth: PolyesterClientRuntimeConfig[\"createAuth\"];\n\n #realtime: PolyesterRealtime | undefined;\n #catalog: ClientCatalog | undefined;\n #scales: SdkScales | undefined;\n #resolver: SubaccountResolver | undefined;\n #resolverInitialized = false;\n\n #auth: AuthService | undefined;\n #accounts: AccountsService | undefined;\n #apiKeys: ApiKeysService | undefined;\n #subaccounts: SubaccountsService | undefined;\n #candles: CandlesService | undefined;\n #chainAnalytics: ChainAnalyticsService | undefined;\n #marketData: MarketDataService | undefined;\n #marketOverview: MarketOverviewService | undefined;\n #orderbook: OrderbookService | undefined;\n #heatmap: HeatmapService | undefined;\n #lifecycle: LifecycleService | undefined;\n #trades: TradesService | undefined;\n #orders: OrdersService | undefined;\n #triggers: TriggersService | undefined;\n #balances: BalancesService | undefined;\n #transfers: TransfersService | undefined;\n #internalTransfers: InternalTransfersService | undefined;\n #tradingWithdraws: TradingWithdrawsService | undefined;\n #deposit: DepositService | undefined;\n #addressBook: AddressBookService | undefined;\n #guardSigner: GuardSignerService | undefined;\n #socialVerification: SocialVerificationService | undefined;\n #whiteboard: WhiteboardService | undefined;\n #zipper: ZipperService | undefined;\n #mfa: MfaService | undefined;\n #vip: VipService | undefined;\n #fees: FeesService | undefined;\n #tradingRateLimits: RateLimitService | undefined;\n\n constructor(config: PolyesterClientConfig, runtime: PolyesterClientRuntimeConfig = {}) {\n const parsedConfig = parsePolyesterClientConfig(config);\n config = parsedConfig;\n const interceptors = config.interceptors ?? [];\n const { environment } = config;\n\n this.transports =\n config.transports ??\n createTransports({\n apiUrl: environment.apiUrl,\n interceptors,\n auth: config.auth,\n wireFormat: config.wireFormat,\n });\n\n this.#environment = environment;\n this.#authProvider = config.auth;\n this.#realtimeConfig = config.realtime;\n this.#configRealtimeClient = config.realtimeClient;\n this.#configCatalog = config.catalog;\n this.#configCatalogSnapshot = config.catalogSnapshot;\n this.#configCatalogCell = config.catalogCell;\n this.#createAuth = runtime.createAuth;\n }\n\n get realtime(): PolyesterRealtime {\n if (!this.#realtime) {\n if (this.#configRealtimeClient) {\n this.#realtime = this.#configRealtimeClient;\n } else {\n const environment = this.#environment;\n const realtimeAuth = realtimeAuthFromProvider(this.#authProvider);\n this.#realtime = new RealtimeClient({\n wsUrl: environment.websocketUrl,\n tokenEndpoint: `${environment.apiUrl}/v1/rt/token`,\n subscribeEndpoint: `${environment.apiUrl}/v1/rt/subscribe`,\n getAuthHeaders:\n this.#realtimeConfig?.getAuthHeaders ?? realtimeAuth.getAuthHeaders,\n hasAuth: this.#realtimeConfig?.hasAuth ?? realtimeAuth.hasAuth,\n });\n }\n }\n return this.#realtime;\n }\n\n get catalog(): ClientCatalog {\n if (!this.#catalog) {\n if (this.#configCatalog) {\n this.#catalog = this.#configCatalog;\n } else {\n const catalogRefreshMarketData = new MarketDataService(\n this.transports,\n this.realtime,\n this.#getScales(),\n );\n const catalogRefreshZipper = new ZipperService(this.transports);\n this.#catalog = createPolyesterCatalog({\n snapshot: this.#configCatalogSnapshot,\n cell: this.#configCatalogCell,\n refresh: {\n market: () => catalogRefreshMarketData.getSpotConfig(),\n zipper: () => catalogRefreshZipper.getDepositWithdrawConfig(),\n },\n });\n }\n }\n return this.#catalog;\n }\n\n #getScales(): SdkScales {\n // Lazy catalog binding: the resolver only dereferences `this.catalog` at\n // call time. getSpotConfig() (the catalog's own refresh source) never\n // awaits scale readiness.\n this.#scales ??= createCatalogSdkScales(() => this.catalog);\n return this.#scales;\n }\n\n #getResolver(): SubaccountResolver | undefined {\n if (!this.#resolverInitialized) {\n this.#resolverInitialized = true;\n this.#resolver = this.createSubaccountResolver();\n }\n return this.#resolver;\n }\n\n get auth(): AuthService {\n if (!this.#auth) {\n this.#auth =\n this.#createAuth?.({\n transports: this.transports,\n realtime: this.realtime,\n subaccounts: this.subaccounts,\n environment: this.#environment,\n }) ?? new AuthService(this.transports, this.realtime);\n }\n return this.#auth;\n }\n\n get accounts(): AccountsService {\n return (this.#accounts ??= new AccountsService(this.transports));\n }\n\n get apiKeys(): ApiKeysService {\n return (this.#apiKeys ??= new ApiKeysService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get subaccounts(): SubaccountsService {\n return (this.#subaccounts ??= new SubaccountsService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get candles(): CandlesService {\n return (this.#candles ??= new CandlesService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get chainAnalytics(): ChainAnalyticsService {\n return (this.#chainAnalytics ??= new ChainAnalyticsService(\n this.transports,\n this.#getScales(),\n ));\n }\n\n get marketData(): MarketDataService {\n return (this.#marketData ??= new MarketDataService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get marketOverview(): MarketOverviewService {\n return (this.#marketOverview ??= new MarketOverviewService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get orderbook(): OrderbookService {\n return (this.#orderbook ??= new OrderbookService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get heatmap(): HeatmapService {\n return (this.#heatmap ??= new HeatmapService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get lifecycle(): LifecycleService {\n return (this.#lifecycle ??= new LifecycleService(this.transports, this.realtime));\n }\n\n get trades(): TradesService {\n return (this.#trades ??= new TradesService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get orders(): OrdersService {\n return (this.#orders ??= new OrdersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get triggers(): TriggersService {\n return (this.#triggers ??= new TriggersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get balances(): BalancesService {\n return (this.#balances ??= new BalancesService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get transfers(): TransfersService {\n return (this.#transfers ??= new TransfersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get internalTransfers(): InternalTransfersService {\n return (this.#internalTransfers ??= new InternalTransfersService(\n this.transports,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get tradingWithdraws(): TradingWithdrawsService {\n return (this.#tradingWithdraws ??= new TradingWithdrawsService(\n this.transports,\n this.#getResolver(),\n {\n chainId: this.#environment.chain.id,\n tradingGatewayAddress: this.#environment.contracts.tradingGatewayAddress,\n },\n this.#getScales(),\n this.catalog,\n ));\n }\n\n get deposit(): DepositService {\n return (this.#deposit ??= new DepositService(this.transports, this.#getResolver()));\n }\n\n get addressBook(): AddressBookService {\n return (this.#addressBook ??= new AddressBookService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get guardSigner(): GuardSignerService {\n return (this.#guardSigner ??= new GuardSignerService(this.transports, this.#getResolver()));\n }\n\n get socialVerification(): SocialVerificationService {\n return (this.#socialVerification ??= new SocialVerificationService(this.transports));\n }\n\n get whiteboard(): WhiteboardService {\n return (this.#whiteboard ??= new WhiteboardService(this.transports));\n }\n\n get zipper(): ZipperService {\n return (this.#zipper ??= new ZipperService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get mfa(): MfaService {\n return (this.#mfa ??= new MfaService(this.transports));\n }\n\n get vip(): VipService {\n return (this.#vip ??= new VipService(this.transports));\n }\n\n get fees(): FeesService {\n return (this.#fees ??= new FeesService(this.transports, this.#getResolver()));\n }\n\n get tradingRateLimits(): RateLimitService {\n return (this.#tradingRateLimits ??= new RateLimitService(\n this.transports,\n this.#getResolver(),\n ));\n }\n\n /**\n * Override in subclasses to provide a subaccount resolver.\n * The resolver is called lazily when service methods are invoked.\n */\n protected createSubaccountResolver(): SubaccountResolver | undefined {\n return undefined;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core-client.js","names":["#environment","#authProvider","#realtimeConfig","#configRealtimeClient","#configCatalog","#configCatalogSnapshot","#configCatalogCell","#createAuth","#realtime","#catalog","#getScales","#scales","#resolverInitialized","#resolver","#auth","#accounts","#apiKeys","#getResolver","#subaccounts","#candles","#chainAnalytics","#marketData","#marketOverview","#orderbook","#heatmap","#lifecycle","#trades","#orders","#triggers","#balances","#transfers","#internalTransfers","#tradingWithdraws","#deposit","#addressBook","#guardSigner","#socialVerification","#whiteboard","#zipper","#mfa","#claims","#vip","#fees","#tradingRateLimits"],"sources":["../src/core-client.ts"],"sourcesContent":["import type { Interceptor } from \"@connectrpc/connect\";\nimport { ConfigurationError } from \"./shared/errors.js\";\nimport {\n createApiKeyEd25519AuthHeaders,\n createTransports,\n resolveJwtToken,\n type AuthAndPublicApiTransports,\n type Transports,\n type JwtAuthProvider,\n type ApiKeyEd25519AuthProvider,\n} from \"./shared/transports.js\";\nimport { parsePolyesterEnvironment, type PolyesterEnvironment } from \"./environment.js\";\nimport { AccountsService } from \"./services/accounts/index.js\";\nimport { ApiKeysService } from \"./services/api-keys/index.js\";\nimport { AuthService } from \"./services/auth/auth.js\";\nimport { SubaccountsService } from \"./services/subaccounts/index.js\";\nimport { CandlesService } from \"./services/candles/index.js\";\nimport { ChainAnalyticsService } from \"./services/chain-analytics/index.js\";\nimport { MarketDataService } from \"./services/market-data/index.js\";\nimport { MarketOverviewService } from \"./services/market-overview/index.js\";\nimport { OrderbookService } from \"./services/orderbook/index.js\";\nimport { HeatmapService } from \"./services/heatmap/index.js\";\nimport { LifecycleService } from \"./services/lifecycle/index.js\";\nimport { TradesService } from \"./services/trades/index.js\";\nimport { OrdersService } from \"./services/orders/index.js\";\nimport { TriggersService } from \"./services/triggers/index.js\";\nimport { BalancesService } from \"./services/balances/index.js\";\nimport { TransfersService } from \"./services/transfers/index.js\";\nimport { InternalTransfersService } from \"./services/internal-transfers/index.js\";\nimport { TradingWithdrawsService } from \"./services/trading-withdraws/index.js\";\nimport { DepositService } from \"./services/deposit/index.js\";\nimport { AddressBookService } from \"./services/address-book/index.js\";\nimport { GuardSignerService } from \"./services/guard-signer/index.js\";\nimport { SocialVerificationService } from \"./services/social-verification/index.js\";\nimport { WhiteboardService } from \"./services/whiteboard/index.js\";\nimport { ZipperService } from \"./services/zipper/index.js\";\nimport { MfaService } from \"./services/mfa/index.js\";\nimport { ClaimsService } from \"./services/claims/index.js\";\nimport { VipService } from \"./services/vip/index.js\";\nimport { FeesService } from \"./services/fees/index.js\";\nimport { RateLimitService } from \"./services/rate-limits/index.js\";\nimport type { SubaccountResolver } from \"./services/subaccount-resolver.js\";\nimport {\n createPolyesterCatalog,\n type CatalogSnapshot,\n type CatalogSnapshotCell,\n type ClientCatalog,\n} from \"./catalogs/index.js\";\nimport { createCatalogSdkScales, type SdkScales } from \"./shared/decimal-surface.js\";\nimport { RealtimeClient, type PolyesterRealtime, type RealtimeConfig } from \"./realtime/index.js\";\n\nfunction realtimeAuthFromProvider(\n auth: JwtAuthProvider | ApiKeyEd25519AuthProvider | undefined,\n): Pick<RealtimeConfig, \"getAuthHeaders\" | \"hasAuth\"> {\n if (!auth) return {};\n if (auth.kind === \"jwt\") {\n return {\n getAuthHeaders: async () => {\n const token = await resolveJwtToken(auth);\n const headers: Record<string, string> = {};\n if (token) headers.authorization = `Bearer ${token}`;\n return headers;\n },\n hasAuth: () => {\n try {\n const token = auth.getToken();\n if (token !== null && typeof token !== \"string\") {\n // Async credentials are validated by the token request.\n void token.catch(() => {});\n return true;\n }\n return token !== null && token.length > 0;\n } catch {\n // Let the token request report provider failures as AuthenticationError.\n return true;\n }\n },\n };\n }\n return {\n getAuthHeaders: (request) =>\n createApiKeyEd25519AuthHeaders(auth, {\n url: request.url,\n method: request.method,\n }),\n hasAuth: () => true,\n };\n}\n\nexport type PolyesterRealtimeAuthConfig = Pick<RealtimeConfig, \"getAuthHeaders\" | \"hasAuth\">;\n\ninterface PolyesterClientCommonConfig {\n environment: PolyesterEnvironment;\n interceptors?: Interceptor[];\n auth?: JwtAuthProvider | ApiKeyEd25519AuthProvider;\n realtime?: PolyesterRealtimeAuthConfig;\n /**\n * Connect wire format. Defaults to binary for production performance.\n * Use `json` for human-readable debugging.\n */\n wireFormat?: \"binary\" | \"json\";\n /**\n * Advanced: inject pre-built Connect transports (in-memory mocks, custom\n * stacks). When provided, the SDK does not build its own transports and the\n * built-in auth/error-mapping interceptors are NOT applied — the injected\n * transports own their full interceptor chain.\n */\n transports?: Transports;\n /**\n * Advanced: inject a realtime implementation (in-memory mocks, custom\n * stacks). When provided, the SDK skips constructing its Centrifuge-backed\n * realtime client and the `realtime` auth config is ignored.\n */\n realtimeClient?: PolyesterRealtime;\n}\n\ntype PolyesterCatalogConfig =\n | {\n /** Client-owned catalog store. */\n catalog: ClientCatalog;\n catalogSnapshot?: never;\n catalogCell?: never;\n }\n | {\n catalog?: never;\n /**\n * Explicit initial catalog snapshot, commonly hydrated from server-rendered data.\n * Combines with `catalogCell` as the cell's initial value without clobbering a\n * pre-populated cell.\n */\n catalogSnapshot?: CatalogSnapshot;\n /**\n * External snapshot storage for the client-built catalog. A cell backed by a\n * reactive source makes every catalog read reactive.\n */\n catalogCell?: CatalogSnapshotCell;\n };\n\n/** Configuration shared by every Polyester client. */\nexport type PolyesterClientBaseConfig = PolyesterClientCommonConfig & PolyesterCatalogConfig;\n\n/** Configuration for the base Polyester client. */\nexport type PolyesterClientConfig = PolyesterClientBaseConfig;\n\n/** Preserves the exclusive catalog configuration while projecting client config fields. */\nexport function pickPolyesterCatalogConfig(\n config: PolyesterClientBaseConfig,\n): PolyesterCatalogConfig {\n return config.catalog === undefined\n ? {\n catalogSnapshot: config.catalogSnapshot,\n catalogCell: config.catalogCell,\n }\n : { catalog: config.catalog };\n}\n\ninterface AuthServiceFactoryContext {\n transports: AuthAndPublicApiTransports;\n realtime: PolyesterRealtime;\n subaccounts: SubaccountsService;\n environment: PolyesterEnvironment;\n}\n\ninterface PolyesterClientRuntimeConfig {\n createAuth?: (context: AuthServiceFactoryContext) => AuthService;\n}\n\n/**\n * Parses the configuration shared by every public client constructor.\n */\nexport function parsePolyesterClientConfig<TConfig extends PolyesterClientBaseConfig>(\n config: TConfig,\n): TConfig {\n if (typeof config !== \"object\" || config === null || Array.isArray(config)) {\n throw new ConfigurationError(\"Client configuration must be an object.\");\n }\n const environment = parsePolyesterEnvironment(config.environment);\n if (\n config.wireFormat !== undefined &&\n config.wireFormat !== \"binary\" &&\n config.wireFormat !== \"json\"\n ) {\n throw new ConfigurationError('wireFormat must be either \"binary\" or \"json\".');\n }\n if (config.catalog && config.catalogSnapshot) {\n throw new ConfigurationError(\"Provide either catalog or catalogSnapshot, not both.\");\n }\n if (config.catalog && config.catalogCell) {\n throw new ConfigurationError(\"Provide either catalog or catalogCell, not both.\");\n }\n\n return Object.assign({}, config, { environment });\n}\n\n/**\n * Base SDK client that wires transports, realtime, catalogs, and all public service clients for a Polyester environment.\n *\n * Services are constructed lazily on first property access (and memoized) so\n * that creating a client — which happens for every SSR request in server\n * hooks — only pays for the services the caller actually touches.\n */\nexport class PolyesterClient {\n protected readonly transports: Transports;\n\n readonly #environment: PolyesterEnvironment;\n readonly #authProvider: JwtAuthProvider | ApiKeyEd25519AuthProvider | undefined;\n readonly #realtimeConfig: PolyesterRealtimeAuthConfig | undefined;\n readonly #configRealtimeClient: PolyesterRealtime | undefined;\n readonly #configCatalog: ClientCatalog | undefined;\n readonly #configCatalogSnapshot: CatalogSnapshot | undefined;\n readonly #configCatalogCell: CatalogSnapshotCell | undefined;\n readonly #createAuth: PolyesterClientRuntimeConfig[\"createAuth\"];\n\n #realtime: PolyesterRealtime | undefined;\n #catalog: ClientCatalog | undefined;\n #scales: SdkScales | undefined;\n #resolver: SubaccountResolver | undefined;\n #resolverInitialized = false;\n\n #auth: AuthService | undefined;\n #accounts: AccountsService | undefined;\n #apiKeys: ApiKeysService | undefined;\n #subaccounts: SubaccountsService | undefined;\n #candles: CandlesService | undefined;\n #chainAnalytics: ChainAnalyticsService | undefined;\n #marketData: MarketDataService | undefined;\n #marketOverview: MarketOverviewService | undefined;\n #orderbook: OrderbookService | undefined;\n #heatmap: HeatmapService | undefined;\n #lifecycle: LifecycleService | undefined;\n #trades: TradesService | undefined;\n #orders: OrdersService | undefined;\n #triggers: TriggersService | undefined;\n #balances: BalancesService | undefined;\n #transfers: TransfersService | undefined;\n #internalTransfers: InternalTransfersService | undefined;\n #tradingWithdraws: TradingWithdrawsService | undefined;\n #deposit: DepositService | undefined;\n #addressBook: AddressBookService | undefined;\n #guardSigner: GuardSignerService | undefined;\n #socialVerification: SocialVerificationService | undefined;\n #whiteboard: WhiteboardService | undefined;\n #zipper: ZipperService | undefined;\n #mfa: MfaService | undefined;\n #claims: ClaimsService | undefined;\n #vip: VipService | undefined;\n #fees: FeesService | undefined;\n #tradingRateLimits: RateLimitService | undefined;\n\n constructor(config: PolyesterClientConfig, runtime: PolyesterClientRuntimeConfig = {}) {\n const parsedConfig = parsePolyesterClientConfig(config);\n config = parsedConfig;\n const interceptors = config.interceptors ?? [];\n const { environment } = config;\n\n this.transports =\n config.transports ??\n createTransports({\n apiUrl: environment.apiUrl,\n interceptors,\n auth: config.auth,\n wireFormat: config.wireFormat,\n });\n\n this.#environment = environment;\n this.#authProvider = config.auth;\n this.#realtimeConfig = config.realtime;\n this.#configRealtimeClient = config.realtimeClient;\n this.#configCatalog = config.catalog;\n this.#configCatalogSnapshot = config.catalogSnapshot;\n this.#configCatalogCell = config.catalogCell;\n this.#createAuth = runtime.createAuth;\n }\n\n get realtime(): PolyesterRealtime {\n if (!this.#realtime) {\n if (this.#configRealtimeClient) {\n this.#realtime = this.#configRealtimeClient;\n } else {\n const environment = this.#environment;\n const realtimeAuth = realtimeAuthFromProvider(this.#authProvider);\n this.#realtime = new RealtimeClient({\n wsUrl: environment.websocketUrl,\n tokenEndpoint: `${environment.apiUrl}/v1/rt/token`,\n subscribeEndpoint: `${environment.apiUrl}/v1/rt/subscribe`,\n getAuthHeaders:\n this.#realtimeConfig?.getAuthHeaders ?? realtimeAuth.getAuthHeaders,\n hasAuth: this.#realtimeConfig?.hasAuth ?? realtimeAuth.hasAuth,\n });\n }\n }\n return this.#realtime;\n }\n\n get catalog(): ClientCatalog {\n if (!this.#catalog) {\n if (this.#configCatalog) {\n this.#catalog = this.#configCatalog;\n } else {\n const catalogRefreshMarketData = new MarketDataService(\n this.transports,\n this.realtime,\n this.#getScales(),\n );\n const catalogRefreshZipper = new ZipperService(this.transports);\n this.#catalog = createPolyesterCatalog({\n snapshot: this.#configCatalogSnapshot,\n cell: this.#configCatalogCell,\n refresh: {\n market: () => catalogRefreshMarketData.getSpotConfig(),\n zipper: () => catalogRefreshZipper.getDepositWithdrawConfig(),\n },\n });\n }\n }\n return this.#catalog;\n }\n\n #getScales(): SdkScales {\n // Lazy catalog binding: the resolver only dereferences `this.catalog` at\n // call time. getSpotConfig() (the catalog's own refresh source) never\n // awaits scale readiness.\n this.#scales ??= createCatalogSdkScales(() => this.catalog);\n return this.#scales;\n }\n\n #getResolver(): SubaccountResolver | undefined {\n if (!this.#resolverInitialized) {\n this.#resolverInitialized = true;\n this.#resolver = this.createSubaccountResolver();\n }\n return this.#resolver;\n }\n\n get auth(): AuthService {\n if (!this.#auth) {\n this.#auth =\n this.#createAuth?.({\n transports: this.transports,\n realtime: this.realtime,\n subaccounts: this.subaccounts,\n environment: this.#environment,\n }) ?? new AuthService(this.transports, this.realtime);\n }\n return this.#auth;\n }\n\n get accounts(): AccountsService {\n return (this.#accounts ??= new AccountsService(this.transports));\n }\n\n get apiKeys(): ApiKeysService {\n return (this.#apiKeys ??= new ApiKeysService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get subaccounts(): SubaccountsService {\n return (this.#subaccounts ??= new SubaccountsService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get candles(): CandlesService {\n return (this.#candles ??= new CandlesService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get chainAnalytics(): ChainAnalyticsService {\n return (this.#chainAnalytics ??= new ChainAnalyticsService(\n this.transports,\n this.#getScales(),\n ));\n }\n\n get marketData(): MarketDataService {\n return (this.#marketData ??= new MarketDataService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get marketOverview(): MarketOverviewService {\n return (this.#marketOverview ??= new MarketOverviewService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get orderbook(): OrderbookService {\n return (this.#orderbook ??= new OrderbookService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get heatmap(): HeatmapService {\n return (this.#heatmap ??= new HeatmapService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get lifecycle(): LifecycleService {\n return (this.#lifecycle ??= new LifecycleService(this.transports, this.realtime));\n }\n\n get trades(): TradesService {\n return (this.#trades ??= new TradesService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get orders(): OrdersService {\n return (this.#orders ??= new OrdersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get triggers(): TriggersService {\n return (this.#triggers ??= new TriggersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get balances(): BalancesService {\n return (this.#balances ??= new BalancesService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get transfers(): TransfersService {\n return (this.#transfers ??= new TransfersService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get internalTransfers(): InternalTransfersService {\n return (this.#internalTransfers ??= new InternalTransfersService(\n this.transports,\n this.#getResolver(),\n this.#getScales(),\n ));\n }\n\n get tradingWithdraws(): TradingWithdrawsService {\n return (this.#tradingWithdraws ??= new TradingWithdrawsService(\n this.transports,\n this.#getResolver(),\n {\n chainId: this.#environment.chain.id,\n tradingGatewayAddress: this.#environment.contracts.tradingGatewayAddress,\n },\n this.#getScales(),\n this.catalog,\n ));\n }\n\n get deposit(): DepositService {\n return (this.#deposit ??= new DepositService(this.transports, this.#getResolver()));\n }\n\n get addressBook(): AddressBookService {\n return (this.#addressBook ??= new AddressBookService(\n this.transports,\n this.realtime,\n this.#getResolver(),\n ));\n }\n\n get guardSigner(): GuardSignerService {\n return (this.#guardSigner ??= new GuardSignerService(this.transports, this.#getResolver()));\n }\n\n get socialVerification(): SocialVerificationService {\n return (this.#socialVerification ??= new SocialVerificationService(this.transports));\n }\n\n get whiteboard(): WhiteboardService {\n return (this.#whiteboard ??= new WhiteboardService(this.transports));\n }\n\n get zipper(): ZipperService {\n return (this.#zipper ??= new ZipperService(\n this.transports,\n this.realtime,\n this.#getScales(),\n ));\n }\n\n get mfa(): MfaService {\n return (this.#mfa ??= new MfaService(this.transports));\n }\n\n get claims(): ClaimsService {\n return (this.#claims ??= new ClaimsService(this.transports));\n }\n\n get vip(): VipService {\n return (this.#vip ??= new VipService(this.transports));\n }\n\n get fees(): FeesService {\n return (this.#fees ??= new FeesService(this.transports, this.#getResolver()));\n }\n\n get tradingRateLimits(): RateLimitService {\n return (this.#tradingRateLimits ??= new RateLimitService(\n this.transports,\n this.#getResolver(),\n ));\n }\n\n /**\n * Override in subclasses to provide a subaccount resolver.\n * The resolver is called lazily when service methods are invoked.\n */\n protected createSubaccountResolver(): SubaccountResolver | undefined {\n return undefined;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","names":[],"sources":["../src/environment.ts"],"mappings":";;;UAKiB;WACJ,SAAS;WACT;;UAGI;WACJ,SAAS;WACT,wBAAwB;WACxB,uBAAuB;WACvB,yBAAyB;WACzB,sBAAsB;WACtB,kBAAkB;WAClB,2BAA2B;;UAGvB;WACJ;WACA;WACA,YAAY;WACZ,MAAM;;UAGF;WACJ,uBAAuB;;UAGnB;WACJ;WACA;WACA;WACA;WACA;WACA,OAAO;WACP,oBAAoB;WACpB,WAAW;;UAGP;WACJ;WACA;WACA;WACA;WACA,OAAO;WACP;aACI;aACA;aACA,YAAY;aACZ,MAAM;;WAEV,WAAW;;;;;
|
|
1
|
+
{"version":3,"file":"environment.d.ts","names":[],"sources":["../src/environment.ts"],"mappings":";;;UAKiB;WACJ,SAAS;WACT;;UAGI;WACJ,SAAS;WACT,wBAAwB;WACxB,uBAAuB;WACvB,yBAAyB;WACzB,sBAAsB;WACtB,kBAAkB;WAClB,2BAA2B;;UAGvB;WACJ;WACA;WACA,YAAY;WACZ,MAAM;;UAGF;WACJ,uBAAuB;;UAGnB;WACJ;WACA;WACA;WACA;WACA;WACA,OAAO;WACP,oBAAoB;WACpB,WAAW;;UAGP;WACJ;WACA;WACA;WACA;WACA,OAAO;WACP;aACI;aACA;aACA,YAAY;aACZ,MAAM;;WAEV,WAAW;;;;;iBAwKR,2BACZ,QAAQ,mCACT;cAgEU,8BAA4B;cAqD5B,+BAA6B"}
|
package/dist/environment.js
CHANGED
|
@@ -81,8 +81,6 @@ function normalizeChain(chain, rpcUrl) {
|
|
|
81
81
|
}
|
|
82
82
|
function environmentFingerprint(input) {
|
|
83
83
|
return keccak256Hex(evmUtf8ToBytes(JSON.stringify({
|
|
84
|
-
apiUrl: input.apiUrl,
|
|
85
|
-
websocketUrl: input.websocketUrl,
|
|
86
84
|
rpcUrl: input.rpcUrl,
|
|
87
85
|
chainId: input.chainId,
|
|
88
86
|
bundlerUrl: input.accountAbstraction.bundlerUrl,
|
|
@@ -114,8 +112,6 @@ function createPolyesterEnvironment(params) {
|
|
|
114
112
|
});
|
|
115
113
|
const contracts = Object.freeze({ tradingGatewayAddress: normalizeAddress(params.contracts.tradingGatewayAddress, "contracts.tradingGatewayAddress") });
|
|
116
114
|
const fingerprint = environmentFingerprint({
|
|
117
|
-
apiUrl,
|
|
118
|
-
websocketUrl,
|
|
119
115
|
rpcUrl,
|
|
120
116
|
chainId: chain.id,
|
|
121
117
|
accountAbstraction,
|
package/dist/environment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","names":[],"sources":["../src/environment.ts"],"sourcesContent":["import type { SafeVersion } from \"permissionless/accounts\";\nimport { ConfigurationError } from \"./shared/errors.js\";\nimport type { Address, Chain } from \"viem\";\nimport { checksumEvmAddress, evmUtf8ToBytes, isEvmAddress, keccak256Hex } from \"./utils/evm.js\";\n\nexport interface PolyesterEntryPointConfig {\n readonly address: Address;\n readonly version: \"0.7\";\n}\n\nexport interface PolyesterSafeDeploymentConfig {\n readonly version: SafeVersion;\n readonly safeModuleSetupAddress: Address;\n readonly safe4337ModuleAddress: Address;\n readonly safeProxyFactoryAddress: Address;\n readonly safeSingletonAddress: Address;\n readonly multiSendAddress: Address;\n readonly multiSendCallOnlyAddress?: Address;\n}\n\nexport interface PolyesterAccountAbstractionEnvironment {\n readonly bundlerUrl: string;\n readonly paymasterUrl: string;\n readonly entryPoint: PolyesterEntryPointConfig;\n readonly safe: PolyesterSafeDeploymentConfig;\n}\n\nexport interface PolyesterContractsEnvironment {\n readonly tradingGatewayAddress: Address;\n}\n\nexport interface PolyesterEnvironment {\n readonly name: string;\n readonly fingerprint: string;\n readonly apiUrl: string;\n readonly websocketUrl: string;\n readonly rpcUrl: string;\n readonly chain: Chain;\n readonly accountAbstraction: PolyesterAccountAbstractionEnvironment;\n readonly contracts: PolyesterContractsEnvironment;\n}\n\nexport interface CreatePolyesterEnvironmentParams {\n readonly name: string;\n readonly apiUrl: string;\n readonly websocketUrl: string;\n readonly rpcUrl: string;\n readonly chain: Chain;\n readonly accountAbstraction: {\n readonly bundlerUrl: string;\n readonly paymasterUrl: string;\n readonly entryPoint: PolyesterEntryPointConfig;\n readonly safe: PolyesterSafeDeploymentConfig;\n };\n readonly contracts: PolyesterContractsEnvironment;\n}\n\nconst LOCAL_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"::1\", \"[::1]\"]);\n\nfunction requireObject(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ConfigurationError(`${label} must be an object.`);\n }\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ConfigurationError(`${label} must be a non-empty string.`);\n }\n}\n\nfunction isLocalHost(hostname: string): boolean {\n return LOCAL_HOSTS.has(hostname);\n}\n\nfunction normalizeUrl(\n value: string,\n label: string,\n allowedProtocols: readonly string[],\n options?: { allowSearch?: boolean },\n): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new ConfigurationError(`${label} must be a valid URL.`);\n }\n\n if (!allowedProtocols.includes(url.protocol)) {\n throw new ConfigurationError(`${label} must use ${allowedProtocols.join(\" or \")}.`);\n }\n\n const insecureRemote =\n (url.protocol === \"http:\" || url.protocol === \"ws:\") && !isLocalHost(url.hostname);\n if (insecureRemote) {\n throw new ConfigurationError(`${label} must use a secure protocol for remote hosts.`);\n }\n\n if (options?.allowSearch === false && url.search) {\n throw new ConfigurationError(`${label} must not include query parameters.`);\n }\n\n url.hash = \"\";\n return url.toString().replace(/\\/+$/u, \"\");\n}\n\nfunction normalizeAddress(value: Address, label: string): Address {\n if (!isEvmAddress(value)) {\n throw new ConfigurationError(`${label} must be a valid address.`);\n }\n return checksumEvmAddress(value);\n}\n\nfunction normalizeEntryPoint(entryPoint: PolyesterEntryPointConfig): PolyesterEntryPointConfig {\n requireObject(entryPoint, \"accountAbstraction.entryPoint\");\n if (entryPoint.version !== \"0.7\") {\n throw new ConfigurationError(\"accountAbstraction.entryPoint.version must be 0.7.\");\n }\n return Object.freeze({\n address: normalizeAddress(entryPoint.address, \"accountAbstraction.entryPoint.address\"),\n version: entryPoint.version,\n });\n}\n\nfunction normalizeSafeConfig(safe: PolyesterSafeDeploymentConfig): PolyesterSafeDeploymentConfig {\n requireObject(safe, \"accountAbstraction.safe\");\n if (safe.version !== \"1.4.1\" && safe.version !== \"1.5.0\") {\n throw new ConfigurationError(\n 'accountAbstraction.safe.version must be either \"1.4.1\" or \"1.5.0\".',\n );\n }\n return Object.freeze({\n version: safe.version,\n safeModuleSetupAddress: normalizeAddress(\n safe.safeModuleSetupAddress,\n \"accountAbstraction.safe.safeModuleSetupAddress\",\n ),\n safe4337ModuleAddress: normalizeAddress(\n safe.safe4337ModuleAddress,\n \"accountAbstraction.safe.safe4337ModuleAddress\",\n ),\n safeProxyFactoryAddress: normalizeAddress(\n safe.safeProxyFactoryAddress,\n \"accountAbstraction.safe.safeProxyFactoryAddress\",\n ),\n safeSingletonAddress: normalizeAddress(\n safe.safeSingletonAddress,\n \"accountAbstraction.safe.safeSingletonAddress\",\n ),\n multiSendAddress: normalizeAddress(\n safe.multiSendAddress,\n \"accountAbstraction.safe.multiSendAddress\",\n ),\n multiSendCallOnlyAddress: safe.multiSendCallOnlyAddress\n ? normalizeAddress(\n safe.multiSendCallOnlyAddress,\n \"accountAbstraction.safe.multiSendCallOnlyAddress\",\n )\n : undefined,\n });\n}\n\nfunction normalizeChain(chain: Chain, rpcUrl: string): Chain {\n requireObject(chain, \"chain\");\n if (!Number.isInteger(chain.id) || chain.id <= 0) {\n throw new ConfigurationError(\"chain.id must be a positive integer.\");\n }\n requireNonEmptyString(chain.name, \"chain.name\");\n requireObject(chain.nativeCurrency, \"chain.nativeCurrency\");\n if (!Number.isInteger(chain.nativeCurrency.decimals) || chain.nativeCurrency.decimals < 0) {\n throw new ConfigurationError(\n \"chain.nativeCurrency.decimals must be a non-negative integer.\",\n );\n }\n requireNonEmptyString(chain.nativeCurrency.name, \"chain.nativeCurrency.name\");\n requireNonEmptyString(chain.nativeCurrency.symbol, \"chain.nativeCurrency.symbol\");\n requireObject(chain.rpcUrls, \"chain.rpcUrls\");\n requireObject(chain.rpcUrls.default, \"chain.rpcUrls.default\");\n if (!Array.isArray(chain.rpcUrls.default.http)) {\n throw new ConfigurationError(\"chain.rpcUrls.default.http must be an array.\");\n }\n\n // Shape parity with viem's defineChain: spread over undefined defaults.\n return Object.freeze({\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n rpcUrls: {\n ...chain.rpcUrls,\n default: {\n ...chain.rpcUrls.default,\n http: [rpcUrl],\n },\n },\n });\n}\n\nfunction environmentFingerprint(input: {\n apiUrl: string;\n websocketUrl: string;\n rpcUrl: string;\n chainId: number;\n accountAbstraction: PolyesterAccountAbstractionEnvironment;\n contracts: PolyesterContractsEnvironment;\n}): string {\n return keccak256Hex(\n evmUtf8ToBytes(\n JSON.stringify({\n apiUrl: input.apiUrl,\n websocketUrl: input.websocketUrl,\n rpcUrl: input.rpcUrl,\n chainId: input.chainId,\n bundlerUrl: input.accountAbstraction.bundlerUrl,\n paymasterUrl: input.accountAbstraction.paymasterUrl,\n entryPoint: input.accountAbstraction.entryPoint,\n safe: input.accountAbstraction.safe,\n contracts: input.contracts,\n }),\n ),\n );\n}\n\n/**\n * Creates a complete SDK environment configuration from entrypoint and contract settings.\n */\nexport function createPolyesterEnvironment(\n params: CreatePolyesterEnvironmentParams,\n): PolyesterEnvironment {\n requireObject(params, \"Environment configuration\");\n requireNonEmptyString(params.name, \"name\");\n requireObject(params.accountAbstraction, \"accountAbstraction\");\n requireObject(params.contracts, \"contracts\");\n const apiUrl = normalizeUrl(params.apiUrl, \"apiUrl\", [\"https:\", \"http:\"], {\n allowSearch: false,\n });\n const websocketUrl = normalizeUrl(params.websocketUrl, \"websocketUrl\", [\"wss:\", \"ws:\"]);\n const rpcUrl = normalizeUrl(params.rpcUrl, \"rpcUrl\", [\"https:\", \"http:\"]);\n const bundlerUrl = normalizeUrl(params.accountAbstraction.bundlerUrl, \"bundlerUrl\", [\n \"https:\",\n \"http:\",\n ]);\n const paymasterUrl = normalizeUrl(params.accountAbstraction.paymasterUrl, \"paymasterUrl\", [\n \"https:\",\n \"http:\",\n ]);\n const chain = normalizeChain(params.chain, rpcUrl);\n const accountAbstraction = Object.freeze({\n bundlerUrl,\n paymasterUrl,\n entryPoint: normalizeEntryPoint(params.accountAbstraction.entryPoint),\n safe: normalizeSafeConfig(params.accountAbstraction.safe),\n });\n const contracts = Object.freeze({\n tradingGatewayAddress: normalizeAddress(\n params.contracts.tradingGatewayAddress,\n \"contracts.tradingGatewayAddress\",\n ),\n });\n const fingerprint = environmentFingerprint({\n apiUrl,\n websocketUrl,\n rpcUrl,\n chainId: chain.id,\n accountAbstraction,\n contracts,\n });\n\n return Object.freeze({\n name: params.name,\n fingerprint,\n apiUrl,\n websocketUrl,\n rpcUrl,\n chain,\n accountAbstraction,\n contracts,\n });\n}\n\n/**\n * Parses a complete environment supplied to a public SDK client constructor.\n */\nexport function parsePolyesterEnvironment(environment: PolyesterEnvironment): PolyesterEnvironment {\n requireObject(environment, \"environment\");\n const parsed = createPolyesterEnvironment(environment);\n if (environment.fingerprint !== parsed.fingerprint) {\n throw new ConfigurationError(\n \"environment.fingerprint must match the environment configuration.\",\n );\n }\n return parsed;\n}\n\nexport const POLYESTER_DEVNET_ENVIRONMENT = createPolyesterEnvironment({\n name: \"polyester-devnet\",\n apiUrl: \"https://api.devnet.polyester.com\",\n websocketUrl: \"wss://api.devnet.polyester.com\",\n rpcUrl: \"https://rpc.polyester.tech\",\n chain: {\n id: 888168,\n name: \"Polyester Chain Devnet\",\n nativeCurrency: {\n decimals: 18,\n name: \"POL\",\n symbol: \"POL\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.polyester.tech\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Polyester Scan\",\n url: \"https://devnet.polyesterscan.com\",\n },\n },\n contracts: {\n multicall3: {\n address: \"0xF35A6AE5408fa1356064849D0BC3855f801aa6aC\",\n blockCreated: 563457,\n },\n },\n },\n accountAbstraction: {\n bundlerUrl: \"https://bundler.polyester.tech\",\n paymasterUrl: \"https://paymaster.polyester.tech\",\n entryPoint: {\n address: \"0x59a4B77766509c4507D79eFF8089474eC3daC174\",\n version: \"0.7\",\n },\n safe: {\n version: \"1.4.1\",\n safeModuleSetupAddress: \"0x80791683D9C079A37Debc67EaDdbFcBC6f0FF2bB\",\n safe4337ModuleAddress: \"0x0713FF3d4c1b4f177833a372b1e3cb977540EA11\",\n safeProxyFactoryAddress: \"0xF8F0F649Dd3bFa9095206691E9fb2356c26216dE\",\n safeSingletonAddress: \"0x92abEa238FEA8908c397cE65366ea9278f0AeC7A\",\n multiSendAddress: \"0x70C8a8CcB45a8E2589B0f019374fc923dA34E4c7\",\n multiSendCallOnlyAddress: \"0x375C86a08DA98d1944D7B3c736307A72186CcAf1\",\n },\n },\n contracts: {\n tradingGatewayAddress: \"0xD3fecf5D39131e23b6B0f872cA0a21c8A5a30932\",\n },\n});\n\nexport const POLYESTER_TESTNET_ENVIRONMENT = createPolyesterEnvironment({\n name: \"polyester-testnet\",\n apiUrl: \"https://api.testnet.polyester.com\",\n websocketUrl: \"wss://api.testnet.polyester.com\",\n rpcUrl: \"https://rpc.polyester.live\",\n chain: {\n id: 888169,\n name: \"Polyester Chain Testnet\",\n nativeCurrency: {\n decimals: 18,\n name: \"POL\",\n symbol: \"POL\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.polyester.live\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Polyester Scan\",\n url: \"https://testnet.polyesterscan.com\",\n },\n },\n contracts: {\n multicall3: {\n address: \"0xfc9B0991DC84E419C9b164dE89795958a5B0A0cF\",\n blockCreated: 179823,\n },\n },\n },\n accountAbstraction: {\n bundlerUrl: \"https://bundler.polyester.live\",\n paymasterUrl: \"https://paymaster.polyester.live\",\n entryPoint: {\n address: \"0x35c524a72ffb4D348d616cDD340D176c8f3C8B2C\",\n version: \"0.7\",\n },\n safe: {\n version: \"1.4.1\",\n safeModuleSetupAddress: \"0xdA9510c95Ab50EAd5A3DD28FA6BACce497dCF1fB\",\n safe4337ModuleAddress: \"0xE278E4BCb71b095f7dAaa1bcEc1950696Fc40C74\",\n safeProxyFactoryAddress: \"0x2b8250158D58dD6D5e89313fa940586C9054A547\",\n safeSingletonAddress: \"0x6f00AB12B6A8aFf400F14f4Cd738549f0F53390d\",\n multiSendAddress: \"0xA38fEFA19ff5d8E3d988b2a0e6C8A2ae099fd97D\",\n multiSendCallOnlyAddress: \"0xE99b6c6d550B322347EeE11f4e8643377D8475A8\",\n },\n },\n contracts: {\n tradingGatewayAddress: \"0x20ef1BCeE69D73Ce1649E688dAA9A7AcF441f0EE\",\n },\n});\n"],"mappings":";;;AAyDA,MAAM,8BAAc,IAAI,IAAI;CAAC;CAAa;CAAa;CAAO;AAAO,CAAC;AAEtE,SAAS,cAAc,OAAgB,OAAyD;CAC5F,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAClE,MAAM,IAAI,mBAAmB,GAAG,MAAM,oBAAoB;AAElE;AAEA,SAAS,sBAAsB,OAAgB,OAAwC;CACnF,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,WAAW,GACrD,MAAM,IAAI,mBAAmB,GAAG,MAAM,6BAA6B;AAE3E;AAEA,SAAS,YAAY,UAA2B;CAC5C,OAAO,YAAY,IAAI,QAAQ;AACnC;AAEA,SAAS,aACL,OACA,OACA,kBACA,SACM;CACN,IAAI;CACJ,IAAI;EACA,MAAM,IAAI,IAAI,KAAK;CACvB,QAAQ;EACJ,MAAM,IAAI,mBAAmB,GAAG,MAAM,sBAAsB;CAChE;CAEA,IAAI,CAAC,iBAAiB,SAAS,IAAI,QAAQ,GACvC,MAAM,IAAI,mBAAmB,GAAG,MAAM,YAAY,iBAAiB,KAAK,MAAM,EAAE,EAAE;CAKtF,KADK,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU,CAAC,YAAY,IAAI,QAAQ,GAEjF,MAAM,IAAI,mBAAmB,GAAG,MAAM,8CAA8C;CAGxF,IAAI,SAAS,gBAAgB,SAAS,IAAI,QACtC,MAAM,IAAI,mBAAmB,GAAG,MAAM,oCAAoC;CAG9E,IAAI,OAAO;CACX,OAAO,IAAI,SAAS,CAAC,CAAC,QAAQ,SAAS,EAAE;AAC7C;AAEA,SAAS,iBAAiB,OAAgB,OAAwB;CAC9D,IAAI,CAAC,aAAa,KAAK,GACnB,MAAM,IAAI,mBAAmB,GAAG,MAAM,0BAA0B;CAEpE,OAAO,mBAAmB,KAAK;AACnC;AAEA,SAAS,oBAAoB,YAAkE;CAC3F,cAAc,YAAY,+BAA+B;CACzD,IAAI,WAAW,YAAY,OACvB,MAAM,IAAI,mBAAmB,oDAAoD;CAErF,OAAO,OAAO,OAAO;EACjB,SAAS,iBAAiB,WAAW,SAAS,uCAAuC;EACrF,SAAS,WAAW;CACxB,CAAC;AACL;AAEA,SAAS,oBAAoB,MAAoE;CAC7F,cAAc,MAAM,yBAAyB;CAC7C,IAAI,KAAK,YAAY,WAAW,KAAK,YAAY,SAC7C,MAAM,IAAI,mBACN,wEACJ;CAEJ,OAAO,OAAO,OAAO;EACjB,SAAS,KAAK;EACd,wBAAwB,iBACpB,KAAK,wBACL,gDACJ;EACA,uBAAuB,iBACnB,KAAK,uBACL,+CACJ;EACA,yBAAyB,iBACrB,KAAK,yBACL,iDACJ;EACA,sBAAsB,iBAClB,KAAK,sBACL,8CACJ;EACA,kBAAkB,iBACd,KAAK,kBACL,0CACJ;EACA,0BAA0B,KAAK,2BACzB,iBACI,KAAK,0BACL,kDACJ,IACA,KAAA;CACV,CAAC;AACL;AAEA,SAAS,eAAe,OAAc,QAAuB;CACzD,cAAc,OAAO,OAAO;CAC5B,IAAI,CAAC,OAAO,UAAU,MAAM,EAAE,KAAK,MAAM,MAAM,GAC3C,MAAM,IAAI,mBAAmB,sCAAsC;CAEvE,sBAAsB,MAAM,MAAM,YAAY;CAC9C,cAAc,MAAM,gBAAgB,sBAAsB;CAC1D,IAAI,CAAC,OAAO,UAAU,MAAM,eAAe,QAAQ,KAAK,MAAM,eAAe,WAAW,GACpF,MAAM,IAAI,mBACN,+DACJ;CAEJ,sBAAsB,MAAM,eAAe,MAAM,2BAA2B;CAC5E,sBAAsB,MAAM,eAAe,QAAQ,6BAA6B;CAChF,cAAc,MAAM,SAAS,eAAe;CAC5C,cAAc,MAAM,QAAQ,SAAS,uBAAuB;CAC5D,IAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,GACzC,MAAM,IAAI,mBAAmB,8CAA8C;CAI/E,OAAO,OAAO,OAAO;EACjB,YAAY,KAAA;EACZ,MAAM,KAAA;EACN,aAAa,KAAA;EACb,GAAG;EACH,SAAS;GACL,GAAG,MAAM;GACT,SAAS;IACL,GAAG,MAAM,QAAQ;IACjB,MAAM,CAAC,MAAM;GACjB;EACJ;CACJ,CAAC;AACL;AAEA,SAAS,uBAAuB,OAOrB;CACP,OAAO,aACH,eACI,KAAK,UAAU;EACX,QAAQ,MAAM;EACd,cAAc,MAAM;EACpB,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,YAAY,MAAM,mBAAmB;EACrC,cAAc,MAAM,mBAAmB;EACvC,YAAY,MAAM,mBAAmB;EACrC,MAAM,MAAM,mBAAmB;EAC/B,WAAW,MAAM;CACrB,CAAC,CACL,CACJ;AACJ;;;;AAKA,SAAgB,2BACZ,QACoB;CACpB,cAAc,QAAQ,2BAA2B;CACjD,sBAAsB,OAAO,MAAM,MAAM;CACzC,cAAc,OAAO,oBAAoB,oBAAoB;CAC7D,cAAc,OAAO,WAAW,WAAW;CAC3C,MAAM,SAAS,aAAa,OAAO,QAAQ,UAAU,CAAC,UAAU,OAAO,GAAG,EACtE,aAAa,MACjB,CAAC;CACD,MAAM,eAAe,aAAa,OAAO,cAAc,gBAAgB,CAAC,QAAQ,KAAK,CAAC;CACtF,MAAM,SAAS,aAAa,OAAO,QAAQ,UAAU,CAAC,UAAU,OAAO,CAAC;CACxE,MAAM,aAAa,aAAa,OAAO,mBAAmB,YAAY,cAAc,CAChF,UACA,OACJ,CAAC;CACD,MAAM,eAAe,aAAa,OAAO,mBAAmB,cAAc,gBAAgB,CACtF,UACA,OACJ,CAAC;CACD,MAAM,QAAQ,eAAe,OAAO,OAAO,MAAM;CACjD,MAAM,qBAAqB,OAAO,OAAO;EACrC;EACA;EACA,YAAY,oBAAoB,OAAO,mBAAmB,UAAU;EACpE,MAAM,oBAAoB,OAAO,mBAAmB,IAAI;CAC5D,CAAC;CACD,MAAM,YAAY,OAAO,OAAO,EAC5B,uBAAuB,iBACnB,OAAO,UAAU,uBACjB,iCACJ,EACJ,CAAC;CACD,MAAM,cAAc,uBAAuB;EACvC;EACA;EACA;EACA,SAAS,MAAM;EACf;EACA;CACJ,CAAC;CAED,OAAO,OAAO,OAAO;EACjB,MAAM,OAAO;EACb;EACA;EACA;EACA;EACA;EACA;EACA;CACJ,CAAC;AACL;;;;AAKA,SAAgB,0BAA0B,aAAyD;CAC/F,cAAc,aAAa,aAAa;CACxC,MAAM,SAAS,2BAA2B,WAAW;CACrD,IAAI,YAAY,gBAAgB,OAAO,aACnC,MAAM,IAAI,mBACN,mEACJ;CAEJ,OAAO;AACX;AAEA,MAAa,+BAA+B,2BAA2B;CACnE,MAAM;CACN,QAAQ;CACR,cAAc;CACd,QAAQ;CACR,OAAO;EACH,IAAI;EACJ,MAAM;EACN,gBAAgB;GACZ,UAAU;GACV,MAAM;GACN,QAAQ;EACZ;EACA,SAAS,EACL,SAAS,EACL,MAAM,CAAC,4BAA4B,EACvC,EACJ;EACA,gBAAgB,EACZ,SAAS;GACL,MAAM;GACN,KAAK;EACT,EACJ;EACA,WAAW,EACP,YAAY;GACR,SAAS;GACT,cAAc;EAClB,EACJ;CACJ;CACA,oBAAoB;EAChB,YAAY;EACZ,cAAc;EACd,YAAY;GACR,SAAS;GACT,SAAS;EACb;EACA,MAAM;GACF,SAAS;GACT,wBAAwB;GACxB,uBAAuB;GACvB,yBAAyB;GACzB,sBAAsB;GACtB,kBAAkB;GAClB,0BAA0B;EAC9B;CACJ;CACA,WAAW,EACP,uBAAuB,6CAC3B;AACJ,CAAC;AAED,MAAa,gCAAgC,2BAA2B;CACpE,MAAM;CACN,QAAQ;CACR,cAAc;CACd,QAAQ;CACR,OAAO;EACH,IAAI;EACJ,MAAM;EACN,gBAAgB;GACZ,UAAU;GACV,MAAM;GACN,QAAQ;EACZ;EACA,SAAS,EACL,SAAS,EACL,MAAM,CAAC,4BAA4B,EACvC,EACJ;EACA,gBAAgB,EACZ,SAAS;GACL,MAAM;GACN,KAAK;EACT,EACJ;EACA,WAAW,EACP,YAAY;GACR,SAAS;GACT,cAAc;EAClB,EACJ;CACJ;CACA,oBAAoB;EAChB,YAAY;EACZ,cAAc;EACd,YAAY;GACR,SAAS;GACT,SAAS;EACb;EACA,MAAM;GACF,SAAS;GACT,wBAAwB;GACxB,uBAAuB;GACvB,yBAAyB;GACzB,sBAAsB;GACtB,kBAAkB;GAClB,0BAA0B;EAC9B;CACJ;CACA,WAAW,EACP,uBAAuB,6CAC3B;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"environment.js","names":[],"sources":["../src/environment.ts"],"sourcesContent":["import type { SafeVersion } from \"permissionless/accounts\";\nimport { ConfigurationError } from \"./shared/errors.js\";\nimport type { Address, Chain } from \"viem\";\nimport { checksumEvmAddress, evmUtf8ToBytes, isEvmAddress, keccak256Hex } from \"./utils/evm.js\";\n\nexport interface PolyesterEntryPointConfig {\n readonly address: Address;\n readonly version: \"0.7\";\n}\n\nexport interface PolyesterSafeDeploymentConfig {\n readonly version: SafeVersion;\n readonly safeModuleSetupAddress: Address;\n readonly safe4337ModuleAddress: Address;\n readonly safeProxyFactoryAddress: Address;\n readonly safeSingletonAddress: Address;\n readonly multiSendAddress: Address;\n readonly multiSendCallOnlyAddress?: Address;\n}\n\nexport interface PolyesterAccountAbstractionEnvironment {\n readonly bundlerUrl: string;\n readonly paymasterUrl: string;\n readonly entryPoint: PolyesterEntryPointConfig;\n readonly safe: PolyesterSafeDeploymentConfig;\n}\n\nexport interface PolyesterContractsEnvironment {\n readonly tradingGatewayAddress: Address;\n}\n\nexport interface PolyesterEnvironment {\n readonly name: string;\n readonly fingerprint: string;\n readonly apiUrl: string;\n readonly websocketUrl: string;\n readonly rpcUrl: string;\n readonly chain: Chain;\n readonly accountAbstraction: PolyesterAccountAbstractionEnvironment;\n readonly contracts: PolyesterContractsEnvironment;\n}\n\nexport interface CreatePolyesterEnvironmentParams {\n readonly name: string;\n readonly apiUrl: string;\n readonly websocketUrl: string;\n readonly rpcUrl: string;\n readonly chain: Chain;\n readonly accountAbstraction: {\n readonly bundlerUrl: string;\n readonly paymasterUrl: string;\n readonly entryPoint: PolyesterEntryPointConfig;\n readonly safe: PolyesterSafeDeploymentConfig;\n };\n readonly contracts: PolyesterContractsEnvironment;\n}\n\nconst LOCAL_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"::1\", \"[::1]\"]);\n\nfunction requireObject(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ConfigurationError(`${label} must be an object.`);\n }\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ConfigurationError(`${label} must be a non-empty string.`);\n }\n}\n\nfunction isLocalHost(hostname: string): boolean {\n return LOCAL_HOSTS.has(hostname);\n}\n\nfunction normalizeUrl(\n value: string,\n label: string,\n allowedProtocols: readonly string[],\n options?: { allowSearch?: boolean },\n): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new ConfigurationError(`${label} must be a valid URL.`);\n }\n\n if (!allowedProtocols.includes(url.protocol)) {\n throw new ConfigurationError(`${label} must use ${allowedProtocols.join(\" or \")}.`);\n }\n\n const insecureRemote =\n (url.protocol === \"http:\" || url.protocol === \"ws:\") && !isLocalHost(url.hostname);\n if (insecureRemote) {\n throw new ConfigurationError(`${label} must use a secure protocol for remote hosts.`);\n }\n\n if (options?.allowSearch === false && url.search) {\n throw new ConfigurationError(`${label} must not include query parameters.`);\n }\n\n url.hash = \"\";\n return url.toString().replace(/\\/+$/u, \"\");\n}\n\nfunction normalizeAddress(value: Address, label: string): Address {\n if (!isEvmAddress(value)) {\n throw new ConfigurationError(`${label} must be a valid address.`);\n }\n return checksumEvmAddress(value);\n}\n\nfunction normalizeEntryPoint(entryPoint: PolyesterEntryPointConfig): PolyesterEntryPointConfig {\n requireObject(entryPoint, \"accountAbstraction.entryPoint\");\n if (entryPoint.version !== \"0.7\") {\n throw new ConfigurationError(\"accountAbstraction.entryPoint.version must be 0.7.\");\n }\n return Object.freeze({\n address: normalizeAddress(entryPoint.address, \"accountAbstraction.entryPoint.address\"),\n version: entryPoint.version,\n });\n}\n\nfunction normalizeSafeConfig(safe: PolyesterSafeDeploymentConfig): PolyesterSafeDeploymentConfig {\n requireObject(safe, \"accountAbstraction.safe\");\n if (safe.version !== \"1.4.1\" && safe.version !== \"1.5.0\") {\n throw new ConfigurationError(\n 'accountAbstraction.safe.version must be either \"1.4.1\" or \"1.5.0\".',\n );\n }\n return Object.freeze({\n version: safe.version,\n safeModuleSetupAddress: normalizeAddress(\n safe.safeModuleSetupAddress,\n \"accountAbstraction.safe.safeModuleSetupAddress\",\n ),\n safe4337ModuleAddress: normalizeAddress(\n safe.safe4337ModuleAddress,\n \"accountAbstraction.safe.safe4337ModuleAddress\",\n ),\n safeProxyFactoryAddress: normalizeAddress(\n safe.safeProxyFactoryAddress,\n \"accountAbstraction.safe.safeProxyFactoryAddress\",\n ),\n safeSingletonAddress: normalizeAddress(\n safe.safeSingletonAddress,\n \"accountAbstraction.safe.safeSingletonAddress\",\n ),\n multiSendAddress: normalizeAddress(\n safe.multiSendAddress,\n \"accountAbstraction.safe.multiSendAddress\",\n ),\n multiSendCallOnlyAddress: safe.multiSendCallOnlyAddress\n ? normalizeAddress(\n safe.multiSendCallOnlyAddress,\n \"accountAbstraction.safe.multiSendCallOnlyAddress\",\n )\n : undefined,\n });\n}\n\nfunction normalizeChain(chain: Chain, rpcUrl: string): Chain {\n requireObject(chain, \"chain\");\n if (!Number.isInteger(chain.id) || chain.id <= 0) {\n throw new ConfigurationError(\"chain.id must be a positive integer.\");\n }\n requireNonEmptyString(chain.name, \"chain.name\");\n requireObject(chain.nativeCurrency, \"chain.nativeCurrency\");\n if (!Number.isInteger(chain.nativeCurrency.decimals) || chain.nativeCurrency.decimals < 0) {\n throw new ConfigurationError(\n \"chain.nativeCurrency.decimals must be a non-negative integer.\",\n );\n }\n requireNonEmptyString(chain.nativeCurrency.name, \"chain.nativeCurrency.name\");\n requireNonEmptyString(chain.nativeCurrency.symbol, \"chain.nativeCurrency.symbol\");\n requireObject(chain.rpcUrls, \"chain.rpcUrls\");\n requireObject(chain.rpcUrls.default, \"chain.rpcUrls.default\");\n if (!Array.isArray(chain.rpcUrls.default.http)) {\n throw new ConfigurationError(\"chain.rpcUrls.default.http must be an array.\");\n }\n\n // Shape parity with viem's defineChain: spread over undefined defaults.\n return Object.freeze({\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n rpcUrls: {\n ...chain.rpcUrls,\n default: {\n ...chain.rpcUrls.default,\n http: [rpcUrl],\n },\n },\n });\n}\n\nfunction environmentFingerprint(input: {\n rpcUrl: string;\n chainId: number;\n accountAbstraction: PolyesterAccountAbstractionEnvironment;\n contracts: PolyesterContractsEnvironment;\n}): string {\n return keccak256Hex(\n evmUtf8ToBytes(\n JSON.stringify({\n rpcUrl: input.rpcUrl,\n chainId: input.chainId,\n bundlerUrl: input.accountAbstraction.bundlerUrl,\n paymasterUrl: input.accountAbstraction.paymasterUrl,\n entryPoint: input.accountAbstraction.entryPoint,\n safe: input.accountAbstraction.safe,\n contracts: input.contracts,\n }),\n ),\n );\n}\n\n/**\n * Creates a complete SDK environment configuration from entrypoint and contract settings.\n */\nexport function createPolyesterEnvironment(\n params: CreatePolyesterEnvironmentParams,\n): PolyesterEnvironment {\n requireObject(params, \"Environment configuration\");\n requireNonEmptyString(params.name, \"name\");\n requireObject(params.accountAbstraction, \"accountAbstraction\");\n requireObject(params.contracts, \"contracts\");\n const apiUrl = normalizeUrl(params.apiUrl, \"apiUrl\", [\"https:\", \"http:\"], {\n allowSearch: false,\n });\n const websocketUrl = normalizeUrl(params.websocketUrl, \"websocketUrl\", [\"wss:\", \"ws:\"]);\n const rpcUrl = normalizeUrl(params.rpcUrl, \"rpcUrl\", [\"https:\", \"http:\"]);\n const bundlerUrl = normalizeUrl(params.accountAbstraction.bundlerUrl, \"bundlerUrl\", [\n \"https:\",\n \"http:\",\n ]);\n const paymasterUrl = normalizeUrl(params.accountAbstraction.paymasterUrl, \"paymasterUrl\", [\n \"https:\",\n \"http:\",\n ]);\n const chain = normalizeChain(params.chain, rpcUrl);\n const accountAbstraction = Object.freeze({\n bundlerUrl,\n paymasterUrl,\n entryPoint: normalizeEntryPoint(params.accountAbstraction.entryPoint),\n safe: normalizeSafeConfig(params.accountAbstraction.safe),\n });\n const contracts = Object.freeze({\n tradingGatewayAddress: normalizeAddress(\n params.contracts.tradingGatewayAddress,\n \"contracts.tradingGatewayAddress\",\n ),\n });\n const fingerprint = environmentFingerprint({\n rpcUrl,\n chainId: chain.id,\n accountAbstraction,\n contracts,\n });\n\n return Object.freeze({\n name: params.name,\n fingerprint,\n apiUrl,\n websocketUrl,\n rpcUrl,\n chain,\n accountAbstraction,\n contracts,\n });\n}\n\n/**\n * Parses a complete environment supplied to a public SDK client constructor.\n */\nexport function parsePolyesterEnvironment(environment: PolyesterEnvironment): PolyesterEnvironment {\n requireObject(environment, \"environment\");\n const parsed = createPolyesterEnvironment(environment);\n if (environment.fingerprint !== parsed.fingerprint) {\n throw new ConfigurationError(\n \"environment.fingerprint must match the environment configuration.\",\n );\n }\n return parsed;\n}\n\nexport const POLYESTER_DEVNET_ENVIRONMENT = createPolyesterEnvironment({\n name: \"polyester-devnet\",\n apiUrl: \"https://api.devnet.polyester.com\",\n websocketUrl: \"wss://api.devnet.polyester.com\",\n rpcUrl: \"https://rpc.polyester.tech\",\n chain: {\n id: 888168,\n name: \"Polyester Chain Devnet\",\n nativeCurrency: {\n decimals: 18,\n name: \"POL\",\n symbol: \"POL\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.polyester.tech\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Polyester Scan\",\n url: \"https://devnet.polyesterscan.com\",\n },\n },\n contracts: {\n multicall3: {\n address: \"0xF35A6AE5408fa1356064849D0BC3855f801aa6aC\",\n blockCreated: 563457,\n },\n },\n },\n accountAbstraction: {\n bundlerUrl: \"https://bundler.polyester.tech\",\n paymasterUrl: \"https://paymaster.polyester.tech\",\n entryPoint: {\n address: \"0x59a4B77766509c4507D79eFF8089474eC3daC174\",\n version: \"0.7\",\n },\n safe: {\n version: \"1.4.1\",\n safeModuleSetupAddress: \"0x80791683D9C079A37Debc67EaDdbFcBC6f0FF2bB\",\n safe4337ModuleAddress: \"0x0713FF3d4c1b4f177833a372b1e3cb977540EA11\",\n safeProxyFactoryAddress: \"0xF8F0F649Dd3bFa9095206691E9fb2356c26216dE\",\n safeSingletonAddress: \"0x92abEa238FEA8908c397cE65366ea9278f0AeC7A\",\n multiSendAddress: \"0x70C8a8CcB45a8E2589B0f019374fc923dA34E4c7\",\n multiSendCallOnlyAddress: \"0x375C86a08DA98d1944D7B3c736307A72186CcAf1\",\n },\n },\n contracts: {\n tradingGatewayAddress: \"0xD3fecf5D39131e23b6B0f872cA0a21c8A5a30932\",\n },\n});\n\nexport const POLYESTER_TESTNET_ENVIRONMENT = createPolyesterEnvironment({\n name: \"polyester-testnet\",\n apiUrl: \"https://api.testnet.polyester.com\",\n websocketUrl: \"wss://api.testnet.polyester.com\",\n rpcUrl: \"https://rpc.polyester.live\",\n chain: {\n id: 888169,\n name: \"Polyester Chain Testnet\",\n nativeCurrency: {\n decimals: 18,\n name: \"POL\",\n symbol: \"POL\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.polyester.live\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Polyester Scan\",\n url: \"https://testnet.polyesterscan.com\",\n },\n },\n contracts: {\n multicall3: {\n address: \"0xfc9B0991DC84E419C9b164dE89795958a5B0A0cF\",\n blockCreated: 179823,\n },\n },\n },\n accountAbstraction: {\n bundlerUrl: \"https://bundler.polyester.live\",\n paymasterUrl: \"https://paymaster.polyester.live\",\n entryPoint: {\n address: \"0x35c524a72ffb4D348d616cDD340D176c8f3C8B2C\",\n version: \"0.7\",\n },\n safe: {\n version: \"1.4.1\",\n safeModuleSetupAddress: \"0xdA9510c95Ab50EAd5A3DD28FA6BACce497dCF1fB\",\n safe4337ModuleAddress: \"0xE278E4BCb71b095f7dAaa1bcEc1950696Fc40C74\",\n safeProxyFactoryAddress: \"0x2b8250158D58dD6D5e89313fa940586C9054A547\",\n safeSingletonAddress: \"0x6f00AB12B6A8aFf400F14f4Cd738549f0F53390d\",\n multiSendAddress: \"0xA38fEFA19ff5d8E3d988b2a0e6C8A2ae099fd97D\",\n multiSendCallOnlyAddress: \"0xE99b6c6d550B322347EeE11f4e8643377D8475A8\",\n },\n },\n contracts: {\n tradingGatewayAddress: \"0x20ef1BCeE69D73Ce1649E688dAA9A7AcF441f0EE\",\n },\n});\n"],"mappings":"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"}
|
|
@@ -23,8 +23,10 @@ type CreateWalletChallengeRequest = Message<"auth.v1.CreateWalletChallengeReques
|
|
|
23
23
|
*/
|
|
24
24
|
smartAccountAddress: string;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
* For
|
|
26
|
+
* Address whose signature authorizes the challenge and that is written into
|
|
27
|
+
* the EIP-4361 message. For LOGIN, this must be an EOA that controls the
|
|
28
|
+
* target smart account. For CREATE_SUBACCOUNT, this must equal
|
|
29
|
+
* smart_account_address.
|
|
28
30
|
*
|
|
29
31
|
* @generated from field: string signer_address = 2;
|
|
30
32
|
*/
|
|
@@ -88,8 +90,9 @@ type LoginWithWalletRequest = Message<"auth.v1.LoginWithWalletRequest"> & {
|
|
|
88
90
|
*/
|
|
89
91
|
smartAccountAddress: string;
|
|
90
92
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
+
* EOA signature over message using EIP-191 personal_sign semantics. A valid
|
|
94
|
+
* value is 65 bytes of hexadecimal with an optional 0x prefix. Requests are
|
|
95
|
+
* limited to 8192 characters.
|
|
93
96
|
*
|
|
94
97
|
* @generated from field: string signature = 3;
|
|
95
98
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_pb.d.ts","names":[],"sources":["../../../../src/gen/auth/v1/auth_pb.ts"],"mappings":";;;;;;;;;;cAea,mBAAmB;;;;;;;KASpB,+BAA+B;;;;;;EAMzC;;;;;;;EAQA
|
|
1
|
+
{"version":3,"file":"auth_pb.d.ts","names":[],"sources":["../../../../src/gen/auth/v1/auth_pb.ts"],"mappings":";;;;;;;;;;cAea,mBAAmB;;;;;;;KASpB,+BAA+B;;;;;;EAMzC;;;;;;;;;EAUA;;;;;;;EAQA;;;;;;EAOA,SAAS;;;;;;cAOE,oCAAoC,WAAW;;;;;;KAQhD,gCAAgC;;;;;;;EAO1C;;;;;;EAOA,YAAY;;;;;;cAOD,qCAAqC,WAAW;;;;;;;KASjD,yBAAyB;;;;;;;EAOnC;;;;;;;;EASA;;;;;;;EAQA;;;;;;;EAQA;;;;;;EAOA;;;;;;;EAQA;;;;;;cAOW,8BAA8B,WAAW;;;;;;;KAS1C,0BAA0B;;;;;;EAMpC;;;;;;EAOA,YAAY;;;;;;EAOZ;;;;;;EAOA;;;;;;EAOA,UAAU;;;;;;cAOC,+BAA+B,WAAW;;;;;;;KAS3C,YAAY;;;;;cAOX,iBAAiB,WAAW;;;;;;KAQ7B,aAAa;;;;;;EAMvB;;;;;;;;EASA;;;;;;EAOA;;;;;;;EAQA;;;;;;EAOA,UAAU;;;;;;cAOC,kBAAkB,WAAW;;;;;;KAQ9B,kBAAkB;;;;;;EAM5B,MAAM;;;;;;EAON;;;;;;cAOW,uBAAuB,WAAW;;;;;;KAQnC,qBAAqB;;;;;cAOpB,0BAA0B,WAAW;;;;;;;KAStC,sBAAsB;;;;;cAOrB,2BAA2B,WAAW;;;;;;aAQvC;;;;;;EAMV;;;;;;EAOA;;;;;;EAOA;;;;;cAMW,8BAA8B,QAAQ;;;;;;aAQvC;;;;;;EAMV;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;cAMW,qBAAqB,QAAQ;;;;;;cAQ7B,aAAa;;;;;;EAMxB;IACE;IACA,cAAc;IACd,eAAe;;;;;;;;EAQjB;IACE;IACA,cAAc;IACd,eAAe;;;;;;;;;;;EAWjB;IACE;IACA,cAAc;IACd,eAAe;;;;;;;EAOjB;IACE;IACA,cAAc;IACd,eAAe"}
|