Skip to Content

whatsapp-mcp


whatsapp-mcp / db/schema/phone-numbers / phoneNumbers

Variable: phoneNumbers

const phoneNumbers: PgTableWithColumns<{ columns: { accessTokenSecretRef: 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: "access_token_secret_ref"; notNull: true; tableName: "phone_numbers"; }, { }, { }>; 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: "phone_numbers"; }, { }, { }>; disabledAt: 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: "disabled_at"; notNull: false; tableName: "phone_numbers"; }, { }, { }>; displayNumber: 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: "display_number"; notNull: false; tableName: "phone_numbers"; }, { }, { }>; 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: "phone_numbers"; }, { }, { }>; 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: false; tableName: "phone_numbers"; }, { }, { }>; waBusinessAccountId: 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: "wa_business_account_id"; notNull: true; tableName: "phone_numbers"; }, { }, { }>; waPhoneNumberId: 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: "wa_phone_number_id"; notNull: true; tableName: "phone_numbers"; }, { }, { }>; webhookVerifyTokenRef: 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: "webhook_verify_token_ref"; notNull: true; tableName: "phone_numbers"; }, { }, { }>; }; dialect: "pg"; name: "phone_numbers"; schema: undefined; }>;

Defined in: src/db/schema/phone-numbers.ts:23 

phone_numbers — one row per Meta WABA phone number.

Remarks

  • access_token_secret_ref is a string like secrets://wa_access_token_<id> that the secrets resolver maps to a file path / Vault address. The actual token never touches this table — that way a DB dump leak cannot exfiltrate Meta tokens.
  • No app_secret column: the App Secret is per Meta App, not per number, and every number in this WABA shares the single secret read from env WA_APP_SECRET. Add a nullable app_secret_ref only when (if) we split into multiple Meta Apps.
  • disabled_at IS NOT NULL removes the number from the auth/grant pipeline without touching any client rows.