@settlemint/sdk-eas 2.2.2-pr3d7e742b → 2.2.2-pr40a5ad4c

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/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'),ethers=require('ethers'),zod=require('zod');var l=zod.z.object({schemaRegistryAddress:zod.z.string().min(1),attestationAddress:zod.z.string().min(1),blockchainNode:zod.z.string().min(1),wallet:zod.z.union([zod.z.string().min(1),zod.z.instanceof(ethers.Wallet)])});var c={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function f(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 S(e){if(!(e in c))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(c).join(", ")}`)}function m(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(f(r.name),S(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function d(e){return m(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function k(e){validation.validate(l,e);let t=new ethers.JsonRpcProvider(e.blockchainNode),r=typeof e.wallet=="string"?new ethers.Wallet(e.wallet,t):e.wallet.connect(t),s=new easSdk.SchemaRegistry(e.schemaRegistryAddress);s.connect(r);async function p(n){m(n.fields);let a=d(n.fields);try{await t.getNetwork();let o=await s.register({schema:a,resolverAddress:n.resolverAddress,revocable:n.revocable});return await o.wait(),o.toString()}catch(o){throw new Error(`Failed to register schema: ${o.message}`)}}async function h(n){try{return await t.getNetwork(),(await s.getSchema({uid:n})).toString()}catch(a){throw new Error(`Failed to get schema: ${a.message}`)}}return {registerSchema:p,getSchema:h}}exports.createEASClient=k;//# sourceMappingURL=eas.cjs.map
1
+ 'use strict';var easSdk=require('@ethereum-attestation-service/eas-sdk'),validation=require('@settlemint/sdk-utils/validation'),ethers=require('ethers'),zod=require('zod');var d=zod.z.object({schemaRegistryAddress:zod.z.string().min(1),attestationAddress:zod.z.string().min(1),blockchainNode:zod.z.string().min(1)});var c={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function g(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 S(e){if(!(e in c))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(c).join(", ")}`)}function m(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(g(r.name),S(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function l(e){return m(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function $(e){validation.validate(d,e);let t=new ethers.JsonRpcProvider(e.blockchainNode),r=ethers.Wallet.createRandom().connect(t),s=new easSdk.SchemaRegistry(e.schemaRegistryAddress);s.connect(r);async function p(i){m(i.fields);let n=l(i.fields);try{await t.getNetwork();let o=await s.register({schema:n,resolverAddress:i.resolverAddress,revocable:i.revocable});return await o.wait(),o.toString()}catch(o){throw new Error(`Failed to register schema: ${o.message}`)}}async function h(i){try{return await t.getNetwork(),(await s.getSchema({uid:i})).toString()}catch(n){throw new Error(`Failed to get schema: ${n.message}`)}}return {registerSchema:p,getSchema:h}}exports.createEASClient=$;//# 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/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","provider","JsonRpcProvider","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"4KAGO,IAAMA,EAAsBC,KAAE,CAAA,MAAA,CAAO,CAC1C,qBAAuBA,CAAAA,KAAAA,CAAE,QAAS,CAAA,GAAA,CAAI,CAAC,CACvC,CAAA,kBAAA,CAAoBA,MAAE,MAAO,EAAA,CAAE,IAAI,CAAC,CAAA,CACpC,eAAgBA,KAAE,CAAA,MAAA,EAAS,CAAA,GAAA,CAAI,CAAC,CAChC,CAAA,MAAA,CAAQA,MAAE,KAAM,CAAA,CACdA,MACG,MAAO,EAAA,CACP,GAAI,CAAA,CAAC,EACRA,KAAE,CAAA,UAAA,CAAWC,aAAM,CACrB,CAAC,CACH,CAAC,CAAA,CCbM,IAAMC,CAAAA,CAAkB,CAC7B,MAAQ,CAAA,QAAA,CACR,QAAS,SACT,CAAA,IAAA,CAAM,OACN,KAAO,CAAA,OAAA,CACP,QAAS,SACT,CAAA,OAAA,CAAS,UACT,MAAQ,CAAA,QAAA,CACR,MAAO,OACP,CAAA,IAAA,CAAM,MACR,CCRO,CAAA,SAASC,CAAkBC,CAAAA,CAAAA,CAAoB,CACpD,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,4BAA4B,CAAA,CAE9C,GAAIA,CAAAA,CAAK,SAAS,GAAG,CAAA,CACnB,MAAM,IAAI,KAAA,CAAM,kCAAkC,CAEpD,CAAA,GAAI,CAAC,0BAAA,CAA2B,KAAKA,CAAI,CAAA,CACvC,MAAM,IAAI,KAAA,CACR,4GACF,CAEJ,CAEO,SAASC,CAAkBC,CAAAA,CAAAA,CAA4C,CAC5E,GAAI,EAAEA,KAAQJ,CACZ,CAAA,CAAA,MAAM,IAAI,KAAM,CAAA,CAAA,oBAAA,EAAuBI,CAAI,CAAA,kBAAA,EAAqB,OAAO,IAAKJ,CAAAA,CAAe,EAAE,IAAK,CAAA,IAAI,CAAC,CAAE,CAAA,CAE7G,CAEO,SAASK,EAAqBC,CAA6B,CAAA,CAChE,GAAI,CAACA,CAAAA,EAAUA,EAAO,MAAW,GAAA,CAAA,CAC/B,MAAM,IAAI,MAAM,qCAAqC,CAAA,CAGvD,IAAMC,CAAY,CAAA,IAAI,IACtB,IAAWC,IAAAA,CAAAA,IAASF,EAAQ,CAI1B,GAHAL,EAAkBO,CAAM,CAAA,IAAI,EAC5BL,CAAkBK,CAAAA,CAAAA,CAAM,IAAI,CAExBD,CAAAA,CAAAA,CAAU,GAAIC,CAAAA,CAAAA,CAAM,IAAI,CAC1B,CAAA,MAAM,IAAI,KAAM,CAAA,CAAA,sBAAA,EAAyBA,EAAM,IAAI,CAAA,CAAE,CAEvDD,CAAAA,CAAAA,CAAU,IAAIC,CAAM,CAAA,IAAI,EAC1B,CACF,CAEO,SAASC,CAAkBH,CAAAA,CAAAA,CAA+B,CAC/D,OAAAD,EAAqBC,CAAM,CAAA,CACpBA,EAAO,GAAKE,CAAAA,CAAAA,EAAU,GAAGA,CAAM,CAAA,IAAI,IAAIA,CAAM,CAAA,IAAI,EAAE,CAAE,CAAA,IAAA,CAAK,IAAI,CACvE,CCLO,SAASE,CAAgBC,CAAAA,CAAAA,CAAwB,CACtDC,mBAAAA,CAASf,EAAqBc,CAAO,CAAA,CAErC,IAAME,CAAW,CAAA,IAAIC,uBAAgBH,CAAQ,CAAA,cAAc,CACrDI,CAAAA,CAAAA,CACJ,OAAOJ,CAAQ,CAAA,MAAA,EAAW,SAAW,IAAIZ,aAAAA,CAAOY,EAAQ,MAAQE,CAAAA,CAAQ,CAAIF,CAAAA,CAAAA,CAAQ,OAAO,OAAQE,CAAAA,CAAQ,EACvGG,CAAiB,CAAA,IAAIC,sBAAeN,CAAQ,CAAA,qBAAqB,EAEvEK,CAAe,CAAA,OAAA,CAAQD,CAAM,CAE7B,CAAA,eAAeG,EAAeP,CAAiD,CAAA,CAC7EN,EAAqBM,CAAQ,CAAA,MAAM,CACnC,CAAA,IAAMQ,EAASV,CAAkBE,CAAAA,CAAAA,CAAQ,MAAM,CAE/C,CAAA,GAAI,CAEF,MAAME,CAAAA,CAAS,UAAW,EAAA,CAE1B,IAAMO,CAAK,CAAA,MAAMJ,EAAe,QAAS,CAAA,CACvC,OAAAG,CACA,CAAA,eAAA,CAAiBR,CAAQ,CAAA,eAAA,CACzB,UAAWA,CAAQ,CAAA,SACrB,CAAC,CAED,CAAA,OAAA,MAAMS,EAAG,IAAK,EAAA,CACPA,EAAG,QAAS,EACrB,OAASC,CAAO,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,8BAA+BA,CAAgB,CAAA,OAAO,CAAE,CAAA,CAC1E,CACF,CAEA,eAAeC,EAAUC,CAA8B,CAAA,CACrD,GAAI,CAEF,OAAA,MAAMV,CAAS,CAAA,UAAA,IAEA,MAAMG,CAAAA,CAAe,UAAU,CAAE,GAAA,CAAAO,CAAI,CAAC,CAAA,EACvC,QAAS,EACzB,OAASF,CAAO,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,yBAA0BA,CAAgB,CAAA,OAAO,EAAE,CACrE,CACF,CAEA,OAAO,CACL,eAAAH,CACA,CAAA,SAAA,CAAAI,CACF,CACF","file":"eas.cjs","sourcesContent":["import { Wallet } from \"ethers\";\nimport { z } from \"zod\";\n\nexport const ClientOptionsSchema = z.object({\n schemaRegistryAddress: z.string().min(1),\n attestationAddress: z.string().min(1),\n blockchainNode: z.string().min(1),\n wallet: z.union([\n z\n .string()\n .min(1), // private key\n z.instanceof(Wallet), // Wallet instance\n ]),\n});\n\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","export 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\nexport interface SchemaField {\n name: string;\n type: EASFieldType;\n description?: string;\n}\n\nexport interface RegisterSchemaOptions {\n fields: SchemaField[];\n resolverAddress: string;\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 { JsonRpcProvider, Wallet } from \"ethers\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.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 * import { Wallet } from 'ethers';\n *\n * // Using a private key\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * blockchainNode: \"http://localhost:8545\",\n * wallet: \"your-private-key-here\"\n * });\n *\n * // Or using a Wallet instance\n * const wallet = new Wallet(\"your-private-key-here\");\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * blockchainNode: \"http://localhost:8545\",\n * wallet\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n const provider = new JsonRpcProvider(options.blockchainNode);\n const wallet =\n typeof options.wallet === \"string\" ? new Wallet(options.wallet, provider) : options.wallet.connect(provider);\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n\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}`);\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/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","provider","JsonRpcProvider","wallet","Wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.cjs","sourcesContent":["import { z } from \"zod\";\n\nexport const ClientOptionsSchema = z.object({\n schemaRegistryAddress: z.string().min(1),\n attestationAddress: z.string().min(1),\n blockchainNode: z.string().min(1),\n});\n\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","export 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\nexport interface SchemaField {\n name: string;\n type: EASFieldType;\n description?: string;\n}\n\nexport interface RegisterSchemaOptions {\n fields: SchemaField[];\n resolverAddress: string;\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 { JsonRpcProvider, Wallet } from \"ethers\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.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 * blockchainNode: \"http://localhost:8545\"\n * });\n *\n * // Register a schema\n * const schema = await client.registerSchema({\n * fields: [\n * { name: \"eventId\", type: \"uint256\" },\n * { name: \"voteIndex\", type: \"uint8\" }\n * ],\n * resolverAddress: \"0x0000000000000000000000000000000000000000\",\n * revocable: true\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n const provider = new JsonRpcProvider(options.blockchainNode);\n const wallet = Wallet.createRandom().connect(provider);\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n\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}`);\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,21 +1,17 @@
1
- import { Wallet } from 'ethers';
2
1
  import { z } from 'zod';
3
2
 
4
3
  declare const ClientOptionsSchema: z.ZodObject<{
5
4
  schemaRegistryAddress: z.ZodString;
6
5
  attestationAddress: z.ZodString;
7
6
  blockchainNode: z.ZodString;
8
- wallet: z.ZodUnion<[z.ZodString, z.ZodType<Wallet, z.ZodTypeDef, Wallet>]>;
9
7
  }, "strip", z.ZodTypeAny, {
10
8
  schemaRegistryAddress: string;
11
9
  attestationAddress: string;
12
10
  blockchainNode: string;
13
- wallet: string | Wallet;
14
11
  }, {
15
12
  schemaRegistryAddress: string;
16
13
  attestationAddress: string;
17
14
  blockchainNode: string;
18
- wallet: string | Wallet;
19
15
  }>;
20
16
  type ClientOptions = z.infer<typeof ClientOptionsSchema>;
21
17
 
@@ -52,23 +48,21 @@ interface RegisterSchemaOptions {
52
48
  * @example
53
49
  * ```ts
54
50
  * import { createEASClient } from '@settlemint/sdk-eas';
55
- * import { Wallet } from 'ethers';
56
51
  *
57
- * // Using a private key
58
52
  * const client = createEASClient({
59
53
  * schemaRegistryAddress: "0x1234567890123456789012345678901234567890",
60
54
  * attestationAddress: "0x1234567890123456789012345678901234567890",
61
- * blockchainNode: "http://localhost:8545",
62
- * wallet: "your-private-key-here"
55
+ * blockchainNode: "http://localhost:8545"
63
56
  * });
64
57
  *
65
- * // Or using a Wallet instance
66
- * const wallet = new Wallet("your-private-key-here");
67
- * const client = createEASClient({
68
- * schemaRegistryAddress: "0x1234567890123456789012345678901234567890",
69
- * attestationAddress: "0x1234567890123456789012345678901234567890",
70
- * blockchainNode: "http://localhost:8545",
71
- * wallet
58
+ * // Register a schema
59
+ * const schema = await client.registerSchema({
60
+ * fields: [
61
+ * { name: "eventId", type: "uint256" },
62
+ * { name: "voteIndex", type: "uint8" }
63
+ * ],
64
+ * resolverAddress: "0x0000000000000000000000000000000000000000",
65
+ * revocable: true
72
66
  * });
73
67
  * ```
74
68
  */
package/dist/eas.d.ts CHANGED
@@ -1,21 +1,17 @@
1
- import { Wallet } from 'ethers';
2
1
  import { z } from 'zod';
3
2
 
4
3
  declare const ClientOptionsSchema: z.ZodObject<{
5
4
  schemaRegistryAddress: z.ZodString;
6
5
  attestationAddress: z.ZodString;
7
6
  blockchainNode: z.ZodString;
8
- wallet: z.ZodUnion<[z.ZodString, z.ZodType<Wallet, z.ZodTypeDef, Wallet>]>;
9
7
  }, "strip", z.ZodTypeAny, {
10
8
  schemaRegistryAddress: string;
11
9
  attestationAddress: string;
12
10
  blockchainNode: string;
13
- wallet: string | Wallet;
14
11
  }, {
15
12
  schemaRegistryAddress: string;
16
13
  attestationAddress: string;
17
14
  blockchainNode: string;
18
- wallet: string | Wallet;
19
15
  }>;
20
16
  type ClientOptions = z.infer<typeof ClientOptionsSchema>;
21
17
 
@@ -52,23 +48,21 @@ interface RegisterSchemaOptions {
52
48
  * @example
53
49
  * ```ts
54
50
  * import { createEASClient } from '@settlemint/sdk-eas';
55
- * import { Wallet } from 'ethers';
56
51
  *
57
- * // Using a private key
58
52
  * const client = createEASClient({
59
53
  * schemaRegistryAddress: "0x1234567890123456789012345678901234567890",
60
54
  * attestationAddress: "0x1234567890123456789012345678901234567890",
61
- * blockchainNode: "http://localhost:8545",
62
- * wallet: "your-private-key-here"
55
+ * blockchainNode: "http://localhost:8545"
63
56
  * });
64
57
  *
65
- * // Or using a Wallet instance
66
- * const wallet = new Wallet("your-private-key-here");
67
- * const client = createEASClient({
68
- * schemaRegistryAddress: "0x1234567890123456789012345678901234567890",
69
- * attestationAddress: "0x1234567890123456789012345678901234567890",
70
- * blockchainNode: "http://localhost:8545",
71
- * wallet
58
+ * // Register a schema
59
+ * const schema = await client.registerSchema({
60
+ * fields: [
61
+ * { name: "eventId", type: "uint256" },
62
+ * { name: "voteIndex", type: "uint8" }
63
+ * ],
64
+ * resolverAddress: "0x0000000000000000000000000000000000000000",
65
+ * revocable: true
72
66
  * });
73
67
  * ```
74
68
  */
package/dist/eas.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {SchemaRegistry}from'@ethereum-attestation-service/eas-sdk';import {validate}from'@settlemint/sdk-utils/validation';import {Wallet,JsonRpcProvider}from'ethers';import {z}from'zod';var l=z.object({schemaRegistryAddress:z.string().min(1),attestationAddress:z.string().min(1),blockchainNode:z.string().min(1),wallet:z.union([z.string().min(1),z.instanceof(Wallet)])});var c={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function f(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 S(e){if(!(e in c))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(c).join(", ")}`)}function m(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(f(r.name),S(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function d(e){return m(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function k(e){validate(l,e);let t=new JsonRpcProvider(e.blockchainNode),r=typeof e.wallet=="string"?new Wallet(e.wallet,t):e.wallet.connect(t),s=new SchemaRegistry(e.schemaRegistryAddress);s.connect(r);async function p(n){m(n.fields);let a=d(n.fields);try{await t.getNetwork();let o=await s.register({schema:a,resolverAddress:n.resolverAddress,revocable:n.revocable});return await o.wait(),o.toString()}catch(o){throw new Error(`Failed to register schema: ${o.message}`)}}async function h(n){try{return await t.getNetwork(),(await s.getSchema({uid:n})).toString()}catch(a){throw new Error(`Failed to get schema: ${a.message}`)}}return {registerSchema:p,getSchema:h}}export{k as createEASClient};//# sourceMappingURL=eas.mjs.map
1
+ import {SchemaRegistry}from'@ethereum-attestation-service/eas-sdk';import {validate}from'@settlemint/sdk-utils/validation';import {JsonRpcProvider,Wallet}from'ethers';import {z}from'zod';var d=z.object({schemaRegistryAddress:z.string().min(1),attestationAddress:z.string().min(1),blockchainNode:z.string().min(1)});var c={string:"string",address:"address",bool:"bool",bytes:"bytes",bytes32:"bytes32",uint256:"uint256",int256:"int256",uint8:"uint8",int8:"int8"};function g(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 S(e){if(!(e in c))throw new Error(`Invalid field type: ${e}. Must be one of: ${Object.keys(c).join(", ")}`)}function m(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(g(r.name),S(r.type),t.has(r.name))throw new Error(`Duplicate field name: ${r.name}`);t.add(r.name);}}function l(e){return m(e),e.map(t=>`${t.type} ${t.name}`).join(", ")}function $(e){validate(d,e);let t=new JsonRpcProvider(e.blockchainNode),r=Wallet.createRandom().connect(t),s=new SchemaRegistry(e.schemaRegistryAddress);s.connect(r);async function p(i){m(i.fields);let n=l(i.fields);try{await t.getNetwork();let o=await s.register({schema:n,resolverAddress:i.resolverAddress,revocable:i.revocable});return await o.wait(),o.toString()}catch(o){throw new Error(`Failed to register schema: ${o.message}`)}}async function h(i){try{return await t.getNetwork(),(await s.getSchema({uid:i})).toString()}catch(n){throw new Error(`Failed to get schema: ${n.message}`)}}return {registerSchema:p,getSchema:h}}export{$ 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/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","Wallet","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","provider","JsonRpcProvider","wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.mjs","sourcesContent":["import { Wallet } from \"ethers\";\nimport { z } from \"zod\";\n\nexport const ClientOptionsSchema = z.object({\n schemaRegistryAddress: z.string().min(1),\n attestationAddress: z.string().min(1),\n blockchainNode: z.string().min(1),\n wallet: z.union([\n z\n .string()\n .min(1), // private key\n z.instanceof(Wallet), // Wallet instance\n ]),\n});\n\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","export 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\nexport interface SchemaField {\n name: string;\n type: EASFieldType;\n description?: string;\n}\n\nexport interface RegisterSchemaOptions {\n fields: SchemaField[];\n resolverAddress: string;\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 { JsonRpcProvider, Wallet } from \"ethers\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.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 * import { Wallet } from 'ethers';\n *\n * // Using a private key\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * blockchainNode: \"http://localhost:8545\",\n * wallet: \"your-private-key-here\"\n * });\n *\n * // Or using a Wallet instance\n * const wallet = new Wallet(\"your-private-key-here\");\n * const client = createEASClient({\n * schemaRegistryAddress: \"0x1234567890123456789012345678901234567890\",\n * attestationAddress: \"0x1234567890123456789012345678901234567890\",\n * blockchainNode: \"http://localhost:8545\",\n * wallet\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n const provider = new JsonRpcProvider(options.blockchainNode);\n const wallet =\n typeof options.wallet === \"string\" ? new Wallet(options.wallet, provider) : options.wallet.connect(provider);\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n\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}`);\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/types.ts","../src/validation.ts","../src/eas.ts"],"names":["ClientOptionsSchema","z","EAS_FIELD_TYPES","validateFieldName","name","validateFieldType","type","validateSchemaFields","fields","seenNames","field","buildSchemaString","createEASClient","options","validate","provider","JsonRpcProvider","wallet","Wallet","schemaRegistry","SchemaRegistry","registerSchema","schema","tx","error","getSchema","uid"],"mappings":"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","file":"eas.mjs","sourcesContent":["import { z } from \"zod\";\n\nexport const ClientOptionsSchema = z.object({\n schemaRegistryAddress: z.string().min(1),\n attestationAddress: z.string().min(1),\n blockchainNode: z.string().min(1),\n});\n\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n","export 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\nexport interface SchemaField {\n name: string;\n type: EASFieldType;\n description?: string;\n}\n\nexport interface RegisterSchemaOptions {\n fields: SchemaField[];\n resolverAddress: string;\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 { JsonRpcProvider, Wallet } from \"ethers\";\nimport { type ClientOptions, ClientOptionsSchema } from \"./client-options.schema.js\";\nimport type { RegisterSchemaOptions } from \"./types.js\";\nimport { buildSchemaString, validateSchemaFields } from \"./validation.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 * blockchainNode: \"http://localhost:8545\"\n * });\n *\n * // Register a schema\n * const schema = await client.registerSchema({\n * fields: [\n * { name: \"eventId\", type: \"uint256\" },\n * { name: \"voteIndex\", type: \"uint8\" }\n * ],\n * resolverAddress: \"0x0000000000000000000000000000000000000000\",\n * revocable: true\n * });\n * ```\n */\nexport function createEASClient(options: ClientOptions) {\n validate(ClientOptionsSchema, options);\n\n const provider = new JsonRpcProvider(options.blockchainNode);\n const wallet = Wallet.createRandom().connect(provider);\n const schemaRegistry = new SchemaRegistry(options.schemaRegistryAddress);\n\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}`);\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.2.2-pr3d7e742b",
4
+ "version": "2.2.2-pr40a5ad4c",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "FSL-1.1-MIT",
@@ -52,7 +52,7 @@
52
52
  "devDependencies": {},
53
53
  "dependencies": {
54
54
  "@ethereum-attestation-service/eas-sdk": "2.7.0",
55
- "@settlemint/sdk-utils": "2.2.2-pr3d7e742b",
55
+ "@settlemint/sdk-utils": "2.2.2-pr40a5ad4c",
56
56
  "viem": "^2.7.9"
57
57
  },
58
58
  "peerDependencies": {},