Debug Evernote API issues with diagnostic tools and techniques. Use when troubleshooting API calls, inspecting requests/responses, or diagnosing integration problems. Trigger with phrases like "debug evernote", "evernote diagnostic", "troubleshoot evernote", "evernote logs", "inspect evernote".
!node --version 2>/dev/null || echo 'N/A'
!python3 --version 2>/dev/null || echo 'N/A'
Comprehensive debugging toolkit for Evernote API integrations, including request/response logging, ENML validation with auto-fix, token inspection, and diagnostic CLI utilities.
evernote-common-errors)Create a logger that captures API method names, arguments (with token redaction), response times, and error details. Write to both console and file for post-mortem analysis.
class EvernoteDebugLogger {
constructor(logFile = 'evernote-debug.log') {
this.logFile = logFile;
this.requests = [];
}
logRequest(method, args, response, duration, error) {
const entry = {
timestamp: new Date().toISOString(),
method,
duration: `${duration}ms`,
success: !error,
error: error?.message || error?.errorCode
};
this.requests.push(entry);
fs.appendFileSync(this.logFile, JSON.stringify(entry) + '\n');
}
}
Wrap the NoteStore with a Proxy that automatically logs every API call, measures response time, and catches errors. This adds zero-config debugging to any existing integration.
function instrumentNoteStore(noteStore, logger) {
return new Proxy(noteStore, {
get(target, prop) {
if (typeof target[prop] !== 'function') return target[prop];
return async (...args) => {
const start = Date.now();
try {
const result = await targetprop;
logger.logRequest(prop, args, result, Date.now() - start);
return result;
} catch (error) {
logger.logRequest(prop, args, null, Date.now() - start, error);
throw error;
}
};
}
});
}
Validate ENML content against the DTD rules: check for XML declaration, DOCTYPE, <en-note> root, forbidden elements, and unclosed tags. Optionally auto-fix common issues (add missing headers, close tags, strip forbidden elements).
Check token validity by calling userStore.getUser(). Report token owner, expiration date (edam_expires), account type, and remaining upload quota.
Create a CLI script with commands: diagnose (run all checks), validate-enml <file> (validate ENML content), inspect-token (show token info), test-api (verify API connectivity).
For the full debug logger, instrumented client, ENML auto-fixer, token inspector, and diagnostic CLI, see Implementation Guide.
EvernoteDebugLogger with file and console outputdiagnose, validate-enml, inspect-token commands| Issue | Diagnostic | Solution |
|-------|------------|----------|
| Auth failures | Run inspect-token to check expiration | Re-authenticate if expired |
| ENML errors | Run validate-enml on content | Auto-fix or manually correct |
| Rate limits | Check request frequency in debug log | Increase delay between calls |
| Missing data | Inspect response in debug log | Verify API parameters (withContent flags) |
For rate limit handling, see evernote-rate-limits.
Request tracing: Wrap NoteStore with the instrumented proxy, run your workflow, then review evernote-debug.log for slow calls (>2s), failed requests, and rate limit hits.
ENML debugging: Pipe note content through the ENML validator to find missing DOCTYPE, forbidden <script> tags, or unclosed elements. Use auto-fix mode to correct issues automatically.
下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer