@stripe/connect-js 3.3.25-preview-1 → 3.3.26

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 => {},
@@ -32,6 +25,10 @@ const ConnectElementCustomMethodConfig = {
32
25
  setCollectionOptions: _collectionOptions => {},
33
26
  setOnNotificationsChange: _listener => {}
34
27
  },
28
+ "instant-payouts-promotion": {
29
+ setOnInstantPayoutsPromotionLoaded: _listener => {},
30
+ setOnInstantPayoutCreated: _listener => {}
31
+ },
35
32
  "issuing-card": {
36
33
  setDefaultCard: _defaultCard => {},
37
34
  setCardSwitching: _cardSwitching => {},
@@ -49,46 +46,16 @@ const ConnectElementCustomMethodConfig = {
49
46
  "financial-account-transactions": {
50
47
  setFinancialAccount: _financialAccount => {}
51
48
  },
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 => {}
49
+ payments: {
50
+ setDefaultFilters: _filters => {}
78
51
  },
79
- "capital-financing-promotion": {
80
- setLayout: _layout => {},
81
- setOnApplicationSubmitted: _listener => {},
82
- setOnEligibleFinancingOfferLoaded: _listener => {},
83
- setPrivacyPolicyUrl: _privacyPolicyUrl => {},
84
- setHowCapitalWorksUrl: _howCapitalWorksUrl => {},
85
- setEligibilityCriteriaUrl: _eligibilityCriteriaUrl => {}
52
+ "payment-details": {
53
+ setPayment: _payment => {},
54
+ setOnClose: _listener => {}
86
55
  },
87
- "reporting-chart": {
88
- setReportName: _reportName => {},
89
- setIntervalStart: _intervalStart => {},
90
- setIntervalEnd: _intervalEnd => {},
91
- setIntervalType: _intervalType => {}
56
+ "payment-disputes": {
57
+ setPayment: _payment => {},
58
+ setOnDisputesLoaded: _listener => {}
92
59
  },
93
60
  "tax-settings": {
94
61
  setHideProductTaxCodeSelector: _hidden => {},
@@ -98,45 +65,34 @@ const ConnectElementCustomMethodConfig = {
98
65
  "tax-registrations": {
99
66
  setOnAfterTaxRegistrationAdded: _listener => {},
100
67
  setDisplayCountries: _countries => {}
101
- },
102
- "tax-threshold-monitoring": {
103
- setDisplayCountries: _countries => {}
104
68
  }
105
69
  };
106
70
 
107
71
  const componentNameMapping = {
72
+ "account-onboarding": "stripe-connect-account-onboarding",
73
+ "disputes-list": "stripe-connect-disputes-list",
108
74
  payments: "stripe-connect-payments",
109
- payouts: "stripe-connect-payouts",
110
75
  "payment-details": "stripe-connect-payment-details",
111
- "account-onboarding": "stripe-connect-account-onboarding",
112
- "payment-method-settings": "stripe-connect-payment-method-settings",
76
+ "payment-disputes": "stripe-connect-payment-disputes",
77
+ payouts: "stripe-connect-payouts",
78
+ "payouts-list": "stripe-connect-payouts-list",
79
+ balances: "stripe-connect-balances",
113
80
  "account-management": "stripe-connect-account-management",
114
81
  "notification-banner": "stripe-connect-notification-banner",
115
- "instant-payouts": "stripe-connect-instant-payouts",
82
+ "instant-payouts-promotion": "stripe-connect-instant-payouts-promotion",
116
83
  "issuing-card": "stripe-connect-issuing-card",
117
84
  "issuing-cards-list": "stripe-connect-issuing-cards-list",
118
85
  "financial-account": "stripe-connect-financial-account",
119
- recipients: "stripe-connect-recipients",
120
86
  "financial-account-transactions": "stripe-connect-financial-account-transactions",
121
- "capital-financing": "stripe-connect-capital-financing",
122
- "capital-financing-application": "stripe-connect-capital-financing-application",
123
- "capital-financing-promotion": "stripe-connect-capital-financing-promotion",
124
- "capital-overview": "stripe-connect-capital-overview",
125
87
  documents: "stripe-connect-documents",
126
88
  "tax-registrations": "stripe-connect-tax-registrations",
127
- "tax-settings": "stripe-connect-tax-settings",
128
- "tax-threshold-monitoring": "stripe-connect-tax-threshold-monitoring",
129
- balances: "stripe-connect-balances",
130
- "payouts-list": "stripe-connect-payouts-list",
131
- "app-install": "stripe-connect-app-install",
132
- "app-viewport": "stripe-connect-app-viewport",
133
- "reporting-chart": "stripe-connect-reporting-chart"
89
+ "tax-settings": "stripe-connect-tax-settings"
134
90
  };
135
91
  const EXISTING_SCRIPT_MESSAGE = "loadConnect was called but an existing Connect.js script already exists in the document; existing script parameters will be used";
136
92
  const V0_URL = "https://connect-js.stripe.com/v0.1/connect.js";
137
93
  const V1_URL = "https://connect-js.stripe.com/v1.0/connect.js";
138
94
  const findScript = () => {
139
- return document.querySelectorAll(`script[src="${V0_URL}"]`)[0] || document.querySelectorAll(`script[src="${V1_URL}"]`)[0] || null;
95
+ return document.querySelectorAll(`script[src="${V1_URL}"]`)[0] || document.querySelectorAll(`script[src="${V0_URL}"]`)[0] || null;
140
96
  };
141
97
  const injectScript = () => {
142
98
  const script = document.createElement("script");
@@ -149,6 +105,13 @@ const injectScript = () => {
149
105
  return script;
150
106
  };
151
107
  let stripePromise = null;
108
+ const isWindowStripeConnectDefined = stripeConnect => {
109
+ // We only consider `StripeConnect` defined if `init` is a function
110
+ // Why? HTML markup like:
111
+ // <a id="StripeConnect"><a id="StripeConnect" name="init" href="stripe"></a></a> in the <head> of the page
112
+ // can end up "contaminating" the window.StripeConnect object and cause issues in connect.js initialization
113
+ return !!(stripeConnect && typeof stripeConnect === "object" && "init" in stripeConnect && typeof stripeConnect.init === "function");
114
+ };
152
115
  const loadScript = () => {
153
116
  // Ensure that we only attempt to load Connect.js at most once
154
117
  if (stripePromise !== null) {
@@ -159,10 +122,8 @@ const loadScript = () => {
159
122
  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.");
160
123
  return;
161
124
  }
162
- if (window.StripeConnect) {
125
+ if (isWindowStripeConnectDefined(window.StripeConnect)) {
163
126
  console.warn(EXISTING_SCRIPT_MESSAGE);
164
- }
165
- if (window.StripeConnect) {
166
127
  const wrapper = createWrapper(window.StripeConnect);
167
128
  resolve(wrapper);
168
129
  return;
@@ -175,7 +136,7 @@ const loadScript = () => {
175
136
  script = injectScript();
176
137
  }
177
138
  script.addEventListener("load", () => {
178
- if (window.StripeConnect) {
139
+ if (isWindowStripeConnectDefined(window.StripeConnect)) {
179
140
  const wrapper = createWrapper(window.StripeConnect);
180
141
  resolve(wrapper);
181
142
  } else {
@@ -273,7 +234,7 @@ const createWrapper = stripeConnect => {
273
234
  sdk: true,
274
235
  sdkOptions: {
275
236
  // This will be replaced by the npm package version when bundling
276
- sdkVersion: "3.3.23-preview-1"
237
+ sdkVersion: "3.3.26"
277
238
  }
278
239
  })
279
240
  }));
@@ -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-tax-threshold-monitoring" | "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-disputes-list" | "stripe-connect-payments" | "stripe-connect-payment-details" | "stripe-connect-payment-disputes" | "stripe-connect-account-management" | "stripe-connect-notification-banner" | "stripe-connect-instant-payouts-promotion" | "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;
@@ -121,6 +102,14 @@ export declare const ConnectElementCustomMethodConfig: {
121
102
  setCollectionOptions: (_collectionOptions: CollectionOptions | undefined) => void;
122
103
  setOnNotificationsChange: (_listener: (({ total, actionRequired }: NotificationCount) => void) | undefined) => void;
123
104
  };
105
+ "instant-payouts-promotion": {
106
+ setOnInstantPayoutsPromotionLoaded: (_listener: (({ promotionShown }: {
107
+ promotionShown: boolean;
108
+ }) => void) | undefined) => void;
109
+ setOnInstantPayoutCreated: (_listener: (({ payoutId }: {
110
+ payoutId: string;
111
+ }) => void) | undefined) => void;
112
+ };
124
113
  "issuing-card": {
125
114
  setDefaultCard: (_defaultCard: string | undefined) => void;
126
115
  setCardSwitching: (_cardSwitching: boolean | undefined) => void;
@@ -138,49 +127,19 @@ export declare const ConnectElementCustomMethodConfig: {
138
127
  "financial-account-transactions": {
139
128
  setFinancialAccount: (_financialAccount: string) => void;
140
129
  };
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;
130
+ payments: {
131
+ setDefaultFilters: (_filters: PaymentsListDefaultFilters | undefined) => void;
152
132
  };
153
- "payment-method-settings": {
154
- setPaymentMethodConfiguration: (_paymentMethodConfiguration: string | undefined) => void;
133
+ "payment-details": {
134
+ setPayment: (_payment: string | undefined) => void;
135
+ setOnClose: (_listener: (() => void) | undefined) => void;
155
136
  };
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 }: {
137
+ "payment-disputes": {
138
+ setPayment: (_payment: string | undefined) => void;
139
+ setOnDisputesLoaded: (_listener: (({ total }: {
162
140
  total: number;
163
141
  }) => void) | undefined) => void;
164
142
  };
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;
177
- };
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;
183
- };
184
143
  "tax-settings": {
185
144
  setHideProductTaxCodeSelector: (_hidden: boolean | undefined) => void;
186
145
  setDisplayHeadOfficeCountries: (_countries: string[] | undefined) => void;
@@ -194,7 +153,4 @@ export declare const ConnectElementCustomMethodConfig: {
194
153
  }) => void) | undefined) => void;
195
154
  setDisplayCountries: (_countries: string[] | undefined) => void;
196
155
  };
197
- "tax-threshold-monitoring": {
198
- setDisplayCountries: (_countries: string[] | undefined) => void;
199
- };
200
156
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stripe/connect-js",
3
- "version": "3.3.25-preview-1",
3
+ "version": "3.3.26",
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,78 +1,61 @@
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"
18
+ | "stripe-connect-disputes-list"
17
19
  | "stripe-connect-payments"
18
- | "stripe-connect-payouts"
19
20
  | "stripe-connect-payment-details"
20
- | "stripe-connect-account-onboarding"
21
- | "stripe-connect-payment-method-settings"
21
+ | "stripe-connect-payment-disputes"
22
22
  | "stripe-connect-account-management"
23
23
  | "stripe-connect-notification-banner"
24
- | "stripe-connect-instant-payouts"
24
+ | "stripe-connect-instant-payouts-promotion"
25
25
  | "stripe-connect-issuing-card"
26
26
  | "stripe-connect-issuing-cards-list"
27
27
  | "stripe-connect-financial-account"
28
28
  | "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"
29
+ | "stripe-connect-payouts"
30
+ | "stripe-connect-payouts-list"
31
+ | "stripe-connect-balances"
34
32
  | "stripe-connect-documents"
35
33
  | "stripe-connect-tax-registrations"
36
- | "stripe-connect-tax-settings"
37
- | "stripe-connect-tax-threshold-monitoring"
38
- | "stripe-connect-balances"
39
- | "stripe-connect-payouts-list"
40
- | "stripe-connect-app-install"
41
- | "stripe-connect-app-viewport"
42
- | "stripe-connect-reporting-chart";
34
+ | "stripe-connect-tax-settings";
43
35
 
44
36
  export const componentNameMapping: Record<
45
37
  ConnectElementTagName,
46
38
  ConnectElementHTMLName
47
39
  > = {
40
+ "account-onboarding": "stripe-connect-account-onboarding",
41
+ "disputes-list": "stripe-connect-disputes-list",
48
42
  payments: "stripe-connect-payments",
49
- payouts: "stripe-connect-payouts",
50
43
  "payment-details": "stripe-connect-payment-details",
51
- "account-onboarding": "stripe-connect-account-onboarding",
52
- "payment-method-settings": "stripe-connect-payment-method-settings",
44
+ "payment-disputes": "stripe-connect-payment-disputes",
45
+ payouts: "stripe-connect-payouts",
46
+ "payouts-list": "stripe-connect-payouts-list",
47
+ balances: "stripe-connect-balances",
53
48
  "account-management": "stripe-connect-account-management",
54
49
  "notification-banner": "stripe-connect-notification-banner",
55
- "instant-payouts": "stripe-connect-instant-payouts",
50
+ "instant-payouts-promotion": "stripe-connect-instant-payouts-promotion",
56
51
  "issuing-card": "stripe-connect-issuing-card",
57
52
  "issuing-cards-list": "stripe-connect-issuing-cards-list",
58
53
  "financial-account": "stripe-connect-financial-account",
59
- recipients: "stripe-connect-recipients",
60
54
  "financial-account-transactions":
61
55
  "stripe-connect-financial-account-transactions",
62
- "capital-financing": "stripe-connect-capital-financing",
63
- "capital-financing-application":
64
- "stripe-connect-capital-financing-application",
65
- "capital-financing-promotion": "stripe-connect-capital-financing-promotion",
66
- "capital-overview": "stripe-connect-capital-overview",
67
56
  documents: "stripe-connect-documents",
68
57
  "tax-registrations": "stripe-connect-tax-registrations",
69
58
  "tax-settings": "stripe-connect-tax-settings",
70
- "tax-threshold-monitoring": "stripe-connect-tax-threshold-monitoring",
71
- balances: "stripe-connect-balances",
72
- "payouts-list": "stripe-connect-payouts-list",
73
- "app-install": "stripe-connect-app-install",
74
- "app-viewport": "stripe-connect-app-viewport",
75
- "reporting-chart": "stripe-connect-reporting-chart"
76
59
  };
77
60
 
78
61
  type StripeConnectInstanceExtended = StripeConnectInstance & {
@@ -91,10 +74,10 @@ const V1_URL = "https://connect-js.stripe.com/v1.0/connect.js";
91
74
  export const findScript = (): HTMLScriptElement | null => {
92
75
  return (
93
76
  document.querySelectorAll<HTMLScriptElement>(
94
- `script[src="${V0_URL}"]`
77
+ `script[src="${V1_URL}"]`
95
78
  )[0] ||
96
79
  document.querySelectorAll<HTMLScriptElement>(
97
- `script[src="${V1_URL}"]`
80
+ `script[src="${V0_URL}"]`
98
81
  )[0] ||
99
82
  null
100
83
  );
@@ -119,6 +102,20 @@ const injectScript = (): HTMLScriptElement => {
119
102
 
120
103
  let stripePromise: Promise<StripeConnectWrapper> | null = null;
121
104
 
105
+ export const isWindowStripeConnectDefined = (stripeConnect: unknown) => {
106
+ // We only consider `StripeConnect` defined if `init` is a function
107
+ // Why? HTML markup like:
108
+ // <a id="StripeConnect"><a id="StripeConnect" name="init" href="stripe"></a></a> in the <head> of the page
109
+ // can end up "contaminating" the window.StripeConnect object and cause issues in connect.js initialization
110
+ return !!(
111
+ stripeConnect &&
112
+ typeof stripeConnect === "object" &&
113
+ "init" in stripeConnect &&
114
+ typeof (stripeConnect as { init: unknown } & Record<string, unknown>)
115
+ .init === "function"
116
+ );
117
+ };
118
+
122
119
  export const loadScript = (): Promise<StripeConnectWrapper> => {
123
120
  // Ensure that we only attempt to load Connect.js at most once
124
121
  if (stripePromise !== null) {
@@ -133,11 +130,8 @@ export const loadScript = (): Promise<StripeConnectWrapper> => {
133
130
  return;
134
131
  }
135
132
 
136
- if ((window as any).StripeConnect) {
133
+ if (isWindowStripeConnectDefined((window as any).StripeConnect)) {
137
134
  console.warn(EXISTING_SCRIPT_MESSAGE);
138
- }
139
-
140
- if ((window as any).StripeConnect) {
141
135
  const wrapper = createWrapper((window as any).StripeConnect);
142
136
  resolve(wrapper);
143
137
  return;
@@ -153,7 +147,7 @@ export const loadScript = (): Promise<StripeConnectWrapper> => {
153
147
  }
154
148
 
155
149
  script.addEventListener("load", () => {
156
- if ((window as any).StripeConnect) {
150
+ if (isWindowStripeConnectDefined((window as any).StripeConnect)) {
157
151
  const wrapper = createWrapper((window as any).StripeConnect);
158
152
  resolve(wrapper);
159
153
  } else {
@@ -190,18 +184,18 @@ export const initStripeConnect = (
190
184
  }
191
185
  })();
192
186
  const metaOptions = (initParams as any).metaOptions ?? {};
193
- const stripeConnectInstance = stripePromise.then(wrapper =>
187
+ const stripeConnectInstance = stripePromise.then((wrapper) =>
194
188
  wrapper.initialize({
195
189
  ...initParams,
196
- metaOptions: { ...metaOptions, eagerClientSecretPromise }
190
+ metaOptions: { ...metaOptions, eagerClientSecretPromise },
197
191
  } as any)
198
192
  );
199
193
 
200
194
  return {
201
- create: tagName => {
195
+ create: (tagName) => {
202
196
  let htmlName = componentNameMapping[tagName];
203
197
  if (!htmlName) {
204
- htmlName = (tagName as unknown) as ConnectElementHTMLName;
198
+ htmlName = tagName as unknown as ConnectElementHTMLName;
205
199
  }
206
200
  const element = document.createElement(htmlName);
207
201
 
@@ -210,14 +204,14 @@ export const initStripeConnect = (
210
204
  : {};
211
205
  const methods = { ...customMethods, ...ConnectElementCommonMethodConfig };
212
206
  for (const method in methods) {
213
- (element as any)[method] = function(value: any) {
207
+ (element as any)[method] = function (value: any) {
214
208
  stripeConnectInstance.then(() => {
215
209
  this[`${method}InternalOnly`](value);
216
210
  });
217
211
  };
218
212
  }
219
213
 
220
- stripeConnectInstance.then(instance => {
214
+ stripeConnectInstance.then((instance) => {
221
215
  if (!element.isConnected && !(element as any).setConnector) {
222
216
  // If the element is not connected to the DOM and the `setConnector` method is not
223
217
  // defined, this indicates the element was created before connect.js was loaded, and has
@@ -245,8 +239,8 @@ export const initStripeConnect = (
245
239
 
246
240
  return element as ConnectHTMLElementRecord[typeof tagName];
247
241
  },
248
- update: updateOptions => {
249
- stripeConnectInstance.then(instance => {
242
+ update: (updateOptions) => {
243
+ stripeConnectInstance.then((instance) => {
250
244
  instance.update(updateOptions);
251
245
  });
252
246
  },
@@ -254,10 +248,10 @@ export const initStripeConnect = (
254
248
  return stripeConnectInstance;
255
249
  },
256
250
  logout: () => {
257
- return stripeConnectInstance.then(instance => {
251
+ return stripeConnectInstance.then((instance) => {
258
252
  return instance.logout();
259
253
  });
260
- }
254
+ },
261
255
  };
262
256
  };
263
257
 
@@ -274,12 +268,12 @@ const createWrapper = (stripeConnect: any) => {
274
268
  sdk: true,
275
269
  sdkOptions: {
276
270
  // This will be replaced by the npm package version when bundling
277
- sdkVersion: "_NPM_PACKAGE_VERSION_"
278
- }
279
- }
271
+ sdkVersion: "_NPM_PACKAGE_VERSION_",
272
+ },
273
+ },
280
274
  });
281
275
  return stripeConnectInstance;
282
- }
276
+ },
283
277
  };
284
278
  return wrapper;
285
279
  };