whatsapp-mcp / db/schema/api-keys / apiKeys
Variable: apiKeys
const apiKeys: PgTableWithColumns<{
columns: {
clientId: PgColumn<{
baseColumn: never;
columnType: "PgUUID";
data: string;
dataType: "string";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "client_id";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
createdAt: PgColumn<{
baseColumn: never;
columnType: "PgTimestamp";
data: Date;
dataType: "date";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: true;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "created_at";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
dailyMsgLimit: PgColumn<{
baseColumn: never;
columnType: "PgInteger";
data: number;
dataType: "number";
driverParam: string | number;
enumValues: undefined;
generated: undefined;
hasDefault: true;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "daily_msg_limit";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
expiresAt: PgColumn<{
baseColumn: never;
columnType: "PgTimestamp";
data: Date;
dataType: "date";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "expires_at";
notNull: false;
tableName: "api_keys";
}, {
}, {
}>;
hash: PgColumn<{
baseColumn: never;
columnType: "PgCustomColumn";
data: Buffer;
dataType: "custom";
driverParam: Buffer<ArrayBufferLike>;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "hash";
notNull: true;
tableName: "api_keys";
}, {
}, {
pgColumnBuilderBrand: "PgCustomColumnBuilderBrand";
}>;
id: PgColumn<{
baseColumn: never;
columnType: "PgUUID";
data: string;
dataType: "string";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: true;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: true;
name: "id";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
label: PgColumn<{
baseColumn: never;
columnType: "PgText";
data: string;
dataType: "string";
driverParam: string;
enumValues: [string, ...string[]];
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "label";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
lastUsedAt: PgColumn<{
baseColumn: never;
columnType: "PgTimestamp";
data: Date;
dataType: "date";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "last_used_at";
notNull: false;
tableName: "api_keys";
}, {
}, {
}>;
lastUsedIp: PgColumn<{
baseColumn: never;
columnType: "PgInet";
data: string;
dataType: "string";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "last_used_ip";
notNull: false;
tableName: "api_keys";
}, {
}, {
}>;
prefix: PgColumn<{
baseColumn: never;
columnType: "PgText";
data: string;
dataType: "string";
driverParam: string;
enumValues: [string, ...string[]];
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "prefix";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
revokedAt: PgColumn<{
baseColumn: never;
columnType: "PgTimestamp";
data: Date;
dataType: "date";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "revoked_at";
notNull: false;
tableName: "api_keys";
}, {
}, {
}>;
rotatedFromId: PgColumn<{
baseColumn: never;
columnType: "PgUUID";
data: string;
dataType: "string";
driverParam: string;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "rotated_from_id";
notNull: false;
tableName: "api_keys";
}, {
}, {
}>;
rpmLimit: PgColumn<{
baseColumn: never;
columnType: "PgInteger";
data: number;
dataType: "number";
driverParam: string | number;
enumValues: undefined;
generated: undefined;
hasDefault: true;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "rpm_limit";
notNull: true;
tableName: "api_keys";
}, {
}, {
}>;
scopes: PgColumn<{
baseColumn: never;
columnType: "PgJsonb";
data: string[];
dataType: "json";
driverParam: unknown;
enumValues: undefined;
generated: undefined;
hasDefault: false;
hasRuntimeDefault: false;
identity: undefined;
isAutoincrement: false;
isPrimaryKey: false;
name: "scopes";
notNull: true;
tableName: "api_keys";
}, {
}, {
$type: string[];
}>;
};
dialect: "pg";
name: "api_keys";
schema: undefined;
}>;Defined in: src/db/schema/api-keys.ts:35
api_keys — per-client API key records.
Remarks
- Never store plaintext.
hash = HMAC_SHA256(pepper, full_token). Pepper lives outside the DB (envAPI_KEY_PEPPER), so a stolen DB dump alone cannot replay against the auth endpoint. prefixis a 12-char indexed lookup column (wamcp_<env>_<first 4 of secret>).rotated_from_idis a self-FK that records key rotation lineage, enabling the dual-accept rotation window described in architecture.md §3.last_used_atis updated asynchronously and batched by the audit pipeline so request latency is not dominated by a DB write.