Skip to Content

whatsapp-mcp


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 (env API_KEY_PEPPER), so a stolen DB dump alone cannot replay against the auth endpoint.
  • prefix is a 12-char indexed lookup column (wamcp_<env>_<first 4 of secret>).
  • rotated_from_id is a self-FK that records key rotation lineage, enabling the dual-accept rotation window described in architecture.md §3.
  • last_used_at is updated asynchronously and batched by the audit pipeline so request latency is not dominated by a DB write.