@layr-labs/ecloud-sdk 0.2.2-dev → 0.3.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERSION +2 -2
- package/dist/billing.cjs +273 -4
- package/dist/billing.cjs.map +1 -1
- package/dist/billing.d.cts +1 -1
- package/dist/billing.d.ts +1 -1
- package/dist/billing.js +275 -4
- package/dist/billing.js.map +1 -1
- package/dist/browser.cjs +569 -173
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +53 -12
- package/dist/browser.d.ts +53 -12
- package/dist/browser.js +569 -173
- package/dist/browser.js.map +1 -1
- package/dist/{compute-BYhSs8en.d.ts → compute-BcJuIxc1.d.ts} +1 -1
- package/dist/{compute-Bpjb3hYD.d.cts → compute-oD9uqLtr.d.cts} +1 -1
- package/dist/compute.cjs +240 -154
- package/dist/compute.cjs.map +1 -1
- package/dist/compute.d.cts +2 -2
- package/dist/compute.d.ts +2 -2
- package/dist/compute.js +242 -154
- package/dist/compute.js.map +1 -1
- package/dist/{helpers-CQuBwQnu.d.ts → helpers-BNGcO-VX.d.cts} +249 -5
- package/dist/{helpers-CEvhJz7f.d.cts → helpers-Cp8qGRTb.d.ts} +249 -5
- package/dist/{index-DeQzn_yM.d.cts → index-5y9NG_Id.d.cts} +9 -1
- package/dist/{index-DeQzn_yM.d.ts → index-5y9NG_Id.d.ts} +9 -1
- package/dist/index.cjs +631 -214
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +633 -214
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a6 as EnvironmentConfig, ag as SubscriptionStatus, a5 as BillingEnvironmentConfig, ae as ProductID, ai as CreateSubscriptionOptions, aj as CreateSubscriptionResponse, ar as ProductSubscriptionResponse, G as GasEstimate, ab as Logger } from './index-
|
|
2
|
-
import { Address, Hex, WalletClient, PublicClient, Chain } from 'viem';
|
|
1
|
+
import { a6 as EnvironmentConfig, ag as SubscriptionStatus, a5 as BillingEnvironmentConfig, ae as ProductID, ai as CreateSubscriptionOptions, aj as CreateSubscriptionResponse, ar as ProductSubscriptionResponse, G as GasEstimate, ab as Logger } from './index-5y9NG_Id.cjs';
|
|
2
|
+
import { Address, Hex, WalletClient, PublicClient, SignAuthorizationReturnType, Chain } from 'viem';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Environment configuration for different networks
|
|
@@ -538,32 +538,273 @@ declare class UserApiClient {
|
|
|
538
538
|
getSiweSession(): Promise<SessionInfo>;
|
|
539
539
|
}
|
|
540
540
|
|
|
541
|
+
/**
|
|
542
|
+
* Billing API Session Management
|
|
543
|
+
*
|
|
544
|
+
* This module provides utilities for managing authentication sessions with the billing API
|
|
545
|
+
* using SIWE (Sign-In with Ethereum).
|
|
546
|
+
*
|
|
547
|
+
* The billing API now supports the same SIWE-based session authentication as the compute API,
|
|
548
|
+
* allowing users to sign once and authenticate to both APIs simultaneously.
|
|
549
|
+
*/
|
|
550
|
+
|
|
551
|
+
interface BillingApiConfig {
|
|
552
|
+
/** Base URL of the billing API (e.g., "https://billing.eigencloud.xyz") */
|
|
553
|
+
baseUrl: string;
|
|
554
|
+
}
|
|
555
|
+
interface BillingSessionInfo {
|
|
556
|
+
/** Whether the session is authenticated */
|
|
557
|
+
authenticated: boolean;
|
|
558
|
+
/** Authenticated wallet address (if authenticated) */
|
|
559
|
+
address?: Address;
|
|
560
|
+
/** Chain ID used for authentication (if authenticated) */
|
|
561
|
+
chainId?: number;
|
|
562
|
+
/** Unix timestamp when authentication occurred (if authenticated) */
|
|
563
|
+
authenticatedAt?: number;
|
|
564
|
+
}
|
|
565
|
+
interface BillingLoginResult {
|
|
566
|
+
/** Whether login was successful */
|
|
567
|
+
success: boolean;
|
|
568
|
+
/** Authenticated wallet address */
|
|
569
|
+
address: Address;
|
|
570
|
+
}
|
|
571
|
+
interface BillingLoginRequest {
|
|
572
|
+
/** SIWE message string */
|
|
573
|
+
message: string;
|
|
574
|
+
/** Hex-encoded signature (with or without 0x prefix) */
|
|
575
|
+
signature: Hex | string;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Error thrown when billing session operations fail
|
|
579
|
+
*/
|
|
580
|
+
declare class BillingSessionError extends Error {
|
|
581
|
+
readonly code: "NETWORK_ERROR" | "INVALID_SIGNATURE" | "INVALID_MESSAGE" | "SESSION_EXPIRED" | "UNAUTHORIZED" | "UNKNOWN";
|
|
582
|
+
readonly statusCode?: number | undefined;
|
|
583
|
+
constructor(message: string, code: "NETWORK_ERROR" | "INVALID_SIGNATURE" | "INVALID_MESSAGE" | "SESSION_EXPIRED" | "UNAUTHORIZED" | "UNKNOWN", statusCode?: number | undefined);
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Login to the billing API using SIWE
|
|
587
|
+
*
|
|
588
|
+
* This establishes a session with the billing API by verifying the SIWE message
|
|
589
|
+
* and signature. On success, a session cookie is set in the browser.
|
|
590
|
+
*
|
|
591
|
+
* The billing API accepts the same SIWE message format as the compute API,
|
|
592
|
+
* so users only need to sign once and can send the same message/signature
|
|
593
|
+
* to both APIs.
|
|
594
|
+
*
|
|
595
|
+
* @param config - Billing API configuration
|
|
596
|
+
* @param request - Login request containing SIWE message and signature
|
|
597
|
+
* @returns Login result with the authenticated address
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```typescript
|
|
601
|
+
* import { createSiweMessage, loginToBillingApi } from "@layr-labs/ecloud-sdk/browser";
|
|
602
|
+
*
|
|
603
|
+
* const { message } = createSiweMessage({
|
|
604
|
+
* address: userAddress,
|
|
605
|
+
* chainId: 11155111,
|
|
606
|
+
* domain: window.location.host,
|
|
607
|
+
* uri: window.location.origin,
|
|
608
|
+
* });
|
|
609
|
+
*
|
|
610
|
+
* const signature = await signMessageAsync({ message });
|
|
611
|
+
*
|
|
612
|
+
* // Can send to both APIs with the same message/signature
|
|
613
|
+
* const [computeResult, billingResult] = await Promise.all([
|
|
614
|
+
* loginToComputeApi({ baseUrl: computeApiUrl }, { message, signature }),
|
|
615
|
+
* loginToBillingApi({ baseUrl: billingApiUrl }, { message, signature }),
|
|
616
|
+
* ]);
|
|
617
|
+
* ```
|
|
618
|
+
*/
|
|
619
|
+
declare function loginToBillingApi(config: BillingApiConfig, request: BillingLoginRequest): Promise<BillingLoginResult>;
|
|
620
|
+
/**
|
|
621
|
+
* Get the current session status from the billing API
|
|
622
|
+
*
|
|
623
|
+
* @param config - Billing API configuration
|
|
624
|
+
* @returns Session information including authentication status and address
|
|
625
|
+
*
|
|
626
|
+
* @example
|
|
627
|
+
* ```typescript
|
|
628
|
+
* const session = await getBillingApiSession({ baseUrl: "https://billing.eigencloud.xyz" });
|
|
629
|
+
* if (session.authenticated) {
|
|
630
|
+
* console.log(`Logged in as ${session.address}`);
|
|
631
|
+
* }
|
|
632
|
+
* ```
|
|
633
|
+
*/
|
|
634
|
+
declare function getBillingApiSession(config: BillingApiConfig): Promise<BillingSessionInfo>;
|
|
635
|
+
/**
|
|
636
|
+
* Logout from the billing API
|
|
637
|
+
*
|
|
638
|
+
* This destroys the current session and clears the session cookie.
|
|
639
|
+
*
|
|
640
|
+
* @param config - Billing API configuration
|
|
641
|
+
*
|
|
642
|
+
* @example
|
|
643
|
+
* ```typescript
|
|
644
|
+
* await logoutFromBillingApi({ baseUrl: "https://billing.eigencloud.xyz" });
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
declare function logoutFromBillingApi(config: BillingApiConfig): Promise<void>;
|
|
648
|
+
/**
|
|
649
|
+
* Check if a billing session is still valid (not expired)
|
|
650
|
+
*
|
|
651
|
+
* This is a convenience function that checks the session status
|
|
652
|
+
* and returns a boolean.
|
|
653
|
+
*
|
|
654
|
+
* @param config - Billing API configuration
|
|
655
|
+
* @returns True if session is authenticated, false otherwise
|
|
656
|
+
*/
|
|
657
|
+
declare function isBillingSessionValid(config: BillingApiConfig): Promise<boolean>;
|
|
658
|
+
/**
|
|
659
|
+
* Login to both compute and billing APIs simultaneously
|
|
660
|
+
*
|
|
661
|
+
* This is a convenience function that sends the same SIWE message and signature
|
|
662
|
+
* to both APIs in parallel, establishing sessions with both services at once.
|
|
663
|
+
*
|
|
664
|
+
* @param computeConfig - Compute API configuration
|
|
665
|
+
* @param billingConfig - Billing API configuration
|
|
666
|
+
* @param request - Login request containing SIWE message and signature
|
|
667
|
+
* @returns Object containing login results for both APIs
|
|
668
|
+
*
|
|
669
|
+
* @example
|
|
670
|
+
* ```typescript
|
|
671
|
+
* import { createSiweMessage, loginToBothApis } from "@layr-labs/ecloud-sdk/browser";
|
|
672
|
+
*
|
|
673
|
+
* const { message } = createSiweMessage({
|
|
674
|
+
* address: userAddress,
|
|
675
|
+
* chainId: 11155111,
|
|
676
|
+
* domain: window.location.host,
|
|
677
|
+
* uri: window.location.origin,
|
|
678
|
+
* });
|
|
679
|
+
*
|
|
680
|
+
* const signature = await signMessageAsync({ message });
|
|
681
|
+
* const { compute, billing } = await loginToBothApis(
|
|
682
|
+
* { baseUrl: computeApiUrl },
|
|
683
|
+
* { baseUrl: billingApiUrl },
|
|
684
|
+
* { message, signature }
|
|
685
|
+
* );
|
|
686
|
+
* ```
|
|
687
|
+
*/
|
|
688
|
+
declare function loginToBothApis(computeConfig: {
|
|
689
|
+
baseUrl: string;
|
|
690
|
+
}, billingConfig: BillingApiConfig, request: BillingLoginRequest): Promise<{
|
|
691
|
+
compute: BillingLoginResult;
|
|
692
|
+
billing: BillingLoginResult;
|
|
693
|
+
}>;
|
|
694
|
+
/**
|
|
695
|
+
* Logout from both compute and billing APIs simultaneously
|
|
696
|
+
*
|
|
697
|
+
* @param computeConfig - Compute API configuration
|
|
698
|
+
* @param billingConfig - Billing API configuration
|
|
699
|
+
*
|
|
700
|
+
* @example
|
|
701
|
+
* ```typescript
|
|
702
|
+
* await logoutFromBothApis(
|
|
703
|
+
* { baseUrl: computeApiUrl },
|
|
704
|
+
* { baseUrl: billingApiUrl }
|
|
705
|
+
* );
|
|
706
|
+
* ```
|
|
707
|
+
*/
|
|
708
|
+
declare function logoutFromBothApis(computeConfig: {
|
|
709
|
+
baseUrl: string;
|
|
710
|
+
}, billingConfig: BillingApiConfig): Promise<void>;
|
|
711
|
+
|
|
541
712
|
/**
|
|
542
713
|
* BillingAPI Client to manage product subscriptions
|
|
543
714
|
* Standalone client - does not depend on chain infrastructure
|
|
544
715
|
*
|
|
545
716
|
* Accepts viem's WalletClient which abstracts over both local accounts
|
|
546
717
|
* (privateKeyToAccount) and external signers (MetaMask, etc.).
|
|
718
|
+
*
|
|
719
|
+
* Supports two authentication modes:
|
|
720
|
+
* 1. EIP-712 signature auth (default) - signs each request with typed data
|
|
721
|
+
* 2. Session auth (optional) - uses SIWE session cookies
|
|
547
722
|
*/
|
|
548
723
|
|
|
724
|
+
interface BillingApiClientOptions {
|
|
725
|
+
/**
|
|
726
|
+
* Use session-based authentication instead of per-request signatures.
|
|
727
|
+
* When true, the client will rely on session cookies set by SIWE login.
|
|
728
|
+
* When false (default), uses EIP-712 typed data signatures for each request.
|
|
729
|
+
*/
|
|
730
|
+
useSession?: boolean;
|
|
731
|
+
}
|
|
549
732
|
/**
|
|
550
733
|
* BillingAPI Client for managing product subscriptions.
|
|
551
734
|
*/
|
|
552
735
|
declare class BillingApiClient {
|
|
553
736
|
private readonly config;
|
|
554
737
|
private readonly walletClient;
|
|
555
|
-
|
|
738
|
+
private readonly options;
|
|
739
|
+
private readonly useSession;
|
|
740
|
+
constructor(config: BillingEnvironmentConfig, walletClient: WalletClient | null, options?: BillingApiClientOptions);
|
|
556
741
|
/**
|
|
557
742
|
* Get the address of the connected wallet
|
|
743
|
+
* Returns undefined if using session auth without a wallet client
|
|
558
744
|
*/
|
|
559
|
-
get address(): Address;
|
|
745
|
+
get address(): Address | undefined;
|
|
746
|
+
/**
|
|
747
|
+
* Get the base URL of the billing API
|
|
748
|
+
*/
|
|
749
|
+
get baseUrl(): string;
|
|
750
|
+
/**
|
|
751
|
+
* Login to the billing API using SIWE
|
|
752
|
+
*
|
|
753
|
+
* This establishes a session with the billing API by verifying the SIWE message
|
|
754
|
+
* and signature. On success, a session cookie is set in the browser.
|
|
755
|
+
*
|
|
756
|
+
* @param request - Login request containing SIWE message and signature
|
|
757
|
+
* @returns Login result with the authenticated address
|
|
758
|
+
*
|
|
759
|
+
* @example
|
|
760
|
+
* ```typescript
|
|
761
|
+
* const { message } = createSiweMessage({
|
|
762
|
+
* address: userAddress,
|
|
763
|
+
* chainId: 11155111,
|
|
764
|
+
* domain: window.location.host,
|
|
765
|
+
* uri: window.location.origin,
|
|
766
|
+
* });
|
|
767
|
+
*
|
|
768
|
+
* const signature = await signMessageAsync({ message });
|
|
769
|
+
* const result = await billingClient.siweLogin({ message, signature });
|
|
770
|
+
* ```
|
|
771
|
+
*/
|
|
772
|
+
siweLogin(request: BillingLoginRequest): Promise<BillingLoginResult>;
|
|
773
|
+
/**
|
|
774
|
+
* Logout from the billing API
|
|
775
|
+
*
|
|
776
|
+
* This destroys the current session and clears the session cookie.
|
|
777
|
+
*/
|
|
778
|
+
siweLogout(): Promise<void>;
|
|
779
|
+
/**
|
|
780
|
+
* Get the current session status from the billing API
|
|
781
|
+
*
|
|
782
|
+
* @returns Session information including authentication status and address
|
|
783
|
+
*/
|
|
784
|
+
getSession(): Promise<BillingSessionInfo>;
|
|
785
|
+
/**
|
|
786
|
+
* Check if there is a valid session
|
|
787
|
+
*
|
|
788
|
+
* @returns True if session is authenticated, false otherwise
|
|
789
|
+
*/
|
|
790
|
+
isSessionValid(): Promise<boolean>;
|
|
560
791
|
createSubscription(productId?: ProductID, options?: CreateSubscriptionOptions): Promise<CreateSubscriptionResponse>;
|
|
561
792
|
getSubscription(productId?: ProductID): Promise<ProductSubscriptionResponse>;
|
|
562
793
|
cancelSubscription(productId?: ProductID): Promise<void>;
|
|
563
794
|
/**
|
|
564
795
|
* Make an authenticated request to the billing API
|
|
796
|
+
*
|
|
797
|
+
* Uses session auth if useSession is true, otherwise uses EIP-712 signature auth.
|
|
565
798
|
*/
|
|
566
799
|
private makeAuthenticatedRequest;
|
|
800
|
+
/**
|
|
801
|
+
* Make a request using session-based authentication (cookies)
|
|
802
|
+
*/
|
|
803
|
+
private makeSessionAuthenticatedRequest;
|
|
804
|
+
/**
|
|
805
|
+
* Make a request using EIP-712 signature authentication
|
|
806
|
+
*/
|
|
807
|
+
private makeSignatureAuthenticatedRequest;
|
|
567
808
|
}
|
|
568
809
|
|
|
569
810
|
/**
|
|
@@ -584,6 +825,7 @@ interface EstimateBatchGasOptions {
|
|
|
584
825
|
publicClient: PublicClient;
|
|
585
826
|
account: Address;
|
|
586
827
|
executions: Execution[];
|
|
828
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
587
829
|
}
|
|
588
830
|
/**
|
|
589
831
|
* Estimate gas cost for a batch transaction
|
|
@@ -599,6 +841,8 @@ interface ExecuteBatchOptions {
|
|
|
599
841
|
pendingMessage: string;
|
|
600
842
|
/** Optional gas params from estimation */
|
|
601
843
|
gas?: GasEstimate;
|
|
844
|
+
/** Optional pre-created authorization list (skips internal creation if provided) */
|
|
845
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
602
846
|
}
|
|
603
847
|
/**
|
|
604
848
|
* Check if account is delegated to ERC-7702 delegator
|
|
@@ -739,4 +983,4 @@ declare function addHexPrefix(value: string): Hex;
|
|
|
739
983
|
*/
|
|
740
984
|
declare function stripHexPrefix(value: string): string;
|
|
741
985
|
|
|
742
|
-
export {
|
|
986
|
+
export { loginToComputeApi as $, type LogsParams as A, isSubscriptionActive as B, type ComputeApiConfig as C, generateNewPrivateKey as D, type UserApiClientOptions as E, type AppInfo as F, type GeneratedKey as G, type AppProfileInfo as H, type AppMetrics as I, type AppInfoResponse as J, BillingApiClient as K, type LogVisibility as L, type BillingApiClientOptions as M, estimateBatchGas as N, executeBatch as O, checkERC7702Delegation as P, type EstimateBatchGasOptions as Q, type ExecuteBatchOptions as R, type SessionInfo as S, type Execution as T, UserApiClient as U, createSiweMessage as V, parseSiweMessage as W, generateNonce as X, isSiweMessageExpired as Y, isSiweMessageNotYetValid as Z, type SiweMessageResult as _, SessionError as a, logoutFromComputeApi as a0, getComputeApiSession as a1, isSessionValid as a2, type LoginResult as a3, type LoginRequest as a4, loginToBillingApi as a5, logoutFromBillingApi as a6, getBillingApiSession as a7, isBillingSessionValid as a8, loginToBothApis as a9, logoutFromBothApis as aa, BillingSessionError as ab, type BillingApiConfig as ac, type BillingSessionInfo as ad, type BillingLoginResult as ae, type BillingLoginRequest as af, getChainFromID as ag, addHexPrefix as ah, stripHexPrefix as ai, type ResourceUsageMonitoring as aj, createClients as ak, type AppRelease as al, type AppReleaseBuild as am, type AppResponse as an, validateFilePath as ao, assertValidFilePath as ap, validateImagePath as aq, validateResourceUsageMonitoring as ar, type DeployParams as as, validateDeployParams as at, type UpgradeParams as au, validateUpgradeParams as av, type SiweMessageParams as b, getBillingEnvironmentConfig as c, getAvailableEnvironments as d, getBuildType as e, isMainnet as f, getEnvironmentConfig as g, validateImageReference as h, isEnvironmentAvailable as i, assertValidImageReference as j, extractAppNameFromImage as k, validateInstanceTypeSKU as l, validatePrivateKeyFormat as m, assertValidPrivateKey as n, validateURL as o, validateXURL as p, validateDescription as q, validateAppID as r, validateLogVisibility as s, sanitizeString as t, sanitizeURL as u, validateAppName as v, sanitizeXURL as w, validateCreateAppParams as x, validateLogsParams as y, type CreateAppParams as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a6 as EnvironmentConfig, ag as SubscriptionStatus, a5 as BillingEnvironmentConfig, ae as ProductID, ai as CreateSubscriptionOptions, aj as CreateSubscriptionResponse, ar as ProductSubscriptionResponse, G as GasEstimate, ab as Logger } from './index-
|
|
2
|
-
import { Address, Hex, WalletClient, PublicClient, Chain } from 'viem';
|
|
1
|
+
import { a6 as EnvironmentConfig, ag as SubscriptionStatus, a5 as BillingEnvironmentConfig, ae as ProductID, ai as CreateSubscriptionOptions, aj as CreateSubscriptionResponse, ar as ProductSubscriptionResponse, G as GasEstimate, ab as Logger } from './index-5y9NG_Id.js';
|
|
2
|
+
import { Address, Hex, WalletClient, PublicClient, SignAuthorizationReturnType, Chain } from 'viem';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Environment configuration for different networks
|
|
@@ -538,32 +538,273 @@ declare class UserApiClient {
|
|
|
538
538
|
getSiweSession(): Promise<SessionInfo>;
|
|
539
539
|
}
|
|
540
540
|
|
|
541
|
+
/**
|
|
542
|
+
* Billing API Session Management
|
|
543
|
+
*
|
|
544
|
+
* This module provides utilities for managing authentication sessions with the billing API
|
|
545
|
+
* using SIWE (Sign-In with Ethereum).
|
|
546
|
+
*
|
|
547
|
+
* The billing API now supports the same SIWE-based session authentication as the compute API,
|
|
548
|
+
* allowing users to sign once and authenticate to both APIs simultaneously.
|
|
549
|
+
*/
|
|
550
|
+
|
|
551
|
+
interface BillingApiConfig {
|
|
552
|
+
/** Base URL of the billing API (e.g., "https://billing.eigencloud.xyz") */
|
|
553
|
+
baseUrl: string;
|
|
554
|
+
}
|
|
555
|
+
interface BillingSessionInfo {
|
|
556
|
+
/** Whether the session is authenticated */
|
|
557
|
+
authenticated: boolean;
|
|
558
|
+
/** Authenticated wallet address (if authenticated) */
|
|
559
|
+
address?: Address;
|
|
560
|
+
/** Chain ID used for authentication (if authenticated) */
|
|
561
|
+
chainId?: number;
|
|
562
|
+
/** Unix timestamp when authentication occurred (if authenticated) */
|
|
563
|
+
authenticatedAt?: number;
|
|
564
|
+
}
|
|
565
|
+
interface BillingLoginResult {
|
|
566
|
+
/** Whether login was successful */
|
|
567
|
+
success: boolean;
|
|
568
|
+
/** Authenticated wallet address */
|
|
569
|
+
address: Address;
|
|
570
|
+
}
|
|
571
|
+
interface BillingLoginRequest {
|
|
572
|
+
/** SIWE message string */
|
|
573
|
+
message: string;
|
|
574
|
+
/** Hex-encoded signature (with or without 0x prefix) */
|
|
575
|
+
signature: Hex | string;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Error thrown when billing session operations fail
|
|
579
|
+
*/
|
|
580
|
+
declare class BillingSessionError extends Error {
|
|
581
|
+
readonly code: "NETWORK_ERROR" | "INVALID_SIGNATURE" | "INVALID_MESSAGE" | "SESSION_EXPIRED" | "UNAUTHORIZED" | "UNKNOWN";
|
|
582
|
+
readonly statusCode?: number | undefined;
|
|
583
|
+
constructor(message: string, code: "NETWORK_ERROR" | "INVALID_SIGNATURE" | "INVALID_MESSAGE" | "SESSION_EXPIRED" | "UNAUTHORIZED" | "UNKNOWN", statusCode?: number | undefined);
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Login to the billing API using SIWE
|
|
587
|
+
*
|
|
588
|
+
* This establishes a session with the billing API by verifying the SIWE message
|
|
589
|
+
* and signature. On success, a session cookie is set in the browser.
|
|
590
|
+
*
|
|
591
|
+
* The billing API accepts the same SIWE message format as the compute API,
|
|
592
|
+
* so users only need to sign once and can send the same message/signature
|
|
593
|
+
* to both APIs.
|
|
594
|
+
*
|
|
595
|
+
* @param config - Billing API configuration
|
|
596
|
+
* @param request - Login request containing SIWE message and signature
|
|
597
|
+
* @returns Login result with the authenticated address
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```typescript
|
|
601
|
+
* import { createSiweMessage, loginToBillingApi } from "@layr-labs/ecloud-sdk/browser";
|
|
602
|
+
*
|
|
603
|
+
* const { message } = createSiweMessage({
|
|
604
|
+
* address: userAddress,
|
|
605
|
+
* chainId: 11155111,
|
|
606
|
+
* domain: window.location.host,
|
|
607
|
+
* uri: window.location.origin,
|
|
608
|
+
* });
|
|
609
|
+
*
|
|
610
|
+
* const signature = await signMessageAsync({ message });
|
|
611
|
+
*
|
|
612
|
+
* // Can send to both APIs with the same message/signature
|
|
613
|
+
* const [computeResult, billingResult] = await Promise.all([
|
|
614
|
+
* loginToComputeApi({ baseUrl: computeApiUrl }, { message, signature }),
|
|
615
|
+
* loginToBillingApi({ baseUrl: billingApiUrl }, { message, signature }),
|
|
616
|
+
* ]);
|
|
617
|
+
* ```
|
|
618
|
+
*/
|
|
619
|
+
declare function loginToBillingApi(config: BillingApiConfig, request: BillingLoginRequest): Promise<BillingLoginResult>;
|
|
620
|
+
/**
|
|
621
|
+
* Get the current session status from the billing API
|
|
622
|
+
*
|
|
623
|
+
* @param config - Billing API configuration
|
|
624
|
+
* @returns Session information including authentication status and address
|
|
625
|
+
*
|
|
626
|
+
* @example
|
|
627
|
+
* ```typescript
|
|
628
|
+
* const session = await getBillingApiSession({ baseUrl: "https://billing.eigencloud.xyz" });
|
|
629
|
+
* if (session.authenticated) {
|
|
630
|
+
* console.log(`Logged in as ${session.address}`);
|
|
631
|
+
* }
|
|
632
|
+
* ```
|
|
633
|
+
*/
|
|
634
|
+
declare function getBillingApiSession(config: BillingApiConfig): Promise<BillingSessionInfo>;
|
|
635
|
+
/**
|
|
636
|
+
* Logout from the billing API
|
|
637
|
+
*
|
|
638
|
+
* This destroys the current session and clears the session cookie.
|
|
639
|
+
*
|
|
640
|
+
* @param config - Billing API configuration
|
|
641
|
+
*
|
|
642
|
+
* @example
|
|
643
|
+
* ```typescript
|
|
644
|
+
* await logoutFromBillingApi({ baseUrl: "https://billing.eigencloud.xyz" });
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
declare function logoutFromBillingApi(config: BillingApiConfig): Promise<void>;
|
|
648
|
+
/**
|
|
649
|
+
* Check if a billing session is still valid (not expired)
|
|
650
|
+
*
|
|
651
|
+
* This is a convenience function that checks the session status
|
|
652
|
+
* and returns a boolean.
|
|
653
|
+
*
|
|
654
|
+
* @param config - Billing API configuration
|
|
655
|
+
* @returns True if session is authenticated, false otherwise
|
|
656
|
+
*/
|
|
657
|
+
declare function isBillingSessionValid(config: BillingApiConfig): Promise<boolean>;
|
|
658
|
+
/**
|
|
659
|
+
* Login to both compute and billing APIs simultaneously
|
|
660
|
+
*
|
|
661
|
+
* This is a convenience function that sends the same SIWE message and signature
|
|
662
|
+
* to both APIs in parallel, establishing sessions with both services at once.
|
|
663
|
+
*
|
|
664
|
+
* @param computeConfig - Compute API configuration
|
|
665
|
+
* @param billingConfig - Billing API configuration
|
|
666
|
+
* @param request - Login request containing SIWE message and signature
|
|
667
|
+
* @returns Object containing login results for both APIs
|
|
668
|
+
*
|
|
669
|
+
* @example
|
|
670
|
+
* ```typescript
|
|
671
|
+
* import { createSiweMessage, loginToBothApis } from "@layr-labs/ecloud-sdk/browser";
|
|
672
|
+
*
|
|
673
|
+
* const { message } = createSiweMessage({
|
|
674
|
+
* address: userAddress,
|
|
675
|
+
* chainId: 11155111,
|
|
676
|
+
* domain: window.location.host,
|
|
677
|
+
* uri: window.location.origin,
|
|
678
|
+
* });
|
|
679
|
+
*
|
|
680
|
+
* const signature = await signMessageAsync({ message });
|
|
681
|
+
* const { compute, billing } = await loginToBothApis(
|
|
682
|
+
* { baseUrl: computeApiUrl },
|
|
683
|
+
* { baseUrl: billingApiUrl },
|
|
684
|
+
* { message, signature }
|
|
685
|
+
* );
|
|
686
|
+
* ```
|
|
687
|
+
*/
|
|
688
|
+
declare function loginToBothApis(computeConfig: {
|
|
689
|
+
baseUrl: string;
|
|
690
|
+
}, billingConfig: BillingApiConfig, request: BillingLoginRequest): Promise<{
|
|
691
|
+
compute: BillingLoginResult;
|
|
692
|
+
billing: BillingLoginResult;
|
|
693
|
+
}>;
|
|
694
|
+
/**
|
|
695
|
+
* Logout from both compute and billing APIs simultaneously
|
|
696
|
+
*
|
|
697
|
+
* @param computeConfig - Compute API configuration
|
|
698
|
+
* @param billingConfig - Billing API configuration
|
|
699
|
+
*
|
|
700
|
+
* @example
|
|
701
|
+
* ```typescript
|
|
702
|
+
* await logoutFromBothApis(
|
|
703
|
+
* { baseUrl: computeApiUrl },
|
|
704
|
+
* { baseUrl: billingApiUrl }
|
|
705
|
+
* );
|
|
706
|
+
* ```
|
|
707
|
+
*/
|
|
708
|
+
declare function logoutFromBothApis(computeConfig: {
|
|
709
|
+
baseUrl: string;
|
|
710
|
+
}, billingConfig: BillingApiConfig): Promise<void>;
|
|
711
|
+
|
|
541
712
|
/**
|
|
542
713
|
* BillingAPI Client to manage product subscriptions
|
|
543
714
|
* Standalone client - does not depend on chain infrastructure
|
|
544
715
|
*
|
|
545
716
|
* Accepts viem's WalletClient which abstracts over both local accounts
|
|
546
717
|
* (privateKeyToAccount) and external signers (MetaMask, etc.).
|
|
718
|
+
*
|
|
719
|
+
* Supports two authentication modes:
|
|
720
|
+
* 1. EIP-712 signature auth (default) - signs each request with typed data
|
|
721
|
+
* 2. Session auth (optional) - uses SIWE session cookies
|
|
547
722
|
*/
|
|
548
723
|
|
|
724
|
+
interface BillingApiClientOptions {
|
|
725
|
+
/**
|
|
726
|
+
* Use session-based authentication instead of per-request signatures.
|
|
727
|
+
* When true, the client will rely on session cookies set by SIWE login.
|
|
728
|
+
* When false (default), uses EIP-712 typed data signatures for each request.
|
|
729
|
+
*/
|
|
730
|
+
useSession?: boolean;
|
|
731
|
+
}
|
|
549
732
|
/**
|
|
550
733
|
* BillingAPI Client for managing product subscriptions.
|
|
551
734
|
*/
|
|
552
735
|
declare class BillingApiClient {
|
|
553
736
|
private readonly config;
|
|
554
737
|
private readonly walletClient;
|
|
555
|
-
|
|
738
|
+
private readonly options;
|
|
739
|
+
private readonly useSession;
|
|
740
|
+
constructor(config: BillingEnvironmentConfig, walletClient: WalletClient | null, options?: BillingApiClientOptions);
|
|
556
741
|
/**
|
|
557
742
|
* Get the address of the connected wallet
|
|
743
|
+
* Returns undefined if using session auth without a wallet client
|
|
558
744
|
*/
|
|
559
|
-
get address(): Address;
|
|
745
|
+
get address(): Address | undefined;
|
|
746
|
+
/**
|
|
747
|
+
* Get the base URL of the billing API
|
|
748
|
+
*/
|
|
749
|
+
get baseUrl(): string;
|
|
750
|
+
/**
|
|
751
|
+
* Login to the billing API using SIWE
|
|
752
|
+
*
|
|
753
|
+
* This establishes a session with the billing API by verifying the SIWE message
|
|
754
|
+
* and signature. On success, a session cookie is set in the browser.
|
|
755
|
+
*
|
|
756
|
+
* @param request - Login request containing SIWE message and signature
|
|
757
|
+
* @returns Login result with the authenticated address
|
|
758
|
+
*
|
|
759
|
+
* @example
|
|
760
|
+
* ```typescript
|
|
761
|
+
* const { message } = createSiweMessage({
|
|
762
|
+
* address: userAddress,
|
|
763
|
+
* chainId: 11155111,
|
|
764
|
+
* domain: window.location.host,
|
|
765
|
+
* uri: window.location.origin,
|
|
766
|
+
* });
|
|
767
|
+
*
|
|
768
|
+
* const signature = await signMessageAsync({ message });
|
|
769
|
+
* const result = await billingClient.siweLogin({ message, signature });
|
|
770
|
+
* ```
|
|
771
|
+
*/
|
|
772
|
+
siweLogin(request: BillingLoginRequest): Promise<BillingLoginResult>;
|
|
773
|
+
/**
|
|
774
|
+
* Logout from the billing API
|
|
775
|
+
*
|
|
776
|
+
* This destroys the current session and clears the session cookie.
|
|
777
|
+
*/
|
|
778
|
+
siweLogout(): Promise<void>;
|
|
779
|
+
/**
|
|
780
|
+
* Get the current session status from the billing API
|
|
781
|
+
*
|
|
782
|
+
* @returns Session information including authentication status and address
|
|
783
|
+
*/
|
|
784
|
+
getSession(): Promise<BillingSessionInfo>;
|
|
785
|
+
/**
|
|
786
|
+
* Check if there is a valid session
|
|
787
|
+
*
|
|
788
|
+
* @returns True if session is authenticated, false otherwise
|
|
789
|
+
*/
|
|
790
|
+
isSessionValid(): Promise<boolean>;
|
|
560
791
|
createSubscription(productId?: ProductID, options?: CreateSubscriptionOptions): Promise<CreateSubscriptionResponse>;
|
|
561
792
|
getSubscription(productId?: ProductID): Promise<ProductSubscriptionResponse>;
|
|
562
793
|
cancelSubscription(productId?: ProductID): Promise<void>;
|
|
563
794
|
/**
|
|
564
795
|
* Make an authenticated request to the billing API
|
|
796
|
+
*
|
|
797
|
+
* Uses session auth if useSession is true, otherwise uses EIP-712 signature auth.
|
|
565
798
|
*/
|
|
566
799
|
private makeAuthenticatedRequest;
|
|
800
|
+
/**
|
|
801
|
+
* Make a request using session-based authentication (cookies)
|
|
802
|
+
*/
|
|
803
|
+
private makeSessionAuthenticatedRequest;
|
|
804
|
+
/**
|
|
805
|
+
* Make a request using EIP-712 signature authentication
|
|
806
|
+
*/
|
|
807
|
+
private makeSignatureAuthenticatedRequest;
|
|
567
808
|
}
|
|
568
809
|
|
|
569
810
|
/**
|
|
@@ -584,6 +825,7 @@ interface EstimateBatchGasOptions {
|
|
|
584
825
|
publicClient: PublicClient;
|
|
585
826
|
account: Address;
|
|
586
827
|
executions: Execution[];
|
|
828
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
587
829
|
}
|
|
588
830
|
/**
|
|
589
831
|
* Estimate gas cost for a batch transaction
|
|
@@ -599,6 +841,8 @@ interface ExecuteBatchOptions {
|
|
|
599
841
|
pendingMessage: string;
|
|
600
842
|
/** Optional gas params from estimation */
|
|
601
843
|
gas?: GasEstimate;
|
|
844
|
+
/** Optional pre-created authorization list (skips internal creation if provided) */
|
|
845
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
602
846
|
}
|
|
603
847
|
/**
|
|
604
848
|
* Check if account is delegated to ERC-7702 delegator
|
|
@@ -739,4 +983,4 @@ declare function addHexPrefix(value: string): Hex;
|
|
|
739
983
|
*/
|
|
740
984
|
declare function stripHexPrefix(value: string): string;
|
|
741
985
|
|
|
742
|
-
export {
|
|
986
|
+
export { loginToComputeApi as $, type LogsParams as A, isSubscriptionActive as B, type ComputeApiConfig as C, generateNewPrivateKey as D, type UserApiClientOptions as E, type AppInfo as F, type GeneratedKey as G, type AppProfileInfo as H, type AppMetrics as I, type AppInfoResponse as J, BillingApiClient as K, type LogVisibility as L, type BillingApiClientOptions as M, estimateBatchGas as N, executeBatch as O, checkERC7702Delegation as P, type EstimateBatchGasOptions as Q, type ExecuteBatchOptions as R, type SessionInfo as S, type Execution as T, UserApiClient as U, createSiweMessage as V, parseSiweMessage as W, generateNonce as X, isSiweMessageExpired as Y, isSiweMessageNotYetValid as Z, type SiweMessageResult as _, SessionError as a, logoutFromComputeApi as a0, getComputeApiSession as a1, isSessionValid as a2, type LoginResult as a3, type LoginRequest as a4, loginToBillingApi as a5, logoutFromBillingApi as a6, getBillingApiSession as a7, isBillingSessionValid as a8, loginToBothApis as a9, logoutFromBothApis as aa, BillingSessionError as ab, type BillingApiConfig as ac, type BillingSessionInfo as ad, type BillingLoginResult as ae, type BillingLoginRequest as af, getChainFromID as ag, addHexPrefix as ah, stripHexPrefix as ai, type ResourceUsageMonitoring as aj, createClients as ak, type AppRelease as al, type AppReleaseBuild as am, type AppResponse as an, validateFilePath as ao, assertValidFilePath as ap, validateImagePath as aq, validateResourceUsageMonitoring as ar, type DeployParams as as, validateDeployParams as at, type UpgradeParams as au, validateUpgradeParams as av, type SiweMessageParams as b, getBillingEnvironmentConfig as c, getAvailableEnvironments as d, getBuildType as e, isMainnet as f, getEnvironmentConfig as g, validateImageReference as h, isEnvironmentAvailable as i, assertValidImageReference as j, extractAppNameFromImage as k, validateInstanceTypeSKU as l, validatePrivateKeyFormat as m, assertValidPrivateKey as n, validateURL as o, validateXURL as p, validateDescription as q, validateAppID as r, validateLogVisibility as s, sanitizeString as t, sanitizeURL as u, validateAppName as v, sanitizeXURL as w, validateCreateAppParams as x, validateLogsParams as y, type CreateAppParams as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PublicClient, Address, Hex, WalletClient } from 'viem';
|
|
1
|
+
import { PublicClient, Address, Hex, WalletClient, SignAuthorizationReturnType } from 'viem';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Contract interactions
|
|
@@ -503,6 +503,8 @@ interface PreparedDeployData {
|
|
|
503
503
|
value: bigint;
|
|
504
504
|
callData: Hex;
|
|
505
505
|
}>;
|
|
506
|
+
/** Pre-created authorization list for gas estimation accuracy (optional) */
|
|
507
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
506
508
|
}
|
|
507
509
|
/** Data-only batch for upgrade (clients provided by module) */
|
|
508
510
|
interface PreparedUpgradeData {
|
|
@@ -514,6 +516,8 @@ interface PreparedUpgradeData {
|
|
|
514
516
|
value: bigint;
|
|
515
517
|
callData: Hex;
|
|
516
518
|
}>;
|
|
519
|
+
/** Pre-created authorization list for gas estimation accuracy (optional) */
|
|
520
|
+
authorizationList?: SignAuthorizationReturnType[];
|
|
517
521
|
}
|
|
518
522
|
/** Prepared deployment ready for execution */
|
|
519
523
|
interface PreparedDeploy {
|
|
@@ -708,6 +712,10 @@ interface ProductSubscriptionResponse {
|
|
|
708
712
|
}
|
|
709
713
|
interface SubscriptionOpts {
|
|
710
714
|
productId?: ProductID;
|
|
715
|
+
/** URL to redirect to after successful checkout */
|
|
716
|
+
successUrl?: string;
|
|
717
|
+
/** URL to redirect to if checkout is canceled */
|
|
718
|
+
cancelUrl?: string;
|
|
711
719
|
}
|
|
712
720
|
interface BillingEnvironmentConfig {
|
|
713
721
|
billingApiServerURL: string;
|