用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/InugamiDev/ultrathink-oss --skill idempotency命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Unified design foundations — design system architecture, tokens, component specs, visual principles, creative vision, figma integration, plus brand design system loader (66 real brands via DESIGN.md). Absorbs design, design-system, design-systems, design-principles, design-router, creative-vision, figma, design-md.
Render, summarize, and present markdown documents and structured content in multiple output modes
Ultra UI skill - combines Google's DESIGN.md spec (machine-readable design tokens) with the ui-ux-pro-max knowledge base (91 styles, 161 palettes, 73 font pairings, 161 products, 104 UX guidelines, 25 chart types). Generates lint-clean DESIGN.md files, validates token references and WCAG contrast, exports Tailwind/DTCG tokens, and diffs design systems version-over-version.
基于 SOC 职业分类
正在显示 SKILL.md
| name | idempotency |
| description | Idempotency patterns — idempotency keys, dedup, at-least-once, exactly-once |
| layer | domain |
| category | architecture |
| triggers | ["idempotency","idempotent","duplicate request","retry safety","exactly once","at least once","deduplication"] |
| linksTo | ["api-designer","message-queues","webhooks"] |
| linkedFrom | ["api-designer","webhooks"] |
| riskLevel | high |
An idempotent operation produces the same result regardless of how many times it is executed. This is critical for payment processing, webhook handlers, queue consumers, and any API that may receive retried requests due to network failures or client timeouts.
The client sends a unique key; the server stores the result and returns it on replay.
// Middleware: idempotency key check
async function idempotencyMiddleware(req: Request, res: Response, next: NextFunction) {
const key = req.headers['idempotency-key'] as string;
if (!key) return next(); // non-idempotent path
const cached = await db.query(
`SELECT status_code, body FROM idempotency_keys WHERE key = $1 AND endpoint = $2`,
[key, req.path]
);
if (cached.rows.length > 0) {
const { status_code, body } = cached.rows[0];
return res.status(status_code).json(JSON.parse(body));
}
// Acquire lock to prevent concurrent duplicates
const lock = await db.query(
`INSERT INTO idempotency_keys (key, endpoint, locked_at)
VALUES ($1, $2, NOW())
ON CONFLICT (key, endpoint) DO NOTHING
RETURNING key`,
[key, req.path]
);
if (lock.rows.length === 0) {
return res.().({ : });
}
originalJson = res..(res);
res. = {
db.(
,
[res., .(body), key, req.]
);
(body);
};
();
}
CREATE TABLE idempotency_keys (
key TEXT NOT NULL,
endpoint TEXT NOT NULL,
status_code INT,
body JSONB,
locked_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ,
expires_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + INTERVAL '24 hours',
PRIMARY KEY (key, endpoint)
);
CREATE INDEX idx_idempotency_expires ON idempotency_keys (expires_at);
async function processMessage(message: QueueMessage) {
const messageId = message.attributes.messageId;
// Atomic insert-or-skip
const result = await db.query(
`INSERT INTO processed_messages (message_id, processed_at)
VALUES ($1, NOW())
ON CONFLICT (message_id) DO NOTHING
RETURNING message_id`,
[messageId]
);
if (result.rows.length === 0) {
console.log(`Skipping duplicate message: ${messageId}`);
return; // already processed
}
await handleBusinessLogic(message.body);
}
Use deterministic identifiers derived from the operation itself:
// Instead of a random UUID, derive from the operation
import { createHash } from 'crypto';
function deriveIdempotencyKey(userId: string, action: string, amount: number, date: string) {
return createHash('sha256')
.update(`${userId}:${action}:${amount}:${date}`)
.digest('hex');
}