@stripe/connect-js 3.3.23-preview-1 → 3.3.23

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/pure.js CHANGED
@@ -9,13 +9,6 @@ const ConnectElementCommonMethodConfig = {
9
9
  setOnLoaderStart: _listener => {}
10
10
  };
11
11
  const ConnectElementCustomMethodConfig = {
12
- payments: {
13
- setDefaultFilters: _filters => {}
14
- },
15
- "payment-details": {
16
- setPayment: _payment => {},
17
- setOnClose: _listener => {}
18
- },
19
12
  "account-onboarding": {
20
13
  setFullTermsOfServiceUrl: _termOfServiceUrl => {},
21
14
  setRecipientTermsOfServiceUrl: _recipientTermsOfServiceUrl => {},
@@ -49,46 +42,12 @@ const ConnectElementCustomMethodConfig = {
49
42
  "financial-account-transactions": {
50
43
  setFinancialAccount: _financialAccount => {}
51
44
  },
52
- recipients: {
53
- setDataSource: _dataSource => {}
54
- },
55
- "app-install": {
56
- setApp: _app => {},
57
- setOnAppInstallStateFetched: _listener => {},
58
- setOnAppInstallStateChanged: _listener => {}
59
- },
60
- "app-viewport": {
61
- setApp: _app => {},
62
- setAppData: _appData => {}
63
- },
64
- "payment-method-settings": {
65
- setPaymentMethodConfiguration: _paymentMethodConfiguration => {}
66
- },
67
- "capital-financing": {
68
- setDefaultFinancingOffer: _defaultFinancingOffer => {},
69
- setShowFinancingSelector: _showFinancingSelector => {},
70
- setHowCapitalWorksUrl: _howCapitalWorksUrl => {},
71
- setSupportUrl: _supportUrl => {},
72
- setOnFinancingsLoaded: _listener => {}
73
- },
74
- "capital-financing-application": {
75
- setOnApplicationSubmitted: _listener => {},
76
- setPrivacyPolicyUrl: _privacyPolicyUrl => {},
77
- setHowCapitalWorksUrl: _howCapitalWorksUrl => {}
78
- },
79
- "capital-financing-promotion": {
80
- setLayout: _layout => {},
81
- setOnApplicationSubmitted: _listener => {},
82
- setOnEligibleFinancingOfferLoaded: _listener => {},
83
- setPrivacyPolicyUrl: _privacyPolicyUrl => {},
84
- setHowCapitalWorksUrl: _howCapitalWorksUrl => {},
85
- setEligibilityCriteriaUrl: _eligibilityCriteriaUrl => {}
45
+ payments: {
46
+ setDefaultFilters: _filters => {}
86
47
  },
87
- "reporting-chart": {
88
- setReportName: _reportName => {},
89
- setIntervalStart: _intervalStart => {},
90
- setIntervalEnd: _intervalEnd => {},
91
- setIntervalType: _intervalType => {}
48
+ "payment-details": {
49
+ setPayment: _payment => {},
50
+ setOnClose: _listener => {}
92
51
  },
93
52
  "tax-settings": {
94
53
  setHideProductTaxCodeSelector: _hidden => {},
@@ -102,37 +61,27 @@ const ConnectElementCustomMethodConfig = {
102
61
  };
103
62
 
104
63
  const componentNameMapping = {
64
+ "account-onboarding": "stripe-connect-account-onboarding",
105
65
  payments: "stripe-connect-payments",
106
- payouts: "stripe-connect-payouts",
107
66
  "payment-details": "stripe-connect-payment-details",
108
- "account-onboarding": "stripe-connect-account-onboarding",
109
- "payment-method-settings": "stripe-connect-payment-method-settings",
67
+ payouts: "stripe-connect-payouts",
68
+ "payouts-list": "stripe-connect-payouts-list",
69
+ balances: "stripe-connect-balances",
110
70
  "account-management": "stripe-connect-account-management",
111
71
  "notification-banner": "stripe-connect-notification-banner",
112
- "instant-payouts": "stripe-connect-instant-payouts",
113
72
  "issuing-card": "stripe-connect-issuing-card",
114
73
  "issuing-cards-list": "stripe-connect-issuing-cards-list",
115
74
  "financial-account": "stripe-connect-financial-account",
116
- recipients: "stripe-connect-recipients",
117
75
  "financial-account-transactions": "stripe-connect-financial-account-transactions",
118
- "capital-financing": "stripe-connect-capital-financing",
119
- "capital-financing-application": "stripe-connect-capital-financing-application",
120
- "capital-financing-promotion": "stripe-connect-capital-financing-promotion",
121
- "capital-overview": "stripe-connect-capital-overview",
122
76
  documents: "stripe-connect-documents",
123
77
  "tax-registrations": "stripe-connect-tax-registrations",
124
- "tax-settings": "stripe-connect-tax-settings",
125
- balances: "stripe-connect-balances",
126
- "payouts-list": "stripe-connect-payouts-list",
127
- "app-install": "stripe-connect-app-install",
128
- "app-viewport": "stripe-connect-app-viewport",
129
- "reporting-chart": "stripe-connect-reporting-chart"
78
+ "tax-settings": "stripe-connect-tax-settings"
130
79
  };
131
80
  const EXISTING_SCRIPT_MESSAGE = "loadConnect was called but an existing Connect.js script already exists in the document; existing script parameters will be used";
132
81
  const V0_URL = "https://connect-js.stripe.com/v0.1/connect.js";
133
82
  const V1_URL = "https://connect-js.stripe.com/v1.0/connect.js";
134
83
  const findScript = () => {
135
- return document.querySelectorAll(`script[src="${V0_URL}"]`)[0] || document.querySelectorAll(`script[src="${V1_URL}"]`)[0] || null;
84
+ return document.querySelectorAll(`script[src="${V1_URL}"]`)[0] || document.querySelectorAll(`script[src="${V0_URL}"]`)[0] || null;
136
85
  };
137
86
  const injectScript = () => {
138
87
  const script = document.createElement("script");
@@ -145,6 +94,13 @@ const injectScript = () => {
145
94
  return script;
146
95
  };
147
96
  let stripePromise = null;
97
+ const isWindowStripeConnectDefined = stripeConnect => {
98
+ // We only consider `StripeConnect` defined if `init` is a function
99
+ // Why? HTML markup like:
100
+ // <a id="StripeConnect"><a id="StripeConnect" name="init" href="stripe"></a></a> in the <head> of the page
101
+ // can end up "contaminating" the window.StripeConnect object and cause issues in connect.js initialization
102
+ return !!(stripeConnect && typeof stripeConnect === "object" && "init" in stripeConnect && typeof stripeConnect.init === "function");
103
+ };
148
104
  const loadScript = () => {
149
105
  // Ensure that we only attempt to load Connect.js at most once
150
106
  if (stripePromise !== null) {
@@ -155,10 +111,8 @@ const loadScript = () => {
155
111
  reject("ConnectJS won't load when rendering code in the server - it can only be loaded on a browser. This error is expected when loading ConnectJS in SSR environments, like NextJS. It will have no impact in the UI, however if you wish to avoid it, you can switch to the `pure` version of the connect.js loader: https://github.com/stripe/connect-js#importing-loadconnect-without-side-effects.");
156
112
  return;
157
113
  }
158
- if (window.StripeConnect) {
114
+ if (isWindowStripeConnectDefined(window.StripeConnect)) {
159
115
  console.warn(EXISTING_SCRIPT_MESSAGE);
160
- }
161
- if (window.StripeConnect) {
162
116
  const wrapper = createWrapper(window.StripeConnect);
163
117
  resolve(wrapper);
164
118
  return;
@@ -171,7 +125,7 @@ const loadScript = () => {
171
125
  script = injectScript();
172
126
  }
173
127
  script.addEventListener("load", () => {
174
- if (window.StripeConnect) {
128
+ if (isWindowStripeConnectDefined(window.StripeConnect)) {
175
129
  const wrapper = createWrapper(window.StripeConnect);
176
130
  resolve(wrapper);
177
131
  } else {
@@ -269,7 +223,7 @@ const createWrapper = stripeConnect => {
269
223
  sdk: true,
270
224
  sdkOptions: {
271
225
  // This will be replaced by the npm package version when bundling
272
- sdkVersion: "3.3.23-preview-1"
226
+ sdkVersion: "3.3.23"
273
227
  }
274
228
  })
275
229
  }));
@@ -1,2 +1,2 @@
1
- import { LoadConnectAndInitialize } from "./shared";
1
+ import type { LoadConnectAndInitialize } from "./shared";
2
2
  export declare const loadConnectAndInitialize: LoadConnectAndInitialize;
@@ -1,2 +1,2 @@
1
- import { LoadConnectAndInitialize } from "./shared";
1
+ import type { LoadConnectAndInitialize } from "./shared";
2
2
  export declare const loadConnectAndInitialize: LoadConnectAndInitialize;
@@ -1,6 +1,6 @@
1
- import { IStripeConnectInitParams, StripeConnectInstance, ConnectElementTagName } from "../types";
1
+ import type { IStripeConnectInitParams, StripeConnectInstance, ConnectElementTagName } from "../types";
2
2
  export type LoadConnectAndInitialize = (initParams: IStripeConnectInitParams) => StripeConnectInstance;
3
- export type ConnectElementHTMLName = "stripe-connect-payments" | "stripe-connect-payouts" | "stripe-connect-payment-details" | "stripe-connect-account-onboarding" | "stripe-connect-payment-method-settings" | "stripe-connect-account-management" | "stripe-connect-notification-banner" | "stripe-connect-instant-payouts" | "stripe-connect-issuing-card" | "stripe-connect-issuing-cards-list" | "stripe-connect-financial-account" | "stripe-connect-financial-account-transactions" | "stripe-connect-recipients" | "stripe-connect-capital-financing" | "stripe-connect-capital-financing-application" | "stripe-connect-capital-financing-promotion" | "stripe-connect-capital-overview" | "stripe-connect-documents" | "stripe-connect-tax-registrations" | "stripe-connect-tax-settings" | "stripe-connect-balances" | "stripe-connect-payouts-list" | "stripe-connect-app-install" | "stripe-connect-app-viewport" | "stripe-connect-reporting-chart";
3
+ type ConnectElementHTMLName = "stripe-connect-account-onboarding" | "stripe-connect-payments" | "stripe-connect-payment-details" | "stripe-connect-account-management" | "stripe-connect-notification-banner" | "stripe-connect-issuing-card" | "stripe-connect-issuing-cards-list" | "stripe-connect-financial-account" | "stripe-connect-financial-account-transactions" | "stripe-connect-payouts" | "stripe-connect-payouts-list" | "stripe-connect-balances" | "stripe-connect-documents" | "stripe-connect-tax-registrations" | "stripe-connect-tax-settings";
4
4
  export declare const componentNameMapping: Record<ConnectElementTagName, ConnectElementHTMLName>;
5
5
  type StripeConnectInstanceExtended = StripeConnectInstance & {
6
6
  debugInstance: () => Promise<StripeConnectInstance>;
@@ -9,6 +9,7 @@ interface StripeConnectWrapper {
9
9
  initialize: (params: IStripeConnectInitParams) => StripeConnectInstance;
10
10
  }
11
11
  export declare const findScript: () => HTMLScriptElement | null;
12
+ export declare const isWindowStripeConnectDefined: (stripeConnect: unknown) => boolean;
12
13
  export declare const loadScript: () => Promise<StripeConnectWrapper>;
13
14
  export declare const initStripeConnect: (stripePromise: Promise<StripeConnectWrapper>, initParams: IStripeConnectInitParams) => StripeConnectInstanceExtended;
14
15
  export {};
@@ -42,10 +42,6 @@ export type NotificationCount = {
42
42
  total: number;
43
43
  actionRequired: number;
44
44
  };
45
- export type InstallState = {
46
- appId: string;
47
- state: "INSTALLED" | "UNINSTALLED";
48
- };
49
45
  export type LoaderStart = {
50
46
  elementTagName: string;
51
47
  };
@@ -60,14 +56,6 @@ export type EmbeddedError = {
60
56
  type: EmbeddedErrorType;
61
57
  message?: string;
62
58
  };
63
- export type FinancingProductType = {
64
- productType: "standard" | "refill" | "none";
65
- activeFinancingCount: number;
66
- };
67
- export type FinancingPromotionLayoutType = "full" | "banner";
68
- export type IntervalType = "day" | "week" | "month" | "quarter" | "year";
69
- export type ReportName = "gross_volume" | "net_volume";
70
- export type RecipientDataSource = "customers";
71
59
  export type EmbeddedErrorType =
72
60
  /**
73
61
  * Failure to connect to Stripe's API.
@@ -98,13 +86,6 @@ export declare const ConnectElementCommonMethodConfig: {
98
86
  setOnLoaderStart: (_listener: (({ elementTagName }: LoaderStart) => void) | undefined) => void;
99
87
  };
100
88
  export declare const ConnectElementCustomMethodConfig: {
101
- payments: {
102
- setDefaultFilters: (_filters: PaymentsListDefaultFilters | undefined) => void;
103
- };
104
- "payment-details": {
105
- setPayment: (_payment: string | undefined) => void;
106
- setOnClose: (_listener: (() => void) | undefined) => void;
107
- };
108
89
  "account-onboarding": {
109
90
  setFullTermsOfServiceUrl: (_termOfServiceUrl: string | undefined) => void;
110
91
  setRecipientTermsOfServiceUrl: (_recipientTermsOfServiceUrl: string | undefined) => void;
@@ -138,48 +119,12 @@ export declare const ConnectElementCustomMethodConfig: {
138
119
  "financial-account-transactions": {
139
120
  setFinancialAccount: (_financialAccount: string) => void;
140
121
  };
141
- recipients: {
142
- setDataSource: (_dataSource: RecipientDataSource) => void;
143
- };
144
- "app-install": {
145
- setApp: (_app: string | undefined) => void;
146
- setOnAppInstallStateFetched: (_listener: (({ appId, state }: InstallState) => void) | undefined) => void;
147
- setOnAppInstallStateChanged: (_listener: (({ appId, state }: InstallState) => void) | undefined) => void;
148
- };
149
- "app-viewport": {
150
- setApp: (_app: string | undefined) => void;
151
- setAppData: (_appData: Record<string, string> | undefined) => void;
152
- };
153
- "payment-method-settings": {
154
- setPaymentMethodConfiguration: (_paymentMethodConfiguration: string | undefined) => void;
155
- };
156
- "capital-financing": {
157
- setDefaultFinancingOffer: (_defaultFinancingOffer: string | undefined) => void;
158
- setShowFinancingSelector: (_showFinancingSelector: boolean | undefined) => void;
159
- setHowCapitalWorksUrl: (_howCapitalWorksUrl: string | undefined) => void;
160
- setSupportUrl: (_supportUrl: string | undefined) => void;
161
- setOnFinancingsLoaded: (_listener: (({ total }: {
162
- total: number;
163
- }) => void) | undefined) => void;
164
- };
165
- "capital-financing-application": {
166
- setOnApplicationSubmitted: (_listener: (() => void) | undefined) => void;
167
- setPrivacyPolicyUrl: (_privacyPolicyUrl: string | undefined) => void;
168
- setHowCapitalWorksUrl: (_howCapitalWorksUrl: string | undefined) => void;
169
- };
170
- "capital-financing-promotion": {
171
- setLayout: (_layout: FinancingPromotionLayoutType | undefined) => void;
172
- setOnApplicationSubmitted: (_listener: (() => void) | undefined) => void;
173
- setOnEligibleFinancingOfferLoaded: (_listener: (({ productType, activeFinancingCount }: FinancingProductType) => void) | undefined) => void;
174
- setPrivacyPolicyUrl: (_privacyPolicyUrl: string | undefined) => void;
175
- setHowCapitalWorksUrl: (_howCapitalWorksUrl: string | undefined) => void;
176
- setEligibilityCriteriaUrl: (_eligibilityCriteriaUrl: string | undefined) => void;
122
+ payments: {
123
+ setDefaultFilters: (_filters: PaymentsListDefaultFilters | undefined) => void;
177
124
  };
178
- "reporting-chart": {
179
- setReportName: (_reportName: ReportName) => void;
180
- setIntervalStart: (_intervalStart: Date | undefined) => void;
181
- setIntervalEnd: (_intervalEnd: Date | undefined) => void;
182
- setIntervalType: (_intervalType: IntervalType | undefined) => void;
125
+ "payment-details": {
126
+ setPayment: (_payment: string | undefined) => void;
127
+ setOnClose: (_listener: (() => void) | undefined) => void;
183
128
  };
184
129
  "tax-settings": {
185
130
  setHideProductTaxCodeSelector: (_hidden: boolean | undefined) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stripe/connect-js",
3
- "version": "3.3.23-preview-1",
3
+ "version": "3.3.23",
4
4
  "description": "Connect.js loading utility package",
5
5
  "main": "dist/connect.js",
6
6
  "module": "dist/connect.esm.js",
@@ -11,6 +11,7 @@
11
11
  "test:unit": "jest",
12
12
  "test:types": "zx ./tests/types/scripts/test.mjs",
13
13
  "lint": "eslint '{src,types}/**/*.{ts,js}' && yarn prettier-check",
14
+ "lint-fix": "eslint '{src,types}/**/*.{ts,js}' --fix && yarn prettier-check",
14
15
  "typecheck": "tsc --noEmit",
15
16
  "build": "yarn clean && rollup -c",
16
17
  "validate-change": "yarn run test",
@@ -45,21 +46,24 @@
45
46
  "@rollup/plugin-json": "^6.0.0",
46
47
  "@rollup/plugin-replace": "^2.3.1",
47
48
  "@types/jest": "^24.0.25",
48
- "@typescript-eslint/eslint-plugin": "^4.15.2",
49
- "@typescript-eslint/parser": "^4.15.2",
49
+ "@typescript-eslint/eslint-plugin": "^7",
50
+ "@typescript-eslint/parser": "^7",
51
+ "@typescript-eslint/rule-tester": "^7",
52
+ "@typescript-eslint/scope-manager": "^7",
53
+ "@typescript-eslint/utils": "^7",
50
54
  "babel-eslint": "^10.0.3",
51
55
  "babel-jest": "^24.9.0",
52
56
  "conditional-type-checks": "^1.0.5",
53
- "eslint": "^6.8.0",
54
- "eslint-config-prettier": "^6.8.0",
55
- "eslint-plugin-import": "^2.18.2",
56
- "eslint-plugin-jest": "^22.6.3",
57
- "eslint-plugin-prettier": "^3.1.1",
57
+ "eslint": "8.56.0",
58
+ "eslint-config-prettier": "^8.3.0",
59
+ "eslint-plugin-import": "^2.20.1",
60
+ "eslint-plugin-jest": "^26.6.0",
61
+ "eslint-plugin-prettier": "^4.2.1",
58
62
  "jest": "^29.5.0",
59
63
  "jest-environment-jsdom": "^29.5.0",
60
- "prettier": "^1.19.1",
64
+ "prettier": "2.8.8",
61
65
  "rimraf": "^2.6.2",
62
- "rollup": "^1.29.0",
66
+ "rollup": "^2.79.2",
63
67
  "rollup-plugin-babel": "^4.4.0",
64
68
  "rollup-plugin-typescript2": "^0.25.3",
65
69
  "ts-jest": "^29.1.0",
package/src/index.ts CHANGED
@@ -1,9 +1,6 @@
1
- import { IStripeConnectInitParams, StripeConnectInstance } from "../types";
2
- import {
3
- loadScript,
4
- initStripeConnect,
5
- LoadConnectAndInitialize
6
- } from "./shared";
1
+ import type { IStripeConnectInitParams, StripeConnectInstance } from "../types";
2
+ import type { LoadConnectAndInitialize } from "./shared";
3
+ import { loadScript, initStripeConnect } from "./shared";
7
4
 
8
5
  // Execute our own script injection after a tick to give users time to do their
9
6
  // own script injection.
package/src/pure.test.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-var-requires */
2
2
 
3
- import { IStripeConnectInitParams } from "../types";
3
+ import type { IStripeConnectInitParams } from "../types";
4
4
  import { SCRIPT_SELECTOR } from "./utils/jestHelpers";
5
5
 
6
6
  describe("pure module", () => {
@@ -16,7 +16,7 @@ describe("pure module", () => {
16
16
  publishableKey: "pk_123",
17
17
  fetchClientSecret: async () => {
18
18
  return "secret_123";
19
- }
19
+ },
20
20
  };
21
21
  loadConnectAndInitialize(mockInitParams);
22
22
 
package/src/pure.ts CHANGED
@@ -1,9 +1,6 @@
1
- import { IStripeConnectInitParams, StripeConnectInstance } from "../types";
2
- import {
3
- loadScript,
4
- initStripeConnect,
5
- LoadConnectAndInitialize
6
- } from "./shared";
1
+ import type { IStripeConnectInitParams, StripeConnectInstance } from "../types";
2
+ import type { LoadConnectAndInitialize } from "./shared";
3
+ import { loadScript, initStripeConnect } from "./shared";
7
4
 
8
5
  export const loadConnectAndInitialize: LoadConnectAndInitialize = (
9
6
  initParams: IStripeConnectInitParams
package/src/shared.ts CHANGED
@@ -1,76 +1,55 @@
1
- import {
1
+ import type {
2
2
  IStripeConnectInitParams,
3
3
  StripeConnectInstance,
4
4
  ConnectElementTagName,
5
- ConnectHTMLElementRecord
5
+ ConnectHTMLElementRecord,
6
6
  } from "../types";
7
7
  import {
8
8
  ConnectElementCommonMethodConfig,
9
- ConnectElementCustomMethodConfig
9
+ ConnectElementCustomMethodConfig,
10
10
  } from "../types/config";
11
11
 
12
12
  export type LoadConnectAndInitialize = (
13
13
  initParams: IStripeConnectInitParams
14
14
  ) => StripeConnectInstance;
15
15
 
16
- export type ConnectElementHTMLName =
16
+ type ConnectElementHTMLName =
17
+ | "stripe-connect-account-onboarding"
17
18
  | "stripe-connect-payments"
18
- | "stripe-connect-payouts"
19
19
  | "stripe-connect-payment-details"
20
- | "stripe-connect-account-onboarding"
21
- | "stripe-connect-payment-method-settings"
22
20
  | "stripe-connect-account-management"
23
21
  | "stripe-connect-notification-banner"
24
- | "stripe-connect-instant-payouts"
25
22
  | "stripe-connect-issuing-card"
26
23
  | "stripe-connect-issuing-cards-list"
27
24
  | "stripe-connect-financial-account"
28
25
  | "stripe-connect-financial-account-transactions"
29
- | "stripe-connect-recipients"
30
- | "stripe-connect-capital-financing"
31
- | "stripe-connect-capital-financing-application"
32
- | "stripe-connect-capital-financing-promotion"
33
- | "stripe-connect-capital-overview"
26
+ | "stripe-connect-payouts"
27
+ | "stripe-connect-payouts-list"
28
+ | "stripe-connect-balances"
34
29
  | "stripe-connect-documents"
35
30
  | "stripe-connect-tax-registrations"
36
- | "stripe-connect-tax-settings"
37
- | "stripe-connect-balances"
38
- | "stripe-connect-payouts-list"
39
- | "stripe-connect-app-install"
40
- | "stripe-connect-app-viewport"
41
- | "stripe-connect-reporting-chart";
31
+ | "stripe-connect-tax-settings";
42
32
 
43
33
  export const componentNameMapping: Record<
44
34
  ConnectElementTagName,
45
35
  ConnectElementHTMLName
46
36
  > = {
37
+ "account-onboarding": "stripe-connect-account-onboarding",
47
38
  payments: "stripe-connect-payments",
48
- payouts: "stripe-connect-payouts",
49
39
  "payment-details": "stripe-connect-payment-details",
50
- "account-onboarding": "stripe-connect-account-onboarding",
51
- "payment-method-settings": "stripe-connect-payment-method-settings",
40
+ payouts: "stripe-connect-payouts",
41
+ "payouts-list": "stripe-connect-payouts-list",
42
+ balances: "stripe-connect-balances",
52
43
  "account-management": "stripe-connect-account-management",
53
44
  "notification-banner": "stripe-connect-notification-banner",
54
- "instant-payouts": "stripe-connect-instant-payouts",
55
45
  "issuing-card": "stripe-connect-issuing-card",
56
46
  "issuing-cards-list": "stripe-connect-issuing-cards-list",
57
47
  "financial-account": "stripe-connect-financial-account",
58
- recipients: "stripe-connect-recipients",
59
48
  "financial-account-transactions":
60
49
  "stripe-connect-financial-account-transactions",
61
- "capital-financing": "stripe-connect-capital-financing",
62
- "capital-financing-application":
63
- "stripe-connect-capital-financing-application",
64
- "capital-financing-promotion": "stripe-connect-capital-financing-promotion",
65
- "capital-overview": "stripe-connect-capital-overview",
66
50
  documents: "stripe-connect-documents",
67
51
  "tax-registrations": "stripe-connect-tax-registrations",
68
52
  "tax-settings": "stripe-connect-tax-settings",
69
- balances: "stripe-connect-balances",
70
- "payouts-list": "stripe-connect-payouts-list",
71
- "app-install": "stripe-connect-app-install",
72
- "app-viewport": "stripe-connect-app-viewport",
73
- "reporting-chart": "stripe-connect-reporting-chart"
74
53
  };
75
54
 
76
55
  type StripeConnectInstanceExtended = StripeConnectInstance & {
@@ -89,10 +68,10 @@ const V1_URL = "https://connect-js.stripe.com/v1.0/connect.js";
89
68
  export const findScript = (): HTMLScriptElement | null => {
90
69
  return (
91
70
  document.querySelectorAll<HTMLScriptElement>(
92
- `script[src="${V0_URL}"]`
71
+ `script[src="${V1_URL}"]`
93
72
  )[0] ||
94
73
  document.querySelectorAll<HTMLScriptElement>(
95
- `script[src="${V1_URL}"]`
74
+ `script[src="${V0_URL}"]`
96
75
  )[0] ||
97
76
  null
98
77
  );
@@ -117,6 +96,19 @@ const injectScript = (): HTMLScriptElement => {
117
96
 
118
97
  let stripePromise: Promise<StripeConnectWrapper> | null = null;
119
98
 
99
+ export const isWindowStripeConnectDefined = (stripeConnect: unknown) => {
100
+ // We only consider `StripeConnect` defined if `init` is a function
101
+ // Why? HTML markup like:
102
+ // <a id="StripeConnect"><a id="StripeConnect" name="init" href="stripe"></a></a> in the <head> of the page
103
+ // can end up "contaminating" the window.StripeConnect object and cause issues in connect.js initialization
104
+ return !!(
105
+ stripeConnect &&
106
+ typeof stripeConnect === "object" &&
107
+ "init" in stripeConnect &&
108
+ typeof stripeConnect.init === "function"
109
+ );
110
+ };
111
+
120
112
  export const loadScript = (): Promise<StripeConnectWrapper> => {
121
113
  // Ensure that we only attempt to load Connect.js at most once
122
114
  if (stripePromise !== null) {
@@ -131,11 +123,8 @@ export const loadScript = (): Promise<StripeConnectWrapper> => {
131
123
  return;
132
124
  }
133
125
 
134
- if ((window as any).StripeConnect) {
126
+ if (isWindowStripeConnectDefined((window as any).StripeConnect)) {
135
127
  console.warn(EXISTING_SCRIPT_MESSAGE);
136
- }
137
-
138
- if ((window as any).StripeConnect) {
139
128
  const wrapper = createWrapper((window as any).StripeConnect);
140
129
  resolve(wrapper);
141
130
  return;
@@ -151,7 +140,7 @@ export const loadScript = (): Promise<StripeConnectWrapper> => {
151
140
  }
152
141
 
153
142
  script.addEventListener("load", () => {
154
- if ((window as any).StripeConnect) {
143
+ if (isWindowStripeConnectDefined((window as any).StripeConnect)) {
155
144
  const wrapper = createWrapper((window as any).StripeConnect);
156
145
  resolve(wrapper);
157
146
  } else {
@@ -188,18 +177,18 @@ export const initStripeConnect = (
188
177
  }
189
178
  })();
190
179
  const metaOptions = (initParams as any).metaOptions ?? {};
191
- const stripeConnectInstance = stripePromise.then(wrapper =>
180
+ const stripeConnectInstance = stripePromise.then((wrapper) =>
192
181
  wrapper.initialize({
193
182
  ...initParams,
194
- metaOptions: { ...metaOptions, eagerClientSecretPromise }
183
+ metaOptions: { ...metaOptions, eagerClientSecretPromise },
195
184
  } as any)
196
185
  );
197
186
 
198
187
  return {
199
- create: tagName => {
188
+ create: (tagName) => {
200
189
  let htmlName = componentNameMapping[tagName];
201
190
  if (!htmlName) {
202
- htmlName = (tagName as unknown) as ConnectElementHTMLName;
191
+ htmlName = tagName as unknown as ConnectElementHTMLName;
203
192
  }
204
193
  const element = document.createElement(htmlName);
205
194
 
@@ -208,14 +197,14 @@ export const initStripeConnect = (
208
197
  : {};
209
198
  const methods = { ...customMethods, ...ConnectElementCommonMethodConfig };
210
199
  for (const method in methods) {
211
- (element as any)[method] = function(value: any) {
200
+ (element as any)[method] = function (value: any) {
212
201
  stripeConnectInstance.then(() => {
213
202
  this[`${method}InternalOnly`](value);
214
203
  });
215
204
  };
216
205
  }
217
206
 
218
- stripeConnectInstance.then(instance => {
207
+ stripeConnectInstance.then((instance) => {
219
208
  if (!element.isConnected && !(element as any).setConnector) {
220
209
  // If the element is not connected to the DOM and the `setConnector` method is not
221
210
  // defined, this indicates the element was created before connect.js was loaded, and has
@@ -243,8 +232,8 @@ export const initStripeConnect = (
243
232
 
244
233
  return element as ConnectHTMLElementRecord[typeof tagName];
245
234
  },
246
- update: updateOptions => {
247
- stripeConnectInstance.then(instance => {
235
+ update: (updateOptions) => {
236
+ stripeConnectInstance.then((instance) => {
248
237
  instance.update(updateOptions);
249
238
  });
250
239
  },
@@ -252,10 +241,10 @@ export const initStripeConnect = (
252
241
  return stripeConnectInstance;
253
242
  },
254
243
  logout: () => {
255
- return stripeConnectInstance.then(instance => {
244
+ return stripeConnectInstance.then((instance) => {
256
245
  return instance.logout();
257
246
  });
258
- }
247
+ },
259
248
  };
260
249
  };
261
250
 
@@ -272,12 +261,12 @@ const createWrapper = (stripeConnect: any) => {
272
261
  sdk: true,
273
262
  sdkOptions: {
274
263
  // This will be replaced by the npm package version when bundling
275
- sdkVersion: "_NPM_PACKAGE_VERSION_"
276
- }
277
- }
264
+ sdkVersion: "_NPM_PACKAGE_VERSION_",
265
+ },
266
+ },
278
267
  });
279
268
  return stripeConnectInstance;
280
- }
269
+ },
281
270
  };
282
271
  return wrapper;
283
272
  };
package/types/checks.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ConnectElementCustomMethodConfig } from "./config";
2
- import { ConnectElementTagName } from "./shared.d";
1
+ import type { ConnectElementCustomMethodConfig } from "./config";
2
+ import type { ConnectElementTagName } from "./shared.d";
3
3
 
4
4
  // ensure that keys of ConnectElementCustomMethodConfig are from ConnectElementTagName
5
5
  export type HasType<T, Q extends T> = Q;