@solidgate/client-sdk-loader 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +8 -0
- package/.eslintrc +41 -0
- package/.gitlab-ci.yml +27 -0
- package/.husky/pre-commit +4 -0
- package/.lintstagedrc +3 -0
- package/.prettierrc +9 -0
- package/README.md +37 -0
- package/babel.config.js +6 -0
- package/dist/enums/AdditionalField.d.ts +8 -0
- package/dist/enums/AdditionalField.js +11 -0
- package/dist/enums/CardBrand.d.ts +15 -0
- package/dist/enums/CardBrand.js +19 -0
- package/dist/enums/FieldName.d.ts +12 -0
- package/dist/enums/FieldName.js +15 -0
- package/dist/enums/FormType.d.ts +7 -0
- package/dist/enums/FormType.js +10 -0
- package/dist/enums/InteractionTargetType.d.ts +5 -0
- package/dist/enums/InteractionTargetType.js +8 -0
- package/dist/enums/InteractionType.d.ts +7 -0
- package/dist/enums/InteractionType.js +10 -0
- package/dist/enums/MessageType.d.ts +14 -0
- package/dist/enums/MessageType.js +17 -0
- package/dist/enums/PayableEntity.d.ts +6 -0
- package/dist/enums/PayableEntity.js +9 -0
- package/dist/enums/SecureBrand.d.ts +9 -0
- package/dist/enums/SecureBrand.js +12 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +26 -0
- package/dist/interfaces/ClientSdk.d.ts +6 -0
- package/dist/interfaces/ClientSdk.js +2 -0
- package/dist/interfaces/ClientSdkInstance.d.ts +12 -0
- package/dist/interfaces/ClientSdkInstance.js +2 -0
- package/dist/interfaces/InitConfig.d.ts +43 -0
- package/dist/interfaces/InitConfig.js +2 -0
- package/dist/interfaces/OrderShort.d.ts +7 -0
- package/dist/interfaces/OrderShort.js +2 -0
- package/dist/interfaces/OrderStatus.d.ts +28 -0
- package/dist/interfaces/OrderStatus.js +2 -0
- package/dist/interfaces/SdkMessage.d.ts +24 -0
- package/dist/interfaces/SdkMessage.js +6 -0
- package/dist/interfaces/Transaction.d.ts +57 -0
- package/dist/interfaces/Transaction.js +2 -0
- package/dist/interfaces/UpdateConfig.d.ts +4 -0
- package/dist/interfaces/UpdateConfig.js +2 -0
- package/dist/interfaces/messages/ErrorMessage.d.ts +8 -0
- package/dist/interfaces/messages/ErrorMessage.js +2 -0
- package/dist/interfaces/messages/FailMessage.d.ts +10 -0
- package/dist/interfaces/messages/FailMessage.js +2 -0
- package/dist/interfaces/messages/InteractionMessage.d.ts +20 -0
- package/dist/interfaces/messages/InteractionMessage.js +2 -0
- package/dist/interfaces/messages/Message.d.ts +4 -0
- package/dist/interfaces/messages/Message.js +2 -0
- package/dist/interfaces/messages/MountedMessage.d.ts +5 -0
- package/dist/interfaces/messages/MountedMessage.js +2 -0
- package/dist/interfaces/messages/OrderStatusMessage.d.ts +6 -0
- package/dist/interfaces/messages/OrderStatusMessage.js +2 -0
- package/dist/interfaces/messages/ResizeMessage.d.ts +6 -0
- package/dist/interfaces/messages/ResizeMessage.js +2 -0
- package/dist/interfaces/messages/SubmitMessage.d.ts +6 -0
- package/dist/interfaces/messages/SubmitMessage.js +2 -0
- package/dist/interfaces/messages/SuccessMessage.d.ts +8 -0
- package/dist/interfaces/messages/SuccessMessage.js +2 -0
- package/dist/services/SdkLoader.d.ts +10 -0
- package/dist/services/SdkLoader.js +48 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +50 -0
- package/src/enums/AdditionalField.ts +9 -0
- package/src/enums/CardBrand.ts +16 -0
- package/src/enums/FieldName.ts +13 -0
- package/src/enums/FormType.ts +8 -0
- package/src/enums/InteractionTargetType.ts +6 -0
- package/src/enums/InteractionType.ts +8 -0
- package/src/enums/MessageType.ts +15 -0
- package/src/enums/PayableEntity.ts +7 -0
- package/src/enums/SecureBrand.ts +10 -0
- package/src/index.ts +62 -0
- package/src/interfaces/ClientSdk.ts +7 -0
- package/src/interfaces/ClientSdkInstance.ts +17 -0
- package/src/interfaces/InitConfig.ts +44 -0
- package/src/interfaces/OrderShort.ts +7 -0
- package/src/interfaces/OrderStatus.ts +29 -0
- package/src/interfaces/SdkMessage.ts +27 -0
- package/src/interfaces/Transaction.ts +57 -0
- package/src/interfaces/UpdateConfig.ts +4 -0
- package/src/interfaces/messages/ErrorMessage.ts +10 -0
- package/src/interfaces/messages/FailMessage.ts +12 -0
- package/src/interfaces/messages/InteractionMessage.ts +28 -0
- package/src/interfaces/messages/Message.ts +5 -0
- package/src/interfaces/messages/MountedMessage.ts +7 -0
- package/src/interfaces/messages/OrderStatusMessage.ts +9 -0
- package/src/interfaces/messages/ResizeMessage.ts +8 -0
- package/src/interfaces/messages/SubmitMessage.ts +8 -0
- package/src/interfaces/messages/SuccessMessage.ts +10 -0
- package/src/services/SdkLoader.test.ts +90 -0
- package/src/services/SdkLoader.ts +48 -0
- package/tsconfig.json +33 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export default interface Transaction {
|
|
2
|
+
descriptor?: string
|
|
3
|
+
amount: number
|
|
4
|
+
card_token?: {
|
|
5
|
+
token: string
|
|
6
|
+
}
|
|
7
|
+
card: {
|
|
8
|
+
bank?: string
|
|
9
|
+
bin: number
|
|
10
|
+
brand?: string
|
|
11
|
+
card_exp_month: string
|
|
12
|
+
card_exp_year: number
|
|
13
|
+
card_holder?: string
|
|
14
|
+
card_type?: string
|
|
15
|
+
country?: string
|
|
16
|
+
number?: string
|
|
17
|
+
card_token?: {
|
|
18
|
+
token: string
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
created_at: string
|
|
22
|
+
currency: string
|
|
23
|
+
id: string
|
|
24
|
+
operation: string
|
|
25
|
+
status: string
|
|
26
|
+
updated_at: string
|
|
27
|
+
refund_reason?: string
|
|
28
|
+
refund_reason_code?: string
|
|
29
|
+
marketing_amount?: number
|
|
30
|
+
marketing_currency?: string
|
|
31
|
+
finance_fee_amount?: string | number
|
|
32
|
+
finance_fee_currency?: string | number
|
|
33
|
+
billing_details?: {
|
|
34
|
+
address?: string
|
|
35
|
+
city?: string
|
|
36
|
+
country?: string
|
|
37
|
+
state?: string
|
|
38
|
+
zip?: string
|
|
39
|
+
}
|
|
40
|
+
error?: {
|
|
41
|
+
code: string
|
|
42
|
+
message: string
|
|
43
|
+
recommended_message_for_user?: string
|
|
44
|
+
}
|
|
45
|
+
finance?: {
|
|
46
|
+
amount: number
|
|
47
|
+
currency: string
|
|
48
|
+
internal?: {
|
|
49
|
+
amount: number
|
|
50
|
+
currency: string
|
|
51
|
+
}
|
|
52
|
+
external?: {
|
|
53
|
+
amount: number
|
|
54
|
+
currency: string
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Message from './Message'
|
|
2
|
+
import OrderShort from '../OrderShort'
|
|
3
|
+
|
|
4
|
+
import MessageType from '../../enums/MessageType'
|
|
5
|
+
import PayableEntity from '../../enums/PayableEntity'
|
|
6
|
+
|
|
7
|
+
export default interface FailMessage extends Message<MessageType.Fail> {
|
|
8
|
+
code?: string
|
|
9
|
+
message?: string
|
|
10
|
+
order?: OrderShort
|
|
11
|
+
entity: PayableEntity
|
|
12
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Message from "./Message"
|
|
2
|
+
|
|
3
|
+
import FieldName from '../../enums/FieldName'
|
|
4
|
+
import InteractionType from '../../enums/InteractionType'
|
|
5
|
+
import InteractionTargetType from '../../enums/InteractionTargetType'
|
|
6
|
+
import MessageType from "../../enums/MessageType"
|
|
7
|
+
|
|
8
|
+
export default interface InteractionMessage
|
|
9
|
+
extends Message<MessageType.Interaction> {
|
|
10
|
+
target: {
|
|
11
|
+
type: InteractionTargetType
|
|
12
|
+
name: FieldName | 'submit' | 'googlePay' | 'applePay'
|
|
13
|
+
interaction: InteractionType
|
|
14
|
+
}
|
|
15
|
+
cardForm: {
|
|
16
|
+
fields: Partial<
|
|
17
|
+
Record<
|
|
18
|
+
FieldName,
|
|
19
|
+
{
|
|
20
|
+
isValid: boolean
|
|
21
|
+
isTouched: boolean
|
|
22
|
+
}
|
|
23
|
+
>
|
|
24
|
+
>
|
|
25
|
+
isValid: boolean
|
|
26
|
+
isTouched: boolean
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Message from './Message'
|
|
2
|
+
import OrderShort from '../OrderShort'
|
|
3
|
+
|
|
4
|
+
import MessageType from '../../enums/MessageType'
|
|
5
|
+
import PayableEntity from '../../enums/PayableEntity'
|
|
6
|
+
|
|
7
|
+
export default interface SuccessMessage extends Message<MessageType.Success> {
|
|
8
|
+
order: OrderShort
|
|
9
|
+
entity: PayableEntity
|
|
10
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import ClientSdk from '../interfaces/ClientSdk'
|
|
2
|
+
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
PaymentFormSdk?: ClientSdk
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
describe('SdkLoader', () => {
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
jest.resetModules()
|
|
12
|
+
|
|
13
|
+
document.head.innerHTML = ''
|
|
14
|
+
|
|
15
|
+
delete window.PaymentFormSdk
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('just returns sdk if already loaded', async () => {
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
20
|
+
const SdkLoader = require('./SdkLoader').default
|
|
21
|
+
|
|
22
|
+
window.PaymentFormSdk = Symbol() as unknown as ClientSdk
|
|
23
|
+
|
|
24
|
+
expect(await SdkLoader.load()).toEqual(window.PaymentFormSdk)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('creates script with proper src', () => {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
29
|
+
const SdkLoader = require('./SdkLoader').default
|
|
30
|
+
|
|
31
|
+
SdkLoader.load()
|
|
32
|
+
|
|
33
|
+
const script = document.getElementById(
|
|
34
|
+
'solid-payment-form-source'
|
|
35
|
+
) as HTMLScriptElement
|
|
36
|
+
|
|
37
|
+
expect(script.src).toEqual('https://cdn.solidgate.com/js/solid-form.js')
|
|
38
|
+
expect(script.async).toBeTruthy()
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('resolves PaymentFormSdk after script loading', async () => {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
43
|
+
const SdkLoader = require('./SdkLoader').default
|
|
44
|
+
|
|
45
|
+
const promise = SdkLoader.load()
|
|
46
|
+
|
|
47
|
+
const script = document.getElementById(
|
|
48
|
+
'solid-payment-form-source'
|
|
49
|
+
) as HTMLScriptElement
|
|
50
|
+
|
|
51
|
+
window.PaymentFormSdk = Symbol() as unknown as ClientSdk
|
|
52
|
+
|
|
53
|
+
if (script.onload) {
|
|
54
|
+
script.onload(new Event('load'))
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
expect(await promise).toEqual(window.PaymentFormSdk)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('rejects load attempt after script loading error', () => {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
62
|
+
const SdkLoader = require('./SdkLoader').default
|
|
63
|
+
|
|
64
|
+
const promise = SdkLoader.load()
|
|
65
|
+
|
|
66
|
+
const script = document.getElementById(
|
|
67
|
+
'solid-payment-form-source'
|
|
68
|
+
) as HTMLScriptElement
|
|
69
|
+
|
|
70
|
+
const error = new Event('load')
|
|
71
|
+
|
|
72
|
+
if (script.onerror) {
|
|
73
|
+
script.onerror(error)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
expect(promise).rejects.toEqual(error)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('creates only one script after double initialization', () => {
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
81
|
+
const SdkLoader = require('./SdkLoader').default
|
|
82
|
+
|
|
83
|
+
SdkLoader.load()
|
|
84
|
+
SdkLoader.load()
|
|
85
|
+
|
|
86
|
+
const scripts = document.getElementsByTagName('script')
|
|
87
|
+
|
|
88
|
+
expect(scripts.length).toEqual(1)
|
|
89
|
+
})
|
|
90
|
+
})
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import ClientSdk from '../interfaces/ClientSdk'
|
|
2
|
+
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
PaymentFormSdk?: ClientSdk
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default class SdkLoader {
|
|
10
|
+
static #CloudfrontSrc = 'https://cdn.solidgate.com/js/solid-form.js'
|
|
11
|
+
|
|
12
|
+
static #loadAttempt: Promise<ClientSdk> | null = null
|
|
13
|
+
|
|
14
|
+
static load (): Promise<ClientSdk> {
|
|
15
|
+
if (window.PaymentFormSdk) {
|
|
16
|
+
return Promise.resolve(window.PaymentFormSdk)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (this.#loadAttempt) {
|
|
20
|
+
return this.#loadAttempt
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
this.#loadAttempt = new Promise<ClientSdk>((resolve, reject) => {
|
|
24
|
+
try {
|
|
25
|
+
const script = document.createElement('script')
|
|
26
|
+
script.async = true
|
|
27
|
+
|
|
28
|
+
script.src = this.#CloudfrontSrc
|
|
29
|
+
script.id = 'solid-payment-form-source'
|
|
30
|
+
|
|
31
|
+
script.onerror = e => {
|
|
32
|
+
this.#loadAttempt = null
|
|
33
|
+
reject(e)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
script.onload = () => {
|
|
37
|
+
resolve(window.PaymentFormSdk as ClientSdk)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
document.head.appendChild(script)
|
|
41
|
+
} catch (e) {
|
|
42
|
+
reject(e)
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
return this.#loadAttempt
|
|
47
|
+
}
|
|
48
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"incremental": true,
|
|
4
|
+
"target": "es2015",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"lib": ["es2017", "es7", "es6", "dom"],
|
|
7
|
+
"declaration": true,
|
|
8
|
+
"outDir": "dist",
|
|
9
|
+
"allowJs": true,
|
|
10
|
+
"strict": true,
|
|
11
|
+
"noImplicitAny": true,
|
|
12
|
+
"strictNullChecks": true,
|
|
13
|
+
"strictFunctionTypes": true,
|
|
14
|
+
"strictBindCallApply": true,
|
|
15
|
+
"strictPropertyInitialization": true,
|
|
16
|
+
"noImplicitThis": true,
|
|
17
|
+
"alwaysStrict": true,
|
|
18
|
+
"noUnusedLocals": true,
|
|
19
|
+
"noUnusedParameters": true,
|
|
20
|
+
"noImplicitReturns": true,
|
|
21
|
+
"moduleResolution": "node",
|
|
22
|
+
"allowSyntheticDefaultImports": true,
|
|
23
|
+
"esModuleInterop": true,
|
|
24
|
+
"skipLibCheck": true,
|
|
25
|
+
"forceConsistentCasingInFileNames": true,
|
|
26
|
+
"noFallthroughCasesInSwitch": true,
|
|
27
|
+
"resolveJsonModule": true,
|
|
28
|
+
"isolatedModules": true
|
|
29
|
+
},
|
|
30
|
+
"include": [
|
|
31
|
+
"src/index.ts"
|
|
32
|
+
]
|
|
33
|
+
}
|