@elizaos/plugin-polymarket-app 2.0.3-beta.5 → 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 (95) hide show
  1. package/dist/PolymarketAppView.d.ts +3 -0
  2. package/dist/PolymarketAppView.d.ts.map +1 -0
  3. package/dist/PolymarketAppView.helpers.d.ts +10 -0
  4. package/dist/PolymarketAppView.helpers.d.ts.map +1 -0
  5. package/dist/PolymarketAppView.helpers.js +30 -0
  6. package/dist/PolymarketAppView.helpers.js.map +1 -0
  7. package/dist/PolymarketAppView.interact.d.ts +3 -0
  8. package/dist/PolymarketAppView.interact.d.ts.map +1 -0
  9. package/dist/PolymarketAppView.interact.js +70 -0
  10. package/dist/PolymarketAppView.interact.js.map +1 -0
  11. package/dist/PolymarketAppView.js +704 -0
  12. package/dist/PolymarketAppView.js.map +1 -0
  13. package/dist/PolymarketPositionsPanel.d.ts +13 -0
  14. package/dist/PolymarketPositionsPanel.d.ts.map +1 -0
  15. package/dist/PolymarketPositionsPanel.js +349 -0
  16. package/dist/PolymarketPositionsPanel.js.map +1 -0
  17. package/dist/PolymarketView.d.ts +13 -0
  18. package/dist/PolymarketView.d.ts.map +1 -0
  19. package/dist/PolymarketView.js +58 -0
  20. package/dist/PolymarketView.js.map +1 -0
  21. package/dist/__fixtures__/contract.d.ts +9 -0
  22. package/dist/__fixtures__/contract.d.ts.map +1 -0
  23. package/dist/__fixtures__/contract.js +263 -0
  24. package/dist/__fixtures__/contract.js.map +1 -0
  25. package/dist/actions.d.ts +39 -0
  26. package/dist/actions.d.ts.map +1 -0
  27. package/dist/actions.js +661 -0
  28. package/dist/actions.js.map +1 -0
  29. package/dist/client.d.ts +25 -0
  30. package/dist/client.d.ts.map +1 -0
  31. package/dist/client.js +42 -0
  32. package/dist/client.js.map +1 -0
  33. package/dist/components/PolymarketSpatialView.d.ts +34 -0
  34. package/dist/components/PolymarketSpatialView.d.ts.map +1 -0
  35. package/dist/components/PolymarketSpatialView.js +248 -0
  36. package/dist/components/PolymarketSpatialView.js.map +1 -0
  37. package/dist/index.d.ts +14 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +24 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/orderbook.d.ts +15 -0
  42. package/dist/orderbook.d.ts.map +1 -0
  43. package/dist/orderbook.js +45 -0
  44. package/dist/orderbook.js.map +1 -0
  45. package/dist/plugin.d.ts +3 -0
  46. package/dist/plugin.d.ts.map +1 -0
  47. package/dist/plugin.js +108 -0
  48. package/dist/plugin.js.map +1 -0
  49. package/dist/polymarket-app.d.ts +4 -0
  50. package/dist/polymarket-app.d.ts.map +1 -0
  51. package/dist/polymarket-app.js +18 -0
  52. package/dist/polymarket-app.js.map +1 -0
  53. package/dist/polymarket-contracts.d.ts +162 -0
  54. package/dist/polymarket-contracts.d.ts.map +1 -0
  55. package/dist/polymarket-contracts.js +16 -0
  56. package/dist/polymarket-contracts.js.map +1 -0
  57. package/dist/polymarket-view-bundle.d.ts +3 -0
  58. package/dist/polymarket-view-bundle.d.ts.map +1 -0
  59. package/dist/polymarket-view-bundle.js +7 -0
  60. package/dist/polymarket-view-bundle.js.map +1 -0
  61. package/dist/provider-text.d.ts +5 -0
  62. package/dist/provider-text.d.ts.map +1 -0
  63. package/dist/provider-text.js +44 -0
  64. package/dist/provider-text.js.map +1 -0
  65. package/dist/provider.d.ts +3 -0
  66. package/dist/provider.d.ts.map +1 -0
  67. package/dist/provider.js +21 -0
  68. package/dist/provider.js.map +1 -0
  69. package/dist/register-routes.d.ts +2 -0
  70. package/dist/register-routes.d.ts.map +1 -0
  71. package/dist/register-routes.js +6 -0
  72. package/dist/register-routes.js.map +1 -0
  73. package/dist/register-terminal-view.d.ts +15 -0
  74. package/dist/register-terminal-view.d.ts.map +1 -0
  75. package/dist/register-terminal-view.js +25 -0
  76. package/dist/register-terminal-view.js.map +1 -0
  77. package/dist/register.d.ts +2 -0
  78. package/dist/register.d.ts.map +1 -0
  79. package/dist/register.js +17 -0
  80. package/dist/register.js.map +1 -0
  81. package/dist/routes.d.ts +7 -0
  82. package/dist/routes.d.ts.map +1 -0
  83. package/dist/routes.js +455 -0
  84. package/dist/routes.js.map +1 -0
  85. package/dist/ui.d.ts +6 -0
  86. package/dist/ui.d.ts.map +1 -0
  87. package/dist/ui.js +11 -0
  88. package/dist/ui.js.map +1 -0
  89. package/dist/usePolymarketState.d.ts +13 -0
  90. package/dist/usePolymarketState.d.ts.map +1 -0
  91. package/dist/usePolymarketState.js +59 -0
  92. package/dist/usePolymarketState.js.map +1 -0
  93. package/dist/views/bundle.js +535 -0
  94. package/dist/views/bundle.js.map +1 -0
  95. package/package.json +6 -6
@@ -0,0 +1,263 @@
1
+ function isString(value) {
2
+ return typeof value === "string";
3
+ }
4
+ function isNonEmptyString(value) {
5
+ return typeof value === "string" && value.trim().length > 0;
6
+ }
7
+ function checkStringOrNull(v, path, value) {
8
+ if (value !== null && typeof value !== "string") {
9
+ v.push(`${path}: expected string|null, got ${describe(value)}`);
10
+ }
11
+ }
12
+ function checkBooleanOrNull(v, path, value) {
13
+ if (value !== null && typeof value !== "boolean") {
14
+ v.push(`${path}: expected boolean|null, got ${describe(value)}`);
15
+ }
16
+ }
17
+ function checkNumericStringOrNull(v, path, value) {
18
+ if (value === null) return;
19
+ if (typeof value !== "string") {
20
+ v.push(`${path}: expected numeric-string|null, got ${describe(value)}`);
21
+ return;
22
+ }
23
+ if (value.trim() === "" || !Number.isFinite(Number(value))) {
24
+ v.push(
25
+ `${path}: expected a numeric string (parser emits raw numerics), got ${JSON.stringify(value)}`
26
+ );
27
+ }
28
+ }
29
+ function describe(value) {
30
+ if (value === null) return "null";
31
+ if (Array.isArray(value)) return `array[${value.length}]`;
32
+ return typeof value;
33
+ }
34
+ function validateMarket(market, path = "market") {
35
+ const v = [];
36
+ if (typeof market !== "object" || market === null) {
37
+ return [`${path}: expected object, got ${describe(market)}`];
38
+ }
39
+ const m = market;
40
+ if (!isNonEmptyString(m.id)) v.push(`${path}.id: expected non-empty string`);
41
+ for (const key of [
42
+ "slug",
43
+ "question",
44
+ "description",
45
+ "category",
46
+ "conditionId",
47
+ "image",
48
+ "icon",
49
+ "endDate",
50
+ "startDate",
51
+ "updatedAt"
52
+ ]) {
53
+ checkStringOrNull(v, `${path}.${key}`, m[key]);
54
+ }
55
+ for (const key of [
56
+ "active",
57
+ "closed",
58
+ "archived",
59
+ "restricted",
60
+ "enableOrderBook"
61
+ ]) {
62
+ checkBooleanOrNull(v, `${path}.${key}`, m[key]);
63
+ }
64
+ for (const key of [
65
+ "liquidity",
66
+ "volume",
67
+ "volume24hr",
68
+ "lastTradePrice",
69
+ "bestBid",
70
+ "bestAsk"
71
+ ]) {
72
+ checkNumericStringOrNull(v, `${path}.${key}`, m[key]);
73
+ }
74
+ if (!Array.isArray(m.clobTokenIds)) {
75
+ v.push(`${path}.clobTokenIds: expected string[]`);
76
+ } else if (!m.clobTokenIds.every(isString)) {
77
+ v.push(`${path}.clobTokenIds: every entry must be a string`);
78
+ }
79
+ if (!Array.isArray(m.outcomes)) {
80
+ v.push(`${path}.outcomes: expected outcome[]`);
81
+ } else {
82
+ m.outcomes.forEach((o, i) => {
83
+ if (!isString(o?.name)) {
84
+ v.push(`${path}.outcomes[${i}].name: expected string`);
85
+ }
86
+ checkNumericStringOrNull(v, `${path}.outcomes[${i}].price`, o?.price);
87
+ });
88
+ }
89
+ return v;
90
+ }
91
+ function validateSource(v, path, source, api) {
92
+ if (typeof source !== "object" || source === null) {
93
+ v.push(`${path}: expected source object`);
94
+ return;
95
+ }
96
+ const s = source;
97
+ if (s.api !== api)
98
+ v.push(`${path}.api: expected "${api}", got ${describe(s.api)}`);
99
+ if (!isNonEmptyString(s.endpoint)) {
100
+ v.push(`${path}.endpoint: expected non-empty string`);
101
+ }
102
+ }
103
+ function validateMarketsResponse(value) {
104
+ const v = [];
105
+ if (typeof value !== "object" || value === null) {
106
+ return ["response: expected object"];
107
+ }
108
+ const r = value;
109
+ if (!Array.isArray(r.markets)) {
110
+ v.push("markets: expected array");
111
+ } else {
112
+ r.markets.forEach((m, i) => v.push(...validateMarket(m, `markets[${i}]`)));
113
+ }
114
+ validateSource(v, "source", r.source, "gamma");
115
+ return v;
116
+ }
117
+ function validateMarketResponse(value) {
118
+ const v = [];
119
+ if (typeof value !== "object" || value === null) {
120
+ return ["response: expected object"];
121
+ }
122
+ const r = value;
123
+ if (r.market !== null) v.push(...validateMarket(r.market, "market"));
124
+ validateSource(v, "source", r.source, "gamma");
125
+ return v;
126
+ }
127
+ function validateOrderbookResponse(value) {
128
+ const v = [];
129
+ if (typeof value !== "object" || value === null) {
130
+ return ["response: expected object"];
131
+ }
132
+ const r = value;
133
+ if (!isNonEmptyString(r.tokenId))
134
+ v.push("tokenId: expected non-empty string");
135
+ checkStringOrNull(v, "market", r.market);
136
+ checkStringOrNull(v, "assetId", r.assetId);
137
+ for (const side of ["bids", "asks"]) {
138
+ const levels = r[side];
139
+ if (!Array.isArray(levels)) {
140
+ v.push(`${side}: expected level[]`);
141
+ continue;
142
+ }
143
+ levels.forEach((lvl, i) => {
144
+ checkNumericStringOrNull(v, `${side}[${i}].price`, lvl?.price);
145
+ checkNumericStringOrNull(v, `${side}[${i}].size`, lvl?.size);
146
+ if (lvl?.price === null) v.push(`${side}[${i}].price: must not be null`);
147
+ if (lvl?.size === null) v.push(`${side}[${i}].size: must not be null`);
148
+ });
149
+ }
150
+ for (const key of [
151
+ "bestBid",
152
+ "bestBidSize",
153
+ "bestAsk",
154
+ "bestAskSize",
155
+ "midpoint",
156
+ "spread",
157
+ "lastTradePrice",
158
+ "tickSize"
159
+ ]) {
160
+ checkNumericStringOrNull(v, key, r[key]);
161
+ }
162
+ if (typeof r.bidLevels !== "number") v.push("bidLevels: expected number");
163
+ if (typeof r.askLevels !== "number") v.push("askLevels: expected number");
164
+ validateSource(v, "source", r.source, "clob");
165
+ return v;
166
+ }
167
+ function validateStatusResponse(value) {
168
+ const v = [];
169
+ if (typeof value !== "object" || value === null) {
170
+ return ["response: expected object"];
171
+ }
172
+ const r = value;
173
+ if (typeof r.publicReads?.ready !== "boolean") {
174
+ v.push("publicReads.ready: expected boolean");
175
+ }
176
+ if (!isNonEmptyString(r.publicReads?.gammaApiBase)) {
177
+ v.push("publicReads.gammaApiBase: expected non-empty string");
178
+ }
179
+ if (!isNonEmptyString(r.publicReads?.dataApiBase)) {
180
+ v.push("publicReads.dataApiBase: expected non-empty string");
181
+ }
182
+ if (typeof r.trading?.ready !== "boolean") {
183
+ v.push("trading.ready: expected boolean");
184
+ }
185
+ if (typeof r.trading?.credentialsReady !== "boolean") {
186
+ v.push("trading.credentialsReady: expected boolean");
187
+ }
188
+ if (!Array.isArray(r.trading?.missing)) {
189
+ v.push("trading.missing: expected array");
190
+ }
191
+ if (!isNonEmptyString(r.trading?.clobApiBase)) {
192
+ v.push("trading.clobApiBase: expected non-empty string");
193
+ }
194
+ if (typeof r.account?.ready !== "boolean") {
195
+ v.push("account.ready: expected boolean");
196
+ }
197
+ checkStringOrNull(v, "account.reason", r.account?.reason);
198
+ checkStringOrNull(v, "account.address", r.account?.address);
199
+ return v;
200
+ }
201
+ function validatePositionsResponse(value) {
202
+ const v = [];
203
+ if (typeof value !== "object" || value === null) {
204
+ return ["response: expected object"];
205
+ }
206
+ const r = value;
207
+ if (!Array.isArray(r.positions)) {
208
+ v.push("positions: expected array");
209
+ } else {
210
+ r.positions.forEach((p, i) => {
211
+ for (const key of [
212
+ "marketId",
213
+ "conditionId",
214
+ "question",
215
+ "outcome",
216
+ "icon",
217
+ "slug"
218
+ ]) {
219
+ checkStringOrNull(v, `positions[${i}].${key}`, p?.[key]);
220
+ }
221
+ for (const key of [
222
+ "size",
223
+ "currentValue",
224
+ "cashPnl",
225
+ "percentPnl"
226
+ ]) {
227
+ checkNumericStringOrNull(v, `positions[${i}].${key}`, p?.[key]);
228
+ }
229
+ });
230
+ }
231
+ checkStringOrNull(v, "user", r.user);
232
+ if (r.summary !== null) {
233
+ if (typeof r.summary !== "object") {
234
+ v.push("summary: expected object|null");
235
+ } else {
236
+ checkNumericStringOrNull(v, "summary.totalValue", r.summary.totalValue);
237
+ checkNumericStringOrNull(
238
+ v,
239
+ "summary.totalCashPnl",
240
+ r.summary.totalCashPnl
241
+ );
242
+ checkNumericStringOrNull(
243
+ v,
244
+ "summary.totalPercentPnl",
245
+ r.summary.totalPercentPnl
246
+ );
247
+ if (typeof r.summary.openPositions !== "number") {
248
+ v.push("summary.openPositions: expected number");
249
+ }
250
+ }
251
+ }
252
+ validateSource(v, "source", r.source, "data");
253
+ return v;
254
+ }
255
+ export {
256
+ validateMarket,
257
+ validateMarketResponse,
258
+ validateMarketsResponse,
259
+ validateOrderbookResponse,
260
+ validatePositionsResponse,
261
+ validateStatusResponse
262
+ };
263
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__fixtures__/contract.ts"],"sourcesContent":["// Structural validators for the Polymarket BFF DTOs.\n//\n// These assert that a value produced by `handlePolymarketRoute` (the BFF) is a\n// real, contract-shaped DTO — not just that some object came back. They are the\n// single source of truth shared by:\n// - routes.contract.test.ts (replays recorded real responses, keyless)\n// - routes.real.test.ts (re-fetches the live public API, drift check)\n// - the app UI mock fixtures (helpers.ts must produce DTOs that pass these)\n//\n// `numericString` is intentionally stricter than the interface's `string | null`:\n// the parser only ever emits raw numeric strings (e.g. \"4279700.63974\") via\n// `readNumericString`, so a pre-formatted string like \"$12,345\" is a real defect\n// the validator catches.\n\nimport type {\n PolymarketMarket,\n PolymarketMarketResponse,\n PolymarketMarketsResponse,\n PolymarketOrderbookResponse,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"../polymarket-contracts.js\";\n\ntype Violations = string[];\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction checkStringOrNull(v: Violations, path: string, value: unknown): void {\n if (value !== null && typeof value !== \"string\") {\n v.push(`${path}: expected string|null, got ${describe(value)}`);\n }\n}\n\nfunction checkBooleanOrNull(v: Violations, path: string, value: unknown): void {\n if (value !== null && typeof value !== \"boolean\") {\n v.push(`${path}: expected boolean|null, got ${describe(value)}`);\n }\n}\n\n// numeric string (the real-API contract for prices/volumes/liquidity) or null.\nfunction checkNumericStringOrNull(\n v: Violations,\n path: string,\n value: unknown,\n): void {\n if (value === null) return;\n if (typeof value !== \"string\") {\n v.push(`${path}: expected numeric-string|null, got ${describe(value)}`);\n return;\n }\n if (value.trim() === \"\" || !Number.isFinite(Number(value))) {\n v.push(\n `${path}: expected a numeric string (parser emits raw numerics), got ${JSON.stringify(value)}`,\n );\n }\n}\n\nfunction describe(value: unknown): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n return typeof value;\n}\n\nexport function validateMarket(market: unknown, path = \"market\"): Violations {\n const v: Violations = [];\n if (typeof market !== \"object\" || market === null) {\n return [`${path}: expected object, got ${describe(market)}`];\n }\n const m = market as PolymarketMarket;\n if (!isNonEmptyString(m.id)) v.push(`${path}.id: expected non-empty string`);\n for (const key of [\n \"slug\",\n \"question\",\n \"description\",\n \"category\",\n \"conditionId\",\n \"image\",\n \"icon\",\n \"endDate\",\n \"startDate\",\n \"updatedAt\",\n ] as const) {\n checkStringOrNull(v, `${path}.${key}`, m[key]);\n }\n for (const key of [\n \"active\",\n \"closed\",\n \"archived\",\n \"restricted\",\n \"enableOrderBook\",\n ] as const) {\n checkBooleanOrNull(v, `${path}.${key}`, m[key]);\n }\n for (const key of [\n \"liquidity\",\n \"volume\",\n \"volume24hr\",\n \"lastTradePrice\",\n \"bestBid\",\n \"bestAsk\",\n ] as const) {\n checkNumericStringOrNull(v, `${path}.${key}`, m[key]);\n }\n if (!Array.isArray(m.clobTokenIds)) {\n v.push(`${path}.clobTokenIds: expected string[]`);\n } else if (!m.clobTokenIds.every(isString)) {\n v.push(`${path}.clobTokenIds: every entry must be a string`);\n }\n if (!Array.isArray(m.outcomes)) {\n v.push(`${path}.outcomes: expected outcome[]`);\n } else {\n m.outcomes.forEach((o, i) => {\n if (!isString(o?.name)) {\n v.push(`${path}.outcomes[${i}].name: expected string`);\n }\n checkNumericStringOrNull(v, `${path}.outcomes[${i}].price`, o?.price);\n });\n }\n return v;\n}\n\nfunction validateSource(\n v: Violations,\n path: string,\n source: unknown,\n api: \"gamma\" | \"data\" | \"clob\",\n): void {\n if (typeof source !== \"object\" || source === null) {\n v.push(`${path}: expected source object`);\n return;\n }\n const s = source as { api?: unknown; endpoint?: unknown };\n if (s.api !== api)\n v.push(`${path}.api: expected \"${api}\", got ${describe(s.api)}`);\n if (!isNonEmptyString(s.endpoint)) {\n v.push(`${path}.endpoint: expected non-empty string`);\n }\n}\n\nexport function validateMarketsResponse(value: unknown): Violations {\n const v: Violations = [];\n if (typeof value !== \"object\" || value === null) {\n return [\"response: expected object\"];\n }\n const r = value as PolymarketMarketsResponse;\n if (!Array.isArray(r.markets)) {\n v.push(\"markets: expected array\");\n } else {\n r.markets.forEach((m, i) => v.push(...validateMarket(m, `markets[${i}]`)));\n }\n validateSource(v, \"source\", r.source, \"gamma\");\n return v;\n}\n\nexport function validateMarketResponse(value: unknown): Violations {\n const v: Violations = [];\n if (typeof value !== \"object\" || value === null) {\n return [\"response: expected object\"];\n }\n const r = value as PolymarketMarketResponse;\n if (r.market !== null) v.push(...validateMarket(r.market, \"market\"));\n validateSource(v, \"source\", r.source, \"gamma\");\n return v;\n}\n\nexport function validateOrderbookResponse(value: unknown): Violations {\n const v: Violations = [];\n if (typeof value !== \"object\" || value === null) {\n return [\"response: expected object\"];\n }\n const r = value as PolymarketOrderbookResponse;\n if (!isNonEmptyString(r.tokenId))\n v.push(\"tokenId: expected non-empty string\");\n checkStringOrNull(v, \"market\", r.market);\n checkStringOrNull(v, \"assetId\", r.assetId);\n for (const side of [\"bids\", \"asks\"] as const) {\n const levels = r[side];\n if (!Array.isArray(levels)) {\n v.push(`${side}: expected level[]`);\n continue;\n }\n levels.forEach((lvl, i) => {\n checkNumericStringOrNull(v, `${side}[${i}].price`, lvl?.price);\n checkNumericStringOrNull(v, `${side}[${i}].size`, lvl?.size);\n if (lvl?.price === null) v.push(`${side}[${i}].price: must not be null`);\n if (lvl?.size === null) v.push(`${side}[${i}].size: must not be null`);\n });\n }\n for (const key of [\n \"bestBid\",\n \"bestBidSize\",\n \"bestAsk\",\n \"bestAskSize\",\n \"midpoint\",\n \"spread\",\n \"lastTradePrice\",\n \"tickSize\",\n ] as const) {\n checkNumericStringOrNull(v, key, r[key]);\n }\n if (typeof r.bidLevels !== \"number\") v.push(\"bidLevels: expected number\");\n if (typeof r.askLevels !== \"number\") v.push(\"askLevels: expected number\");\n validateSource(v, \"source\", r.source, \"clob\");\n return v;\n}\n\nexport function validateStatusResponse(value: unknown): Violations {\n const v: Violations = [];\n if (typeof value !== \"object\" || value === null) {\n return [\"response: expected object\"];\n }\n const r = value as PolymarketStatusResponse;\n if (typeof r.publicReads?.ready !== \"boolean\") {\n v.push(\"publicReads.ready: expected boolean\");\n }\n if (!isNonEmptyString(r.publicReads?.gammaApiBase)) {\n v.push(\"publicReads.gammaApiBase: expected non-empty string\");\n }\n if (!isNonEmptyString(r.publicReads?.dataApiBase)) {\n v.push(\"publicReads.dataApiBase: expected non-empty string\");\n }\n if (typeof r.trading?.ready !== \"boolean\") {\n v.push(\"trading.ready: expected boolean\");\n }\n if (typeof r.trading?.credentialsReady !== \"boolean\") {\n v.push(\"trading.credentialsReady: expected boolean\");\n }\n if (!Array.isArray(r.trading?.missing)) {\n v.push(\"trading.missing: expected array\");\n }\n if (!isNonEmptyString(r.trading?.clobApiBase)) {\n v.push(\"trading.clobApiBase: expected non-empty string\");\n }\n if (typeof r.account?.ready !== \"boolean\") {\n v.push(\"account.ready: expected boolean\");\n }\n checkStringOrNull(v, \"account.reason\", r.account?.reason);\n checkStringOrNull(v, \"account.address\", r.account?.address);\n return v;\n}\n\nexport function validatePositionsResponse(value: unknown): Violations {\n const v: Violations = [];\n if (typeof value !== \"object\" || value === null) {\n return [\"response: expected object\"];\n }\n const r = value as PolymarketPositionsResponse;\n if (!Array.isArray(r.positions)) {\n v.push(\"positions: expected array\");\n } else {\n r.positions.forEach((p, i) => {\n for (const key of [\n \"marketId\",\n \"conditionId\",\n \"question\",\n \"outcome\",\n \"icon\",\n \"slug\",\n ] as const) {\n checkStringOrNull(v, `positions[${i}].${key}`, p?.[key]);\n }\n for (const key of [\n \"size\",\n \"currentValue\",\n \"cashPnl\",\n \"percentPnl\",\n ] as const) {\n checkNumericStringOrNull(v, `positions[${i}].${key}`, p?.[key]);\n }\n });\n }\n checkStringOrNull(v, \"user\", r.user);\n if (r.summary !== null) {\n if (typeof r.summary !== \"object\") {\n v.push(\"summary: expected object|null\");\n } else {\n checkNumericStringOrNull(v, \"summary.totalValue\", r.summary.totalValue);\n checkNumericStringOrNull(\n v,\n \"summary.totalCashPnl\",\n r.summary.totalCashPnl,\n );\n checkNumericStringOrNull(\n v,\n \"summary.totalPercentPnl\",\n r.summary.totalPercentPnl,\n );\n if (typeof r.summary.openPositions !== \"number\") {\n v.push(\"summary.openPositions: expected number\");\n }\n }\n }\n validateSource(v, \"source\", r.source, \"data\");\n return v;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,39 @@
1
+ import type { Action, ActionResult, HandlerCallback, HandlerOptions, IAgentRuntime } from "@elizaos/core";
2
+ import { Service } from "@elizaos/core";
3
+ export declare const PREDICTION_MARKET_SERVICE_TYPE: "prediction-market";
4
+ declare const POLYMARKET_OPS: readonly ["read", "place_order"];
5
+ type PolymarketOp = (typeof POLYMARKET_OPS)[number];
6
+ interface PredictionMarketProviderMetadata {
7
+ readonly name: string;
8
+ readonly aliases: readonly string[];
9
+ readonly supportedSubactions: readonly PolymarketOp[];
10
+ readonly description?: string;
11
+ }
12
+ interface PredictionMarketProvider extends PredictionMarketProviderMetadata {
13
+ execute(context: {
14
+ readonly options?: HandlerOptions | Record<string, unknown>;
15
+ readonly op: PolymarketOp;
16
+ readonly callback?: HandlerCallback;
17
+ }): Promise<ActionResult>;
18
+ }
19
+ export declare class PredictionMarketService extends Service {
20
+ static serviceType: "prediction-market";
21
+ capabilityDescription: string;
22
+ private readonly providers;
23
+ private readonly aliases;
24
+ static start(runtime: IAgentRuntime): Promise<PredictionMarketService>;
25
+ registerProvider(provider: PredictionMarketProvider): void;
26
+ listProviders(): PredictionMarketProviderMetadata[];
27
+ route(args: {
28
+ readonly target?: string;
29
+ readonly op: PolymarketOp;
30
+ readonly options?: HandlerOptions | Record<string, unknown>;
31
+ readonly callback?: HandlerCallback;
32
+ }): Promise<ActionResult>;
33
+ stop(): Promise<void>;
34
+ }
35
+ export declare const polymarketAction: Action;
36
+ export declare const predictionMarketAction: Action;
37
+ export declare const polymarketActions: Action[];
38
+ export {};
39
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EAEZ,eAAe,EACf,cAAc,EACd,aAAa,EAId,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAaxC,eAAO,MAAM,8BAA8B,EAAG,mBAA4B,CAAC;AA2E3E,QAAA,MAAM,cAAc,kCAAmC,CAAC;AACxD,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAwepD,UAAU,gCAAgC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,YAAY,EAAE,CAAC;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,UAAU,wBAAyB,SAAQ,gCAAgC;IACzE,OAAO,CAAC,OAAO,EAAE;QACf,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;KACrC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3B;AAqCD,qBAAa,uBAAwB,SAAQ,OAAO;IAClD,OAAgB,WAAW,sBAAkC;IAEpD,qBAAqB,SAC0C;IAExE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;WAE/B,KAAK,CACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,uBAAuB,CAAC;IAMnC,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAQ1D,aAAa,IAAI,gCAAgC,EAAE;IAS7C,KAAK,CAAC,IAAI,EAAE;QAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;KACrC,GAAG,OAAO,CAAC,YAAY,CAAC;IAyDV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAIrC;AAED,eAAO,MAAM,gBAAgB,EAAE,MA6H9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA6B,CAAC"}