@frak-labs/core-sdk 0.1.0-beta.afa252b0 → 0.1.0-beta.b0bd1f8a

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.
Files changed (139) hide show
  1. package/cdn/bundle.iife.js +14 -0
  2. package/dist/actions-CEEObPYc.js +1 -0
  3. package/dist/actions-DbQhWYx8.cjs +1 -0
  4. package/dist/actions.cjs +1 -1
  5. package/dist/actions.d.cts +3 -1481
  6. package/dist/actions.d.ts +3 -1481
  7. package/dist/actions.js +1 -1
  8. package/dist/bundle.cjs +1 -13
  9. package/dist/bundle.d.cts +6 -2087
  10. package/dist/bundle.d.ts +6 -2087
  11. package/dist/bundle.js +1 -13
  12. package/dist/index-7OZ39x1U.d.ts +195 -0
  13. package/dist/index-C6FxkWPC.d.cts +511 -0
  14. package/dist/index-UFX7xCg3.d.ts +351 -0
  15. package/dist/index-d8xS4ryI.d.ts +511 -0
  16. package/dist/index-p4FqSp8z.d.cts +351 -0
  17. package/dist/index-zDq-VlKx.d.cts +195 -0
  18. package/dist/index.cjs +1 -13
  19. package/dist/index.d.cts +4 -1387
  20. package/dist/index.d.ts +4 -1387
  21. package/dist/index.js +1 -13
  22. package/dist/interaction-DMJ3ZfaF.d.cts +45 -0
  23. package/dist/interaction-KX1h9a7V.d.ts +45 -0
  24. package/dist/interactions-DnfM3oe0.js +1 -0
  25. package/dist/interactions-EIXhNLf6.cjs +1 -0
  26. package/dist/interactions.cjs +1 -1
  27. package/dist/interactions.d.cts +2 -182
  28. package/dist/interactions.d.ts +2 -182
  29. package/dist/interactions.js +1 -1
  30. package/dist/openSso-D--Airj6.d.cts +1018 -0
  31. package/dist/openSso-DsKJ4y0j.d.ts +1018 -0
  32. package/dist/productTypes-BUkXJKZ7.cjs +1 -0
  33. package/dist/productTypes-CGb1MmBF.js +1 -0
  34. package/dist/src-B_xO0AR6.cjs +13 -0
  35. package/dist/src-D2d52OZa.js +13 -0
  36. package/dist/trackEvent-CHnYa85W.js +1 -0
  37. package/dist/trackEvent-GuQm_1Nm.cjs +1 -0
  38. package/package.json +23 -18
  39. package/src/actions/displayEmbeddedWallet.test.ts +194 -0
  40. package/src/actions/displayEmbeddedWallet.ts +20 -0
  41. package/src/actions/displayModal.test.ts +387 -0
  42. package/src/actions/displayModal.ts +131 -0
  43. package/src/actions/getProductInformation.test.ts +133 -0
  44. package/src/actions/getProductInformation.ts +14 -0
  45. package/src/actions/index.ts +29 -0
  46. package/src/actions/openSso.test.ts +407 -0
  47. package/src/actions/openSso.ts +116 -0
  48. package/src/actions/prepareSso.test.ts +223 -0
  49. package/src/actions/prepareSso.ts +48 -0
  50. package/src/actions/referral/processReferral.ts +230 -0
  51. package/src/actions/referral/referralInteraction.ts +57 -0
  52. package/src/actions/sendInteraction.test.ts +219 -0
  53. package/src/actions/sendInteraction.ts +32 -0
  54. package/src/actions/trackPurchaseStatus.test.ts +287 -0
  55. package/src/actions/trackPurchaseStatus.ts +53 -0
  56. package/src/actions/watchWalletStatus.test.ts +372 -0
  57. package/src/actions/watchWalletStatus.ts +94 -0
  58. package/src/actions/wrapper/modalBuilder.ts +212 -0
  59. package/src/actions/wrapper/sendTransaction.ts +62 -0
  60. package/src/actions/wrapper/siweAuthenticate.ts +94 -0
  61. package/src/bundle.ts +3 -0
  62. package/src/clients/DebugInfo.ts +182 -0
  63. package/src/clients/createIFrameFrakClient.ts +287 -0
  64. package/src/clients/index.ts +3 -0
  65. package/src/clients/setupClient.test.ts +343 -0
  66. package/src/clients/setupClient.ts +73 -0
  67. package/src/clients/transports/iframeLifecycleManager.test.ts +399 -0
  68. package/src/clients/transports/iframeLifecycleManager.ts +90 -0
  69. package/src/constants/interactionTypes.ts +44 -0
  70. package/src/constants/locales.ts +14 -0
  71. package/src/constants/productTypes.ts +33 -0
  72. package/src/index.ts +101 -0
  73. package/src/interactions/index.ts +5 -0
  74. package/src/interactions/pressEncoder.test.ts +215 -0
  75. package/src/interactions/pressEncoder.ts +53 -0
  76. package/src/interactions/purchaseEncoder.test.ts +291 -0
  77. package/src/interactions/purchaseEncoder.ts +99 -0
  78. package/src/interactions/referralEncoder.test.ts +170 -0
  79. package/src/interactions/referralEncoder.ts +47 -0
  80. package/src/interactions/retailEncoder.test.ts +107 -0
  81. package/src/interactions/retailEncoder.ts +37 -0
  82. package/src/interactions/webshopEncoder.test.ts +56 -0
  83. package/src/interactions/webshopEncoder.ts +30 -0
  84. package/src/types/client.ts +14 -0
  85. package/src/types/compression.ts +22 -0
  86. package/src/types/config.ts +111 -0
  87. package/src/types/context.ts +13 -0
  88. package/src/types/index.ts +71 -0
  89. package/src/types/lifecycle/client.ts +46 -0
  90. package/src/types/lifecycle/iframe.ts +35 -0
  91. package/src/types/lifecycle/index.ts +2 -0
  92. package/src/types/rpc/displayModal.ts +84 -0
  93. package/src/types/rpc/embedded/index.ts +68 -0
  94. package/src/types/rpc/embedded/loggedIn.ts +55 -0
  95. package/src/types/rpc/embedded/loggedOut.ts +28 -0
  96. package/src/types/rpc/interaction.ts +43 -0
  97. package/src/types/rpc/modal/final.ts +46 -0
  98. package/src/types/rpc/modal/generic.ts +46 -0
  99. package/src/types/rpc/modal/index.ts +20 -0
  100. package/src/types/rpc/modal/login.ts +32 -0
  101. package/src/types/rpc/modal/openSession.ts +25 -0
  102. package/src/types/rpc/modal/siweAuthenticate.ts +37 -0
  103. package/src/types/rpc/modal/transaction.ts +33 -0
  104. package/src/types/rpc/productInformation.ts +59 -0
  105. package/src/types/rpc/sso.ts +80 -0
  106. package/src/types/rpc/walletStatus.ts +35 -0
  107. package/src/types/rpc.ts +158 -0
  108. package/src/types/transport.ts +34 -0
  109. package/src/utils/FrakContext.test.ts +407 -0
  110. package/src/utils/FrakContext.ts +158 -0
  111. package/src/utils/compression/b64.test.ts +181 -0
  112. package/src/utils/compression/b64.ts +29 -0
  113. package/src/utils/compression/compress.test.ts +123 -0
  114. package/src/utils/compression/compress.ts +11 -0
  115. package/src/utils/compression/decompress.test.ts +145 -0
  116. package/src/utils/compression/decompress.ts +11 -0
  117. package/src/utils/compression/index.ts +3 -0
  118. package/src/utils/computeProductId.test.ts +80 -0
  119. package/src/utils/computeProductId.ts +11 -0
  120. package/src/utils/constants.test.ts +23 -0
  121. package/src/utils/constants.ts +4 -0
  122. package/src/utils/formatAmount.test.ts +113 -0
  123. package/src/utils/formatAmount.ts +18 -0
  124. package/src/utils/getCurrencyAmountKey.test.ts +44 -0
  125. package/src/utils/getCurrencyAmountKey.ts +15 -0
  126. package/src/utils/getSupportedCurrency.test.ts +51 -0
  127. package/src/utils/getSupportedCurrency.ts +14 -0
  128. package/src/utils/getSupportedLocale.test.ts +64 -0
  129. package/src/utils/getSupportedLocale.ts +16 -0
  130. package/src/utils/iframeHelper.test.ts +450 -0
  131. package/src/utils/iframeHelper.ts +143 -0
  132. package/src/utils/index.ts +21 -0
  133. package/src/utils/sso.test.ts +361 -0
  134. package/src/utils/sso.ts +119 -0
  135. package/src/utils/ssoUrlListener.ts +60 -0
  136. package/src/utils/trackEvent.test.ts +162 -0
  137. package/src/utils/trackEvent.ts +26 -0
  138. package/cdn/bundle.js +0 -19
  139. package/cdn/bundle.js.LICENSE.txt +0 -10
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Tests for formatAmount utility function
3
+ * Tests currency formatting with proper locale support
4
+ */
5
+
6
+ import { describe, expect, it } from "../../tests/vitest-fixtures";
7
+ import { formatAmount } from "./formatAmount";
8
+
9
+ describe("formatAmount", () => {
10
+ it("should format EUR with French locale by default", () => {
11
+ const formatted = formatAmount(1000, "eur");
12
+
13
+ // French locale formats EUR with space between number and symbol
14
+ // Expected format: "1 000 €" or "1 000,00 €" depending on locale
15
+ expect(formatted).toContain("€");
16
+ expect(formatted).toContain("1");
17
+ });
18
+
19
+ it("should format USD with US locale", () => {
20
+ const formatted = formatAmount(1000, "usd");
21
+
22
+ // US locale formats USD with $ prefix
23
+ expect(formatted).toContain("$");
24
+ expect(formatted).toContain("1");
25
+ });
26
+
27
+ it("should format GBP with British locale", () => {
28
+ const formatted = formatAmount(1000, "gbp");
29
+
30
+ // British locale formats GBP with £ symbol
31
+ expect(formatted).toContain("£");
32
+ expect(formatted).toContain("1");
33
+ });
34
+
35
+ it("should format integer amounts without decimal places", () => {
36
+ const formatted = formatAmount(1000, "eur");
37
+
38
+ // Integer amounts should not show .00
39
+ // French locale: "1 000 €" or "1 000,00 €"
40
+ expect(formatted).toBeDefined();
41
+ expect(formatted.length).toBeGreaterThan(0);
42
+ });
43
+
44
+ it("should format decimal amounts with up to 2 decimal places", () => {
45
+ const formatted = formatAmount(1234.56, "eur");
46
+
47
+ // Should include decimal separator and digits
48
+ expect(formatted).toBeDefined();
49
+ expect(formatted).toContain("1");
50
+ });
51
+
52
+ it("should handle zero amount", () => {
53
+ const formatted = formatAmount(0, "eur");
54
+
55
+ // Should format zero properly
56
+ expect(formatted).toContain("0");
57
+ expect(formatted).toContain("€");
58
+ });
59
+
60
+ it("should handle large amounts", () => {
61
+ const formatted = formatAmount(1000000, "eur");
62
+
63
+ // Should format large numbers with proper thousand separators
64
+ expect(formatted).toContain("€");
65
+ expect(formatted).toBeDefined();
66
+ });
67
+
68
+ it("should default to EUR when currency is not provided", () => {
69
+ const formatted = formatAmount(1000);
70
+
71
+ // Should default to EUR
72
+ expect(formatted).toContain("€");
73
+ });
74
+
75
+ it("should format negative amounts", () => {
76
+ const formatted = formatAmount(-500, "eur");
77
+
78
+ // Should handle negative amounts
79
+ expect(formatted).toContain("-");
80
+ expect(formatted).toContain("€");
81
+ });
82
+
83
+ it("should round amounts with more than 2 decimal places", () => {
84
+ const formatted = formatAmount(1234.5678, "eur");
85
+
86
+ // Should round to max 2 decimal places
87
+ expect(formatted).toBeDefined();
88
+ // The exact format depends on locale, but should be rounded
89
+ });
90
+
91
+ it("should format small decimal amounts", () => {
92
+ const formatted = formatAmount(0.99, "usd");
93
+
94
+ // Should handle small amounts properly
95
+ expect(formatted).toContain("$");
96
+ expect(formatted).toContain("0");
97
+ });
98
+
99
+ it("should use correct locale for each currency", () => {
100
+ const eurFormatted = formatAmount(1000, "eur");
101
+ const usdFormatted = formatAmount(1000, "usd");
102
+ const gbpFormatted = formatAmount(1000, "gbp");
103
+
104
+ // Each should use different currency symbols
105
+ expect(eurFormatted).toContain("€");
106
+ expect(usdFormatted).toContain("$");
107
+ expect(gbpFormatted).toContain("£");
108
+
109
+ // All should be different formats due to different locales
110
+ expect(eurFormatted).not.toBe(usdFormatted);
111
+ expect(usdFormatted).not.toBe(gbpFormatted);
112
+ });
113
+ });
@@ -0,0 +1,18 @@
1
+ import type { Currency } from "../types";
2
+ import { getSupportedCurrency } from "./getSupportedCurrency";
3
+ import { getSupportedLocale } from "./getSupportedLocale";
4
+
5
+ export function formatAmount(amount: number, currency?: Currency) {
6
+ // Get the supported locale (e.g. "fr-FR")
7
+ const supportedLocale = getSupportedLocale(currency);
8
+
9
+ // Get the supported currency (e.g. "eur")
10
+ const supportedCurrency = getSupportedCurrency(currency);
11
+
12
+ return amount.toLocaleString(supportedLocale, {
13
+ style: "currency",
14
+ currency: supportedCurrency,
15
+ minimumFractionDigits: 0,
16
+ maximumFractionDigits: 2,
17
+ });
18
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Tests for getCurrencyAmountKey utility function
3
+ * Tests currency amount key generation
4
+ */
5
+
6
+ import { describe, expect, it } from "../../tests/vitest-fixtures";
7
+ import type { Currency } from "../types";
8
+ import { getCurrencyAmountKey } from "./getCurrencyAmountKey";
9
+
10
+ describe("getCurrencyAmountKey", () => {
11
+ it("should return eurAmount for undefined input", () => {
12
+ const result = getCurrencyAmountKey(undefined);
13
+
14
+ expect(result).toBe("eurAmount");
15
+ });
16
+
17
+ it("should return eurAmount for EUR", () => {
18
+ const result = getCurrencyAmountKey("eur");
19
+
20
+ expect(result).toBe("eurAmount");
21
+ });
22
+
23
+ it("should return usdAmount for USD", () => {
24
+ const result = getCurrencyAmountKey("usd");
25
+
26
+ expect(result).toBe("usdAmount");
27
+ });
28
+
29
+ it("should return gbpAmount for GBP", () => {
30
+ const result = getCurrencyAmountKey("gbp");
31
+
32
+ expect(result).toBe("gbpAmount");
33
+ });
34
+
35
+ it("should generate correct key format for all currencies", () => {
36
+ const validCurrencies: Currency[] = ["eur", "usd", "gbp"];
37
+
38
+ for (const currency of validCurrencies) {
39
+ const result = getCurrencyAmountKey(currency);
40
+ // Should match pattern: {currency}Amount
41
+ expect(result).toBe(`${currency}Amount`);
42
+ }
43
+ });
44
+ });
@@ -0,0 +1,15 @@
1
+ import type { Currency, TokenAmountType } from "../types";
2
+
3
+ /**
4
+ * Get the currency amount key for a given currency
5
+ * @param currency - The currency to use
6
+ * @returns The currency amount key
7
+ */
8
+ export function getCurrencyAmountKey(
9
+ currency?: Currency
10
+ ): keyof TokenAmountType {
11
+ if (!currency) {
12
+ return "eurAmount";
13
+ }
14
+ return `${currency}Amount` as keyof TokenAmountType;
15
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Tests for getSupportedCurrency utility function
3
+ * Tests currency validation and fallback behavior
4
+ */
5
+
6
+ import { describe, expect, it } from "../../tests/vitest-fixtures";
7
+ import type { Currency } from "../types";
8
+ import { getSupportedCurrency } from "./getSupportedCurrency";
9
+
10
+ describe("getSupportedCurrency", () => {
11
+ it("should return EUR for undefined input", () => {
12
+ const result = getSupportedCurrency(undefined);
13
+
14
+ expect(result).toBe("eur");
15
+ });
16
+
17
+ it("should return EUR when provided", () => {
18
+ const result = getSupportedCurrency("eur");
19
+
20
+ expect(result).toBe("eur");
21
+ });
22
+
23
+ it("should return USD when provided", () => {
24
+ const result = getSupportedCurrency("usd");
25
+
26
+ expect(result).toBe("usd");
27
+ });
28
+
29
+ it("should return GBP when provided", () => {
30
+ const result = getSupportedCurrency("gbp");
31
+
32
+ expect(result).toBe("gbp");
33
+ });
34
+
35
+ it("should fall back to EUR for invalid currency", () => {
36
+ // Force cast to test runtime behavior
37
+ const invalidCurrency = "invalid" as Currency;
38
+ const result = getSupportedCurrency(invalidCurrency);
39
+
40
+ expect(result).toBe("eur");
41
+ });
42
+
43
+ it("should handle all valid currencies", () => {
44
+ const validCurrencies: Currency[] = ["eur", "usd", "gbp"];
45
+
46
+ for (const currency of validCurrencies) {
47
+ const result = getSupportedCurrency(currency);
48
+ expect(result).toBe(currency);
49
+ }
50
+ });
51
+ });
@@ -0,0 +1,14 @@
1
+ import { locales } from "../constants/locales";
2
+ import type { Currency } from "../types";
3
+
4
+ /**
5
+ * Get the supported currency for a given currency
6
+ * @param currency - The currency to use
7
+ * @returns The supported currency
8
+ */
9
+ export function getSupportedCurrency(currency?: Currency): Currency {
10
+ if (!currency) {
11
+ return "eur";
12
+ }
13
+ return currency in locales ? currency : "eur";
14
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Tests for getSupportedLocale utility function
3
+ * Tests locale resolution from currency
4
+ */
5
+
6
+ import { describe, expect, it } from "../../tests/vitest-fixtures";
7
+ import { locales } from "../constants/locales";
8
+ import type { Currency } from "../types";
9
+ import { getSupportedLocale } from "./getSupportedLocale";
10
+
11
+ describe("getSupportedLocale", () => {
12
+ it("should return EUR locale for undefined input", () => {
13
+ const result = getSupportedLocale(undefined);
14
+
15
+ expect(result).toBe(locales.eur);
16
+ expect(result).toBe("fr-FR");
17
+ });
18
+
19
+ it("should return French locale for EUR", () => {
20
+ const result = getSupportedLocale("eur");
21
+
22
+ expect(result).toBe(locales.eur);
23
+ expect(result).toBe("fr-FR");
24
+ });
25
+
26
+ it("should return US locale for USD", () => {
27
+ const result = getSupportedLocale("usd");
28
+
29
+ expect(result).toBe(locales.usd);
30
+ expect(result).toBe("en-US");
31
+ });
32
+
33
+ it("should return GB locale for GBP", () => {
34
+ const result = getSupportedLocale("gbp");
35
+
36
+ expect(result).toBe(locales.gbp);
37
+ expect(result).toBe("en-GB");
38
+ });
39
+
40
+ it("should fall back to EUR locale for invalid currency", () => {
41
+ // Force cast to test runtime behavior
42
+ const invalidCurrency = "invalid" as Currency;
43
+ const result = getSupportedLocale(invalidCurrency);
44
+
45
+ expect(result).toBe(locales.eur);
46
+ expect(result).toBe("fr-FR");
47
+ });
48
+
49
+ it("should return valid locale format", () => {
50
+ const validCurrencies: Currency[] = ["eur", "usd", "gbp"];
51
+
52
+ for (const currency of validCurrencies) {
53
+ const result = getSupportedLocale(currency);
54
+ // Should match locale format like "en-US", "fr-FR", etc.
55
+ expect(result).toMatch(/^[a-z]{2}-[A-Z]{2}$/);
56
+ }
57
+ });
58
+
59
+ it("should map all supported currencies to their locales", () => {
60
+ expect(getSupportedLocale("eur")).toBe("fr-FR");
61
+ expect(getSupportedLocale("usd")).toBe("en-US");
62
+ expect(getSupportedLocale("gbp")).toBe("en-GB");
63
+ });
64
+ });
@@ -0,0 +1,16 @@
1
+ import { type LocalesKey, locales } from "../constants/locales";
2
+ import type { Currency } from "../types";
3
+
4
+ /**
5
+ * Get the supported locale for a given currency
6
+ * @param currency - The currency to use
7
+ * @returns The supported locale
8
+ */
9
+ export function getSupportedLocale(
10
+ currency?: Currency
11
+ ): (typeof locales)[LocalesKey] {
12
+ if (!currency) {
13
+ return locales.eur;
14
+ }
15
+ return locales[currency] ?? locales.eur;
16
+ }