@agenticvault/agentic-vault 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.claude-plugin/plugin.json +19 -0
  2. package/.env.example +16 -0
  3. package/.mcp.json.example +18 -0
  4. package/LICENSE +21 -0
  5. package/README.ja.md +163 -0
  6. package/README.ko.md +163 -0
  7. package/README.md +161 -0
  8. package/README.zh-CN.md +163 -0
  9. package/README.zh-TW.md +163 -0
  10. package/dist/agentic/audit/logger.d.ts +7 -0
  11. package/dist/agentic/audit/logger.js +19 -0
  12. package/dist/agentic/audit/logger.js.map +1 -0
  13. package/dist/agentic/audit/types.d.ts +11 -0
  14. package/dist/agentic/audit/types.js +2 -0
  15. package/dist/agentic/audit/types.js.map +1 -0
  16. package/dist/agentic/cli.d.ts +8 -0
  17. package/dist/agentic/cli.js +87 -0
  18. package/dist/agentic/cli.js.map +1 -0
  19. package/dist/agentic/index.d.ts +5 -0
  20. package/dist/agentic/index.js +7 -0
  21. package/dist/agentic/index.js.map +1 -0
  22. package/dist/agentic/mcp/server.d.ts +8 -0
  23. package/dist/agentic/mcp/server.js +25 -0
  24. package/dist/agentic/mcp/server.js.map +1 -0
  25. package/dist/agentic/mcp/tools/decoded-call-pipeline.d.ts +14 -0
  26. package/dist/agentic/mcp/tools/decoded-call-pipeline.js +18 -0
  27. package/dist/agentic/mcp/tools/decoded-call-pipeline.js.map +1 -0
  28. package/dist/agentic/mcp/tools/get-address.d.ts +3 -0
  29. package/dist/agentic/mcp/tools/get-address.js +25 -0
  30. package/dist/agentic/mcp/tools/get-address.js.map +1 -0
  31. package/dist/agentic/mcp/tools/health-check.d.ts +3 -0
  32. package/dist/agentic/mcp/tools/health-check.js +25 -0
  33. package/dist/agentic/mcp/tools/health-check.js.map +1 -0
  34. package/dist/agentic/mcp/tools/index.d.ts +7 -0
  35. package/dist/agentic/mcp/tools/index.js +21 -0
  36. package/dist/agentic/mcp/tools/index.js.map +1 -0
  37. package/dist/agentic/mcp/tools/result-adapter.d.ts +10 -0
  38. package/dist/agentic/mcp/tools/result-adapter.js +15 -0
  39. package/dist/agentic/mcp/tools/result-adapter.js.map +1 -0
  40. package/dist/agentic/mcp/tools/shared.d.ts +71 -0
  41. package/dist/agentic/mcp/tools/shared.js +12 -0
  42. package/dist/agentic/mcp/tools/shared.js.map +1 -0
  43. package/dist/agentic/mcp/tools/sign-defi-call.d.ts +3 -0
  44. package/dist/agentic/mcp/tools/sign-defi-call.js +23 -0
  45. package/dist/agentic/mcp/tools/sign-defi-call.js.map +1 -0
  46. package/dist/agentic/mcp/tools/sign-permit.d.ts +3 -0
  47. package/dist/agentic/mcp/tools/sign-permit.js +39 -0
  48. package/dist/agentic/mcp/tools/sign-permit.js.map +1 -0
  49. package/dist/agentic/mcp/tools/sign-swap.d.ts +3 -0
  50. package/dist/agentic/mcp/tools/sign-swap.js +23 -0
  51. package/dist/agentic/mcp/tools/sign-swap.js.map +1 -0
  52. package/dist/agentic/mcp/tools/sign-transaction.d.ts +3 -0
  53. package/dist/agentic/mcp/tools/sign-transaction.js +68 -0
  54. package/dist/agentic/mcp/tools/sign-transaction.js.map +1 -0
  55. package/dist/agentic/mcp/tools/sign-typed-data.d.ts +3 -0
  56. package/dist/agentic/mcp/tools/sign-typed-data.js +50 -0
  57. package/dist/agentic/mcp/tools/sign-typed-data.js.map +1 -0
  58. package/dist/agentic/policy/engine.d.ts +2 -0
  59. package/dist/agentic/policy/engine.js +3 -0
  60. package/dist/agentic/policy/engine.js.map +1 -0
  61. package/dist/agentic/policy/types.d.ts +2 -0
  62. package/dist/agentic/policy/types.js +2 -0
  63. package/dist/agentic/policy/types.js.map +1 -0
  64. package/dist/cli/commands/decode.d.ts +1 -0
  65. package/dist/cli/commands/decode.js +51 -0
  66. package/dist/cli/commands/decode.js.map +1 -0
  67. package/dist/cli/commands/dry-run.d.ts +2 -0
  68. package/dist/cli/commands/dry-run.js +56 -0
  69. package/dist/cli/commands/dry-run.js.map +1 -0
  70. package/dist/cli/commands/encode.d.ts +1 -0
  71. package/dist/cli/commands/encode.js +77 -0
  72. package/dist/cli/commands/encode.js.map +1 -0
  73. package/dist/cli/commands/get-address.d.ts +3 -0
  74. package/dist/cli/commands/get-address.js +26 -0
  75. package/dist/cli/commands/get-address.js.map +1 -0
  76. package/dist/cli/commands/health.d.ts +3 -0
  77. package/dist/cli/commands/health.js +26 -0
  78. package/dist/cli/commands/health.js.map +1 -0
  79. package/dist/cli/commands/mcp.d.ts +6 -0
  80. package/dist/cli/commands/mcp.js +40 -0
  81. package/dist/cli/commands/mcp.js.map +1 -0
  82. package/dist/cli/commands/sign-permit.d.ts +2 -0
  83. package/dist/cli/commands/sign-permit.js +110 -0
  84. package/dist/cli/commands/sign-permit.js.map +1 -0
  85. package/dist/cli/commands/sign.d.ts +2 -0
  86. package/dist/cli/commands/sign.js +82 -0
  87. package/dist/cli/commands/sign.js.map +1 -0
  88. package/dist/cli/context.d.ts +10 -0
  89. package/dist/cli/context.js +84 -0
  90. package/dist/cli/context.js.map +1 -0
  91. package/dist/cli/formatters.d.ts +18 -0
  92. package/dist/cli/formatters.js +74 -0
  93. package/dist/cli/formatters.js.map +1 -0
  94. package/dist/cli/index.d.ts +2 -0
  95. package/dist/cli/index.js +108 -0
  96. package/dist/cli/index.js.map +1 -0
  97. package/dist/core/evm-signer-adapter.d.ts +42 -0
  98. package/dist/core/evm-signer-adapter.js +92 -0
  99. package/dist/core/evm-signer-adapter.js.map +1 -0
  100. package/dist/core/signing-provider.d.ts +14 -0
  101. package/dist/core/signing-provider.js +2 -0
  102. package/dist/core/signing-provider.js.map +1 -0
  103. package/dist/crypto/evm-signer.util.d.ts +43 -0
  104. package/dist/crypto/evm-signer.util.js +151 -0
  105. package/dist/crypto/evm-signer.util.js.map +1 -0
  106. package/dist/evm-signer.util.d.ts +1 -0
  107. package/dist/evm-signer.util.js +4 -0
  108. package/dist/evm-signer.util.js.map +1 -0
  109. package/dist/index.d.ts +11 -0
  110. package/dist/index.js +9 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/kms-client.d.ts +1 -0
  113. package/dist/kms-client.js +4 -0
  114. package/dist/kms-client.js.map +1 -0
  115. package/dist/kms-signer.d.ts +1 -0
  116. package/dist/kms-signer.js +4 -0
  117. package/dist/kms-signer.js.map +1 -0
  118. package/dist/protocols/catalog.d.ts +310 -0
  119. package/dist/protocols/catalog.js +162 -0
  120. package/dist/protocols/catalog.js.map +1 -0
  121. package/dist/protocols/decoders/aave-v3.d.ts +2 -0
  122. package/dist/protocols/decoders/aave-v3.js +105 -0
  123. package/dist/protocols/decoders/aave-v3.js.map +1 -0
  124. package/dist/protocols/decoders/erc20.d.ts +2 -0
  125. package/dist/protocols/decoders/erc20.js +51 -0
  126. package/dist/protocols/decoders/erc20.js.map +1 -0
  127. package/dist/protocols/decoders/uniswap-v3.d.ts +2 -0
  128. package/dist/protocols/decoders/uniswap-v3.js +57 -0
  129. package/dist/protocols/decoders/uniswap-v3.js.map +1 -0
  130. package/dist/protocols/dispatcher.d.ts +8 -0
  131. package/dist/protocols/dispatcher.js +32 -0
  132. package/dist/protocols/dispatcher.js.map +1 -0
  133. package/dist/protocols/index.d.ts +16 -0
  134. package/dist/protocols/index.js +19 -0
  135. package/dist/protocols/index.js.map +1 -0
  136. package/dist/protocols/policy/engine.d.ts +11 -0
  137. package/dist/protocols/policy/engine.js +67 -0
  138. package/dist/protocols/policy/engine.js.map +1 -0
  139. package/dist/protocols/policy/evaluators/aave-v3.d.ts +2 -0
  140. package/dist/protocols/policy/evaluators/aave-v3.js +118 -0
  141. package/dist/protocols/policy/evaluators/aave-v3.js.map +1 -0
  142. package/dist/protocols/policy/evaluators/erc20.d.ts +2 -0
  143. package/dist/protocols/policy/evaluators/erc20.js +55 -0
  144. package/dist/protocols/policy/evaluators/erc20.js.map +1 -0
  145. package/dist/protocols/policy/evaluators/uniswap-v3.d.ts +2 -0
  146. package/dist/protocols/policy/evaluators/uniswap-v3.js +46 -0
  147. package/dist/protocols/policy/evaluators/uniswap-v3.js.map +1 -0
  148. package/dist/protocols/policy/loader.d.ts +11 -0
  149. package/dist/protocols/policy/loader.js +70 -0
  150. package/dist/protocols/policy/loader.js.map +1 -0
  151. package/dist/protocols/policy/types.d.ts +38 -0
  152. package/dist/protocols/policy/types.js +2 -0
  153. package/dist/protocols/policy/types.js.map +1 -0
  154. package/dist/protocols/registry.d.ts +21 -0
  155. package/dist/protocols/registry.js +52 -0
  156. package/dist/protocols/registry.js.map +1 -0
  157. package/dist/protocols/types.d.ts +90 -0
  158. package/dist/protocols/types.js +2 -0
  159. package/dist/protocols/types.js.map +1 -0
  160. package/dist/protocols/workflows/get-address.d.ts +2 -0
  161. package/dist/protocols/workflows/get-address.js +41 -0
  162. package/dist/protocols/workflows/get-address.js.map +1 -0
  163. package/dist/protocols/workflows/health-check.d.ts +2 -0
  164. package/dist/protocols/workflows/health-check.js +41 -0
  165. package/dist/protocols/workflows/health-check.js.map +1 -0
  166. package/dist/protocols/workflows/index.d.ts +5 -0
  167. package/dist/protocols/workflows/index.js +5 -0
  168. package/dist/protocols/workflows/index.js.map +1 -0
  169. package/dist/protocols/workflows/sign-defi-call.d.ts +14 -0
  170. package/dist/protocols/workflows/sign-defi-call.js +157 -0
  171. package/dist/protocols/workflows/sign-defi-call.js.map +1 -0
  172. package/dist/protocols/workflows/sign-permit.d.ts +21 -0
  173. package/dist/protocols/workflows/sign-permit.js +320 -0
  174. package/dist/protocols/workflows/sign-permit.js.map +1 -0
  175. package/dist/protocols/workflows/types.d.ts +79 -0
  176. package/dist/protocols/workflows/types.js +2 -0
  177. package/dist/protocols/workflows/types.js.map +1 -0
  178. package/dist/provider/factory.d.ts +12 -0
  179. package/dist/provider/factory.js +19 -0
  180. package/dist/provider/factory.js.map +1 -0
  181. package/dist/providers/aws-kms/aws-kms-client.d.ts +19 -0
  182. package/dist/providers/aws-kms/aws-kms-client.js +47 -0
  183. package/dist/providers/aws-kms/aws-kms-client.js.map +1 -0
  184. package/dist/providers/aws-kms/aws-kms-provider.d.ts +17 -0
  185. package/dist/providers/aws-kms/aws-kms-provider.js +40 -0
  186. package/dist/providers/aws-kms/aws-kms-provider.js.map +1 -0
  187. package/dist/providers/aws-kms/index.d.ts +3 -0
  188. package/dist/providers/aws-kms/index.js +4 -0
  189. package/dist/providers/aws-kms/index.js.map +1 -0
  190. package/dist/providers/aws-kms/kms-signer-adapter.d.ts +41 -0
  191. package/dist/providers/aws-kms/kms-signer-adapter.js +101 -0
  192. package/dist/providers/aws-kms/kms-signer-adapter.js.map +1 -0
  193. package/dist/types.d.ts +13 -0
  194. package/dist/types.js +2 -0
  195. package/dist/types.js.map +1 -0
  196. package/package.json +109 -0
  197. package/policy.example.json +43 -0
  198. package/skills/audit-log/SKILL.md +32 -0
  199. package/skills/check-wallet/SKILL.md +23 -0
  200. package/skills/sign-permit/SKILL.md +29 -0
  201. package/skills/sign-swap/SKILL.md +29 -0
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ import { parseGlobalArgs, buildWorkflowContext, buildDryRunContext } from './context.js';
3
+ import { parseOutputFormat } from './formatters.js';
4
+ import { runSign } from './commands/sign.js';
5
+ import { runSignPermit } from './commands/sign-permit.js';
6
+ import { runDryRun } from './commands/dry-run.js';
7
+ import { runGetAddress } from './commands/get-address.js';
8
+ import { runHealth } from './commands/health.js';
9
+ import { runMcp } from './commands/mcp.js';
10
+ import { runDecode } from './commands/decode.js';
11
+ import { runEncode } from './commands/encode.js';
12
+ const USAGE = `Usage: agentic-vault <command> [options]
13
+
14
+ Commands:
15
+ sign Sign a DeFi transaction (decoded + policy validated)
16
+ sign-permit Sign an EIP-2612 permit
17
+ dry-run Decode + policy check without signing
18
+ encode Encode intent parameters into calldata hex
19
+ decode Decode calldata hex into intent JSON
20
+ get-address Get the vault wallet address
21
+ health Check signer health status
22
+ mcp Start MCP stdio server
23
+
24
+ Global options:
25
+ --key-id <id> AWS KMS key ID (or set VAULT_KEY_ID env var)
26
+ --region <region> AWS region (or set VAULT_REGION env var)
27
+ --expected-address <a> Expected wallet address (optional)
28
+ --policy-config <path> Policy config JSON file (optional)
29
+ --output <format> Output format: json (default), human, raw
30
+ --help, -h Show this help message
31
+ `;
32
+ function usage(exitCode = 1) {
33
+ const stream = exitCode === 0 ? process.stdout : process.stderr;
34
+ stream.write(USAGE);
35
+ process.exit(exitCode);
36
+ }
37
+ async function main() {
38
+ const subcommand = process.argv[2];
39
+ const rest = process.argv.slice(3);
40
+ if (subcommand === '--help' || subcommand === '-h') {
41
+ usage(0);
42
+ }
43
+ if (!subcommand) {
44
+ usage(1);
45
+ }
46
+ // Subcommand-level --help: show global usage (subcommand-specific help not yet implemented)
47
+ if (rest.includes('--help') || rest.includes('-h')) {
48
+ usage(0);
49
+ }
50
+ switch (subcommand) {
51
+ case 'sign': {
52
+ const args = parseGlobalArgs(rest);
53
+ const ctx = buildWorkflowContext(args);
54
+ await runSign(ctx, rest);
55
+ break;
56
+ }
57
+ case 'sign-permit': {
58
+ const args = parseGlobalArgs(rest);
59
+ const ctx = buildWorkflowContext(args);
60
+ await runSignPermit(ctx, rest);
61
+ break;
62
+ }
63
+ case 'dry-run': {
64
+ // dry-run does not require signer credentials, but supports --policy-config
65
+ let policyConfig;
66
+ for (let i = 0; i < rest.length; i++) {
67
+ if (rest[i] === '--policy-config')
68
+ policyConfig = rest[++i];
69
+ }
70
+ const ctx = buildDryRunContext({ policyConfig });
71
+ await runDryRun(ctx, rest);
72
+ break;
73
+ }
74
+ case 'get-address': {
75
+ const args = parseGlobalArgs(rest);
76
+ const ctx = buildWorkflowContext(args);
77
+ await runGetAddress(ctx, parseOutputFormat(rest));
78
+ break;
79
+ }
80
+ case 'health': {
81
+ const args = parseGlobalArgs(rest);
82
+ const ctx = buildWorkflowContext(args);
83
+ await runHealth(ctx, parseOutputFormat(rest));
84
+ break;
85
+ }
86
+ case 'encode': {
87
+ await runEncode(rest);
88
+ break;
89
+ }
90
+ case 'decode': {
91
+ await runDecode(rest);
92
+ break;
93
+ }
94
+ case 'mcp': {
95
+ const args = parseGlobalArgs(rest);
96
+ await runMcp(args, rest);
97
+ break;
98
+ }
99
+ default:
100
+ usage();
101
+ }
102
+ }
103
+ main().catch((error) => {
104
+ const message = error instanceof Error ? error.message : String(error);
105
+ process.stderr.write(`Error: ${message}\n`);
106
+ process.exit(1);
107
+ });
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type Address, type Hex, type TransactionSerializable } from 'viem';
2
+ import type { SigningProvider } from './signing-provider.js';
3
+ import type { SignTypedDataParams, SignatureComponents, SignerAdapter } from '../types.js';
4
+ export interface EvmSignerAdapterConfig {
5
+ expectedAddress?: Address;
6
+ }
7
+ /**
8
+ * EVM signing adapter that delegates to a SigningProvider.
9
+ * Same orchestration logic as KmsSignerAdapter but provider-agnostic.
10
+ */
11
+ export declare class EvmSignerAdapter implements SignerAdapter {
12
+ private readonly expectedAddress?;
13
+ private readonly provider;
14
+ private addressPromise;
15
+ constructor(provider: SigningProvider, config?: EvmSignerAdapterConfig);
16
+ /**
17
+ * Get the Ethereum address derived from the provider's public key.
18
+ * Uses promise memoization to avoid concurrent calls during cold start.
19
+ */
20
+ getAddress(): Promise<Address>;
21
+ /**
22
+ * Sign a transaction: serialize -> keccak256 -> provider sign -> DER decode -> assemble signed tx.
23
+ */
24
+ signTransaction(tx: TransactionSerializable): Promise<Hex>;
25
+ /**
26
+ * Sign EIP-712 typed data. Returns {v, r, s} for permit-style calls.
27
+ * v = yParity + 27 (legacy recovery id format expected by EIP-2612 selfPermit).
28
+ */
29
+ signTypedData(params: SignTypedDataParams): Promise<SignatureComponents>;
30
+ /**
31
+ * Health check: verify provider is healthy and address matches expectations.
32
+ */
33
+ healthCheck(): Promise<void>;
34
+ /**
35
+ * Internal: sign a 32-byte digest via provider and resolve the recovery parameter.
36
+ */
37
+ private signDigestAndRecover;
38
+ /**
39
+ * Internal: derive address from provider's public key.
40
+ */
41
+ private deriveAddress;
42
+ }
@@ -0,0 +1,92 @@
1
+ import { hashTypedData, keccak256, serializeTransaction, toHex, } from 'viem';
2
+ import { normalizeSignature, parseDerSignature, publicToAddress, resolveRecoveryParam, } from '../evm-signer.util.js';
3
+ /**
4
+ * EVM signing adapter that delegates to a SigningProvider.
5
+ * Same orchestration logic as KmsSignerAdapter but provider-agnostic.
6
+ */
7
+ export class EvmSignerAdapter {
8
+ expectedAddress;
9
+ provider;
10
+ addressPromise = null;
11
+ constructor(provider, config) {
12
+ this.provider = provider;
13
+ this.expectedAddress = config?.expectedAddress;
14
+ }
15
+ /**
16
+ * Get the Ethereum address derived from the provider's public key.
17
+ * Uses promise memoization to avoid concurrent calls during cold start.
18
+ */
19
+ getAddress() {
20
+ if (!this.addressPromise) {
21
+ this.addressPromise = this.deriveAddress();
22
+ }
23
+ return this.addressPromise;
24
+ }
25
+ /**
26
+ * Sign a transaction: serialize -> keccak256 -> provider sign -> DER decode -> assemble signed tx.
27
+ */
28
+ async signTransaction(tx) {
29
+ const serialized = serializeTransaction(tx);
30
+ const digest = keccak256(serialized, 'bytes');
31
+ const { r, s, yParity } = await this.signDigestAndRecover(digest);
32
+ return serializeTransaction(tx, {
33
+ r: toHex(r, { size: 32 }),
34
+ s: toHex(s, { size: 32 }),
35
+ yParity,
36
+ });
37
+ }
38
+ /**
39
+ * Sign EIP-712 typed data. Returns {v, r, s} for permit-style calls.
40
+ * v = yParity + 27 (legacy recovery id format expected by EIP-2612 selfPermit).
41
+ */
42
+ async signTypedData(params) {
43
+ const hash = hashTypedData(params);
44
+ const digest = hexToBytes(hash);
45
+ const { r, s, yParity } = await this.signDigestAndRecover(digest);
46
+ return {
47
+ v: yParity + 27,
48
+ r: toHex(r, { size: 32 }),
49
+ s: toHex(s, { size: 32 }),
50
+ };
51
+ }
52
+ /**
53
+ * Health check: verify provider is healthy and address matches expectations.
54
+ */
55
+ async healthCheck() {
56
+ await this.provider.healthCheck();
57
+ if (this.expectedAddress) {
58
+ const derivedAddress = await this.getAddress();
59
+ if (derivedAddress.toLowerCase() !== this.expectedAddress.toLowerCase()) {
60
+ throw new Error(`Derived address ${derivedAddress} does not match expected ${this.expectedAddress}`);
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Internal: sign a 32-byte digest via provider and resolve the recovery parameter.
66
+ */
67
+ async signDigestAndRecover(digest) {
68
+ const address = await this.getAddress();
69
+ const signatureBlob = await this.provider.signDigest(digest);
70
+ const { r, s: rawS } = parseDerSignature(signatureBlob.bytes);
71
+ const { r: normalizedR, s } = normalizeSignature(r, rawS);
72
+ const yParity = await resolveRecoveryParam(digest, normalizedR, s, address);
73
+ return { r: normalizedR, s, yParity };
74
+ }
75
+ /**
76
+ * Internal: derive address from provider's public key.
77
+ */
78
+ async deriveAddress() {
79
+ const publicKeyBlob = await this.provider.getPublicKey();
80
+ return publicToAddress(publicKeyBlob.bytes);
81
+ }
82
+ }
83
+ /** Convert a 0x-prefixed hex string to Uint8Array */
84
+ function hexToBytes(hex) {
85
+ const stripped = hex.startsWith('0x') ? hex.slice(2) : hex;
86
+ const bytes = new Uint8Array(stripped.length / 2);
87
+ for (let i = 0; i < bytes.length; i++) {
88
+ bytes[i] = parseInt(stripped.slice(i * 2, i * 2 + 2), 16);
89
+ }
90
+ return bytes;
91
+ }
92
+ //# sourceMappingURL=evm-signer-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-signer-adapter.js","sourceRoot":"","sources":["../../src/core/evm-signer-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface SignatureBlob {
2
+ readonly bytes: Uint8Array;
3
+ readonly encoding: 'der' | 'raw';
4
+ readonly algorithm: 'secp256k1' | 'ed25519';
5
+ }
6
+ export interface PublicKeyBlob {
7
+ readonly bytes: Uint8Array;
8
+ readonly algorithm: 'secp256k1' | 'ed25519';
9
+ }
10
+ export interface SigningProvider {
11
+ signDigest(digest: Uint8Array): Promise<SignatureBlob>;
12
+ getPublicKey(): Promise<PublicKeyBlob>;
13
+ healthCheck(): Promise<void>;
14
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signing-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing-provider.js","sourceRoot":"","sources":["../../src/core/signing-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { type Address } from 'viem';
2
+ /**
3
+ * Parse a DER-encoded ECDSA signature into r and s components.
4
+ *
5
+ * DER format: 0x30 <total-len> 0x02 <r-len> <r-bytes> 0x02 <s-len> <s-bytes>
6
+ */
7
+ export declare function parseDerSignature(der: Uint8Array): {
8
+ r: Uint8Array;
9
+ s: Uint8Array;
10
+ };
11
+ /**
12
+ * Parse a DER-encoded SPKI public key to extract the uncompressed secp256k1 point (65 bytes).
13
+ *
14
+ * SPKI structure for secp256k1:
15
+ * SEQUENCE {
16
+ * SEQUENCE { OID ecPublicKey, OID secp256k1 }
17
+ * BIT STRING { 0x00 (unused bits) 0x04 <x 32 bytes> <y 32 bytes> }
18
+ * }
19
+ */
20
+ export declare function parseDerPublicKey(der: Uint8Array): Uint8Array;
21
+ /**
22
+ * Apply EIP-2 low-s normalization.
23
+ * If s > secp256k1n/2, replace s with secp256k1n - s.
24
+ */
25
+ export declare function normalizeSignature(r: Uint8Array, s: Uint8Array): {
26
+ r: Uint8Array;
27
+ s: Uint8Array;
28
+ };
29
+ /**
30
+ * Resolve the recovery parameter (yParity) by trying 0 and 1,
31
+ * then comparing the recovered address against the expected address.
32
+ * Uses viem's recoverAddress internally.
33
+ */
34
+ export declare function resolveRecoveryParam(digest: Uint8Array, r: Uint8Array, s: Uint8Array, address: Address): Promise<number>;
35
+ /**
36
+ * Derive Ethereum address from an uncompressed secp256k1 public key (65 bytes).
37
+ * address = keccak256(pubkey[1:])[12:]
38
+ */
39
+ export declare function publicToAddress(pubkey: Uint8Array): Address;
40
+ /** Convert a Uint8Array to a BigInt */
41
+ export declare function bytesToBigInt(bytes: Uint8Array): bigint;
42
+ /** Convert a BigInt to a 32-byte Uint8Array */
43
+ export declare function bigIntTo32Bytes(value: bigint): Uint8Array;
@@ -0,0 +1,151 @@
1
+ import { keccak256, recoverAddress, toHex } from 'viem';
2
+ /**
3
+ * secp256k1 curve order (n).
4
+ * Used for low-s normalization (EIP-2).
5
+ */
6
+ const SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;
7
+ const SECP256K1_HALF_N = SECP256K1_N / 2n;
8
+ /**
9
+ * Parse a DER-encoded ECDSA signature into r and s components.
10
+ *
11
+ * DER format: 0x30 <total-len> 0x02 <r-len> <r-bytes> 0x02 <s-len> <s-bytes>
12
+ */
13
+ export function parseDerSignature(der) {
14
+ let offset = 0;
15
+ if (der[offset++] !== 0x30) {
16
+ throw new Error('Invalid DER signature: missing SEQUENCE tag');
17
+ }
18
+ // total length (skip, we parse by structure)
19
+ const totalLen = der[offset++];
20
+ if (offset + totalLen > der.length) {
21
+ throw new Error('Invalid DER signature: length exceeds buffer');
22
+ }
23
+ // Parse r
24
+ if (der[offset++] !== 0x02) {
25
+ throw new Error('Invalid DER signature: missing INTEGER tag for r');
26
+ }
27
+ const rLen = der[offset++];
28
+ const rRaw = new Uint8Array(der.buffer, der.byteOffset + offset, rLen);
29
+ offset += rLen;
30
+ // Parse s
31
+ if (der[offset++] !== 0x02) {
32
+ throw new Error('Invalid DER signature: missing INTEGER tag for s');
33
+ }
34
+ const sLen = der[offset++];
35
+ const sRaw = new Uint8Array(der.buffer, der.byteOffset + offset, sLen);
36
+ // Strip leading zero padding (DER uses signed integers) and pad to 32 bytes
37
+ const r = padTo32Bytes(stripLeadingZeros(rRaw));
38
+ const s = padTo32Bytes(stripLeadingZeros(sRaw));
39
+ return { r, s };
40
+ }
41
+ /**
42
+ * Parse a DER-encoded SPKI public key to extract the uncompressed secp256k1 point (65 bytes).
43
+ *
44
+ * SPKI structure for secp256k1:
45
+ * SEQUENCE {
46
+ * SEQUENCE { OID ecPublicKey, OID secp256k1 }
47
+ * BIT STRING { 0x00 (unused bits) 0x04 <x 32 bytes> <y 32 bytes> }
48
+ * }
49
+ */
50
+ export function parseDerPublicKey(der) {
51
+ // Find the BIT STRING containing the public key
52
+ // The uncompressed key starts with 0x04 and is 65 bytes
53
+ for (let i = 0; i <= der.length - 65; i++) {
54
+ if (der[i] === 0x04) {
55
+ // Verify the byte before is 0x00 (BIT STRING unused bits indicator)
56
+ if (i > 0 && der[i - 1] === 0x00) {
57
+ return new Uint8Array(der.buffer, der.byteOffset + i, 65);
58
+ }
59
+ }
60
+ }
61
+ throw new Error('Failed to extract uncompressed public key from SPKI DER');
62
+ }
63
+ /**
64
+ * Apply EIP-2 low-s normalization.
65
+ * If s > secp256k1n/2, replace s with secp256k1n - s.
66
+ */
67
+ export function normalizeSignature(r, s) {
68
+ const sBigInt = bytesToBigInt(s);
69
+ if (sBigInt > SECP256K1_HALF_N) {
70
+ const normalizedS = SECP256K1_N - sBigInt;
71
+ return { r, s: bigIntTo32Bytes(normalizedS) };
72
+ }
73
+ return { r, s };
74
+ }
75
+ /**
76
+ * Resolve the recovery parameter (yParity) by trying 0 and 1,
77
+ * then comparing the recovered address against the expected address.
78
+ * Uses viem's recoverAddress internally.
79
+ */
80
+ export async function resolveRecoveryParam(digest, r, s, address) {
81
+ const hashHex = toHex(digest);
82
+ const rHex = toHex(r, { size: 32 });
83
+ const sHex = toHex(s, { size: 32 });
84
+ for (const yParity of [0, 1]) {
85
+ try {
86
+ const recovered = await recoverAddress({
87
+ hash: hashHex,
88
+ signature: { r: rHex, s: sHex, yParity },
89
+ });
90
+ if (recovered.toLowerCase() === address.toLowerCase()) {
91
+ return yParity;
92
+ }
93
+ }
94
+ catch {
95
+ // Try next recovery value
96
+ }
97
+ }
98
+ throw new Error('Failed to resolve recovery parameter: no matching yParity found');
99
+ }
100
+ /**
101
+ * Derive Ethereum address from an uncompressed secp256k1 public key (65 bytes).
102
+ * address = keccak256(pubkey[1:])[12:]
103
+ */
104
+ export function publicToAddress(pubkey) {
105
+ if (pubkey.length !== 65 || pubkey[0] !== 0x04) {
106
+ throw new Error('Expected 65-byte uncompressed public key starting with 0x04');
107
+ }
108
+ // Hash the 64-byte x,y coordinates (skip the 0x04 prefix)
109
+ const coordBytes = new Uint8Array(pubkey.buffer, pubkey.byteOffset + 1, 64);
110
+ const hash = keccak256(toHex(coordBytes));
111
+ // Take last 20 bytes (40 hex chars) of the hash
112
+ return `0x${hash.slice(26)}`;
113
+ }
114
+ /** Strip leading zero bytes from a byte array */
115
+ function stripLeadingZeros(bytes) {
116
+ let start = 0;
117
+ while (start < bytes.length - 1 && bytes[start] === 0) {
118
+ start++;
119
+ }
120
+ return start > 0 ? new Uint8Array(bytes.buffer, bytes.byteOffset + start, bytes.length - start) : bytes;
121
+ }
122
+ /** Left-pad a byte array to 32 bytes */
123
+ function padTo32Bytes(bytes) {
124
+ if (bytes.length === 32)
125
+ return bytes;
126
+ if (bytes.length > 32) {
127
+ throw new Error(`Invalid DER integer: ${bytes.length} bytes exceeds 32-byte secp256k1 scalar`);
128
+ }
129
+ const padded = new Uint8Array(32);
130
+ padded.set(bytes, 32 - bytes.length);
131
+ return padded;
132
+ }
133
+ /** Convert a Uint8Array to a BigInt */
134
+ export function bytesToBigInt(bytes) {
135
+ let result = 0n;
136
+ for (const byte of bytes) {
137
+ result = (result << 8n) | BigInt(byte);
138
+ }
139
+ return result;
140
+ }
141
+ /** Convert a BigInt to a 32-byte Uint8Array */
142
+ export function bigIntTo32Bytes(value) {
143
+ const bytes = new Uint8Array(32);
144
+ let v = value;
145
+ for (let i = 31; i >= 0; i--) {
146
+ bytes[i] = Number(v & 0xffn);
147
+ v >>= 8n;
148
+ }
149
+ return bytes;
150
+ }
151
+ //# sourceMappingURL=evm-signer.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-signer.util.js","sourceRoot":"","sources":["../../src/crypto/evm-signer.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { parseDerSignature, parseDerPublicKey, normalizeSignature, resolveRecoveryParam, publicToAddress, bytesToBigInt, bigIntTo32Bytes, } from './crypto/evm-signer.util.js';
@@ -0,0 +1,4 @@
1
+ // Re-export shim for backward compatibility.
2
+ // Canonical location: src/crypto/evm-signer.util.ts
3
+ export { parseDerSignature, parseDerPublicKey, normalizeSignature, resolveRecoveryParam, publicToAddress, bytesToBigInt, bigIntTo32Bytes, } from './crypto/evm-signer.util.js';
4
+ //# sourceMappingURL=evm-signer.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-signer.util.js","sourceRoot":"","sources":["../src/evm-signer.util.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,oDAAoD;AACpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { KmsSignerAdapter, type KmsSignerConfig } from './kms-signer.js';
2
+ export { AwsKmsClient, type IKmsClient, type KmsKeyMetadata } from './kms-client.js';
3
+ export type { SignerAdapter, SignatureComponents, SignTypedDataParams } from './types.js';
4
+ export { parseDerSignature, parseDerPublicKey, normalizeSignature, resolveRecoveryParam, publicToAddress, } from './evm-signer.util.js';
5
+ export type { SigningProvider, SignatureBlob, PublicKeyBlob, } from './core/signing-provider.js';
6
+ export { EvmSignerAdapter, type EvmSignerAdapterConfig } from './core/evm-signer-adapter.js';
7
+ export { AwsKmsProvider, type AwsKmsProviderConfig } from './providers/aws-kms/aws-kms-provider.js';
8
+ export { createSigningProvider, type SigningProviderConfig, type AwsKmsSigningProviderConfig, } from './provider/factory.js';
9
+ export type { PolicyConfig, PolicyRequest, PolicyEvaluation } from './protocols/policy/types.js';
10
+ export type { AuditEntry } from './agentic/audit/types.js';
11
+ export { AuditLogger } from './agentic/audit/logger.js';
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // ─── Backward-compatible exports (unchanged) ───
2
+ export { KmsSignerAdapter } from './kms-signer.js';
3
+ export { AwsKmsClient } from './kms-client.js';
4
+ export { parseDerSignature, parseDerPublicKey, normalizeSignature, resolveRecoveryParam, publicToAddress, } from './evm-signer.util.js';
5
+ export { EvmSignerAdapter } from './core/evm-signer-adapter.js';
6
+ export { AwsKmsProvider } from './providers/aws-kms/aws-kms-provider.js';
7
+ export { createSigningProvider, } from './provider/factory.js';
8
+ export { AuditLogger } from './agentic/audit/logger.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAwC,MAAM,iBAAiB,CAAC;AAErF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,gBAAgB,EAA+B,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,cAAc,EAA6B,MAAM,yCAAyC,CAAC;AACpG,OAAO,EACL,qBAAqB,GAGtB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1 @@
1
+ export { AwsKmsClient, type IKmsClient, type KmsKeyMetadata, } from './providers/aws-kms/aws-kms-client.js';
@@ -0,0 +1,4 @@
1
+ // Re-export shim for backward compatibility.
2
+ // Canonical location: src/providers/aws-kms/aws-kms-client.ts
3
+ export { AwsKmsClient, } from './providers/aws-kms/aws-kms-client.js';
4
+ //# sourceMappingURL=kms-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kms-client.js","sourceRoot":"","sources":["../src/kms-client.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,8DAA8D;AAC9D,OAAO,EACL,YAAY,GAGb,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1 @@
1
+ export { KmsSignerAdapter, type KmsSignerConfig, } from './providers/aws-kms/kms-signer-adapter.js';
@@ -0,0 +1,4 @@
1
+ // Re-export shim for backward compatibility.
2
+ // Canonical location: src/providers/aws-kms/kms-signer-adapter.ts
3
+ export { KmsSignerAdapter, } from './providers/aws-kms/kms-signer-adapter.js';
4
+ //# sourceMappingURL=kms-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kms-signer.js","sourceRoot":"","sources":["../src/kms-signer.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,kEAAkE;AAClE,OAAO,EACL,gBAAgB,GAEjB,MAAM,2CAA2C,CAAC"}