@picoads/eliza-plugin 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.
- package/LICENSE +201 -0
- package/README.md +123 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +1067 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/picoads.ts","../src/actions/register.ts","../src/actions/place-bid.ts","../src/actions/place-ask.ts","../src/actions/check-matches.ts","../src/actions/fetch-creative.ts","../src/actions/deliver.ts","../src/actions/confirm.ts","../src/actions/settle.ts","../src/actions/reputation.ts","../src/actions/action-items.ts","../src/providers/market.ts","../src/providers/agent-state.ts","../src/index.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport { Service, type IAgentRuntime, type Memory } from \"@elizaos/core\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\nimport { getAddress } from \"viem\";\n\nexport class PicoadsService extends Service {\n static serviceType = \"PICOADS\";\n capabilityDescription =\n \"Connects to the picoads micro ad network — handles EIP-191 auth, x402 payments, and marketplace interactions.\";\n\n private apiUrl!: string;\n private account!: PrivateKeyAccount;\n private apiKey: string | null = null;\n private _agentId!: string;\n private termsAccepted = false;\n\n // Provider caches\n private marketCache: { data: string; expiresAt: number } | null = null;\n private stateCache: { data: string; expiresAt: number } | null = null;\n private CACHE_TTL_MS = 60_000;\n\n get agentId(): string {\n return this._agentId;\n }\n\n static async start(runtime: IAgentRuntime): Promise<PicoadsService> {\n const service = new PicoadsService(runtime);\n await service.initialize(runtime);\n return service;\n }\n\n async stop(): Promise<void> {\n this.marketCache = null;\n this.stateCache = null;\n }\n\n private async initialize(runtime: IAgentRuntime): Promise<void> {\n this.apiUrl =\n (runtime.getSetting(\"PICOADS_API_URL\") as string) ??\n \"https://picoads.xyz\";\n const privateKey = runtime.getSetting(\"EVM_PRIVATE_KEY\") as string;\n if (!privateKey)\n throw new Error(\"EVM_PRIVATE_KEY required in character settings\");\n\n this.account = privateKeyToAccount(privateKey as `0x${string}`);\n this._agentId = getAddress(this.account.address);\n\n // Check Memory for existing registration\n const memories = await runtime.getMemories({\n tableName: \"picoads_state\",\n });\n const regMemory = memories?.find(\n (m: Memory) => {\n const meta = m.content?.metadata as Record<string, unknown> | undefined;\n return meta?.type === \"registration\";\n },\n );\n const regMeta = regMemory?.content?.metadata as Record<string, unknown> | undefined;\n if (regMeta?.apiKey) {\n this.apiKey = regMeta.apiKey as string;\n // Verify it still works\n try {\n const resp = await fetch(\n `${this.apiUrl}/agents/${this._agentId}/profile`,\n );\n if (!resp.ok) {\n this.apiKey = null;\n }\n } catch {\n this.apiKey = null;\n }\n }\n }\n\n // --- Registration state ---\n\n getRegistrationState(): {\n registered: boolean;\n apiKey: string | null;\n } {\n return { registered: this.apiKey !== null, apiKey: this.apiKey };\n }\n\n setApiKey(key: string): void {\n this.apiKey = key;\n }\n\n hasAcceptedTerms(): boolean {\n return this.termsAccepted;\n }\n\n markTermsAccepted(): void {\n this.termsAccepted = true;\n }\n\n // --- Provider caches ---\n\n getMarketCache(): string | null {\n if (this.marketCache && Date.now() < this.marketCache.expiresAt) {\n return this.marketCache.data;\n }\n this.marketCache = null;\n return null;\n }\n\n setMarketCache(data: string): void {\n this.marketCache = { data, expiresAt: Date.now() + this.CACHE_TTL_MS };\n }\n\n getStateCache(): string | null {\n if (this.stateCache && Date.now() < this.stateCache.expiresAt) {\n return this.stateCache.data;\n }\n this.stateCache = null;\n return null;\n }\n\n setStateCache(data: string): void {\n this.stateCache = { data, expiresAt: Date.now() + this.CACHE_TTL_MS };\n }\n\n invalidateStateCache(): void {\n this.stateCache = null;\n }\n\n // --- EIP-191 signing ---\n\n async signEip191(\n method: string,\n path: string,\n ): Promise<{ header: string; nonce: string; timestamp: string }> {\n const nonce = crypto.randomBytes(16).toString(\"hex\");\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const message = `picoads:${method}:${path}:${nonce}:${timestamp}`;\n\n const signature = await this.account.signMessage({ message });\n\n return {\n header: `EIP191 ${this._agentId}:${nonce}:${timestamp}:${signature}`,\n nonce,\n timestamp,\n };\n }\n\n // --- API calls ---\n\n async apiCall(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<Response> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n // Add EIP-191 auth for mutations\n if (method !== \"GET\") {\n const auth = await this.signEip191(method, path);\n headers[\"Authorization\"] = auth.header;\n }\n\n let resp = await fetch(`${this.apiUrl}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // Retry on 429 with backoff\n if (resp.status === 429) {\n const retryAfter = Number(resp.headers.get(\"retry-after\") ?? \"5\");\n await new Promise((r) => setTimeout(r, retryAfter * 1000));\n // Re-sign for mutations (nonce must be fresh)\n if (method !== \"GET\") {\n const auth = await this.signEip191(method, path);\n headers[\"Authorization\"] = auth.header;\n }\n resp = await fetch(`${this.apiUrl}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n return resp;\n }\n\n // --- x402 payment ---\n\n async payX402(\n endpoint: string,\n body?: unknown,\n ): Promise<{ success: boolean; data?: Record<string, unknown>; error?: string }> {\n // Step 1: POST to get 402 with payment details\n const probeResp = await this.apiCall(\"POST\", endpoint, body);\n\n if (probeResp.status !== 402) {\n const data = await probeResp.json().catch(() => ({}));\n return {\n success: probeResp.ok,\n data: data as Record<string, unknown>,\n error: probeResp.ok ? undefined : (data as Record<string, unknown>).error as string,\n };\n }\n\n // Step 2: Decode payment requirements from PAYMENT-REQUIRED header\n const paymentRequiredHeader = probeResp.headers.get(\"payment-required\");\n if (!paymentRequiredHeader) {\n return { success: false, error: \"Got 402 but no PAYMENT-REQUIRED header\" };\n }\n\n const paymentRequired = JSON.parse(\n Buffer.from(paymentRequiredHeader, \"base64\").toString(),\n );\n const requirements = paymentRequired.accepts[0];\n\n // Step 3: Sign EIP-3009 TransferWithAuthorization\n const validAfter = 0;\n const validBefore = Math.floor(Date.now() / 1000) + 3600;\n const nonce = `0x${crypto.randomBytes(32).toString(\"hex\")}` as `0x${string}`;\n\n const domain = {\n name: (requirements.extra?.name as string) ?? \"USD Coin\",\n version: (requirements.extra?.version as string) ?? \"2\",\n chainId: 8453,\n verifyingContract: requirements.asset as `0x${string}`,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const typedMessage = {\n from: this.account.address,\n to: requirements.payTo as `0x${string}`,\n value: BigInt(requirements.amount),\n validAfter: BigInt(validAfter),\n validBefore: BigInt(validBefore),\n nonce,\n };\n\n const signature = await this.account.signTypedData({\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message: typedMessage,\n });\n\n // Step 4: Construct payment payload and encode as base64\n const paymentPayload = {\n x402Version: 2,\n resource: paymentRequired.resource,\n accepted: requirements,\n payload: {\n signature,\n authorization: {\n from: this.account.address,\n to: requirements.payTo,\n value: requirements.amount,\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n },\n };\n\n const paymentSignatureHeader = Buffer.from(\n JSON.stringify(paymentPayload),\n ).toString(\"base64\");\n\n // Step 5: Resend with payment signature (fresh EIP-191 auth)\n const auth = await this.signEip191(\"POST\", endpoint);\n const finalResp = await fetch(`${this.apiUrl}${endpoint}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: auth.header,\n \"PAYMENT-SIGNATURE\": paymentSignatureHeader,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const finalData = await finalResp.json().catch(() => ({}));\n return {\n success: finalResp.ok,\n data: finalData as Record<string, unknown>,\n error: finalResp.ok ? undefined : \"Payment failed\",\n };\n }\n}\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const registerAction: Action = {\n name: \"REGISTER_AGENT\",\n description:\n \"Register on picoads to start advertising or publishing. Costs $1 USDC on Base.\",\n similes: [\n \"register on picoads\",\n \"sign up for picoads\",\n \"create picoads account\",\n \"join picoads\",\n \"join the ad network\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return false;\n return !service.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const result = await service.payX402(\"/agents/register\", {\n name: `agent-${service.agentId.slice(0, 8)}`,\n description: \"Eliza agent\",\n wallet: service.agentId,\n source: \"eliza\",\n registrationFile: {\n name: `agent-${service.agentId.slice(0, 8)}`,\n description: \"Eliza agent\",\n },\n });\n\n if (!result.success) {\n callback?.({ text: `Registration failed: ${result.error}` });\n return { success: false, error: `Registration failed: ${result.error}` };\n }\n\n // Store API key in Memory\n const apiKey = result.data?.apiKey as string;\n service.setApiKey(apiKey);\n\n await runtime.createMemory(\n {\n entityId: runtime.agentId,\n roomId: message.roomId,\n content: {\n text: `Registered on picoads as ${service.agentId}`,\n metadata: {\n source: \"picoads\",\n type: \"registration\",\n agentId: service.agentId,\n apiKey,\n registeredAt: new Date().toISOString(),\n },\n },\n unique: true,\n } as Memory,\n \"picoads_state\",\n );\n\n // Fetch hub data for the response nudge\n const hubsResp = await service.apiCall(\"GET\", \"/hubs\");\n const hubs = hubsResp.ok ? ((await hubsResp.json()) as unknown[]) : [];\n\n const text =\n `Registered on picoads as ${service.agentId}. ` +\n `Trust tier 0: $0.05 max match, 1 concurrent delivery. ` +\n `${hubs.length} active hub(s) available. ` +\n `Use PLACE_ASK to offer your distribution or PLACE_BID to advertise.`;\n\n callback?.({ text });\n service.invalidateStateCache();\n return { success: true, text };\n },\n\n examples: [\n [\n {\n name: \"user\",\n content: { text: \"Register me on picoads\" },\n },\n {\n name: \"assistant\",\n content: { text: \"Registering on picoads ($1 USDC)...\" },\n },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const placeBidAction: Action = {\n name: \"PLACE_BID\",\n description:\n \"Post an advertising bid in a picoads hub. You specify what outcome you want (e.g. 'click', 'impression'), \" +\n \"your budget, unit price, targeting, and creative. If a matching publisher ask exists, you'll be matched automatically.\",\n similes: [\n \"place a bid\",\n \"advertise on picoads\",\n \"post a bid\",\n \"buy ads\",\n \"create an ad campaign\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n if (!service.getRegistrationState().registered) {\n return { success: false, error: \"Not registered. Use REGISTER_AGENT first.\" };\n }\n\n // Extract parameters from options (LLM-extracted from user message)\n const hubId = options?.hubId as string;\n const objective = options?.objective as string;\n const budget = options?.budget as number;\n const unitPrice = options?.unitPrice as number;\n const targeting = options?.targeting as Record<string, unknown> | undefined;\n const creative = options?.creative as Record<string, unknown> | undefined;\n const callbackUrl = options?.callbackUrl as string | undefined;\n\n if (!hubId || !objective || !budget || !unitPrice) {\n callback?.({\n text: \"I need: hubId, objective (e.g. 'click'), budget (total USDC), and unitPrice (per unit USDC). Check available hubs first.\",\n });\n return {\n success: false,\n error: \"Missing required fields: hubId, objective, budget, unitPrice\",\n };\n }\n\n const needsTerms = !service.hasAcceptedTerms();\n\n const body: Record<string, unknown> = {\n agentId: service.agentId,\n objective,\n budget,\n unitPrice,\n settlementChain: \"base\",\n settlementWallet: service.agentId,\n ...(targeting && { targeting }),\n ...(creative && { creative }),\n ...(callbackUrl && { callbackUrl }),\n ...(needsTerms && { termsAccepted: true }),\n };\n\n const resp = await service.apiCall(\"POST\", `/hubs/${hubId}/bids`, body);\n const data = (await resp.json()) as Record<string, unknown>;\n\n if (!resp.ok) {\n callback?.({ text: `Bid failed: ${data.error ?? resp.statusText}` });\n return { success: false, error: data.error as string };\n }\n\n if (needsTerms) service.markTermsAccepted();\n service.invalidateStateCache();\n\n const status = data.status === \"matched\" ? \" -- MATCHED with a publisher!\" : \" (status: open)\";\n const text = `Bid placed in hub ${hubId}${status}. Budget: $${budget}, unit price: $${unitPrice}/${objective}.`;\n callback?.({ text });\n return { success: true, text, data };\n },\n\n examples: [\n [\n {\n name: \"user\",\n content: { text: \"I want to advertise my DeFi protocol in the defi-yield hub at $0.05 per click with a $5 budget\" },\n },\n {\n name: \"assistant\",\n content: { text: \"Placing a bid in defi-yield: $5 budget, $0.05/click...\" },\n },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const placeAskAction: Action = {\n name: \"PLACE_ASK\",\n description:\n \"Post a publishing ask in a picoads hub. You specify your inventory (e.g. 'newsletter slot'), \" +\n \"floor price, audience details, and accepted formats. If a matching advertiser bid exists, you'll be matched automatically.\",\n similes: [\n \"place an ask\",\n \"offer distribution\",\n \"post an ask\",\n \"sell ad space\",\n \"offer inventory\",\n \"publish on picoads\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n if (!service.getRegistrationState().registered) {\n return { success: false, error: \"Not registered. Use REGISTER_AGENT first.\" };\n }\n\n const hubId = options?.hubId as string;\n const inventory = options?.inventory as string;\n const floorPrice = options?.floorPrice as number;\n const audience = options?.audience as Record<string, unknown> | undefined;\n const formats = options?.formats as string[] | undefined;\n const autoRenew = options?.autoRenew as boolean | undefined;\n const callbackUrl = options?.callbackUrl as string | undefined;\n\n if (!hubId || !inventory || !floorPrice) {\n callback?.({\n text: \"I need: hubId, inventory (description of your ad space), and floorPrice (minimum USDC per unit).\",\n });\n return {\n success: false,\n error: \"Missing required fields: hubId, inventory, floorPrice\",\n };\n }\n\n const needsTerms = !service.hasAcceptedTerms();\n\n const body: Record<string, unknown> = {\n agentId: service.agentId,\n inventory,\n floorPrice,\n settlementChain: \"base\",\n settlementWallet: service.agentId,\n formats: formats ?? [\"text\", \"link\"],\n ...(audience && { audience }),\n ...(autoRenew !== undefined && { autoRenew }),\n ...(callbackUrl && { callbackUrl }),\n ...(needsTerms && { termsAccepted: true }),\n };\n\n const resp = await service.apiCall(\"POST\", `/hubs/${hubId}/asks`, body);\n const data = (await resp.json()) as Record<string, unknown>;\n\n if (!resp.ok) {\n callback?.({ text: `Ask failed: ${data.error ?? resp.statusText}` });\n return { success: false, error: data.error as string };\n }\n\n if (needsTerms) service.markTermsAccepted();\n service.invalidateStateCache();\n\n const status = data.status === \"matched\" ? \" -- MATCHED with an advertiser!\" : \" (status: open)\";\n const text = `Ask placed in hub ${hubId}${status}. Inventory: ${inventory}, floor: $${floorPrice}.`;\n callback?.({ text });\n return { success: true, text, data };\n },\n\n examples: [\n [\n {\n name: \"user\",\n content: { text: \"I want to sell a newsletter slot in the defi-yield hub at $0.03 floor\" },\n },\n {\n name: \"assistant\",\n content: { text: \"Placing an ask in defi-yield: newsletter slot at $0.03 floor...\" },\n },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const checkMatchesAction: Action = {\n name: \"CHECK_MATCHES\",\n description:\n \"Check your current matches on picoads. Shows pending deliveries, delivered matches awaiting confirmation, and settled matches.\",\n similes: [\n \"check matches\",\n \"my matches\",\n \"match status\",\n \"see my matches\",\n \"what's matched\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const statusFilter = options?.status as string | undefined;\n\n const resp = await service.apiCall(\"GET\", `/agents/${service.agentId}/matches`);\n if (!resp.ok) {\n return { success: false, error: \"Failed to fetch matches\" };\n }\n\n const matches = (await resp.json()) as Array<Record<string, unknown>>;\n const filtered = statusFilter\n ? matches.filter((m) => m.status === statusFilter)\n : matches;\n\n if (filtered.length === 0) {\n const text = statusFilter\n ? `No matches with status '${statusFilter}'.`\n : \"No matches found.\";\n callback?.({ text });\n return { success: true, text };\n }\n\n const byStatus: Record<string, Array<Record<string, unknown>>> = {};\n for (const m of filtered) {\n const s = m.status as string;\n (byStatus[s] ??= []).push(m);\n }\n\n const lines: string[] = [];\n for (const [status, group] of Object.entries(byStatus)) {\n lines.push(`${status}: ${group.length} match(es)`);\n for (const m of group.slice(0, 5)) {\n let detail = ` - ${(m.id as string).slice(0, 12)}... hub: ${m.hubId}, price: $${m.agreedPrice}`;\n const v = m.verification as Record<string, unknown> | undefined;\n if (v?.status) detail += ` (${v.status})`;\n if (m.disputedBy) detail += ` [disputed by: ${m.disputedBy}]`;\n lines.push(detail);\n }\n if (group.length > 5) lines.push(` ... and ${group.length - 5} more`);\n }\n\n const text = `Your matches:\\n${lines.join(\"\\n\")}`;\n callback?.({ text });\n return { success: true, text, data: { matches: filtered } };\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"Show me my picoads matches\" } },\n { name: \"assistant\", content: { text: \"Checking your matches...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const fetchCreativeAction: Action = {\n name: \"FETCH_CREATIVE\",\n description:\n \"Fetch the ad creative for a matched bid so you can deliver it. Only relevant for publishers with pending delivery matches.\",\n similes: [\n \"fetch creative\",\n \"get ad creative\",\n \"get the ad\",\n \"what should I publish\",\n \"download creative\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const matchId = options?.matchId as string | undefined;\n\n // If no matchId, find the first pending delivery\n let targetMatchId = matchId;\n if (!targetMatchId) {\n const resp = await service.apiCall(\n \"GET\",\n `/agents/${service.agentId}/matches`,\n );\n if (resp.ok) {\n const matches = (await resp.json()) as Array<Record<string, unknown>>;\n const pending = matches.find((m) => m.status === \"pending_delivery\");\n if (pending) targetMatchId = pending.id as string;\n }\n }\n\n if (!targetMatchId) {\n callback?.({ text: \"No pending deliveries found. Nothing to fetch.\" });\n return { success: false, error: \"No pending deliveries\" };\n }\n\n // Get match details (includes bid info with creative)\n const resp = await service.apiCall(\"GET\", `/matches/${targetMatchId}`);\n if (!resp.ok) {\n return { success: false, error: \"Failed to fetch match details\" };\n }\n\n const match = (await resp.json()) as Record<string, unknown>;\n const creative = match.creative as Record<string, unknown> | undefined;\n\n const lines: string[] = [`Match: ${targetMatchId}`, `Hub: ${match.hubId}`, `Price: $${match.agreedPrice}`];\n if (creative) {\n if (creative.headline) lines.push(`Headline: ${creative.headline}`);\n if (creative.body) lines.push(`Body: ${creative.body}`);\n if (creative.cta) lines.push(`CTA: ${creative.cta}`);\n if (creative.url) lines.push(`URL: ${creative.url}`);\n } else {\n lines.push(\"No creative details attached to this bid.\");\n }\n\n const text = lines.join(\"\\n\");\n callback?.({ text });\n return { success: true, text, data: { matchId: targetMatchId, creative } };\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"What ad should I deliver?\" } },\n { name: \"assistant\", content: { text: \"Fetching creative for your pending delivery...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const deliverAction: Action = {\n name: \"DELIVER_AD\",\n description:\n \"Report delivery of an ad for a matched ask. Provide proof of delivery (e.g. where it was published, screenshot URL). \" +\n \"Self-reported proof is accepted but won't count toward tier advancement. Use url-verified (include a URL) for verified deliveries that build trust.\",\n similes: [\n \"deliver ad\",\n \"report delivery\",\n \"I delivered the ad\",\n \"submit proof\",\n \"mark as delivered\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n let matchId = options?.matchId as string | undefined;\n const proofType = (options?.proofType as string) ?? \"self-reported\";\n const evidence = options?.evidence as Record<string, unknown> | string | undefined;\n\n // Auto-find pending delivery if no matchId\n if (!matchId) {\n const resp = await service.apiCall(\n \"GET\",\n `/agents/${service.agentId}/matches`,\n );\n if (resp.ok) {\n const matches = (await resp.json()) as Array<Record<string, unknown>>;\n const pending = matches.find((m) => m.status === \"pending_delivery\");\n if (pending) matchId = pending.id as string;\n }\n }\n\n if (!matchId) {\n callback?.({ text: \"No pending deliveries found.\" });\n return { success: false, error: \"No pending deliveries\" };\n }\n\n const proof: Record<string, unknown> = {\n type: proofType,\n evidence: typeof evidence === \"string\"\n ? { description: evidence, deliveredAt: new Date().toISOString() }\n : evidence ?? { description: \"Ad delivered via Eliza agent\", deliveredAt: new Date().toISOString() },\n timestamp: new Date().toISOString(),\n };\n\n const resp = await service.apiCall(\"POST\", `/matches/${matchId}/delivery`, {\n reportedBy: service.agentId,\n proof,\n });\n\n const data = (await resp.json()) as Record<string, unknown>;\n\n if (!resp.ok) {\n const error = data.error as string;\n callback?.({ text: `Delivery report failed: ${error}` });\n return { success: false, error };\n }\n\n service.invalidateStateCache();\n\n const verification = data.verification as Record<string, unknown> | undefined;\n const vStatus = verification?.status as string | undefined;\n let text: string;\n if (vStatus === \"failed\") {\n const reason = verification?.failureReason ?? \"unknown\";\n text = `Delivery proof failed verification (${reason}). Match disputed. No settlement created.`;\n } else if (vStatus === \"verified\") {\n text = `Delivery verified (${verification?.method}). Awaiting human review. Settlement created.`;\n } else {\n text = `Delivery recorded (unverified). Awaiting human review. Settlement created.`;\n }\n text += ` Match: ${matchId}.`;\n\n callback?.({ text });\n return { success: !!(vStatus !== \"failed\"), text, data };\n },\n\n examples: [\n [\n {\n name: \"user\",\n content: { text: \"I published the ad in my newsletter, report delivery\" },\n },\n {\n name: \"assistant\",\n content: { text: \"Reporting delivery with self-reported proof...\" },\n },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const confirmDeliveryAction: Action = {\n name: \"CONFIRM_DELIVERY\",\n description:\n \"Confirm or dispute a delivery as an advertiser. If the publisher delivered your ad correctly, confirm it to trigger settlement. \" +\n \"If not, dispute with a reason.\",\n similes: [\n \"confirm delivery\",\n \"approve delivery\",\n \"verify delivery\",\n \"dispute delivery\",\n \"reject delivery\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const matchId = options?.matchId as string;\n const confirmed = options?.confirmed as boolean ?? true;\n const disputeReason = options?.disputeReason as string | undefined;\n\n if (!matchId) {\n // Try to find a delivered match\n const resp = await service.apiCall(\n \"GET\",\n `/agents/${service.agentId}/matches`,\n );\n if (resp.ok) {\n const matches = (await resp.json()) as Array<Record<string, unknown>>;\n const delivered = matches.find((m) => m.status === \"delivered\");\n if (delivered) {\n return handleConfirmation(service, delivered.id as string, confirmed, disputeReason, callback);\n }\n }\n callback?.({ text: \"No delivered matches awaiting confirmation.\" });\n return { success: false, error: \"No delivered matches found\" };\n }\n\n return handleConfirmation(service, matchId, confirmed, disputeReason, callback);\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"Confirm the delivery looks good\" } },\n { name: \"assistant\", content: { text: \"Confirming delivery...\" } },\n ],\n ],\n};\n\nasync function handleConfirmation(\n service: PicoadsService,\n matchId: string,\n confirmed: boolean,\n disputeReason: string | undefined,\n callback?: HandlerCallback,\n): Promise<ActionResult> {\n if (!confirmed && disputeReason) {\n // Dispute\n const resp = await service.apiCall(\"POST\", `/matches/${matchId}/dispute`, {\n agentId: service.agentId,\n reason: disputeReason,\n });\n const data = (await resp.json()) as Record<string, unknown>;\n\n if (!resp.ok) {\n callback?.({ text: `Dispute failed: ${data.error}` });\n return { success: false, error: data.error as string };\n }\n\n service.invalidateStateCache();\n const text = `Delivery disputed for match ${matchId}. Reason: ${disputeReason}.`;\n callback?.({ text });\n return { success: true, text, data };\n }\n\n // Confirm\n const resp = await service.apiCall(\n \"POST\",\n `/matches/${matchId}/confirm-delivery`,\n {\n agentId: service.agentId,\n confirmed: true,\n },\n );\n const data = (await resp.json()) as Record<string, unknown>;\n\n if (!resp.ok) {\n callback?.({ text: `Confirmation failed: ${data.error}` });\n return { success: false, error: data.error as string };\n }\n\n service.invalidateStateCache();\n const text = `Delivery confirmed for match ${matchId}. Settlement will be created.`;\n callback?.({ text });\n return { success: true, text, data };\n}\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const paySettlementAction: Action = {\n name: \"PAY_SETTLEMENT\",\n description:\n \"Pay pending settlements on picoads. Settlements are created after delivery confirmation. \" +\n \"Payment uses x402 (USDC on Base). This action pays all pending settlements.\",\n similes: [\n \"pay settlement\",\n \"settle up\",\n \"pay what I owe\",\n \"make payment\",\n \"pay picoads bill\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const resp = await service.apiCall(\n \"GET\",\n `/agents/${service.agentId}/pending-settlements`,\n );\n\n if (!resp.ok) {\n return { success: false, error: \"Failed to fetch pending settlements\" };\n }\n\n const settlements = (await resp.json()) as Array<Record<string, unknown>>;\n const pending = settlements.filter((s) => s.status === \"pending\");\n\n if (pending.length === 0) {\n callback?.({ text: \"No pending settlements.\" });\n return { success: true, text: \"No pending settlements.\" };\n }\n\n const results: string[] = [];\n let paid = 0;\n let failed = 0;\n\n for (const s of pending) {\n const result = await service.payX402(\n `/settlements/${s.id}/pay`,\n );\n\n if (result.success) {\n const txHash = result.data?.txHash as string | undefined;\n results.push(\n `Paid $${s.grossAmount} for settlement ${(s.id as string).slice(0, 12)}...${txHash ? ` (tx: ${txHash.slice(0, 12)}...)` : \"\"}`,\n );\n paid++;\n } else {\n results.push(\n `Failed to pay settlement ${(s.id as string).slice(0, 12)}...: ${result.error}`,\n );\n failed++;\n }\n }\n\n service.invalidateStateCache();\n\n const text = `Settlement results: ${paid} paid, ${failed} failed.\\n${results.join(\"\\n\")}`;\n callback?.({ text });\n return { success: true, text, data: { paid, failed } };\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"Pay my picoads settlements\" } },\n { name: \"assistant\", content: { text: \"Paying pending settlements...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const checkReputationAction: Action = {\n name: \"CHECK_REPUTATION\",\n description:\n \"Check your trust tier, reputation score, and progress toward the next tier on picoads. \" +\n \"Shows constraints (max match price, concurrent deliveries, settlement cap) and what you need to advance.\",\n similes: [\n \"check reputation\",\n \"my trust tier\",\n \"reputation status\",\n \"trust level\",\n \"tier progress\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n const resp = await service.apiCall(\n \"GET\",\n `/agents/${service.agentId}/reputation`,\n );\n\n if (!resp.ok) {\n return { success: false, error: \"Failed to fetch reputation\" };\n }\n\n const rep = (await resp.json()) as Record<string, unknown>;\n\n const lines: string[] = [\n `Trust tier: ${rep.trustTier ?? 0} (${rep.trustTierName ?? \"unproven\"})`,\n `Max match price: $${rep.maxMatchPrice ?? 0.05}`,\n `Max concurrent deliveries: ${rep.maxConcurrentDeliveries ?? 1}`,\n `Pending settlement cap: $${rep.pendingSettlementCap ?? 1.0}`,\n ];\n\n if (rep.tierProgress) {\n const progress = rep.tierProgress as Record<string, unknown>;\n lines.push(`\\nProgress to next tier:`);\n if (progress.verifiedDeliveries !== undefined)\n lines.push(` Verified deliveries: ${progress.verifiedDeliveries}/${progress.requiredVerified ?? 3}`);\n if (progress.confirmedDeliveries !== undefined)\n lines.push(` Confirmed deliveries: ${progress.confirmedDeliveries}/${progress.requiredDeliveries ?? 5}`);\n if (progress.distinctPartners !== undefined)\n lines.push(` Distinct partners: ${progress.distinctPartners}/${progress.requiredPartners ?? 2}`);\n if (progress.daysSinceRegistration !== undefined)\n lines.push(` Days since registration: ${progress.daysSinceRegistration}/${progress.requiredDays ?? 7}`);\n if (progress.disputeRate !== undefined)\n lines.push(` Dispute rate: ${(progress.disputeRate as number * 100).toFixed(0)}% (max ${((progress.maxDisputeRate as number) ?? 0.2) * 100}%)`);\n }\n\n const text = lines.join(\"\\n\");\n callback?.({ text });\n return { success: true, text, data: rep };\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"What's my picoads trust tier?\" } },\n { name: \"assistant\", content: { text: \"Checking your reputation...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback, ActionResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const checkActionItemsAction: Action = {\n name: \"CHECK_ACTION_ITEMS\",\n description:\n \"Check what needs your attention on picoads. Shows pending deliveries, unconfirmed matches, \" +\n \"unpaid settlements, and other action items ranked by urgency.\",\n similes: [\n \"check action items\",\n \"what needs attention\",\n \"picoads todo\",\n \"what should I do next\",\n \"pending tasks\",\n ],\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n return !!service?.getRegistrationState().registered;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { success: false, error: \"PicoadsService not available\" };\n\n // Fetch matches and settlements in parallel\n const [matchesResp, settlementsResp] = await Promise.all([\n service.apiCall(\"GET\", `/agents/${service.agentId}/matches`),\n service.apiCall(\"GET\", `/agents/${service.agentId}/pending-settlements`),\n ]);\n\n const matches = matchesResp.ok\n ? ((await matchesResp.json()) as Array<Record<string, unknown>>)\n : [];\n const settlements = settlementsResp.ok\n ? ((await settlementsResp.json()) as Array<Record<string, unknown>>)\n : [];\n\n const pendingDelivery = matches.filter((m) => m.status === \"pending_delivery\");\n const delivered = matches.filter((m) => m.status === \"delivered\");\n const pendingSettlements = settlements.filter((s) => s.status === \"pending\");\n\n const items: string[] = [];\n\n if (pendingDelivery.length > 0) {\n items.push(\n `[URGENT] ${pendingDelivery.length} pending delivery(ies) — use FETCH_CREATIVE then DELIVER_AD`,\n );\n }\n if (delivered.length > 0) {\n items.push(\n `[ACTION] ${delivered.length} delivery(ies) awaiting your confirmation — use CONFIRM_DELIVERY`,\n );\n }\n if (pendingSettlements.length > 0) {\n const totalOwed = pendingSettlements.reduce(\n (sum, s) => sum + (s.grossAmount as number),\n 0,\n );\n items.push(\n `[ACTION] ${pendingSettlements.length} unpaid settlement(s) totaling $${totalOwed.toFixed(2)} — use PAY_SETTLEMENT`,\n );\n }\n\n if (items.length === 0) {\n const text = \"No action items. You're all caught up!\";\n callback?.({ text });\n return { success: true, text };\n }\n\n const text = `Action items:\\n${items.map((item, i) => `${i + 1}. ${item}`).join(\"\\n\")}`;\n callback?.({ text });\n return {\n success: true,\n text,\n data: {\n pendingDeliveries: pendingDelivery.length,\n awaitingConfirmation: delivered.length,\n unpaidSettlements: pendingSettlements.length,\n },\n };\n },\n\n examples: [\n [\n { name: \"user\", content: { text: \"What needs my attention on picoads?\" } },\n { name: \"assistant\", content: { text: \"Checking your action items...\" } },\n ],\n ],\n};\n","import type { Provider, IAgentRuntime, Memory, State, ProviderResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const marketProvider: Provider = {\n name: \"PICOADS_MARKET\",\n description: \"Current picoads marketplace state — active hubs, open bids/asks, pricing data\",\n dynamic: true,\n\n get: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state: State,\n ): Promise<ProviderResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { text: \"\" };\n\n const cached = service.getMarketCache();\n if (cached) return { text: cached };\n\n try {\n const hubsResp = await service.apiCall(\"GET\", \"/hubs?status=active\");\n const hubs = hubsResp.ok\n ? ((await hubsResp.json()) as Array<Record<string, unknown>>)\n : [];\n\n if (hubs.length === 0) {\n const text = \"picoads marketplace: no active hubs found.\";\n service.setMarketCache(text);\n return { text };\n }\n\n const hubSummaries: string[] = [];\n\n // Limit to top 5 hubs to avoid excessive API calls\n for (const hub of hubs.slice(0, 5)) {\n const hubId = hub.id ?? hub.slug;\n\n const [statsResp, bidsResp] = await Promise.all([\n service.apiCall(\"GET\", `/hubs/${hubId}/market-stats`),\n service.apiCall(\"GET\", `/hubs/${hubId}/bids?limit=5`),\n ]);\n\n const stats = statsResp.ok\n ? ((await statsResp.json()) as Record<string, unknown>)\n : {};\n const bids = bidsResp.ok\n ? ((await bidsResp.json()) as Array<Record<string, unknown>>)\n : [];\n\n const bidSummary = bids\n .map(\n (b) =>\n `$${b.unitPrice}/${b.objective} (budget: $${b.remainingBudget})`,\n )\n .join(\", \");\n\n hubSummaries.push(\n `${hub.name ?? hubId}: ${stats.openBids ?? 0} open bids, ${stats.openAsks ?? 0} open asks. ` +\n (bidSummary ? `Top bids: ${bidSummary}. ` : \"\") +\n `Fill rate: ${stats.askFillRate ?? \"N/A\"}.`,\n );\n }\n\n const text = `picoads marketplace:\\n${hubSummaries.join(\"\\n\")}`;\n service.setMarketCache(text);\n return { text };\n } catch {\n return { text: \"picoads marketplace: unable to fetch market data.\" };\n }\n },\n};\n","import type { Provider, IAgentRuntime, Memory, State, ProviderResult } from \"@elizaos/core\";\nimport { PicoadsService } from \"../services/picoads.js\";\n\nexport const agentStateProvider: Provider = {\n name: \"PICOADS_AGENT_STATE\",\n description: \"Your picoads registration, reputation, and pending actions\",\n dynamic: true,\n\n get: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state: State,\n ): Promise<ProviderResult> => {\n const service = runtime.getService<PicoadsService>(\"PICOADS\");\n if (!service) return { text: \"\" };\n\n const cached = service.getStateCache();\n if (cached) return { text: cached };\n\n const regState = service.getRegistrationState();\n if (!regState.registered) {\n const text =\n \"Not registered on picoads. Use REGISTER_AGENT to register ($1 USDC on Base).\";\n return { text };\n }\n\n try {\n const [repResp, matchResp, settResp] = await Promise.all([\n service.apiCall(\"GET\", `/agents/${service.agentId}/reputation`),\n service.apiCall(\"GET\", `/agents/${service.agentId}/matches`),\n service.apiCall(\"GET\", `/agents/${service.agentId}/pending-settlements`),\n ]);\n\n const rep = repResp.ok\n ? ((await repResp.json()) as Record<string, unknown>)\n : {};\n const matches = matchResp.ok\n ? ((await matchResp.json()) as Array<Record<string, unknown>>)\n : [];\n const settlements = settResp.ok\n ? ((await settResp.json()) as Array<Record<string, unknown>>)\n : [];\n\n const pending = matches.filter((m) => m.status === \"pending_delivery\");\n const delivered = matches.filter((m) => m.status === \"delivered\");\n\n let text = \"picoads agent state:\\n\";\n text += `Trust tier: ${rep.trustTier ?? 0} (${rep.trustTierName ?? \"unproven\"}). `;\n text += `Max match: $${rep.maxMatchPrice ?? 0.05}. `;\n text += `${pending.length} pending deliveries. `;\n text += `${delivered.length} awaiting confirmation. `;\n text += `${settlements.length} unpaid settlements ($${settlements.reduce((s, x) => s + ((x.grossAmount as number) ?? 0), 0).toFixed(2)} owed).`;\n\n if (pending.length > 0) {\n text += `\\nACTION NEEDED: You have ${pending.length} pending delivery(ies). Use FETCH_CREATIVE then DELIVER_AD.`;\n }\n if (settlements.length > 0) {\n text += `\\nACTION NEEDED: You have ${settlements.length} unpaid settlement(s). Use PAY_SETTLEMENT.`;\n }\n\n service.setStateCache(text);\n return { text };\n } catch {\n return { text: \"picoads agent state: unable to fetch state data.\" };\n }\n },\n};\n","import type { Plugin } from \"@elizaos/core\";\n\nimport { PicoadsService } from \"./services/picoads.js\";\nimport { registerAction } from \"./actions/register.js\";\nimport { placeBidAction } from \"./actions/place-bid.js\";\nimport { placeAskAction } from \"./actions/place-ask.js\";\nimport { checkMatchesAction } from \"./actions/check-matches.js\";\nimport { fetchCreativeAction } from \"./actions/fetch-creative.js\";\nimport { deliverAction } from \"./actions/deliver.js\";\nimport { confirmDeliveryAction } from \"./actions/confirm.js\";\nimport { paySettlementAction } from \"./actions/settle.js\";\nimport { checkReputationAction } from \"./actions/reputation.js\";\nimport { checkActionItemsAction } from \"./actions/action-items.js\";\nimport { marketProvider } from \"./providers/market.js\";\nimport { agentStateProvider } from \"./providers/agent-state.js\";\n\nexport const picoadsPlugin: Plugin = {\n name: \"@picoads/eliza-plugin\",\n description:\n \"Connects Eliza agents to picoads — the micro ad network for AI agents. \" +\n \"Handles registration, bidding, asking, delivery, settlement, and reputation tracking.\",\n\n services: [PicoadsService],\n\n actions: [\n registerAction,\n placeBidAction,\n placeAskAction,\n checkMatchesAction,\n fetchCreativeAction,\n deliverAction,\n confirmDeliveryAction,\n paySettlementAction,\n checkReputationAction,\n checkActionItemsAction,\n ],\n\n providers: [marketProvider, agentStateProvider],\n};\n\n// Named exports for consumers who want individual components\nexport { PicoadsService } from \"./services/picoads.js\";\nexport { registerAction } from \"./actions/register.js\";\nexport { placeBidAction } from \"./actions/place-bid.js\";\nexport { placeAskAction } from \"./actions/place-ask.js\";\nexport { checkMatchesAction } from \"./actions/check-matches.js\";\nexport { fetchCreativeAction } from \"./actions/fetch-creative.js\";\nexport { deliverAction } from \"./actions/deliver.js\";\nexport { confirmDeliveryAction } from \"./actions/confirm.js\";\nexport { paySettlementAction } from \"./actions/settle.js\";\nexport { checkReputationAction } from \"./actions/reputation.js\";\nexport { checkActionItemsAction } from \"./actions/action-items.js\";\nexport { marketProvider } from \"./providers/market.js\";\nexport { agentStateProvider } from \"./providers/agent-state.js\";\n\nexport default picoadsPlugin;\n"],"mappings":"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","names":["text","resp","resp","resp","data","text","text","text"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@picoads/eliza-plugin",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Eliza v2 plugin for picoads — the micro ad network for AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsup",
|
|
19
|
+
"dev": "tsup --watch",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"plugin",
|
|
26
|
+
"elizaos",
|
|
27
|
+
"advertising",
|
|
28
|
+
"ai-agents",
|
|
29
|
+
"picoads",
|
|
30
|
+
"ad-network",
|
|
31
|
+
"x402",
|
|
32
|
+
"eip-191"
|
|
33
|
+
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@elizaos/core": "^1.7.2",
|
|
37
|
+
"viem": "^2.21.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@elizaos/core": "^1.7.2",
|
|
41
|
+
"@types/node": "^25.4.0",
|
|
42
|
+
"tsup": "^8.4.0",
|
|
43
|
+
"typescript": "^5.7.0",
|
|
44
|
+
"viem": "^2.21.0",
|
|
45
|
+
"vitest": "^3.0.0"
|
|
46
|
+
}
|
|
47
|
+
}
|