@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/README.md +3 -3
- package/dist/connect.esm.js +34 -74
- package/dist/connect.js +34 -74
- package/dist/pure.esm.js +26 -66
- package/dist/pure.js +26 -66
- package/dist/src/index.d.ts +1 -1
- package/dist/src/pure.d.ts +1 -1
- package/dist/src/shared.d.ts +3 -2
- package/dist/types/config.d.ts +8 -57
- package/package.json +14 -10
- package/src/index.ts +3 -6
- package/src/pure.test.ts +2 -2
- package/src/pure.ts +3 -6
- package/src/shared.ts +48 -55
- package/types/checks.ts +2 -2
- package/types/config.ts +20 -102
- package/types/index.d.ts +1 -1
- package/types/shared.d.ts +10 -17
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
|
-
|
|
53
|
-
|
|
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
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
setOnEligibleFinancingOfferLoaded: _listener => {},
|
|
83
|
-
setPrivacyPolicyUrl: _privacyPolicyUrl => {},
|
|
84
|
-
setHowCapitalWorksUrl: _howCapitalWorksUrl => {},
|
|
85
|
-
setEligibilityCriteriaUrl: _eligibilityCriteriaUrl => {}
|
|
48
|
+
"payment-details": {
|
|
49
|
+
setPayment: _payment => {},
|
|
50
|
+
setOnClose: _listener => {}
|
|
86
51
|
},
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
"
|
|
109
|
-
|
|
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="${
|
|
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
|
|
232
|
+
sdkVersion: "3.3.24"
|
|
273
233
|
}
|
|
274
234
|
})
|
|
275
235
|
}));
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { LoadConnectAndInitialize } from "./shared";
|
|
1
|
+
import type { LoadConnectAndInitialize } from "./shared";
|
|
2
2
|
export declare const loadConnectAndInitialize: LoadConnectAndInitialize;
|
package/dist/src/pure.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { LoadConnectAndInitialize } from "./shared";
|
|
1
|
+
import type { LoadConnectAndInitialize } from "./shared";
|
|
2
2
|
export declare const loadConnectAndInitialize: LoadConnectAndInitialize;
|
package/dist/src/shared.d.ts
CHANGED
|
@@ -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
|
-
|
|
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 {};
|
package/dist/types/config.d.ts
CHANGED
|
@@ -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
|
-
|
|
142
|
-
|
|
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-
|
|
154
|
-
|
|
125
|
+
"payment-details": {
|
|
126
|
+
setPayment: (_payment: string | undefined) => void;
|
|
127
|
+
setOnClose: (_listener: (() => void) | undefined) => void;
|
|
155
128
|
};
|
|
156
|
-
"
|
|
157
|
-
|
|
158
|
-
|
|
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
|
|
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": "^
|
|
49
|
-
"@typescript-eslint/parser": "^
|
|
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": "
|
|
54
|
-
"eslint-config-prettier": "^
|
|
55
|
-
"eslint-plugin-import": "^2.
|
|
56
|
-
"eslint-plugin-jest": "^
|
|
57
|
-
"eslint-plugin-prettier": "^
|
|
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": "
|
|
64
|
+
"prettier": "2.8.8",
|
|
61
65
|
"rimraf": "^2.6.2",
|
|
62
|
-
"rollup": "^
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
30
|
-
| "stripe-connect-
|
|
31
|
-
| "stripe-connect-
|
|
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
|
-
"
|
|
51
|
-
|
|
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="${
|
|
75
|
+
`script[src="${V1_URL}"]`
|
|
93
76
|
)[0] ||
|
|
94
77
|
document.querySelectorAll<HTMLScriptElement>(
|
|
95
|
-
`script[src="${
|
|
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 =
|
|
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;
|