src/database/migrations/1754000000000-AddRefreshTokenToChainedAsSession.ts

Description

Add refresh token support to the chained_as_session table.

  • chained_as_session: adds refresh_token and refresh_token_expires_at columns

This enables the Chained AS token endpoint to issue refresh tokens when refreshTokenEnabled is set on the issuance configuration.

Implements

MigrationInterface

Relationships

Used by

No results matching.

Depends on

  • MigrationInterface

Index

Properties
Methods
  • Public Async down
  • Public Async up

Properties

name
Type : string
Default value : "AddRefreshTokenToChainedAsSession1754000000000"

Methods

Public Async down
down(queryRunner: QueryRunner)
Parameters :
Name Type Optional
queryRunner QueryRunner No
Returns : Promise<void>
Public Async up
up(queryRunner: QueryRunner)
Parameters :
Name Type Optional
queryRunner QueryRunner No
Returns : Promise<void>
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";

/**
 * Add refresh token support to the chained_as_session table.
 *
 * - chained_as_session: adds refresh_token and refresh_token_expires_at columns
 *
 * This enables the Chained AS token endpoint to issue refresh tokens when
 * refreshTokenEnabled is set on the issuance configuration.
 */
export class AddRefreshTokenToChainedAsSession1754000000000
    implements MigrationInterface
{
    name = "AddRefreshTokenToChainedAsSession1754000000000";

    public async up(queryRunner: QueryRunner): Promise<void> {
        const isPostgres = queryRunner.connection.options.type === "postgres";

        const table = await queryRunner.getTable("chained_as_session");
        if (!table) {
            console.log(
                "[Migration] chained_as_session table not found — skipping.",
            );
            return;
        }

        if (!table.columns.some((col) => col.name === "refreshToken")) {
            await queryRunner.addColumn(
                "chained_as_session",
                new TableColumn({
                    name: "refreshToken",
                    type: "varchar",
                    isNullable: true,
                }),
            );
            console.log(
                "[Migration] Added refreshToken column to chained_as_session.",
            );
        }

        if (
            !table.columns.some((col) => col.name === "refreshTokenExpiresAt")
        ) {
            await queryRunner.addColumn(
                "chained_as_session",
                new TableColumn({
                    name: "refreshTokenExpiresAt",
                    type: isPostgres ? "timestamp with time zone" : "datetime",
                    isNullable: true,
                }),
            );
            console.log(
                "[Migration] Added refreshTokenExpiresAt column to chained_as_session.",
            );
        }
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        const table = await queryRunner.getTable("chained_as_session");
        if (!table) return;

        if (table.columns.some((col) => col.name === "refreshTokenExpiresAt")) {
            await queryRunner.dropColumn(
                "chained_as_session",
                "refreshTokenExpiresAt",
            );
        }

        if (table.columns.some((col) => col.name === "refreshToken")) {
            await queryRunner.dropColumn("chained_as_session", "refreshToken");
        }
    }
}

results matching ""

    No results matching ""