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.
Files changed (92) hide show
  1. package/.npmignore +7 -0
  2. package/README.md +106 -2
  3. package/dist/_cjs/abi/Factory.js +40 -1
  4. package/dist/_cjs/abi/Factory.js.map +1 -1
  5. package/dist/_cjs/client/actions/account.js +1 -1
  6. package/dist/_cjs/client/actions/account.js.map +1 -1
  7. package/dist/_cjs/client/actions/passkey.js +2 -0
  8. package/dist/_cjs/client/actions/passkey.js.map +1 -1
  9. package/dist/_cjs/client/actions/sendEip712Transaction.js +45 -0
  10. package/dist/_cjs/client/actions/sendEip712Transaction.js.map +1 -0
  11. package/dist/_cjs/client/clients/session.js +20 -9
  12. package/dist/_cjs/client/clients/session.js.map +1 -1
  13. package/dist/_cjs/client/decorators/publicActionsRewrite.js +46 -0
  14. package/dist/_cjs/client/decorators/publicActionsRewrite.js.map +1 -0
  15. package/dist/_cjs/client/decorators/session_wallet.js +18 -11
  16. package/dist/_cjs/client/decorators/session_wallet.js.map +1 -1
  17. package/dist/_cjs/client/smart-account.js +0 -1
  18. package/dist/_cjs/client/smart-account.js.map +1 -1
  19. package/dist/_cjs/client-auth-server/Signer.js +9 -0
  20. package/dist/_cjs/client-auth-server/Signer.js.map +1 -1
  21. package/dist/_cjs/client-auth-server/WalletProvider.js +3 -0
  22. package/dist/_cjs/client-auth-server/WalletProvider.js.map +1 -1
  23. package/dist/_cjs/client-auth-server/session.js +3 -3
  24. package/dist/_cjs/client-auth-server/session.js.map +1 -1
  25. package/dist/_cjs/connector/index.js +15 -8
  26. package/dist/_cjs/connector/index.js.map +1 -1
  27. package/dist/_cjs/errors/errors.js +2 -1
  28. package/dist/_cjs/errors/errors.js.map +1 -1
  29. package/dist/_esm/abi/Factory.js +40 -1
  30. package/dist/_esm/abi/Factory.js.map +1 -1
  31. package/dist/_esm/client/actions/account.js +1 -1
  32. package/dist/_esm/client/actions/account.js.map +1 -1
  33. package/dist/_esm/client/actions/passkey.js +2 -0
  34. package/dist/_esm/client/actions/passkey.js.map +1 -1
  35. package/dist/_esm/client/actions/sendEip712Transaction.js +93 -0
  36. package/dist/_esm/client/actions/sendEip712Transaction.js.map +1 -0
  37. package/dist/_esm/client/clients/session.js +18 -9
  38. package/dist/_esm/client/clients/session.js.map +1 -1
  39. package/dist/_esm/client/decorators/publicActionsRewrite.js +43 -0
  40. package/dist/_esm/client/decorators/publicActionsRewrite.js.map +1 -0
  41. package/dist/_esm/client/decorators/session_wallet.js +21 -25
  42. package/dist/_esm/client/decorators/session_wallet.js.map +1 -1
  43. package/dist/_esm/client/smart-account.js +0 -1
  44. package/dist/_esm/client/smart-account.js.map +1 -1
  45. package/dist/_esm/client-auth-server/Signer.js +9 -0
  46. package/dist/_esm/client-auth-server/Signer.js.map +1 -1
  47. package/dist/_esm/client-auth-server/WalletProvider.js +3 -0
  48. package/dist/_esm/client-auth-server/WalletProvider.js.map +1 -1
  49. package/dist/_esm/client-auth-server/session.js +4 -4
  50. package/dist/_esm/client-auth-server/session.js.map +1 -1
  51. package/dist/_esm/connector/index.js +15 -8
  52. package/dist/_esm/connector/index.js.map +1 -1
  53. package/dist/_esm/errors/errors.js +1 -1
  54. package/dist/_esm/errors/errors.js.map +1 -1
  55. package/dist/_types/abi/Factory.d.ts +31 -1
  56. package/dist/_types/abi/Factory.d.ts.map +1 -1
  57. package/dist/_types/client/actions/passkey.d.ts.map +1 -1
  58. package/dist/_types/client/actions/sendEip712Transaction.d.ts +60 -0
  59. package/dist/_types/client/actions/sendEip712Transaction.d.ts.map +1 -0
  60. package/dist/_types/client/clients/session.d.ts +5 -0
  61. package/dist/_types/client/clients/session.d.ts.map +1 -1
  62. package/dist/_types/client/decorators/publicActionsRewrite.d.ts +4 -0
  63. package/dist/_types/client/decorators/publicActionsRewrite.d.ts.map +1 -0
  64. package/dist/_types/client/decorators/session_wallet.d.ts +2 -2
  65. package/dist/_types/client/decorators/session_wallet.d.ts.map +1 -1
  66. package/dist/_types/client/smart-account.d.ts.map +1 -1
  67. package/dist/_types/client-auth-server/Signer.d.ts +1070 -1
  68. package/dist/_types/client-auth-server/Signer.d.ts.map +1 -1
  69. package/dist/_types/client-auth-server/WalletProvider.d.ts +1064 -0
  70. package/dist/_types/client-auth-server/WalletProvider.d.ts.map +1 -1
  71. package/dist/_types/client-auth-server/interface.d.ts +4 -0
  72. package/dist/_types/client-auth-server/interface.d.ts.map +1 -1
  73. package/dist/_types/client-auth-server/session.d.ts.map +1 -1
  74. package/dist/_types/connector/index.d.ts.map +1 -1
  75. package/dist/_types/errors/errors.d.ts +1 -1
  76. package/dist/_types/errors/errors.d.ts.map +1 -1
  77. package/package.json +2 -2
  78. package/prepare-package.mjs +2 -6
  79. package/src/abi/Factory.ts +40 -1
  80. package/src/client/actions/account.ts +1 -1
  81. package/src/client/actions/passkey.ts +2 -0
  82. package/src/client/actions/sendEip712Transaction.ts +149 -0
  83. package/src/client/clients/session.ts +26 -12
  84. package/src/client/decorators/publicActionsRewrite.ts +52 -0
  85. package/src/client/decorators/session_wallet.ts +26 -28
  86. package/src/client/smart-account.ts +0 -1
  87. package/src/client-auth-server/Signer.ts +10 -0
  88. package/src/client-auth-server/WalletProvider.ts +4 -0
  89. package/src/client-auth-server/interface.ts +2 -0
  90. package/src/client-auth-server/session.ts +4 -4
  91. package/src/connector/index.ts +10 -4
  92. 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;IAEY,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
+ {"version":3,"file":"WalletProvider.d.ts","sourceRoot":"","sources":["../../../src/client-auth-server/WalletProvider.ts"],"names":[],"mappings":"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"}
@@ -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,EAAE,KAAK,IAAI,EAA6B,MAAM,MAAM,CAAC;AAE5F,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
+ {"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":"AAYA,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,iHAsJvE,CAAC"}
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,cAAM,qBAAqB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACxD;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;CAOpD"}
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.1",
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-account-sdk.git"
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",
@@ -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
 
@@ -120,7 +120,46 @@ export const FactoryAbi = [
120
120
  type: "address[]",
121
121
  },
122
122
  ],
123
- name: "deployProxy7579Account",
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",
@@ -88,7 +88,7 @@ export const deployAccount = async <
88
88
  chain: client.chain!,
89
89
  address: args.contracts.accountFactory,
90
90
  abi: FactoryAbi,
91
- functionName: "deployProxy7579Account",
91
+ functionName: "deployProxySsoAccount",
92
92
  args: [
93
93
  toHex(args.salt),
94
94
  accountId,
@@ -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 encodeAbiParameters(
32
- [
33
- { type: "bytes" },
34
- { type: "address" },
35
- { type: "bytes[]" },
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 { /* decodeFunctionData, erc20Abi, getAddress, */ type Account, type Chain, type Transport, type WalletActions } from "viem";
2
- import { deployContract, getAddresses, getChainId, prepareTransactionRequest, sendRawTransaction, signMessage, signTypedData, writeContract } from "viem/actions";
3
- import { getGeneralPaymasterInput, sendEip712Transaction, sendTransaction, signTransaction } from "viem/zksync";
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
- const tx = client.chain.formatters?.transaction?.format(args) || args;
26
- /* await verifyTransactionData({
27
- value: tx.value,
28
- chain: tx.chain || undefined,
29
- to: tx.to || undefined,
30
- data: tx.data,
31
- gas: tx.gas,
32
- gasPrice: tx.gasPrice,
33
- maxFeePerGas: tx.maxFeePerGas,
34
- maxPriorityFeePerGas: tx.maxPriorityFeePerGas,
35
- }, client); */
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
- return await sendTransaction(client, tx);
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 ?? 0),
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
  };