@settlemint/sdk-eas 2.3.2-pr37d1321f → 2.3.2-pr3dad35bd

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/README.md CHANGED
@@ -61,7 +61,13 @@ Creates an EAS client for interacting with the Ethereum Attestation Service.
61
61
 
62
62
  | Parameter | Type | Description |
63
63
  | ------ | ------ | ------ |
64
- | `options` | [`ClientOptions`](#clientoptions) | Configuration options for the client |
64
+ | `options` | \{ `accessToken`: `string`; `attestationAddress`: `string`; `chainId`: `string`; `chainName`: `string`; `rpcUrl`: `string`; `schemaRegistryAddress`: `string`; \} | Configuration options for the client |
65
+ | `options.accessToken` | `string` | Access token for the RPC provider (must start with 'sm_aat_' or 'sm_pat_') |
66
+ | `options.attestationAddress` | `string` | The address of the EAS Attestation contract |
67
+ | `options.chainId` | `string` | The chain ID to connect to |
68
+ | `options.chainName` | `string` | The name of the chain to connect to |
69
+ | `options.rpcUrl` | `string` | The RPC URL to connect to (must be a valid URL) |
70
+ | `options.schemaRegistryAddress` | `string` | The address of the EAS Schema Registry contract |
65
71
 
66
72
  ##### Returns
67
73
 
@@ -129,9 +135,9 @@ Represents a single field in an EAS schema.
129
135
 
130
136
  #### ClientOptions
131
137
 
132
- > **ClientOptions** = `z.infer`\<*typeof* [`ClientOptionsSchema`](#clientoptionsschema)\> & `Pick`\<`ViemClientOptions`, `"accessToken"` \| `"chainId"` \| `"chainName"` \| `"rpcUrl"`\>
138
+ > **ClientOptions** = `z.infer`\<*typeof* [`ClientOptionsSchema`](#clientoptionsschema)\>
133
139
 
134
- Defined in: [sdk/eas/src/client-options.schema.ts:29](https://github.com/settlemint/sdk/blob/v2.3.2/sdk/eas/src/client-options.schema.ts#L29)
140
+ Defined in: [sdk/eas/src/client-options.schema.ts:28](https://github.com/settlemint/sdk/blob/v2.3.2/sdk/eas/src/client-options.schema.ts#L28)
135
141
 
136
142
  Configuration options for creating an EAS client.
137
143
  Combines EAS-specific options with base Viem client options.
@@ -142,7 +148,7 @@ Combines EAS-specific options with base Viem client options.
142
148
 
143
149
  > `const` **ClientOptionsSchema**: `ZodObject`\<\{ `accessToken`: `ZodString`; `attestationAddress`: `ZodString`; `chainId`: `ZodString`; `chainName`: `ZodString`; `rpcUrl`: `ZodString`; `schemaRegistryAddress`: `ZodString`; \}, `$strip`\>
144
150
 
145
- Defined in: [sdk/eas/src/client-options.schema.ts:10](https://github.com/settlemint/sdk/blob/v2.3.2/sdk/eas/src/client-options.schema.ts#L10)
151
+ Defined in: [sdk/eas/src/client-options.schema.ts:9](https://github.com/settlemint/sdk/blob/v2.3.2/sdk/eas/src/client-options.schema.ts#L9)
146
152
 
147
153
  Schema for validating EAS client configuration options.
148
154
  Extends the base Viem client options with EAS-specific requirements.
package/dist/eas.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var easSdk=require('@ethereum-attestation-service/eas-sdk'),validation=require('@settlemint/sdk-utils/validation'),sdkViem=require('@settlemint/sdk-viem'),viem=require('viem'),v4=require('zod/v4'),ethers=require('ethers');var u=v4.z.object({schemaRegistryAddress:v4.z.string().refine(viem.isAddress,"Invalid Ethereum address format"),attestationAddress:v4.z.string().refine(viem.isAddress,"Invalid Ethereum address format"),accessToken:validation.AccessTokenSchema,chainId:v4.z.string().min(1),chainName:v4.z.string().min(1),rpcUrl:validation.UrlSchema});function y(e){let{chain:t,transport:r}=e;if(!t)throw new Error("Chain is required");let n={chainId:t.id,name:t.name,ensAddress:t.contracts?.ensRegistry?.address};if(r.type==="fallback"){let s=r.transports.map(({value:i})=>{if(!i?.url)return null;try{return new ethers.JsonRpcProvider(i.url,n)}catch{return null}}).filter(i=>i!=null);if(s.length===0)throw new Error("No valid RPC URLs found");return s[0]}return new ethers.JsonRpcProvider(r.url,n)}function g(e){let{account:t,chain:r,transport:n}=e;if(!r)throw new Error("Chain is required");if(!t)throw new Error("Account is required");let s={chainId:r.id,name:r.name,ensAddress:r.contracts?.ensRegistry?.address},i=new ethers.JsonRpcProvider(n.url,s),o=t.privateKey;if(!o||typeof o!="string")throw new Error("Private key is required and must be a string");return new ethers.Wallet(o,i)}var d={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function b(e){if(!e)throw new Error("Field name cannot be empty");if(e.includes(" "))throw new Error("Field name cannot contain spaces");if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error("Field name must start with a letter or underscore and contain only alphanumeric characters and underscores")}function F(e){if(!(e in d))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(d).join(", ")}`)}function h(e){if(!e||e.length===0)throw new Error("Schema must have at least one field");let t=new Set;for(let r of e){if(b(r.name),F(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function w(e){return h(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function K(e){validation.validate(u,e);let t=sdkViem.getPublicClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl}),r=sdkViem.getWalletClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl})(),n=y(t),s=g(r),i=new easSdk.SchemaRegistry(e.schemaRegistryAddress);i.connect(s);async function o(a){h(a.fields);let m=w(a.fields);try{await n.getNetwork();let c=await i.register({schema:m,resolverAddress:a.resolverAddress,revocable:a.revocable});return await c.wait(),c.toString()}catch(c){throw new Error(`Failed to register schema: ${c.message}`,{cause:c})}}async function S(a){try{return await n.getNetwork(),(await i.getSchema({uid:a})).toString()}catch(m){throw new Error(`Failed to get schema: ${m.message}`)}}return {registerSchema:o,getSchema:S}}exports.EAS_FIELD_TYPES=d;exports.createEASClient=K;//# sourceMappingURL=eas.cjs.map
1
+ 'use strict';var easSdk=require('@ethereum-attestation-service/eas-sdk'),validation=require('@settlemint/sdk-utils/validation'),sdkViem=require('@settlemint/sdk-viem'),viem=require('viem'),v4=require('zod/v4'),ethers=require('ethers');var u=v4.z.object({schemaRegistryAddress:v4.z.string().refine(viem.isAddress,"Invalid Ethereum address format"),attestationAddress:v4.z.string().refine(viem.isAddress,"Invalid Ethereum address format"),accessToken:validation.AccessTokenSchema,chainId:v4.z.string().min(1),chainName:v4.z.string().min(1),rpcUrl:validation.UrlSchema});function y(e){let{chain:t,transport:r}=e;if(!t)throw new Error("Chain is required");let n={chainId:t.id,name:t.name,ensAddress:t.contracts?.ensRegistry?.address};if(r.type==="fallback"){let a=r.transports.map(({value:i})=>{if(!i?.url)return null;try{return new ethers.JsonRpcProvider(i.url,n)}catch{return null}}).filter(i=>i!=null);if(a.length===0)throw new Error("No valid RPC URLs found");return a[0]}return new ethers.JsonRpcProvider(r.url,n)}function g(e){let{account:t,chain:r,transport:n}=e;if(!r)throw new Error("Chain is required");if(!t)throw new Error("Account is required");let a={chainId:r.id,name:r.name,ensAddress:r.contracts?.ensRegistry?.address},i=new ethers.JsonRpcProvider(n.url,a),o=t.privateKey;if(!o||typeof o!="string")throw new Error("Private key is required and must be a string");return new ethers.Wallet(o,i)}var d={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function C(e){if(!e)throw new Error("Field name cannot be empty");if(e.includes(" "))throw new Error("Field name cannot contain spaces");if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error("Field name must start with a letter or underscore and contain only alphanumeric characters and underscores")}function F(e){if(!(e in d))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(d).join(", ")}`)}function h(e){if(!e||e.length===0)throw new Error("Schema must have at least one field");let t=new Set;for(let r of e){if(C(r.name),F(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function w(e){return h(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function K(e){validation.validate(u,e);let t=sdkViem.getPublicClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl}),r=sdkViem.getWalletClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl})(),n=y(t),a=g(r),i=new easSdk.SchemaRegistry(e.schemaRegistryAddress);i.connect(a);async function o(s){h(s.fields);let m=w(s.fields);try{await n.getNetwork();let c=await i.register({schema:m,resolverAddress:s.resolverAddress,revocable:s.revocable});return await c.wait(),c.toString()}catch(c){throw new Error(`Failed to register schema: ${c.message}`,{cause:c})}}async function S(s){try{return await n.getNetwork(),(await i.getSchema({uid:s})).toString()}catch(m){throw new Error(`Failed to get schema: ${m.message}`)}}return {registerSchema:o,getSchema:S}}exports.EAS_FIELD_TYPES=d;exports.createEASClient=K;//# sourceMappingURL=eas.cjs.map
2
2
  //# sourceMappingURL=eas.cjs.map
package/dist/eas.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client-options.schema.ts","../src/ethers-adapter.ts","../src/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","isAddress","AccessTokenSchema","UrlSchema","publicClientToProvider","client","chain","transport","network","providers","value","JsonRpcProvider","provider","walletClientToSigner","account","privateKey","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","publicClient","getPublicClient","walletClient","getWalletClient","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.cjs","sourcesContent":["import { AccessTokenSchema, UrlSchema } from \"@settlemint/sdk-utils/validation\";\nimport type { ClientOptions as ViemClientOptions } from \"@settlemint/sdk-viem\";\nimport { isAddress } from \"viem\";\nimport { z } from \"zod/v4\";\n\n/**\n * Schema for validating EAS client configuration options.\n * Extends the base Viem client options with EAS-specific requirements.\n */\nexport const ClientOptionsSchema = z.object({\n /** The address of the EAS Schema Registry contract */\n schemaRegistryAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** The address of the EAS Attestation contract */\n attestationAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** Access token for the RPC provider (must start with 'sm_aat_' or 'sm_pat_') */\n accessToken: AccessTokenSchema,\n /** The chain ID to connect to */\n chainId: z.string().min(1),\n /** The name of the chain to connect to */\n chainName: z.string().min(1),\n /** The RPC URL to connect to (must be a valid URL) */\n rpcUrl: UrlSchema,\n});\n\n/**\n * Configuration options for creating an EAS client.\n * Combines EAS-specific options with base Viem client options.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema> &\n Pick<ViemClientOptions, \"accessToken\" | \"chainId\" | \"chainName\" | \"rpcUrl\">;\n","import { JsonRpcProvider, type Provider, Wallet } from \"ethers\";\nimport type { PublicClient, Transport, WalletClient } from \"viem\";\n\n/**\n * Converts a viem PublicClient to an ethers JsonRpcProvider\n */\nexport function publicClientToProvider(client: PublicClient): Provider {\n const { chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n if (transport.type === \"fallback\") {\n const providers = (transport.transports as ReturnType<Transport>[])\n .map(({ value }) => {\n if (!value?.url) return null;\n try {\n return new JsonRpcProvider(value.url, network);\n } catch {\n return null;\n }\n })\n .filter((provider): provider is JsonRpcProvider => provider != null);\n\n if (providers.length === 0) throw new Error(\"No valid RPC URLs found\");\n // We know providers[0] exists because we checked length > 0\n return providers[0] as Provider;\n }\n\n return new JsonRpcProvider(transport.url, network);\n}\n\n/**\n * Converts a viem WalletClient to an ethers Wallet\n */\nexport function walletClientToSigner(client: WalletClient): Wallet {\n const { account, chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n if (!account) throw new Error(\"Account is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n const provider = new JsonRpcProvider(transport.url, network);\n\n // For viem, we need to get the private key from the account\n const privateKey = (account as { privateKey?: string }).privateKey;\n if (!privateKey || typeof privateKey !== \"string\") {\n throw new Error(\"Private key is required and must be a string\");\n }\n\n return new Wallet(privateKey, provider);\n}\n","/**\n * Supported field types for EAS schema fields.\n * Maps to the Solidity types that can be used in EAS schemas.\n */\nexport const EAS_FIELD_TYPES = {\n string: \"string\",\n address: \"address\",\n bool: \"bool\",\n bytes: \"bytes\",\n bytes32: \"bytes32\",\n uint256: \"uint256\",\n int256: \"int256\",\n uint8: \"uint8\",\n int8: \"int8\",\n} as const;\n\nexport type EASFieldType = keyof typeof EAS_FIELD_TYPES;\n\n/**\n * Represents a single field in an EAS schema.\n */\nexport interface SchemaField {\n /** The name of the field */\n name: string;\n /** The Solidity type of the field */\n type: EASFieldType;\n /** Optional description of the field's purpose */\n description?: string;\n}\n\n/**\n * Options for registering a new schema in the EAS Schema Registry.\n */\nexport interface RegisterSchemaOptions {\n /** Array of fields that make up the schema */\n fields: SchemaField[];\n /** Address of the resolver contract that will handle attestations */\n resolverAddress: string;\n /** Whether attestations using this schema can be revoked */\n revocable: boolean;\n}\n","import { type EASFieldType, EAS_FIELD_TYPES, type SchemaField } from \"./types.js\";\n\nexport function validateFieldName(name: string): void {\n if (!name) {\n throw new Error(\"Field name cannot be empty\");\n }\n if (name.includes(\" \")) {\n throw new Error(\"Field name cannot contain spaces\");\n }\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n \"Field name must start with a letter or underscore and contain only alphanumeric characters and underscores\",\n );\n }\n}\n\nexport function validateFieldType(type: string): asserts type is EASFieldType {\n if (!(type in EAS_FIELD_TYPES)) {\n throw new Error(`Invalid field type: ${type}. Must be one of: ${Object.keys(EAS_FIELD_TYPES).join(\", \")}`);\n }\n}\n\nexport function validateSchemaFields(fields: SchemaField[]): void {\n if (!fields || fields.length === 0) {\n throw new Error(\"Schema must have at least one field\");\n }\n\n const seenNames = new Set<string>();\n for (const field of fields) {\n validateFieldName(field.name);\n validateFieldType(field.type);\n\n if (seenNames.has(field.name)) {\n throw new Error(`Duplicate field name: ${field.name}`);\n }\n seenNames.add(field.name);\n }\n}\n\nexport function buildSchemaString(fields: SchemaField[]): string {\n validateSchemaFields(fields);\n return fields.map((field) => `${field.type} ${field.name}`).join(\", \");\n}\n","import { SchemaRegistry } from \"@ethereum-attestation-service/eas-sdk\";\nimport { validate } from \"@settlemint/sdk-utils/validation\";\nimport { getPublicClient, getWalletClient } from \"@settlemint/sdk-viem\";\nimport type { PublicClient } from \"viem\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport { publicClientToProvider, walletClientToSigner } from \"./ethers-adapter.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.js\";\n\n// Re-export types and constants\nexport type { ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nexport type { RegisterSchemaOptions, SchemaField, EASFieldType } from \"./types.js\";\nexport { EAS_FIELD_TYPES } from \"./types.js\";\n\n/**\n * Creates an EAS client for interacting with the Ethereum Attestation Service.\n *\n * @param options - Configuration options for the client\n * @returns An object containing the EAS client instance\n * @throws Will throw an error if the options fail validation\n *\n * @example\n * ```ts\n * import { createEASClient } from '@settlemint/sdk-eas';\n *\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * accessToken: \"your-access-token\",\n * chainId: \"1\",\n * chainName: \"Ethereum\",\n * rpcUrl: \"http://localhost:8545\"\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n // Create viem clients\n const publicClient = getPublicClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n }) as PublicClient;\n\n const walletClient = getWalletClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n })();\n\n // Convert to ethers for EAS SDK\n const provider = publicClientToProvider(publicClient);\n const wallet = walletClientToSigner(walletClient);\n\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n schemaRegistry.connect(wallet);\n\n async function registerSchema(options: RegisterSchemaOptions): Promise<string> {\n validateSchemaFields(options.fields);\n const schema = buildSchemaString(options.fields);\n\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const tx = await schemaRegistry.register({\n schema,\n resolverAddress: options.resolverAddress,\n revocable: options.revocable,\n });\n\n await tx.wait();\n return tx.toString();\n } catch (error) {\n throw new Error(`Failed to register schema: ${(error as Error).message}`, { cause: error });\n }\n }\n\n async function getSchema(uid: string): Promise<string> {\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const schema = await schemaRegistry.getSchema({ uid });\n return schema.toString();\n } catch (error) {\n throw new Error(`Failed to get schema: ${(error as Error).message}`);\n }\n }\n\n return {\n registerSchema,\n getSchema,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/client-options.schema.ts","../src/ethers-adapter.ts","../src/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","isAddress","AccessTokenSchema","UrlSchema","publicClientToProvider","client","chain","transport","network","providers","value","JsonRpcProvider","provider","walletClientToSigner","account","privateKey","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","publicClient","getPublicClient","walletClient","getWalletClient","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.cjs","sourcesContent":["import { AccessTokenSchema, UrlSchema } from \"@settlemint/sdk-utils/validation\";\nimport { isAddress } from \"viem\";\nimport { z } from \"zod/v4\";\n\n/**\n * Schema for validating EAS client configuration options.\n * Extends the base Viem client options with EAS-specific requirements.\n */\nexport const ClientOptionsSchema = z.object({\n /** The address of the EAS Schema Registry contract */\n schemaRegistryAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** The address of the EAS Attestation contract */\n attestationAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** Access token for the RPC provider (must start with 'sm_aat_' or 'sm_pat_') */\n accessToken: AccessTokenSchema,\n /** The chain ID to connect to */\n chainId: z.string().min(1),\n /** The name of the chain to connect to */\n chainName: z.string().min(1),\n /** The RPC URL to connect to (must be a valid URL) */\n rpcUrl: UrlSchema,\n});\n\n/**\n * Configuration options for creating an EAS client.\n * Combines EAS-specific options with base Viem client options.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","import { JsonRpcProvider, type Provider, Wallet } from \"ethers\";\nimport type { PublicClient, Transport, WalletClient } from \"viem\";\n\n/**\n * Converts a viem PublicClient to an ethers JsonRpcProvider\n */\nexport function publicClientToProvider(client: PublicClient): Provider {\n const { chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n if (transport.type === \"fallback\") {\n const providers = (transport.transports as ReturnType<Transport>[])\n .map(({ value }) => {\n if (!value?.url) return null;\n try {\n return new JsonRpcProvider(value.url, network);\n } catch {\n return null;\n }\n })\n .filter((provider): provider is JsonRpcProvider => provider != null);\n\n if (providers.length === 0) throw new Error(\"No valid RPC URLs found\");\n // We know providers[0] exists because we checked length > 0\n return providers[0] as Provider;\n }\n\n return new JsonRpcProvider(transport.url, network);\n}\n\n/**\n * Converts a viem WalletClient to an ethers Wallet\n */\nexport function walletClientToSigner(client: WalletClient): Wallet {\n const { account, chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n if (!account) throw new Error(\"Account is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n const provider = new JsonRpcProvider(transport.url, network);\n\n // For viem, we need to get the private key from the account\n const privateKey = (account as { privateKey?: string }).privateKey;\n if (!privateKey || typeof privateKey !== \"string\") {\n throw new Error(\"Private key is required and must be a string\");\n }\n\n return new Wallet(privateKey, provider);\n}\n","/**\n * Supported field types for EAS schema fields.\n * Maps to the Solidity types that can be used in EAS schemas.\n */\nexport const EAS_FIELD_TYPES = {\n string: \"string\",\n address: \"address\",\n bool: \"bool\",\n bytes: \"bytes\",\n bytes32: \"bytes32\",\n uint256: \"uint256\",\n int256: \"int256\",\n uint8: \"uint8\",\n int8: \"int8\",\n} as const;\n\nexport type EASFieldType = keyof typeof EAS_FIELD_TYPES;\n\n/**\n * Represents a single field in an EAS schema.\n */\nexport interface SchemaField {\n /** The name of the field */\n name: string;\n /** The Solidity type of the field */\n type: EASFieldType;\n /** Optional description of the field's purpose */\n description?: string;\n}\n\n/**\n * Options for registering a new schema in the EAS Schema Registry.\n */\nexport interface RegisterSchemaOptions {\n /** Array of fields that make up the schema */\n fields: SchemaField[];\n /** Address of the resolver contract that will handle attestations */\n resolverAddress: string;\n /** Whether attestations using this schema can be revoked */\n revocable: boolean;\n}\n","import { type EASFieldType, EAS_FIELD_TYPES, type SchemaField } from \"./types.js\";\n\nexport function validateFieldName(name: string): void {\n if (!name) {\n throw new Error(\"Field name cannot be empty\");\n }\n if (name.includes(\" \")) {\n throw new Error(\"Field name cannot contain spaces\");\n }\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n \"Field name must start with a letter or underscore and contain only alphanumeric characters and underscores\",\n );\n }\n}\n\nexport function validateFieldType(type: string): asserts type is EASFieldType {\n if (!(type in EAS_FIELD_TYPES)) {\n throw new Error(`Invalid field type: ${type}. Must be one of: ${Object.keys(EAS_FIELD_TYPES).join(\", \")}`);\n }\n}\n\nexport function validateSchemaFields(fields: SchemaField[]): void {\n if (!fields || fields.length === 0) {\n throw new Error(\"Schema must have at least one field\");\n }\n\n const seenNames = new Set<string>();\n for (const field of fields) {\n validateFieldName(field.name);\n validateFieldType(field.type);\n\n if (seenNames.has(field.name)) {\n throw new Error(`Duplicate field name: ${field.name}`);\n }\n seenNames.add(field.name);\n }\n}\n\nexport function buildSchemaString(fields: SchemaField[]): string {\n validateSchemaFields(fields);\n return fields.map((field) => `${field.type} ${field.name}`).join(\", \");\n}\n","import { SchemaRegistry } from \"@ethereum-attestation-service/eas-sdk\";\nimport { validate } from \"@settlemint/sdk-utils/validation\";\nimport { getPublicClient, getWalletClient } from \"@settlemint/sdk-viem\";\nimport type { PublicClient } from \"viem\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport { publicClientToProvider, walletClientToSigner } from \"./ethers-adapter.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.js\";\n\n// Re-export types and constants\nexport type { ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nexport type { RegisterSchemaOptions, SchemaField, EASFieldType } from \"./types.js\";\nexport { EAS_FIELD_TYPES } from \"./types.js\";\n\n/**\n * Creates an EAS client for interacting with the Ethereum Attestation Service.\n *\n * @param options - Configuration options for the client\n * @returns An object containing the EAS client instance\n * @throws Will throw an error if the options fail validation\n *\n * @example\n * ```ts\n * import { createEASClient } from '@settlemint/sdk-eas';\n *\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * accessToken: \"your-access-token\",\n * chainId: \"1\",\n * chainName: \"Ethereum\",\n * rpcUrl: \"http://localhost:8545\"\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n // Create viem clients\n const publicClient = getPublicClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n }) as PublicClient;\n\n const walletClient = getWalletClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n })();\n\n // Convert to ethers for EAS SDK\n const provider = publicClientToProvider(publicClient);\n const wallet = walletClientToSigner(walletClient);\n\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n schemaRegistry.connect(wallet);\n\n async function registerSchema(options: RegisterSchemaOptions): Promise<string> {\n validateSchemaFields(options.fields);\n const schema = buildSchemaString(options.fields);\n\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const tx = await schemaRegistry.register({\n schema,\n resolverAddress: options.resolverAddress,\n revocable: options.revocable,\n });\n\n await tx.wait();\n return tx.toString();\n } catch (error) {\n throw new Error(`Failed to register schema: ${(error as Error).message}`, { cause: error });\n }\n }\n\n async function getSchema(uid: string): Promise<string> {\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const schema = await schemaRegistry.getSchema({ uid });\n return schema.toString();\n } catch (error) {\n throw new Error(`Failed to get schema: ${(error as Error).message}`);\n }\n }\n\n return {\n registerSchema,\n getSchema,\n };\n}\n"]}
package/dist/eas.d.cts CHANGED
@@ -1,4 +1,3 @@
1
- import { ClientOptions as ClientOptions$1 } from '@settlemint/sdk-viem';
2
1
  import { z } from 'zod/v4';
3
2
 
4
3
  /**
@@ -17,7 +16,7 @@ declare const ClientOptionsSchema: z.ZodObject<{
17
16
  * Configuration options for creating an EAS client.
18
17
  * Combines EAS-specific options with base Viem client options.
19
18
  */
20
- type ClientOptions = z.infer<typeof ClientOptionsSchema> & Pick<ClientOptions$1, "accessToken" | "chainId" | "chainName" | "rpcUrl">;
19
+ type ClientOptions = z.infer<typeof ClientOptionsSchema>;
21
20
 
22
21
  /**
23
22
  * Supported field types for EAS schema fields.
package/dist/eas.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { ClientOptions as ClientOptions$1 } from '@settlemint/sdk-viem';
2
1
  import { z } from 'zod/v4';
3
2
 
4
3
  /**
@@ -17,7 +16,7 @@ declare const ClientOptionsSchema: z.ZodObject<{
17
16
  * Configuration options for creating an EAS client.
18
17
  * Combines EAS-specific options with base Viem client options.
19
18
  */
20
- type ClientOptions = z.infer<typeof ClientOptionsSchema> & Pick<ClientOptions$1, "accessToken" | "chainId" | "chainName" | "rpcUrl">;
19
+ type ClientOptions = z.infer<typeof ClientOptionsSchema>;
21
20
 
22
21
  /**
23
22
  * Supported field types for EAS schema fields.
package/dist/eas.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {SchemaRegistry}from'@ethereum-attestation-service/eas-sdk';import {UrlSchema,AccessTokenSchema,validate}from'@settlemint/sdk-utils/validation';import {getPublicClient,getWalletClient}from'@settlemint/sdk-viem';import {isAddress}from'viem';import {z}from'zod/v4';import {JsonRpcProvider,Wallet}from'ethers';var u=z.object({schemaRegistryAddress:z.string().refine(isAddress,"Invalid Ethereum address format"),attestationAddress:z.string().refine(isAddress,"Invalid Ethereum address format"),accessToken:AccessTokenSchema,chainId:z.string().min(1),chainName:z.string().min(1),rpcUrl:UrlSchema});function y(e){let{chain:t,transport:r}=e;if(!t)throw new Error("Chain is required");let n={chainId:t.id,name:t.name,ensAddress:t.contracts?.ensRegistry?.address};if(r.type==="fallback"){let s=r.transports.map(({value:i})=>{if(!i?.url)return null;try{return new JsonRpcProvider(i.url,n)}catch{return null}}).filter(i=>i!=null);if(s.length===0)throw new Error("No valid RPC URLs found");return s[0]}return new JsonRpcProvider(r.url,n)}function g(e){let{account:t,chain:r,transport:n}=e;if(!r)throw new Error("Chain is required");if(!t)throw new Error("Account is required");let s={chainId:r.id,name:r.name,ensAddress:r.contracts?.ensRegistry?.address},i=new JsonRpcProvider(n.url,s),o=t.privateKey;if(!o||typeof o!="string")throw new Error("Private key is required and must be a string");return new Wallet(o,i)}var d={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function b(e){if(!e)throw new Error("Field name cannot be empty");if(e.includes(" "))throw new Error("Field name cannot contain spaces");if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error("Field name must start with a letter or underscore and contain only alphanumeric characters and underscores")}function F(e){if(!(e in d))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(d).join(", ")}`)}function h(e){if(!e||e.length===0)throw new Error("Schema must have at least one field");let t=new Set;for(let r of e){if(b(r.name),F(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function w(e){return h(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function K(e){validate(u,e);let t=getPublicClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl}),r=getWalletClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl})(),n=y(t),s=g(r),i=new SchemaRegistry(e.schemaRegistryAddress);i.connect(s);async function o(a){h(a.fields);let m=w(a.fields);try{await n.getNetwork();let c=await i.register({schema:m,resolverAddress:a.resolverAddress,revocable:a.revocable});return await c.wait(),c.toString()}catch(c){throw new Error(`Failed to register schema: ${c.message}`,{cause:c})}}async function S(a){try{return await n.getNetwork(),(await i.getSchema({uid:a})).toString()}catch(m){throw new Error(`Failed to get schema: ${m.message}`)}}return {registerSchema:o,getSchema:S}}export{d as EAS_FIELD_TYPES,K as createEASClient};//# sourceMappingURL=eas.mjs.map
1
+ import {SchemaRegistry}from'@ethereum-attestation-service/eas-sdk';import {UrlSchema,AccessTokenSchema,validate}from'@settlemint/sdk-utils/validation';import {getPublicClient,getWalletClient}from'@settlemint/sdk-viem';import {isAddress}from'viem';import {z}from'zod/v4';import {JsonRpcProvider,Wallet}from'ethers';var u=z.object({schemaRegistryAddress:z.string().refine(isAddress,"Invalid Ethereum address format"),attestationAddress:z.string().refine(isAddress,"Invalid Ethereum address format"),accessToken:AccessTokenSchema,chainId:z.string().min(1),chainName:z.string().min(1),rpcUrl:UrlSchema});function y(e){let{chain:t,transport:r}=e;if(!t)throw new Error("Chain is required");let n={chainId:t.id,name:t.name,ensAddress:t.contracts?.ensRegistry?.address};if(r.type==="fallback"){let a=r.transports.map(({value:i})=>{if(!i?.url)return null;try{return new JsonRpcProvider(i.url,n)}catch{return null}}).filter(i=>i!=null);if(a.length===0)throw new Error("No valid RPC URLs found");return a[0]}return new JsonRpcProvider(r.url,n)}function g(e){let{account:t,chain:r,transport:n}=e;if(!r)throw new Error("Chain is required");if(!t)throw new Error("Account is required");let a={chainId:r.id,name:r.name,ensAddress:r.contracts?.ensRegistry?.address},i=new JsonRpcProvider(n.url,a),o=t.privateKey;if(!o||typeof o!="string")throw new Error("Private key is required and must be a string");return new Wallet(o,i)}var d={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function C(e){if(!e)throw new Error("Field name cannot be empty");if(e.includes(" "))throw new Error("Field name cannot contain spaces");if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error("Field name must start with a letter or underscore and contain only alphanumeric characters and underscores")}function F(e){if(!(e in d))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(d).join(", ")}`)}function h(e){if(!e||e.length===0)throw new Error("Schema must have at least one field");let t=new Set;for(let r of e){if(C(r.name),F(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function w(e){return h(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function K(e){validate(u,e);let t=getPublicClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl}),r=getWalletClient({accessToken:e.accessToken,chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl})(),n=y(t),a=g(r),i=new SchemaRegistry(e.schemaRegistryAddress);i.connect(a);async function o(s){h(s.fields);let m=w(s.fields);try{await n.getNetwork();let c=await i.register({schema:m,resolverAddress:s.resolverAddress,revocable:s.revocable});return await c.wait(),c.toString()}catch(c){throw new Error(`Failed to register schema: ${c.message}`,{cause:c})}}async function S(s){try{return await n.getNetwork(),(await i.getSchema({uid:s})).toString()}catch(m){throw new Error(`Failed to get schema: ${m.message}`)}}return {registerSchema:o,getSchema:S}}export{d as EAS_FIELD_TYPES,K as createEASClient};//# sourceMappingURL=eas.mjs.map
2
2
  //# sourceMappingURL=eas.mjs.map
package/dist/eas.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client-options.schema.ts","../src/ethers-adapter.ts","../src/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","isAddress","AccessTokenSchema","UrlSchema","publicClientToProvider","client","chain","transport","network","providers","value","JsonRpcProvider","provider","walletClientToSigner","account","privateKey","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","publicClient","getPublicClient","walletClient","getWalletClient","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.mjs","sourcesContent":["import { AccessTokenSchema, UrlSchema } from \"@settlemint/sdk-utils/validation\";\nimport type { ClientOptions as ViemClientOptions } from \"@settlemint/sdk-viem\";\nimport { isAddress } from \"viem\";\nimport { z } from \"zod/v4\";\n\n/**\n * Schema for validating EAS client configuration options.\n * Extends the base Viem client options with EAS-specific requirements.\n */\nexport const ClientOptionsSchema = z.object({\n /** The address of the EAS Schema Registry contract */\n schemaRegistryAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** The address of the EAS Attestation contract */\n attestationAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** Access token for the RPC provider (must start with 'sm_aat_' or 'sm_pat_') */\n accessToken: AccessTokenSchema,\n /** The chain ID to connect to */\n chainId: z.string().min(1),\n /** The name of the chain to connect to */\n chainName: z.string().min(1),\n /** The RPC URL to connect to (must be a valid URL) */\n rpcUrl: UrlSchema,\n});\n\n/**\n * Configuration options for creating an EAS client.\n * Combines EAS-specific options with base Viem client options.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema> &\n Pick<ViemClientOptions, \"accessToken\" | \"chainId\" | \"chainName\" | \"rpcUrl\">;\n","import { JsonRpcProvider, type Provider, Wallet } from \"ethers\";\nimport type { PublicClient, Transport, WalletClient } from \"viem\";\n\n/**\n * Converts a viem PublicClient to an ethers JsonRpcProvider\n */\nexport function publicClientToProvider(client: PublicClient): Provider {\n const { chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n if (transport.type === \"fallback\") {\n const providers = (transport.transports as ReturnType<Transport>[])\n .map(({ value }) => {\n if (!value?.url) return null;\n try {\n return new JsonRpcProvider(value.url, network);\n } catch {\n return null;\n }\n })\n .filter((provider): provider is JsonRpcProvider => provider != null);\n\n if (providers.length === 0) throw new Error(\"No valid RPC URLs found\");\n // We know providers[0] exists because we checked length > 0\n return providers[0] as Provider;\n }\n\n return new JsonRpcProvider(transport.url, network);\n}\n\n/**\n * Converts a viem WalletClient to an ethers Wallet\n */\nexport function walletClientToSigner(client: WalletClient): Wallet {\n const { account, chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n if (!account) throw new Error(\"Account is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n const provider = new JsonRpcProvider(transport.url, network);\n\n // For viem, we need to get the private key from the account\n const privateKey = (account as { privateKey?: string }).privateKey;\n if (!privateKey || typeof privateKey !== \"string\") {\n throw new Error(\"Private key is required and must be a string\");\n }\n\n return new Wallet(privateKey, provider);\n}\n","/**\n * Supported field types for EAS schema fields.\n * Maps to the Solidity types that can be used in EAS schemas.\n */\nexport const EAS_FIELD_TYPES = {\n string: \"string\",\n address: \"address\",\n bool: \"bool\",\n bytes: \"bytes\",\n bytes32: \"bytes32\",\n uint256: \"uint256\",\n int256: \"int256\",\n uint8: \"uint8\",\n int8: \"int8\",\n} as const;\n\nexport type EASFieldType = keyof typeof EAS_FIELD_TYPES;\n\n/**\n * Represents a single field in an EAS schema.\n */\nexport interface SchemaField {\n /** The name of the field */\n name: string;\n /** The Solidity type of the field */\n type: EASFieldType;\n /** Optional description of the field's purpose */\n description?: string;\n}\n\n/**\n * Options for registering a new schema in the EAS Schema Registry.\n */\nexport interface RegisterSchemaOptions {\n /** Array of fields that make up the schema */\n fields: SchemaField[];\n /** Address of the resolver contract that will handle attestations */\n resolverAddress: string;\n /** Whether attestations using this schema can be revoked */\n revocable: boolean;\n}\n","import { type EASFieldType, EAS_FIELD_TYPES, type SchemaField } from \"./types.js\";\n\nexport function validateFieldName(name: string): void {\n if (!name) {\n throw new Error(\"Field name cannot be empty\");\n }\n if (name.includes(\" \")) {\n throw new Error(\"Field name cannot contain spaces\");\n }\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n \"Field name must start with a letter or underscore and contain only alphanumeric characters and underscores\",\n );\n }\n}\n\nexport function validateFieldType(type: string): asserts type is EASFieldType {\n if (!(type in EAS_FIELD_TYPES)) {\n throw new Error(`Invalid field type: ${type}. Must be one of: ${Object.keys(EAS_FIELD_TYPES).join(\", \")}`);\n }\n}\n\nexport function validateSchemaFields(fields: SchemaField[]): void {\n if (!fields || fields.length === 0) {\n throw new Error(\"Schema must have at least one field\");\n }\n\n const seenNames = new Set<string>();\n for (const field of fields) {\n validateFieldName(field.name);\n validateFieldType(field.type);\n\n if (seenNames.has(field.name)) {\n throw new Error(`Duplicate field name: ${field.name}`);\n }\n seenNames.add(field.name);\n }\n}\n\nexport function buildSchemaString(fields: SchemaField[]): string {\n validateSchemaFields(fields);\n return fields.map((field) => `${field.type} ${field.name}`).join(\", \");\n}\n","import { SchemaRegistry } from \"@ethereum-attestation-service/eas-sdk\";\nimport { validate } from \"@settlemint/sdk-utils/validation\";\nimport { getPublicClient, getWalletClient } from \"@settlemint/sdk-viem\";\nimport type { PublicClient } from \"viem\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport { publicClientToProvider, walletClientToSigner } from \"./ethers-adapter.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.js\";\n\n// Re-export types and constants\nexport type { ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nexport type { RegisterSchemaOptions, SchemaField, EASFieldType } from \"./types.js\";\nexport { EAS_FIELD_TYPES } from \"./types.js\";\n\n/**\n * Creates an EAS client for interacting with the Ethereum Attestation Service.\n *\n * @param options - Configuration options for the client\n * @returns An object containing the EAS client instance\n * @throws Will throw an error if the options fail validation\n *\n * @example\n * ```ts\n * import { createEASClient } from '@settlemint/sdk-eas';\n *\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * accessToken: \"your-access-token\",\n * chainId: \"1\",\n * chainName: \"Ethereum\",\n * rpcUrl: \"http://localhost:8545\"\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n // Create viem clients\n const publicClient = getPublicClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n }) as PublicClient;\n\n const walletClient = getWalletClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n })();\n\n // Convert to ethers for EAS SDK\n const provider = publicClientToProvider(publicClient);\n const wallet = walletClientToSigner(walletClient);\n\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n schemaRegistry.connect(wallet);\n\n async function registerSchema(options: RegisterSchemaOptions): Promise<string> {\n validateSchemaFields(options.fields);\n const schema = buildSchemaString(options.fields);\n\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const tx = await schemaRegistry.register({\n schema,\n resolverAddress: options.resolverAddress,\n revocable: options.revocable,\n });\n\n await tx.wait();\n return tx.toString();\n } catch (error) {\n throw new Error(`Failed to register schema: ${(error as Error).message}`, { cause: error });\n }\n }\n\n async function getSchema(uid: string): Promise<string> {\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const schema = await schemaRegistry.getSchema({ uid });\n return schema.toString();\n } catch (error) {\n throw new Error(`Failed to get schema: ${(error as Error).message}`);\n }\n }\n\n return {\n registerSchema,\n getSchema,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/client-options.schema.ts","../src/ethers-adapter.ts","../src/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","isAddress","AccessTokenSchema","UrlSchema","publicClientToProvider","client","chain","transport","network","providers","value","JsonRpcProvider","provider","walletClientToSigner","account","privateKey","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","publicClient","getPublicClient","walletClient","getWalletClient","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"0TAQO,IAAMA,CAAsBC,CAAAA,CAAAA,CAAE,OAAO,CAE1C,qBAAA,CAAuBA,CAAE,CAAA,MAAA,EAAS,CAAA,MAAA,CAAOC,SAAW,CAAA,iCAAiC,CAErF,CAAA,kBAAA,CAAoBD,CAAE,CAAA,MAAA,EAAS,CAAA,MAAA,CAAOC,SAAW,CAAA,iCAAiC,EAElF,WAAaC,CAAAA,iBAAAA,CAEb,OAASF,CAAAA,CAAAA,CAAE,MAAO,EAAA,CAAE,GAAI,CAAA,CAAC,EAEzB,SAAWA,CAAAA,CAAAA,CAAE,MAAO,EAAA,CAAE,GAAI,CAAA,CAAC,CAE3B,CAAA,MAAA,CAAQG,SACV,CAAC,CAAA,CCfM,SAASC,CAAAA,CAAuBC,CAAgC,CAAA,CACrE,GAAM,CAAE,KAAAC,CAAAA,CAAAA,CAAO,UAAAC,CAAU,CAAA,CAAIF,CAC7B,CAAA,GAAI,CAACC,CAAAA,CAAO,MAAM,IAAI,MAAM,mBAAmB,CAAA,CAE/C,IAAME,CAAAA,CAAU,CACd,OAAA,CAASF,CAAM,CAAA,EAAA,CACf,KAAMA,CAAM,CAAA,IAAA,CACZ,UAAYA,CAAAA,CAAAA,CAAM,SAAW,EAAA,WAAA,EAAa,OAC5C,CAAA,CAEA,GAAIC,CAAU,CAAA,IAAA,GAAS,UAAY,CAAA,CACjC,IAAME,CAAAA,CAAaF,CAAU,CAAA,UAAA,CAC1B,IAAI,CAAC,CAAE,KAAAG,CAAAA,CAAM,CAAM,GAAA,CAClB,GAAI,CAACA,GAAO,GAAK,CAAA,OAAO,IACxB,CAAA,GAAI,CACF,OAAO,IAAIC,eAAAA,CAAgBD,EAAM,GAAKF,CAAAA,CAAO,CAC/C,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAAC,CAAA,CACA,MAAQI,CAAAA,CAAAA,EAA0CA,CAAY,EAAA,IAAI,CAErE,CAAA,GAAIH,EAAU,MAAW,GAAA,CAAA,CAAG,MAAM,IAAI,KAAM,CAAA,yBAAyB,CAErE,CAAA,OAAOA,EAAU,CAAC,CACpB,CAEA,OAAO,IAAIE,eAAAA,CAAgBJ,CAAU,CAAA,GAAA,CAAKC,CAAO,CACnD,CAKO,SAASK,CAAAA,CAAqBR,CAA8B,CAAA,CACjE,GAAM,CAAE,QAAAS,CAAS,CAAA,KAAA,CAAAR,CAAO,CAAA,SAAA,CAAAC,CAAU,CAAA,CAAIF,CACtC,CAAA,GAAI,CAACC,CAAO,CAAA,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA,CAC/C,GAAI,CAACQ,EAAS,MAAM,IAAI,KAAM,CAAA,qBAAqB,CAEnD,CAAA,IAAMN,CAAU,CAAA,CACd,QAASF,CAAM,CAAA,EAAA,CACf,IAAMA,CAAAA,CAAAA,CAAM,IACZ,CAAA,UAAA,CAAYA,CAAM,CAAA,SAAA,EAAW,WAAa,EAAA,OAC5C,CAEMM,CAAAA,CAAAA,CAAW,IAAID,eAAAA,CAAgBJ,CAAU,CAAA,GAAA,CAAKC,CAAO,CAGrDO,CAAAA,CAAAA,CAAcD,CAAoC,CAAA,UAAA,CACxD,GAAI,CAACC,CAAc,EAAA,OAAOA,GAAe,QACvC,CAAA,MAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA,CAGhE,OAAO,IAAIC,OAAOD,CAAYH,CAAAA,CAAQ,CACxC,CCvDaK,IAAAA,CAAAA,CAAkB,CAC7B,MAAA,CAAQ,SACR,OAAS,CAAA,SAAA,CACT,IAAM,CAAA,MAAA,CACN,KAAO,CAAA,OAAA,CACP,OAAS,CAAA,SAAA,CACT,QAAS,SACT,CAAA,MAAA,CAAQ,QACR,CAAA,KAAA,CAAO,OACP,CAAA,IAAA,CAAM,MACR,ECZO,SAASC,CAAkBC,CAAAA,CAAAA,CAAoB,CACpD,GAAI,CAACA,CAAAA,CACH,MAAM,IAAI,MAAM,4BAA4B,CAAA,CAE9C,GAAIA,CAAAA,CAAK,QAAS,CAAA,GAAG,CACnB,CAAA,MAAM,IAAI,KAAA,CAAM,kCAAkC,CAAA,CAEpD,GAAI,CAAC,0BAA2B,CAAA,IAAA,CAAKA,CAAI,CACvC,CAAA,MAAM,IAAI,KAAA,CACR,4GACF,CAEJ,CAEO,SAASC,EAAkBC,CAA4C,CAAA,CAC5E,GAAI,EAAEA,CAAQJ,IAAAA,CAAAA,CAAAA,CACZ,MAAM,IAAI,MAAM,CAAuBI,oBAAAA,EAAAA,CAAI,CAAqB,kBAAA,EAAA,MAAA,CAAO,IAAKJ,CAAAA,CAAe,CAAE,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAE7G,CAEO,SAASK,CAAAA,CAAqBC,CAA6B,CAAA,CAChE,GAAI,CAACA,CAAAA,EAAUA,CAAO,CAAA,MAAA,GAAW,CAC/B,CAAA,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAGvD,CAAA,IAAMC,CAAY,CAAA,IAAI,GACtB,CAAA,IAAA,IAAWC,CAASF,IAAAA,CAAAA,CAAQ,CAI1B,GAHAL,CAAAA,CAAkBO,CAAM,CAAA,IAAI,CAC5BL,CAAAA,CAAAA,CAAkBK,CAAM,CAAA,IAAI,CAExBD,CAAAA,CAAAA,CAAU,GAAIC,CAAAA,CAAAA,CAAM,IAAI,CAAA,CAC1B,MAAM,IAAI,MAAM,CAAyBA,sBAAAA,EAAAA,CAAAA,CAAM,IAAI,CAAA,CAAE,CAEvDD,CAAAA,CAAAA,CAAU,GAAIC,CAAAA,CAAAA,CAAM,IAAI,EAC1B,CACF,CAEO,SAASC,CAAkBH,CAAAA,CAAAA,CAA+B,CAC/D,OAAAD,EAAqBC,CAAM,CAAA,CACpBA,CAAO,CAAA,GAAA,CAAKE,CAAU,EAAA,CAAA,EAAGA,CAAM,CAAA,IAAI,IAAIA,CAAM,CAAA,IAAI,CAAE,CAAA,CAAA,CAAE,IAAK,CAAA,IAAI,CACvE,CCPO,SAASE,CAAgBC,CAAAA,CAAAA,CAAwB,CACtDC,QAAAA,CAAS9B,CAAqB6B,CAAAA,CAAO,CAGrC,CAAA,IAAME,EAAeC,eAAgB,CAAA,CACnC,WAAaH,CAAAA,CAAAA,CAAQ,WACrB,CAAA,OAAA,CAASA,CAAQ,CAAA,OAAA,CACjB,UAAWA,CAAQ,CAAA,SAAA,CACnB,MAAQA,CAAAA,CAAAA,CAAQ,MAClB,CAAC,CAEKI,CAAAA,CAAAA,CAAeC,eAAgB,CAAA,CACnC,WAAaL,CAAAA,CAAAA,CAAQ,WACrB,CAAA,OAAA,CAASA,CAAQ,CAAA,OAAA,CACjB,UAAWA,CAAQ,CAAA,SAAA,CACnB,MAAQA,CAAAA,CAAAA,CAAQ,MAClB,CAAC,CAAE,EAAA,CAGGhB,EAAWR,CAAuB0B,CAAAA,CAAY,CAC9CI,CAAAA,CAAAA,CAASrB,CAAqBmB,CAAAA,CAAY,CAE1CG,CAAAA,CAAAA,CAAiB,IAAIC,cAAeR,CAAAA,CAAAA,CAAQ,qBAAqB,CAAA,CACvEO,CAAe,CAAA,OAAA,CAAQD,CAAM,CAAA,CAE7B,eAAeG,CAAeT,CAAAA,CAAAA,CAAiD,CAC7EN,CAAAA,CAAqBM,CAAQ,CAAA,MAAM,CACnC,CAAA,IAAMU,EAASZ,CAAkBE,CAAAA,CAAAA,CAAQ,MAAM,CAAA,CAE/C,GAAI,CAEF,MAAMhB,CAAAA,CAAS,YAEf,CAAA,IAAM2B,CAAK,CAAA,MAAMJ,CAAe,CAAA,QAAA,CAAS,CACvC,MAAA,CAAAG,EACA,eAAiBV,CAAAA,CAAAA,CAAQ,eACzB,CAAA,SAAA,CAAWA,CAAQ,CAAA,SACrB,CAAC,CAAA,CAED,OAAMW,MAAAA,CAAAA,CAAG,IAAK,EAAA,CACPA,CAAG,CAAA,QAAA,EACZ,CAAA,MAASC,EAAO,CACd,MAAM,IAAI,KAAA,CAAM,CAA+BA,2BAAAA,EAAAA,CAAAA,CAAgB,OAAO,CAAA,CAAA,CAAI,CAAE,KAAOA,CAAAA,CAAM,CAAC,CAC5F,CACF,CAEA,eAAeC,CAAAA,CAAUC,EAA8B,CACrD,GAAI,CAEF,OAAA,MAAM9B,CAAS,CAAA,UAAA,EAEA,CAAA,CAAA,MAAMuB,EAAe,SAAU,CAAA,CAAE,GAAAO,CAAAA,CAAI,CAAC,CAAA,EACvC,QAAS,EACzB,OAASF,CAAO,CAAA,CACd,MAAM,IAAI,KAAM,CAAA,CAAA,sBAAA,EAA0BA,CAAgB,CAAA,OAAO,EAAE,CACrE,CACF,CAEA,OAAO,CACL,cAAA,CAAAH,CACA,CAAA,SAAA,CAAAI,CACF,CACF","file":"eas.mjs","sourcesContent":["import { AccessTokenSchema, UrlSchema } from \"@settlemint/sdk-utils/validation\";\nimport { isAddress } from \"viem\";\nimport { z } from \"zod/v4\";\n\n/**\n * Schema for validating EAS client configuration options.\n * Extends the base Viem client options with EAS-specific requirements.\n */\nexport const ClientOptionsSchema = z.object({\n /** The address of the EAS Schema Registry contract */\n schemaRegistryAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** The address of the EAS Attestation contract */\n attestationAddress: z.string().refine(isAddress, \"Invalid Ethereum address format\"),\n /** Access token for the RPC provider (must start with 'sm_aat_' or 'sm_pat_') */\n accessToken: AccessTokenSchema,\n /** The chain ID to connect to */\n chainId: z.string().min(1),\n /** The name of the chain to connect to */\n chainName: z.string().min(1),\n /** The RPC URL to connect to (must be a valid URL) */\n rpcUrl: UrlSchema,\n});\n\n/**\n * Configuration options for creating an EAS client.\n * Combines EAS-specific options with base Viem client options.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","import { JsonRpcProvider, type Provider, Wallet } from \"ethers\";\nimport type { PublicClient, Transport, WalletClient } from \"viem\";\n\n/**\n * Converts a viem PublicClient to an ethers JsonRpcProvider\n */\nexport function publicClientToProvider(client: PublicClient): Provider {\n const { chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n if (transport.type === \"fallback\") {\n const providers = (transport.transports as ReturnType<Transport>[])\n .map(({ value }) => {\n if (!value?.url) return null;\n try {\n return new JsonRpcProvider(value.url, network);\n } catch {\n return null;\n }\n })\n .filter((provider): provider is JsonRpcProvider => provider != null);\n\n if (providers.length === 0) throw new Error(\"No valid RPC URLs found\");\n // We know providers[0] exists because we checked length > 0\n return providers[0] as Provider;\n }\n\n return new JsonRpcProvider(transport.url, network);\n}\n\n/**\n * Converts a viem WalletClient to an ethers Wallet\n */\nexport function walletClientToSigner(client: WalletClient): Wallet {\n const { account, chain, transport } = client;\n if (!chain) throw new Error(\"Chain is required\");\n if (!account) throw new Error(\"Account is required\");\n\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n };\n\n const provider = new JsonRpcProvider(transport.url, network);\n\n // For viem, we need to get the private key from the account\n const privateKey = (account as { privateKey?: string }).privateKey;\n if (!privateKey || typeof privateKey !== \"string\") {\n throw new Error(\"Private key is required and must be a string\");\n }\n\n return new Wallet(privateKey, provider);\n}\n","/**\n * Supported field types for EAS schema fields.\n * Maps to the Solidity types that can be used in EAS schemas.\n */\nexport const EAS_FIELD_TYPES = {\n string: \"string\",\n address: \"address\",\n bool: \"bool\",\n bytes: \"bytes\",\n bytes32: \"bytes32\",\n uint256: \"uint256\",\n int256: \"int256\",\n uint8: \"uint8\",\n int8: \"int8\",\n} as const;\n\nexport type EASFieldType = keyof typeof EAS_FIELD_TYPES;\n\n/**\n * Represents a single field in an EAS schema.\n */\nexport interface SchemaField {\n /** The name of the field */\n name: string;\n /** The Solidity type of the field */\n type: EASFieldType;\n /** Optional description of the field's purpose */\n description?: string;\n}\n\n/**\n * Options for registering a new schema in the EAS Schema Registry.\n */\nexport interface RegisterSchemaOptions {\n /** Array of fields that make up the schema */\n fields: SchemaField[];\n /** Address of the resolver contract that will handle attestations */\n resolverAddress: string;\n /** Whether attestations using this schema can be revoked */\n revocable: boolean;\n}\n","import { type EASFieldType, EAS_FIELD_TYPES, type SchemaField } from \"./types.js\";\n\nexport function validateFieldName(name: string): void {\n if (!name) {\n throw new Error(\"Field name cannot be empty\");\n }\n if (name.includes(\" \")) {\n throw new Error(\"Field name cannot contain spaces\");\n }\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n \"Field name must start with a letter or underscore and contain only alphanumeric characters and underscores\",\n );\n }\n}\n\nexport function validateFieldType(type: string): asserts type is EASFieldType {\n if (!(type in EAS_FIELD_TYPES)) {\n throw new Error(`Invalid field type: ${type}. Must be one of: ${Object.keys(EAS_FIELD_TYPES).join(\", \")}`);\n }\n}\n\nexport function validateSchemaFields(fields: SchemaField[]): void {\n if (!fields || fields.length === 0) {\n throw new Error(\"Schema must have at least one field\");\n }\n\n const seenNames = new Set<string>();\n for (const field of fields) {\n validateFieldName(field.name);\n validateFieldType(field.type);\n\n if (seenNames.has(field.name)) {\n throw new Error(`Duplicate field name: ${field.name}`);\n }\n seenNames.add(field.name);\n }\n}\n\nexport function buildSchemaString(fields: SchemaField[]): string {\n validateSchemaFields(fields);\n return fields.map((field) => `${field.type} ${field.name}`).join(\", \");\n}\n","import { SchemaRegistry } from \"@ethereum-attestation-service/eas-sdk\";\nimport { validate } from \"@settlemint/sdk-utils/validation\";\nimport { getPublicClient, getWalletClient } from \"@settlemint/sdk-viem\";\nimport type { PublicClient } from \"viem\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport { publicClientToProvider, walletClientToSigner } from \"./ethers-adapter.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.js\";\n\n// Re-export types and constants\nexport type { ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nexport type { RegisterSchemaOptions, SchemaField, EASFieldType } from \"./types.js\";\nexport { EAS_FIELD_TYPES } from \"./types.js\";\n\n/**\n * Creates an EAS client for interacting with the Ethereum Attestation Service.\n *\n * @param options - Configuration options for the client\n * @returns An object containing the EAS client instance\n * @throws Will throw an error if the options fail validation\n *\n * @example\n * ```ts\n * import { createEASClient } from '@settlemint/sdk-eas';\n *\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * accessToken: \"your-access-token\",\n * chainId: \"1\",\n * chainName: \"Ethereum\",\n * rpcUrl: \"http://localhost:8545\"\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n // Create viem clients\n const publicClient = getPublicClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n }) as PublicClient;\n\n const walletClient = getWalletClient({\n accessToken: options.accessToken,\n chainId: options.chainId,\n chainName: options.chainName,\n rpcUrl: options.rpcUrl,\n })();\n\n // Convert to ethers for EAS SDK\n const provider = publicClientToProvider(publicClient);\n const wallet = walletClientToSigner(walletClient);\n\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n schemaRegistry.connect(wallet);\n\n async function registerSchema(options: RegisterSchemaOptions): Promise<string> {\n validateSchemaFields(options.fields);\n const schema = buildSchemaString(options.fields);\n\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const tx = await schemaRegistry.register({\n schema,\n resolverAddress: options.resolverAddress,\n revocable: options.revocable,\n });\n\n await tx.wait();\n return tx.toString();\n } catch (error) {\n throw new Error(`Failed to register schema: ${(error as Error).message}`, { cause: error });\n }\n }\n\n async function getSchema(uid: string): Promise<string> {\n try {\n // Check if the provider is available\n await provider.getNetwork();\n\n const schema = await schemaRegistry.getSchema({ uid });\n return schema.toString();\n } catch (error) {\n throw new Error(`Failed to get schema: ${(error as Error).message}`);\n }\n }\n\n return {\n registerSchema,\n getSchema,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@settlemint/sdk-eas",
3
3
  "description": "Ethereum Attestation Service (EAS) integration for SettleMint SDK",
4
- "version": "2.3.2-pr37d1321f",
4
+ "version": "2.3.2-pr3dad35bd",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "FSL-1.1-MIT",
@@ -52,8 +52,8 @@
52
52
  "devDependencies": {},
53
53
  "dependencies": {
54
54
  "@ethereum-attestation-service/eas-sdk": "^2",
55
- "@settlemint/sdk-utils": "2.3.2-pr37d1321f",
56
- "@settlemint/sdk-viem": "2.3.2-pr37d1321f",
55
+ "@settlemint/sdk-utils": "2.3.2-pr3dad35bd",
56
+ "@settlemint/sdk-viem": "2.3.2-pr3dad35bd",
57
57
  "ethers": "^6",
58
58
  "viem": "^2"
59
59
  },