firebase-admin-edge 1.0.20 → 1.0.22
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/README.md +36 -46
- package/dist/auth/auth-endpoint-errors.test.d.ts +2 -0
- package/dist/auth/auth-endpoint-errors.test.d.ts.map +1 -0
- package/dist/auth/auth-endpoint-errors.test.js +403 -0
- package/dist/auth/auth-endpoint-errors.test.js.map +1 -0
- package/dist/auth/errors.test.d.ts +2 -0
- package/dist/auth/errors.test.d.ts.map +1 -0
- package/dist/auth/errors.test.js +123 -0
- package/dist/auth/errors.test.js.map +1 -0
- package/dist/auth/firebase-admin-auth.test.js +116 -0
- package/dist/auth/firebase-admin-auth.test.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.d.ts +42 -9
- package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
- package/dist/auth/firebase-auth-endpoints.js +93 -0
- package/dist/auth/firebase-auth-endpoints.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.test.js +330 -5
- package/dist/auth/firebase-auth-endpoints.test.js.map +1 -1
- package/dist/auth/firebase-auth.d.ts +10 -2
- package/dist/auth/firebase-auth.d.ts.map +1 -1
- package/dist/auth/firebase-auth.js +52 -7
- package/dist/auth/firebase-auth.js.map +1 -1
- package/dist/auth/firebase-auth.test.js +57 -4
- package/dist/auth/firebase-auth.test.js.map +1 -1
- package/dist/auth/firebase-types.d.ts +17 -0
- package/dist/auth/firebase-types.d.ts.map +1 -1
- package/dist/auth/google-oauth.test.js.map +1 -1
- package/dist/auth/oauth.d.ts +2 -2
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +43 -23
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/oauth.test.js +44 -172
- package/dist/auth/oauth.test.js.map +1 -1
- package/dist/firebase-edge-errors.d.ts +4 -0
- package/dist/firebase-edge-errors.d.ts.map +1 -1
- package/dist/firebase-edge-errors.js +4 -0
- package/dist/firebase-edge-errors.js.map +1 -1
- package/dist/firebase-edge-server.d.ts +15 -4
- package/dist/firebase-edge-server.d.ts.map +1 -1
- package/dist/firebase-edge-server.js +41 -19
- package/dist/firebase-edge-server.js.map +1 -1
- package/dist/firebase-edge-server.test.js +31 -18
- package/dist/firebase-edge-server.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-edge-errors.js","sourceRoot":"","sources":["../src/firebase-edge-errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACvC,gCAAgC;IAChC,4BAA4B,EAAE;QAC1B,OAAO,EAAE,8DAA8D;QACvE,IAAI,EAAE,8BAA8B;KACvC;IACD,mCAAmC,EAAE;QACjC,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,qCAAqC;KAC9C;IACD,mCAAmC,EAAE;QACjC,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,qCAAqC;KAC9C;IAED,oBAAoB;IACpB,yBAAyB,EAAE;QACvB,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,2BAA2B;KACpC;IACD,yBAAyB,EAAE;QACvB,OAAO,EAAE,2CAA2C;QACpD,IAAI,EAAE,2BAA2B;KACpC;IACD,mBAAmB,EAAE;QACjB,OAAO,EAAE,wCAAwC;QACjD,IAAI,EAAE,qBAAqB;KAC9B;IACD,qBAAqB,EAAE;QACnB,OAAO,EAAE,gDAAgD;QACzD,IAAI,EAAE,uBAAuB;KAChC;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,+CAA+C;QACxD,IAAI,EAAE,sBAAsB;KAC/B;IAED,2BAA2B;IAC3B,gBAAgB,EAAE;QACd,OAAO,EAAE,oCAAoC;QAC7C,IAAI,EAAE,kBAAkB;KAC3B;IACD,sBAAsB,EAAE;QACpB,OAAO,EAAE,iDAAiD;QAC1D,IAAI,EAAE,wBAAwB;KACjC;IACD,2BAA2B,EAAE;QACzB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,6BAA6B;KACtC;IACD,oCAAoC,EAAE;QAClC,OAAO,EAAE,iDAAiD;QAC1D,IAAI,EAAE,sCAAsC;KAC/C;IAED,4BAA4B;IAC5B,oBAAoB,EAAE;QAClB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,sBAAsB;KAC/B;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,sBAAsB;KAC/B;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,uCAAuC;QAChD,IAAI,EAAE,sBAAsB;KAC/B;IAED,uBAAuB;IACvB,4BAA4B,EAAE;QAC1B,OAAO,EAAE,4DAA4D;QACrE,IAAI,EAAE,8BAA8B;KACvC;IACD,4BAA4B,EAAE;QAC1B,OAAO,EAAE,qDAAqD;QAC9D,IAAI,EAAE,8BAA8B;KACvC;IACD,6BAA6B,EAAE;QAC3B,OAAO,EAAE,2DAA2D;QACpE,IAAI,EAAE,+BAA+B;KACxC;IAED,6BAA6B;IAC7B,wBAAwB,EAAE;QACtB,OAAO,EAAE,mDAAmD;QAC5D,IAAI,EAAE,0BAA0B;KACnC;IACD,8BAA8B,EAAE;QAC5B,OAAO,EAAE,uDAAuD;QAChE,IAAI,EAAE,gCAAgC;KACzC;IAED,6BAA6B;IAC7B,iCAAiC,EAAE;QAC/B,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,mCAAmC;KAC5C;IACD,qBAAqB,EAAE;QACnB,OAAO,EAAE,+BAA+B;QACxC,IAAI,EAAE,uBAAuB;KAChC;IACD,kBAAkB,EAAE;QAChB,OAAO,EAAE,oDAAoD;QAC7D,IAAI,EAAE,oBAAoB;KAC7B;CACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"firebase-edge-errors.js","sourceRoot":"","sources":["../src/firebase-edge-errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACvC,gCAAgC;IAChC,4BAA4B,EAAE;QAC1B,OAAO,EAAE,8DAA8D;QACvE,IAAI,EAAE,8BAA8B;KACvC;IACD,mCAAmC,EAAE;QACjC,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,qCAAqC;KAC9C;IACD,mCAAmC,EAAE;QACjC,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,qCAAqC;KAC9C;IAED,oBAAoB;IACpB,0BAA0B,EAAE;QACxB,OAAO,EAAE,mDAAmD;QAC5D,IAAI,EAAE,4BAA4B;KACrC;IACD,yBAAyB,EAAE;QACvB,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,2BAA2B;KACpC;IACD,yBAAyB,EAAE;QACvB,OAAO,EAAE,2CAA2C;QACpD,IAAI,EAAE,2BAA2B;KACpC;IACD,mBAAmB,EAAE;QACjB,OAAO,EAAE,wCAAwC;QACjD,IAAI,EAAE,qBAAqB;KAC9B;IACD,qBAAqB,EAAE;QACnB,OAAO,EAAE,gDAAgD;QACzD,IAAI,EAAE,uBAAuB;KAChC;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,+CAA+C;QACxD,IAAI,EAAE,sBAAsB;KAC/B;IAED,2BAA2B;IAC3B,gBAAgB,EAAE;QACd,OAAO,EAAE,oCAAoC;QAC7C,IAAI,EAAE,kBAAkB;KAC3B;IACD,sBAAsB,EAAE;QACpB,OAAO,EAAE,iDAAiD;QAC1D,IAAI,EAAE,wBAAwB;KACjC;IACD,2BAA2B,EAAE;QACzB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,6BAA6B;KACtC;IACD,oCAAoC,EAAE;QAClC,OAAO,EAAE,iDAAiD;QAC1D,IAAI,EAAE,sCAAsC;KAC/C;IAED,4BAA4B;IAC5B,oBAAoB,EAAE;QAClB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,sBAAsB;KAC/B;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,sBAAsB;KAC/B;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,uCAAuC;QAChD,IAAI,EAAE,sBAAsB;KAC/B;IAED,uBAAuB;IACvB,4BAA4B,EAAE;QAC1B,OAAO,EAAE,4DAA4D;QACrE,IAAI,EAAE,8BAA8B;KACvC;IACD,4BAA4B,EAAE;QAC1B,OAAO,EAAE,qDAAqD;QAC9D,IAAI,EAAE,8BAA8B;KACvC;IACD,6BAA6B,EAAE;QAC3B,OAAO,EAAE,2DAA2D;QACpE,IAAI,EAAE,+BAA+B;KACxC;IAED,6BAA6B;IAC7B,wBAAwB,EAAE;QACtB,OAAO,EAAE,mDAAmD;QAC5D,IAAI,EAAE,0BAA0B;KACnC;IACD,8BAA8B,EAAE;QAC5B,OAAO,EAAE,uDAAuD;QAChE,IAAI,EAAE,gCAAgC;KACzC;IAED,6BAA6B;IAC7B,iCAAiC,EAAE;QAC/B,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,mCAAmC;KAC5C;IACD,qBAAqB,EAAE;QACnB,OAAO,EAAE,+BAA+B;QACxC,IAAI,EAAE,uBAAuB;KAChC;IACD,kBAAkB,EAAE;QAChB,OAAO,EAAE,oDAAoD;QAC7D,IAAI,EAAE,oBAAoB;KAC7B;CACJ,CAAC"}
|
|
@@ -29,12 +29,14 @@ type CookieConfig = {
|
|
|
29
29
|
* @param config.fetch Optional custom fetch implementation
|
|
30
30
|
* @returns Object with authentication methods
|
|
31
31
|
*/
|
|
32
|
-
export declare function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, providers, cookies, tenantId, fetch }: {
|
|
32
|
+
export declare function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, providers, cookies, tenantId, redirectUri, autoLinkProviders, fetch }: {
|
|
33
33
|
serviceAccount: ServiceAccount;
|
|
34
34
|
firebaseConfig: FirebaseConfig;
|
|
35
35
|
providers: ProviderConfig;
|
|
36
36
|
cookies: CookieConfig;
|
|
37
|
+
redirectUri: string;
|
|
37
38
|
tenantId?: string;
|
|
39
|
+
autoLinkProviders?: boolean;
|
|
38
40
|
fetch?: typeof globalThis.fetch;
|
|
39
41
|
}): {
|
|
40
42
|
auth: FirebaseAuth;
|
|
@@ -50,11 +52,20 @@ export declare function createFirebaseEdgeServer({ serviceAccount, firebaseConfi
|
|
|
50
52
|
data: import("./auth/firebase-types.js").FirebaseIdTokenPayload;
|
|
51
53
|
error: null;
|
|
52
54
|
}>;
|
|
53
|
-
getGoogleLoginURL: (
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
getGoogleLoginURL: (next: string, options?: {
|
|
56
|
+
languageCode?: string;
|
|
57
|
+
customParameters?: Record<string, string>;
|
|
58
|
+
addScopes?: string[];
|
|
59
|
+
}) => Promise<string>;
|
|
60
|
+
getGitHubLoginURL: (next: string, options?: {
|
|
61
|
+
customParameters?: Record<string, string>;
|
|
62
|
+
addScopes?: string[];
|
|
63
|
+
}) => Promise<string>;
|
|
64
|
+
signInWithCallback: (url: URL) => Promise<{
|
|
56
65
|
error: FirebaseEdgeError;
|
|
66
|
+
data?: undefined;
|
|
57
67
|
} | {
|
|
68
|
+
data: string;
|
|
58
69
|
error: null;
|
|
59
70
|
}>;
|
|
60
71
|
getToken: () => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-edge-server.d.ts","sourceRoot":"","sources":["../src/firebase-edge-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,UAAU,EACV,UAAU,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD;;GAEG;AACH,eAAO,MAAM,iCAAiC,kGASpC,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,KAAK,cAAc,GAAG,OAAO,CACzB,MAAM,CACF,YAAY,EACZ;IACI,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB,CACJ,CACJ,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,cAAc,EACd,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,EACR,EAAE;IACC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACnC;;;;
|
|
1
|
+
{"version":3,"file":"firebase-edge-server.d.ts","sourceRoot":"","sources":["../src/firebase-edge-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,UAAU,EACV,UAAU,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD;;GAEG;AACH,eAAO,MAAM,iCAAiC,kGASpC,CAAC;AAEX,KAAK,YAAY,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,KAAK,cAAc,GAAG,OAAO,CACzB,MAAM,CACF,YAAY,EACZ;IACI,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB,CACJ,CACJ,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,cAAc,EACd,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,KAAK,EACR,EAAE;IACC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACnC;;;;6BA6CwC,OAAO;;;;;;;;;;8BAiDlC,MAAM,YACF;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;8BAkCK,MAAM,YACF;QACN,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;8BA2BkC,GAAG;;;;;;;;;;;;;;;;;EAmP7C"}
|
|
@@ -39,12 +39,12 @@ export const OFFICIAL_FIREBASE_OAUTH_PROVIDERS = [
|
|
|
39
39
|
* @param config.fetch Optional custom fetch implementation
|
|
40
40
|
* @returns Object with authentication methods
|
|
41
41
|
*/
|
|
42
|
-
export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, providers, cookies, tenantId, fetch }) {
|
|
42
|
+
export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, providers, cookies, tenantId, redirectUri, autoLinkProviders, fetch }) {
|
|
43
43
|
const sessionName = cookies.sessionName || DEFAULT_SESSION_NAME;
|
|
44
44
|
const getSession = cookies.getSession;
|
|
45
45
|
const saveSession = cookies.saveSession;
|
|
46
46
|
const fetchImpl = fetch ?? globalThis.fetch;
|
|
47
|
-
const auth = new FirebaseAuth(firebaseConfig, tenantId, fetchImpl);
|
|
47
|
+
const auth = new FirebaseAuth(firebaseConfig, redirectUri, tenantId, fetchImpl);
|
|
48
48
|
const adminAuth = new FirebaseAdminAuth(serviceAccount, tenantId, fetchImpl);
|
|
49
49
|
/**
|
|
50
50
|
* Clears the session cookie
|
|
@@ -101,45 +101,63 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
101
101
|
/**
|
|
102
102
|
* Generates a Google OAuth login URL and clears any existing session.
|
|
103
103
|
*
|
|
104
|
-
* @param
|
|
105
|
-
* @param
|
|
104
|
+
* @param next State parameter for the OAuth flow
|
|
105
|
+
* @param options Optional configuration object
|
|
106
|
+
* @param options.languageCode ISO 639-1 language code (e.g., 'en', 'es', 'fr')
|
|
107
|
+
* @param options.customParameters Custom OAuth parameters (e.g., { login_hint: 'user@example.com', hd: 'example.com' })
|
|
108
|
+
* @param options.addScopes Additional OAuth scopes (e.g., ['https://www.googleapis.com/auth/calendar.readonly'])
|
|
106
109
|
* @returns Google OAuth login URL
|
|
107
110
|
* @throws Error if Google provider not configured
|
|
108
111
|
*/
|
|
109
|
-
async function getGoogleLoginURL(
|
|
112
|
+
async function getGoogleLoginURL(next, options) {
|
|
110
113
|
deleteSession();
|
|
111
114
|
if (!providers.google) {
|
|
112
115
|
throw new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_GOOGLE_PROVIDER_NOT_CONFIGURED);
|
|
113
116
|
}
|
|
114
117
|
const { client_id } = providers.google;
|
|
115
|
-
return createGoogleOAuthLoginUrl(
|
|
118
|
+
return createGoogleOAuthLoginUrl(redirectUri, next, client_id, options?.languageCode, options?.customParameters, options?.addScopes);
|
|
116
119
|
}
|
|
117
120
|
/**
|
|
118
121
|
* Generates a GitHub OAuth login URL and clears any existing session.
|
|
122
|
+
* Note: GitHub doesn't support language parameters - language is determined by user's browser/account settings.
|
|
119
123
|
*
|
|
120
|
-
* @param
|
|
121
|
-
* @param
|
|
124
|
+
* @param next State parameter for the OAuth flow
|
|
125
|
+
* @param options Optional configuration object
|
|
126
|
+
* @param options.customParameters Custom OAuth parameters (e.g., { login: 'username', allow_signup: 'false' })
|
|
127
|
+
* @param options.addScopes Additional OAuth scopes (e.g., ['repo', 'gist'])
|
|
122
128
|
* @returns GitHub OAuth login URL
|
|
123
129
|
* @throws Error if GitHub provider not configured
|
|
124
130
|
*/
|
|
125
|
-
async function getGitHubLoginURL(
|
|
131
|
+
async function getGitHubLoginURL(next, options) {
|
|
126
132
|
deleteSession();
|
|
127
133
|
if (!providers.github) {
|
|
128
134
|
throw new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_GITHUB_PROVIDER_NOT_CONFIGURED);
|
|
129
135
|
}
|
|
130
136
|
const { client_id } = providers.github;
|
|
131
|
-
return createGitHubOAuthLoginUrl(
|
|
137
|
+
return createGitHubOAuthLoginUrl(redirectUri, next, client_id, options?.customParameters, options?.addScopes);
|
|
132
138
|
}
|
|
133
139
|
/**
|
|
134
140
|
* Completes OAuth flow by exchanging authorization code for a session.
|
|
135
141
|
*
|
|
136
|
-
* @param
|
|
137
|
-
* @param redirect_uri OAuth redirect URI (must match login URL)
|
|
138
|
-
* @param state OAuth state containing provider information
|
|
142
|
+
* @param url URL containing authorization code and state from OAuth callback
|
|
139
143
|
* @returns Promise with error information
|
|
140
144
|
*/
|
|
141
|
-
async function
|
|
142
|
-
const
|
|
145
|
+
async function signInWithCallback(url) {
|
|
146
|
+
const code = url.searchParams.get('code');
|
|
147
|
+
const state = url.searchParams.get('state');
|
|
148
|
+
if (!code) {
|
|
149
|
+
return {
|
|
150
|
+
error: new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_NO_AUTHORIZATION_CODE)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
let next = '/';
|
|
154
|
+
let provider = null;
|
|
155
|
+
try {
|
|
156
|
+
const parsed = state && JSON.parse(state);
|
|
157
|
+
next = parsed?.next ?? '/';
|
|
158
|
+
provider = parsed?.provider ?? null;
|
|
159
|
+
}
|
|
160
|
+
catch { }
|
|
143
161
|
if (!provider) {
|
|
144
162
|
return {
|
|
145
163
|
error: new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_NO_PROVIDER_IN_STATE)
|
|
@@ -148,7 +166,7 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
148
166
|
let oauthToken = null;
|
|
149
167
|
if (providers.google && provider === 'google') {
|
|
150
168
|
const { client_id, client_secret } = providers.google;
|
|
151
|
-
const { data: googleData, error: exchangeError } = await exchangeCodeForGoogleIdToken(code,
|
|
169
|
+
const { data: googleData, error: exchangeError } = await exchangeCodeForGoogleIdToken(code, redirectUri, client_id, client_secret, fetchImpl);
|
|
152
170
|
if (exchangeError) {
|
|
153
171
|
return {
|
|
154
172
|
error: exchangeError
|
|
@@ -163,7 +181,7 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
163
181
|
}
|
|
164
182
|
else if (providers.github && provider === 'github') {
|
|
165
183
|
const { client_id, client_secret } = providers.github;
|
|
166
|
-
const { data: githubData, error: exchangeError } = await exchangeCodeForGitHubIdToken(code,
|
|
184
|
+
const { data: githubData, error: exchangeError } = await exchangeCodeForGitHubIdToken(code, redirectUri, client_id, client_secret, fetchImpl);
|
|
167
185
|
if (exchangeError) {
|
|
168
186
|
return {
|
|
169
187
|
error: exchangeError
|
|
@@ -182,7 +200,7 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
182
200
|
};
|
|
183
201
|
}
|
|
184
202
|
const providerId = provider === 'google' ? 'google.com' : 'github.com';
|
|
185
|
-
const { data: signInData, error: signInError } = await auth.signInWithProvider(oauthToken,
|
|
203
|
+
const { data: signInData, error: signInError } = await auth.signInWithProvider(oauthToken, providerId);
|
|
186
204
|
if (signInError) {
|
|
187
205
|
return {
|
|
188
206
|
error: signInError
|
|
@@ -194,6 +212,9 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
194
212
|
};
|
|
195
213
|
}
|
|
196
214
|
if (signInData.needConfirmation) {
|
|
215
|
+
if (autoLinkProviders) {
|
|
216
|
+
// Implement auto-linking logic here
|
|
217
|
+
}
|
|
197
218
|
return {
|
|
198
219
|
error: new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_ACCOUNT_EXISTS_DIFFERENT_METHOD)
|
|
199
220
|
};
|
|
@@ -222,6 +243,7 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
222
243
|
}
|
|
223
244
|
saveSession(sessionName, sessionCookie, COOKIE_OPTIONS);
|
|
224
245
|
return {
|
|
246
|
+
data: next,
|
|
225
247
|
error: null
|
|
226
248
|
};
|
|
227
249
|
}
|
|
@@ -283,7 +305,7 @@ export function createFirebaseEdgeServer({ serviceAccount, firebaseConfig, provi
|
|
|
283
305
|
getUser,
|
|
284
306
|
getGoogleLoginURL,
|
|
285
307
|
getGitHubLoginURL,
|
|
286
|
-
|
|
308
|
+
signInWithCallback,
|
|
287
309
|
getToken
|
|
288
310
|
};
|
|
289
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-edge-server.js","sourceRoot":"","sources":["../src/firebase-edge-server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACH,yBAAyB,EACzB,yBAAyB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC,MAAM,cAAc,GAAG;IACnB,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;CACjB,CAAC;AAEnB;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC7C,QAAQ;IACR,UAAU;IACV,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;IACX,OAAO;IACP,WAAW;CACL,CAAC;AAoBX;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACrC,cAAc,EACd,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,
|
|
1
|
+
{"version":3,"file":"firebase-edge-server.js","sourceRoot":"","sources":["../src/firebase-edge-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,8 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
57
57
|
cookies: {
|
|
58
58
|
getSession: mockGetSession,
|
|
59
59
|
saveSession: mockSaveSession
|
|
60
|
-
}
|
|
60
|
+
},
|
|
61
|
+
redirectUri: 'http://localhost'
|
|
61
62
|
});
|
|
62
63
|
});
|
|
63
64
|
describe('factory function', () => {
|
|
@@ -68,7 +69,7 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
68
69
|
expect(server).toHaveProperty('getUser');
|
|
69
70
|
expect(server).toHaveProperty('getGoogleLoginURL');
|
|
70
71
|
expect(server).toHaveProperty('getGitHubLoginURL');
|
|
71
|
-
expect(server).toHaveProperty('
|
|
72
|
+
expect(server).toHaveProperty('signInWithCallback');
|
|
72
73
|
expect(server).toHaveProperty('getToken');
|
|
73
74
|
});
|
|
74
75
|
it('uses custom session name when provided', () => {
|
|
@@ -80,7 +81,8 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
80
81
|
getSession: mockGetSession,
|
|
81
82
|
saveSession: mockSaveSession,
|
|
82
83
|
sessionName: 'custom-session'
|
|
83
|
-
}
|
|
84
|
+
},
|
|
85
|
+
redirectUri: 'http://localhost'
|
|
84
86
|
});
|
|
85
87
|
customServer.signOut();
|
|
86
88
|
expect(mockSaveSession).toHaveBeenCalledWith('custom-session', '', expect.objectContaining({ maxAge: 0 }));
|
|
@@ -99,6 +101,7 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
99
101
|
getSession: mockGetSession,
|
|
100
102
|
saveSession: mockSaveSession
|
|
101
103
|
},
|
|
104
|
+
redirectUri: 'http://localhost',
|
|
102
105
|
fetch: mockFetch
|
|
103
106
|
});
|
|
104
107
|
expect(customServer).toBeDefined();
|
|
@@ -112,7 +115,8 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
112
115
|
getSession: mockGetSession,
|
|
113
116
|
saveSession: mockSaveSession
|
|
114
117
|
},
|
|
115
|
-
tenantId: 'test-tenant'
|
|
118
|
+
tenantId: 'test-tenant',
|
|
119
|
+
redirectUri: 'http://localhost'
|
|
116
120
|
});
|
|
117
121
|
expect(serverWithTenant).toBeDefined();
|
|
118
122
|
});
|
|
@@ -126,9 +130,10 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
126
130
|
getSession: mockGetSession,
|
|
127
131
|
saveSession: mockSaveSession
|
|
128
132
|
},
|
|
129
|
-
tenantId: 'test-tenant-id'
|
|
133
|
+
tenantId: 'test-tenant-id',
|
|
134
|
+
redirectUri: 'http://localhost'
|
|
130
135
|
});
|
|
131
|
-
expect(vi.mocked(FirebaseAuth)).toHaveBeenCalledWith(mockFirebaseConfig, 'test-tenant-id', globalThis.fetch);
|
|
136
|
+
expect(vi.mocked(FirebaseAuth)).toHaveBeenCalledWith(mockFirebaseConfig, 'http://localhost', 'test-tenant-id', globalThis.fetch);
|
|
132
137
|
expect(vi.mocked(FirebaseAdminAuth)).toHaveBeenCalledWith(mockServiceAccount, 'test-tenant-id', globalThis.fetch);
|
|
133
138
|
});
|
|
134
139
|
it('passes undefined tenant ID when not provided', () => {
|
|
@@ -140,9 +145,10 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
140
145
|
cookies: {
|
|
141
146
|
getSession: mockGetSession,
|
|
142
147
|
saveSession: mockSaveSession
|
|
143
|
-
}
|
|
148
|
+
},
|
|
149
|
+
redirectUri: 'http://localhost'
|
|
144
150
|
});
|
|
145
|
-
expect(vi.mocked(FirebaseAuth)).toHaveBeenCalledWith(mockFirebaseConfig, undefined, globalThis.fetch);
|
|
151
|
+
expect(vi.mocked(FirebaseAuth)).toHaveBeenCalledWith(mockFirebaseConfig, 'http://localhost', undefined, globalThis.fetch);
|
|
146
152
|
expect(vi.mocked(FirebaseAdminAuth)).toHaveBeenCalledWith(mockServiceAccount, undefined, globalThis.fetch);
|
|
147
153
|
});
|
|
148
154
|
});
|
|
@@ -178,14 +184,15 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
178
184
|
cookies: {
|
|
179
185
|
getSession: mockGetSession,
|
|
180
186
|
saveSession: mockSaveSession
|
|
181
|
-
}
|
|
187
|
+
},
|
|
188
|
+
redirectUri: 'http://localhost'
|
|
182
189
|
});
|
|
183
|
-
await expect(serverWithoutGoogle.getGoogleLoginURL('
|
|
190
|
+
await expect(serverWithoutGoogle.getGoogleLoginURL('/dashboard')).rejects.toThrow(new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_GOOGLE_PROVIDER_NOT_CONFIGURED));
|
|
184
191
|
});
|
|
185
192
|
it('calls deleteSession before generating URL', async () => {
|
|
186
193
|
const { createGoogleOAuthLoginUrl } = await import('./auth/oauth.js');
|
|
187
194
|
vi.mocked(createGoogleOAuthLoginUrl).mockReturnValue('http://oauth-url');
|
|
188
|
-
await server.getGoogleLoginURL('
|
|
195
|
+
await server.getGoogleLoginURL('/dashboard');
|
|
189
196
|
expect(mockSaveSession).toHaveBeenCalledWith('__session', '', expect.objectContaining({ maxAge: 0 }));
|
|
190
197
|
});
|
|
191
198
|
});
|
|
@@ -198,20 +205,22 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
198
205
|
cookies: {
|
|
199
206
|
getSession: mockGetSession,
|
|
200
207
|
saveSession: mockSaveSession
|
|
201
|
-
}
|
|
208
|
+
},
|
|
209
|
+
redirectUri: 'http://localhost'
|
|
202
210
|
});
|
|
203
|
-
await expect(serverWithoutGitHub.getGitHubLoginURL('
|
|
211
|
+
await expect(serverWithoutGitHub.getGitHubLoginURL('/dashboard')).rejects.toThrow(new FirebaseEdgeError(FirebaseEdgeServerErrorInfo.EDGE_GITHUB_PROVIDER_NOT_CONFIGURED));
|
|
204
212
|
});
|
|
205
213
|
it('calls deleteSession before generating URL', async () => {
|
|
206
214
|
const { createGitHubOAuthLoginUrl } = await import('./auth/oauth.js');
|
|
207
215
|
vi.mocked(createGitHubOAuthLoginUrl).mockReturnValue('http://github-oauth-url');
|
|
208
|
-
await server.getGitHubLoginURL('
|
|
216
|
+
await server.getGitHubLoginURL('/dashboard');
|
|
209
217
|
expect(mockSaveSession).toHaveBeenCalledWith('__session', '', expect.objectContaining({ maxAge: 0 }));
|
|
210
218
|
});
|
|
211
219
|
});
|
|
212
|
-
describe('
|
|
220
|
+
describe('signInWithCallback', () => {
|
|
213
221
|
it('returns error when no provider specified in state', async () => {
|
|
214
|
-
const
|
|
222
|
+
const url = new URL('http://localhost/callback?code=auth-code');
|
|
223
|
+
const result = await server.signInWithCallback(url);
|
|
215
224
|
expect(result).toEqual({
|
|
216
225
|
error: expect.any(FirebaseEdgeError)
|
|
217
226
|
});
|
|
@@ -219,8 +228,12 @@ describe('createFirebaseEdgeServer', () => {
|
|
|
219
228
|
expect(result.error.code).toBe(FirebaseEdgeServerErrorInfo.EDGE_NO_PROVIDER_IN_STATE.code);
|
|
220
229
|
});
|
|
221
230
|
it('handles invalid JSON state gracefully', async () => {
|
|
222
|
-
|
|
223
|
-
await
|
|
231
|
+
const url = new URL('http://localhost/callback?code=auth-code&state=invalid-json');
|
|
232
|
+
const result = await server.signInWithCallback(url);
|
|
233
|
+
expect(result).toEqual({
|
|
234
|
+
error: expect.any(FirebaseEdgeError)
|
|
235
|
+
});
|
|
236
|
+
expect(result.error).toBeInstanceOf(FirebaseEdgeError);
|
|
224
237
|
});
|
|
225
238
|
});
|
|
226
239
|
describe('getToken', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-edge-server.test.js","sourceRoot":"","sources":["../src/firebase-edge-server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAa,MAAM,QAAQ,CAAC;AACzE,OAAO,EACH,wBAAwB,EACxB,iCAAiC,EACpC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,oBAAoB;AACpB,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AACzC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACnC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC3B,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAElC,wDAAwD;AACxD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC5E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAEjE,MAAM,kBAAkB,GAAmB;IACvC,IAAI,EAAE,iBAAiB;IACvB,UAAU,EAAE,cAAc;IAC1B,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,2CAA2C;IACzD,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,2CAA2C;IACrD,SAAS,EAAE,qCAAqC;IAChD,2BAA2B,EAAE,4CAA4C;IACzE,oBAAoB,EAChB,+FAA+F;CACtG,CAAC;AAEF,MAAM,kBAAkB,GAAmB;IACvC,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,8BAA8B;IAC1C,SAAS,EAAE,cAAc;IACzB,aAAa,EAAE,0BAA0B;IACzC,iBAAiB,EAAE,WAAW;IAC9B,KAAK,EAAE,aAAa;CACvB,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,MAAM,EAAE;QACJ,SAAS,EAAE,kBAAkB;QAC7B,aAAa,EAAE,sBAAsB;KACxC;IACD,MAAM,EAAE;QACJ,SAAS,EAAE,kBAAkB;QAC7B,aAAa,EAAE,sBAAsB;KACxC;CACJ,CAAC;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,IAAI,cAAoB,CAAC;IACzB,IAAI,eAAqB,CAAC;IAC1B,IAAI,MAAmD,CAAC;IAExD,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAE1B,MAAM,GAAG,wBAAwB,CAAC;YAC9B,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,kBAAkB;YAClC,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE;gBACL,UAAU,EAAE,cAAc;gBAC1B,WAAW,EAAE,eAAe;aAC/B;
|
|
1
|
+
{"version":3,"file":"firebase-edge-server.test.js","sourceRoot":"","sources":["../src/firebase-edge-server.test.ts"],"names":[],"mappings":"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"}
|