@tryfinch/react-connect 4.0.0 → 4.1.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/.eslintrc.js CHANGED
@@ -57,5 +57,6 @@ module.exports = {
57
57
  ignoreRegExpLiterals: true,
58
58
  },
59
59
  ],
60
+ 'no-console': 'off',
60
61
  },
61
62
  };
@@ -0,0 +1,66 @@
1
+ > The following sections MUST be filled out in order for your pull request to be reviewed
2
+ >
3
+ > If you've been asked to review this and information is missing or incomplete please ask the author to complete this first
4
+
5
+ ## What is changing?
6
+
7
+ <!--
8
+ Please ensure your changes are in line with Finch's Coding Standards
9
+ - https://www.notion.so/tryfinch/Coding-Standards-051edcec95ff4dddb107303957e08416
10
+ -->
11
+ TODO
12
+
13
+ ### ⚠️ What breaking changes will developers need to handle?
14
+ TODO (or n/a if no breaking changes)
15
+
16
+ ## Why is it changing?
17
+
18
+ <!-- What problem does this solve? Why are the changes the appropriate solution? -->
19
+ TODO
20
+
21
+ ## Relevant resources
22
+
23
+ <!--
24
+ Link to any:
25
+ - Associated tickets
26
+ - Discussions on Slack
27
+ - Related PRs
28
+ - Relevant metrics or logs
29
+ -->
30
+ TODO
31
+
32
+ ## What steps did you take to test this?
33
+
34
+ <!--
35
+ Include the steps you took to validate these changes work as expected. This can include automated and manual testing.
36
+ These should allow reviewers to be confident that you have exercised all of your changes to verify that they work as expected
37
+ and will not break in production.
38
+
39
+ e.g.
40
+ - Manually verified that when we get the password change error from the provider we throw a 403
41
+ - Updated automated tests to validate that a 403 is raised when the provider returns the password change error
42
+
43
+ If your changes cannot be fully tested for some reason, or if you feel testing is not necessary, you must explain
44
+ why as well as how you will monitor for issues once they are deployed.
45
+ -->
46
+ TODO
47
+
48
+ ### Screenshots
49
+
50
+ <!--
51
+ Include screenshots of your testing if possible, e.g. responses in Postman, successful data sync job runs
52
+ -->
53
+ TODO (or n/a if nothing can be captured in a screenshot)
54
+
55
+ ## Was the JavaScript SDK updated as well?
56
+
57
+ <!--
58
+ If you are changing functionality in this frontend SDK the other one needs to be updated to match
59
+ https://github.com/Finch-API/finch-connect-js
60
+ -->
61
+ TODO (or n/a if no changes to duplicate)
62
+
63
+ ## Was the relevant external documentation updated?
64
+
65
+ <!-- If any external documentation was updated as a result of this PR, link to it below. -->
66
+ TODO (or n/a if no relevant docs)
@@ -0,0 +1,92 @@
1
+ name: Pull Request
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ jobs:
7
+ # basic validations
8
+
9
+ validate-ticket-tracked:
10
+ name: Validate ticket tracked
11
+ uses: finch-api/github-actions-workflows/.github/workflows/valid-ticket-tracked.yml@main
12
+ with:
13
+ GH_EVENT_NUMBER: ${{ github.event.number }}
14
+ REPO_NAME: ${{ github.repository }}
15
+ secrets:
16
+ GHA_TOKEN: ${{ secrets.GH_READONLY_REPOS_AND_PACKAGES_PAT }}
17
+
18
+ validate-pr-title-standard:
19
+ name: Validate PR title is to standard
20
+ runs-on: blacksmith-2vcpu-ubuntu-2404
21
+
22
+ steps:
23
+ - name: Checkout code
24
+ uses: actions/checkout@v5
25
+
26
+ - name: Validate PR title using semantic-pull-request
27
+ uses: amannn/action-semantic-pull-request@v5
28
+ env:
29
+ GITHUB_TOKEN: ${{ secrets.GH_READONLY_REPOS_AND_PACKAGES_PAT }}
30
+ with:
31
+ wip: true
32
+ types: |
33
+ build
34
+ chore
35
+ ci
36
+ docs
37
+ feat
38
+ fix
39
+ infra
40
+ perf
41
+ refactor
42
+ revert
43
+ style
44
+ test
45
+
46
+ # checks
47
+
48
+ lint:
49
+ name: Lint
50
+ runs-on: blacksmith-2vcpu-ubuntu-2404
51
+ needs:
52
+ - validate-ticket-tracked
53
+ - validate-pr-title-standard
54
+
55
+ steps:
56
+ - name: Checkout code
57
+ uses: actions/checkout@v5
58
+
59
+ - name: Configure node
60
+ uses: useblacksmith/setup-node@v5
61
+ with:
62
+ node-version-file: .nvmrc
63
+ cache: npm
64
+
65
+ - name: Install dependencies
66
+ run: npm install
67
+
68
+ - name: Run lint
69
+ run: npm run lint
70
+
71
+ run-tests:
72
+ name: Unit test
73
+ runs-on: blacksmith-2vcpu-ubuntu-2404
74
+ needs:
75
+ - validate-ticket-tracked
76
+ - validate-pr-title-standard
77
+
78
+ steps:
79
+ - name: Checkout code
80
+ uses: actions/checkout@v5
81
+
82
+ - name: Configure node
83
+ uses: useblacksmith/setup-node@v5
84
+ with:
85
+ node-version-file: .nvmrc
86
+ cache: npm
87
+
88
+ - name: Install dependencies
89
+ run: npm install
90
+
91
+ - name: Run tests
92
+ run: npm run test
@@ -0,0 +1,80 @@
1
+ name: Build and Release
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+
8
+ jobs:
9
+ tests:
10
+ name: Tests
11
+ runs-on: blacksmith-2vcpu-ubuntu-2204
12
+ steps:
13
+ - name: Checkout code
14
+ uses: actions/checkout@v5
15
+
16
+ - name: Configure node
17
+ uses: useblacksmith/setup-node@v5
18
+ with:
19
+ node-version-file: .nvmrc
20
+ cache: npm
21
+
22
+ - name: Install dependencies
23
+ run: npm install
24
+
25
+ - name: Run Tests
26
+ run: npm run test
27
+
28
+ lint:
29
+ name: Lint
30
+ runs-on: blacksmith-2vcpu-ubuntu-2404
31
+
32
+ steps:
33
+ - name: Checkout code
34
+ uses: actions/checkout@v5
35
+
36
+ - name: Configure node
37
+ uses: useblacksmith/setup-node@v5
38
+ with:
39
+ node-version-file: .nvmrc
40
+ cache: npm
41
+
42
+ - name: Install dependencies
43
+ run: npm install
44
+
45
+ - name: Run Lint
46
+ run: npm run lint
47
+
48
+ build-and-publish:
49
+ name: Build and Publish to NPM
50
+ runs-on: blacksmith-2vcpu-ubuntu-2204
51
+ needs:
52
+ - tests
53
+ - lint
54
+
55
+ steps:
56
+ - name: Checkout code
57
+ uses: actions/checkout@v5
58
+
59
+ - name: Configure node
60
+ uses: useblacksmith/setup-node@v5
61
+ with:
62
+ node-version-file: .nvmrc
63
+ cache: npm
64
+ registry-url: https://registry.npmjs.org/
65
+
66
+ - name: Install dependencies
67
+ run: npm install
68
+
69
+ - name: Build
70
+ run: npm run build
71
+
72
+ - name: Update package version
73
+ run: npm version --no-git-tag-version ${{ github.ref_name }}
74
+
75
+ - name: Publish to npm
76
+ run: npm publish
77
+ env:
78
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
79
+
80
+
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ v18.17.0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v4.1.0
2
+
3
+ ## New
4
+ - Added the `openPreview` function, which accepts a client ID and list of products and will launch Connect in preview mode. Completing the authorization flow is disabled in preview mode.
5
+
1
6
  # v4.0.0
2
7
 
3
8
  ## ⚠️ Breaking Changes
package/dist/index.d.ts CHANGED
@@ -22,14 +22,25 @@ export type ConnectLaunchArgs = {
22
22
  state?: string;
23
23
  zIndex?: number;
24
24
  };
25
+ export type ConnectPreviewLaunchArgs = {
26
+ clientId: string;
27
+ products: string[];
28
+ };
25
29
  type OpenFn = (args: ConnectLaunchArgs) => void;
30
+ type OpenPreviewFn = (args: ConnectPreviewLaunchArgs) => void;
26
31
  export declare const constructAuthUrl: ({ sessionId, state, apiConfig, }: {
27
32
  sessionId: string;
28
33
  state?: string | undefined;
29
34
  apiConfig?: ApiConfig | undefined;
30
35
  }) => string;
36
+ export declare const constructPreviewUrl: ({ clientId, products, apiConfig, }: {
37
+ clientId: string;
38
+ products: string[];
39
+ apiConfig?: ApiConfig | undefined;
40
+ }) => string;
31
41
  export declare const useFinchConnect: (initializeArgs: ConnectInitializeArgs) => {
32
42
  open: OpenFn;
43
+ openPreview: OpenPreviewFn;
33
44
  };
34
45
  export {};
35
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"./","sources":["index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG,kBAAkB,GAAG,2BAA2B,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,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,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;AA6BhD,eAAO,MAAM,gBAAgB;eAKhB,MAAM;;;YAkBlB,CAAC;AAIF,eAAO,MAAM,eAAe,mBAAoB,qBAAqB;UAAW,MAAM;CAkGrF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"./","sources":["index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG,kBAAkB,GAAG,2BAA2B,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,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,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEhD,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;AAsC9D,eAAO,MAAM,gBAAgB;eAKhB,MAAM;;;YAclB,CAAC;AAEF,eAAO,MAAM,mBAAmB;cAKpB,MAAM;cACN,MAAM,EAAE;;YAiBnB,CAAC;AAIF,eAAO,MAAM,eAAe,mBACV,qBAAqB;UAC5B,MAAM;iBAAe,aAAa;CA8H5C,CAAC"}
package/dist/index.es.js CHANGED
@@ -3,20 +3,35 @@ import { useRef, useEffect } from 'react';
3
3
  const POST_MESSAGE_NAME = 'finch-auth-message-v2';
4
4
  const BASE_FINCH_CONNECT_URI = 'https://connect.tryfinch.com';
5
5
  const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
6
+ const appendBaseParams = (url) => {
7
+ url.searchParams.append('app_type', 'spa');
8
+ // The host URL of the SDK. This is used to store the referrer for postMessage purposes
9
+ url.searchParams.append('sdk_host_url', window.location.origin);
10
+ url.searchParams.append('mode', 'employer');
11
+ // replace with actual SDK version by rollup
12
+ url.searchParams.append('sdk_version', 'react-4.1.0');
13
+ };
6
14
  const constructAuthUrl = ({ sessionId, state, apiConfig, }) => {
7
15
  const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
8
16
  const authUrl = new URL(`${CONNECT_URL}/authorize`);
9
17
  authUrl.searchParams.append('session', sessionId);
10
- authUrl.searchParams.append('app_type', 'spa');
11
- /** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
12
- authUrl.searchParams.append('sdk_host_url', window.location.origin);
13
- authUrl.searchParams.append('mode', 'employer');
14
18
  if (state)
15
19
  authUrl.searchParams.append('state', state);
16
- // replace with actual SDK version by rollup
17
- authUrl.searchParams.append('sdk_version', 'react-4.0.0');
20
+ appendBaseParams(authUrl);
18
21
  return authUrl.href;
19
22
  };
23
+ const constructPreviewUrl = ({ clientId, products, apiConfig, }) => {
24
+ const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
25
+ const previewUrl = new URL(`${CONNECT_URL}/authorize`);
26
+ previewUrl.searchParams.append('preview', 'true');
27
+ previewUrl.searchParams.append('client_id', clientId);
28
+ previewUrl.searchParams.append('products', (products !== null && products !== void 0 ? products : []).join(' '));
29
+ // This will be replaced by a universally allowed redirect URI in the backend
30
+ // We won't ever redirect to anything in preview mode, so we just need a value to pass validation
31
+ previewUrl.searchParams.append('redirect_uri', 'https://www.tryfinch.com');
32
+ appendBaseParams(previewUrl);
33
+ return previewUrl.href;
34
+ };
20
35
  let isUseFinchConnectInitialized = false;
21
36
  const useFinchConnect = (initializeArgs) => {
22
37
  const isHookMounted = useRef(false);
@@ -31,19 +46,14 @@ const useFinchConnect = (initializeArgs) => {
31
46
  isHookMounted.current = true;
32
47
  }
33
48
  }, []);
34
- const open = (launchArgs) => {
35
- var _a;
49
+ const createAndAttachIFrame = ({ src, zIndexOverride, }) => {
36
50
  if (!document.getElementById(FINCH_CONNECT_IFRAME_ID)) {
37
51
  const iframe = document.createElement('iframe');
38
- iframe.src = constructAuthUrl({
39
- sessionId: launchArgs.sessionId,
40
- state: launchArgs.state,
41
- apiConfig: initializeArgs.apiConfig,
42
- });
52
+ iframe.src = src;
43
53
  iframe.frameBorder = '0';
44
54
  iframe.id = FINCH_CONNECT_IFRAME_ID;
45
55
  iframe.style.position = 'fixed';
46
- iframe.style.zIndex = ((_a = launchArgs.zIndex) === null || _a === void 0 ? void 0 : _a.toString()) || '999';
56
+ iframe.style.zIndex = (zIndexOverride === null || zIndexOverride === void 0 ? void 0 : zIndexOverride.toString()) || '999';
47
57
  iframe.style.height = '100%';
48
58
  iframe.style.width = '100%';
49
59
  iframe.style.top = '0';
@@ -54,6 +64,27 @@ const useFinchConnect = (initializeArgs) => {
54
64
  document.body.style.overflow = 'hidden';
55
65
  }
56
66
  };
67
+ const open = (launchArgs) => {
68
+ const iframeSrc = constructAuthUrl({
69
+ sessionId: launchArgs.sessionId,
70
+ state: launchArgs.state,
71
+ apiConfig: initializeArgs.apiConfig,
72
+ });
73
+ createAndAttachIFrame({
74
+ src: iframeSrc,
75
+ zIndexOverride: launchArgs.zIndex,
76
+ });
77
+ };
78
+ const openPreview = (launchArgs) => {
79
+ const iframeSrc = constructPreviewUrl({
80
+ clientId: launchArgs.clientId,
81
+ products: launchArgs.products,
82
+ apiConfig: initializeArgs.apiConfig,
83
+ });
84
+ createAndAttachIFrame({
85
+ src: iframeSrc,
86
+ });
87
+ };
57
88
  const close = () => {
58
89
  var _a;
59
90
  const frameToRemove = document.getElementById(FINCH_CONNECT_IFRAME_ID);
@@ -109,8 +140,9 @@ const useFinchConnect = (initializeArgs) => {
109
140
  }, [initializeArgs.onClose, initializeArgs.onError, initializeArgs.onSuccess]);
110
141
  return {
111
142
  open,
143
+ openPreview,
112
144
  };
113
145
  };
114
146
 
115
- export { constructAuthUrl, useFinchConnect };
147
+ export { constructAuthUrl, constructPreviewUrl, useFinchConnect };
116
148
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,20 +7,35 @@ var react = require('react');
7
7
  const POST_MESSAGE_NAME = 'finch-auth-message-v2';
8
8
  const BASE_FINCH_CONNECT_URI = 'https://connect.tryfinch.com';
9
9
  const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
10
+ const appendBaseParams = (url) => {
11
+ url.searchParams.append('app_type', 'spa');
12
+ // The host URL of the SDK. This is used to store the referrer for postMessage purposes
13
+ url.searchParams.append('sdk_host_url', window.location.origin);
14
+ url.searchParams.append('mode', 'employer');
15
+ // replace with actual SDK version by rollup
16
+ url.searchParams.append('sdk_version', 'react-4.1.0');
17
+ };
10
18
  const constructAuthUrl = ({ sessionId, state, apiConfig, }) => {
11
19
  const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
12
20
  const authUrl = new URL(`${CONNECT_URL}/authorize`);
13
21
  authUrl.searchParams.append('session', sessionId);
14
- authUrl.searchParams.append('app_type', 'spa');
15
- /** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
16
- authUrl.searchParams.append('sdk_host_url', window.location.origin);
17
- authUrl.searchParams.append('mode', 'employer');
18
22
  if (state)
19
23
  authUrl.searchParams.append('state', state);
20
- // replace with actual SDK version by rollup
21
- authUrl.searchParams.append('sdk_version', 'react-4.0.0');
24
+ appendBaseParams(authUrl);
22
25
  return authUrl.href;
23
26
  };
27
+ const constructPreviewUrl = ({ clientId, products, apiConfig, }) => {
28
+ const CONNECT_URL = (apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.connectUrl) || BASE_FINCH_CONNECT_URI;
29
+ const previewUrl = new URL(`${CONNECT_URL}/authorize`);
30
+ previewUrl.searchParams.append('preview', 'true');
31
+ previewUrl.searchParams.append('client_id', clientId);
32
+ previewUrl.searchParams.append('products', (products !== null && products !== void 0 ? products : []).join(' '));
33
+ // This will be replaced by a universally allowed redirect URI in the backend
34
+ // We won't ever redirect to anything in preview mode, so we just need a value to pass validation
35
+ previewUrl.searchParams.append('redirect_uri', 'https://www.tryfinch.com');
36
+ appendBaseParams(previewUrl);
37
+ return previewUrl.href;
38
+ };
24
39
  let isUseFinchConnectInitialized = false;
25
40
  const useFinchConnect = (initializeArgs) => {
26
41
  const isHookMounted = react.useRef(false);
@@ -35,19 +50,14 @@ const useFinchConnect = (initializeArgs) => {
35
50
  isHookMounted.current = true;
36
51
  }
37
52
  }, []);
38
- const open = (launchArgs) => {
39
- var _a;
53
+ const createAndAttachIFrame = ({ src, zIndexOverride, }) => {
40
54
  if (!document.getElementById(FINCH_CONNECT_IFRAME_ID)) {
41
55
  const iframe = document.createElement('iframe');
42
- iframe.src = constructAuthUrl({
43
- sessionId: launchArgs.sessionId,
44
- state: launchArgs.state,
45
- apiConfig: initializeArgs.apiConfig,
46
- });
56
+ iframe.src = src;
47
57
  iframe.frameBorder = '0';
48
58
  iframe.id = FINCH_CONNECT_IFRAME_ID;
49
59
  iframe.style.position = 'fixed';
50
- iframe.style.zIndex = ((_a = launchArgs.zIndex) === null || _a === void 0 ? void 0 : _a.toString()) || '999';
60
+ iframe.style.zIndex = (zIndexOverride === null || zIndexOverride === void 0 ? void 0 : zIndexOverride.toString()) || '999';
51
61
  iframe.style.height = '100%';
52
62
  iframe.style.width = '100%';
53
63
  iframe.style.top = '0';
@@ -58,6 +68,27 @@ const useFinchConnect = (initializeArgs) => {
58
68
  document.body.style.overflow = 'hidden';
59
69
  }
60
70
  };
71
+ const open = (launchArgs) => {
72
+ const iframeSrc = constructAuthUrl({
73
+ sessionId: launchArgs.sessionId,
74
+ state: launchArgs.state,
75
+ apiConfig: initializeArgs.apiConfig,
76
+ });
77
+ createAndAttachIFrame({
78
+ src: iframeSrc,
79
+ zIndexOverride: launchArgs.zIndex,
80
+ });
81
+ };
82
+ const openPreview = (launchArgs) => {
83
+ const iframeSrc = constructPreviewUrl({
84
+ clientId: launchArgs.clientId,
85
+ products: launchArgs.products,
86
+ apiConfig: initializeArgs.apiConfig,
87
+ });
88
+ createAndAttachIFrame({
89
+ src: iframeSrc,
90
+ });
91
+ };
61
92
  const close = () => {
62
93
  var _a;
63
94
  const frameToRemove = document.getElementById(FINCH_CONNECT_IFRAME_ID);
@@ -113,9 +144,11 @@ const useFinchConnect = (initializeArgs) => {
113
144
  }, [initializeArgs.onClose, initializeArgs.onError, initializeArgs.onSuccess]);
114
145
  return {
115
146
  open,
147
+ openPreview,
116
148
  };
117
149
  };
118
150
 
119
151
  exports.constructAuthUrl = constructAuthUrl;
152
+ exports.constructPreviewUrl = constructPreviewUrl;
120
153
  exports.useFinchConnect = useFinchConnect;
121
154
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["useRef","useEffect"],"mappings":"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"}
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "..": {
23
23
  "name": "@tryfinch/react-connect",
24
- "version": "4.0.0",
24
+ "version": "4.1.0",
25
25
  "license": "MIT",
26
26
  "devDependencies": {
27
27
  "@rollup/plugin-replace": "^4.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryfinch/react-connect",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "Finch SDK for embedding Finch Connect in API React Single Page Applications (SPA)",
5
5
  "keywords": [
6
6
  "finch",
package/src/index.test.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { constructAuthUrl } from './index';
1
+ import { constructAuthUrl, constructPreviewUrl } from './index';
2
2
 
3
3
  const NOOP_CALLBACKS = {
4
4
  onSuccess: jest.fn(),
@@ -51,4 +51,61 @@ describe('Finch React SDK', () => {
51
51
  expect(authUrl.startsWith('https://cool.site/authorize?')).toBe(true);
52
52
  });
53
53
  });
54
+
55
+ describe('constructPreviewUrl', () => {
56
+ it('sets the preview parameter to true', () => {
57
+ const previewUrl = constructPreviewUrl({
58
+ clientId: 'test-client-id',
59
+ products: ['test-product'],
60
+ });
61
+
62
+ expect(previewUrl).toContain('preview=true');
63
+ });
64
+
65
+ it('sets the client ID parameter', () => {
66
+ const previewUrl = constructPreviewUrl({
67
+ clientId: 'test-client-id',
68
+ products: ['test-product'],
69
+ });
70
+
71
+ expect(previewUrl).toContain('client_id=test-client-id');
72
+ });
73
+
74
+ it('sets the products parameter', () => {
75
+ const previewUrl = constructPreviewUrl({
76
+ clientId: 'test-client-id',
77
+ products: ['test-product', 'test-product-2'],
78
+ });
79
+
80
+ expect(previewUrl).toContain('products=test-product+test-product-2');
81
+ });
82
+
83
+ it('sets a default redirect URI', () => {
84
+ const expectedRedirectUri = encodeURIComponent('https://www.tryfinch.com');
85
+ const previewUrl = constructPreviewUrl({
86
+ clientId: 'test-client-id',
87
+ products: ['test-product'],
88
+ });
89
+
90
+ expect(previewUrl).toContain(`redirect_uri=${expectedRedirectUri}`);
91
+ });
92
+
93
+ it('adds all the expected base parameters to the auth URL', () => {
94
+ const expectedParameters = {
95
+ app_type: 'spa',
96
+ sdk_host_url: encodeURIComponent('http://localhost'),
97
+ mode: 'employer',
98
+ sdk_version: 'react-SDK_VERSION',
99
+ };
100
+
101
+ const authUrl = constructPreviewUrl({
102
+ clientId: 'test-client-id',
103
+ products: ['test-product'],
104
+ });
105
+
106
+ Object.entries(expectedParameters).forEach(([key, value]) => {
107
+ expect(authUrl).toContain(`${key}=${value}`);
108
+ });
109
+ });
110
+ });
54
111
  });
package/src/index.ts CHANGED
@@ -29,8 +29,15 @@ export type ConnectLaunchArgs = {
29
29
  zIndex?: number;
30
30
  };
31
31
 
32
+ export type ConnectPreviewLaunchArgs = {
33
+ clientId: string;
34
+ products: string[];
35
+ };
36
+
32
37
  type OpenFn = (args: ConnectLaunchArgs) => void;
33
38
 
39
+ type OpenPreviewFn = (args: ConnectPreviewLaunchArgs) => void;
40
+
34
41
  const POST_MESSAGE_NAME = 'finch-auth-message-v2' as const;
35
42
 
36
43
  type FinchConnectAuthMessage = { name: typeof POST_MESSAGE_NAME } & (
@@ -58,6 +65,15 @@ const BASE_FINCH_CONNECT_URI = 'https://connect.tryfinch.com';
58
65
 
59
66
  const FINCH_CONNECT_IFRAME_ID = 'finch-connect-iframe';
60
67
 
68
+ const appendBaseParams = (url: URL) => {
69
+ url.searchParams.append('app_type', 'spa');
70
+ // The host URL of the SDK. This is used to store the referrer for postMessage purposes
71
+ url.searchParams.append('sdk_host_url', window.location.origin);
72
+ url.searchParams.append('mode', 'employer');
73
+ // replace with actual SDK version by rollup
74
+ url.searchParams.append('sdk_version', 'react-SDK_VERSION');
75
+ };
76
+
61
77
  export const constructAuthUrl = ({
62
78
  sessionId,
63
79
  state,
@@ -72,20 +88,43 @@ export const constructAuthUrl = ({
72
88
  const authUrl = new URL(`${CONNECT_URL}/authorize`);
73
89
 
74
90
  authUrl.searchParams.append('session', sessionId);
75
- authUrl.searchParams.append('app_type', 'spa');
76
- /** The host URL of the SDK. This is used to store the referrer for postMessage purposes */
77
- authUrl.searchParams.append('sdk_host_url', window.location.origin);
78
- authUrl.searchParams.append('mode', 'employer');
79
91
  if (state) authUrl.searchParams.append('state', state);
80
- // replace with actual SDK version by rollup
81
- authUrl.searchParams.append('sdk_version', 'react-SDK_VERSION');
92
+
93
+ appendBaseParams(authUrl);
82
94
 
83
95
  return authUrl.href;
84
96
  };
85
97
 
98
+ export const constructPreviewUrl = ({
99
+ clientId,
100
+ products,
101
+ apiConfig,
102
+ }: {
103
+ clientId: string;
104
+ products: string[];
105
+ apiConfig?: ApiConfig;
106
+ }) => {
107
+ const CONNECT_URL = apiConfig?.connectUrl || BASE_FINCH_CONNECT_URI;
108
+
109
+ const previewUrl = new URL(`${CONNECT_URL}/authorize`);
110
+
111
+ previewUrl.searchParams.append('preview', 'true');
112
+ previewUrl.searchParams.append('client_id', clientId);
113
+ previewUrl.searchParams.append('products', (products ?? []).join(' '));
114
+ // This will be replaced by a universally allowed redirect URI in the backend
115
+ // We won't ever redirect to anything in preview mode, so we just need a value to pass validation
116
+ previewUrl.searchParams.append('redirect_uri', 'https://www.tryfinch.com');
117
+
118
+ appendBaseParams(previewUrl);
119
+
120
+ return previewUrl.href;
121
+ };
122
+
86
123
  let isUseFinchConnectInitialized = false;
87
124
 
88
- export const useFinchConnect = (initializeArgs: ConnectInitializeArgs): { open: OpenFn } => {
125
+ export const useFinchConnect = (
126
+ initializeArgs: ConnectInitializeArgs
127
+ ): { open: OpenFn; openPreview: OpenPreviewFn } => {
89
128
  const isHookMounted = useRef(false);
90
129
 
91
130
  useEffect(() => {
@@ -102,18 +141,20 @@ export const useFinchConnect = (initializeArgs: ConnectInitializeArgs): { open:
102
141
  }
103
142
  }, []);
104
143
 
105
- const open: OpenFn = (launchArgs) => {
144
+ const createAndAttachIFrame = ({
145
+ src,
146
+ zIndexOverride,
147
+ }: {
148
+ src: string;
149
+ zIndexOverride?: number;
150
+ }) => {
106
151
  if (!document.getElementById(FINCH_CONNECT_IFRAME_ID)) {
107
152
  const iframe = document.createElement('iframe');
108
- iframe.src = constructAuthUrl({
109
- sessionId: launchArgs.sessionId,
110
- state: launchArgs.state,
111
- apiConfig: initializeArgs.apiConfig,
112
- });
153
+ iframe.src = src;
113
154
  iframe.frameBorder = '0';
114
155
  iframe.id = FINCH_CONNECT_IFRAME_ID;
115
156
  iframe.style.position = 'fixed';
116
- iframe.style.zIndex = launchArgs.zIndex?.toString() || '999';
157
+ iframe.style.zIndex = zIndexOverride?.toString() || '999';
117
158
  iframe.style.height = '100%';
118
159
  iframe.style.width = '100%';
119
160
  iframe.style.top = '0';
@@ -125,6 +166,31 @@ export const useFinchConnect = (initializeArgs: ConnectInitializeArgs): { open:
125
166
  }
126
167
  };
127
168
 
169
+ const open: OpenFn = (launchArgs) => {
170
+ const iframeSrc = constructAuthUrl({
171
+ sessionId: launchArgs.sessionId,
172
+ state: launchArgs.state,
173
+ apiConfig: initializeArgs.apiConfig,
174
+ });
175
+
176
+ createAndAttachIFrame({
177
+ src: iframeSrc,
178
+ zIndexOverride: launchArgs.zIndex,
179
+ });
180
+ };
181
+
182
+ const openPreview: OpenPreviewFn = (launchArgs) => {
183
+ const iframeSrc = constructPreviewUrl({
184
+ clientId: launchArgs.clientId,
185
+ products: launchArgs.products,
186
+ apiConfig: initializeArgs.apiConfig,
187
+ });
188
+
189
+ createAndAttachIFrame({
190
+ src: iframeSrc,
191
+ });
192
+ };
193
+
128
194
  const close = () => {
129
195
  const frameToRemove = document.getElementById(FINCH_CONNECT_IFRAME_ID);
130
196
  if (frameToRemove) {
@@ -182,5 +248,6 @@ export const useFinchConnect = (initializeArgs: ConnectInitializeArgs): { open:
182
248
 
183
249
  return {
184
250
  open,
251
+ openPreview,
185
252
  };
186
253
  };