@elizaos/plugin-tee 2.0.3-beta.6 → 2.0.3-beta.7

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 (39) hide show
  1. package/dist/index.js +465 -0
  2. package/dist/index.js.map +19 -0
  3. package/dist/node/index.d.ts +9 -0
  4. package/dist/node/index.d.ts.map +1 -0
  5. package/dist/node/index.js +38 -0
  6. package/dist/node/providers/base.d.ts +8 -0
  7. package/dist/node/providers/base.d.ts.map +1 -0
  8. package/dist/node/providers/base.js +4 -0
  9. package/dist/node/providers/deriveKey.d.ts +24 -0
  10. package/dist/node/providers/deriveKey.d.ts.map +1 -0
  11. package/dist/node/providers/deriveKey.js +145 -0
  12. package/dist/node/providers/index.d.ts +4 -0
  13. package/dist/node/providers/index.d.ts.map +1 -0
  14. package/dist/node/providers/index.js +3 -0
  15. package/dist/node/providers/remoteAttestation.d.ts +10 -0
  16. package/dist/node/providers/remoteAttestation.d.ts.map +1 -0
  17. package/dist/node/providers/remoteAttestation.js +77 -0
  18. package/dist/node/services/index.d.ts +2 -0
  19. package/dist/node/services/index.d.ts.map +1 -0
  20. package/dist/node/services/index.js +1 -0
  21. package/dist/node/services/tee.d.ts +24 -0
  22. package/dist/node/services/tee.d.ts.map +1 -0
  23. package/dist/node/services/tee.js +42 -0
  24. package/dist/node/types/index.d.ts +59 -0
  25. package/dist/node/types/index.d.ts.map +1 -0
  26. package/dist/node/types/index.js +35 -0
  27. package/dist/node/utils/index.d.ts +9 -0
  28. package/dist/node/utils/index.d.ts.map +1 -0
  29. package/dist/node/utils/index.js +61 -0
  30. package/dist/node/vendors/index.d.ts +5 -0
  31. package/dist/node/vendors/index.d.ts.map +1 -0
  32. package/dist/node/vendors/index.js +14 -0
  33. package/dist/node/vendors/phala.d.ts +10 -0
  34. package/dist/node/vendors/phala.d.ts.map +1 -0
  35. package/dist/node/vendors/phala.js +17 -0
  36. package/dist/node/vendors/types.d.ts +13 -0
  37. package/dist/node/vendors/types.d.ts.map +1 -0
  38. package/dist/node/vendors/types.js +3 -0
  39. package/package.json +8 -8
package/dist/index.js ADDED
@@ -0,0 +1,465 @@
1
+ // src/index.ts
2
+ import { logger as logger4 } from "@elizaos/core";
3
+
4
+ // src/services/tee.ts
5
+ import {
6
+ logger as logger3,
7
+ Service,
8
+ ServiceType
9
+ } from "@elizaos/core";
10
+
11
+ // src/providers/deriveKey.ts
12
+ import crypto from "node:crypto";
13
+ import {
14
+ logger as logger2
15
+ } from "@elizaos/core";
16
+ import {
17
+ TappdClient as TappdClient2
18
+ } from "@phala/dstack-sdk";
19
+ import { Keypair } from "@solana/web3.js";
20
+ import { keccak256 } from "viem";
21
+ import { privateKeyToAccount } from "viem/accounts";
22
+
23
+ // src/utils/index.ts
24
+ import { createHash } from "node:crypto";
25
+ function hexToUint8Array(hex) {
26
+ const hexString = hex.trim().replace(/^0x/, "");
27
+ if (!hexString) {
28
+ throw new Error("Invalid hex string: empty after stripping prefix");
29
+ }
30
+ if (hexString.length % 2 !== 0) {
31
+ throw new Error("Invalid hex string: odd number of characters");
32
+ }
33
+ const array = new Uint8Array(hexString.length / 2);
34
+ for (let i = 0;i < hexString.length; i += 2) {
35
+ const byte = Number.parseInt(hexString.slice(i, i + 2), 16);
36
+ if (Number.isNaN(byte)) {
37
+ throw new Error(`Invalid hex string: invalid byte at position ${i}`);
38
+ }
39
+ array[i / 2] = byte;
40
+ }
41
+ return array;
42
+ }
43
+ function uint8ArrayToHex(bytes) {
44
+ return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
45
+ }
46
+ function calculateSHA256(input) {
47
+ const hash = createHash("sha256");
48
+ hash.update(input);
49
+ return hash.digest();
50
+ }
51
+ function sha256Bytes(input) {
52
+ const hash = createHash("sha256");
53
+ hash.update(input);
54
+ return new Uint8Array(hash.digest());
55
+ }
56
+ function getTeeEndpoint(mode) {
57
+ switch (mode.toUpperCase()) {
58
+ case "LOCAL":
59
+ return "http://localhost:8090";
60
+ case "DOCKER":
61
+ return "http://host.docker.internal:8090";
62
+ case "PRODUCTION":
63
+ return;
64
+ default:
65
+ throw new Error(`Invalid TEE_MODE: ${mode}. Must be one of: LOCAL, DOCKER, PRODUCTION`);
66
+ }
67
+ }
68
+ async function uploadAttestationQuote(data) {
69
+ const blob = new Blob([data], {
70
+ type: "application/octet-stream"
71
+ });
72
+ const formData = new FormData;
73
+ formData.append("file", blob, "quote.bin");
74
+ const response = await fetch("https://proof.t16z.com/api/upload", {
75
+ method: "POST",
76
+ body: formData
77
+ });
78
+ if (!response.ok) {
79
+ throw new Error(`Failed to upload attestation quote: ${response.statusText}`);
80
+ }
81
+ return response.json();
82
+ }
83
+
84
+ // src/providers/base.ts
85
+ class DeriveKeyProvider {
86
+ }
87
+
88
+ class RemoteAttestationProvider {
89
+ }
90
+
91
+ // src/providers/remoteAttestation.ts
92
+ import {
93
+ logger
94
+ } from "@elizaos/core";
95
+ import {
96
+ TappdClient
97
+ } from "@phala/dstack-sdk";
98
+ class PhalaRemoteAttestationProvider extends RemoteAttestationProvider {
99
+ client;
100
+ constructor(teeMode) {
101
+ super();
102
+ const endpoint = getTeeEndpoint(teeMode);
103
+ logger.info(endpoint ? `TEE: Connecting to simulator at ${endpoint}` : "TEE: Running in production mode without simulator");
104
+ this.client = endpoint ? new TappdClient(endpoint) : new TappdClient;
105
+ }
106
+ async generateAttestation(reportData, hashAlgorithm) {
107
+ try {
108
+ const tdxQuote = await this.client.tdxQuote(reportData, hashAlgorithm);
109
+ return {
110
+ quote: tdxQuote.quote,
111
+ timestamp: Date.now()
112
+ };
113
+ } catch (error) {
114
+ const message = error instanceof Error ? error.message : String(error);
115
+ logger.error(`Error generating remote attestation: ${message}`);
116
+ throw new Error(`Failed to generate TDX Quote: ${message}`);
117
+ }
118
+ }
119
+ }
120
+ var phalaRemoteAttestationProvider = {
121
+ name: "phala-remote-attestation",
122
+ dynamic: true,
123
+ contexts: ["secrets", "agent_internal"],
124
+ contextGate: { anyOf: ["secrets", "agent_internal"] },
125
+ cacheStable: false,
126
+ cacheScope: "turn",
127
+ get: async (runtime, message) => {
128
+ const teeModeRaw = runtime.getSetting("TEE_MODE");
129
+ if (!teeModeRaw) {
130
+ return {
131
+ values: {},
132
+ text: "TEE_MODE is not configured"
133
+ };
134
+ }
135
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : String(teeModeRaw);
136
+ const provider = new PhalaRemoteAttestationProvider(teeMode);
137
+ const agentId = runtime.agentId;
138
+ try {
139
+ const attestationMessage = {
140
+ agentId,
141
+ timestamp: Date.now(),
142
+ message: {
143
+ entityId: message.entityId,
144
+ roomId: message.roomId,
145
+ content: message.content.text ?? ""
146
+ }
147
+ };
148
+ const attestation = await provider.generateAttestation(JSON.stringify(attestationMessage));
149
+ return {
150
+ data: {
151
+ quote: attestation.quote,
152
+ timestamp: attestation.timestamp.toString()
153
+ },
154
+ values: {
155
+ quote: attestation.quote,
156
+ timestamp: attestation.timestamp.toString()
157
+ },
158
+ text: `Remote attestation: ${attestation.quote.substring(0, 64)}...`
159
+ };
160
+ } catch (error) {
161
+ const message2 = error instanceof Error ? error.message : String(error);
162
+ logger.error(`Error in remote attestation provider: ${message2}`);
163
+ throw new Error(`Failed to generate TDX Quote: ${message2}`);
164
+ }
165
+ }
166
+ };
167
+
168
+ // src/providers/deriveKey.ts
169
+ class PhalaDeriveKeyProvider extends DeriveKeyProvider {
170
+ client;
171
+ raProvider;
172
+ constructor(teeMode) {
173
+ super();
174
+ const endpoint = getTeeEndpoint(teeMode);
175
+ logger2.info(endpoint ? `TEE: Connecting to key derivation service at ${endpoint}` : "TEE: Running key derivation in production mode");
176
+ this.client = endpoint ? new TappdClient2(endpoint) : new TappdClient2;
177
+ this.raProvider = new PhalaRemoteAttestationProvider(teeMode);
178
+ }
179
+ async generateDeriveKeyAttestation(agentId, publicKey, subject) {
180
+ const deriveKeyData = {
181
+ agentId,
182
+ publicKey,
183
+ subject
184
+ };
185
+ return this.raProvider.generateAttestation(JSON.stringify(deriveKeyData));
186
+ }
187
+ async rawDeriveKey(path, subject) {
188
+ if (!path || !subject) {
189
+ throw new Error("Path and subject are required for key derivation");
190
+ }
191
+ try {
192
+ const response = await this.client.deriveKey(path, subject);
193
+ return {
194
+ key: response.asUint8Array(),
195
+ certificateChain: []
196
+ };
197
+ } catch (error) {
198
+ const message = error instanceof Error ? error.message : String(error);
199
+ logger2.error(`Error deriving raw key: ${message}`);
200
+ throw error;
201
+ }
202
+ }
203
+ async rawDeriveKeyResponse(path, subject) {
204
+ if (!path || !subject) {
205
+ throw new Error("Path and subject are required for key derivation");
206
+ }
207
+ return this.client.deriveKey(path, subject);
208
+ }
209
+ async deriveEd25519Keypair(path, subject, agentId) {
210
+ if (!path || !subject) {
211
+ throw new Error("Path and subject are required for key derivation");
212
+ }
213
+ try {
214
+ const derivedKey = await this.client.deriveKey(path, subject);
215
+ const uint8ArrayDerivedKey = derivedKey.asUint8Array();
216
+ const hash = crypto.createHash("sha256");
217
+ hash.update(uint8ArrayDerivedKey);
218
+ const seed = new Uint8Array(hash.digest());
219
+ const keypair = Keypair.fromSeed(seed.slice(0, 32));
220
+ const attestation = await this.generateDeriveKeyAttestation(agentId, keypair.publicKey.toBase58(), subject);
221
+ return { keypair, attestation };
222
+ } catch (error) {
223
+ const message = error instanceof Error ? error.message : String(error);
224
+ logger2.error(`Error deriving Ed25519 key: ${message}`);
225
+ throw error;
226
+ }
227
+ }
228
+ async deriveEcdsaKeypair(path, subject, agentId) {
229
+ if (!path || !subject) {
230
+ throw new Error("Path and subject are required for key derivation");
231
+ }
232
+ try {
233
+ const derivedKey = await this.client.deriveKey(path, subject);
234
+ const hex = keccak256(derivedKey.asUint8Array());
235
+ const keypair = privateKeyToAccount(hex);
236
+ const attestation = await this.generateDeriveKeyAttestation(agentId, keypair.address, subject);
237
+ return { keypair, attestation };
238
+ } catch (error) {
239
+ const message = error instanceof Error ? error.message : String(error);
240
+ logger2.error(`Error deriving ECDSA key: ${message}`);
241
+ throw error;
242
+ }
243
+ }
244
+ }
245
+ var phalaDeriveKeyProvider = {
246
+ name: "phala-derive-key",
247
+ dynamic: true,
248
+ contexts: ["secrets", "agent_internal"],
249
+ contextGate: { anyOf: ["secrets", "agent_internal"] },
250
+ cacheStable: false,
251
+ cacheScope: "turn",
252
+ get: async (runtime, _message) => {
253
+ const teeModeRaw = runtime.getSetting("TEE_MODE");
254
+ if (!teeModeRaw) {
255
+ return {
256
+ values: {},
257
+ text: "TEE_MODE is not configured"
258
+ };
259
+ }
260
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : String(teeModeRaw);
261
+ const secretSaltRaw = runtime.getSetting("WALLET_SECRET_SALT");
262
+ if (!secretSaltRaw) {
263
+ logger2.error("WALLET_SECRET_SALT is not configured");
264
+ return {
265
+ values: {},
266
+ text: "WALLET_SECRET_SALT is not configured in settings"
267
+ };
268
+ }
269
+ const secretSalt = typeof secretSaltRaw === "string" ? secretSaltRaw : String(secretSaltRaw);
270
+ const provider = new PhalaDeriveKeyProvider(teeMode);
271
+ const agentId = runtime.agentId;
272
+ try {
273
+ const solanaKeypair = await provider.deriveEd25519Keypair(secretSalt, "solana", agentId);
274
+ const evmKeypair = await provider.deriveEcdsaKeypair(secretSalt, "evm", agentId);
275
+ const walletData = {
276
+ solana: solanaKeypair.keypair.publicKey.toBase58(),
277
+ evm: evmKeypair.keypair.address
278
+ };
279
+ const values = {
280
+ solana_public_key: solanaKeypair.keypair.publicKey.toBase58(),
281
+ evm_address: evmKeypair.keypair.address
282
+ };
283
+ const text = `Solana Public Key: ${values.solana_public_key}
284
+ EVM Address: ${values.evm_address}`;
285
+ return {
286
+ data: walletData,
287
+ values,
288
+ text
289
+ };
290
+ } catch (error) {
291
+ const message = error instanceof Error ? error.message : String(error);
292
+ logger2.error(`Error in derive key provider: ${message}`);
293
+ return {
294
+ values: {},
295
+ text: `Failed to derive keys: ${message}`
296
+ };
297
+ }
298
+ }
299
+ };
300
+
301
+ // src/types/index.ts
302
+ var TeeMode;
303
+ ((TeeMode2) => {
304
+ TeeMode2["LOCAL"] = "LOCAL";
305
+ TeeMode2["DOCKER"] = "DOCKER";
306
+ TeeMode2["PRODUCTION"] = "PRODUCTION";
307
+ })(TeeMode ||= {});
308
+ var TeeVendor;
309
+ ((TeeVendor2) => {
310
+ TeeVendor2["PHALA"] = "phala";
311
+ })(TeeVendor ||= {});
312
+ var TeeType;
313
+ ((TeeType2) => {
314
+ TeeType2["SGX_GRAMINE"] = "sgx_gramine";
315
+ TeeType2["TDX_DSTACK"] = "tdx_dstack";
316
+ })(TeeType ||= {});
317
+ function parseTeeMode(mode) {
318
+ switch (mode.toUpperCase()) {
319
+ case "LOCAL":
320
+ return "LOCAL" /* LOCAL */;
321
+ case "DOCKER":
322
+ return "DOCKER" /* DOCKER */;
323
+ case "PRODUCTION":
324
+ return "PRODUCTION" /* PRODUCTION */;
325
+ default:
326
+ throw new Error(`Invalid TEE_MODE: ${mode}. Must be one of: LOCAL, DOCKER, PRODUCTION`);
327
+ }
328
+ }
329
+ function parseTeeVendor(vendor) {
330
+ switch (vendor.toLowerCase()) {
331
+ case "phala":
332
+ return "phala" /* PHALA */;
333
+ default:
334
+ throw new Error(`Invalid TEE_VENDOR: ${vendor}. Must be one of: phala`);
335
+ }
336
+ }
337
+
338
+ // src/services/tee.ts
339
+ class TEEService extends Service {
340
+ provider;
341
+ static serviceType = ServiceType.TEE;
342
+ capabilityDescription = "Trusted Execution Environment for secure key management";
343
+ constructor(runtime, config) {
344
+ super(runtime);
345
+ const teeModeRaw = config?.mode ?? runtime?.getSetting("TEE_MODE") ?? "LOCAL" /* LOCAL */;
346
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : "LOCAL" /* LOCAL */;
347
+ const vendor = config?.vendor ?? "phala" /* PHALA */;
348
+ const secretSaltRaw = config?.secretSalt ?? runtime?.getSetting("WALLET_SECRET_SALT");
349
+ const secretSalt = typeof secretSaltRaw === "string" ? secretSaltRaw : undefined;
350
+ this.config = {
351
+ mode: teeMode,
352
+ vendor,
353
+ ...secretSalt ? { secretSalt } : {}
354
+ };
355
+ this.provider = new PhalaDeriveKeyProvider(teeMode);
356
+ }
357
+ static async start(runtime) {
358
+ const teeModeRaw = runtime.getSetting("TEE_MODE") ?? "LOCAL" /* LOCAL */;
359
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : "LOCAL" /* LOCAL */;
360
+ logger3.info(`Starting TEE service with mode: ${teeMode}`);
361
+ const service = new TEEService(runtime, { mode: teeMode });
362
+ return service;
363
+ }
364
+ async stop() {
365
+ logger3.info("Stopping TEE service");
366
+ }
367
+ async deriveEcdsaKeypair(path, subject, agentId) {
368
+ return this.provider.deriveEcdsaKeypair(path, subject, agentId);
369
+ }
370
+ async deriveEd25519Keypair(path, subject, agentId) {
371
+ return this.provider.deriveEd25519Keypair(path, subject, agentId);
372
+ }
373
+ async rawDeriveKey(path, subject) {
374
+ return this.provider.rawDeriveKeyResponse(path, subject);
375
+ }
376
+ }
377
+ // src/vendors/types.ts
378
+ var TeeVendorNames = {
379
+ PHALA: "phala"
380
+ };
381
+
382
+ // src/vendors/phala.ts
383
+ class PhalaVendor {
384
+ type = TeeVendorNames.PHALA;
385
+ getActions() {
386
+ return [];
387
+ }
388
+ getProviders() {
389
+ return [phalaDeriveKeyProvider, phalaRemoteAttestationProvider];
390
+ }
391
+ getName() {
392
+ return "phala-tee-plugin";
393
+ }
394
+ getDescription() {
395
+ return "Phala Network TEE for secure agent execution";
396
+ }
397
+ }
398
+
399
+ // src/vendors/index.ts
400
+ var vendors = {
401
+ [TeeVendorNames.PHALA]: new PhalaVendor
402
+ };
403
+ function getVendor(type) {
404
+ const vendor = vendors[type];
405
+ if (!vendor) {
406
+ throw new Error(`Unsupported TEE vendor: ${type}`);
407
+ }
408
+ return vendor;
409
+ }
410
+ // src/index.ts
411
+ var defaultVendor = getVendor(TeeVendorNames.PHALA);
412
+ var teePlugin = {
413
+ name: "tee",
414
+ description: "TEE integration plugin for secure key management and remote attestation",
415
+ config: {
416
+ TEE_MODE: process.env.TEE_MODE ?? null,
417
+ TEE_VENDOR: process.env.TEE_VENDOR ?? null,
418
+ WALLET_SECRET_SALT: process.env.WALLET_SECRET_SALT ?? null
419
+ },
420
+ async init(config, runtime) {
421
+ const vendorName = config.TEE_VENDOR ?? runtime.getSetting("TEE_VENDOR") ?? TeeVendorNames.PHALA;
422
+ const teeModeRaw = config.TEE_MODE ?? runtime.getSetting("TEE_MODE") ?? "LOCAL";
423
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : String(teeModeRaw);
424
+ logger4.info(`Initializing TEE plugin with vendor: ${vendorName}, mode: ${teeMode}`);
425
+ if (!["LOCAL", "DOCKER", "PRODUCTION"].includes(teeMode.toUpperCase())) {
426
+ throw new Error(`Invalid TEE_MODE: ${teeMode}. Must be one of: LOCAL, DOCKER, PRODUCTION`);
427
+ }
428
+ logger4.info(`TEE plugin initialized successfully`);
429
+ },
430
+ actions: defaultVendor.getActions(),
431
+ providers: defaultVendor.getProviders(),
432
+ services: [TEEService],
433
+ async dispose(runtime) {
434
+ const svc = runtime.getService(TEEService.serviceType);
435
+ await svc?.stop();
436
+ }
437
+ };
438
+ var src_default = teePlugin;
439
+ export {
440
+ uploadAttestationQuote,
441
+ uint8ArrayToHex,
442
+ teePlugin,
443
+ sha256Bytes,
444
+ phalaRemoteAttestationProvider,
445
+ phalaDeriveKeyProvider,
446
+ parseTeeVendor,
447
+ parseTeeMode,
448
+ hexToUint8Array,
449
+ getVendor,
450
+ getTeeEndpoint,
451
+ src_default as default,
452
+ calculateSHA256,
453
+ TeeVendorNames,
454
+ TeeVendor,
455
+ TeeType,
456
+ TeeMode,
457
+ TEEService,
458
+ RemoteAttestationProvider,
459
+ PhalaVendor,
460
+ PhalaRemoteAttestationProvider,
461
+ PhalaDeriveKeyProvider,
462
+ DeriveKeyProvider
463
+ };
464
+
465
+ //# debugId=31F34ED16D2D291B64756E2164756E21
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/services/tee.ts", "../src/providers/deriveKey.ts", "../src/utils/index.ts", "../src/providers/base.ts", "../src/providers/remoteAttestation.ts", "../src/types/index.ts", "../src/vendors/types.ts", "../src/vendors/phala.ts", "../src/vendors/index.ts"],
4
+ "sourcesContent": [
5
+ "import { type IAgentRuntime, logger, type Plugin } from \"@elizaos/core\";\nimport { TEEService } from \"./services/tee\";\nimport { getVendor, TeeVendorNames } from \"./vendors\";\n\nexport {\n DeriveKeyProvider,\n PhalaDeriveKeyProvider,\n PhalaRemoteAttestationProvider,\n phalaDeriveKeyProvider,\n phalaRemoteAttestationProvider,\n RemoteAttestationProvider,\n} from \"./providers\";\nexport { TEEService } from \"./services\";\nexport * from \"./types\";\nexport {\n calculateSHA256,\n getTeeEndpoint,\n hexToUint8Array,\n sha256Bytes,\n uint8ArrayToHex,\n uploadAttestationQuote,\n} from \"./utils\";\nexport {\n getVendor,\n PhalaVendor,\n type TeeVendorInterface,\n TeeVendorNames,\n} from \"./vendors\";\n\nconst defaultVendor = getVendor(TeeVendorNames.PHALA);\n\nexport const teePlugin: Plugin = {\n name: \"tee\",\n description:\n \"TEE integration plugin for secure key management and remote attestation\",\n\n config: {\n TEE_MODE: process.env.TEE_MODE ?? null,\n TEE_VENDOR: process.env.TEE_VENDOR ?? null,\n WALLET_SECRET_SALT: process.env.WALLET_SECRET_SALT ?? null,\n },\n\n async init(\n config: Record<string, string>,\n runtime: IAgentRuntime,\n ): Promise<void> {\n const vendorName =\n config.TEE_VENDOR ??\n runtime.getSetting(\"TEE_VENDOR\") ??\n TeeVendorNames.PHALA;\n const teeModeRaw =\n config.TEE_MODE ?? runtime.getSetting(\"TEE_MODE\") ?? \"LOCAL\";\n const teeMode =\n typeof teeModeRaw === \"string\" ? teeModeRaw : String(teeModeRaw);\n\n logger.info(\n `Initializing TEE plugin with vendor: ${vendorName}, mode: ${teeMode}`,\n );\n\n if (![\"LOCAL\", \"DOCKER\", \"PRODUCTION\"].includes(teeMode.toUpperCase())) {\n throw new Error(\n `Invalid TEE_MODE: ${teeMode}. Must be one of: LOCAL, DOCKER, PRODUCTION`,\n );\n }\n\n logger.info(`TEE plugin initialized successfully`);\n },\n\n actions: defaultVendor.getActions(),\n providers: defaultVendor.getProviders(),\n services: [TEEService],\n async dispose(runtime: IAgentRuntime) {\n const svc = runtime.getService<TEEService>(TEEService.serviceType);\n await svc?.stop();\n },\n};\n\nexport default teePlugin;\n",
6
+ "import {\n type IAgentRuntime,\n logger,\n type Metadata,\n Service,\n ServiceType,\n type UUID,\n} from \"@elizaos/core\";\nimport type { GetTlsKeyResponse as DeriveKeyResponse } from \"@phala/dstack-sdk\";\nimport type { Keypair } from \"@solana/web3.js\";\nimport type { PrivateKeyAccount } from \"viem\";\nimport { PhalaDeriveKeyProvider } from \"../providers/deriveKey\";\nimport type { RemoteAttestationQuote, TeeServiceConfig } from \"../types\";\nimport { TeeMode, TeeVendor } from \"../types\";\n\nexport class TEEService extends Service {\n private provider: PhalaDeriveKeyProvider;\n static serviceType = ServiceType.TEE;\n public capabilityDescription =\n \"Trusted Execution Environment for secure key management\";\n public declare config?: Metadata;\n\n constructor(runtime?: IAgentRuntime, config?: Partial<TeeServiceConfig>) {\n super(runtime);\n\n const teeModeRaw =\n config?.mode ?? runtime?.getSetting(\"TEE_MODE\") ?? TeeMode.LOCAL;\n const teeMode =\n typeof teeModeRaw === \"string\" ? (teeModeRaw as TeeMode) : TeeMode.LOCAL;\n const vendor = config?.vendor ?? TeeVendor.PHALA;\n const secretSaltRaw =\n config?.secretSalt ?? runtime?.getSetting(\"WALLET_SECRET_SALT\");\n const secretSalt =\n typeof secretSaltRaw === \"string\" ? secretSaltRaw : undefined;\n\n // Set config as Metadata-compatible object\n this.config = {\n mode: teeMode,\n vendor,\n ...(secretSalt ? { secretSalt } : {}),\n } as Metadata;\n\n this.provider = new PhalaDeriveKeyProvider(teeMode);\n }\n\n static async start(runtime: IAgentRuntime): Promise<TEEService> {\n const teeModeRaw = runtime.getSetting(\"TEE_MODE\") ?? TeeMode.LOCAL;\n const teeMode =\n typeof teeModeRaw === \"string\" ? (teeModeRaw as TeeMode) : TeeMode.LOCAL;\n logger.info(`Starting TEE service with mode: ${teeMode}`);\n const service = new TEEService(runtime, { mode: teeMode });\n return service;\n }\n\n async stop(): Promise<void> {\n logger.info(\"Stopping TEE service\");\n }\n\n async deriveEcdsaKeypair(\n path: string,\n subject: string,\n agentId: UUID,\n ): Promise<{\n keypair: PrivateKeyAccount;\n attestation: RemoteAttestationQuote;\n }> {\n return this.provider.deriveEcdsaKeypair(path, subject, agentId);\n }\n\n async deriveEd25519Keypair(\n path: string,\n subject: string,\n agentId: UUID,\n ): Promise<{\n keypair: Keypair;\n attestation: RemoteAttestationQuote;\n }> {\n return this.provider.deriveEd25519Keypair(path, subject, agentId);\n }\n\n async rawDeriveKey(\n path: string,\n subject: string,\n ): Promise<DeriveKeyResponse> {\n return this.provider.rawDeriveKeyResponse(path, subject);\n }\n}\n",
7
+ "import crypto from \"node:crypto\";\nimport {\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n} from \"@elizaos/core\";\nimport {\n type GetTlsKeyResponse as DeriveKeyResponse,\n TappdClient,\n} from \"@phala/dstack-sdk\";\nimport { Keypair } from \"@solana/web3.js\";\nimport { keccak256 } from \"viem\";\nimport { type PrivateKeyAccount, privateKeyToAccount } from \"viem/accounts\";\nimport type {\n DeriveKeyAttestationData,\n DeriveKeyResult,\n RemoteAttestationQuote,\n TeeProviderResult,\n} from \"../types\";\nimport { getTeeEndpoint } from \"../utils\";\nimport { DeriveKeyProvider } from \"./base\";\nimport { PhalaRemoteAttestationProvider } from \"./remoteAttestation\";\nexport class PhalaDeriveKeyProvider extends DeriveKeyProvider {\n private readonly client: TappdClient;\n private readonly raProvider: PhalaRemoteAttestationProvider;\n\n constructor(teeMode: string) {\n super();\n const endpoint = getTeeEndpoint(teeMode);\n\n logger.info(\n endpoint\n ? `TEE: Connecting to key derivation service at ${endpoint}`\n : \"TEE: Running key derivation in production mode\",\n );\n\n this.client = endpoint ? new TappdClient(endpoint) : new TappdClient();\n this.raProvider = new PhalaRemoteAttestationProvider(teeMode);\n }\n\n private async generateDeriveKeyAttestation(\n agentId: string,\n publicKey: string,\n subject?: string,\n ): Promise<RemoteAttestationQuote> {\n const deriveKeyData: DeriveKeyAttestationData = {\n agentId,\n publicKey,\n subject,\n };\n return this.raProvider.generateAttestation(JSON.stringify(deriveKeyData));\n }\n\n async rawDeriveKey(path: string, subject: string): Promise<DeriveKeyResult> {\n if (!path || !subject) {\n throw new Error(\"Path and subject are required for key derivation\");\n }\n\n try {\n const response: DeriveKeyResponse = await this.client.deriveKey(\n path,\n subject,\n );\n return {\n key: response.asUint8Array(),\n certificateChain: [],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error deriving raw key: ${message}`);\n throw error;\n }\n }\n\n async rawDeriveKeyResponse(\n path: string,\n subject: string,\n ): Promise<DeriveKeyResponse> {\n if (!path || !subject) {\n throw new Error(\"Path and subject are required for key derivation\");\n }\n return this.client.deriveKey(path, subject);\n }\n\n async deriveEd25519Keypair(\n path: string,\n subject: string,\n agentId: string,\n ): Promise<{ keypair: Keypair; attestation: RemoteAttestationQuote }> {\n if (!path || !subject) {\n throw new Error(\"Path and subject are required for key derivation\");\n }\n\n try {\n const derivedKey = await this.client.deriveKey(path, subject);\n const uint8ArrayDerivedKey = derivedKey.asUint8Array();\n\n const hash = crypto.createHash(\"sha256\");\n hash.update(uint8ArrayDerivedKey);\n const seed = new Uint8Array(hash.digest());\n\n const keypair = Keypair.fromSeed(seed.slice(0, 32));\n\n const attestation = await this.generateDeriveKeyAttestation(\n agentId,\n keypair.publicKey.toBase58(),\n subject,\n );\n\n return { keypair, attestation };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error deriving Ed25519 key: ${message}`);\n throw error;\n }\n }\n\n async deriveEcdsaKeypair(\n path: string,\n subject: string,\n agentId: string,\n ): Promise<{\n keypair: PrivateKeyAccount;\n attestation: RemoteAttestationQuote;\n }> {\n if (!path || !subject) {\n throw new Error(\"Path and subject are required for key derivation\");\n }\n\n try {\n const derivedKey: DeriveKeyResponse = await this.client.deriveKey(\n path,\n subject,\n );\n const hex = keccak256(derivedKey.asUint8Array());\n const keypair: PrivateKeyAccount = privateKeyToAccount(hex);\n\n const attestation = await this.generateDeriveKeyAttestation(\n agentId,\n keypair.address,\n subject,\n );\n\n return { keypair, attestation };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error deriving ECDSA key: ${message}`);\n throw error;\n }\n }\n}\n\nexport const phalaDeriveKeyProvider: Provider = {\n name: \"phala-derive-key\",\n\n dynamic: true,\n contexts: [\"secrets\", \"agent_internal\"],\n contextGate: { anyOf: [\"secrets\", \"agent_internal\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async (\n runtime: IAgentRuntime,\n _message?: Memory,\n ): Promise<TeeProviderResult> => {\n const teeModeRaw = runtime.getSetting(\"TEE_MODE\");\n if (!teeModeRaw) {\n return {\n values: {},\n text: \"TEE_MODE is not configured\",\n };\n }\n const teeMode =\n typeof teeModeRaw === \"string\" ? teeModeRaw : String(teeModeRaw);\n\n const secretSaltRaw = runtime.getSetting(\"WALLET_SECRET_SALT\");\n if (!secretSaltRaw) {\n logger.error(\"WALLET_SECRET_SALT is not configured\");\n return {\n values: {},\n text: \"WALLET_SECRET_SALT is not configured in settings\",\n };\n }\n const secretSalt =\n typeof secretSaltRaw === \"string\" ? secretSaltRaw : String(secretSaltRaw);\n\n const provider = new PhalaDeriveKeyProvider(teeMode);\n const agentId = runtime.agentId;\n\n try {\n const solanaKeypair = await provider.deriveEd25519Keypair(\n secretSalt,\n \"solana\",\n agentId,\n );\n const evmKeypair = await provider.deriveEcdsaKeypair(\n secretSalt,\n \"evm\",\n agentId,\n );\n\n const walletData = {\n solana: solanaKeypair.keypair.publicKey.toBase58(),\n evm: evmKeypair.keypair.address,\n };\n\n const values = {\n solana_public_key: solanaKeypair.keypair.publicKey.toBase58(),\n evm_address: evmKeypair.keypair.address,\n };\n\n const text = `Solana Public Key: ${values.solana_public_key}\\nEVM Address: ${values.evm_address}`;\n\n return {\n data: walletData,\n values,\n text,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in derive key provider: ${message}`);\n return {\n values: {},\n text: `Failed to derive keys: ${message}`,\n };\n }\n },\n};\n",
8
+ "import { createHash } from \"node:crypto\";\n\nexport function hexToUint8Array(hex: string): Uint8Array {\n const hexString = hex.trim().replace(/^0x/, \"\");\n if (!hexString) {\n throw new Error(\"Invalid hex string: empty after stripping prefix\");\n }\n if (hexString.length % 2 !== 0) {\n throw new Error(\"Invalid hex string: odd number of characters\");\n }\n\n const array = new Uint8Array(hexString.length / 2);\n for (let i = 0; i < hexString.length; i += 2) {\n const byte = Number.parseInt(hexString.slice(i, i + 2), 16);\n if (Number.isNaN(byte)) {\n throw new Error(`Invalid hex string: invalid byte at position ${i}`);\n }\n array[i / 2] = byte;\n }\n return array;\n}\n\nexport function uint8ArrayToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function calculateSHA256(input: string): Buffer {\n const hash = createHash(\"sha256\");\n hash.update(input);\n return hash.digest();\n}\n\nexport function sha256Bytes(input: Uint8Array): Uint8Array {\n const hash = createHash(\"sha256\");\n hash.update(input);\n return new Uint8Array(hash.digest());\n}\n\nexport function getTeeEndpoint(mode: string): string | undefined {\n switch (mode.toUpperCase()) {\n case \"LOCAL\":\n return \"http://localhost:8090\";\n case \"DOCKER\":\n return \"http://host.docker.internal:8090\";\n case \"PRODUCTION\":\n return undefined;\n default:\n throw new Error(\n `Invalid TEE_MODE: ${mode}. Must be one of: LOCAL, DOCKER, PRODUCTION`,\n );\n }\n}\n\nexport async function uploadAttestationQuote(\n data: Uint8Array,\n): Promise<{ checksum: string }> {\n const blob = new Blob([data as BlobPart], {\n type: \"application/octet-stream\",\n });\n const formData = new FormData();\n formData.append(\"file\", blob, \"quote.bin\");\n\n const response = await fetch(\"https://proof.t16z.com/api/upload\", {\n method: \"POST\",\n body: formData as BodyInit,\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to upload attestation quote: ${response.statusText}`,\n );\n }\n\n return response.json() as Promise<{ checksum: string }>;\n}\n",
9
+ "import type {\n DeriveKeyResult,\n RemoteAttestationQuote,\n TdxQuoteHashAlgorithm,\n} from \"../types\";\n\nexport abstract class DeriveKeyProvider {\n abstract rawDeriveKey(\n path: string,\n subject: string,\n ): Promise<DeriveKeyResult>;\n}\n\nexport abstract class RemoteAttestationProvider {\n abstract generateAttestation(\n reportData: string,\n hashAlgorithm?: TdxQuoteHashAlgorithm,\n ): Promise<RemoteAttestationQuote>;\n}\n",
10
+ "import {\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n} from \"@elizaos/core\";\nimport {\n TappdClient,\n type TdxQuoteHashAlgorithms,\n type GetQuoteResponse as TdxQuoteResponse,\n} from \"@phala/dstack-sdk\";\nimport type {\n RemoteAttestationMessage,\n RemoteAttestationQuote,\n TdxQuoteHashAlgorithm,\n TeeProviderResult,\n} from \"../types\";\nimport { getTeeEndpoint } from \"../utils\";\nimport { RemoteAttestationProvider } from \"./base\";\nexport class PhalaRemoteAttestationProvider extends RemoteAttestationProvider {\n private readonly client: TappdClient;\n\n constructor(teeMode: string) {\n super();\n const endpoint = getTeeEndpoint(teeMode);\n\n logger.info(\n endpoint\n ? `TEE: Connecting to simulator at ${endpoint}`\n : \"TEE: Running in production mode without simulator\",\n );\n\n this.client = endpoint ? new TappdClient(endpoint) : new TappdClient();\n }\n\n async generateAttestation(\n reportData: string,\n hashAlgorithm?: TdxQuoteHashAlgorithm,\n ): Promise<RemoteAttestationQuote> {\n try {\n const tdxQuote: TdxQuoteResponse = await this.client.tdxQuote(\n reportData,\n hashAlgorithm as TdxQuoteHashAlgorithms | undefined,\n );\n\n return {\n quote: tdxQuote.quote,\n timestamp: Date.now(),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error generating remote attestation: ${message}`);\n throw new Error(`Failed to generate TDX Quote: ${message}`);\n }\n }\n}\n\nexport const phalaRemoteAttestationProvider: Provider = {\n name: \"phala-remote-attestation\",\n\n dynamic: true,\n contexts: [\"secrets\", \"agent_internal\"],\n contextGate: { anyOf: [\"secrets\", \"agent_internal\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n ): Promise<TeeProviderResult> => {\n const teeModeRaw = runtime.getSetting(\"TEE_MODE\");\n if (!teeModeRaw) {\n return {\n values: {},\n text: \"TEE_MODE is not configured\",\n };\n }\n const teeMode =\n typeof teeModeRaw === \"string\" ? teeModeRaw : String(teeModeRaw);\n\n const provider = new PhalaRemoteAttestationProvider(teeMode);\n const agentId = runtime.agentId;\n\n try {\n const attestationMessage: RemoteAttestationMessage = {\n agentId,\n timestamp: Date.now(),\n message: {\n entityId: message.entityId,\n roomId: message.roomId,\n content: message.content.text ?? \"\",\n },\n };\n\n const attestation = await provider.generateAttestation(\n JSON.stringify(attestationMessage),\n );\n\n return {\n data: {\n quote: attestation.quote,\n timestamp: attestation.timestamp.toString(),\n },\n values: {\n quote: attestation.quote,\n timestamp: attestation.timestamp.toString(),\n },\n text: `Remote attestation: ${attestation.quote.substring(0, 64)}...`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in remote attestation provider: ${message}`);\n throw new Error(`Failed to generate TDX Quote: ${message}`);\n }\n },\n};\n",
11
+ "export enum TeeMode {\n LOCAL = \"LOCAL\",\n DOCKER = \"DOCKER\",\n PRODUCTION = \"PRODUCTION\",\n}\n\nexport enum TeeVendor {\n PHALA = \"phala\",\n}\n\nexport enum TeeType {\n SGX_GRAMINE = \"sgx_gramine\",\n TDX_DSTACK = \"tdx_dstack\",\n}\n\nexport interface RemoteAttestationQuote {\n readonly quote: string;\n readonly timestamp: number;\n}\n\nexport interface DeriveKeyAttestationData {\n readonly agentId: string;\n readonly publicKey: string;\n readonly subject?: string;\n}\n\nexport interface RemoteAttestationMessage {\n readonly agentId: string;\n readonly timestamp: number;\n readonly message: {\n readonly entityId: string;\n readonly roomId: string;\n readonly content: string;\n };\n}\n\nexport interface DeriveKeyResult {\n readonly key: Uint8Array;\n readonly certificateChain: string[];\n}\n\nexport interface Ed25519KeypairResult {\n readonly publicKey: string;\n readonly secretKey: Uint8Array;\n readonly attestation: RemoteAttestationQuote;\n}\n\nexport interface EcdsaKeypairResult {\n readonly address: string;\n readonly privateKey: Uint8Array;\n readonly attestation: RemoteAttestationQuote;\n}\n\nexport interface TeeServiceConfig {\n readonly mode: TeeMode;\n readonly vendor: TeeVendor;\n readonly secretSalt?: string;\n}\n\nexport interface TeeProviderResult {\n readonly data?: ProviderDataRecord;\n readonly values: Record<string, ProviderValue>;\n readonly text: string;\n}\n\nexport type TdxQuoteHashAlgorithm = \"sha256\" | \"sha384\" | \"sha512\" | \"raw\";\n\nexport function parseTeeMode(mode: string): TeeMode {\n switch (mode.toUpperCase()) {\n case \"LOCAL\":\n return TeeMode.LOCAL;\n case \"DOCKER\":\n return TeeMode.DOCKER;\n case \"PRODUCTION\":\n return TeeMode.PRODUCTION;\n default:\n throw new Error(\n `Invalid TEE_MODE: ${mode}. Must be one of: LOCAL, DOCKER, PRODUCTION`,\n );\n }\n}\n\nexport function parseTeeVendor(vendor: string): TeeVendor {\n switch (vendor.toLowerCase()) {\n case \"phala\":\n return TeeVendor.PHALA;\n default:\n throw new Error(`Invalid TEE_VENDOR: ${vendor}. Must be one of: phala`);\n }\n}\n\nimport type { ProviderDataRecord, ProviderValue } from \"@elizaos/core\";\n",
12
+ "import type { Action, Provider } from \"@elizaos/core\";\n\nexport const TeeVendorNames = {\n PHALA: \"phala\",\n} as const;\n\nexport type TeeVendorName =\n (typeof TeeVendorNames)[keyof typeof TeeVendorNames];\n\nexport interface TeeVendorInterface {\n readonly type: TeeVendorName;\n getActions(): Action[];\n getProviders(): Provider[];\n getName(): string;\n getDescription(): string;\n}\n",
13
+ "import type { Action, Provider } from \"@elizaos/core\";\nimport {\n phalaDeriveKeyProvider,\n phalaRemoteAttestationProvider,\n} from \"../providers\";\nimport { type TeeVendorInterface, TeeVendorNames } from \"./types\";\n\nexport class PhalaVendor implements TeeVendorInterface {\n readonly type = TeeVendorNames.PHALA;\n\n getActions(): Action[] {\n return [];\n }\n\n getProviders(): Provider[] {\n return [phalaDeriveKeyProvider, phalaRemoteAttestationProvider];\n }\n\n getName(): string {\n return \"phala-tee-plugin\";\n }\n\n getDescription(): string {\n return \"Phala Network TEE for secure agent execution\";\n }\n}\n",
14
+ "import { PhalaVendor } from \"./phala\";\nimport {\n type TeeVendorInterface,\n type TeeVendorName,\n TeeVendorNames,\n} from \"./types\";\n\nconst vendors: Record<TeeVendorName, TeeVendorInterface> = {\n [TeeVendorNames.PHALA]: new PhalaVendor(),\n};\n\nexport function getVendor(type: TeeVendorName): TeeVendorInterface {\n const vendor = vendors[type];\n if (!vendor) {\n throw new Error(`Unsupported TEE vendor: ${type}`);\n }\n return vendor;\n}\n\nexport { PhalaVendor } from \"./phala\";\nexport {\n type TeeVendorInterface,\n type TeeVendorName,\n TeeVendorNames,\n} from \"./types\";\n"
15
+ ],
16
+ "mappings": "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",
17
+ "debugId": "31F34ED16D2D291B64756E2164756E21",
18
+ "names": []
19
+ }
@@ -0,0 +1,9 @@
1
+ import { type Plugin } from "@elizaos/core";
2
+ export { DeriveKeyProvider, PhalaDeriveKeyProvider, PhalaRemoteAttestationProvider, phalaDeriveKeyProvider, phalaRemoteAttestationProvider, RemoteAttestationProvider, } from "./providers";
3
+ export { TEEService } from "./services";
4
+ export * from "./types";
5
+ export { calculateSHA256, getTeeEndpoint, hexToUint8Array, sha256Bytes, uint8ArrayToHex, uploadAttestationQuote, } from "./utils";
6
+ export { getVendor, PhalaVendor, type TeeVendorInterface, TeeVendorNames, } from "./vendors";
7
+ export declare const teePlugin: Plugin;
8
+ export default teePlugin;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAIxE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,sBAAsB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,kBAAkB,EACvB,cAAc,GACf,MAAM,WAAW,CAAC;AAInB,eAAO,MAAM,SAAS,EAAE,MA4CvB,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { logger } from "@elizaos/core";
2
+ import { TEEService } from "./services/tee";
3
+ import { getVendor, TeeVendorNames } from "./vendors";
4
+ export { DeriveKeyProvider, PhalaDeriveKeyProvider, PhalaRemoteAttestationProvider, phalaDeriveKeyProvider, phalaRemoteAttestationProvider, RemoteAttestationProvider, } from "./providers";
5
+ export { TEEService } from "./services";
6
+ export * from "./types";
7
+ export { calculateSHA256, getTeeEndpoint, hexToUint8Array, sha256Bytes, uint8ArrayToHex, uploadAttestationQuote, } from "./utils";
8
+ export { getVendor, PhalaVendor, TeeVendorNames, } from "./vendors";
9
+ const defaultVendor = getVendor(TeeVendorNames.PHALA);
10
+ export const teePlugin = {
11
+ name: "tee",
12
+ description: "TEE integration plugin for secure key management and remote attestation",
13
+ config: {
14
+ TEE_MODE: process.env.TEE_MODE ?? null,
15
+ TEE_VENDOR: process.env.TEE_VENDOR ?? null,
16
+ WALLET_SECRET_SALT: process.env.WALLET_SECRET_SALT ?? null,
17
+ },
18
+ async init(config, runtime) {
19
+ const vendorName = config.TEE_VENDOR ??
20
+ runtime.getSetting("TEE_VENDOR") ??
21
+ TeeVendorNames.PHALA;
22
+ const teeModeRaw = config.TEE_MODE ?? runtime.getSetting("TEE_MODE") ?? "LOCAL";
23
+ const teeMode = typeof teeModeRaw === "string" ? teeModeRaw : String(teeModeRaw);
24
+ logger.info(`Initializing TEE plugin with vendor: ${vendorName}, mode: ${teeMode}`);
25
+ if (!["LOCAL", "DOCKER", "PRODUCTION"].includes(teeMode.toUpperCase())) {
26
+ throw new Error(`Invalid TEE_MODE: ${teeMode}. Must be one of: LOCAL, DOCKER, PRODUCTION`);
27
+ }
28
+ logger.info(`TEE plugin initialized successfully`);
29
+ },
30
+ actions: defaultVendor.getActions(),
31
+ providers: defaultVendor.getProviders(),
32
+ services: [TEEService],
33
+ async dispose(runtime) {
34
+ const svc = runtime.getService(TEEService.serviceType);
35
+ await svc?.stop();
36
+ },
37
+ };
38
+ export default teePlugin;
@@ -0,0 +1,8 @@
1
+ import type { DeriveKeyResult, RemoteAttestationQuote, TdxQuoteHashAlgorithm } from "../types";
2
+ export declare abstract class DeriveKeyProvider {
3
+ abstract rawDeriveKey(path: string, subject: string): Promise<DeriveKeyResult>;
4
+ }
5
+ export declare abstract class RemoteAttestationProvider {
6
+ abstract generateAttestation(reportData: string, hashAlgorithm?: TdxQuoteHashAlgorithm): Promise<RemoteAttestationQuote>;
7
+ }
8
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAElB,8BAAsB,iBAAiB;IACrC,QAAQ,CAAC,YAAY,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;CAC5B;AAED,8BAAsB,yBAAyB;IAC7C,QAAQ,CAAC,mBAAmB,CAC1B,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,qBAAqB,GACpC,OAAO,CAAC,sBAAsB,CAAC;CACnC"}
@@ -0,0 +1,4 @@
1
+ export class DeriveKeyProvider {
2
+ }
3
+ export class RemoteAttestationProvider {
4
+ }
@@ -0,0 +1,24 @@
1
+ import { type Provider } from "@elizaos/core";
2
+ import { type GetTlsKeyResponse as DeriveKeyResponse } from "@phala/dstack-sdk";
3
+ import { Keypair } from "@solana/web3.js";
4
+ import { type PrivateKeyAccount } from "viem/accounts";
5
+ import type { DeriveKeyResult, RemoteAttestationQuote } from "../types";
6
+ import { DeriveKeyProvider } from "./base";
7
+ export declare class PhalaDeriveKeyProvider extends DeriveKeyProvider {
8
+ private readonly client;
9
+ private readonly raProvider;
10
+ constructor(teeMode: string);
11
+ private generateDeriveKeyAttestation;
12
+ rawDeriveKey(path: string, subject: string): Promise<DeriveKeyResult>;
13
+ rawDeriveKeyResponse(path: string, subject: string): Promise<DeriveKeyResponse>;
14
+ deriveEd25519Keypair(path: string, subject: string, agentId: string): Promise<{
15
+ keypair: Keypair;
16
+ attestation: RemoteAttestationQuote;
17
+ }>;
18
+ deriveEcdsaKeypair(path: string, subject: string, agentId: string): Promise<{
19
+ keypair: PrivateKeyAccount;
20
+ attestation: RemoteAttestationQuote;
21
+ }>;
22
+ }
23
+ export declare const phalaDeriveKeyProvider: Provider;
24
+ //# sourceMappingURL=deriveKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveKey.d.ts","sourceRoot":"","sources":["../../../src/providers/deriveKey.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,iBAAiB,IAAI,iBAAiB,EAE5C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAEV,eAAe,EACf,sBAAsB,EAEvB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;gBAEhD,OAAO,EAAE,MAAM;YAcb,4BAA4B;IAapC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBrE,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC;IAOvB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,sBAAsB,CAAA;KAAE,CAAC;IA6B/D,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,OAAO,EAAE,iBAAiB,CAAC;QAC3B,WAAW,EAAE,sBAAsB,CAAC;KACrC,CAAC;CA0BH;AAED,eAAO,MAAM,sBAAsB,EAAE,QA0EpC,CAAC"}