@absol-labs/agent 0.6.0 → 0.7.1

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 (47) hide show
  1. package/README.md +21 -5
  2. package/dist/index.d.ts +6 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/wallet/autonomous-wallet-broker.d.ts +97 -0
  7. package/dist/wallet/autonomous-wallet-broker.d.ts.map +1 -0
  8. package/dist/wallet/autonomous-wallet-broker.js +478 -0
  9. package/dist/wallet/autonomous-wallet-broker.js.map +1 -0
  10. package/dist/wallet/autonomous-wallet-protocol.d.ts +56 -0
  11. package/dist/wallet/autonomous-wallet-protocol.d.ts.map +1 -0
  12. package/dist/wallet/autonomous-wallet-protocol.js +15 -0
  13. package/dist/wallet/autonomous-wallet-protocol.js.map +1 -0
  14. package/dist/wallet/autonomous-wallet.d.ts +106 -0
  15. package/dist/wallet/autonomous-wallet.d.ts.map +1 -0
  16. package/dist/wallet/autonomous-wallet.js +494 -0
  17. package/dist/wallet/autonomous-wallet.js.map +1 -0
  18. package/dist/wallet/privy-broker-server-entry.d.ts +2 -0
  19. package/dist/wallet/privy-broker-server-entry.d.ts.map +1 -0
  20. package/dist/wallet/privy-broker-server-entry.js +8 -0
  21. package/dist/wallet/privy-broker-server-entry.js.map +1 -0
  22. package/dist/wallet/privy-broker-server.d.ts +29 -0
  23. package/dist/wallet/privy-broker-server.d.ts.map +1 -0
  24. package/dist/wallet/privy-broker-server.js +480 -0
  25. package/dist/wallet/privy-broker-server.js.map +1 -0
  26. package/dist/wallet/privy-session-broker.d.ts +109 -0
  27. package/dist/wallet/privy-session-broker.d.ts.map +1 -0
  28. package/dist/wallet/privy-session-broker.js +372 -0
  29. package/dist/wallet/privy-session-broker.js.map +1 -0
  30. package/dist/wallet/privy-session-provider.d.ts +21 -0
  31. package/dist/wallet/privy-session-provider.d.ts.map +1 -0
  32. package/dist/wallet/privy-session-provider.js +94 -0
  33. package/dist/wallet/privy-session-provider.js.map +1 -0
  34. package/dist/wallet/provider.d.ts +51 -2
  35. package/dist/wallet/provider.d.ts.map +1 -1
  36. package/dist/wallet/provider.js +138 -1
  37. package/dist/wallet/provider.js.map +1 -1
  38. package/package.json +3 -1
  39. package/src/index.ts +73 -0
  40. package/src/wallet/autonomous-wallet-broker.ts +774 -0
  41. package/src/wallet/autonomous-wallet-protocol.ts +71 -0
  42. package/src/wallet/autonomous-wallet.ts +779 -0
  43. package/src/wallet/privy-broker-server-entry.ts +9 -0
  44. package/src/wallet/privy-broker-server.ts +573 -0
  45. package/src/wallet/privy-session-broker.ts +634 -0
  46. package/src/wallet/privy-session-provider.ts +129 -0
  47. package/src/wallet/provider.ts +260 -3
@@ -0,0 +1,29 @@
1
+ import { createServer } from "node:http";
2
+ import type { Hex } from "viem";
3
+ import { type AutonomousPreparedRequest, type AutonomousWalletBrokerStore, type AutonomousWalletProvision } from "./autonomous-wallet-broker.js";
4
+ import { type PrivyBrokerSession, type PrivyBrokerSessionStore } from "./privy-session-broker.js";
5
+ export declare function startPrivyBrokerServer(env?: NodeJS.ProcessEnv): Promise<ReturnType<typeof createServer>>;
6
+ export declare class JsonPrivyBrokerSessionStore implements PrivyBrokerSessionStore {
7
+ private readonly path;
8
+ private queue;
9
+ constructor(path: string);
10
+ findByTokenHash(tokenHash: string): Promise<PrivyBrokerSession | null>;
11
+ get(id: string): Promise<PrivyBrokerSession | null>;
12
+ put(session: PrivyBrokerSession): Promise<void>;
13
+ private read;
14
+ }
15
+ /** Persistent replay/idempotency state. It never contains an agent private key. */
16
+ export declare class JsonAutonomousWalletBrokerStore implements AutonomousWalletBrokerStore {
17
+ private readonly path;
18
+ private queue;
19
+ constructor(path: string);
20
+ findProvisionByPublicKey(publicKey: string): Promise<AutonomousWalletProvision | null>;
21
+ findProvisionByNonce(nonce: string): Promise<AutonomousWalletProvision | null>;
22
+ putProvision(provision: AutonomousWalletProvision): Promise<void>;
23
+ getPrepared(requestId: string): Promise<AutonomousPreparedRequest | null>;
24
+ putPrepared(request: AutonomousPreparedRequest): Promise<void>;
25
+ completePrepared(requestId: string, result: Hex, consumedAt: number): Promise<null>;
26
+ private mutate;
27
+ private read;
28
+ }
29
+ //# sourceMappingURL=privy-broker-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy-broker-server.d.ts","sourceRoot":"","sources":["../../src/wallet/privy-broker-server.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAGb,MAAM,WAAW,CAAC;AAKnB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAIL,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AAwDnC,wBAAsB,sBAAsB,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAuJ1C;AAED,qBAAa,2BAA4B,YAAW,uBAAuB;IAG7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,KAAK,CAAoC;gBAEpB,IAAI,EAAE,MAAM;IAEnC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKtE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKnD,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBvC,IAAI;CASnB;AAOD,mFAAmF;AACnF,qBAAa,+BAAgC,YAAW,2BAA2B;IAGrE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,KAAK,CAAoC;gBAEpB,IAAI,EAAE,MAAM;IAEnC,wBAAwB,CAAC,SAAS,EAAE,MAAM;IAQ1C,oBAAoB,CAAC,KAAK,EAAE,MAAM;IAOlC,YAAY,CAAC,SAAS,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,WAAW,CAAC,SAAS,EAAE,MAAM;IAQ7B,WAAW,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;YAmB3D,MAAM;YAiBN,IAAI;CAcnB"}
@@ -0,0 +1,480 @@
1
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
+ import { createServer, } from "node:http";
3
+ import { dirname, resolve } from "node:path";
4
+ import { PrivyClient } from "@privy-io/node";
5
+ import { MetrikClient } from "@absol-labs/sdk";
6
+ import { z } from "zod";
7
+ import { AutonomousWalletBroker, AutonomousWalletBrokerError, createPrivyAutonomousProvider, } from "./autonomous-wallet-broker.js";
8
+ import { PrivySessionBroker, PrivySessionBrokerError, } from "./privy-session-broker.js";
9
+ const serverEnvSchema = z.object({
10
+ PRIVY_APP_ID: z.string().min(1),
11
+ PRIVY_APP_SECRET: z.string().min(1),
12
+ PRIVY_AUTHORIZATION_PRIVATE_KEY_FILE: z.string().min(1),
13
+ PRIVY_KEY_QUORUM_ID: z.string().min(1),
14
+ PRIVY_POLICY_ID: z.string().min(1),
15
+ METRIK_PRIVY_SESSION_STORE: z.string().min(1),
16
+ METRIK_PRIVY_AUTONOMOUS_STORE: z.string().min(1).optional(),
17
+ METRIK_PRIVY_BROKER_PORT: z.coerce.number().int().positive().default(8095),
18
+ METRIK_PRIVY_ALLOWED_ORIGINS: z
19
+ .string()
20
+ .default("https://app.metrik.live,http://localhost:5173,http://localhost:4173"),
21
+ });
22
+ const createSessionSchema = z.object({
23
+ walletId: z.string().min(1),
24
+ address: z.string().min(1),
25
+ signedMandate: z.unknown(),
26
+ });
27
+ const revokeSchema = z.object({ sessionId: z.string().min(1) });
28
+ const rpcSchema = z.object({
29
+ method: z.enum(["eth_sendTransaction", "eth_signTypedData_v4"]),
30
+ params: z.array(z.unknown()),
31
+ });
32
+ const autonomousProofSchema = z.object({
33
+ version: z.literal(1),
34
+ appId: z.string().min(1).max(200),
35
+ chainId: z.literal(84532),
36
+ publicKey: z.string().min(1).max(1_024),
37
+ nonce: z.string().min(16).max(256),
38
+ issuedAt: z.number().int().safe(),
39
+ signature: z.string().min(1).max(1_024),
40
+ });
41
+ const autonomousProvisionSchema = z.object({
42
+ appId: z.string().min(1).max(200),
43
+ chainId: z.literal(84532),
44
+ publicKey: z.string().min(1).max(1_024),
45
+ proof: autonomousProofSchema,
46
+ idempotencyKey: z.string().min(16).max(256),
47
+ });
48
+ const autonomousPrepareSchema = z.object({
49
+ walletId: z.string().min(1).max(256),
50
+ publicKey: z.string().min(1).max(1_024),
51
+ method: z.enum(["eth_sendTransaction", "eth_signTypedData_v4"]),
52
+ params: z.array(z.unknown()).max(4),
53
+ });
54
+ const autonomousExecuteSchema = z.object({
55
+ requestId: z.string().uuid(),
56
+ publicKey: z.string().min(1).max(1_024),
57
+ signature: z.string().min(1).max(1_024),
58
+ });
59
+ export async function startPrivyBrokerServer(env = process.env) {
60
+ const config = serverEnvSchema.parse(env);
61
+ const authorizationPrivateKey = (await readFile(resolve(config.PRIVY_AUTHORIZATION_PRIVATE_KEY_FILE))).toString("base64");
62
+ const client = new PrivyClient({
63
+ appId: config.PRIVY_APP_ID,
64
+ appSecret: config.PRIVY_APP_SECRET,
65
+ });
66
+ const metrik = MetrikClient.baseSepolia();
67
+ const provider = createPrivyProvider(client);
68
+ const autonomousBroker = new AutonomousWalletBroker({
69
+ appId: config.PRIVY_APP_ID,
70
+ policyId: config.PRIVY_POLICY_ID,
71
+ provider: createPrivyAutonomousProvider(client),
72
+ store: new JsonAutonomousWalletBrokerStore(config.METRIK_PRIVY_AUTONOMOUS_STORE ??
73
+ `${config.METRIK_PRIVY_SESSION_STORE}.autonomous`),
74
+ streamReader: {
75
+ getStream: async (streamId) => {
76
+ const stream = await metrik.getStreamV2(streamId);
77
+ return {
78
+ buyer: stream.buyer,
79
+ serviceRef: stream.serviceRef,
80
+ status: stream.status,
81
+ };
82
+ },
83
+ },
84
+ });
85
+ const broker = new PrivySessionBroker({
86
+ provider,
87
+ store: new JsonPrivyBrokerSessionStore(config.METRIK_PRIVY_SESSION_STORE),
88
+ authorizationPrivateKey,
89
+ streamReader: {
90
+ getStream: async (streamId) => {
91
+ const stream = await metrik.getStreamV2(streamId);
92
+ return {
93
+ buyer: stream.buyer,
94
+ serviceRef: stream.serviceRef,
95
+ status: stream.status,
96
+ };
97
+ },
98
+ },
99
+ });
100
+ const allowedOrigins = new Set(config.METRIK_PRIVY_ALLOWED_ORIGINS.split(",").map((value) => value.trim()));
101
+ const limiter = new BrokerRateLimiter();
102
+ const server = createServer(async (request, response) => {
103
+ try {
104
+ applyCors(request, response, allowedOrigins);
105
+ if (request.method === "OPTIONS") {
106
+ response.writeHead(204).end();
107
+ return;
108
+ }
109
+ const url = new URL(request.url ?? "/", "http://localhost");
110
+ if (request.method === "GET" && url.pathname === "/health") {
111
+ sendJson(response, 200, { ok: true });
112
+ return;
113
+ }
114
+ if (request.method === "GET" && url.pathname === "/v1/config") {
115
+ sendJson(response, 200, {
116
+ appId: config.PRIVY_APP_ID,
117
+ keyQuorumId: config.PRIVY_KEY_QUORUM_ID,
118
+ policyId: config.PRIVY_POLICY_ID,
119
+ chainId: 84532,
120
+ maxTotalUsdcAtomic: "1000000",
121
+ maxRatePerSecondAtomic: "1000",
122
+ maxDurationSeconds: 3600,
123
+ });
124
+ return;
125
+ }
126
+ if (request.method === "POST" && url.pathname === "/v1/sessions") {
127
+ const input = createSessionSchema.parse(await readJson(request));
128
+ const result = await broker.createSession({
129
+ accessToken: requireBearer(request),
130
+ walletId: input.walletId,
131
+ address: input.address,
132
+ signedMandate: input.signedMandate,
133
+ });
134
+ sendJson(response, 201, result);
135
+ return;
136
+ }
137
+ if (request.method === "POST" && url.pathname === "/v1/sessions/revoke") {
138
+ const input = revokeSchema.parse(await readJson(request));
139
+ await broker.revokeSession(requireBearer(request), input.sessionId);
140
+ sendJson(response, 200, { revoked: true });
141
+ return;
142
+ }
143
+ if (request.method === "POST" && url.pathname === "/v1/rpc") {
144
+ const input = rpcSchema.parse(await readJson(request));
145
+ const result = await broker.rpc({
146
+ token: requireBearer(request),
147
+ method: input.method,
148
+ params: input.params,
149
+ });
150
+ sendJson(response, 200, { result });
151
+ return;
152
+ }
153
+ if (request.method === "POST" &&
154
+ url.pathname === "/v1/autonomous-wallets") {
155
+ limiter.require(request, "provision", 5, 60 * 60);
156
+ const input = autonomousProvisionSchema.parse(await readJson(request));
157
+ const result = await autonomousBroker.provision(input);
158
+ sendJson(response, 201, result);
159
+ return;
160
+ }
161
+ if (request.method === "POST" &&
162
+ url.pathname === "/v1/autonomous-wallets/prepare") {
163
+ limiter.require(request, "prepare", 120, 60);
164
+ const input = autonomousPrepareSchema.parse(await readJson(request));
165
+ const result = await autonomousBroker.prepare(input);
166
+ sendJson(response, 201, result);
167
+ return;
168
+ }
169
+ if (request.method === "POST" &&
170
+ url.pathname === "/v1/autonomous-wallets/execute") {
171
+ limiter.require(request, "execute", 120, 60);
172
+ const input = autonomousExecuteSchema.parse(await readJson(request));
173
+ const result = await autonomousBroker.execute(input);
174
+ sendJson(response, 200, { result });
175
+ return;
176
+ }
177
+ sendJson(response, 404, { error: "not-found" });
178
+ }
179
+ catch (error) {
180
+ const status = statusFor(error);
181
+ const message = error instanceof PrivySessionBrokerError ||
182
+ error instanceof AutonomousWalletBrokerError ||
183
+ error instanceof z.ZodError
184
+ ? error.message
185
+ : "internal-error";
186
+ sendJson(response, status, { error: message });
187
+ }
188
+ });
189
+ await new Promise((resolveListen, reject) => {
190
+ server.once("error", reject);
191
+ server.listen(config.METRIK_PRIVY_BROKER_PORT, "127.0.0.1", () => {
192
+ server.off("error", reject);
193
+ resolveListen();
194
+ });
195
+ });
196
+ return server;
197
+ }
198
+ export class JsonPrivyBrokerSessionStore {
199
+ path;
200
+ queue = Promise.resolve();
201
+ constructor(path) {
202
+ this.path = path;
203
+ }
204
+ async findByTokenHash(tokenHash) {
205
+ const sessions = await this.read();
206
+ return sessions.find((session) => session.tokenHash === tokenHash) ?? null;
207
+ }
208
+ async get(id) {
209
+ const sessions = await this.read();
210
+ return sessions.find((session) => session.id === id) ?? null;
211
+ }
212
+ async put(session) {
213
+ const operation = this.queue
214
+ .catch(() => undefined)
215
+ .then(async () => {
216
+ const sessions = await this.read();
217
+ const index = sessions.findIndex((candidate) => candidate.id === session.id);
218
+ if (index === -1)
219
+ sessions.push(session);
220
+ else
221
+ sessions[index] = session;
222
+ const target = resolve(this.path);
223
+ const temp = `${target}.${process.pid}.tmp`;
224
+ await mkdir(dirname(target), { recursive: true, mode: 0o700 });
225
+ await writeFile(temp, JSON.stringify(sessions, bigintJson), {
226
+ mode: 0o600,
227
+ });
228
+ await rename(temp, target);
229
+ });
230
+ this.queue = operation;
231
+ return operation;
232
+ }
233
+ async read() {
234
+ try {
235
+ const raw = await readFile(resolve(this.path), "utf8");
236
+ return JSON.parse(raw, bigintReviver);
237
+ }
238
+ catch (error) {
239
+ if (error.code === "ENOENT")
240
+ return [];
241
+ throw error;
242
+ }
243
+ }
244
+ }
245
+ /** Persistent replay/idempotency state. It never contains an agent private key. */
246
+ export class JsonAutonomousWalletBrokerStore {
247
+ path;
248
+ queue = Promise.resolve();
249
+ constructor(path) {
250
+ this.path = path;
251
+ }
252
+ async findProvisionByPublicKey(publicKey) {
253
+ return ((await this.read()).provisions.find((value) => value.publicKey === publicKey) ?? null);
254
+ }
255
+ async findProvisionByNonce(nonce) {
256
+ return ((await this.read()).provisions.find((value) => value.nonce === nonce) ??
257
+ null);
258
+ }
259
+ async putProvision(provision) {
260
+ await this.mutate((state) => {
261
+ const provisions = [...state.provisions];
262
+ const index = provisions.findIndex((value) => value.publicKey === provision.publicKey);
263
+ if (index === -1)
264
+ provisions.push(provision);
265
+ else
266
+ provisions[index] = provision;
267
+ return { ...state, provisions };
268
+ });
269
+ }
270
+ async getPrepared(requestId) {
271
+ return ((await this.read()).prepared.find((value) => value.requestId === requestId) ?? null);
272
+ }
273
+ async putPrepared(request) {
274
+ await this.mutate((state) => {
275
+ const prepared = [...state.prepared];
276
+ const index = prepared.findIndex((value) => value.requestId === request.requestId);
277
+ if (index === -1)
278
+ prepared.push(request);
279
+ else
280
+ prepared[index] = request;
281
+ return { ...state, prepared };
282
+ });
283
+ }
284
+ async completePrepared(requestId, result, consumedAt) {
285
+ let completed = null;
286
+ await this.mutate((state) => {
287
+ const prepared = [...state.prepared];
288
+ const index = prepared.findIndex((value) => value.requestId === requestId);
289
+ if (index === -1)
290
+ return state;
291
+ const current = prepared[index];
292
+ completed =
293
+ current.result === undefined
294
+ ? { ...current, result, consumedAt }
295
+ : current;
296
+ prepared[index] = completed;
297
+ return { ...state, prepared };
298
+ });
299
+ return completed;
300
+ }
301
+ async mutate(operation) {
302
+ const queued = this.queue
303
+ .catch(() => undefined)
304
+ .then(async () => {
305
+ const state = operation(await this.read());
306
+ const target = resolve(this.path);
307
+ const temp = `${target}.${process.pid}.tmp`;
308
+ await mkdir(dirname(target), { recursive: true, mode: 0o700 });
309
+ await writeFile(temp, JSON.stringify(state), { mode: 0o600 });
310
+ await rename(temp, target);
311
+ });
312
+ this.queue = queued;
313
+ return queued;
314
+ }
315
+ async read() {
316
+ try {
317
+ const parsed = JSON.parse(await readFile(resolve(this.path), "utf8"));
318
+ if (!Array.isArray(parsed.provisions) || !Array.isArray(parsed.prepared))
319
+ throw new Error("invalid autonomous broker store");
320
+ return parsed;
321
+ }
322
+ catch (error) {
323
+ if (error.code === "ENOENT")
324
+ return { provisions: [], prepared: [] };
325
+ throw error;
326
+ }
327
+ }
328
+ }
329
+ function createPrivyProvider(client) {
330
+ return {
331
+ verifyAccessToken: async (token) => {
332
+ const verified = await client.utils().auth().verifyAccessToken(token);
333
+ return { userId: verified.user_id };
334
+ },
335
+ getUserWallets: async (userId) => {
336
+ const user = await client.users()._get(userId);
337
+ return user.linked_accounts.flatMap((account) => {
338
+ if (account.type !== "wallet" ||
339
+ !("id" in account) ||
340
+ !("chain_type" in account) ||
341
+ !("address" in account)) {
342
+ return [];
343
+ }
344
+ return [
345
+ {
346
+ id: typeof account.id === "string" ? account.id : null,
347
+ address: account.address,
348
+ chain_type: account.chain_type,
349
+ ...(account.connector_type === undefined
350
+ ? {}
351
+ : { connector_type: String(account.connector_type) }),
352
+ ...(account.wallet_client_type === undefined
353
+ ? {}
354
+ : { wallet_client_type: String(account.wallet_client_type) }),
355
+ },
356
+ ];
357
+ });
358
+ },
359
+ sendTransaction: async (input) => {
360
+ const result = await client
361
+ .wallets()
362
+ .ethereum()
363
+ .sendTransaction(input.walletId, {
364
+ caip2: "eip155:84532",
365
+ params: { transaction: input.transaction },
366
+ sponsor: input.sponsor,
367
+ authorization_context: {
368
+ authorization_private_keys: [input.authorizationPrivateKey],
369
+ },
370
+ });
371
+ return result.hash;
372
+ },
373
+ signTypedData: async (input) => {
374
+ const result = await client
375
+ .wallets()
376
+ .ethereum()
377
+ .signTypedData(input.walletId, {
378
+ params: { typed_data: input.typedData },
379
+ authorization_context: {
380
+ authorization_private_keys: [input.authorizationPrivateKey],
381
+ },
382
+ });
383
+ return result.signature;
384
+ },
385
+ };
386
+ }
387
+ async function readJson(request) {
388
+ const chunks = [];
389
+ let size = 0;
390
+ for await (const chunk of request) {
391
+ const value = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
392
+ size += value.length;
393
+ if (size > 64 * 1024) {
394
+ throw new PrivySessionBrokerError("invalid-request", "request too large");
395
+ }
396
+ chunks.push(value);
397
+ }
398
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
399
+ }
400
+ function requireBearer(request) {
401
+ const value = request.headers.authorization;
402
+ if (!value?.startsWith("Bearer ") || value.length <= 39) {
403
+ throw new PrivySessionBrokerError("unauthorized", "missing bearer token");
404
+ }
405
+ return value.slice(7);
406
+ }
407
+ function applyCors(request, response, allowedOrigins) {
408
+ const origin = request.headers.origin;
409
+ if (origin && allowedOrigins.has(origin)) {
410
+ response.setHeader("access-control-allow-origin", origin);
411
+ response.setHeader("vary", "Origin");
412
+ response.setHeader("access-control-allow-headers", "authorization,content-type");
413
+ response.setHeader("access-control-allow-methods", "GET,POST,OPTIONS");
414
+ }
415
+ }
416
+ function sendJson(response, status, body) {
417
+ if (response.headersSent)
418
+ return;
419
+ response.writeHead(status, {
420
+ "content-type": "application/json; charset=utf-8",
421
+ "cache-control": "no-store",
422
+ "x-content-type-options": "nosniff",
423
+ });
424
+ response.end(JSON.stringify(body));
425
+ }
426
+ function statusFor(error) {
427
+ if (error instanceof z.ZodError)
428
+ return 400;
429
+ if (error instanceof AutonomousWalletBrokerError) {
430
+ if (error.code === "unauthorized")
431
+ return 401;
432
+ if (error.code === "policy-denied" || error.code === "replay")
433
+ return 403;
434
+ if (error.code === "invalid-request")
435
+ return 400;
436
+ return 502;
437
+ }
438
+ if (!(error instanceof PrivySessionBrokerError))
439
+ return 500;
440
+ if (error.code === "unauthorized")
441
+ return 401;
442
+ if (error.code === "expired" || error.code === "revoked")
443
+ return 403;
444
+ if (error.code === "policy-denied")
445
+ return 403;
446
+ if (error.code === "invalid-request")
447
+ return 400;
448
+ return 502;
449
+ }
450
+ class BrokerRateLimiter {
451
+ buckets = new Map();
452
+ require(request, scope, limit, windowSeconds) {
453
+ const now = Math.floor(Date.now() / 1_000);
454
+ const key = `${scope}:${clientAddress(request)}`;
455
+ const current = this.buckets.get(key);
456
+ if (current === undefined || now - current.startedAt >= windowSeconds) {
457
+ this.buckets.set(key, { startedAt: now, count: 1 });
458
+ return;
459
+ }
460
+ if (current.count >= limit)
461
+ throw new AutonomousWalletBrokerError("replay", "autonomous wallet request rate exceeded");
462
+ this.buckets.set(key, { ...current, count: current.count + 1 });
463
+ }
464
+ }
465
+ function clientAddress(request) {
466
+ const forwarded = request.headers["x-forwarded-for"];
467
+ const raw = Array.isArray(forwarded) ? forwarded.at(-1) : forwarded;
468
+ // Caddy appends the direct client as the right-most address. The server is
469
+ // loopback-only, so this header can only arrive through that local proxy.
470
+ return (raw?.split(",").at(-1)?.trim() || request.socket.remoteAddress || "unknown");
471
+ }
472
+ function bigintJson(_key, value) {
473
+ return typeof value === "bigint" ? `${value.toString()}n` : value;
474
+ }
475
+ function bigintReviver(_key, value) {
476
+ return typeof value === "string" && /^\d+n$/.test(value)
477
+ ? BigInt(value.slice(0, -1))
478
+ : value;
479
+ }
480
+ //# sourceMappingURL=privy-broker-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy-broker-server.js","sourceRoot":"","sources":["../../src/wallet/privy-broker-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { type Address, type Hex } from "viem";
2
+ import { type SignedSpendMandate } from "../mandates/mandate.js";
3
+ export declare const PRIVY_BROKER_CHAIN_ID = 84532;
4
+ export declare const PRIVY_BROKER_CAIP2: "eip155:84532";
5
+ export declare const PRIVY_BROKER_ESCROW: "0x0f09f36Ccc05A7c9882F438721C08De314dFd46C";
6
+ export declare const PRIVY_BROKER_USDC: "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
7
+ export declare const PRIVY_POLICY_MAX_TOTAL_USDC = 1000000n;
8
+ export declare const PRIVY_POLICY_MAX_RATE_USDC = 1000n;
9
+ export declare const PRIVY_POLICY_MAX_DURATION_SECONDS = 3600;
10
+ export declare const PRIVY_MAX_SESSION_SECONDS = 86400;
11
+ export interface PrivyLinkedWallet {
12
+ readonly id: string | null;
13
+ readonly address: string;
14
+ readonly chain_type: string;
15
+ readonly connector_type?: string;
16
+ readonly wallet_client_type?: string;
17
+ }
18
+ export interface PrivyBrokerProvider {
19
+ verifyAccessToken(token: string): Promise<{
20
+ readonly userId: string;
21
+ }>;
22
+ getUserWallets(userId: string): Promise<readonly PrivyLinkedWallet[]>;
23
+ sendTransaction(input: {
24
+ readonly walletId: string;
25
+ readonly transaction: Record<string, unknown>;
26
+ readonly authorizationPrivateKey: string;
27
+ readonly sponsor: boolean;
28
+ }): Promise<Hex>;
29
+ signTypedData(input: {
30
+ readonly walletId: string;
31
+ readonly typedData: Record<string, unknown>;
32
+ readonly authorizationPrivateKey: string;
33
+ }): Promise<Hex>;
34
+ }
35
+ export interface BrokerStreamReader {
36
+ getStream(streamId: Hex): Promise<{
37
+ readonly buyer: Address;
38
+ readonly serviceRef: Hex;
39
+ readonly status: "active" | "closed";
40
+ }>;
41
+ }
42
+ export interface PrivyBrokerSession {
43
+ readonly id: string;
44
+ readonly tokenHash: string;
45
+ readonly userId: string;
46
+ readonly walletId: string;
47
+ readonly address: Address;
48
+ readonly signedMandate: SignedSpendMandate;
49
+ readonly expiresAt: number;
50
+ readonly createdAt: number;
51
+ readonly revokedAt?: number;
52
+ readonly spentSoFarUsdc: bigint;
53
+ /** True after the broker has requested gas sponsorship for one write. */
54
+ readonly sponsorshipUsed?: boolean;
55
+ }
56
+ export interface PrivyBrokerSessionStore {
57
+ findByTokenHash(tokenHash: string): Promise<PrivyBrokerSession | null>;
58
+ get(id: string): Promise<PrivyBrokerSession | null>;
59
+ put(session: PrivyBrokerSession): Promise<void>;
60
+ }
61
+ export interface CreatePrivyBrokerSessionInput {
62
+ readonly accessToken: string;
63
+ readonly walletId: string;
64
+ readonly address: Address;
65
+ readonly signedMandate: unknown;
66
+ }
67
+ export interface PrivyBrokerRpcInput {
68
+ readonly token: string;
69
+ readonly method: "eth_sendTransaction" | "eth_signTypedData_v4";
70
+ readonly params: readonly unknown[];
71
+ }
72
+ export declare class PrivySessionBrokerError extends Error {
73
+ readonly code: "unauthorized" | "invalid-request" | "expired" | "revoked" | "policy-denied" | "provider-error";
74
+ constructor(code: "unauthorized" | "invalid-request" | "expired" | "revoked" | "policy-denied" | "provider-error", message: string, options?: {
75
+ readonly cause?: unknown;
76
+ });
77
+ }
78
+ export declare class PrivySessionBroker {
79
+ private readonly dependencies;
80
+ private readonly locks;
81
+ constructor(dependencies: {
82
+ readonly provider: PrivyBrokerProvider;
83
+ readonly store: PrivyBrokerSessionStore;
84
+ readonly streamReader: BrokerStreamReader;
85
+ readonly authorizationPrivateKey: string;
86
+ readonly nowSeconds?: () => number;
87
+ });
88
+ createSession(input: CreatePrivyBrokerSessionInput): Promise<{
89
+ readonly sessionId: string;
90
+ readonly token: string;
91
+ readonly address: Address;
92
+ readonly expiresAt: number;
93
+ }>;
94
+ revokeSession(accessToken: string, sessionId: string): Promise<void>;
95
+ rpc(input: PrivyBrokerRpcInput): Promise<Hex>;
96
+ private sendTransaction;
97
+ private signTypedData;
98
+ private providerSend;
99
+ private requireSession;
100
+ private withSessionLock;
101
+ private now;
102
+ }
103
+ export declare class InMemoryPrivyBrokerSessionStore implements PrivyBrokerSessionStore {
104
+ private readonly sessions;
105
+ findByTokenHash(tokenHash: string): Promise<PrivyBrokerSession | null>;
106
+ get(id: string): Promise<PrivyBrokerSession | null>;
107
+ put(session: PrivyBrokerSession): Promise<void>;
108
+ }
109
+ //# sourceMappingURL=privy-session-broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy-session-broker.d.ts","sourceRoot":"","sources":["../../src/wallet/privy-session-broker.ts"],"names":[],"mappings":"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"}