fere-sdk 0.5.0.dev49__tar.gz → 0.6.0__tar.gz

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.
@@ -58,6 +58,11 @@ dev/logs/*
58
58
  # Ralph Loop plugin runtime state (scratchpad + done flag)
59
59
  .cursor/ralph/
60
60
 
61
+ # Cursor Plan Mode + canvases (workspace copies; bind-mounted / synced
62
+ # over Cursor's default paths so they survive Devcontainer rebuilds)
63
+ .cursor/plans/
64
+ .cursor/canvases/
65
+
61
66
  # Cursor SEO skill — regenerated report JSON (not source)
62
67
  .cursor/skills/seo-agent/artifacts/
63
68
  .claude/skills/seo-agent/artifacts/
@@ -84,7 +89,7 @@ webapp/.impeccable/
84
89
  .agentmemory/data/
85
90
  .devcontainer/agentmemory-mcp/node_modules/
86
91
 
87
- # Local GLASS mock / design reference (not in git). Tokens: webapp/DESIGN.md + app/globals.css
92
+ # Local GLASS mock / design reference (not in git). Tokens: webapp/DESIGN.md + app/css/shared.css
88
93
  Fere Glass Design System (Space Grotesk).html
89
94
  fere-onboarding-zero-states/
90
95
  fereonboardingzerostates.zip
@@ -92,6 +97,9 @@ fereonboardingzerostates.zip
92
97
  # Local GEO upstream reference (optional clone; not part of the product tree)
93
98
  geo-seo/
94
99
 
100
+ # Playwright / local test output (repo root — webapp has its own ignores)
101
+ test-results/
102
+
95
103
  # Eval output
96
104
  compare_results.json
97
105
  .secrets
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fere-sdk
3
- Version: 0.5.0.dev49
3
+ Version: 0.6.0
4
4
  Summary: Python SDK for the FereAI Gateway API
5
5
  Author-email: Fere AI <hello@fereai.xyz>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fere-sdk"
3
- version = "0.5.0.dev49"
3
+ version = "0.6.0"
4
4
  description = "Python SDK for the FereAI Gateway API"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -27,13 +27,11 @@ from .models import (
27
27
  PerpFundRequest,
28
28
  PerpOpenRequest,
29
29
  PerpWithdrawRequest,
30
- SecurityCheckResponse,
31
30
  SpotBuyRequest,
32
31
  SpotCancelRequest,
33
32
  SpotSellRequest,
34
33
  SpotTpSlRequest,
35
34
  SwapRequest,
36
- TokenToCheck,
37
35
  WithdrawRequest,
38
36
  )
39
37
  from .timeouts import DEFAULT_TIMEOUT
@@ -238,28 +236,6 @@ class FereClient:
238
236
  )
239
237
  return await self._api.set_hooks(req)
240
238
 
241
- async def check_token_security(
242
- self,
243
- tokens: list[TokenToCheck] | list[dict],
244
- ) -> SecurityCheckResponse:
245
- """Pre-check tokens for honeypot / scam / rug-pull flags.
246
-
247
- Pass a list of TokenToCheck or plain dicts with token_address
248
- and chain_id.
249
- """
250
- normalized: list[TokenToCheck] = []
251
- for t in tokens:
252
- if isinstance(t, TokenToCheck):
253
- normalized.append(t)
254
- else:
255
- normalized.append(
256
- TokenToCheck(
257
- token_address=t["token_address"],
258
- chain_id=t["chain_id"],
259
- )
260
- )
261
- return await self._api.check_token_security(normalized)
262
-
263
239
  # ----------------------------------------------------------
264
240
  # Earn (blocks until complete)
265
241
  # ----------------------------------------------------------
@@ -21,8 +21,6 @@ from .models import (
21
21
  PerpFundRequest,
22
22
  PerpOpenRequest,
23
23
  PerpWithdrawRequest,
24
- SecurityCheckResponse,
25
- SecurityCheckSummary,
26
24
  SpotBuyRequest,
27
25
  SpotCancelRequest,
28
26
  SpotSellRequest,
@@ -31,8 +29,6 @@ from .models import (
31
29
  TaskResponse,
32
30
  TaskStatusResponse,
33
31
  TokenInfo,
34
- TokenSecurityResult,
35
- TokenToCheck,
36
32
  WithdrawRequest,
37
33
  )
38
34
  from .timeouts import DEFAULT_TIMEOUT
@@ -319,47 +315,6 @@ class FereAPI:
319
315
  """POST /v1/hooks"""
320
316
  return await self._authed_post("/v1/hooks", request.to_dict())
321
317
 
322
- # ----------------------------------------------------------
323
- # Security
324
- # ----------------------------------------------------------
325
-
326
- async def check_token_security(
327
- self,
328
- tokens: list[TokenToCheck],
329
- ) -> SecurityCheckResponse:
330
- """POST /v1/security/check.
331
-
332
- Pre-check whether output tokens have been flagged by Honeypot.is
333
- (EVM) or RugCheck.xyz (Solana) before submitting a swap.
334
- """
335
- data = await self._authed_post(
336
- "/v1/security/check",
337
- {"tokens": [t.to_dict() for t in tokens]},
338
- )
339
- results = [
340
- TokenSecurityResult(
341
- token_address=r["token_address"],
342
- chain_id=r["chain_id"],
343
- allowed=r["allowed"],
344
- status=r["status"],
345
- provider=r["provider"],
346
- reason=r.get("reason"),
347
- risk_details=r.get("risk_details"),
348
- )
349
- for r in data.get("results", [])
350
- ]
351
- s = data.get("summary", {})
352
- summary = SecurityCheckSummary(
353
- total=s.get("total", 0),
354
- passed=s.get("passed", 0),
355
- failed=s.get("failed", 0),
356
- warning=s.get("warning", 0),
357
- api_unavailable=s.get("api_unavailable", 0),
358
- unsupported_chain=s.get("unsupported_chain", 0),
359
- skipped=s.get("skipped", 0),
360
- )
361
- return SecurityCheckResponse(results=results, summary=summary)
362
-
363
318
  # ----------------------------------------------------------
364
319
  # Wallets
365
320
  # ----------------------------------------------------------
@@ -44,10 +44,6 @@ __all__ = [
44
44
  "SpotSellRequest",
45
45
  "SpotTpSlRequest",
46
46
  "SpotCancelRequest",
47
- "TokenToCheck",
48
- "TokenSecurityResult",
49
- "SecurityCheckSummary",
50
- "SecurityCheckResponse",
51
47
  "TaskTimeoutError",
52
48
  ]
53
49
 
@@ -128,46 +124,6 @@ class SwapRequest:
128
124
  return d
129
125
 
130
126
 
131
- @dataclass
132
- class TokenToCheck:
133
- token_address: str
134
- chain_id: int | str
135
-
136
- def to_dict(self) -> dict:
137
- return {
138
- "token_address": self.token_address,
139
- "chain_id": self.chain_id,
140
- }
141
-
142
-
143
- @dataclass
144
- class TokenSecurityResult:
145
- token_address: str
146
- chain_id: int
147
- allowed: bool
148
- status: str
149
- provider: str
150
- reason: str | None = None
151
- risk_details: dict | None = None
152
-
153
-
154
- @dataclass
155
- class SecurityCheckSummary:
156
- total: int
157
- passed: int
158
- failed: int
159
- warning: int
160
- api_unavailable: int
161
- unsupported_chain: int = 0
162
- skipped: int = 0
163
-
164
-
165
- @dataclass
166
- class SecurityCheckResponse:
167
- results: list[TokenSecurityResult]
168
- summary: SecurityCheckSummary
169
-
170
-
171
127
  @dataclass
172
128
  class LimitOrderRequest:
173
129
  chain_id_in: int
File without changes