@sourceregistry/sveltekit-oidc 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +184 -0
- package/dist/client/OIDCContext.svelte +208 -0
- package/dist/client/OIDCContext.svelte.d.ts +18 -0
- package/dist/client/context.d.ts +16 -0
- package/dist/client/context.js +15 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/jsr.d.ts +2 -0
- package/dist/jsr.js +2 -0
- package/dist/server/cookies.d.ts +2 -0
- package/dist/server/cookies.js +26 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.js +505 -0
- package/dist/server/jwt.d.ts +5 -0
- package/dist/server/jwt.js +43 -0
- package/dist/server/session.d.ts +3 -0
- package/dist/server/session.js +19 -0
- package/dist/server/store.d.ts +2 -0
- package/dist/server/store.js +18 -0
- package/dist/server/types.d.ts +238 -0
- package/dist/server/types.js +1 -0
- package/dist/server/utils.d.ts +19 -0
- package/dist/server/utils.js +104 -0
- package/package.json +112 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import type { Action, Cookies, Handle, RequestEvent, RequestHandler } from '@sveltejs/kit';
|
|
2
|
+
import type { KeyObject } from 'node:crypto';
|
|
3
|
+
export type MaybePromise<T> = Promise<T> | T;
|
|
4
|
+
export type SupportedAlgorithm = 'HS256' | 'HS384' | 'HS512' | 'RS256' | 'RS384' | 'RS512' | 'ES256' | 'ES384' | 'ES512' | 'ES256K' | 'PS256' | 'PS384' | 'PS512' | 'EdDSA';
|
|
5
|
+
export type OIDCDiscoveryDocument = {
|
|
6
|
+
issuer: string;
|
|
7
|
+
authorization_endpoint: string;
|
|
8
|
+
token_endpoint: string;
|
|
9
|
+
userinfo_endpoint?: string;
|
|
10
|
+
end_session_endpoint?: string;
|
|
11
|
+
revocation_endpoint?: string;
|
|
12
|
+
check_session_iframe?: string;
|
|
13
|
+
backchannel_logout_supported?: boolean;
|
|
14
|
+
backchannel_logout_session_supported?: boolean;
|
|
15
|
+
jwks_uri: string;
|
|
16
|
+
response_types_supported?: string[];
|
|
17
|
+
subject_types_supported?: string[];
|
|
18
|
+
id_token_signing_alg_values_supported?: string[];
|
|
19
|
+
scopes_supported?: string[];
|
|
20
|
+
token_endpoint_auth_methods_supported?: string[];
|
|
21
|
+
token_endpoint_auth_signing_alg_values_supported?: string[];
|
|
22
|
+
claims_supported?: string[];
|
|
23
|
+
code_challenge_methods_supported?: string[];
|
|
24
|
+
grant_types_supported?: string[];
|
|
25
|
+
};
|
|
26
|
+
export type OIDCTokenResponse = {
|
|
27
|
+
access_token: string;
|
|
28
|
+
token_type: string;
|
|
29
|
+
expires_in?: number;
|
|
30
|
+
refresh_token?: string;
|
|
31
|
+
scope?: string;
|
|
32
|
+
id_token?: string;
|
|
33
|
+
refresh_expires_in?: number;
|
|
34
|
+
session_state?: string;
|
|
35
|
+
};
|
|
36
|
+
export type OIDCSessionTokens = {
|
|
37
|
+
accessToken: string;
|
|
38
|
+
tokenType: string;
|
|
39
|
+
idToken?: string;
|
|
40
|
+
refreshToken?: string;
|
|
41
|
+
scope: string[];
|
|
42
|
+
expiresAt?: number;
|
|
43
|
+
refreshExpiresAt?: number;
|
|
44
|
+
};
|
|
45
|
+
export type OIDCUserClaims = Record<string, unknown> & {
|
|
46
|
+
sub: string;
|
|
47
|
+
email?: string;
|
|
48
|
+
name?: string;
|
|
49
|
+
preferred_username?: string;
|
|
50
|
+
picture?: string;
|
|
51
|
+
groups?: string[];
|
|
52
|
+
sid?: string;
|
|
53
|
+
iss?: string;
|
|
54
|
+
aud?: string | string[];
|
|
55
|
+
exp?: number;
|
|
56
|
+
nbf?: number;
|
|
57
|
+
nonce?: string;
|
|
58
|
+
};
|
|
59
|
+
export type OIDCSession = {
|
|
60
|
+
issuer: string;
|
|
61
|
+
clientId: string;
|
|
62
|
+
nonce?: string;
|
|
63
|
+
sub?: string;
|
|
64
|
+
sid?: string;
|
|
65
|
+
sessionState?: string;
|
|
66
|
+
groups: string[];
|
|
67
|
+
user?: OIDCUserClaims;
|
|
68
|
+
claims?: OIDCUserClaims;
|
|
69
|
+
tokens: OIDCSessionTokens;
|
|
70
|
+
createdAt: number;
|
|
71
|
+
refreshedAt: number;
|
|
72
|
+
};
|
|
73
|
+
export type OIDCPublicSession = {
|
|
74
|
+
isAuthenticated: boolean;
|
|
75
|
+
user?: OIDCUserClaims;
|
|
76
|
+
claims?: OIDCUserClaims;
|
|
77
|
+
groups: string[];
|
|
78
|
+
scope: string[];
|
|
79
|
+
expiresAt?: number;
|
|
80
|
+
issuer?: string;
|
|
81
|
+
sessionState?: string;
|
|
82
|
+
sid?: string;
|
|
83
|
+
sub?: string;
|
|
84
|
+
};
|
|
85
|
+
export type OIDCBackChannelLogoutClaims = Record<string, unknown> & {
|
|
86
|
+
iss: string;
|
|
87
|
+
aud: string | string[];
|
|
88
|
+
iat: number;
|
|
89
|
+
jti: string;
|
|
90
|
+
sub?: string;
|
|
91
|
+
sid?: string;
|
|
92
|
+
events: {
|
|
93
|
+
'http://schemas.openid.net/event/backchannel-logout': Record<string, never>;
|
|
94
|
+
};
|
|
95
|
+
nonce?: never;
|
|
96
|
+
};
|
|
97
|
+
export type OIDCClientAuthMethod = 'client_secret_basic' | 'client_secret_post' | 'client_secret_jwt' | 'private_key_jwt' | 'none';
|
|
98
|
+
export type CookieOptions = NonNullable<Parameters<Cookies['set']>[2]>;
|
|
99
|
+
export type OIDCClientSecretJwtOptions = {
|
|
100
|
+
algorithm?: 'HS256' | 'HS384' | 'HS512';
|
|
101
|
+
expiresInSeconds?: number;
|
|
102
|
+
};
|
|
103
|
+
export type OIDCPrivateKeyJwtOptions = {
|
|
104
|
+
privateKey: string | KeyObject;
|
|
105
|
+
algorithm?: 'RS256' | 'RS384' | 'RS512';
|
|
106
|
+
keyId?: string;
|
|
107
|
+
expiresInSeconds?: number;
|
|
108
|
+
};
|
|
109
|
+
export type OIDCBackChannelLogoutRecord = {
|
|
110
|
+
issuer: string;
|
|
111
|
+
clientId: string;
|
|
112
|
+
sid?: string;
|
|
113
|
+
sub?: string;
|
|
114
|
+
jti: string;
|
|
115
|
+
iat: number;
|
|
116
|
+
};
|
|
117
|
+
export type OIDCBackChannelLogoutStore = {
|
|
118
|
+
revoke(record: OIDCBackChannelLogoutRecord): MaybePromise<void>;
|
|
119
|
+
isRevoked(session: OIDCSession): MaybePromise<boolean>;
|
|
120
|
+
};
|
|
121
|
+
export type OIDCSessionManagementConfig = {
|
|
122
|
+
clientId: string;
|
|
123
|
+
loginPath: string;
|
|
124
|
+
redirectPath: string;
|
|
125
|
+
metadata: Pick<OIDCDiscoveryDocument, 'issuer' | 'check_session_iframe' | 'end_session_endpoint' | 'backchannel_logout_supported' | 'backchannel_logout_session_supported'>;
|
|
126
|
+
checkSessionIframe?: string;
|
|
127
|
+
supportsSessionIframe: boolean;
|
|
128
|
+
backChannelLogoutSupported: boolean;
|
|
129
|
+
backChannelLogoutSessionSupported: boolean;
|
|
130
|
+
};
|
|
131
|
+
export type OIDCOptions = {
|
|
132
|
+
issuer?: string;
|
|
133
|
+
discoveryUrl?: string;
|
|
134
|
+
clientId: string;
|
|
135
|
+
clientSecret?: string;
|
|
136
|
+
clientAuthMethod?: OIDCClientAuthMethod;
|
|
137
|
+
clientSecretJwt?: OIDCClientSecretJwtOptions;
|
|
138
|
+
privateKeyJwt?: OIDCPrivateKeyJwtOptions;
|
|
139
|
+
loginPath?: string;
|
|
140
|
+
redirectPath?: string;
|
|
141
|
+
postLogoutRedirectUri?: string;
|
|
142
|
+
scope?: string[];
|
|
143
|
+
audience?: string;
|
|
144
|
+
fetchUserInfo?: boolean;
|
|
145
|
+
sessionCookieName?: string;
|
|
146
|
+
stateCookieName?: string;
|
|
147
|
+
cookieSecret: string;
|
|
148
|
+
cookieOptions?: Partial<CookieOptions>;
|
|
149
|
+
refreshToleranceSeconds?: number;
|
|
150
|
+
defaultLoginRedirect?: string;
|
|
151
|
+
defaultLogoutRedirect?: string;
|
|
152
|
+
backChannelLogoutStore?: OIDCBackChannelLogoutStore;
|
|
153
|
+
transformClaims?: (claims: OIDCUserClaims) => MaybePromise<OIDCUserClaims>;
|
|
154
|
+
transformUser?: (user: OIDCUserClaims | undefined, context: {
|
|
155
|
+
claims?: OIDCUserClaims;
|
|
156
|
+
}) => MaybePromise<OIDCUserClaims | undefined>;
|
|
157
|
+
transformSession?: (session: OIDCSession, context: {
|
|
158
|
+
event?: RequestEvent;
|
|
159
|
+
tokenResponse?: OIDCTokenResponse;
|
|
160
|
+
claims?: OIDCUserClaims;
|
|
161
|
+
user?: OIDCUserClaims;
|
|
162
|
+
isRefresh: boolean;
|
|
163
|
+
}) => MaybePromise<OIDCSession>;
|
|
164
|
+
endpoints?: Partial<OIDCDiscoveryDocument>;
|
|
165
|
+
};
|
|
166
|
+
export type OIDCLoginOptions = {
|
|
167
|
+
returnTo?: string;
|
|
168
|
+
prompt?: 'login' | 'consent' | 'none' | 'select_account';
|
|
169
|
+
scope?: string[];
|
|
170
|
+
extraParams?: Record<string, string>;
|
|
171
|
+
};
|
|
172
|
+
export type OIDCLogoutOptions = {
|
|
173
|
+
postLogoutRedirectUri?: string;
|
|
174
|
+
state?: string;
|
|
175
|
+
clearSessionOnly?: boolean;
|
|
176
|
+
};
|
|
177
|
+
export type OIDCCallbackResult = {
|
|
178
|
+
session: OIDCSession;
|
|
179
|
+
returnTo: string;
|
|
180
|
+
};
|
|
181
|
+
export type OIDCHandleLocals = {
|
|
182
|
+
isAuthenticated: boolean;
|
|
183
|
+
session: OIDCSession | null;
|
|
184
|
+
user?: OIDCUserClaims;
|
|
185
|
+
claims?: OIDCUserClaims;
|
|
186
|
+
requireAuth: () => void;
|
|
187
|
+
clearSession: () => void;
|
|
188
|
+
};
|
|
189
|
+
export type OIDCStateCookie = {
|
|
190
|
+
state: string;
|
|
191
|
+
nonce: string;
|
|
192
|
+
codeVerifier: string;
|
|
193
|
+
returnTo: string;
|
|
194
|
+
createdAt: number;
|
|
195
|
+
};
|
|
196
|
+
export type OIDCCallbackHandlerOptions = {
|
|
197
|
+
onsuccess?: (event: RequestEvent, result: OIDCCallbackResult) => MaybePromise<Response | void>;
|
|
198
|
+
onfailure?: (event: RequestEvent, err: unknown) => MaybePromise<Response | void>;
|
|
199
|
+
redirectTo?: string;
|
|
200
|
+
};
|
|
201
|
+
export type OIDCActionOptions = {
|
|
202
|
+
defaultReturnTo?: string;
|
|
203
|
+
defaultPostLogoutRedirectUri?: string;
|
|
204
|
+
};
|
|
205
|
+
export type OIDCClientAssertionOptions = {
|
|
206
|
+
tokenEndpoint: string;
|
|
207
|
+
clientId: string;
|
|
208
|
+
clientSecret?: string;
|
|
209
|
+
};
|
|
210
|
+
export type OIDCCookies = {
|
|
211
|
+
readSession(cookies: Cookies): OIDCSession | null;
|
|
212
|
+
writeSession(cookies: Cookies, session: OIDCSession): void;
|
|
213
|
+
clearSession(cookies: Cookies): void;
|
|
214
|
+
readState(cookies: Cookies): OIDCStateCookie | null;
|
|
215
|
+
writeState(cookies: Cookies, state: OIDCStateCookie): void;
|
|
216
|
+
clearState(cookies: Cookies): void;
|
|
217
|
+
};
|
|
218
|
+
export type OIDCInstance = {
|
|
219
|
+
handle: Handle;
|
|
220
|
+
getMetadata: () => Promise<OIDCDiscoveryDocument>;
|
|
221
|
+
getSession: (event: RequestEvent) => Promise<OIDCSession | null>;
|
|
222
|
+
getPublicSession: (event: RequestEvent) => Promise<OIDCPublicSession | null>;
|
|
223
|
+
getSessionManagementConfig: () => Promise<OIDCSessionManagementConfig>;
|
|
224
|
+
login: (event: RequestEvent, loginOptions?: OIDCLoginOptions) => Promise<never>;
|
|
225
|
+
logout: (event: RequestEvent, logoutOptions?: OIDCLogoutOptions) => Promise<never>;
|
|
226
|
+
handleCallback: (event: RequestEvent) => Promise<OIDCCallbackResult>;
|
|
227
|
+
handleBackChannelLogout: (event: RequestEvent) => Promise<Response>;
|
|
228
|
+
loginHandler: (defaults?: OIDCLoginOptions) => RequestHandler;
|
|
229
|
+
callbackHandler: (handlerOptions?: OIDCCallbackHandlerOptions) => RequestHandler;
|
|
230
|
+
logoutHandler: (defaults?: OIDCLogoutOptions) => RequestHandler;
|
|
231
|
+
backChannelLogoutHandler: () => RequestHandler;
|
|
232
|
+
createActions: (actionOptions?: OIDCActionOptions) => Readonly<{
|
|
233
|
+
login: Action;
|
|
234
|
+
logout: Action;
|
|
235
|
+
}>;
|
|
236
|
+
requireAuth: (event: RequestEvent, returnTo?: string) => OIDCSession;
|
|
237
|
+
clearSession: (cookies: Cookies) => void;
|
|
238
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type RequestEvent } from '@sveltejs/kit';
|
|
2
|
+
import type { CookieOptions, OIDCPublicSession, OIDCSession, OIDCUserClaims } from './types.js';
|
|
3
|
+
export declare function base64UrlEncode(value: string | Uint8Array): string;
|
|
4
|
+
export declare function createPKCEPair(length?: number): {
|
|
5
|
+
verifier: string;
|
|
6
|
+
challenge: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function normalizeIssuer(issuer: string): string;
|
|
9
|
+
export declare function normalizeScope(scope?: string[]): string[];
|
|
10
|
+
export declare function normalizeStringArray(value: unknown): string[];
|
|
11
|
+
export declare function collectGroups(...sources: Array<OIDCUserClaims | undefined>): string[];
|
|
12
|
+
export declare function createSignedValue(value: string, secret: string): string;
|
|
13
|
+
export declare function verifySignedValue(value: string, secret: string): string | null;
|
|
14
|
+
export declare function serializeSignedCookie(payload: unknown, secret: string): string;
|
|
15
|
+
export declare function parseSignedCookie<T>(value: string | undefined, secret: string): T | null;
|
|
16
|
+
export declare function buildCookieOptions(options?: Partial<CookieOptions>): CookieOptions;
|
|
17
|
+
export declare function parseProviderError(event: RequestEvent): null;
|
|
18
|
+
export declare function absoluteUrl(event: RequestEvent, pathOrUrl: string): string;
|
|
19
|
+
export declare function toPublicSession(session: OIDCSession | null): OIDCPublicSession | null;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { error } from '@sveltejs/kit';
|
|
2
|
+
import { createHash, createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
3
|
+
export function base64UrlEncode(value) {
|
|
4
|
+
const buffer = typeof value === 'string' ? Buffer.from(value, 'utf8') : Buffer.from(value);
|
|
5
|
+
return buffer.toString('base64url');
|
|
6
|
+
}
|
|
7
|
+
export function createPKCEPair(length = 64) {
|
|
8
|
+
const verifier = base64UrlEncode(randomBytes(length)).slice(0, length);
|
|
9
|
+
const challenge = createHash('sha256').update(verifier).digest('base64url');
|
|
10
|
+
return { verifier, challenge };
|
|
11
|
+
}
|
|
12
|
+
export function normalizeIssuer(issuer) {
|
|
13
|
+
return issuer.endsWith('/') ? issuer.slice(0, -1) : issuer;
|
|
14
|
+
}
|
|
15
|
+
export function normalizeScope(scope) {
|
|
16
|
+
return scope?.length ? [...new Set(scope)] : ['openid', 'profile', 'email'];
|
|
17
|
+
}
|
|
18
|
+
export function normalizeStringArray(value) {
|
|
19
|
+
if (!value)
|
|
20
|
+
return [];
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
return value.filter((item) => typeof item === 'string');
|
|
23
|
+
}
|
|
24
|
+
if (typeof value === 'string') {
|
|
25
|
+
return value.trim() ? [value] : [];
|
|
26
|
+
}
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
export function collectGroups(...sources) {
|
|
30
|
+
return [
|
|
31
|
+
...new Set(sources.flatMap((source) => normalizeStringArray(source?.groups).concat(normalizeStringArray(source?.roles))))
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
export function createSignedValue(value, secret) {
|
|
35
|
+
const mac = createHmac('sha256', secret).update(value).digest('base64url');
|
|
36
|
+
return `${value}.${mac}`;
|
|
37
|
+
}
|
|
38
|
+
export function verifySignedValue(value, secret) {
|
|
39
|
+
const lastDot = value.lastIndexOf('.');
|
|
40
|
+
if (lastDot === -1)
|
|
41
|
+
return null;
|
|
42
|
+
const payload = value.slice(0, lastDot);
|
|
43
|
+
const signature = value.slice(lastDot + 1);
|
|
44
|
+
const expected = createHmac('sha256', secret).update(payload).digest();
|
|
45
|
+
const actual = Buffer.from(signature, 'base64url');
|
|
46
|
+
if (expected.length !== actual.length || !timingSafeEqual(expected, actual)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return payload;
|
|
50
|
+
}
|
|
51
|
+
export function serializeSignedCookie(payload, secret) {
|
|
52
|
+
return createSignedValue(base64UrlEncode(JSON.stringify(payload)), secret);
|
|
53
|
+
}
|
|
54
|
+
export function parseSignedCookie(value, secret) {
|
|
55
|
+
if (!value)
|
|
56
|
+
return null;
|
|
57
|
+
const payload = verifySignedValue(value, secret);
|
|
58
|
+
if (!payload)
|
|
59
|
+
return null;
|
|
60
|
+
try {
|
|
61
|
+
return JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function buildCookieOptions(options) {
|
|
68
|
+
return {
|
|
69
|
+
httpOnly: true,
|
|
70
|
+
path: '/',
|
|
71
|
+
sameSite: 'lax',
|
|
72
|
+
secure: true,
|
|
73
|
+
...options
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function parseProviderError(event) {
|
|
77
|
+
const code = event.url.searchParams.get('error');
|
|
78
|
+
if (!code)
|
|
79
|
+
return null;
|
|
80
|
+
return error(400, {
|
|
81
|
+
message: event.url.searchParams.get('error_description') ?? code
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function absoluteUrl(event, pathOrUrl) {
|
|
85
|
+
if (/^https?:\/\//i.test(pathOrUrl))
|
|
86
|
+
return pathOrUrl;
|
|
87
|
+
return new URL(pathOrUrl, event.url).toString();
|
|
88
|
+
}
|
|
89
|
+
export function toPublicSession(session) {
|
|
90
|
+
if (!session)
|
|
91
|
+
return null;
|
|
92
|
+
return {
|
|
93
|
+
isAuthenticated: true,
|
|
94
|
+
user: session.user,
|
|
95
|
+
claims: session.claims,
|
|
96
|
+
groups: session.groups,
|
|
97
|
+
scope: session.tokens.scope,
|
|
98
|
+
expiresAt: session.tokens.expiresAt,
|
|
99
|
+
issuer: session.issuer,
|
|
100
|
+
sessionState: session.sessionState,
|
|
101
|
+
sid: session.sid,
|
|
102
|
+
sub: session.sub
|
|
103
|
+
};
|
|
104
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sourceregistry/sveltekit-oidc",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "OIDC authentication helpers for SvelteKit applications.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite dev",
|
|
8
|
+
"build": "vite build && npm run prepack",
|
|
9
|
+
"preview": "vite preview",
|
|
10
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
11
|
+
"prepack": "svelte-kit sync && svelte-package && publint",
|
|
12
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
13
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"docs:build": "typedoc --options typedoc.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"!dist/demo/**",
|
|
20
|
+
"!dist/**/*.test.*",
|
|
21
|
+
"!dist/**/*.spec.*"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": [
|
|
24
|
+
"**/*.css"
|
|
25
|
+
],
|
|
26
|
+
"author": "A.P.A. Slaa (a.p.a.slaa@projectsource.nl)",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/SourceRegistry/sveltekit-oidc/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://sourceregistry.github.io/sveltekit-oidc/",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/SourceRegistry/sveltekit-oidc.git"
|
|
37
|
+
},
|
|
38
|
+
"svelte": "./dist/index.js",
|
|
39
|
+
"types": "./dist/index.d.ts",
|
|
40
|
+
"type": "module",
|
|
41
|
+
"exports": {
|
|
42
|
+
".": {
|
|
43
|
+
"types": "./dist/index.d.ts",
|
|
44
|
+
"svelte": "./dist/index.js"
|
|
45
|
+
},
|
|
46
|
+
"./client": {
|
|
47
|
+
"types": "./dist/client/index.d.ts",
|
|
48
|
+
"svelte": "./dist/client/index.js"
|
|
49
|
+
},
|
|
50
|
+
"./server": {
|
|
51
|
+
"types": "./dist/server/index.d.ts",
|
|
52
|
+
"default": "./dist/server/index.js"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@sveltejs/kit": "^2.50.2",
|
|
57
|
+
"svelte": "^5.0.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@sveltejs/adapter-auto": "^7.0.0",
|
|
61
|
+
"@sveltejs/kit": "^2.50.2",
|
|
62
|
+
"@sveltejs/package": "^2.5.7",
|
|
63
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
64
|
+
"@types/node": "^25.5.2",
|
|
65
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
66
|
+
"@semantic-release/git": "^10.0.1",
|
|
67
|
+
"publint": "^0.3.17",
|
|
68
|
+
"svelte": "^5.54.0",
|
|
69
|
+
"svelte-check": "^4.4.2",
|
|
70
|
+
"typescript": "^5.9.3",
|
|
71
|
+
"vite": "^7.3.1",
|
|
72
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
73
|
+
"vitest": "^4.1.2",
|
|
74
|
+
"@sourceregistry/semantic-release-jsr": "^1.0.1",
|
|
75
|
+
"typedoc": "^0.28.18"
|
|
76
|
+
},
|
|
77
|
+
"keywords": [
|
|
78
|
+
"sveltekit",
|
|
79
|
+
"svelte",
|
|
80
|
+
"oidc",
|
|
81
|
+
"openid-connect",
|
|
82
|
+
"authentication",
|
|
83
|
+
"oauth"
|
|
84
|
+
],
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"@sourceregistry/node-jwt": "^1.5.9"
|
|
87
|
+
},
|
|
88
|
+
"release": {
|
|
89
|
+
"branches": [
|
|
90
|
+
"main"
|
|
91
|
+
],
|
|
92
|
+
"plugins": [
|
|
93
|
+
"@semantic-release/commit-analyzer",
|
|
94
|
+
"@semantic-release/release-notes-generator",
|
|
95
|
+
"@semantic-release/changelog",
|
|
96
|
+
"@semantic-release/npm",
|
|
97
|
+
"@sourceregistry/semantic-release-jsr",
|
|
98
|
+
[
|
|
99
|
+
"@semantic-release/git",
|
|
100
|
+
{
|
|
101
|
+
"assets": [
|
|
102
|
+
"package.json",
|
|
103
|
+
"package-lock.json",
|
|
104
|
+
"jsr.json",
|
|
105
|
+
"CHANGELOG.md"
|
|
106
|
+
],
|
|
107
|
+
"message": "sveltekit-oidc(release): v${nextRelease.version}\n\n${nextRelease.notes}"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
}
|