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

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