From 94ecfafeb7337323438e2b369a1e0b02e53fbd63 Mon Sep 17 00:00:00 2001 From: Jake White Date: Wed, 10 Dec 2025 12:20:56 +0000 Subject: [PATCH 1/2] get identity token from auths if it exists --- .../src/container-runtime/auth/auths.test.ts | 15 +++++++++++++++ .../src/container-runtime/auth/auths.ts | 7 +++++++ .../src/container-runtime/auth/types.ts | 1 + 3 files changed, 23 insertions(+) diff --git a/packages/testcontainers/src/container-runtime/auth/auths.test.ts b/packages/testcontainers/src/container-runtime/auth/auths.test.ts index 71d531f45..69c3f75de 100644 --- a/packages/testcontainers/src/container-runtime/auth/auths.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/auths.test.ts @@ -82,5 +82,20 @@ describe("Auths", () => { }; expect(await locator.getAuthConfig("https://registry.example.com", containerRuntimeConfig)).toEqual(authConfig); }); + + it("should return credentials from identity token", async () => { + const containerRuntimeConfig: ContainerRuntimeConfig = { + auths: { + "https://registry.example.com": { + identitytoken: "token-value", + }, + }, + }; + const authConfig: AuthConfig = { + identityToken: "token-value", + registryAddress: "https://registry.example.com", + }; + expect(await locator.getAuthConfig("https://registry.example.com", containerRuntimeConfig)).toEqual(authConfig); + }); }); }); diff --git a/packages/testcontainers/src/container-runtime/auth/auths.ts b/packages/testcontainers/src/container-runtime/auth/auths.ts index 52831c3f1..176619e05 100644 --- a/packages/testcontainers/src/container-runtime/auth/auths.ts +++ b/packages/testcontainers/src/container-runtime/auth/auths.ts @@ -13,6 +13,13 @@ export class Auths implements RegistryAuthLocator { return undefined; } + if (auth.identitytoken) { + return { + registryAddress: registry, + identityToken: auth.identitytoken, + }; + } + const authConfig: Partial = { registryAddress: registry }; if (auth.email) { diff --git a/packages/testcontainers/src/container-runtime/auth/types.ts b/packages/testcontainers/src/container-runtime/auth/types.ts index 625fdf7ab..f2fab31cb 100644 --- a/packages/testcontainers/src/container-runtime/auth/types.ts +++ b/packages/testcontainers/src/container-runtime/auth/types.ts @@ -9,6 +9,7 @@ export type Auth = { email?: string; username?: string; password?: string; + identitytoken?: string; }; export type AuthConfig = UsernamePasswordAuthConfig | IdentityTokenAuthConfig; From 46e102d04502483fa9eb6c375ea7cdeb35db85c9 Mon Sep 17 00:00:00 2001 From: Jake White Date: Wed, 10 Dec 2025 12:30:43 +0000 Subject: [PATCH 2/2] add token & u/p test --- .../src/container-runtime/auth/auths.test.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/testcontainers/src/container-runtime/auth/auths.test.ts b/packages/testcontainers/src/container-runtime/auth/auths.test.ts index 69c3f75de..84d71900b 100644 --- a/packages/testcontainers/src/container-runtime/auth/auths.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/auths.test.ts @@ -97,5 +97,22 @@ describe("Auths", () => { }; expect(await locator.getAuthConfig("https://registry.example.com", containerRuntimeConfig)).toEqual(authConfig); }); + + it("should use identity token when token and user and pass are provided", async () => { + const containerRuntimeConfig: ContainerRuntimeConfig = { + auths: { + "https://registry.example.com": { + identitytoken: "token-value", + username: "user", + password: "pass", + }, + }, + }; + const authConfig: AuthConfig = { + identityToken: "token-value", + registryAddress: "https://registry.example.com", + }; + expect(await locator.getAuthConfig("https://registry.example.com", containerRuntimeConfig)).toEqual(authConfig); + }); }); });