zksync-sso 0.0.0-beta.1 → 0.0.0-beta.2
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/.npmignore +7 -0
- package/README.md +106 -2
- package/dist/_cjs/abi/Factory.js +40 -1
- package/dist/_cjs/abi/Factory.js.map +1 -1
- package/dist/_cjs/client/actions/account.js +1 -1
- package/dist/_cjs/client/actions/account.js.map +1 -1
- package/dist/_cjs/client/actions/passkey.js +2 -0
- package/dist/_cjs/client/actions/passkey.js.map +1 -1
- package/dist/_cjs/client/actions/sendEip712Transaction.js +45 -0
- package/dist/_cjs/client/actions/sendEip712Transaction.js.map +1 -0
- package/dist/_cjs/client/clients/session.js +20 -9
- package/dist/_cjs/client/clients/session.js.map +1 -1
- package/dist/_cjs/client/decorators/publicActionsRewrite.js +46 -0
- package/dist/_cjs/client/decorators/publicActionsRewrite.js.map +1 -0
- package/dist/_cjs/client/decorators/session_wallet.js +18 -11
- package/dist/_cjs/client/decorators/session_wallet.js.map +1 -1
- package/dist/_cjs/client/smart-account.js +0 -1
- package/dist/_cjs/client/smart-account.js.map +1 -1
- package/dist/_cjs/client-auth-server/Signer.js +9 -0
- package/dist/_cjs/client-auth-server/Signer.js.map +1 -1
- package/dist/_cjs/client-auth-server/WalletProvider.js +3 -0
- package/dist/_cjs/client-auth-server/WalletProvider.js.map +1 -1
- package/dist/_cjs/client-auth-server/session.js +3 -3
- package/dist/_cjs/client-auth-server/session.js.map +1 -1
- package/dist/_cjs/connector/index.js +15 -8
- package/dist/_cjs/connector/index.js.map +1 -1
- package/dist/_cjs/errors/errors.js +2 -1
- package/dist/_cjs/errors/errors.js.map +1 -1
- package/dist/_esm/abi/Factory.js +40 -1
- package/dist/_esm/abi/Factory.js.map +1 -1
- package/dist/_esm/client/actions/account.js +1 -1
- package/dist/_esm/client/actions/account.js.map +1 -1
- package/dist/_esm/client/actions/passkey.js +2 -0
- package/dist/_esm/client/actions/passkey.js.map +1 -1
- package/dist/_esm/client/actions/sendEip712Transaction.js +93 -0
- package/dist/_esm/client/actions/sendEip712Transaction.js.map +1 -0
- package/dist/_esm/client/clients/session.js +18 -9
- package/dist/_esm/client/clients/session.js.map +1 -1
- package/dist/_esm/client/decorators/publicActionsRewrite.js +43 -0
- package/dist/_esm/client/decorators/publicActionsRewrite.js.map +1 -0
- package/dist/_esm/client/decorators/session_wallet.js +21 -25
- package/dist/_esm/client/decorators/session_wallet.js.map +1 -1
- package/dist/_esm/client/smart-account.js +0 -1
- package/dist/_esm/client/smart-account.js.map +1 -1
- package/dist/_esm/client-auth-server/Signer.js +9 -0
- package/dist/_esm/client-auth-server/Signer.js.map +1 -1
- package/dist/_esm/client-auth-server/WalletProvider.js +3 -0
- package/dist/_esm/client-auth-server/WalletProvider.js.map +1 -1
- package/dist/_esm/client-auth-server/session.js +4 -4
- package/dist/_esm/client-auth-server/session.js.map +1 -1
- package/dist/_esm/connector/index.js +15 -8
- package/dist/_esm/connector/index.js.map +1 -1
- package/dist/_esm/errors/errors.js +1 -1
- package/dist/_esm/errors/errors.js.map +1 -1
- package/dist/_types/abi/Factory.d.ts +31 -1
- package/dist/_types/abi/Factory.d.ts.map +1 -1
- package/dist/_types/client/actions/passkey.d.ts.map +1 -1
- package/dist/_types/client/actions/sendEip712Transaction.d.ts +60 -0
- package/dist/_types/client/actions/sendEip712Transaction.d.ts.map +1 -0
- package/dist/_types/client/clients/session.d.ts +5 -0
- package/dist/_types/client/clients/session.d.ts.map +1 -1
- package/dist/_types/client/decorators/publicActionsRewrite.d.ts +4 -0
- package/dist/_types/client/decorators/publicActionsRewrite.d.ts.map +1 -0
- package/dist/_types/client/decorators/session_wallet.d.ts +2 -2
- package/dist/_types/client/decorators/session_wallet.d.ts.map +1 -1
- package/dist/_types/client/smart-account.d.ts.map +1 -1
- package/dist/_types/client-auth-server/Signer.d.ts +1070 -1
- package/dist/_types/client-auth-server/Signer.d.ts.map +1 -1
- package/dist/_types/client-auth-server/WalletProvider.d.ts +1064 -0
- package/dist/_types/client-auth-server/WalletProvider.d.ts.map +1 -1
- package/dist/_types/client-auth-server/interface.d.ts +4 -0
- package/dist/_types/client-auth-server/interface.d.ts.map +1 -1
- package/dist/_types/client-auth-server/session.d.ts.map +1 -1
- package/dist/_types/connector/index.d.ts.map +1 -1
- package/dist/_types/errors/errors.d.ts +1 -1
- package/dist/_types/errors/errors.d.ts.map +1 -1
- package/package.json +2 -2
- package/prepare-package.mjs +2 -6
- package/src/abi/Factory.ts +40 -1
- package/src/client/actions/account.ts +1 -1
- package/src/client/actions/passkey.ts +2 -0
- package/src/client/actions/sendEip712Transaction.ts +149 -0
- package/src/client/clients/session.ts +26 -12
- package/src/client/decorators/publicActionsRewrite.ts +52 -0
- package/src/client/decorators/session_wallet.ts +26 -28
- package/src/client/smart-account.ts +0 -1
- package/src/client-auth-server/Signer.ts +10 -0
- package/src/client-auth-server/WalletProvider.ts +4 -0
- package/src/client-auth-server/interface.ts +2 -0
- package/src/client-auth-server/session.ts +4 -4
- package/src/connector/index.ts +10 -4
- package/src/errors/errors.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletProvider.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/WalletProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAMtD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,cAAe,SAAQ,YAAa,YAAW,iBAAiB;IAC3E,QAAQ,CAAC,WAAW,QAAQ;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,gCAAgC;IAgBtG,SAAS,KAAK,KAAK,UAElB;IAED,IAAW,SAAS,YAEnB;
|
|
1
|
+
{"version":3,"file":"WalletProvider.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/WalletProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAMtD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,cAAe,SAAQ,YAAa,YAAW,iBAAiB;IAC3E,QAAQ,CAAC,WAAW,QAAQ;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,gCAAgC;IAgBtG,SAAS,KAAK,KAAK,UAElB;IAED,IAAW,SAAS,YAEnB;IAEM,SAAS,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAgEyqmB,CAAC;sBAAyD,CAAC;;yBAAsE,CAAC;uBAA6D,CAAC;yBAA+D,CAAC;;yBAAwD,CAAC;uBAAoC,CAAC;yBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAy3M,CAAC;uBAA6D,CAAC;uBAA6D,CAAC;sBAAyD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAr7N,CAAC;sBAAyD,CAAC;;yBAAsE,CAAC;uBAA6D,CAAC;yBAA+D,CAAC;;yBAAwD,CAAC;uBAAoC,CAAC;yBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAy3M,CAAC;uBAA6D,CAAC;uBAA6D,CAAC;sBAAyD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAr7N,CAAC;sBAAyD,CAAC;;yBAAsE,CAAC;uBAA6D,CAAC;yBAA+D,CAAC;;yBAAwD,CAAC;uBAAoC,CAAC;yBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAy3M,CAAC;uBAA6D,CAAC;uBAA6D,CAAC;sBAAyD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA5Dno0B,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAoCtF,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAUtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,SAAS,CAAC,QAAQ,CAAC,cAAc;qCACF,OAAO,EAAE;iCAGb,MAAM;MAG/B;CACH"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "eventemitter3";
|
|
2
2
|
import type { RpcSchema as RpcSchemaGeneric } from "viem";
|
|
3
|
+
import type { ZksyncSsoSessionClient } from "../client/index.js";
|
|
3
4
|
import type { ExtractParams, ExtractReturnType, Method, RpcSchema } from "./rpc.js";
|
|
4
5
|
export interface RequestArguments<M extends Method<TSchema>, TSchema extends RpcSchemaGeneric = RpcSchema> {
|
|
5
6
|
readonly method: M;
|
|
@@ -20,6 +21,9 @@ interface ProviderConnectInfo {
|
|
|
20
21
|
export interface ProviderInterface extends EventEmitter {
|
|
21
22
|
request<M extends Method>(args: RequestArguments<M>): Promise<ExtractReturnType<M>>;
|
|
22
23
|
disconnect(): Promise<void>;
|
|
24
|
+
getClient(parameters?: {
|
|
25
|
+
chainId?: number;
|
|
26
|
+
}): Promise<ZksyncSsoSessionClient> | ZksyncSsoSessionClient;
|
|
23
27
|
on(event: "connect", listener: (info: ProviderConnectInfo) => void): this;
|
|
24
28
|
on(event: "disconnect", listener: (error: ProviderRpcError) => void): this;
|
|
25
29
|
on(event: "chainChanged", listener: (chainId: string) => void): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpF,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS;IACvG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1E,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3E,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3E,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpF,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS;IACvG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC;IACvG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1E,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3E,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3E,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAc,KAAK,IAAI,EAA6B,MAAM,MAAM,CAAC;AAExG,OAAO,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,SAAS,EAA6B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEhI,KAAK,YAAY,GAAG,MAAM,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG;IACF,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf,GAAG;IACF,SAAS,EAAE,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC;CAC9C,GAAG;IACF,SAAS,EAAE,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,mBAAmB,GAAG,MAAM,OAAO,mBAAmB,CAAC;QACnE,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACrC;AA2DD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,GACA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CA8B/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connector/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connector/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAkB,MAAM,aAAa,CAAC;AAEhH,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,eAAgB,yBAAyB,iHA2JvE,CAAC"}
|
|
@@ -37,7 +37,7 @@ declare class EthereumRpcError<T> extends Error {
|
|
|
37
37
|
data?: T;
|
|
38
38
|
constructor(code: number, message: string, data?: T);
|
|
39
39
|
}
|
|
40
|
-
declare class EthereumProviderError<T> extends EthereumRpcError<T> {
|
|
40
|
+
export declare class EthereumProviderError<T> extends EthereumRpcError<T> {
|
|
41
41
|
/**
|
|
42
42
|
* Create an Ethereum Provider JSON-RPC error.
|
|
43
43
|
* `code` must be an integer in the 1000 <= 4999 range.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;gBAEf,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;yBAEf,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;wBAGzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;yBAGvB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;mBAG9B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;iBAG1B,CAAC,QAAQ,kBAAkB,CAAC,CAAC,CAAC;uBAWxB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;2BAGpB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;8BAGrB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;8BAGxB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;6BAGzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;wBAG7B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;;;8BAKlB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;uBAI/B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;4BAInB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;uBAI7B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;4BAInB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;2BAIzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;iBAIlC,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC;;CAatC,CAAC;AA8BF,UAAU,oBAAoB,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,UAAU,kBAAkB,CAAC,CAAC,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAExD,cAAM,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;CAcpD;AAED,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;gBAEf,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;yBAEf,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;wBAGzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;yBAGvB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;mBAG9B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;iBAG1B,CAAC,QAAQ,kBAAkB,CAAC,CAAC,CAAC;uBAWxB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;2BAGpB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;8BAGrB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;8BAGxB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;6BAGzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;wBAG7B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;;;8BAKlB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;uBAI/B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;4BAInB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;uBAI7B,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;4BAInB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;2BAIzB,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;iBAIlC,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC;;CAatC,CAAC;AA8BF,UAAU,oBAAoB,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,UAAU,kBAAkB,CAAC,CAAC,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAExD,cAAM,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;CAcpD;AAED,qBAAa,qBAAqB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC/D;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;CAOpD"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zksync-sso",
|
|
3
3
|
"description": "ZKsync Smart Sign On SDK",
|
|
4
|
-
"version": "0.0.0-beta.
|
|
4
|
+
"version": "0.0.0-beta.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Matter Labs",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/matter-labs/zksync-
|
|
9
|
+
"url": "git+https://github.com/matter-labs/zksync-sso.git"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
|
package/prepare-package.mjs
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { promises as fs } from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
|
|
4
|
-
// Define the path to the package.json
|
|
5
|
-
const packageJsonPath = path.resolve("./package.json");
|
|
6
|
-
console.log(packageJsonPath);
|
|
7
|
-
|
|
8
|
-
// Get the version from environment variables
|
|
9
4
|
const version = process.env.INPUT_VERSION;
|
|
10
5
|
if (!version) {
|
|
11
6
|
console.error("Error: INPUT_VERSION is required.");
|
|
12
7
|
process.exit(1);
|
|
13
8
|
}
|
|
14
9
|
|
|
10
|
+
const packageJsonPath = path.resolve("./package.json");
|
|
11
|
+
|
|
15
12
|
async function preparePackageJson() {
|
|
16
13
|
try {
|
|
17
|
-
// Read the existing package.json
|
|
18
14
|
const packageJsonData = await fs.readFile(packageJsonPath, "utf8");
|
|
19
15
|
const packageJson = JSON.parse(packageJsonData);
|
|
20
16
|
|
package/src/abi/Factory.ts
CHANGED
|
@@ -120,7 +120,46 @@ export const FactoryAbi = [
|
|
|
120
120
|
type: "address[]",
|
|
121
121
|
},
|
|
122
122
|
],
|
|
123
|
-
name: "
|
|
123
|
+
name: "deployProxySsoAccount",
|
|
124
|
+
outputs: [
|
|
125
|
+
{
|
|
126
|
+
internalType: "address",
|
|
127
|
+
name: "accountAddress",
|
|
128
|
+
type: "address",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
stateMutability: "nonpayable",
|
|
132
|
+
type: "function",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
inputs: [
|
|
136
|
+
{
|
|
137
|
+
internalType: "bytes32",
|
|
138
|
+
name: "salt",
|
|
139
|
+
type: "bytes32",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
internalType: "string",
|
|
143
|
+
name: "uniqueAccountId",
|
|
144
|
+
type: "string",
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
internalType: "bytes[]",
|
|
148
|
+
name: "initialValidators",
|
|
149
|
+
type: "bytes[]",
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
internalType: "bytes[]",
|
|
153
|
+
name: "initialModules",
|
|
154
|
+
type: "bytes[]",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
internalType: "address[]",
|
|
158
|
+
name: "initialK1Owners",
|
|
159
|
+
type: "address[]",
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
name: "deployProxySsoAccount",
|
|
124
163
|
outputs: [
|
|
125
164
|
{
|
|
126
165
|
internalType: "address",
|
|
@@ -40,7 +40,9 @@ export const generatePasskeyRegistrationOptions = async (args: GeneratePasskeyRe
|
|
|
40
40
|
// See "Guiding use of authenticators via authenticatorSelection" below
|
|
41
41
|
authenticatorSelection: {
|
|
42
42
|
residentKey: "required",
|
|
43
|
+
userVerification: "discouraged",
|
|
43
44
|
},
|
|
45
|
+
supportedAlgorithmIDs: [-7], // only supports ES256 (no windows hello)
|
|
44
46
|
};
|
|
45
47
|
const params: GenerateRegistrationOptionsOpts = Object.assign({}, defaultOptions, args);
|
|
46
48
|
const options = await generateRegistrationOptions(params);
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { type Account, assertRequest, type AssertRequestErrorType, type Chain, type Client, type ExactPartial, type Hash, type PublicActions, type RpcSchema, type SendTransactionRequest, type Transport, type WalletActions } from "viem";
|
|
2
|
+
import { parseAccount } from "viem/accounts";
|
|
3
|
+
import { prepareTransactionRequest, sendRawTransaction } from "viem/actions";
|
|
4
|
+
import { type ChainEIP712, type SendEip712TransactionParameters, type SendEip712TransactionReturnType, type SendTransactionParameters, zksync } from "viem/zksync";
|
|
5
|
+
|
|
6
|
+
import { InvalidEip712TransactionError, type InvalidEip712TransactionErrorType } from "../utils/assertEip712Transaction.js";
|
|
7
|
+
import { isEIP712Transaction } from "../utils/isEip712Transaction.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates, signs, and sends a new EIP712 transaction to the network.
|
|
11
|
+
*
|
|
12
|
+
* @param client - Client to use
|
|
13
|
+
* @param parameters - {@link SendEip712TransactionParameters}
|
|
14
|
+
* @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link SendTransactionReturnType}
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import { createWalletClient, custom } from 'viem'
|
|
18
|
+
* import { zksync } from 'viem/chains'
|
|
19
|
+
* import { sendEip712Transaction } from 'viem/zksync'
|
|
20
|
+
*
|
|
21
|
+
* const client = createWalletClient({
|
|
22
|
+
* chain: zksync,
|
|
23
|
+
* transport: custom(window.ethereum),
|
|
24
|
+
* })
|
|
25
|
+
* const hash = await sendEip712Transaction(client, {
|
|
26
|
+
* account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
|
|
27
|
+
* to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
28
|
+
* value: 1000000000000000000n,
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* // Account Hoisting
|
|
33
|
+
* import { createWalletClient, http } from 'viem'
|
|
34
|
+
* import { privateKeyToAccount } from 'viem/accounts'
|
|
35
|
+
* import { zksync } from 'viem/chains'
|
|
36
|
+
* import { sendEip712Transaction } from 'viem/zksync'
|
|
37
|
+
*
|
|
38
|
+
* const client = createWalletClient({
|
|
39
|
+
* account: privateKeyToAccount('0x…'),
|
|
40
|
+
* chain: zksync,
|
|
41
|
+
* transport: http(),
|
|
42
|
+
* })
|
|
43
|
+
*
|
|
44
|
+
* const hash = await sendEip712Transaction(client, {
|
|
45
|
+
* to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
46
|
+
* value: 1000000000000000000n,
|
|
47
|
+
* })
|
|
48
|
+
*/
|
|
49
|
+
export async function sendEip712Transaction<
|
|
50
|
+
chain extends ChainEIP712 | undefined,
|
|
51
|
+
account extends Account | undefined,
|
|
52
|
+
const request extends SendTransactionRequest<chain, chainOverride>,
|
|
53
|
+
chainOverride extends ChainEIP712 | undefined = undefined,
|
|
54
|
+
>(
|
|
55
|
+
client: Client<Transport, chain, account>,
|
|
56
|
+
parameters: SendEip712TransactionParameters<
|
|
57
|
+
chain,
|
|
58
|
+
account,
|
|
59
|
+
chainOverride,
|
|
60
|
+
request
|
|
61
|
+
>,
|
|
62
|
+
): Promise<SendEip712TransactionReturnType> {
|
|
63
|
+
const {
|
|
64
|
+
account: account_ = client.account,
|
|
65
|
+
chain = client.chain,
|
|
66
|
+
...rest
|
|
67
|
+
} = parameters;
|
|
68
|
+
|
|
69
|
+
if (!account_)
|
|
70
|
+
throw new Error("Account not found.");
|
|
71
|
+
const account = parseAccount(account_);
|
|
72
|
+
|
|
73
|
+
assertEip712Request(parameters);
|
|
74
|
+
|
|
75
|
+
const request = await getAction(
|
|
76
|
+
client,
|
|
77
|
+
prepareTransactionRequest,
|
|
78
|
+
"prepareTransactionRequest",
|
|
79
|
+
)({
|
|
80
|
+
account,
|
|
81
|
+
chain,
|
|
82
|
+
nonceManager: account.nonceManager,
|
|
83
|
+
...rest,
|
|
84
|
+
} as any);
|
|
85
|
+
|
|
86
|
+
const serializer = chain?.serializers?.transaction;
|
|
87
|
+
const serializedTransaction = (await account.signTransaction!(request, {
|
|
88
|
+
serializer,
|
|
89
|
+
})) as Hash;
|
|
90
|
+
|
|
91
|
+
return await getAction(
|
|
92
|
+
client,
|
|
93
|
+
sendRawTransaction,
|
|
94
|
+
"sendRawTransaction",
|
|
95
|
+
)({
|
|
96
|
+
serializedTransaction,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Retrieves and returns an action from the client (if exists), and falls
|
|
102
|
+
* back to the tree-shakable action.
|
|
103
|
+
*
|
|
104
|
+
* Useful for extracting overridden actions from a client (ie. if a consumer
|
|
105
|
+
* wants to override the `sendTransaction` implementation).
|
|
106
|
+
*/
|
|
107
|
+
export function getAction<
|
|
108
|
+
transport extends Transport,
|
|
109
|
+
chain extends Chain | undefined,
|
|
110
|
+
account extends Account | undefined,
|
|
111
|
+
rpcSchema extends RpcSchema | undefined,
|
|
112
|
+
extended extends { [key: string]: unknown },
|
|
113
|
+
client extends Client<transport, chain, account, rpcSchema, extended>,
|
|
114
|
+
parameters,
|
|
115
|
+
returnType,
|
|
116
|
+
>(
|
|
117
|
+
client: client,
|
|
118
|
+
actionFn: (_: any, parameters: parameters) => returnType,
|
|
119
|
+
// cspell:ignore minifiers
|
|
120
|
+
// Some minifiers drop `Function.prototype.name`, or replace it with short letters,
|
|
121
|
+
// meaning that `actionFn.name` will not always work. For that case, the consumer
|
|
122
|
+
// needs to pass the name explicitly.
|
|
123
|
+
name: keyof PublicActions | keyof WalletActions | (string & {}),
|
|
124
|
+
): (parameters: parameters) => returnType {
|
|
125
|
+
const action_implicit = client[actionFn.name];
|
|
126
|
+
if (typeof action_implicit === "function")
|
|
127
|
+
return action_implicit as (params: parameters) => returnType;
|
|
128
|
+
|
|
129
|
+
const action_explicit = client[name];
|
|
130
|
+
if (typeof action_explicit === "function")
|
|
131
|
+
return action_explicit as (params: parameters) => returnType;
|
|
132
|
+
|
|
133
|
+
return (params) => actionFn(client, params);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
type AssertEip712RequestParameters = ExactPartial<
|
|
137
|
+
SendTransactionParameters<typeof zksync>
|
|
138
|
+
>;
|
|
139
|
+
|
|
140
|
+
/** @internal */
|
|
141
|
+
export type AssertEip712RequestErrorType =
|
|
142
|
+
| InvalidEip712TransactionErrorType
|
|
143
|
+
| AssertRequestErrorType;
|
|
144
|
+
|
|
145
|
+
export function assertEip712Request(args: AssertEip712RequestParameters) {
|
|
146
|
+
if (!isEIP712Transaction(args as any))
|
|
147
|
+
throw new InvalidEip712TransactionError();
|
|
148
|
+
assertRequest(args as any);
|
|
149
|
+
}
|
|
@@ -3,10 +3,30 @@ import { privateKeyToAccount } from "viem/accounts";
|
|
|
3
3
|
|
|
4
4
|
import { encodeSession } from "../../utils/encoding.js";
|
|
5
5
|
import type { SessionConfig } from "../../utils/session.js";
|
|
6
|
+
import { publicActionsRewrite } from "../decorators/publicActionsRewrite.js";
|
|
6
7
|
import { type ZksyncSsoSessionActions, zksyncSsoSessionActions } from "../decorators/session.js";
|
|
7
8
|
import { type ZksyncSsoWalletActions, zksyncSsoWalletActions } from "../decorators/session_wallet.js";
|
|
8
9
|
import { toSmartAccount } from "../smart-account.js";
|
|
9
10
|
|
|
11
|
+
export const signSessionTransaction = (args: {
|
|
12
|
+
sessionKeySignedHash: Hash;
|
|
13
|
+
sessionContract: Address;
|
|
14
|
+
sessionConfig: SessionConfig;
|
|
15
|
+
}) => {
|
|
16
|
+
return encodeAbiParameters(
|
|
17
|
+
[
|
|
18
|
+
{ type: "bytes" },
|
|
19
|
+
{ type: "address" },
|
|
20
|
+
{ type: "bytes[]" },
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
args.sessionKeySignedHash,
|
|
24
|
+
args.sessionContract,
|
|
25
|
+
[encodeSession(args.sessionConfig)], // FIXME: this is assuming there are no other hooks
|
|
26
|
+
],
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
10
30
|
export function createZksyncSessionClient<
|
|
11
31
|
transport extends Transport,
|
|
12
32
|
chain extends Chain,
|
|
@@ -28,18 +48,11 @@ export function createZksyncSessionClient<
|
|
|
28
48
|
sign: async ({ hash }) => {
|
|
29
49
|
const sessionKeySigner = privateKeyToAccount(parameters.sessionKey);
|
|
30
50
|
const hashSignature = await sessionKeySigner.sign({ hash });
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
],
|
|
37
|
-
[
|
|
38
|
-
hashSignature,
|
|
39
|
-
parameters.contracts.session,
|
|
40
|
-
[encodeSession(parameters.sessionConfig)], // FIXME: this is assuming there are no other hooks
|
|
41
|
-
],
|
|
42
|
-
);
|
|
51
|
+
return signSessionTransaction({
|
|
52
|
+
sessionKeySignedHash: hashSignature,
|
|
53
|
+
sessionContract: parameters.contracts.session,
|
|
54
|
+
sessionConfig: parameters.sessionConfig,
|
|
55
|
+
});
|
|
43
56
|
},
|
|
44
57
|
});
|
|
45
58
|
const client = createClient<transport, chain, Account, rpcSchema>({
|
|
@@ -53,6 +66,7 @@ export function createZksyncSessionClient<
|
|
|
53
66
|
contracts: parameters.contracts,
|
|
54
67
|
}))
|
|
55
68
|
.extend(publicActions)
|
|
69
|
+
.extend(publicActionsRewrite)
|
|
56
70
|
.extend(zksyncSsoWalletActions)
|
|
57
71
|
.extend(zksyncSsoSessionActions);
|
|
58
72
|
return client;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Account, Chain, Hex, PublicActions, Transport } from "viem";
|
|
2
|
+
import { estimateContractGas, estimateGas, prepareTransactionRequest } from "viem/actions";
|
|
3
|
+
|
|
4
|
+
import { type ClientWithZksyncSsoSessionData, signSessionTransaction } from "../clients/session.js";
|
|
5
|
+
|
|
6
|
+
const emptySignature = "0x" + "1b".padStart(65 * 2, "0") as Hex;
|
|
7
|
+
|
|
8
|
+
export function publicActionsRewrite<
|
|
9
|
+
transport extends Transport,
|
|
10
|
+
chain extends Chain,
|
|
11
|
+
account extends Account,
|
|
12
|
+
>(
|
|
13
|
+
client: ClientWithZksyncSsoSessionData<transport, chain, account>,
|
|
14
|
+
): Pick<PublicActions<transport, chain, account>, "estimateContractGas" | "estimateGas" | "prepareTransactionRequest"> {
|
|
15
|
+
return {
|
|
16
|
+
prepareTransactionRequest: async (args) => {
|
|
17
|
+
if (!("customSignature" in args)) {
|
|
18
|
+
(args as any).customSignature = signSessionTransaction({
|
|
19
|
+
sessionKeySignedHash: emptySignature,
|
|
20
|
+
sessionContract: client.contracts.session,
|
|
21
|
+
sessionConfig: client.sessionConfig,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const request = await prepareTransactionRequest(client, {
|
|
25
|
+
...args,
|
|
26
|
+
type: "eip712",
|
|
27
|
+
} as any) as any;
|
|
28
|
+
return request;
|
|
29
|
+
},
|
|
30
|
+
estimateContractGas: (args) => {
|
|
31
|
+
if (!("customSignature" in args)) {
|
|
32
|
+
(args as any).customSignature = signSessionTransaction({
|
|
33
|
+
sessionKeySignedHash: emptySignature,
|
|
34
|
+
sessionContract: client.contracts.session,
|
|
35
|
+
sessionConfig: client.sessionConfig,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return estimateContractGas(client, args as any);
|
|
39
|
+
},
|
|
40
|
+
estimateGas: async (args) => {
|
|
41
|
+
if (!("customSignature" in args)) {
|
|
42
|
+
(args as any).customSignature = signSessionTransaction({
|
|
43
|
+
sessionKeySignedHash: emptySignature,
|
|
44
|
+
sessionContract: client.contracts.session,
|
|
45
|
+
sessionConfig: client.sessionConfig,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const estimated = await estimateGas(client, args);
|
|
49
|
+
return estimated;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { deployContract, getAddresses, getChainId,
|
|
3
|
-
import {
|
|
1
|
+
import { type Account, bytesToHex, type Chain, formatTransaction, type Transport, type WalletActions } from "viem";
|
|
2
|
+
import { deployContract, getAddresses, getChainId, sendRawTransaction, signMessage, signTypedData, writeContract } from "viem/actions";
|
|
3
|
+
import { signTransaction, type ZksyncEip712Meta } from "viem/zksync";
|
|
4
4
|
|
|
5
|
+
import { sendEip712Transaction } from "../actions/sendEip712Transaction.js";
|
|
5
6
|
import type { ClientWithZksyncSsoSessionData } from "../clients/session.js";
|
|
6
|
-
/* import { getTokenSpendLimit } from '../actions/session.js'; */
|
|
7
7
|
|
|
8
8
|
export type ZksyncSsoWalletActions<chain extends Chain, account extends Account> = Omit<
|
|
9
|
-
WalletActions<chain, account>, "addChain" | "getPermissions" | "requestAddresses" | "requestPermissions" | "switchChain" | "watchAsset"
|
|
9
|
+
WalletActions<chain, account>, "addChain" | "getPermissions" | "requestAddresses" | "requestPermissions" | "switchChain" | "watchAsset" | "prepareTransactionRequest"
|
|
10
10
|
>;
|
|
11
11
|
|
|
12
12
|
export function zksyncSsoWalletActions<
|
|
@@ -18,32 +18,30 @@ export function zksyncSsoWalletActions<
|
|
|
18
18
|
deployContract: (args) => deployContract(client, args),
|
|
19
19
|
getAddresses: () => getAddresses(client),
|
|
20
20
|
getChainId: () => getChainId(client),
|
|
21
|
-
prepareTransactionRequest: (args) =>
|
|
22
|
-
prepareTransactionRequest(client, args),
|
|
23
21
|
sendRawTransaction: (args) => sendRawTransaction(client, args),
|
|
24
22
|
sendTransaction: async (args) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (tx.eip712Meta) {
|
|
37
|
-
const transaction = {
|
|
38
|
-
...tx,
|
|
39
|
-
account: client.account,
|
|
40
|
-
paymaster: tx.eip712Meta.paymasterParams.paymaster,
|
|
41
|
-
// TODO: Find permanent fix as this only works for general paymasters with no input
|
|
42
|
-
paymasterInput: getGeneralPaymasterInput({ innerInput: "0x" }),
|
|
43
|
-
};
|
|
44
|
-
return await sendEip712Transaction(client, transaction);
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
const unformattedTx: any = Object.assign({}, args);
|
|
25
|
+
|
|
26
|
+
if ("eip712Meta" in unformattedTx) {
|
|
27
|
+
const eip712Meta = unformattedTx.eip712Meta as ZksyncEip712Meta;
|
|
28
|
+
unformattedTx.gasPerPubdata = eip712Meta.gasPerPubdata ? BigInt(eip712Meta.gasPerPubdata) : undefined;
|
|
29
|
+
unformattedTx.factoryDeps = eip712Meta.factoryDeps;
|
|
30
|
+
unformattedTx.customSignature = eip712Meta.customSignature;
|
|
31
|
+
unformattedTx.paymaster = eip712Meta.paymasterParams?.paymaster;
|
|
32
|
+
unformattedTx.paymasterInput = eip712Meta.paymasterParams?.paymasterInput ? bytesToHex(new Uint8Array(eip712Meta.paymasterParams?.paymasterInput)) : undefined;
|
|
33
|
+
delete unformattedTx.eip712Meta;
|
|
45
34
|
}
|
|
46
|
-
|
|
35
|
+
|
|
36
|
+
const formatters = client.chain?.formatters;
|
|
37
|
+
const format = formatters?.transaction?.format || formatTransaction;
|
|
38
|
+
|
|
39
|
+
const tx = {
|
|
40
|
+
...format(unformattedTx),
|
|
41
|
+
type: "eip712",
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return await sendEip712Transaction(client, tx);
|
|
47
45
|
},
|
|
48
46
|
signMessage: (args) => signMessage(client, args),
|
|
49
47
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -41,7 +41,6 @@ export function toSmartAccount(
|
|
|
41
41
|
...transaction,
|
|
42
42
|
from: this.address!,
|
|
43
43
|
type: "eip712",
|
|
44
|
-
gas: 100_000_000n, // TODO remove when gas estimation is fixed
|
|
45
44
|
} as ZksyncTransactionSerializableEIP712;
|
|
46
45
|
|
|
47
46
|
const eip712DomainAndMessage = getEip712Domain(signableTransaction);
|
|
@@ -20,6 +20,7 @@ type Account = {
|
|
|
20
20
|
interface SignerInterface {
|
|
21
21
|
accounts: Address[];
|
|
22
22
|
chain: Chain;
|
|
23
|
+
getClient(parameters?: { chainId?: number }): ZksyncSsoSessionClient;
|
|
23
24
|
handshake(): Promise<Address[]>;
|
|
24
25
|
request<TMethod extends Method>(request: RequestArguments<TMethod>): Promise<ExtractReturnType<TMethod>>;
|
|
25
26
|
disconnect: () => Promise<void>;
|
|
@@ -83,6 +84,15 @@ export class Signer implements SignerInterface {
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
getClient(parameters?: { chainId?: number }) {
|
|
88
|
+
const chainId = parameters?.chainId || this.chain.id;
|
|
89
|
+
const chain = this.chains.find((e) => e.id === chainId);
|
|
90
|
+
if (!chain) throw new Error(`Chain with id ${chainId} is not supported`);
|
|
91
|
+
|
|
92
|
+
if (!this.walletClient) throw new Error("Wallet client is not created");
|
|
93
|
+
return this.walletClient;
|
|
94
|
+
}
|
|
95
|
+
|
|
86
96
|
private get account(): Account | null {
|
|
87
97
|
const account = this._account.get();
|
|
88
98
|
if (!account) return null;
|
|
@@ -52,6 +52,10 @@ export class WalletProvider extends EventEmitter implements ProviderInterface {
|
|
|
52
52
|
return this.signer.accounts.length > 0;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
public getClient(parameters?: { chainId?: number }) {
|
|
56
|
+
return this.signer.getClient(parameters);
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
public async request<M extends Method>(request: RequestArguments<M>): Promise<ExtractReturnType<M>> {
|
|
56
60
|
try {
|
|
57
61
|
switch (request.method) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "eventemitter3";
|
|
2
2
|
import type { RpcSchema as RpcSchemaGeneric } from "viem";
|
|
3
3
|
|
|
4
|
+
import type { ZksyncSsoSessionClient } from "../client/index.js";
|
|
4
5
|
import type { ExtractParams, ExtractReturnType, Method, RpcSchema } from "./rpc.js";
|
|
5
6
|
|
|
6
7
|
export interface RequestArguments<M extends Method<TSchema>, TSchema extends RpcSchemaGeneric = RpcSchema> {
|
|
@@ -26,6 +27,7 @@ interface ProviderConnectInfo {
|
|
|
26
27
|
export interface ProviderInterface extends EventEmitter {
|
|
27
28
|
request<M extends Method>(args: RequestArguments<M>): Promise<ExtractReturnType<M>>;
|
|
28
29
|
disconnect(): Promise<void>;
|
|
30
|
+
getClient(parameters?: { chainId?: number }): Promise<ZksyncSsoSessionClient> | ZksyncSsoSessionClient;
|
|
29
31
|
on(event: "connect", listener: (info: ProviderConnectInfo) => void): this;
|
|
30
32
|
on(event: "disconnect", listener: (error: ProviderRpcError) => void): this;
|
|
31
33
|
on(event: "chainChanged", listener: (chainId: string) => void): this;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AbiFunction, type Address, type Hash, toFunctionSelector, toHex } from "viem";
|
|
1
|
+
import { type AbiFunction, type Address, getAddress, type Hash, toFunctionSelector, toHex } from "viem";
|
|
2
2
|
|
|
3
3
|
import { ConstraintCondition, type Limit, LimitType, LimitUnlimited, LimitZero, type SessionConfig } from "../utils/session.js";
|
|
4
4
|
|
|
@@ -115,13 +115,13 @@ export function formatSessionPreferences(
|
|
|
115
115
|
const selector = policy.function ? toFunctionSelector(policy.function) : policy.selector;
|
|
116
116
|
if (!selector) throw new Error("Missing function or selector in contract call policy");
|
|
117
117
|
return {
|
|
118
|
-
target: policy.address,
|
|
118
|
+
target: getAddress(policy.address.toLowerCase()),
|
|
119
119
|
maxValuePerUse: policy.maxValuePerUse ?? valueLimit.limit,
|
|
120
120
|
valueLimit,
|
|
121
121
|
selector: selector,
|
|
122
122
|
constraints: policy.constraints?.map((constraint) => ({
|
|
123
123
|
index: BigInt(constraint.index),
|
|
124
|
-
condition: typeof constraint.condition == "string" ? ConstraintCondition[constraint.condition] : (constraint.condition ??
|
|
124
|
+
condition: typeof constraint.condition == "string" ? ConstraintCondition[constraint.condition] : (constraint.condition ?? ConstraintCondition.Unconstrained),
|
|
125
125
|
refValue: constraint.refValue ?? toHex("", { size: 32 }),
|
|
126
126
|
limit: constraint.limit ? formatLimitPreferences(constraint.limit) : LimitUnlimited,
|
|
127
127
|
})) ?? [],
|
|
@@ -130,7 +130,7 @@ export function formatSessionPreferences(
|
|
|
130
130
|
transferPolicies: preferences.transfers?.map((policy) => {
|
|
131
131
|
const valueLimit = policy.valueLimit ? formatLimitPreferences(policy.valueLimit) : LimitZero;
|
|
132
132
|
return {
|
|
133
|
-
target: policy.to,
|
|
133
|
+
target: getAddress(policy.to.toLowerCase()),
|
|
134
134
|
maxValuePerUse: policy.maxValuePerUse ?? valueLimit.limit,
|
|
135
135
|
valueLimit,
|
|
136
136
|
};
|