@zerodev/permissions 5.2.1-alpha.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/_cjs/constants.js +17 -0
- package/_cjs/constants.js.map +1 -0
- package/_cjs/deserializePermissionAccount.js +94 -0
- package/_cjs/deserializePermissionAccount.js.map +1 -0
- package/_cjs/index.js +12 -0
- package/_cjs/index.js.map +1 -0
- package/_cjs/package.json +1 -0
- package/_cjs/policies/callPolicyUtils.js +87 -0
- package/_cjs/policies/callPolicyUtils.js.map +1 -0
- package/_cjs/policies/index.js +16 -0
- package/_cjs/policies/index.js.map +1 -0
- package/_cjs/policies/toCallPolicy.js +42 -0
- package/_cjs/policies/toCallPolicy.js.map +1 -0
- package/_cjs/policies/toGasPolicy.js +30 -0
- package/_cjs/policies/toGasPolicy.js.map +1 -0
- package/_cjs/policies/toRateLimitPolicy.js +30 -0
- package/_cjs/policies/toRateLimitPolicy.js.map +1 -0
- package/_cjs/policies/toSignatureCallerPolicy.js +24 -0
- package/_cjs/policies/toSignatureCallerPolicy.js.map +1 -0
- package/_cjs/policies/toSudoPolicy.js +22 -0
- package/_cjs/policies/toSudoPolicy.js.map +1 -0
- package/_cjs/policies/types.js +19 -0
- package/_cjs/policies/types.js.map +1 -0
- package/_cjs/policies/utils/toPolicyId.js +11 -0
- package/_cjs/policies/utils/toPolicyId.js.map +1 -0
- package/_cjs/serializePermissionAccount.js +27 -0
- package/_cjs/serializePermissionAccount.js.map +1 -0
- package/_cjs/signers/index.js +12 -0
- package/_cjs/signers/index.js.map +1 -0
- package/_cjs/signers/toECDSASigner.js +39 -0
- package/_cjs/signers/toECDSASigner.js.map +1 -0
- package/_cjs/signers/toWebAuthnPubKey.js +97 -0
- package/_cjs/signers/toWebAuthnPubKey.js.map +1 -0
- package/_cjs/signers/toWebAuthnSigner.js +154 -0
- package/_cjs/signers/toWebAuthnSigner.js.map +1 -0
- package/_cjs/signers/utils/toSignerId.js +9 -0
- package/_cjs/signers/utils/toSignerId.js.map +1 -0
- package/_cjs/signers/webAuthnUtils.js +45 -0
- package/_cjs/signers/webAuthnUtils.js.map +1 -0
- package/_cjs/toPermissionValidator.js +102 -0
- package/_cjs/toPermissionValidator.js.map +1 -0
- package/_cjs/types.js +3 -0
- package/_cjs/types.js.map +1 -0
- package/_cjs/utils.js +37 -0
- package/_cjs/utils.js.map +1 -0
- package/_esm/constants.js +14 -0
- package/_esm/constants.js.map +1 -0
- package/_esm/deserializePermissionAccount.js +89 -0
- package/_esm/deserializePermissionAccount.js.map +1 -0
- package/_esm/index.js +5 -0
- package/_esm/index.js.map +1 -0
- package/_esm/package.json +1 -0
- package/_esm/policies/callPolicyUtils.js +82 -0
- package/_esm/policies/callPolicyUtils.js.map +1 -0
- package/_esm/policies/index.js +7 -0
- package/_esm/policies/index.js.map +1 -0
- package/_esm/policies/toCallPolicy.js +38 -0
- package/_esm/policies/toCallPolicy.js.map +1 -0
- package/_esm/policies/toGasPolicy.js +26 -0
- package/_esm/policies/toGasPolicy.js.map +1 -0
- package/_esm/policies/toRateLimitPolicy.js +26 -0
- package/_esm/policies/toRateLimitPolicy.js.map +1 -0
- package/_esm/policies/toSignatureCallerPolicy.js +20 -0
- package/_esm/policies/toSignatureCallerPolicy.js.map +1 -0
- package/_esm/policies/toSudoPolicy.js +18 -0
- package/_esm/policies/toSudoPolicy.js.map +1 -0
- package/_esm/policies/types.js +17 -0
- package/_esm/policies/types.js.map +1 -0
- package/_esm/policies/utils/toPolicyId.js +7 -0
- package/_esm/policies/utils/toPolicyId.js.map +1 -0
- package/_esm/serializePermissionAccount.js +23 -0
- package/_esm/serializePermissionAccount.js.map +1 -0
- package/_esm/signers/index.js +5 -0
- package/_esm/signers/index.js.map +1 -0
- package/_esm/signers/toECDSASigner.js +36 -0
- package/_esm/signers/toECDSASigner.js.map +1 -0
- package/_esm/signers/toWebAuthnPubKey.js +107 -0
- package/_esm/signers/toWebAuthnPubKey.js.map +1 -0
- package/_esm/signers/toWebAuthnSigner.js +164 -0
- package/_esm/signers/toWebAuthnSigner.js.map +1 -0
- package/_esm/signers/utils/toSignerId.js +5 -0
- package/_esm/signers/utils/toSignerId.js.map +1 -0
- package/_esm/signers/webAuthnUtils.js +41 -0
- package/_esm/signers/webAuthnUtils.js.map +1 -0
- package/_esm/toPermissionValidator.js +98 -0
- package/_esm/toPermissionValidator.js.map +1 -0
- package/_esm/types.js +3 -0
- package/_esm/types.js.map +1 -0
- package/_esm/utils.js +32 -0
- package/_esm/utils.js.map +1 -0
- package/_types/constants.d.ts +13 -0
- package/_types/constants.d.ts.map +1 -0
- package/_types/deserializePermissionAccount.d.ts +13 -0
- package/_types/deserializePermissionAccount.d.ts.map +1 -0
- package/_types/index.d.ts +6 -0
- package/_types/index.d.ts.map +1 -0
- package/_types/policies/callPolicyUtils.d.ts +5 -0
- package/_types/policies/callPolicyUtils.d.ts.map +1 -0
- package/_types/policies/index.d.ts +7 -0
- package/_types/policies/index.d.ts.map +1 -0
- package/_types/policies/toCallPolicy.d.ts +9 -0
- package/_types/policies/toCallPolicy.d.ts.map +1 -0
- package/_types/policies/toGasPolicy.d.ts +10 -0
- package/_types/policies/toGasPolicy.d.ts.map +1 -0
- package/_types/policies/toRateLimitPolicy.d.ts +9 -0
- package/_types/policies/toRateLimitPolicy.d.ts.map +1 -0
- package/_types/policies/toSignatureCallerPolicy.d.ts +8 -0
- package/_types/policies/toSignatureCallerPolicy.d.ts.map +1 -0
- package/_types/policies/toSudoPolicy.d.ts +6 -0
- package/_types/policies/toSudoPolicy.d.ts.map +1 -0
- package/_types/policies/types.d.ts +56 -0
- package/_types/policies/types.d.ts.map +1 -0
- package/_types/policies/utils/toPolicyId.d.ts +4 -0
- package/_types/policies/utils/toPolicyId.d.ts.map +1 -0
- package/_types/serializePermissionAccount.d.ts +5 -0
- package/_types/serializePermissionAccount.d.ts.map +1 -0
- package/_types/signers/index.d.ts +5 -0
- package/_types/signers/index.d.ts.map +1 -0
- package/_types/signers/toECDSASigner.d.ts +8 -0
- package/_types/signers/toECDSASigner.d.ts.map +1 -0
- package/_types/signers/toWebAuthnPubKey.d.ts +11 -0
- package/_types/signers/toWebAuthnPubKey.d.ts.map +1 -0
- package/_types/signers/toWebAuthnSigner.d.ts +16 -0
- package/_types/signers/toWebAuthnSigner.d.ts.map +1 -0
- package/_types/signers/utils/toSignerId.d.ts +4 -0
- package/_types/signers/utils/toSignerId.d.ts.map +1 -0
- package/_types/signers/webAuthnUtils.d.ts +13 -0
- package/_types/signers/webAuthnUtils.d.ts.map +1 -0
- package/_types/toPermissionValidator.d.ts +5 -0
- package/_types/toPermissionValidator.d.ts.map +1 -0
- package/_types/types.d.ts +49 -0
- package/_types/types.d.ts.map +1 -0
- package/_types/utils.d.ts +8 -0
- package/_types/utils.d.ts.map +1 -0
- package/constants.ts +17 -0
- package/deserializePermissionAccount.ts +119 -0
- package/index.ts +5 -0
- package/package.json +63 -0
- package/policies/callPolicyUtils.ts +122 -0
- package/policies/index.ts +12 -0
- package/policies/toCallPolicy.ts +65 -0
- package/policies/toGasPolicy.ts +44 -0
- package/policies/toRateLimitPolicy.ts +43 -0
- package/policies/toSignatureCallerPolicy.ts +34 -0
- package/policies/toSudoPolicy.ts +27 -0
- package/policies/types.ts +118 -0
- package/policies/utils/toPolicyId.ts +13 -0
- package/serializePermissionAccount.ts +38 -0
- package/signers/index.ts +10 -0
- package/signers/toECDSASigner.ts +61 -0
- package/signers/toWebAuthnPubKey.ts +152 -0
- package/signers/toWebAuthnSigner.ts +245 -0
- package/signers/utils/toSignerId.ts +9 -0
- package/signers/webAuthnUtils.ts +54 -0
- package/toPermissionValidator.ts +152 -0
- package/types.ts +71 -0
- package/utils.ts +42 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { toECDSASigner, type ECDSAModularSignerParams } from "./toECDSASigner.js";
|
|
2
|
+
export { toWebAuthnSigner, type WebAuthnModularSignerParams } from "./toWebAuthnSigner.js";
|
|
3
|
+
export { WebAuthnMode } from "./toWebAuthnPubKey.js";
|
|
4
|
+
export { toSignerId } from "./utils/toSignerId.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../signers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,KAAK,wBAAwB,EAChC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACH,gBAAgB,EAChB,KAAK,2BAA2B,EACnC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type SmartAccountSigner } from "permissionless/accounts";
|
|
2
|
+
import { type Address } from "viem";
|
|
3
|
+
import type { ModularSigner, ModularSignerParams } from "../types.js";
|
|
4
|
+
export type ECDSAModularSignerParams<TSource extends string = "custom", TAddress extends Address = Address> = ModularSignerParams & {
|
|
5
|
+
signer: SmartAccountSigner<TSource, TAddress>;
|
|
6
|
+
};
|
|
7
|
+
export declare function toECDSASigner<TSource extends string = "custom", TAddress extends Address = Address>({ signer, signerContractAddress }: ECDSAModularSignerParams<TSource, TAddress>): ModularSigner;
|
|
8
|
+
//# sourceMappingURL=toECDSASigner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toECDSASigner.d.ts","sourceRoot":"","sources":["../../signers/toECDSASigner.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,kBAAkB,EAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,KAAK,OAAO,EAA+C,MAAM,MAAM,CAAA;AAGhF,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAErE,MAAM,MAAM,wBAAwB,CAChC,OAAO,SAAS,MAAM,GAAG,QAAQ,EACjC,QAAQ,SAAS,OAAO,GAAG,OAAO,IAClC,mBAAmB,GAAG;IACtB,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;CAChD,CAAA;AAED,wBAAgB,aAAa,CACzB,OAAO,SAAS,MAAM,GAAG,QAAQ,EACjC,QAAQ,SAAS,OAAO,GAAG,OAAO,EACpC,EACE,MAAM,EACN,qBAA6C,EAChD,EAAE,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,aAAa,CAoC7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type WebAuthnKey } from "./toWebAuthnSigner.js";
|
|
2
|
+
export declare enum WebAuthnMode {
|
|
3
|
+
Register = "register",
|
|
4
|
+
Login = "login"
|
|
5
|
+
}
|
|
6
|
+
export declare const toWebAuthnPubKey: ({ passkeyName, passkeyServerUrl, mode }: {
|
|
7
|
+
passkeyName: string;
|
|
8
|
+
passkeyServerUrl: string;
|
|
9
|
+
mode: WebAuthnMode;
|
|
10
|
+
}) => Promise<WebAuthnKey>;
|
|
11
|
+
//# sourceMappingURL=toWebAuthnPubKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toWebAuthnPubKey.d.ts","sourceRoot":"","sources":["../../signers/toWebAuthnPubKey.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGxD,oBAAY,YAAY;IACpB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAClB;AAED,eAAO,MAAM,gBAAgB;iBAKZ,MAAM;sBACD,MAAM;UAClB,YAAY;MAClB,QAAQ,WAAW,CAoItB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Chain, type Client, type Hex, type Transport } from "viem";
|
|
2
|
+
import type { ModularSigner, ModularSignerParams } from "../types.js";
|
|
3
|
+
import { WebAuthnMode } from "./toWebAuthnPubKey.js";
|
|
4
|
+
export type WebAuthnKey = {
|
|
5
|
+
pubX: bigint;
|
|
6
|
+
pubY: bigint;
|
|
7
|
+
authenticatorIdHash: Hex;
|
|
8
|
+
};
|
|
9
|
+
export type WebAuthnModularSignerParams = ModularSignerParams & {
|
|
10
|
+
passkeyName: string;
|
|
11
|
+
passkeyServerUrl: string;
|
|
12
|
+
pubKey?: WebAuthnKey;
|
|
13
|
+
mode?: WebAuthnMode;
|
|
14
|
+
};
|
|
15
|
+
export declare const toWebAuthnSigner: <TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined>(client: Client<TTransport, TChain, undefined>, { signerContractAddress, pubKey, passkeyServerUrl, passkeyName, mode }: WebAuthnModularSignerParams) => Promise<ModularSigner>;
|
|
16
|
+
//# sourceMappingURL=toWebAuthnSigner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toWebAuthnSigner.d.ts","sourceRoot":"","sources":["../../signers/toWebAuthnSigner.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,GAAG,EAGR,KAAK,SAAS,EAKjB,MAAM,MAAM,CAAA;AAKb,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAA;AAStE,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,GAAG,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG;IAC5D,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,gBAAgB,0NAWtB,2BAA2B,KAC/B,QAAQ,aAAa,CA6LvB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toSignerId.d.ts","sourceRoot":"","sources":["../../../signers/utils/toSignerId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAA+B,MAAM,MAAM,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,GAKlD,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Hex } from "viem";
|
|
2
|
+
export declare const uint8ArrayToHexString: (array: Uint8Array) => `0x${string}`;
|
|
3
|
+
export declare const b64ToBytes: (base64: string) => Uint8Array;
|
|
4
|
+
export declare const findQuoteIndices: (input: string) => {
|
|
5
|
+
beforeType: bigint;
|
|
6
|
+
beforeChallenge: bigint;
|
|
7
|
+
};
|
|
8
|
+
export declare function parseAndNormalizeSig(derSig: Hex): {
|
|
9
|
+
r: bigint;
|
|
10
|
+
s: bigint;
|
|
11
|
+
};
|
|
12
|
+
export declare const isRIP7212SupportedNetwork: (chainId: number) => boolean;
|
|
13
|
+
//# sourceMappingURL=webAuthnUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webAuthnUtils.d.ts","sourceRoot":"","sources":["../../signers/webAuthnUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAA6B,MAAM,MAAM,CAAA;AAI1D,eAAO,MAAM,qBAAqB,UAAW,UAAU,KAAG,KAAK,MAAM,EAIpE,CAAA;AAED,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,UAO3C,CAAA;AAED,eAAO,MAAM,gBAAgB,UAClB,MAAM,KACd;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAO/C,CAAA;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiB1E;AAED,eAAO,MAAM,yBAAyB,YAAa,MAAM,KAAG,OACZ,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { EntryPoint } from "permissionless/types/entrypoint";
|
|
2
|
+
import { type Chain, type Client, type Transport } from "viem";
|
|
3
|
+
import type { PermissionPlugin, PermissionPluginParams } from "./types.js";
|
|
4
|
+
export declare function toPermissionValidator<entryPoint extends EntryPoint, TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined>(client: Client<TTransport, TChain, undefined>, { signer, policies, entryPoint: entryPointAddress, flag }: PermissionPluginParams): Promise<PermissionPlugin<entryPoint>>;
|
|
5
|
+
//# sourceMappingURL=toPermissionValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toPermissionValidator.d.ts","sourceRoot":"","sources":["../toPermissionValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,MAAM,EAEX,KAAK,SAAS,EAOjB,MAAM,MAAM,CAAA;AAKb,OAAO,KAAK,EAER,gBAAgB,EAChB,sBAAsB,EACzB,MAAM,YAAY,CAAA;AAEnB,wBAAsB,qBAAqB,CACvC,UAAU,SAAS,UAAU,EAC7B,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EAEpD,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAC7C,EACI,MAAM,EACN,QAAQ,EACR,UAAU,EAAE,iBAAiB,EAC7B,IAAqC,EACxC,EAAE,sBAAsB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAiHvC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type KernelValidator } from "@zerodev/sdk";
|
|
2
|
+
import type { Action, PluginValidityData } from "@zerodev/sdk/types";
|
|
3
|
+
import type { EntryPoint } from "permissionless/types/entrypoint";
|
|
4
|
+
import type { Abi, Address, Hex, LocalAccount } from "viem";
|
|
5
|
+
import { PolicyFlags } from "./constants.js";
|
|
6
|
+
import type { CallPolicyParams, GasPolicyParams, RateLimitPolicyParams, SignatureCallerPolicyParams, SudoPolicyParams } from "./policies/index.js";
|
|
7
|
+
export type PermissionPlugin<entryPoint extends EntryPoint> = KernelValidator<entryPoint, "PermissionValidator"> & {
|
|
8
|
+
getPluginSerializationParams: () => PermissionData;
|
|
9
|
+
};
|
|
10
|
+
export type ModularSignerParams = {
|
|
11
|
+
signerContractAddress?: Address;
|
|
12
|
+
};
|
|
13
|
+
export type PolicyParams = {
|
|
14
|
+
policyAddress?: Address;
|
|
15
|
+
policyFlag?: PolicyFlags;
|
|
16
|
+
};
|
|
17
|
+
export type ModularSigner = {
|
|
18
|
+
account: LocalAccount;
|
|
19
|
+
signerContractAddress: Address;
|
|
20
|
+
getSignerData: (permissionId?: Hex) => Hex;
|
|
21
|
+
getDummySignature: () => Hex;
|
|
22
|
+
};
|
|
23
|
+
export type Policy = {
|
|
24
|
+
getPolicyData: (permissionId?: Hex) => Hex;
|
|
25
|
+
getPolicyInfoInBytes: () => Hex;
|
|
26
|
+
policyParams: CallPolicyParams<Abi | readonly unknown[], string> | GasPolicyParams | RateLimitPolicyParams | SignatureCallerPolicyParams | SudoPolicyParams;
|
|
27
|
+
};
|
|
28
|
+
export type PermissionPluginParams = {
|
|
29
|
+
signer: ModularSigner;
|
|
30
|
+
policies: Policy[];
|
|
31
|
+
entryPoint: EntryPoint;
|
|
32
|
+
flag?: PolicyFlags;
|
|
33
|
+
};
|
|
34
|
+
export interface PermissionData {
|
|
35
|
+
policies?: Policy[];
|
|
36
|
+
}
|
|
37
|
+
export type ExportPermissionAccountParams = {
|
|
38
|
+
initCode: Hex;
|
|
39
|
+
accountAddress: Address;
|
|
40
|
+
};
|
|
41
|
+
export type PermissionAccountParams = {
|
|
42
|
+
permissionParams: PermissionData;
|
|
43
|
+
action: Action;
|
|
44
|
+
validityData: PluginValidityData;
|
|
45
|
+
accountParams: ExportPermissionAccountParams;
|
|
46
|
+
enableSignature?: Hex;
|
|
47
|
+
privateKey?: Hex;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EACnB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,UAAU,IAAI,eAAe,CACzE,UAAU,EACV,qBAAqB,CACxB,GAAG;IACA,4BAA4B,EAAE,MAAM,cAAc,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,WAAW,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,YAAY,CAAA;IACrB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,GAAG,CAAA;IAC1C,iBAAiB,EAAE,MAAM,GAAG,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,GAAG,CAAA;IAC1C,oBAAoB,EAAE,MAAM,GAAG,CAAA;IAE/B,YAAY,EACN,gBAAgB,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,GAClD,eAAe,GACf,qBAAqB,GACrB,2BAA2B,GAC3B,gBAAgB,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,MAAM,6BAA6B,GAAG;IACxC,QAAQ,EAAE,GAAG,CAAA;IACb,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,gBAAgB,EAAE,cAAc,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,kBAAkB,CAAA;IAChC,aAAa,EAAE,6BAA6B,CAAA;IAC5C,eAAe,CAAC,EAAE,GAAG,CAAA;IACrB,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EntryPoint } from "permissionless/types";
|
|
2
|
+
import type { PermissionAccountParams, PermissionPlugin } from "./types.js";
|
|
3
|
+
export declare function base64ToBytes(base64: string): Uint8Array;
|
|
4
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
5
|
+
export declare function isPermissionValidatorPlugin<entryPoint extends EntryPoint>(plugin: any): plugin is PermissionPlugin<entryPoint>;
|
|
6
|
+
export declare const serializePermissionAccountParams: (params: PermissionAccountParams) => string;
|
|
7
|
+
export declare const deserializePermissionAccountParams: (params: string) => PermissionAccountParams;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE3E,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,cAG3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,UAG9C;AAED,wBAAgB,2BAA2B,CAAC,UAAU,SAAS,UAAU,EAErE,MAAM,EAAE,GAAG,GACZ,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAExC;AAED,eAAO,MAAM,gCAAgC,WACjC,uBAAuB,WAclC,CAAA;AAED,eAAO,MAAM,kCAAkC,WAAY,MAAM,4BAIhE,CAAA"}
|
package/constants.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const CALL_POLICY_CONTRACT = "0xc4a1aaED053Fc02717358a377A2d695bCdFA3B8A"
|
|
2
|
+
export const ECDSA_SIGNER_CONTRACT =
|
|
3
|
+
"0x8Ed04D0B000777c87e701696cf6B9710733Df96a"
|
|
4
|
+
export const GAS_POLICY_CONTRACT = "0x50FD84A0A1D1683e1dafC5009876B38773fc8E3A"
|
|
5
|
+
export const SIGNATURE_POLICY_CONTRACT =
|
|
6
|
+
"0x19a3E696fFdFEDfadb22297DB223B9ca501523dD"
|
|
7
|
+
export const RATE_LIMIT_POLICY_CONTRACT =
|
|
8
|
+
"0xdB6e5F9a18f0F6Fa0861cB60f94Cf7f7374E8270"
|
|
9
|
+
export const WEBAUTHN_SIGNER_CONTRACT =
|
|
10
|
+
"0xD71E0e2AFf9D4d93b20F615e6aC2ac7e0795b472"
|
|
11
|
+
export const SUDO_POLICY_CONTRACT = "0x6D14FC570e2bE7D74a6926ea54f190d690855851"
|
|
12
|
+
|
|
13
|
+
export enum PolicyFlags {
|
|
14
|
+
FOR_ALL_VALIDATION = "0x0000",
|
|
15
|
+
NOT_FOR_VALIDATE_USEROP = "0x0001",
|
|
16
|
+
NOT_FOR_VALIDATE_SIG = "0x0002"
|
|
17
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { KernelV3AccountAbi, createKernelAccount } from "@zerodev/sdk"
|
|
2
|
+
import { KernelFactoryAbi } from "@zerodev/sdk"
|
|
3
|
+
import { toKernelPluginManager } from "@zerodev/sdk/accounts"
|
|
4
|
+
import type { ValidatorInitData } from "@zerodev/sdk/types"
|
|
5
|
+
import { ENTRYPOINT_ADDRESS_V06 } from "permissionless"
|
|
6
|
+
import type { EntryPoint } from "permissionless/types"
|
|
7
|
+
import type { Hex } from "viem"
|
|
8
|
+
import { decodeFunctionData } from "viem"
|
|
9
|
+
import { privateKeyToAccount } from "viem/accounts"
|
|
10
|
+
import {
|
|
11
|
+
toCallPolicy,
|
|
12
|
+
toGasPolicy,
|
|
13
|
+
toRateLimitPolicy,
|
|
14
|
+
toSignatureCallerPolicy,
|
|
15
|
+
toSudoPolicy
|
|
16
|
+
} from "./policies/index.js"
|
|
17
|
+
import { toECDSASigner } from "./signers/toECDSASigner.js"
|
|
18
|
+
import { toPermissionValidator } from "./toPermissionValidator.js"
|
|
19
|
+
import { type Policy } from "./types.js"
|
|
20
|
+
import type { ModularSigner } from "./types.js"
|
|
21
|
+
import { deserializePermissionAccountParams } from "./utils.js"
|
|
22
|
+
|
|
23
|
+
export const deserializePermissionAccount = async <
|
|
24
|
+
entryPoint extends EntryPoint
|
|
25
|
+
>(
|
|
26
|
+
client: Parameters<typeof createKernelAccount>[0],
|
|
27
|
+
modularPermissionAccountParams: string,
|
|
28
|
+
modularSigner?: ModularSigner,
|
|
29
|
+
entryPointAddress: entryPoint = ENTRYPOINT_ADDRESS_V06 as entryPoint
|
|
30
|
+
) => {
|
|
31
|
+
const params = deserializePermissionAccountParams(
|
|
32
|
+
modularPermissionAccountParams
|
|
33
|
+
)
|
|
34
|
+
let signer: ModularSigner
|
|
35
|
+
if (params.privateKey)
|
|
36
|
+
signer = toECDSASigner({
|
|
37
|
+
signer: privateKeyToAccount(params.privateKey)
|
|
38
|
+
})
|
|
39
|
+
else if (modularSigner) signer = modularSigner
|
|
40
|
+
else throw new Error("No signer or serialized sessionKey provided")
|
|
41
|
+
|
|
42
|
+
const modularPermissionPlugin = await toPermissionValidator(client, {
|
|
43
|
+
signer,
|
|
44
|
+
policies: await Promise.all(
|
|
45
|
+
params.permissionParams.policies?.map((policy) =>
|
|
46
|
+
createPolicyFromParams(policy)
|
|
47
|
+
) || []
|
|
48
|
+
),
|
|
49
|
+
entryPoint: entryPointAddress
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const { index, validatorInitData } = decodeParamsFromInitCode(
|
|
53
|
+
params.accountParams.initCode
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
const kernelPluginManager = await toKernelPluginManager<entryPoint>(
|
|
57
|
+
client,
|
|
58
|
+
{
|
|
59
|
+
regular: modularPermissionPlugin,
|
|
60
|
+
pluginEnableSignature: params.enableSignature,
|
|
61
|
+
validatorInitData,
|
|
62
|
+
action: params.action,
|
|
63
|
+
entryPoint: entryPointAddress,
|
|
64
|
+
...params.validityData
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
return createKernelAccount<entryPoint>(client, {
|
|
69
|
+
plugins: kernelPluginManager,
|
|
70
|
+
index,
|
|
71
|
+
deployedAccountAddress: params.accountParams.accountAddress,
|
|
72
|
+
entryPoint: entryPointAddress
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const createPolicyFromParams = async (policy: Policy) => {
|
|
77
|
+
switch (policy.policyParams.type) {
|
|
78
|
+
case "call":
|
|
79
|
+
return await toCallPolicy(policy.policyParams)
|
|
80
|
+
case "gas":
|
|
81
|
+
return await toGasPolicy(policy.policyParams)
|
|
82
|
+
case "rate-limit":
|
|
83
|
+
return await toRateLimitPolicy(policy.policyParams)
|
|
84
|
+
case "signature-caller":
|
|
85
|
+
return await toSignatureCallerPolicy(policy.policyParams)
|
|
86
|
+
case "sudo":
|
|
87
|
+
return await toSudoPolicy(policy.policyParams)
|
|
88
|
+
default:
|
|
89
|
+
throw new Error("Unsupported policy type")
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export const decodeParamsFromInitCode = (initCode: Hex) => {
|
|
94
|
+
let index: bigint | undefined
|
|
95
|
+
let validatorInitData: ValidatorInitData | undefined
|
|
96
|
+
const createAccountFunctionData = decodeFunctionData({
|
|
97
|
+
abi: KernelFactoryAbi,
|
|
98
|
+
data: `0x${initCode.slice(42)}`
|
|
99
|
+
})
|
|
100
|
+
if (!createAccountFunctionData) throw new Error("Invalid initCode")
|
|
101
|
+
if (createAccountFunctionData.functionName === "createAccount") {
|
|
102
|
+
index = createAccountFunctionData.args[2]
|
|
103
|
+
const initializeFunctionData = decodeFunctionData({
|
|
104
|
+
abi: KernelV3AccountAbi,
|
|
105
|
+
data: createAccountFunctionData.args[1]
|
|
106
|
+
})
|
|
107
|
+
if (!initializeFunctionData) throw new Error("Invalid initCode")
|
|
108
|
+
if (initializeFunctionData.functionName === "initialize") {
|
|
109
|
+
validatorInitData = {
|
|
110
|
+
validatorAddress: initializeFunctionData.args[0],
|
|
111
|
+
identifier: initializeFunctionData.args[0],
|
|
112
|
+
enableData: initializeFunctionData.args[2]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (index === undefined || validatorInitData === undefined)
|
|
117
|
+
throw new Error("Invalid initCode")
|
|
118
|
+
return { index, validatorInitData }
|
|
119
|
+
}
|
package/index.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type * from "./types.js"
|
|
2
|
+
export { toPermissionValidator } from "./toPermissionValidator.js"
|
|
3
|
+
export { serializePermissionAccount } from "./serializePermissionAccount.js"
|
|
4
|
+
export { deserializePermissionAccount } from "./deserializePermissionAccount.js"
|
|
5
|
+
export * from "./constants.js"
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zerodev/permissions",
|
|
3
|
+
"version": "5.2.1-alpha.0",
|
|
4
|
+
"author": "ZeroDev",
|
|
5
|
+
"main": "./_cjs/index.js",
|
|
6
|
+
"module": "./_esm/index.js",
|
|
7
|
+
"types": "./_types/index.d.ts",
|
|
8
|
+
"typings": "./_types/index.d.ts",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"files": [
|
|
13
|
+
"_esm",
|
|
14
|
+
"_cjs",
|
|
15
|
+
"_types",
|
|
16
|
+
"./**/*.ts",
|
|
17
|
+
"!_esm/**/*.tsbuildinfo",
|
|
18
|
+
"!_cjs/**/*.tsbuildinfo",
|
|
19
|
+
"!_types/**/*.tsbuildinfo",
|
|
20
|
+
"!.env",
|
|
21
|
+
"!./**/*.test.ts",
|
|
22
|
+
"!.changeset"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types",
|
|
26
|
+
"build:cjs": "tsc --project ./tsconfig.build.json --module commonjs --outDir ./_cjs --removeComments --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./_cjs/package.json",
|
|
27
|
+
"build:esm": "tsc --project ./tsconfig.build.json --module es2015 --outDir ./_esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./_esm/package.json",
|
|
28
|
+
"build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./_types --emitDeclarationOnly --declaration --declarationMap",
|
|
29
|
+
"clean": "rimraf _esm _cjs _types",
|
|
30
|
+
"changeset": "changeset",
|
|
31
|
+
"changeset:release": "bun run build && changeset publish",
|
|
32
|
+
"changeset:version": "changeset version && bun install --lockfile-only",
|
|
33
|
+
"format": "biome format . --write",
|
|
34
|
+
"lint": "biome check .",
|
|
35
|
+
"lint:fix": "bun run lint --apply"
|
|
36
|
+
},
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./_types/index.d.ts",
|
|
40
|
+
"import": "./_esm/index.js",
|
|
41
|
+
"default": "./_cjs/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./policies": {
|
|
44
|
+
"types": "./_types/policies/index.d.ts",
|
|
45
|
+
"import": "./_esm/policies/index.js",
|
|
46
|
+
"default": "./_cjs/policies/index.js"
|
|
47
|
+
},
|
|
48
|
+
"./signers": {
|
|
49
|
+
"types": "./_types/signers/index.d.ts",
|
|
50
|
+
"import": "./_esm/signers/index.js",
|
|
51
|
+
"default": "./_cjs/signers/index.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"merkletreejs": "^0.3.11",
|
|
56
|
+
"@simplewebauthn/browser": "^9.0.1"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"viem": "^2.0.0",
|
|
60
|
+
"@zerodev/sdk": "^5.2.1-alpha-0",
|
|
61
|
+
"permissionless": "^0.1.4"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Abi,
|
|
3
|
+
type AbiFunction,
|
|
4
|
+
type GetAbiItemParameters,
|
|
5
|
+
type Hex,
|
|
6
|
+
encodeAbiParameters,
|
|
7
|
+
getAbiItem,
|
|
8
|
+
isHex,
|
|
9
|
+
pad,
|
|
10
|
+
toFunctionSelector,
|
|
11
|
+
toHex
|
|
12
|
+
} from "viem"
|
|
13
|
+
import type {
|
|
14
|
+
CombinedArgs,
|
|
15
|
+
GeneratePermissionFromArgsParameters,
|
|
16
|
+
ParamRule,
|
|
17
|
+
PermissionCore
|
|
18
|
+
} from "./types.js"
|
|
19
|
+
|
|
20
|
+
export function getPermissionFromABI<
|
|
21
|
+
TAbi extends Abi | readonly unknown[],
|
|
22
|
+
TFunctionName extends string | undefined = string
|
|
23
|
+
>({
|
|
24
|
+
abi,
|
|
25
|
+
args,
|
|
26
|
+
functionName
|
|
27
|
+
}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Pick<
|
|
28
|
+
PermissionCore,
|
|
29
|
+
"selector" | "rules"
|
|
30
|
+
> {
|
|
31
|
+
if (!abi || !functionName) {
|
|
32
|
+
return {
|
|
33
|
+
selector: undefined,
|
|
34
|
+
rules: undefined
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const abiItem = getAbiItem({
|
|
38
|
+
abi,
|
|
39
|
+
args,
|
|
40
|
+
name: functionName
|
|
41
|
+
} as GetAbiItemParameters)
|
|
42
|
+
if (abiItem?.type !== "function") {
|
|
43
|
+
throw Error(`${functionName} not found in abi`)
|
|
44
|
+
}
|
|
45
|
+
const functionSelector = toFunctionSelector(abiItem)
|
|
46
|
+
let paramRules: ParamRule[] = []
|
|
47
|
+
if (args && Array.isArray(args)) {
|
|
48
|
+
paramRules = (args as CombinedArgs<AbiFunction["inputs"]>)
|
|
49
|
+
.map(
|
|
50
|
+
(arg, i) =>
|
|
51
|
+
arg && {
|
|
52
|
+
param: pad(
|
|
53
|
+
isHex(arg.value)
|
|
54
|
+
? arg.value
|
|
55
|
+
: toHex(
|
|
56
|
+
arg.value as Parameters<typeof toHex>[0]
|
|
57
|
+
),
|
|
58
|
+
{ size: 32 }
|
|
59
|
+
),
|
|
60
|
+
offset: i * 32,
|
|
61
|
+
condition: arg.condition
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
.filter((rule) => rule) as ParamRule[]
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
selector: functionSelector,
|
|
68
|
+
rules: paramRules
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const encodePermissionData = (
|
|
73
|
+
permission: PermissionCore | PermissionCore[]
|
|
74
|
+
): Hex => {
|
|
75
|
+
const permissionParam = {
|
|
76
|
+
components: [
|
|
77
|
+
{
|
|
78
|
+
internalType: "enum CallType",
|
|
79
|
+
name: "callType",
|
|
80
|
+
type: "bytes1"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "target",
|
|
84
|
+
type: "address"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "selector",
|
|
88
|
+
type: "bytes4"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "valueLimit",
|
|
92
|
+
type: "uint256"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
components: [
|
|
96
|
+
{
|
|
97
|
+
internalType: "enum ParamCondition",
|
|
98
|
+
name: "condition",
|
|
99
|
+
type: "uint8"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "offset",
|
|
103
|
+
type: "uint64"
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
{
|
|
107
|
+
name: "param",
|
|
108
|
+
type: "bytes32"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
name: "rules",
|
|
112
|
+
type: "tuple[]"
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
name: "permission",
|
|
116
|
+
type: "tuple[]"
|
|
117
|
+
}
|
|
118
|
+
const params = [permissionParam]
|
|
119
|
+
const values = [permission]
|
|
120
|
+
|
|
121
|
+
return encodeAbiParameters(params, values)
|
|
122
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { toGasPolicy, type GasPolicyParams } from "./toGasPolicy.js"
|
|
2
|
+
export {
|
|
3
|
+
toSignatureCallerPolicy,
|
|
4
|
+
type SignatureCallerPolicyParams
|
|
5
|
+
} from "./toSignatureCallerPolicy.js"
|
|
6
|
+
export {
|
|
7
|
+
toRateLimitPolicy,
|
|
8
|
+
type RateLimitPolicyParams
|
|
9
|
+
} from "./toRateLimitPolicy.js"
|
|
10
|
+
export { toCallPolicy, type CallPolicyParams } from "./toCallPolicy.js"
|
|
11
|
+
export { toPolicyId } from "./utils/toPolicyId.js"
|
|
12
|
+
export { toSudoPolicy, type SudoPolicyParams } from "./toSudoPolicy.js"
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Abi } from "viem"
|
|
2
|
+
import { concatHex, pad } from "viem"
|
|
3
|
+
import { PolicyFlags } from "../constants.js"
|
|
4
|
+
import { CALL_POLICY_CONTRACT } from "../constants.js"
|
|
5
|
+
import type { Policy, PolicyParams } from "../types.js"
|
|
6
|
+
import {
|
|
7
|
+
encodePermissionData,
|
|
8
|
+
getPermissionFromABI
|
|
9
|
+
} from "./callPolicyUtils.js"
|
|
10
|
+
import { CallType, type Permission } from "./types.js"
|
|
11
|
+
|
|
12
|
+
export type CallPolicyParams<
|
|
13
|
+
TAbi extends Abi | readonly unknown[],
|
|
14
|
+
TFunctionName extends string | undefined = string
|
|
15
|
+
> = PolicyParams & {
|
|
16
|
+
permissions?: Permission<TAbi, TFunctionName>[]
|
|
17
|
+
type?: "call"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function toCallPolicy<
|
|
21
|
+
TAbi extends Abi | readonly unknown[],
|
|
22
|
+
TFunctionName extends string | undefined = string
|
|
23
|
+
>({
|
|
24
|
+
policyAddress = CALL_POLICY_CONTRACT,
|
|
25
|
+
policyFlag = PolicyFlags.FOR_ALL_VALIDATION,
|
|
26
|
+
permissions = [],
|
|
27
|
+
type = "call"
|
|
28
|
+
}: CallPolicyParams<TAbi, TFunctionName>): Promise<Policy> {
|
|
29
|
+
const generatedPermissionParams = permissions?.map((perm) =>
|
|
30
|
+
getPermissionFromABI({
|
|
31
|
+
abi: perm.abi as Abi,
|
|
32
|
+
functionName: perm.functionName as string,
|
|
33
|
+
args: perm.args as []
|
|
34
|
+
})
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
permissions =
|
|
38
|
+
permissions?.map((perm, index) => ({
|
|
39
|
+
...perm,
|
|
40
|
+
callType: perm.callType ?? CallType.CALL,
|
|
41
|
+
selector:
|
|
42
|
+
perm.selector ??
|
|
43
|
+
generatedPermissionParams?.[index]?.selector ??
|
|
44
|
+
pad("0x", { size: 4 }),
|
|
45
|
+
valueLimit: perm.valueLimit ?? 0n,
|
|
46
|
+
rules: perm.rules ?? generatedPermissionParams?.[index]?.rules ?? []
|
|
47
|
+
})) ?? []
|
|
48
|
+
|
|
49
|
+
const encodedPermissionData = encodePermissionData(permissions)
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
getPolicyData: () => {
|
|
53
|
+
return encodedPermissionData
|
|
54
|
+
},
|
|
55
|
+
getPolicyInfoInBytes: () => {
|
|
56
|
+
return concatHex([policyFlag, policyAddress])
|
|
57
|
+
},
|
|
58
|
+
policyParams: {
|
|
59
|
+
type,
|
|
60
|
+
policyAddress,
|
|
61
|
+
policyFlag,
|
|
62
|
+
permissions
|
|
63
|
+
} as unknown as CallPolicyParams<Abi | readonly unknown[], string>
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Address, concatHex, encodeAbiParameters, zeroAddress } from "viem"
|
|
2
|
+
import { PolicyFlags } from "../constants.js"
|
|
3
|
+
import { GAS_POLICY_CONTRACT } from "../constants.js"
|
|
4
|
+
import type { Policy, PolicyParams } from "../types.js"
|
|
5
|
+
|
|
6
|
+
export type GasPolicyParams = PolicyParams & {
|
|
7
|
+
allowed: bigint
|
|
8
|
+
enforcePaymaster?: boolean
|
|
9
|
+
allowedPaymaster?: Address
|
|
10
|
+
type?: "gas"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function toGasPolicy({
|
|
14
|
+
policyAddress = GAS_POLICY_CONTRACT,
|
|
15
|
+
policyFlag = PolicyFlags.FOR_ALL_VALIDATION,
|
|
16
|
+
allowed,
|
|
17
|
+
enforcePaymaster = false,
|
|
18
|
+
allowedPaymaster = zeroAddress,
|
|
19
|
+
type = "gas"
|
|
20
|
+
}: GasPolicyParams): Promise<Policy> {
|
|
21
|
+
return {
|
|
22
|
+
getPolicyData: () => {
|
|
23
|
+
return encodeAbiParameters(
|
|
24
|
+
[
|
|
25
|
+
{ name: "allowed", type: "uint128" },
|
|
26
|
+
{ name: "enforcePaymaster", type: "bool" },
|
|
27
|
+
{ name: "allowedPaymaster", type: "address" }
|
|
28
|
+
],
|
|
29
|
+
[allowed, enforcePaymaster, allowedPaymaster]
|
|
30
|
+
)
|
|
31
|
+
},
|
|
32
|
+
getPolicyInfoInBytes: () => {
|
|
33
|
+
return concatHex([policyFlag, policyAddress])
|
|
34
|
+
},
|
|
35
|
+
policyParams: {
|
|
36
|
+
type,
|
|
37
|
+
policyAddress,
|
|
38
|
+
policyFlag,
|
|
39
|
+
allowed,
|
|
40
|
+
enforcePaymaster,
|
|
41
|
+
allowedPaymaster
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|