Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@nrk/innlogging-dev

Package Overview
Dependencies
Maintainers
200
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nrk/innlogging-dev - npm Package Compare versions

Comparing version
0.0.7
to
0.1.0
+1
-1
dist/connect.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAiBlD,eAAO,MAAM,eAAe,GAAI,YAAY,gBAAgB,mBAiS3D,CAAC"}
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAgB9B,OAAO,KAAK,EAAE,gBAAgB,EAAY,MAAM,WAAW,CAAC;AAiF5D,eAAO,MAAM,eAAe,GAAI,YAAY,gBAAgB,mBA6S3D,CAAC"}

@@ -5,21 +5,84 @@ import { SESSION_VERSION } from '@nrk/innlogging-shared/constants';

import cookieParser from 'cookie-parser';
import { initAuthority } from "./utils/authority.js";
import { addNoCacheHeaders, getSearchParams, handleHTTPMethod, } from "./utils/connect.js";
import { IdentitySwapRejectedError, initAuthority } from "./utils/authority.js";
import { addNoCacheHeaders, extractSubFromUrl, getSearchParams, handleHTTPMethod, } from "./utils/connect.js";
import { consentsCookie, hCookie, newsRegionCookie, refreshTokenCookie, } from "./utils/cookie.js";
import { initHtmlTemplates } from "./utils/template.js";
const TEST_USERS = [
{ name: 'armand', username: 'armand.oppad.strekk@test.neon.nrk.no' },
{ name: 'harald', username: 'harald.verdens.tid@test.neon.nrk.no' },
{ name: 'emba', username: 'emba.larsen@test.neon.nrk.no' },
{ name: 'trond', username: 'trond.bone@test.neon.nrk.no' },
{ name: 'tarjei', username: 'tarjei.sammen.jr@test.neon.nrk.no' },
{ name: 'solvi', username: 'solvi.normalbakken@test.neon.nrk.no' },
{ name: 'tor', username: 'tor.peder.ringen@test.neon.nrk.no' },
{ name: 'karl', username: 'karl.esjen@test.neon.nrk.no' },
{ name: 'trude', username: 'trude.rude.rantan@test.neon.nrk.no' },
{ name: 'lan', username: 'lan.borghini@test.neon.nrk.no' },
const TEST_PASSWORD = 'TestPassword123';
const DEFAULT_TEST_USERS = [
{
name: 'armand',
username: 'armand.oppad.strekk@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'harald',
username: 'harald.verdens.tid@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'emba',
username: 'emba.larsen@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'trond',
username: 'trond.bone@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'tarjei',
username: 'tarjei.sammen.jr@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'solvi',
username: 'solvi.normalbakken@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'tor',
username: 'tor.peder.ringen@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'karl',
username: 'karl.esjen@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'trude',
username: 'trude.rude.rantan@test.neon.nrk.no',
password: TEST_PASSWORD,
},
{
name: 'lan',
username: 'lan.borghini@test.neon.nrk.no',
password: TEST_PASSWORD,
},
];
const TEST_PASSWORD = 'TestPassword123';
const DEFAULT_SCOPE = ['openid', 'profile', 'email', 'psapi-userdata'];
const DEFAULT_SCOPE = ['openid', 'profile', 'email'];
const validateTestUsers = (users) => {
const errors = [];
users.forEach((user, index) => {
if (!user.name)
errors.push(`testUsers[${index}]: 'name' must be a non-empty string`);
if (!user.username)
errors.push(`testUsers[${index}]: 'username' must be a non-empty string`);
if (!user.password)
errors.push(`testUsers[${index}]: 'password' must be a non-empty string`);
});
const names = users.map((u) => u.name).filter(Boolean);
const duplicates = names.filter((name, i) => names.indexOf(name) !== i);
if (duplicates.length > 0) {
errors.push(`testUsers: duplicate name(s) found: ${[...new Set(duplicates)].join(', ')}`);
}
if (errors.length > 0) {
throw new Error(`innlogging-dev: invalid testUsers configuration:\n${errors.join('\n')}`);
}
};
export const loginDevConnect = (pluginOpts) => {
if (pluginOpts.testUsers != null) {
validateTestUsers(pluginOpts.testUsers);
}
const testUsers = pluginOpts.testUsers ?? DEFAULT_TEST_USERS;
const htmlTemplates = initHtmlTemplates();

@@ -41,3 +104,3 @@ const authority = initAuthority({

try {
refreshResult = await handleSessionRefresh(req.cookies);
refreshResult = await handleSessionRefresh(req.cookies, null);
}

@@ -60,3 +123,3 @@ catch {

returnToEditProfileUrl,
users: TEST_USERS,
users: testUsers,
session: refreshResult?.session,

@@ -69,3 +132,3 @@ }));

const returnUrl = searchParams.get('returnUrl') ?? '/';
const user = TEST_USERS.find(({ name }) => name === req.body.user);
const user = testUsers.find(({ name }) => name === req.body.user);
if (user == null) {

@@ -78,3 +141,3 @@ return res

username: user.username,
password: TEST_PASSWORD,
password: user.password,
scope: [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])],

@@ -92,3 +155,3 @@ });

}));
app.use('/session/tokenforsub', handleHTTPMethod('POST', async (req, res) => {
const sessionRefreshHandler = handleHTTPMethod('POST', async (req, res) => {
addNoCacheHeaders(res);

@@ -100,4 +163,5 @@ if (req.headers['x-auth-csrf'] !== '1') {

}
const sub = extractSubFromUrl(req.url);
try {
const { session, cookies } = await handleSessionRefresh(req.cookies);
const { session, cookies } = await handleSessionRefresh(req.cookies, sub);
return res

@@ -111,2 +175,7 @@ .writeHead(200, {

catch (e) {
if (e instanceof IdentitySwapRejectedError) {
return res
.writeHead(409, { 'Content-Type': 'text/plain' })
.end(`Identity swap rejected for ${e.sub}`);
}
const message = e instanceof Error ? e.message : String(e);

@@ -117,4 +186,8 @@ return res

}
}));
const handleSessionRefresh = async (cookies) => {
});
// New path used by the client since the token_for_sub → swap_sub migration.
app.use('/session/token/refresh', sessionRefreshHandler);
// Legacy alias kept so older builds of innlogging-client still work locally.
app.use('/session/tokenforsub', sessionRefreshHandler);
const handleSessionRefresh = async (cookies, sub) => {
const refreshToken = refreshTokenCookie.read(cookies);

@@ -133,6 +206,6 @@ if (refreshToken == null) {

}
const { refreshToken: newRefreshToken, ...session } = await authority.tokenForSubGrant({
refreshToken: refreshToken,
scope: [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])],
});
const scope = [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])];
const { refreshToken: newRefreshToken, ...session } = sub == null
? await authority.refreshTokenGrant({ refreshToken, scope })
: await authority.swapSubGrant({ refreshToken, sub, scope });
return {

@@ -139,0 +212,0 @@ session: {

@@ -1,1 +0,1 @@

{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}

@@ -15,15 +15,25 @@ import type { LoggedInSession } from '@nrk/innlogging-shared/types';

};
type TokenForSubGrantParams = {
type RefreshTokenGrantParams = {
refreshToken: string;
sub?: string;
scope: string[];
};
type TokenForSubGrantResponse = LoggedInSession & {
type SwapSubGrantParams = {
refreshToken: string;
sub: string;
scope: string[];
};
type SessionGrantResponse = LoggedInSession & {
refreshToken: string;
};
export declare class IdentitySwapRejectedError extends Error {
readonly sub: string;
readonly detail: string;
constructor(sub: string, detail: string);
}
export declare const initAuthority: (config: InitAuthorityConfig) => {
passwordGrant: ({ username, password, scope, }: PasswordGrantParams) => Promise<PasswordGrantResponse>;
tokenForSubGrant: ({ refreshToken, sub, scope, }: TokenForSubGrantParams) => Promise<TokenForSubGrantResponse>;
refreshTokenGrant: ({ refreshToken, scope, }: RefreshTokenGrantParams) => Promise<SessionGrantResponse>;
swapSubGrant: ({ refreshToken, sub, scope, }: SwapSubGrantParams) => Promise<SessionGrantResponse>;
};
export {};
//# sourceMappingURL=authority.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,mBAAmB;oDA0BpD,mBAAmB,KAAG,OAAO,CAAC,qBAAqB,CAAC;sDA8BpD,sBAAsB,KAAG,OAAO,CAAC,wBAAwB,CAAC;CAwC9D,CAAC"}
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG,eAAe,GAAG;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMxC;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,mBAAmB;oDA0BpD,mBAAmB,KAAG,OAAO,CAAC,qBAAqB,CAAC;kDAmDpD,uBAAuB,KAAG,OAAO,CAAC,oBAAoB,CAAC;kDAwBvD,kBAAkB,KAAG,OAAO,CAAC,oBAAoB,CAAC;CAkCtD,CAAC"}
import { SESSION_VERSION } from '@nrk/innlogging-shared/constants';
import { createHash } from 'crypto';
export class IdentitySwapRejectedError extends Error {
sub;
detail;
constructor(sub, detail) {
super(`swap_sub rejected for ${sub}: ${detail}`);
this.name = 'IdentitySwapRejectedError';
this.sub = sub;
this.detail = detail;
}
}
export const initAuthority = (config) => {

@@ -44,9 +54,42 @@ let oidcDiscoveryPromise = null;

};
const tokenForSubGrant = async ({ refreshToken, sub = '_', scope, }) => {
const buildSession = (json) => {
const { id_token, access_token, refresh_token, expires_in, user_info, ...sessionRest } = json;
return {
authState: 'loggedIn',
version: SESSION_VERSION,
idToken: id_token,
accessToken: access_token,
refreshToken: refresh_token,
expiresIn: expires_in,
userInfo: user_info,
h: createHash('sha256').update(user_info.sub).digest('base64url'),
...sessionRest,
};
};
const refreshTokenGrant = async ({ refreshToken, scope, }) => {
const tokenEndpoint = await discoverTokenEndpoint();
const body = new URLSearchParams({
grant_type: 'token_for_sub',
grant_type: 'refresh_token',
client_id: config.clientId,
client_secret: config.clientSecret,
refresh_token: refreshToken,
scope: scope.join(' '),
});
const res = await fetch(tokenEndpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body,
});
if (!res.ok) {
throw new Error(`Refresh token grant failed: ${await res.text()}`);
}
return buildSession(await res.json());
};
const swapSubGrant = async ({ refreshToken, sub, scope, }) => {
const tokenEndpoint = await discoverTokenEndpoint();
const body = new URLSearchParams({
grant_type: 'swap_sub',
client_id: config.clientId,
client_secret: config.clientSecret,
refresh_token: refreshToken,
sub,

@@ -61,19 +104,22 @@ scope: scope.join(' '),

if (!res.ok) {
throw new Error(`Token for sub grant failed: ${await res.text()}`);
const detail = await res.text();
// Mirrors Tomba: the authority signals "this user can't swap to that sub"
// with invalid_request. Surface it distinctly so the dev server can
// return 409 without touching the existing session.
try {
const parsed = JSON.parse(detail);
if (parsed?.error === 'invalid_request') {
throw new IdentitySwapRejectedError(sub, detail);
}
}
catch (e) {
if (e instanceof IdentitySwapRejectedError)
throw e;
}
throw new Error(`Swap sub grant failed: ${detail}`);
}
const { id_token, access_token, refresh_token, expires_in, user_info, ...sessionRest } = await res.json();
return {
authState: 'loggedIn',
version: SESSION_VERSION,
idToken: id_token,
accessToken: access_token,
refreshToken: refresh_token,
expiresIn: expires_in,
userInfo: user_info,
h: createHash('sha256').update(user_info.sub).digest('base64url'),
...sessionRest,
};
return buildSession(await res.json());
};
return { passwordGrant, tokenForSubGrant };
return { passwordGrant, refreshTokenGrant, swapSubGrant };
};
//# sourceMappingURL=authority.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"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"}

@@ -8,3 +8,4 @@ import type { IncomingMessage, NextFunction, NextHandleFunction } from 'connect';

export declare const getSearchParams: (req: IncomingMessage) => URLSearchParams;
export declare const extractSubFromUrl: (url: string | undefined) => string | null;
export {};
//# sourceMappingURL=connect.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,KAAK,uBAAuB,GAAG,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,gBAAgB,GAEzB,QAAQ,KAAK,GAAG,MAAM,EACtB,IAAI,kBAAkB,GAAG,uBAAuB,KAC/C,kBAAkB,GAAG,uBAUvB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,cAAc,CAAC,eAAe,CAAC,SAOlE,CAAC;AAEL,eAAO,MAAM,eAAe,GAAI,KAAK,eAAe,oBACU,CAAC"}
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,KAAK,uBAAuB,GAAG,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,gBAAgB,GAEzB,QAAQ,KAAK,GAAG,MAAM,EACtB,IAAI,kBAAkB,GAAG,uBAAuB,KAC/C,kBAAkB,GAAG,uBAUvB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,cAAc,CAAC,eAAe,CAAC,SAOlE,CAAC;AAEL,eAAO,MAAM,eAAe,GAAI,KAAK,eAAe,oBACU,CAAC;AAI/D,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAYpE,CAAC"}

@@ -20,2 +20,18 @@ export const handleHTTPMethod = (method, fn) => async (req, res, next) => {

export const getSearchParams = (req) => new URL(req.originalUrl ?? '/', 'http://dummy').searchParams;
// For a handler mounted at `/session/token/refresh`, req.url after prefix
// stripping is `/`, `''`, or `/<sub>` (possibly with a query string).
export const extractSubFromUrl = (url) => {
const [path = ''] = (url ?? '/').split('?', 1);
const trimmed = path.replace(/^\/+|\/+$/g, '');
if (trimmed === '') {
return null;
}
try {
return decodeURIComponent(trimmed);
}
catch {
// Malformed percent-encoding in URL
return null;
}
};
//# sourceMappingURL=connect.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CACE,MAAsB,EACtB,EAAgD,EACF,EAAE,CAClD,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACvB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAE,EAAE,CACxE,MAAM,CAAC,OAAO,CAAC;IACb,eAAe,EAAE,oBAAoB;IACrC,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,+BAA+B;CACzC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE,CACtD,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC"}
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CACE,MAAsB,EACtB,EAAgD,EACF,EAAE,CAClD,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACvB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAE,EAAE,CACxE,MAAM,CAAC,OAAO,CAAC;IACb,eAAe,EAAE,oBAAoB;IACrC,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,+BAA+B;CACzC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE,CACtD,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC;AAE/D,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAuB,EAAiB,EAAE;IAC1E,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
import type { Plugin } from 'vite';
export type TestUser = {
name: string;
username: string;
password: string;
};
export type DevPluginOptions = {

@@ -6,5 +11,6 @@ issuer: string;

clientSecret: string;
scopes?: string;
scopes?: string[];
testUsers?: TestUser[];
};
export declare const loginDev: (devPluginOpts: DevPluginOptions) => Plugin;
//# sourceMappingURL=vite.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,KAAG,MAKzD,CAAC"}
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,KAAG,MAKzD,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAS/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,aAA+B,EAAU,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,uBAAuB;IAC7B,eAAe,CAAC,MAAM;QACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAC,CAAC"}
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgB/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,aAA+B,EAAU,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,uBAAuB;IAC7B,eAAe,CAAC,MAAM;QACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAC,CAAC"}
{
"name": "@nrk/innlogging-dev",
"version": "0.0.7",
"version": "0.1.0",
"type": "module",

@@ -32,4 +32,4 @@ "main": "dist/vite.js",

"cookies": "0.9.1",
"handlebars": "4.7.8",
"@nrk/innlogging-shared": "0.0.7"
"handlebars": "4.7.9",
"@nrk/innlogging-shared": "0.1.0"
},

@@ -39,8 +39,8 @@ "devDependencies": {

"@types/connect": "3.4.38",
"eslint": "10.0.1",
"eslint": "10.4.0",
"rimraf": "6.1.3",
"tsc-watch": "7.2.0",
"typescript": "5.9.3",
"vite": "7.3.1",
"@nrk/eslint-config": "0.0.7"
"typescript": "6.0.3",
"vite": "8.0.13",
"@nrk/eslint-config": "0.1.0"
},

@@ -47,0 +47,0 @@ "scripts": {

@@ -47,1 +47,23 @@ # innlogging-dev

```
## Optional config
Both `loginDev` and `loginDevConnect` accept these additional options:
- `scopes` — `string[]` of additional OAuth scopes to request alongside the defaults (`openid`, `profile`, `email`).
- `testUsers` — override the built-in list of selectable test users. Each entry needs `{ name, username, password }`. When omitted, a set of NRK test accounts is used.
```ts
loginDev({
clientId: '<CLIENT_ID>',
clientSecret: '<CLIENT_SECRET>',
issuer: '<ISSUER>',
testUsers: [
{
name: 'alice',
username: 'alice@example.test',
password: 'hunter2',
},
],
});
```

@@ -71,2 +71,46 @@ <!DOCTYPE html>

}
.identities {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
gap: 0.5rem;
}
.identity-button {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.4rem;
padding: 0.75rem;
user-select: none;
}
.identity-avatar {
display: flex;
align-items: center;
justify-content: center;
width: 2.25rem;
height: 2.25rem;
border-radius: 50%;
background-color: var(--color-zinc-600);
font-size: 1rem;
font-weight: 700;
}
.identity-name {
font-size: 0.9rem;
}
.identity-type {
font-size: 0.7rem;
opacity: 0.7;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.identity-message {
margin-top: 0.5rem;
font-size: 0.9rem;
color: var(--color-amber-300);
}
</style>

@@ -104,3 +148,26 @@ </head>

{{#if session.identities.length}}
<section>
<h1>Identities</h1>
<div class="identities" data-return-url="{{returnUrl}}">
{{#each session.identities}}
<button
type="button"
class="button identity-button {{#if (eq sub @root.session.userInfo.sub)}}active{{/if}}"
data-sub="{{sub}}"
data-name="{{name}}"
aria-pressed="{{#if (eq sub @root.session.userInfo.sub)}}true{{else}}false{{/if}}"
onclick="selectIdentity(this)"
>
<span class="identity-avatar">{{shortName}}</span>
<span class="identity-name">{{name}}</span>
<span class="identity-type">{{profileType}}</span>
</button>
{{/each}}
</div>
<p id="identity-message" class="identity-message" role="status"></p>
</section>
{{/if}}
<section>
<h1>Navigation</h1>

@@ -176,2 +243,36 @@ <div class="navigation-container">

<script>
const selectIdentity = async (btn) => {
if (btn.classList.contains('active') || btn.disabled) return;
const sub = btn.dataset.sub;
const name = btn.dataset.name;
const message = document.getElementById('identity-message');
const buttons = document.querySelectorAll('.identity-button');
buttons.forEach((b) => (b.disabled = true));
message.textContent = '';
try {
const res = await fetch(
`/_auth/web/session/token/refresh/${encodeURIComponent(sub)}`,
{
method: 'POST',
headers: { 'x-auth-csrf': '1' },
}
);
if (res.ok) {
const returnUrl =
btn.closest('.identities')?.dataset.returnUrl || '/';
window.location.href = returnUrl;
return;
}
if (res.status === 409) {
message.textContent = `Could not switch to "${name}" — it may have been removed.`;
} else {
message.textContent = `Failed to switch identity (${res.status}).`;
}
} catch (err) {
message.textContent = `Failed to switch identity: ${err}`;
} finally {
buttons.forEach((b) => (b.disabled = false));
}
};
const copyToClipboard = (btn, text) => {

@@ -178,0 +279,0 @@ navigator.clipboard