@replyke/react-js 7.0.0-beta.88 → 7.0.0-beta.89
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/dist/cjs/hooks/useOAuthSignIn.d.ts +27 -0
- package/dist/cjs/hooks/useOAuthSignIn.js +152 -0
- package/dist/cjs/hooks/useOAuthSignIn.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/hooks/useOAuthSignIn.d.ts +27 -0
- package/dist/esm/hooks/useOAuthSignIn.js +150 -0
- package/dist/esm/hooks/useOAuthSignIn.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface UseOAuthSignInReturn {
|
|
2
|
+
/** Initiate OAuth sign-in / sign-up (unauthenticated). */
|
|
3
|
+
initiateOAuth: (provider: string, redirectAfterAuth?: string) => Promise<void>;
|
|
4
|
+
/** Link a new OAuth provider to the current authenticated user. */
|
|
5
|
+
linkOAuthProvider: (provider: string, redirectAfterAuth?: string) => Promise<void>;
|
|
6
|
+
/** Call on the callback page to extract tokens from the URL fragment. */
|
|
7
|
+
handleOAuthCallback: () => boolean;
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
error: string | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Web-only hook for OAuth sign-in and identity linking.
|
|
13
|
+
* Uses window.location for redirect-based OAuth flow.
|
|
14
|
+
*
|
|
15
|
+
* Usage (sign-in):
|
|
16
|
+
* const { initiateOAuth, handleOAuthCallback } = useOAuthSignIn();
|
|
17
|
+
* await initiateOAuth("google", "https://myapp.com/auth/callback");
|
|
18
|
+
*
|
|
19
|
+
* Usage (link provider to current user):
|
|
20
|
+
* const { linkOAuthProvider, handleOAuthCallback } = useOAuthSignIn();
|
|
21
|
+
* await linkOAuthProvider("github", "https://myapp.com/settings");
|
|
22
|
+
*
|
|
23
|
+
* On the callback page (component mount):
|
|
24
|
+
* useEffect(() => { handleOAuthCallback(); }, []);
|
|
25
|
+
*/
|
|
26
|
+
declare function useOAuthSignIn(): UseOAuthSignInReturn;
|
|
27
|
+
export default useOAuthSignIn;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var react_1 = require("react");
|
|
40
|
+
var core_1 = require("@replyke/core");
|
|
41
|
+
var BASE_URL = "https://api.replyke.com/v7";
|
|
42
|
+
/**
|
|
43
|
+
* Web-only hook for OAuth sign-in and identity linking.
|
|
44
|
+
* Uses window.location for redirect-based OAuth flow.
|
|
45
|
+
*
|
|
46
|
+
* Usage (sign-in):
|
|
47
|
+
* const { initiateOAuth, handleOAuthCallback } = useOAuthSignIn();
|
|
48
|
+
* await initiateOAuth("google", "https://myapp.com/auth/callback");
|
|
49
|
+
*
|
|
50
|
+
* Usage (link provider to current user):
|
|
51
|
+
* const { linkOAuthProvider, handleOAuthCallback } = useOAuthSignIn();
|
|
52
|
+
* await linkOAuthProvider("github", "https://myapp.com/settings");
|
|
53
|
+
*
|
|
54
|
+
* On the callback page (component mount):
|
|
55
|
+
* useEffect(() => { handleOAuthCallback(); }, []);
|
|
56
|
+
*/
|
|
57
|
+
function useOAuthSignIn() {
|
|
58
|
+
var _this = this;
|
|
59
|
+
var projectId = (0, core_1.useProject)().projectId;
|
|
60
|
+
var dispatch = (0, core_1.useReplykeDispatch)();
|
|
61
|
+
var accessToken = (0, core_1.useReplykeSelector)(core_1.selectAccessToken);
|
|
62
|
+
var _a = (0, react_1.useState)(false), isLoading = _a[0], setIsLoading = _a[1];
|
|
63
|
+
var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1];
|
|
64
|
+
// Shared helper for both /authorize and /link endpoints
|
|
65
|
+
var startOAuthFlow = (0, react_1.useCallback)(function (endpoint, provider, redirectAfterAuth) { return __awaiter(_this, void 0, void 0, function () {
|
|
66
|
+
var redirect, headers, response, data_1, data, err_1;
|
|
67
|
+
return __generator(this, function (_a) {
|
|
68
|
+
switch (_a.label) {
|
|
69
|
+
case 0:
|
|
70
|
+
if (!projectId) {
|
|
71
|
+
setError("No projectId available.");
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
if (endpoint === "link" && !accessToken) {
|
|
75
|
+
setError("Must be authenticated to link an OAuth provider.");
|
|
76
|
+
return [2 /*return*/];
|
|
77
|
+
}
|
|
78
|
+
setIsLoading(true);
|
|
79
|
+
setError(null);
|
|
80
|
+
_a.label = 1;
|
|
81
|
+
case 1:
|
|
82
|
+
_a.trys.push([1, 6, , 7]);
|
|
83
|
+
redirect = redirectAfterAuth || window.location.href;
|
|
84
|
+
headers = {
|
|
85
|
+
"Content-Type": "application/json",
|
|
86
|
+
};
|
|
87
|
+
if (endpoint === "link") {
|
|
88
|
+
headers["Authorization"] = "Bearer ".concat(accessToken);
|
|
89
|
+
}
|
|
90
|
+
return [4 /*yield*/, fetch("".concat(BASE_URL, "/").concat(projectId, "/oauth/").concat(endpoint), {
|
|
91
|
+
method: "POST",
|
|
92
|
+
headers: headers,
|
|
93
|
+
body: JSON.stringify({ provider: provider, redirectAfterAuth: redirect }),
|
|
94
|
+
})];
|
|
95
|
+
case 2:
|
|
96
|
+
response = _a.sent();
|
|
97
|
+
if (!!response.ok) return [3 /*break*/, 4];
|
|
98
|
+
return [4 /*yield*/, response.json()];
|
|
99
|
+
case 3:
|
|
100
|
+
data_1 = _a.sent();
|
|
101
|
+
throw new Error(data_1.error || "Failed to initiate OAuth");
|
|
102
|
+
case 4: return [4 /*yield*/, response.json()];
|
|
103
|
+
case 5:
|
|
104
|
+
data = _a.sent();
|
|
105
|
+
// Redirect browser to provider's authorization page.
|
|
106
|
+
// isLoading intentionally stays true since we're navigating away.
|
|
107
|
+
window.location.href = data.authorizationUrl;
|
|
108
|
+
return [3 /*break*/, 7];
|
|
109
|
+
case 6:
|
|
110
|
+
err_1 = _a.sent();
|
|
111
|
+
setError(err_1.message);
|
|
112
|
+
setIsLoading(false);
|
|
113
|
+
return [3 /*break*/, 7];
|
|
114
|
+
case 7: return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}); }, [projectId, accessToken]);
|
|
118
|
+
var initiateOAuth = (0, react_1.useCallback)(function (provider, redirectAfterAuth) {
|
|
119
|
+
return startOAuthFlow("authorize", provider, redirectAfterAuth);
|
|
120
|
+
}, [startOAuthFlow]);
|
|
121
|
+
var linkOAuthProvider = (0, react_1.useCallback)(function (provider, redirectAfterAuth) {
|
|
122
|
+
return startOAuthFlow("link", provider, redirectAfterAuth);
|
|
123
|
+
}, [startOAuthFlow]);
|
|
124
|
+
var handleOAuthCallback = (0, react_1.useCallback)(function () {
|
|
125
|
+
// Tokens arrive in the URL fragment (#accessToken=...&refreshToken=...)
|
|
126
|
+
// Errors arrive in query params (?error=...&error_description=...)
|
|
127
|
+
var hash = window.location.hash.substring(1); // Remove leading #
|
|
128
|
+
var fragmentParams = new URLSearchParams(hash);
|
|
129
|
+
var queryParams = new URLSearchParams(window.location.search);
|
|
130
|
+
var fragmentAccessToken = fragmentParams.get("accessToken");
|
|
131
|
+
var refreshToken = fragmentParams.get("refreshToken");
|
|
132
|
+
var oauthError = queryParams.get("error");
|
|
133
|
+
if (oauthError) {
|
|
134
|
+
setError(queryParams.get("error_description") || oauthError);
|
|
135
|
+
// Clean URL
|
|
136
|
+
window.history.replaceState({}, "", window.location.pathname);
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
if (fragmentAccessToken && refreshToken) {
|
|
140
|
+
// Store tokens in Redux. The AccountManager (via useAccountSync)
|
|
141
|
+
// will detect the new tokens and persist them to localStorage.
|
|
142
|
+
dispatch((0, core_1.setTokens)({ accessToken: fragmentAccessToken, refreshToken: refreshToken }));
|
|
143
|
+
// Clean URL (remove fragment with tokens)
|
|
144
|
+
window.history.replaceState({}, "", window.location.pathname);
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}, [dispatch]);
|
|
149
|
+
return { initiateOAuth: initiateOAuth, linkOAuthProvider: linkOAuthProvider, handleOAuthCallback: handleOAuthCallback, isLoading: isLoading, error: error };
|
|
150
|
+
}
|
|
151
|
+
exports.default = useOAuthSignIn;
|
|
152
|
+
//# sourceMappingURL=useOAuthSignIn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOAuthSignIn.js","sourceRoot":"","sources":["../../../src/hooks/useOAuthSignIn.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export * from "@replyke/core";
|
|
3
|
+
export { default as useOAuthSignIn, type UseOAuthSignInReturn } from "./hooks/useOAuthSignIn";
|
|
3
4
|
export declare const ReplykeProvider: React.FC<{
|
|
4
5
|
projectId: string;
|
|
5
6
|
signedToken?: string | null | undefined;
|
package/dist/cjs/index.js
CHANGED
|
@@ -17,12 +17,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.ReplykeProvider = void 0;
|
|
20
|
+
exports.ReplykeProvider = exports.useOAuthSignIn = void 0;
|
|
21
21
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
22
22
|
var core_1 = require("@replyke/core");
|
|
23
23
|
var AccountManager_1 = __importDefault(require("./AccountManager"));
|
|
24
24
|
// Re-export all exports from @replyke/core
|
|
25
25
|
__exportStar(require("@replyke/core"), exports);
|
|
26
|
+
// Web-only OAuth hook (uses window.location for redirect-based flow)
|
|
27
|
+
var useOAuthSignIn_1 = require("./hooks/useOAuthSignIn");
|
|
28
|
+
Object.defineProperty(exports, "useOAuthSignIn", { enumerable: true, get: function () { return __importDefault(useOAuthSignIn_1).default; } });
|
|
26
29
|
// Override ReplykeProvider to inject AccountManager
|
|
27
30
|
var ReplykeProvider = function (_a) {
|
|
28
31
|
var projectId = _a.projectId, signedToken = _a.signedToken, children = _a.children;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,sCAAuE;AACvE,oEAA8C;AAE9C,2CAA2C;AAC3C,gDAA8B;AAE9B,oDAAoD;AAC7C,IAAM,eAAe,GAIvB,UAAC,EAAoC;QAAlC,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACtC,OAAO,CACL,uBAAC,sBAAmB,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YACjE,6DACE,uBAAC,wBAAc,KAAG,EACjB,QAAQ,IACR,GACiB,CACvB,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,sCAAuE;AACvE,oEAA8C;AAE9C,2CAA2C;AAC3C,gDAA8B;AAE9B,qEAAqE;AACrE,yDAA8F;AAArF,iIAAA,OAAO,OAAkB;AAElC,oDAAoD;AAC7C,IAAM,eAAe,GAIvB,UAAC,EAAoC;QAAlC,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACtC,OAAO,CACL,uBAAC,sBAAmB,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YACjE,6DACE,uBAAC,wBAAc,KAAG,EACjB,QAAQ,IACR,GACiB,CACvB,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface UseOAuthSignInReturn {
|
|
2
|
+
/** Initiate OAuth sign-in / sign-up (unauthenticated). */
|
|
3
|
+
initiateOAuth: (provider: string, redirectAfterAuth?: string) => Promise<void>;
|
|
4
|
+
/** Link a new OAuth provider to the current authenticated user. */
|
|
5
|
+
linkOAuthProvider: (provider: string, redirectAfterAuth?: string) => Promise<void>;
|
|
6
|
+
/** Call on the callback page to extract tokens from the URL fragment. */
|
|
7
|
+
handleOAuthCallback: () => boolean;
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
error: string | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Web-only hook for OAuth sign-in and identity linking.
|
|
13
|
+
* Uses window.location for redirect-based OAuth flow.
|
|
14
|
+
*
|
|
15
|
+
* Usage (sign-in):
|
|
16
|
+
* const { initiateOAuth, handleOAuthCallback } = useOAuthSignIn();
|
|
17
|
+
* await initiateOAuth("google", "https://myapp.com/auth/callback");
|
|
18
|
+
*
|
|
19
|
+
* Usage (link provider to current user):
|
|
20
|
+
* const { linkOAuthProvider, handleOAuthCallback } = useOAuthSignIn();
|
|
21
|
+
* await linkOAuthProvider("github", "https://myapp.com/settings");
|
|
22
|
+
*
|
|
23
|
+
* On the callback page (component mount):
|
|
24
|
+
* useEffect(() => { handleOAuthCallback(); }, []);
|
|
25
|
+
*/
|
|
26
|
+
declare function useOAuthSignIn(): UseOAuthSignInReturn;
|
|
27
|
+
export default useOAuthSignIn;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { useCallback, useState } from "react";
|
|
38
|
+
import { useProject, useReplykeDispatch, useReplykeSelector, setTokens, selectAccessToken, } from "@replyke/core";
|
|
39
|
+
var BASE_URL = "https://api.replyke.com/v7";
|
|
40
|
+
/**
|
|
41
|
+
* Web-only hook for OAuth sign-in and identity linking.
|
|
42
|
+
* Uses window.location for redirect-based OAuth flow.
|
|
43
|
+
*
|
|
44
|
+
* Usage (sign-in):
|
|
45
|
+
* const { initiateOAuth, handleOAuthCallback } = useOAuthSignIn();
|
|
46
|
+
* await initiateOAuth("google", "https://myapp.com/auth/callback");
|
|
47
|
+
*
|
|
48
|
+
* Usage (link provider to current user):
|
|
49
|
+
* const { linkOAuthProvider, handleOAuthCallback } = useOAuthSignIn();
|
|
50
|
+
* await linkOAuthProvider("github", "https://myapp.com/settings");
|
|
51
|
+
*
|
|
52
|
+
* On the callback page (component mount):
|
|
53
|
+
* useEffect(() => { handleOAuthCallback(); }, []);
|
|
54
|
+
*/
|
|
55
|
+
function useOAuthSignIn() {
|
|
56
|
+
var _this = this;
|
|
57
|
+
var projectId = useProject().projectId;
|
|
58
|
+
var dispatch = useReplykeDispatch();
|
|
59
|
+
var accessToken = useReplykeSelector(selectAccessToken);
|
|
60
|
+
var _a = useState(false), isLoading = _a[0], setIsLoading = _a[1];
|
|
61
|
+
var _b = useState(null), error = _b[0], setError = _b[1];
|
|
62
|
+
// Shared helper for both /authorize and /link endpoints
|
|
63
|
+
var startOAuthFlow = useCallback(function (endpoint, provider, redirectAfterAuth) { return __awaiter(_this, void 0, void 0, function () {
|
|
64
|
+
var redirect, headers, response, data_1, data, err_1;
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
if (!projectId) {
|
|
69
|
+
setError("No projectId available.");
|
|
70
|
+
return [2 /*return*/];
|
|
71
|
+
}
|
|
72
|
+
if (endpoint === "link" && !accessToken) {
|
|
73
|
+
setError("Must be authenticated to link an OAuth provider.");
|
|
74
|
+
return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
setIsLoading(true);
|
|
77
|
+
setError(null);
|
|
78
|
+
_a.label = 1;
|
|
79
|
+
case 1:
|
|
80
|
+
_a.trys.push([1, 6, , 7]);
|
|
81
|
+
redirect = redirectAfterAuth || window.location.href;
|
|
82
|
+
headers = {
|
|
83
|
+
"Content-Type": "application/json",
|
|
84
|
+
};
|
|
85
|
+
if (endpoint === "link") {
|
|
86
|
+
headers["Authorization"] = "Bearer ".concat(accessToken);
|
|
87
|
+
}
|
|
88
|
+
return [4 /*yield*/, fetch("".concat(BASE_URL, "/").concat(projectId, "/oauth/").concat(endpoint), {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: headers,
|
|
91
|
+
body: JSON.stringify({ provider: provider, redirectAfterAuth: redirect }),
|
|
92
|
+
})];
|
|
93
|
+
case 2:
|
|
94
|
+
response = _a.sent();
|
|
95
|
+
if (!!response.ok) return [3 /*break*/, 4];
|
|
96
|
+
return [4 /*yield*/, response.json()];
|
|
97
|
+
case 3:
|
|
98
|
+
data_1 = _a.sent();
|
|
99
|
+
throw new Error(data_1.error || "Failed to initiate OAuth");
|
|
100
|
+
case 4: return [4 /*yield*/, response.json()];
|
|
101
|
+
case 5:
|
|
102
|
+
data = _a.sent();
|
|
103
|
+
// Redirect browser to provider's authorization page.
|
|
104
|
+
// isLoading intentionally stays true since we're navigating away.
|
|
105
|
+
window.location.href = data.authorizationUrl;
|
|
106
|
+
return [3 /*break*/, 7];
|
|
107
|
+
case 6:
|
|
108
|
+
err_1 = _a.sent();
|
|
109
|
+
setError(err_1.message);
|
|
110
|
+
setIsLoading(false);
|
|
111
|
+
return [3 /*break*/, 7];
|
|
112
|
+
case 7: return [2 /*return*/];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}); }, [projectId, accessToken]);
|
|
116
|
+
var initiateOAuth = useCallback(function (provider, redirectAfterAuth) {
|
|
117
|
+
return startOAuthFlow("authorize", provider, redirectAfterAuth);
|
|
118
|
+
}, [startOAuthFlow]);
|
|
119
|
+
var linkOAuthProvider = useCallback(function (provider, redirectAfterAuth) {
|
|
120
|
+
return startOAuthFlow("link", provider, redirectAfterAuth);
|
|
121
|
+
}, [startOAuthFlow]);
|
|
122
|
+
var handleOAuthCallback = useCallback(function () {
|
|
123
|
+
// Tokens arrive in the URL fragment (#accessToken=...&refreshToken=...)
|
|
124
|
+
// Errors arrive in query params (?error=...&error_description=...)
|
|
125
|
+
var hash = window.location.hash.substring(1); // Remove leading #
|
|
126
|
+
var fragmentParams = new URLSearchParams(hash);
|
|
127
|
+
var queryParams = new URLSearchParams(window.location.search);
|
|
128
|
+
var fragmentAccessToken = fragmentParams.get("accessToken");
|
|
129
|
+
var refreshToken = fragmentParams.get("refreshToken");
|
|
130
|
+
var oauthError = queryParams.get("error");
|
|
131
|
+
if (oauthError) {
|
|
132
|
+
setError(queryParams.get("error_description") || oauthError);
|
|
133
|
+
// Clean URL
|
|
134
|
+
window.history.replaceState({}, "", window.location.pathname);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (fragmentAccessToken && refreshToken) {
|
|
138
|
+
// Store tokens in Redux. The AccountManager (via useAccountSync)
|
|
139
|
+
// will detect the new tokens and persist them to localStorage.
|
|
140
|
+
dispatch(setTokens({ accessToken: fragmentAccessToken, refreshToken: refreshToken }));
|
|
141
|
+
// Clean URL (remove fragment with tokens)
|
|
142
|
+
window.history.replaceState({}, "", window.location.pathname);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}, [dispatch]);
|
|
147
|
+
return { initiateOAuth: initiateOAuth, linkOAuthProvider: linkOAuthProvider, handleOAuthCallback: handleOAuthCallback, isLoading: isLoading, error: error };
|
|
148
|
+
}
|
|
149
|
+
export default useOAuthSignIn;
|
|
150
|
+
//# sourceMappingURL=useOAuthSignIn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOAuthSignIn.js","sourceRoot":"","sources":["../../../src/hooks/useOAuthSignIn.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export * from "@replyke/core";
|
|
3
|
+
export { default as useOAuthSignIn, type UseOAuthSignInReturn } from "./hooks/useOAuthSignIn";
|
|
3
4
|
export declare const ReplykeProvider: React.FC<{
|
|
4
5
|
projectId: string;
|
|
5
6
|
signedToken?: string | null | undefined;
|
package/dist/esm/index.js
CHANGED
|
@@ -3,6 +3,8 @@ import { ReplykeProvider as CoreReplykeProvider } from "@replyke/core";
|
|
|
3
3
|
import AccountManager from "./AccountManager";
|
|
4
4
|
// Re-export all exports from @replyke/core
|
|
5
5
|
export * from "@replyke/core";
|
|
6
|
+
// Web-only OAuth hook (uses window.location for redirect-based flow)
|
|
7
|
+
export { default as useOAuthSignIn } from "./hooks/useOAuthSignIn";
|
|
6
8
|
// Override ReplykeProvider to inject AccountManager
|
|
7
9
|
export var ReplykeProvider = function (_a) {
|
|
8
10
|
var projectId = _a.projectId, signedToken = _a.signedToken, children = _a.children;
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,2CAA2C;AAC3C,cAAc,eAAe,CAAC;AAE9B,oDAAoD;AACpD,MAAM,CAAC,IAAM,eAAe,GAIvB,UAAC,EAAoC;QAAlC,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACtC,OAAO,CACL,KAAC,mBAAmB,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YACjE,8BACE,KAAC,cAAc,KAAG,EACjB,QAAQ,IACR,GACiB,CACvB,CAAC;AACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,2CAA2C;AAC3C,cAAc,eAAe,CAAC;AAE9B,qEAAqE;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAA6B,MAAM,wBAAwB,CAAC;AAE9F,oDAAoD;AACpD,MAAM,CAAC,IAAM,eAAe,GAIvB,UAAC,EAAoC;QAAlC,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACtC,OAAO,CACL,KAAC,mBAAmB,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YACjE,8BACE,KAAC,cAAc,KAAG,EACjB,QAAQ,IACR,GACiB,CACvB,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@replyke/react-js",
|
|
3
|
-
"version": "7.0.0-beta.
|
|
3
|
+
"version": "7.0.0-beta.89",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Replyke, maintained by Yanay Tsabary",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://docs.replyke.com",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@replyke/core": "7.0.0-beta.
|
|
41
|
+
"@replyke/core": "7.0.0-beta.89"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@reduxjs/toolkit": "^2.0.0",
|