@tryfinch/react-connect 3.7.0 → 3.11.0
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/index.d.ts +17 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +37 -22
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +37 -22
- package/dist/index.js.map +1 -1
- package/example/src/App.tsx +27 -11
- package/package.json +1 -1
- package/src/index.ts +82 -37
package/dist/index.d.ts
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
export type SuccessEvent = {
|
|
2
2
|
code: string;
|
|
3
3
|
state?: string;
|
|
4
|
+
idpRedirectUri?: string;
|
|
4
5
|
};
|
|
5
6
|
export type ErrorEvent = {
|
|
6
7
|
errorMessage: string;
|
|
7
8
|
};
|
|
8
9
|
export type Sandbox = 'finch' /** This is to enable the new Finch (simulated) Sandbox */ | 'provider' /** This is to enable the new Provider Sandbox */ | boolean /** This is the old sandbox flag retained for backwards compatibility */;
|
|
9
|
-
|
|
10
|
-
category: string | null;
|
|
11
|
-
clientId: string;
|
|
12
|
-
manual: boolean;
|
|
10
|
+
type BaseConnectOptions = {
|
|
13
11
|
state: string | null;
|
|
14
12
|
onSuccess: (e: SuccessEvent) => void;
|
|
15
13
|
onError: (e: ErrorEvent) => void;
|
|
16
14
|
onClose: () => void;
|
|
17
|
-
payrollProvider: string | null;
|
|
18
|
-
products: string[];
|
|
19
|
-
sandbox: Sandbox;
|
|
20
15
|
zIndex: number;
|
|
21
16
|
apiConfig?: {
|
|
22
17
|
connectUrl: string;
|
|
23
18
|
redirectUrl: string;
|
|
24
19
|
};
|
|
25
20
|
};
|
|
26
|
-
type
|
|
21
|
+
type ConnectOptionsWithSessionId = BaseConnectOptions & {
|
|
22
|
+
sessionId: string;
|
|
23
|
+
products?: string[];
|
|
24
|
+
};
|
|
25
|
+
type ConnectOptionsWithClientId = BaseConnectOptions & {
|
|
26
|
+
category: string | null;
|
|
27
|
+
clientId: string;
|
|
28
|
+
manual: boolean;
|
|
29
|
+
payrollProvider: string | null;
|
|
30
|
+
products: string[];
|
|
31
|
+
clientName?: string;
|
|
32
|
+
sandbox: Sandbox;
|
|
33
|
+
};
|
|
34
|
+
export type ConnectOptions = ConnectOptionsWithSessionId | ConnectOptionsWithClientId;
|
|
35
|
+
type OpenFn = (overrides?: Partial<ConnectOptions>) => void;
|
|
27
36
|
export declare const useFinchConnect: (options: Partial<ConnectOptions>) => {
|
|
28
37
|
open: OpenFn;
|
|
29
38
|
};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,0DAA0D,GAClE,UAAU,CAAC,iDAAiD,GAC5D,OAAO,CAAC,wEAAwE,CAAC;AAErF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,KAAK,2BAA2B,GAAG,kBAAkB,GAAG;IAEtD,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,0BAA0B,GAAG,kBAAkB,GAAG;IACrD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,2BAA2B,GAAG,0BAA0B,CAAC;AAEtF,KAAK,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;AAyG5D,eAAO,MAAM,eAAe,YAAa,QAAQ,cAAc,CAAC;UAAW,MAAM;CA0GhF,CAAC"}
|
package/dist/index.es.js
CHANGED
|
@@ -4,51 +4,64 @@ const BASE_FINCH_CONNECT_URI = 'https://connect.tryfinch.com';
|
|
|
4
4
|
const DEFAULT_FINCH_REDIRECT_URI = 'https://tryfinch.com';
|
|
5
5
|
const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
|
|
6
6
|
const FINCH_AUTH_MESSAGE_NAME = 'finch-auth-message';
|
|
7
|
-
const constructAuthUrl = (
|
|
7
|
+
const constructAuthUrl = (connectOptions) => {
|
|
8
|
+
const { state, apiConfig } = connectOptions;
|
|
8
9
|
const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
|
|
9
10
|
const REDIRECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.redirectUrl) || DEFAULT_FINCH_REDIRECT_URI;
|
|
10
11
|
const authUrl = new URL(`${CONNECT_URL}/authorize`);
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
if ('sessionId' in connectOptions) {
|
|
13
|
+
const { sessionId, products } = connectOptions;
|
|
14
|
+
authUrl.searchParams.append('session', sessionId);
|
|
15
|
+
if (products)
|
|
16
|
+
authUrl.searchParams.append('products', products.join(' '));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const { clientId, payrollProvider, category, products, manual, sandbox, clientName, } = connectOptions;
|
|
20
|
+
if (clientId)
|
|
21
|
+
authUrl.searchParams.append('client_id', clientId);
|
|
22
|
+
if (payrollProvider)
|
|
23
|
+
authUrl.searchParams.append('payroll_provider', payrollProvider);
|
|
24
|
+
if (category)
|
|
25
|
+
authUrl.searchParams.append('category', category);
|
|
26
|
+
if (clientName)
|
|
27
|
+
authUrl.searchParams.append('client_name', clientName);
|
|
28
|
+
authUrl.searchParams.append('products', (products !== null && products !== void 0 ? products : []).join(' '));
|
|
29
|
+
if (manual)
|
|
30
|
+
authUrl.searchParams.append('manual', String(manual));
|
|
31
|
+
if (sandbox)
|
|
32
|
+
authUrl.searchParams.append('sandbox', String(sandbox));
|
|
33
|
+
}
|
|
18
34
|
authUrl.searchParams.append('app_type', 'spa');
|
|
19
35
|
authUrl.searchParams.append('redirect_uri', REDIRECT_URL);
|
|
20
36
|
/** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
|
|
21
37
|
authUrl.searchParams.append('sdk_host_url', window.location.origin);
|
|
22
38
|
authUrl.searchParams.append('mode', 'employer');
|
|
23
|
-
if (manual)
|
|
24
|
-
authUrl.searchParams.append('manual', String(manual));
|
|
25
|
-
if (sandbox)
|
|
26
|
-
authUrl.searchParams.append('sandbox', String(sandbox));
|
|
27
39
|
if (state)
|
|
28
40
|
authUrl.searchParams.append('state', state);
|
|
29
41
|
// replace with actual SDK version by rollup
|
|
30
|
-
authUrl.searchParams.append('sdk_version', 'react-3.
|
|
42
|
+
authUrl.searchParams.append('sdk_version', 'react-3.11.0');
|
|
31
43
|
return authUrl.href;
|
|
32
44
|
};
|
|
33
45
|
const noop = () => {
|
|
34
46
|
// intentionally empty
|
|
35
47
|
};
|
|
36
|
-
const
|
|
37
|
-
category: null,
|
|
38
|
-
manual: false,
|
|
48
|
+
const BASE_DEFAULTS = {
|
|
39
49
|
onSuccess: noop,
|
|
40
50
|
onError: noop,
|
|
41
51
|
onClose: noop,
|
|
42
|
-
payrollProvider: null,
|
|
43
|
-
products: [],
|
|
44
|
-
sandbox: false,
|
|
45
52
|
state: null,
|
|
46
53
|
zIndex: 999,
|
|
47
54
|
};
|
|
55
|
+
const DEFAULT_OPTIONS_WITH_CLIENT_ID = Object.assign(Object.assign({}, BASE_DEFAULTS), { clientId: '', category: null, manual: false, payrollProvider: null, products: [], clientName: undefined, sandbox: false });
|
|
56
|
+
const DEFAULT_OPTIONS_WITH_SESSION_ID = Object.assign(Object.assign({}, BASE_DEFAULTS), { sessionId: '' });
|
|
48
57
|
let isUseFinchConnectInitialized = false;
|
|
49
58
|
const useFinchConnect = (options) => {
|
|
50
|
-
if (!options
|
|
51
|
-
throw new Error('must specify clientId in options for useFinchConnect');
|
|
59
|
+
if (!('sessionId' in options) && !('clientId' in options)) {
|
|
60
|
+
throw new Error('must specify either sessionId or clientId in options for useFinchConnect');
|
|
61
|
+
}
|
|
62
|
+
if ('sessionId' in options && 'clientId' in options) {
|
|
63
|
+
throw new Error('cannot specify both sessionId and clientId in options for useFinchConnect');
|
|
64
|
+
}
|
|
52
65
|
const isHookMounted = useRef(false);
|
|
53
66
|
useEffect(() => {
|
|
54
67
|
if (!isHookMounted.current) {
|
|
@@ -61,7 +74,8 @@ const useFinchConnect = (options) => {
|
|
|
61
74
|
isHookMounted.current = true;
|
|
62
75
|
}
|
|
63
76
|
}, []);
|
|
64
|
-
const combinedOptions =
|
|
77
|
+
const combinedOptions = 'sessionId' in options
|
|
78
|
+
? Object.assign(Object.assign({}, DEFAULT_OPTIONS_WITH_SESSION_ID), options) : Object.assign(Object.assign({}, DEFAULT_OPTIONS_WITH_CLIENT_ID), options);
|
|
65
79
|
const open = (overrides) => {
|
|
66
80
|
const openOptions = Object.assign(Object.assign({}, combinedOptions), overrides);
|
|
67
81
|
if (!document.getElementById(FINCH_CONNECT_IFRAME_ID)) {
|
|
@@ -110,6 +124,7 @@ const useFinchConnect = (options) => {
|
|
|
110
124
|
combinedOptions.onSuccess({
|
|
111
125
|
code: event.data.code,
|
|
112
126
|
state: event.data.state,
|
|
127
|
+
idpRedirectUri: event.data.idpRedirectUri,
|
|
113
128
|
});
|
|
114
129
|
break;
|
|
115
130
|
default: {
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/src/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,51 +8,64 @@ const BASE_FINCH_CONNECT_URI = 'https://connect.tryfinch.com';
|
|
|
8
8
|
const DEFAULT_FINCH_REDIRECT_URI = 'https://tryfinch.com';
|
|
9
9
|
const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
|
|
10
10
|
const FINCH_AUTH_MESSAGE_NAME = 'finch-auth-message';
|
|
11
|
-
const constructAuthUrl = (
|
|
11
|
+
const constructAuthUrl = (connectOptions) => {
|
|
12
|
+
const { state, apiConfig } = connectOptions;
|
|
12
13
|
const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
|
|
13
14
|
const REDIRECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.redirectUrl) || DEFAULT_FINCH_REDIRECT_URI;
|
|
14
15
|
const authUrl = new URL(`${CONNECT_URL}/authorize`);
|
|
15
|
-
if (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
if ('sessionId' in connectOptions) {
|
|
17
|
+
const { sessionId, products } = connectOptions;
|
|
18
|
+
authUrl.searchParams.append('session', sessionId);
|
|
19
|
+
if (products)
|
|
20
|
+
authUrl.searchParams.append('products', products.join(' '));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const { clientId, payrollProvider, category, products, manual, sandbox, clientName, } = connectOptions;
|
|
24
|
+
if (clientId)
|
|
25
|
+
authUrl.searchParams.append('client_id', clientId);
|
|
26
|
+
if (payrollProvider)
|
|
27
|
+
authUrl.searchParams.append('payroll_provider', payrollProvider);
|
|
28
|
+
if (category)
|
|
29
|
+
authUrl.searchParams.append('category', category);
|
|
30
|
+
if (clientName)
|
|
31
|
+
authUrl.searchParams.append('client_name', clientName);
|
|
32
|
+
authUrl.searchParams.append('products', (products !== null && products !== void 0 ? products : []).join(' '));
|
|
33
|
+
if (manual)
|
|
34
|
+
authUrl.searchParams.append('manual', String(manual));
|
|
35
|
+
if (sandbox)
|
|
36
|
+
authUrl.searchParams.append('sandbox', String(sandbox));
|
|
37
|
+
}
|
|
22
38
|
authUrl.searchParams.append('app_type', 'spa');
|
|
23
39
|
authUrl.searchParams.append('redirect_uri', REDIRECT_URL);
|
|
24
40
|
/** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
|
|
25
41
|
authUrl.searchParams.append('sdk_host_url', window.location.origin);
|
|
26
42
|
authUrl.searchParams.append('mode', 'employer');
|
|
27
|
-
if (manual)
|
|
28
|
-
authUrl.searchParams.append('manual', String(manual));
|
|
29
|
-
if (sandbox)
|
|
30
|
-
authUrl.searchParams.append('sandbox', String(sandbox));
|
|
31
43
|
if (state)
|
|
32
44
|
authUrl.searchParams.append('state', state);
|
|
33
45
|
// replace with actual SDK version by rollup
|
|
34
|
-
authUrl.searchParams.append('sdk_version', 'react-3.
|
|
46
|
+
authUrl.searchParams.append('sdk_version', 'react-3.11.0');
|
|
35
47
|
return authUrl.href;
|
|
36
48
|
};
|
|
37
49
|
const noop = () => {
|
|
38
50
|
// intentionally empty
|
|
39
51
|
};
|
|
40
|
-
const
|
|
41
|
-
category: null,
|
|
42
|
-
manual: false,
|
|
52
|
+
const BASE_DEFAULTS = {
|
|
43
53
|
onSuccess: noop,
|
|
44
54
|
onError: noop,
|
|
45
55
|
onClose: noop,
|
|
46
|
-
payrollProvider: null,
|
|
47
|
-
products: [],
|
|
48
|
-
sandbox: false,
|
|
49
56
|
state: null,
|
|
50
57
|
zIndex: 999,
|
|
51
58
|
};
|
|
59
|
+
const DEFAULT_OPTIONS_WITH_CLIENT_ID = Object.assign(Object.assign({}, BASE_DEFAULTS), { clientId: '', category: null, manual: false, payrollProvider: null, products: [], clientName: undefined, sandbox: false });
|
|
60
|
+
const DEFAULT_OPTIONS_WITH_SESSION_ID = Object.assign(Object.assign({}, BASE_DEFAULTS), { sessionId: '' });
|
|
52
61
|
let isUseFinchConnectInitialized = false;
|
|
53
62
|
const useFinchConnect = (options) => {
|
|
54
|
-
if (!options
|
|
55
|
-
throw new Error('must specify clientId in options for useFinchConnect');
|
|
63
|
+
if (!('sessionId' in options) && !('clientId' in options)) {
|
|
64
|
+
throw new Error('must specify either sessionId or clientId in options for useFinchConnect');
|
|
65
|
+
}
|
|
66
|
+
if ('sessionId' in options && 'clientId' in options) {
|
|
67
|
+
throw new Error('cannot specify both sessionId and clientId in options for useFinchConnect');
|
|
68
|
+
}
|
|
56
69
|
const isHookMounted = react.useRef(false);
|
|
57
70
|
react.useEffect(() => {
|
|
58
71
|
if (!isHookMounted.current) {
|
|
@@ -65,7 +78,8 @@ const useFinchConnect = (options) => {
|
|
|
65
78
|
isHookMounted.current = true;
|
|
66
79
|
}
|
|
67
80
|
}, []);
|
|
68
|
-
const combinedOptions =
|
|
81
|
+
const combinedOptions = 'sessionId' in options
|
|
82
|
+
? Object.assign(Object.assign({}, DEFAULT_OPTIONS_WITH_SESSION_ID), options) : Object.assign(Object.assign({}, DEFAULT_OPTIONS_WITH_CLIENT_ID), options);
|
|
69
83
|
const open = (overrides) => {
|
|
70
84
|
const openOptions = Object.assign(Object.assign({}, combinedOptions), overrides);
|
|
71
85
|
if (!document.getElementById(FINCH_CONNECT_IFRAME_ID)) {
|
|
@@ -114,6 +128,7 @@ const useFinchConnect = (options) => {
|
|
|
114
128
|
combinedOptions.onSuccess({
|
|
115
129
|
code: event.data.code,
|
|
116
130
|
state: event.data.state,
|
|
131
|
+
idpRedirectUri: event.data.idpRedirectUri,
|
|
117
132
|
});
|
|
118
133
|
break;
|
|
119
134
|
default: {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/index.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/index.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":"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"}
|
package/example/src/App.tsx
CHANGED
|
@@ -14,30 +14,44 @@ const App = () => {
|
|
|
14
14
|
const onClose = () => setResult({ kind: 'closed' });
|
|
15
15
|
|
|
16
16
|
const { open } = useFinchConnect({
|
|
17
|
-
clientId: '
|
|
18
|
-
products: [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
clientId: 'f36f0cf9-5900-4171-b6d9-364008eb61aa',
|
|
18
|
+
products: [
|
|
19
|
+
'company',
|
|
20
|
+
'directory',
|
|
21
|
+
'individual',
|
|
22
|
+
'employment',
|
|
23
|
+
'payment',
|
|
24
|
+
'pay_statement',
|
|
25
|
+
'benefits',
|
|
26
|
+
],
|
|
27
|
+
payrollProvider: 'gusto',
|
|
28
|
+
state: '',
|
|
22
29
|
onSuccess,
|
|
23
30
|
onError,
|
|
24
31
|
onClose,
|
|
25
32
|
});
|
|
26
33
|
|
|
27
|
-
const submissionHandler: React.FormEventHandler<HTMLFormElement>
|
|
34
|
+
const submissionHandler: React.FormEventHandler<HTMLFormElement> = (e) => {
|
|
28
35
|
e.preventDefault();
|
|
29
36
|
open({
|
|
30
37
|
...(sendState ? { state: new Date().toISOString() } : undefined),
|
|
31
|
-
})
|
|
38
|
+
});
|
|
32
39
|
};
|
|
33
40
|
|
|
34
41
|
return (
|
|
35
42
|
<div className="container">
|
|
36
|
-
<h2
|
|
43
|
+
<h2>
|
|
44
|
+
<a href="https://www.npmjs.com/package/@tryfinch/react-connect">@tryfinch/react-connect</a>{' '}
|
|
45
|
+
Example App
|
|
46
|
+
</h2>
|
|
37
47
|
<form className="actions" onSubmit={submissionHandler}>
|
|
38
48
|
<div className="row">
|
|
39
49
|
<label className="top-label">Include State:</label>
|
|
40
|
-
<input
|
|
50
|
+
<input
|
|
51
|
+
type="checkbox"
|
|
52
|
+
checked={sendState}
|
|
53
|
+
onChange={() => setSendState((prev) => !prev)}
|
|
54
|
+
/>
|
|
41
55
|
</div>
|
|
42
56
|
<div className="row">
|
|
43
57
|
<button className="cta" type="submit">
|
|
@@ -46,8 +60,10 @@ const App = () => {
|
|
|
46
60
|
</div>
|
|
47
61
|
</form>
|
|
48
62
|
<div className="results">
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
{!result && (
|
|
64
|
+
<p>Complete a Finch Connect session and the success event will be displayed here</p>
|
|
65
|
+
)}
|
|
66
|
+
{result && <Result result={result} />}
|
|
51
67
|
</div>
|
|
52
68
|
</div>
|
|
53
69
|
);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
+
type HasKey<T, K extends PropertyKey> = T extends Record<K, unknown> ? T : never;
|
|
4
|
+
|
|
3
5
|
export type SuccessEvent = {
|
|
4
6
|
code: string;
|
|
5
7
|
state?: string;
|
|
8
|
+
idpRedirectUri?: string;
|
|
6
9
|
};
|
|
7
10
|
|
|
8
11
|
export type ErrorEvent = {
|
|
@@ -14,17 +17,11 @@ export type Sandbox =
|
|
|
14
17
|
| 'provider' /** This is to enable the new Provider Sandbox */
|
|
15
18
|
| boolean /** This is the old sandbox flag retained for backwards compatibility */;
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
category: string | null;
|
|
19
|
-
clientId: string;
|
|
20
|
-
manual: boolean;
|
|
20
|
+
type BaseConnectOptions = {
|
|
21
21
|
state: string | null;
|
|
22
22
|
onSuccess: (e: SuccessEvent) => void;
|
|
23
23
|
onError: (e: ErrorEvent) => void;
|
|
24
24
|
onClose: () => void;
|
|
25
|
-
payrollProvider: string | null;
|
|
26
|
-
products: string[];
|
|
27
|
-
sandbox: Sandbox;
|
|
28
25
|
zIndex: number;
|
|
29
26
|
apiConfig?: {
|
|
30
27
|
connectUrl: string;
|
|
@@ -32,9 +29,26 @@ export type ConnectOptions = {
|
|
|
32
29
|
};
|
|
33
30
|
};
|
|
34
31
|
|
|
35
|
-
type
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
type ConnectOptionsWithSessionId = BaseConnectOptions & {
|
|
33
|
+
// Use this option if you have a Finch Connect sessionID from the IDP redirect flow
|
|
34
|
+
sessionId: string;
|
|
35
|
+
// Allow for overriding products for the session
|
|
36
|
+
products?: string[];
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
type ConnectOptionsWithClientId = BaseConnectOptions & {
|
|
40
|
+
category: string | null;
|
|
41
|
+
clientId: string;
|
|
42
|
+
manual: boolean;
|
|
43
|
+
payrollProvider: string | null;
|
|
44
|
+
products: string[];
|
|
45
|
+
clientName?: string;
|
|
46
|
+
sandbox: Sandbox;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type ConnectOptions = ConnectOptionsWithSessionId | ConnectOptionsWithClientId;
|
|
50
|
+
|
|
51
|
+
type OpenFn = (overrides?: Partial<ConnectOptions>) => void;
|
|
38
52
|
|
|
39
53
|
const POST_MESSAGE_NAME = 'finch-auth-message' as const;
|
|
40
54
|
|
|
@@ -46,6 +60,7 @@ type FinchConnectAuthMessage = { name: typeof POST_MESSAGE_NAME } & (
|
|
|
46
60
|
kind: 'success';
|
|
47
61
|
code: string;
|
|
48
62
|
state?: string;
|
|
63
|
+
idpRedirectUri?: string;
|
|
49
64
|
}
|
|
50
65
|
| {
|
|
51
66
|
kind: 'error';
|
|
@@ -64,31 +79,43 @@ const DEFAULT_FINCH_REDIRECT_URI = 'https://tryfinch.com';
|
|
|
64
79
|
const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
|
|
65
80
|
const FINCH_AUTH_MESSAGE_NAME = 'finch-auth-message';
|
|
66
81
|
|
|
67
|
-
const constructAuthUrl = ({
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
category,
|
|
71
|
-
products,
|
|
72
|
-
manual,
|
|
73
|
-
sandbox,
|
|
74
|
-
state,
|
|
75
|
-
apiConfig,
|
|
76
|
-
}: Partial<ConnectOptions>) => {
|
|
82
|
+
const constructAuthUrl = (connectOptions: ConnectOptions) => {
|
|
83
|
+
const { state, apiConfig } = connectOptions;
|
|
84
|
+
|
|
77
85
|
const CONNECT_URL = apiConfig?.connectUrl || BASE_FINCH_CONNECT_URI;
|
|
78
86
|
const REDIRECT_URL = apiConfig?.redirectUrl || DEFAULT_FINCH_REDIRECT_URI;
|
|
79
87
|
|
|
80
88
|
const authUrl = new URL(`${CONNECT_URL}/authorize`);
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
|
|
90
|
+
if ('sessionId' in connectOptions) {
|
|
91
|
+
const { sessionId, products } = connectOptions;
|
|
92
|
+
authUrl.searchParams.append('session', sessionId);
|
|
93
|
+
if (products) authUrl.searchParams.append('products', products.join(' '));
|
|
94
|
+
} else {
|
|
95
|
+
const {
|
|
96
|
+
clientId,
|
|
97
|
+
payrollProvider,
|
|
98
|
+
category,
|
|
99
|
+
products,
|
|
100
|
+
manual,
|
|
101
|
+
sandbox,
|
|
102
|
+
clientName,
|
|
103
|
+
} = connectOptions;
|
|
104
|
+
|
|
105
|
+
if (clientId) authUrl.searchParams.append('client_id', clientId);
|
|
106
|
+
if (payrollProvider) authUrl.searchParams.append('payroll_provider', payrollProvider);
|
|
107
|
+
if (category) authUrl.searchParams.append('category', category);
|
|
108
|
+
if (clientName) authUrl.searchParams.append('client_name', clientName);
|
|
109
|
+
authUrl.searchParams.append('products', (products ?? []).join(' '));
|
|
110
|
+
if (manual) authUrl.searchParams.append('manual', String(manual));
|
|
111
|
+
if (sandbox) authUrl.searchParams.append('sandbox', String(sandbox));
|
|
112
|
+
}
|
|
113
|
+
|
|
85
114
|
authUrl.searchParams.append('app_type', 'spa');
|
|
86
115
|
authUrl.searchParams.append('redirect_uri', REDIRECT_URL);
|
|
87
116
|
/** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
|
|
88
117
|
authUrl.searchParams.append('sdk_host_url', window.location.origin);
|
|
89
118
|
authUrl.searchParams.append('mode', 'employer');
|
|
90
|
-
if (manual) authUrl.searchParams.append('manual', String(manual));
|
|
91
|
-
if (sandbox) authUrl.searchParams.append('sandbox', String(sandbox));
|
|
92
119
|
if (state) authUrl.searchParams.append('state', state);
|
|
93
120
|
// replace with actual SDK version by rollup
|
|
94
121
|
authUrl.searchParams.append('sdk_version', 'react-SDK_VERSION');
|
|
@@ -100,23 +127,41 @@ const noop = () => {
|
|
|
100
127
|
// intentionally empty
|
|
101
128
|
};
|
|
102
129
|
|
|
103
|
-
const
|
|
104
|
-
category: null,
|
|
105
|
-
manual: false,
|
|
130
|
+
const BASE_DEFAULTS = {
|
|
106
131
|
onSuccess: noop,
|
|
107
132
|
onError: noop,
|
|
108
133
|
onClose: noop,
|
|
134
|
+
state: null,
|
|
135
|
+
zIndex: 999,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const DEFAULT_OPTIONS_WITH_CLIENT_ID: HasKey<ConnectOptions, 'clientId'> = {
|
|
139
|
+
...BASE_DEFAULTS,
|
|
140
|
+
clientId: '',
|
|
141
|
+
category: null,
|
|
142
|
+
manual: false,
|
|
109
143
|
payrollProvider: null,
|
|
110
144
|
products: [],
|
|
145
|
+
clientName: undefined,
|
|
111
146
|
sandbox: false,
|
|
112
|
-
|
|
113
|
-
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const DEFAULT_OPTIONS_WITH_SESSION_ID: HasKey<ConnectOptions, 'sessionId'> = {
|
|
150
|
+
...BASE_DEFAULTS,
|
|
151
|
+
sessionId: '',
|
|
114
152
|
};
|
|
115
153
|
|
|
116
154
|
let isUseFinchConnectInitialized = false;
|
|
117
155
|
|
|
118
156
|
export const useFinchConnect = (options: Partial<ConnectOptions>): { open: OpenFn } => {
|
|
119
|
-
if (!options
|
|
157
|
+
if (!('sessionId' in options) && !('clientId' in options)) {
|
|
158
|
+
throw new Error('must specify either sessionId or clientId in options for useFinchConnect');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if ('sessionId' in options && 'clientId' in options) {
|
|
162
|
+
throw new Error('cannot specify both sessionId and clientId in options for useFinchConnect');
|
|
163
|
+
}
|
|
164
|
+
|
|
120
165
|
const isHookMounted = useRef(false);
|
|
121
166
|
|
|
122
167
|
useEffect(() => {
|
|
@@ -133,11 +178,10 @@ export const useFinchConnect = (options: Partial<ConnectOptions>): { open: OpenF
|
|
|
133
178
|
}
|
|
134
179
|
}, []);
|
|
135
180
|
|
|
136
|
-
const combinedOptions: ConnectOptions =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
};
|
|
181
|
+
const combinedOptions: ConnectOptions =
|
|
182
|
+
'sessionId' in options
|
|
183
|
+
? { ...DEFAULT_OPTIONS_WITH_SESSION_ID, ...options }
|
|
184
|
+
: { ...DEFAULT_OPTIONS_WITH_CLIENT_ID, ...options };
|
|
141
185
|
|
|
142
186
|
const open: OpenFn = (overrides) => {
|
|
143
187
|
const openOptions: ConnectOptions = {
|
|
@@ -191,6 +235,7 @@ export const useFinchConnect = (options: Partial<ConnectOptions>): { open: OpenF
|
|
|
191
235
|
combinedOptions.onSuccess({
|
|
192
236
|
code: event.data.code,
|
|
193
237
|
state: event.data.state,
|
|
238
|
+
idpRedirectUri: event.data.idpRedirectUri,
|
|
194
239
|
});
|
|
195
240
|
break;
|
|
196
241
|
default: {
|