@coinflowlabs/angular 0.1.2 → 0.1.4

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.
@@ -0,0 +1,153 @@
1
+ import { TokenExCvvContainerID, CARD_TYPE_MAPPING, TokenExCardNumberIframeId, } from './TokenEx';
2
+ import { CoinflowUtils } from '../CoinflowUtils';
3
+ export async function getIframeConfig({ token, origins, env, }) {
4
+ return new Promise((resolve, reject) => {
5
+ fetch(new CoinflowUtils(env).url + '/api/checkout/authentication-key', {
6
+ method: 'POST',
7
+ headers: {
8
+ 'Content-Type': 'application/json',
9
+ },
10
+ body: JSON.stringify({
11
+ origins: [...(origins ?? []), window.location.origin],
12
+ token,
13
+ }),
14
+ })
15
+ .then(async (res) => {
16
+ resolve((await res.json()));
17
+ })
18
+ .catch(e => reject(e));
19
+ });
20
+ }
21
+ export function setTokenExScriptTag({ env, setTokenExScriptLoaded, }) {
22
+ const scriptTagId = 'tokenex-script';
23
+ if (document.head.querySelector(`#${scriptTagId}`))
24
+ return;
25
+ const sdkScriptTag = document.createElement('script');
26
+ sdkScriptTag.src =
27
+ env === 'prod'
28
+ ? 'https://htp.tokenex.com/iframe/iframe-v3.min.js'
29
+ : 'https://test-htp.tokenex.com/iframe/iframe-v3.min.js';
30
+ sdkScriptTag.id = scriptTagId;
31
+ document.head.appendChild(sdkScriptTag);
32
+ document.getElementById(scriptTagId).addEventListener('load', () => {
33
+ console.log('Setting tokenExScriptLoaded to true!');
34
+ setTokenExScriptLoaded(true);
35
+ });
36
+ }
37
+ function loadIframe({ iframe, setCachedToken, setLoaded, }) {
38
+ const tokenize = async () => {
39
+ iframe.tokenize();
40
+ return await new Promise((resolve, reject) => {
41
+ iframe.on('tokenize', (data) => {
42
+ setCachedToken(data.token);
43
+ resolve(data);
44
+ });
45
+ iframe.on('validate', (data) => {
46
+ // noinspection PointlessBooleanExpressionJS
47
+ const isInvalid = !data.isValid || data.isCvvValid === false;
48
+ if (isInvalid)
49
+ reject(data);
50
+ });
51
+ });
52
+ };
53
+ iframe.on('change', () => setCachedToken(undefined));
54
+ iframe.on('cvvChange', () => setCachedToken(undefined));
55
+ iframe.on('load', () => {
56
+ setTimeout(() => setLoaded(true), 350);
57
+ const el = document.querySelector('#tx_iframe_tokenExCardNumber');
58
+ if (el) {
59
+ // noinspection JSDeprecatedSymbols
60
+ el.scrolling = 'no';
61
+ }
62
+ });
63
+ iframe.on('focus', () => {
64
+ iframe.focus();
65
+ });
66
+ iframe.on('cvvFocus', () => {
67
+ iframe.cvvFocus();
68
+ });
69
+ setLoaded(false);
70
+ iframe.load();
71
+ return { ...iframe, tokenize };
72
+ }
73
+ export async function doInitializeCvvOnlyTokenExIframe(args) {
74
+ const { token, cardType } = args;
75
+ return await doInitialize(TokenExCvvContainerID, args, {
76
+ cvvOnly: true,
77
+ cvv: true,
78
+ cvvContainerID: TokenExCvvContainerID,
79
+ placeholder: 'CVV',
80
+ token,
81
+ cardType: CARD_TYPE_MAPPING[cardType],
82
+ });
83
+ }
84
+ export async function doInitializeTokenExIframe(args) {
85
+ return await doInitialize(TokenExCardNumberIframeId, args, {
86
+ cvv: true,
87
+ cvvContainerID: TokenExCvvContainerID,
88
+ cvvPlaceholder: 'CVV',
89
+ });
90
+ }
91
+ export async function doInitializeTokenExCardOnlyIframe(args) {
92
+ return await doInitialize(TokenExCardNumberIframeId, args, { cvv: false });
93
+ }
94
+ async function doInitialize(id, { tokenExScriptLoaded, origins, env, css, debug, font, setCachedToken, setLoaded, }, configOverrides) {
95
+ if (!tokenExScriptLoaded && typeof TokenEx === 'undefined') {
96
+ console.warn('Warning Unable to load TokenEx on first attempt waiting for load event from document.head.script#tokenex-script');
97
+ return;
98
+ }
99
+ const iframeConfig = await getIframeConfig({
100
+ token: configOverrides.token,
101
+ origins,
102
+ env,
103
+ });
104
+ const { styles } = getStyles(css);
105
+ const config = {
106
+ ...iframeConfig,
107
+ placeholder: '0000 0000 0000 0000',
108
+ enablePrettyFormat: true,
109
+ styles,
110
+ font,
111
+ debug: debug ?? false,
112
+ ...configOverrides,
113
+ };
114
+ const iframe = TokenEx.Iframe(id, config);
115
+ return loadIframe({ iframe, setCachedToken, setLoaded });
116
+ }
117
+ function getStyles(s) {
118
+ const css = JSON.parse(s);
119
+ const styles = {
120
+ base: CSSPropertiesToComponent(css.base),
121
+ focus: CSSPropertiesToComponent(css.focus),
122
+ error: CSSPropertiesToComponent(css.error),
123
+ placeholder: CSSPropertiesToComponent(css.placeholder),
124
+ cvv: {
125
+ base: CSSPropertiesToComponent(css.cvv?.base),
126
+ focus: CSSPropertiesToComponent(css.cvv?.focus),
127
+ error: CSSPropertiesToComponent(css.cvv?.error),
128
+ placeholder: CSSPropertiesToComponent(css?.placeholder),
129
+ },
130
+ };
131
+ return { styles };
132
+ }
133
+ function CSSPropertiesToComponent(dict) {
134
+ if (!dict)
135
+ return '';
136
+ if (typeof dict === 'string')
137
+ return dict;
138
+ let str = '';
139
+ for (const [key, value] of Object.entries(dict)) {
140
+ let clo = '';
141
+ key.split('').forEach(lt => {
142
+ if (lt.toUpperCase() === lt) {
143
+ clo += '-' + lt.toLowerCase();
144
+ }
145
+ else {
146
+ clo += lt;
147
+ }
148
+ });
149
+ str += clo + ':' + value + ';';
150
+ }
151
+ return str;
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5leEhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2luZmxvd2xhYnMvc3JjL2xpYi9jb21tb24vY2FyZC1mb3JtL3Rva2VuZXhIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCxxQkFBcUIsRUFHckIsaUJBQWlCLEVBQ2pCLHlCQUF5QixHQUMxQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFvQi9DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLEtBQUssRUFDTCxPQUFPLEVBQ1AsR0FBRyxHQUtKO0lBQ0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLGtDQUFrQyxFQUFFO1lBQ3JFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDckQsS0FBSzthQUNOLENBQUM7U0FDSCxDQUFDO2FBQ0MsSUFBSSxDQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBK0IsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FB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cm9wZXJ0aWVzfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBUb2tlbml6YXRpb25SZXNwb25zZSxcbiAgVG9rZW5FeEN2dkNvbnRhaW5lcklELFxuICBUb2tlbkV4SWZyYW1lLFxuICBUb2tlbkV4SUZyYW1lQ29uZmlndXJhdGlvbixcbiAgQ0FSRF9UWVBFX01BUFBJTkcsXG4gIFRva2VuRXhDYXJkTnVtYmVySWZyYW1lSWQsXG59IGZyb20gJy4vVG9rZW5FeCc7XG5pbXBvcnQge0NvaW5mbG93VXRpbHN9IGZyb20gJy4uL0NvaW5mbG93VXRpbHMnO1xuaW1wb3J0IHtDYXJkVHlwZSwgQ29pbmZsb3dFbnZzfSBmcm9tICcuLi9Db2luZmxvd1R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBEb0luaXRpYWxpemVUb2tlbkV4SWZyYW1lQXJncyB7XG4gIGNzczogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGZvbnQ/OiBzdHJpbmc7XG4gIG9yaWdpbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICB0b2tlbkV4U2NyaXB0TG9hZGVkOiBib29sZWFuO1xuICBlbnY6IENvaW5mbG93RW52cztcbiAgc2V0Q2FjaGVkVG9rZW46IChzOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIHNldExvYWRlZDogKGI6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9Jbml0aWFsaXplQ3Z2T25seVRva2VuRXhJZnJhbWVBcmdzXG4gIGV4dGVuZHMgRG9Jbml0aWFsaXplVG9rZW5FeElmcmFtZUFyZ3Mge1xuICB0b2tlbjogc3RyaW5nO1xuICBjYXJkVHlwZTogQ2FyZFR5cGU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJZnJhbWVDb25maWcoe1xuICB0b2tlbixcbiAgb3JpZ2lucyxcbiAgZW52LFxufToge1xuICB0b2tlbj86IHN0cmluZztcbiAgb3JpZ2luczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIGVudjogQ29pbmZsb3dFbnZzO1xufSk6IFByb21pc2U8VG9rZW5FeElGcmFtZUNvbmZpZ3VyYXRpb24+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmZXRjaChuZXcgQ29pbmZsb3dVdGlscyhlbnYpLnVybCArICcvYXBpL2NoZWNrb3V0L2F1dGhlbnRpY2F0aW9uLWtleScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgb3JpZ2luczogWy4uLihvcmlnaW5zID8/IFtdKSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbl0sXG4gICAgICAgIHRva2VuLFxuICAgICAgfSksXG4gICAgfSlcbiAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgIHJlc29sdmUoKGF3YWl0IHJlcy5qc29uKCkpIGFzIFRva2VuRXhJRnJhbWVDb25maWd1cmF0aW9uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiByZWplY3QoZSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRva2VuRXhTY3JpcHRUYWcoe1xuICBlbnYsXG4gIHNldFRva2VuRXhTY3JpcHRMb2FkZWQsXG59OiB7XG4gIGVudjogQ29pbmZsb3dFbnZzO1xuICBzZXRUb2tlbkV4U2NyaXB0TG9hZGVkOiAoYjogYm9vbGVhbikgPT4gdm9pZDtcbn0pIHtcbiAgY29uc3Qgc2NyaXB0VGFnSWQgPSAndG9rZW5leC1zY3JpcHQnO1xuICBpZiAoZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKGAjJHtzY3JpcHRUYWdJZH1gKSkgcmV0dXJuO1xuXG4gIGNvbnN0IHNka1NjcmlwdFRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBzZGtTY3JpcHRUYWcuc3JjID1cbiAgICBlbnYgPT09ICdwcm9kJ1xuICAgICAgPyAnaHR0cHM6Ly9odHAudG9rZW5leC5jb20vaWZyYW1lL2lmcmFtZS12My5taW4uanMnXG4gICAgICA6ICdodHRwczovL3Rlc3QtaHRwLnRva2VuZXguY29tL2lmcmFtZS9pZnJhbWUtdjMubWluLmpzJztcbiAgc2RrU2NyaXB0VGFnLmlkID0gc2NyaXB0VGFnSWQ7XG5cbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzZGtTY3JpcHRUYWcpO1xuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdFRhZ0lkKSEuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnU2V0dGluZyB0b2tlbkV4U2NyaXB0TG9hZGVkIHRvIHRydWUhJyk7XG4gICAgc2V0VG9rZW5FeFNjcmlwdExvYWRlZCh0cnVlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRJZnJhbWUoe1xuICBpZnJhbWUsXG4gIHNldENhY2hlZFRva2VuLFxuICBzZXRMb2FkZWQsXG59OiB7XG4gIHNldENhY2hlZFRva2VuOiAoczogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBzZXRMb2FkZWQ6IChiOiBib29sZWFuKSA9PiB2b2lkO1xuICBpZnJhbWU6IFJldHVyblR5cGU8dHlwZW9mIFRva2VuRXguSWZyYW1lPjtcbn0pOiBUb2tlbkV4SWZyYW1lIHtcbiAgY29uc3QgdG9rZW5pemUgPSBhc3luYyAoKTogUHJvbWlzZTxUb2tlbml6YXRpb25SZXNwb25zZT4gPT4ge1xuICAgIGlmcmFtZS50b2tlbml6ZSgpO1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxUb2tlbml6YXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWZyYW1lLm9uKCd0b2tlbml6ZScsIChkYXRhOiBUb2tlbml6YXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICBzZXRDYWNoZWRUb2tlbihkYXRhLnRva2VuKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgaWZyYW1lLm9uKCd2YWxpZGF0ZScsIChkYXRhOiB7aXNWYWxpZDogYm9vbGVhbjsgaXNDdnZWYWxpZDogYm9vbGVhbn0pID0+IHtcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkID0gIWRhdGEuaXNWYWxpZCB8fCBkYXRhLmlzQ3Z2VmFsaWQgPT09IGZhbHNlO1xuICAgICAgICBpZiAoaXNJbnZhbGlkKSByZWplY3QoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBpZnJhbWUub24oJ2NoYW5nZScsICgpID0+IHNldENhY2hlZFRva2VuKHVuZGVmaW5lZCkpO1xuICBpZnJhbWUub24oJ2N2dkNoYW5nZScsICgpID0+IHNldENhY2hlZFRva2VuKHVuZGVmaW5lZCkpO1xuXG4gIGlmcmFtZS5vbignbG9hZCcsICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldExvYWRlZCh0cnVlKSwgMzUwKTtcbiAgICBjb25zdCBlbDogSFRNTElGcmFtZUVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjdHhfaWZyYW1lX3Rva2VuRXhDYXJkTnVtYmVyJ1xuICAgICk7XG4gICAgaWYgKGVsKSB7XG4gICAgICAvLyBub2luc3BlY3Rpb24gSlNEZXByZWNhdGVkU3ltYm9sc1xuICAgICAgZWwuc2Nyb2xsaW5nID0gJ25vJztcbiAgICB9XG4gIH0pO1xuXG4gIGlmcmFtZS5vbignZm9jdXMnLCAoKSA9PiB7XG4gICAgaWZyYW1lLmZvY3VzKCk7XG4gIH0pO1xuICBpZnJhbWUub24oJ2N2dkZvY3VzJywgKCkgPT4ge1xuICAgIGlmcmFtZS5jdnZGb2N1cygpO1xuICB9KTtcblxuICBzZXRMb2FkZWQoZmFsc2UpO1xuICBpZnJhbWUubG9hZCgpO1xuXG4gIHJldHVybiB7Li4uaWZyYW1lLCB0b2tlbml6ZX07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb0luaXRpYWxpemVDdnZPbmx5VG9rZW5FeElmcmFtZShcbiAgYXJnczogRG9Jbml0aWFsaXplQ3Z2T25seVRva2VuRXhJZnJhbWVBcmdzXG4pIHtcbiAgY29uc3Qge3Rva2VuLCBjYXJkVHlwZX0gPSBhcmdzO1xuICByZXR1cm4gYXdhaXQgZG9Jbml0aWFsaXplKFRva2VuRXhDdnZDb250YWluZXJJRCwgYXJncywge1xuICAgIGN2dk9ubHk6IHRydWUsXG4gICAgY3Z2OiB0cnVlLFxuICAgIGN2dkNvbnRhaW5lcklEOiBUb2tlbkV4Q3Z2Q29udGFpbmVySUQsXG4gICAgcGxhY2Vob2xkZXI6ICdDVlYnLFxuICAgIHRva2VuLFxuICAgIGNhcmRUeXBlOiBDQVJEX1RZUEVfTUFQUElOR1tjYXJkVHlwZV0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9Jbml0aWFsaXplVG9rZW5FeElmcmFtZShcbiAgYXJnczogRG9Jbml0aWFsaXplVG9rZW5FeElmcmFtZUFyZ3Ncbikge1xuICByZXR1cm4gYXdhaXQgZG9Jbml0aWFsaXplKFRva2VuRXhDYXJkTnVtYmVySWZyYW1lSWQsIGFyZ3MsIHtcbiAgICBjdnY6IHRydWUsXG4gICAgY3Z2Q29udGFpbmVySUQ6IFRva2VuRXhDdnZDb250YWluZXJJRCxcbiAgICBjdnZQbGFjZWhvbGRlcjogJ0NWVicsXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9Jbml0aWFsaXplVG9rZW5FeENhcmRPbmx5SWZyYW1lKFxuICBhcmdzOiBEb0luaXRpYWxpemVUb2tlbkV4SWZyYW1lQXJnc1xuKSB7XG4gIHJldHVybiBhd2FpdCBkb0luaXRpYWxpemUoVG9rZW5FeENhcmROdW1iZXJJZnJhbWVJZCwgYXJncywge2N2djogZmFsc2V9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG9Jbml0aWFsaXplKFxuICBpZDogc3RyaW5nLFxuICB7XG4gICAgdG9rZW5FeFNjcmlwdExvYWRlZCxcbiAgICBvcmlnaW5zLFxuICAgIGVudixcbiAgICBjc3MsXG4gICAgZGVidWcsXG4gICAgZm9udCxcbiAgICBzZXRDYWNoZWRUb2tlbixcbiAgICBzZXRMb2FkZWQsXG4gIH06IERvSW5pdGlhbGl6ZVRva2VuRXhJZnJhbWVBcmdzLFxuICBjb25maWdPdmVycmlkZXM6IFBhcnRpYWw8VG9rZW5FeC5Db25maWc+XG4pIHtcbiAgaWYgKCF0b2tlbkV4U2NyaXB0TG9hZGVkICYmIHR5cGVvZiBUb2tlbkV4ID09PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdXYXJuaW5nIFVuYWJsZSB0byBsb2FkIFRva2VuRXggb24gZmlyc3QgYXR0ZW1wdCB3YWl0aW5nIGZvciBsb2FkIGV2ZW50IGZyb20gZG9jdW1lbnQuaGVhZC5zY3JpcHQjdG9rZW5leC1zY3JpcHQnXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaWZyYW1lQ29uZmlnID0gYXdhaXQgZ2V0SWZyYW1lQ29uZmlnKHtcbiAgICB0b2tlbjogY29uZmlnT3ZlcnJpZGVzLnRva2VuLFxuICAgIG9yaWdpbnMsXG4gICAgZW52LFxuICB9KTtcbiAgY29uc3Qge3N0eWxlc30gPSBnZXRTdHlsZXMoY3NzKTtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIC4uLmlmcmFtZUNvbmZpZyxcbiAgICBwbGFjZWhvbGRlcjogJzAwMDAgMDAwMCAwMDAwIDAwMDAnLFxuICAgIGVuYWJsZVByZXR0eUZvcm1hdDogdHJ1ZSxcbiAgICBzdHlsZXMsXG4gICAgZm9udCxcbiAgICBkZWJ1ZzogZGVidWcgPz8gZmFsc2UsXG4gICAgLi4uY29uZmlnT3ZlcnJpZGVzLFxuICB9O1xuICBjb25zdCBpZnJhbWU6IFJldHVyblR5cGU8dHlwZW9mIFRva2VuRXguSWZyYW1lPiA9IFRva2VuRXguSWZyYW1lKGlkLCBjb25maWcpO1xuXG4gIHJldHVybiBsb2FkSWZyYW1lKHtpZnJhbWUsIHNldENhY2hlZFRva2VuLCBzZXRMb2FkZWR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3R5bGVzKHM6IHN0cmluZykge1xuICBjb25zdCBjc3MgPSBKU09OLnBhcnNlKHMpO1xuICBjb25zdCBzdHlsZXMgPSB7XG4gICAgYmFzZTogQ1NTUHJvcGVydGllc1RvQ29tcG9uZW50KGNzcy5iYXNlKSxcbiAgICBmb2N1czogQ1NTUHJvcGVydGllc1RvQ29tcG9uZW50KGNzcy5mb2N1cyksXG4gICAgZXJyb3I6IENTU1Byb3BlcnRpZXNUb0NvbXBvbmVudChjc3MuZXJyb3IpLFxuICAgIHBsYWNlaG9sZGVyOiBDU1NQcm9wZXJ0aWVzVG9Db21wb25lbnQoY3NzLnBsYWNlaG9sZGVyKSxcbiAgICBjdnY6IHtcbiAgICAgIGJhc2U6IENTU1Byb3BlcnRpZXNUb0NvbXBvbmVudChjc3MuY3Z2Py5iYXNlKSxcbiAgICAgIGZvY3VzOiBDU1NQcm9wZXJ0aWVzVG9Db21wb25lbnQoY3NzLmN2dj8uZm9jdXMpLFxuICAgICAgZXJyb3I6IENTU1Byb3BlcnRpZXNUb0NvbXBvbmVudChjc3MuY3Z2Py5lcnJvciksXG4gICAgICBwbGFjZWhvbGRlcjogQ1NTUHJvcGVydGllc1RvQ29tcG9uZW50KGNzcz8ucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHtzdHlsZXN9O1xufVxuXG5mdW5jdGlvbiBDU1NQcm9wZXJ0aWVzVG9Db21wb25lbnQoXG4gIGRpY3Q6IENTU1Byb3BlcnRpZXMgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGlmICghZGljdCkgcmV0dXJuICcnO1xuICBpZiAodHlwZW9mIGRpY3QgPT09ICdzdHJpbmcnKSByZXR1cm4gZGljdDtcblxuICBsZXQgc3RyID0gJyc7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRpY3QpKSB7XG4gICAgbGV0IGNsbyA9ICcnO1xuICAgIGtleS5zcGxpdCgnJykuZm9yRWFjaChsdCA9PiB7XG4gICAgICBpZiAobHQudG9VcHBlckNhc2UoKSA9PT0gbHQpIHtcbiAgICAgICAgY2xvICs9ICctJyArIGx0LnRvTG93ZXJDYXNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG8gKz0gbHQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3RyICs9IGNsbyArICc6JyArIHZhbHVlICsgJzsnO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG4iXX0=
@@ -1,4 +1,6 @@
1
1
  export * from './CoinflowTypes';
2
2
  export * from './CoinflowUtils';
3
3
  export * from './CoinflowLibMessageHandlers';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2luZmxvd2xhYnMvc3JjL2xpYi9jb21tb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL0NvaW5mbG93VHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2luZmxvd1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29pbmZsb3dMaWJNZXNzYWdlSGFuZGxlcnMnO1xuIl19
4
+ export * from './card-form/TokenEx';
5
+ export * from './card-form/tokenexHelpers';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2luZmxvd2xhYnMvc3JjL2xpYi9jb21tb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9Db2luZmxvd1R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29pbmZsb3dVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL0NvaW5mbG93TGliTWVzc2FnZUhhbmRsZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vY2FyZC1mb3JtL1Rva2VuRXgnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJkLWZvcm0vdG9rZW5leEhlbHBlcnMnO1xuIl19
@@ -1,8 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, Input, ViewChild, HostListener } from '@angular/core';
3
3
  import * as SolanaWeb3Js from '@solana/web3.js';
4
+ import { Keypair, Transaction } from '@solana/web3.js';
4
5
  import base58Imported from 'bs58';
5
6
  import LZString from 'lz-string';
7
+ import { sign } from 'tweetnacl';
6
8
  import * as i1 from '@angular/platform-browser';
7
9
 
8
10
  var SettlementType;
@@ -17,6 +19,13 @@ var MerchantStyle;
17
19
  MerchantStyle["Sharp"] = "sharp";
18
20
  MerchantStyle["Pill"] = "pill";
19
21
  })(MerchantStyle || (MerchantStyle = {}));
22
+ var CardType;
23
+ (function (CardType) {
24
+ CardType["VISA"] = "VISA";
25
+ CardType["MASTERCARD"] = "MSTR";
26
+ CardType["AMEX"] = "AMEX";
27
+ CardType["DISCOVER"] = "DISC";
28
+ })(CardType || (CardType = {}));
20
29
 
21
30
  // This works in angular, but not react
22
31
  // let web3: typeof import('@solana/web3.js') | undefined;
@@ -76,7 +85,7 @@ class CoinflowUtils {
76
85
  return 'http://localhost:5000';
77
86
  return `https://api-${env}.coinflow.cash`;
78
87
  }
79
- static getCoinflowUrl({ walletPubkey, route, routePrefix, env, amount, transaction, blockchain, supportsVersionedTransactions, webhookInfo, email, loaderBackground, handleHeightChange, bankAccountLinkRedirect, additionalWallets, nearDeposit, chargebackProtectionData, merchantCss, color, rent, lockDefaultToken, token, tokens, planCode, disableApplePay, disableGooglePay, customerInfo, settlementType, lockAmount, nativeSolToConvert, theme, usePermit, transactionSigner, authOnly, deviceId, jwtToken, }) {
88
+ static getCoinflowUrl({ walletPubkey, route, routePrefix, env, amount, transaction, blockchain, webhookInfo, email, loaderBackground, handleHeightChange, bankAccountLinkRedirect, additionalWallets, nearDeposit, chargebackProtectionData, merchantCss, color, rent, lockDefaultToken, token, tokens, planCode, disableApplePay, disableGooglePay, customerInfo, settlementType, lockAmount, nativeSolToConvert, theme, usePermit, transactionSigner, authOnly, deviceId, jwtToken, origins, }) {
80
89
  const prefix = routePrefix
81
90
  ? `/${routePrefix}/${blockchain}`
82
91
  : `/${blockchain}`;
@@ -88,9 +97,6 @@ class CoinflowUtils {
88
97
  if (amount) {
89
98
  url.searchParams.append('amount', amount.toString());
90
99
  }
91
- if (supportsVersionedTransactions) {
92
- url.searchParams.append('supportsVersionedTransactions', 'true');
93
- }
94
100
  if (webhookInfo) {
95
101
  url.searchParams.append('webhookInfo', LZString.compressToEncodedURIComponent(JSON.stringify(webhookInfo)));
96
102
  }
@@ -164,6 +170,8 @@ class CoinflowUtils {
164
170
  url.searchParams.append('authOnly', 'true');
165
171
  if (jwtToken)
166
172
  url.searchParams.append('jwtToken', jwtToken);
173
+ if (origins)
174
+ url.searchParams.append('origins', LZString.compressToEncodedURIComponent(JSON.stringify(origins)));
167
175
  return url.toString();
168
176
  }
169
177
  static getTransaction(props) {
@@ -176,14 +184,12 @@ class CoinflowUtils {
176
184
  throw new Error('@solana/web3.js dependency is required for Solana');
177
185
  if (!base58)
178
186
  throw new Error('bs58 dependency is required for Solana');
179
- if (transaction instanceof web3.Transaction)
180
- return base58.encode(transaction.serialize({
181
- requireAllSignatures: false,
182
- verifySignatures: false,
183
- }));
184
- if (transaction instanceof web3.VersionedTransaction)
185
- return base58.encode(transaction.serialize());
186
- return undefined;
187
+ if (!transaction)
188
+ return undefined;
189
+ return base58.encode(transaction.serialize({
190
+ requireAllSignatures: false,
191
+ verifySignatures: false,
192
+ }));
187
193
  },
188
194
  polygon: () => {
189
195
  if (!('transaction' in props))
@@ -227,6 +233,50 @@ class CoinflowUtils {
227
233
  throw new Error('blockchain not supported!');
228
234
  }
229
235
  }
236
+ static async getWalletFromEmail({ email, merchantId, env, }) {
237
+ const buffer = new TextEncoder().encode(email);
238
+ const crypto = window.crypto.subtle;
239
+ const hash = await crypto.digest('SHA-256', buffer);
240
+ const seed = new Uint8Array(hash);
241
+ const keypair = Keypair.fromSeed(seed);
242
+ return {
243
+ publicKey: keypair.publicKey,
244
+ signMessage: (message) => Promise.resolve(sign.detached(message, keypair.secretKey)),
245
+ signTransaction: async (transaction) => {
246
+ if (transaction instanceof Transaction) {
247
+ transaction.sign(keypair);
248
+ return transaction;
249
+ }
250
+ else {
251
+ transaction.sign([keypair]);
252
+ return transaction;
253
+ }
254
+ },
255
+ sendTransaction: async (transaction) => {
256
+ if (transaction instanceof Transaction) {
257
+ transaction.sign(keypair);
258
+ }
259
+ else {
260
+ transaction.sign([keypair]);
261
+ }
262
+ const coinflowBaseUrl = this.getCoinflowApiUrl(env);
263
+ const options = {
264
+ method: 'POST',
265
+ headers: {
266
+ 'content-type': 'application/json',
267
+ 'x-coinflow-auth-wallet': keypair.publicKey.toString(),
268
+ 'x-coinflow-auth-blockchain': 'solana',
269
+ },
270
+ body: JSON.stringify({
271
+ merchantId,
272
+ signedTransaction: base58?.encode(transaction.serialize()),
273
+ }),
274
+ };
275
+ const { signature } = await fetch(coinflowBaseUrl + '/api/utils/send-coinflow-tx', options).then(res => res.json());
276
+ return signature;
277
+ },
278
+ };
279
+ }
230
280
  }
231
281
 
232
282
  var IFrameMessageMethods;
@@ -366,6 +416,167 @@ function getEvmWalletHandlers({ wallet, onSuccess, }) {
366
416
  };
367
417
  }
368
418
 
419
+ // Type definitions for TokenEx iframe integration
420
+ const TokenExCardNumberIframeId = 'tokenExCardNumber';
421
+ const TokenExCvvContainerID = 'tokenExCardCvv';
422
+ const CARD_TYPE_MAPPING = {
423
+ [CardType.VISA]: 'visa',
424
+ [CardType.MASTERCARD]: 'masterCard',
425
+ [CardType.AMEX]: 'americanExpress',
426
+ [CardType.DISCOVER]: 'discover',
427
+ };
428
+
429
+ async function getIframeConfig({ token, origins, env, }) {
430
+ return new Promise((resolve, reject) => {
431
+ fetch(new CoinflowUtils(env).url + '/api/checkout/authentication-key', {
432
+ method: 'POST',
433
+ headers: {
434
+ 'Content-Type': 'application/json',
435
+ },
436
+ body: JSON.stringify({
437
+ origins: [...(origins ?? []), window.location.origin],
438
+ token,
439
+ }),
440
+ })
441
+ .then(async (res) => {
442
+ resolve((await res.json()));
443
+ })
444
+ .catch(e => reject(e));
445
+ });
446
+ }
447
+ function setTokenExScriptTag({ env, setTokenExScriptLoaded, }) {
448
+ const scriptTagId = 'tokenex-script';
449
+ if (document.head.querySelector(`#${scriptTagId}`))
450
+ return;
451
+ const sdkScriptTag = document.createElement('script');
452
+ sdkScriptTag.src =
453
+ env === 'prod'
454
+ ? 'https://htp.tokenex.com/iframe/iframe-v3.min.js'
455
+ : 'https://test-htp.tokenex.com/iframe/iframe-v3.min.js';
456
+ sdkScriptTag.id = scriptTagId;
457
+ document.head.appendChild(sdkScriptTag);
458
+ document.getElementById(scriptTagId).addEventListener('load', () => {
459
+ console.log('Setting tokenExScriptLoaded to true!');
460
+ setTokenExScriptLoaded(true);
461
+ });
462
+ }
463
+ function loadIframe({ iframe, setCachedToken, setLoaded, }) {
464
+ const tokenize = async () => {
465
+ iframe.tokenize();
466
+ return await new Promise((resolve, reject) => {
467
+ iframe.on('tokenize', (data) => {
468
+ setCachedToken(data.token);
469
+ resolve(data);
470
+ });
471
+ iframe.on('validate', (data) => {
472
+ // noinspection PointlessBooleanExpressionJS
473
+ const isInvalid = !data.isValid || data.isCvvValid === false;
474
+ if (isInvalid)
475
+ reject(data);
476
+ });
477
+ });
478
+ };
479
+ iframe.on('change', () => setCachedToken(undefined));
480
+ iframe.on('cvvChange', () => setCachedToken(undefined));
481
+ iframe.on('load', () => {
482
+ setTimeout(() => setLoaded(true), 350);
483
+ const el = document.querySelector('#tx_iframe_tokenExCardNumber');
484
+ if (el) {
485
+ // noinspection JSDeprecatedSymbols
486
+ el.scrolling = 'no';
487
+ }
488
+ });
489
+ iframe.on('focus', () => {
490
+ iframe.focus();
491
+ });
492
+ iframe.on('cvvFocus', () => {
493
+ iframe.cvvFocus();
494
+ });
495
+ setLoaded(false);
496
+ iframe.load();
497
+ return { ...iframe, tokenize };
498
+ }
499
+ async function doInitializeCvvOnlyTokenExIframe(args) {
500
+ const { token, cardType } = args;
501
+ return await doInitialize(TokenExCvvContainerID, args, {
502
+ cvvOnly: true,
503
+ cvv: true,
504
+ cvvContainerID: TokenExCvvContainerID,
505
+ placeholder: 'CVV',
506
+ token,
507
+ cardType: CARD_TYPE_MAPPING[cardType],
508
+ });
509
+ }
510
+ async function doInitializeTokenExIframe(args) {
511
+ return await doInitialize(TokenExCardNumberIframeId, args, {
512
+ cvv: true,
513
+ cvvContainerID: TokenExCvvContainerID,
514
+ cvvPlaceholder: 'CVV',
515
+ });
516
+ }
517
+ async function doInitializeTokenExCardOnlyIframe(args) {
518
+ return await doInitialize(TokenExCardNumberIframeId, args, { cvv: false });
519
+ }
520
+ async function doInitialize(id, { tokenExScriptLoaded, origins, env, css, debug, font, setCachedToken, setLoaded, }, configOverrides) {
521
+ if (!tokenExScriptLoaded && typeof TokenEx === 'undefined') {
522
+ console.warn('Warning Unable to load TokenEx on first attempt waiting for load event from document.head.script#tokenex-script');
523
+ return;
524
+ }
525
+ const iframeConfig = await getIframeConfig({
526
+ token: configOverrides.token,
527
+ origins,
528
+ env,
529
+ });
530
+ const { styles } = getStyles(css);
531
+ const config = {
532
+ ...iframeConfig,
533
+ placeholder: '0000 0000 0000 0000',
534
+ enablePrettyFormat: true,
535
+ styles,
536
+ font,
537
+ debug: debug ?? false,
538
+ ...configOverrides,
539
+ };
540
+ const iframe = TokenEx.Iframe(id, config);
541
+ return loadIframe({ iframe, setCachedToken, setLoaded });
542
+ }
543
+ function getStyles(s) {
544
+ const css = JSON.parse(s);
545
+ const styles = {
546
+ base: CSSPropertiesToComponent(css.base),
547
+ focus: CSSPropertiesToComponent(css.focus),
548
+ error: CSSPropertiesToComponent(css.error),
549
+ placeholder: CSSPropertiesToComponent(css.placeholder),
550
+ cvv: {
551
+ base: CSSPropertiesToComponent(css.cvv?.base),
552
+ focus: CSSPropertiesToComponent(css.cvv?.focus),
553
+ error: CSSPropertiesToComponent(css.cvv?.error),
554
+ placeholder: CSSPropertiesToComponent(css?.placeholder),
555
+ },
556
+ };
557
+ return { styles };
558
+ }
559
+ function CSSPropertiesToComponent(dict) {
560
+ if (!dict)
561
+ return '';
562
+ if (typeof dict === 'string')
563
+ return dict;
564
+ let str = '';
565
+ for (const [key, value] of Object.entries(dict)) {
566
+ let clo = '';
567
+ key.split('').forEach(lt => {
568
+ if (lt.toUpperCase() === lt) {
569
+ clo += '-' + lt.toLowerCase();
570
+ }
571
+ else {
572
+ clo += lt;
573
+ }
574
+ });
575
+ str += clo + ':' + value + ';';
576
+ }
577
+ return str;
578
+ }
579
+
369
580
  class CoinflowIFrameComponent {
370
581
  constructor(sanitizer) {
371
582
  this.sanitizer = sanitizer;
@@ -390,8 +601,8 @@ class CoinflowIFrameComponent {
390
601
  return;
391
602
  this.iframe.nativeElement.contentWindow.postMessage(message, '*');
392
603
  }
393
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowIFrameComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
394
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowIFrameComponent, isStandalone: true, selector: "lib-coinflow-iframe", inputs: { iframeProps: "iframeProps", messageHandlers: "messageHandlers" }, host: { listeners: { "window:message": "onPostMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], ngImport: i0, template: ` <iframe
604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowIFrameComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
605
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowIFrameComponent, isStandalone: true, selector: "lib-coinflow-iframe", inputs: { iframeProps: "iframeProps", messageHandlers: "messageHandlers" }, host: { listeners: { "window:message": "onPostMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], ngImport: i0, template: ` <iframe
395
606
  width="100%"
396
607
  height="100%"
397
608
  #iframe
@@ -402,7 +613,7 @@ class CoinflowIFrameComponent {
402
613
  [src]="dynamicUrl"
403
614
  ></iframe>`, isInline: true }); }
404
615
  }
405
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowIFrameComponent, decorators: [{
616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowIFrameComponent, decorators: [{
406
617
  type: Component,
407
618
  args: [{
408
619
  selector: 'lib-coinflow-iframe',
@@ -444,10 +655,10 @@ class CoinflowPurchaseComponent {
444
655
  transaction: CoinflowUtils.getTransaction(this.purchaseProps),
445
656
  };
446
657
  }
447
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
448
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowPurchaseComponent, isStandalone: true, selector: "lib-coinflow-purchase", inputs: { purchaseProps: "purchaseProps" }, ngImport: i0, template: ' <lib-coinflow-iframe ng-if="iframeProps && messageHandlers" [iframeProps]="iframeProps!" [messageHandlers]="messageHandlers!"></lib-coinflow-iframe> ', isInline: true, dependencies: [{ kind: "component", type: CoinflowIFrameComponent, selector: "lib-coinflow-iframe", inputs: ["iframeProps", "messageHandlers"] }] }); }
658
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
659
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowPurchaseComponent, isStandalone: true, selector: "lib-coinflow-purchase", inputs: { purchaseProps: "purchaseProps" }, ngImport: i0, template: ' <lib-coinflow-iframe ng-if="iframeProps && messageHandlers" [iframeProps]="iframeProps!" [messageHandlers]="messageHandlers!"></lib-coinflow-iframe> ', isInline: true, dependencies: [{ kind: "component", type: CoinflowIFrameComponent, selector: "lib-coinflow-iframe", inputs: ["iframeProps", "messageHandlers"] }] }); }
449
660
  }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseComponent, decorators: [{
661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseComponent, decorators: [{
451
662
  type: Component,
452
663
  args: [{
453
664
  selector: 'lib-coinflow-purchase',
@@ -460,10 +671,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
460
671
  }] } });
461
672
 
462
673
  class CoinflowPurchaseHistoryComponent {
463
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
464
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowPurchaseHistoryComponent, isStandalone: true, selector: "lib-coinflow-purchase-history", ngImport: i0, template: ' <p>coinflow-purchase-history works!</p> ', isInline: true }); }
674
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
675
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowPurchaseHistoryComponent, isStandalone: true, selector: "lib-coinflow-purchase-history", ngImport: i0, template: ' <p>coinflow-purchase-history works!</p> ', isInline: true }); }
465
676
  }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseHistoryComponent, decorators: [{
677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseHistoryComponent, decorators: [{
467
678
  type: Component,
468
679
  args: [{
469
680
  selector: 'lib-coinflow-purchase-history',
@@ -474,10 +685,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
474
685
  }] });
475
686
 
476
687
  class CoinflowPurchaseProtectionComponent {
477
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseProtectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
478
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowPurchaseProtectionComponent, isStandalone: true, selector: "lib-coinflow-purchase-protection", ngImport: i0, template: ' <p>coinflow-purchase-protection works!</p> ', isInline: true }); }
688
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseProtectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
689
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowPurchaseProtectionComponent, isStandalone: true, selector: "lib-coinflow-purchase-protection", ngImport: i0, template: ' <p>coinflow-purchase-protection works!</p> ', isInline: true }); }
479
690
  }
480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowPurchaseProtectionComponent, decorators: [{
691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowPurchaseProtectionComponent, decorators: [{
481
692
  type: Component,
482
693
  args: [{
483
694
  selector: 'lib-coinflow-purchase-protection',
@@ -500,10 +711,10 @@ class CoinflowWithdrawComponent {
500
711
  transaction: undefined,
501
712
  };
502
713
  }
503
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowWithdrawComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
504
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowWithdrawComponent, isStandalone: true, selector: "lib-coinflow-withdraw", inputs: { withdrawProps: "withdrawProps" }, ngImport: i0, template: ' <lib-coinflow-iframe ng-if="iframeProps && messageHandlers" [iframeProps]="iframeProps!" [messageHandlers]="messageHandlers!"></lib-coinflow-iframe> ', isInline: true, dependencies: [{ kind: "component", type: CoinflowIFrameComponent, selector: "lib-coinflow-iframe", inputs: ["iframeProps", "messageHandlers"] }] }); }
714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowWithdrawComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
715
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowWithdrawComponent, isStandalone: true, selector: "lib-coinflow-withdraw", inputs: { withdrawProps: "withdrawProps" }, ngImport: i0, template: ' <lib-coinflow-iframe ng-if="iframeProps && messageHandlers" [iframeProps]="iframeProps!" [messageHandlers]="messageHandlers!"></lib-coinflow-iframe> ', isInline: true, dependencies: [{ kind: "component", type: CoinflowIFrameComponent, selector: "lib-coinflow-iframe", inputs: ["iframeProps", "messageHandlers"] }] }); }
505
716
  }
506
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowWithdrawComponent, decorators: [{
717
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowWithdrawComponent, decorators: [{
507
718
  type: Component,
508
719
  args: [{
509
720
  selector: 'lib-coinflow-withdraw',
@@ -516,10 +727,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
516
727
  }] } });
517
728
 
518
729
  class CoinflowWithdrawHistoryComponent {
519
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowWithdrawHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
520
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CoinflowWithdrawHistoryComponent, isStandalone: true, selector: "lib-coinflow-withdraw-history", ngImport: i0, template: ' <p>coinflow-withdraw-history works!</p> ', isInline: true }); }
730
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowWithdrawHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
731
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: CoinflowWithdrawHistoryComponent, isStandalone: true, selector: "lib-coinflow-withdraw-history", ngImport: i0, template: ' <p>coinflow-withdraw-history works!</p> ', isInline: true }); }
521
732
  }
522
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CoinflowWithdrawHistoryComponent, decorators: [{
733
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: CoinflowWithdrawHistoryComponent, decorators: [{
523
734
  type: Component,
524
735
  args: [{
525
736
  selector: 'lib-coinflow-withdraw-history',