Skip to content

Commit 15a0942

Browse files
committed
wip
1 parent 100954b commit 15a0942

File tree

8 files changed

+109
-41
lines changed

8 files changed

+109
-41
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ package-lock.json
88
.nyc_output
99
coverage/
1010
*.tsbuildinfo
11-
.vscode
11+
.vscode
12+
stats.html

package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@authsignal/react",
3-
"version": "0.0.7",
3+
"version": "0.0.8",
44
"description": "",
55
"main": "dist/index.cjs.js",
66
"module": "dist/index.esm.mjs",
@@ -16,15 +16,13 @@
1616
"license": "MIT",
1717
"dependencies": {
1818
"@authsignal/browser": "^0.6.2",
19-
"@hookform/resolvers": "^3.9.0",
2019
"@radix-ui/react-dialog": "^1.1.1",
2120
"@radix-ui/react-icons": "^1.3.0",
2221
"@radix-ui/react-label": "^2.1.0",
2322
"input-otp": "^1.2.4",
2423
"react-hook-form": "^7.53.0",
2524
"tailwind-merge": "^2.5.2",
26-
"vaul": "^1.0.0",
27-
"zod": "^3.23.8"
25+
"vaul": "^1.0.0"
2826
},
2927
"peerDependencies": {
3028
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -54,6 +52,7 @@
5452
"prettier": "^3.3.3",
5553
"rollup": "^4.24.0",
5654
"rollup-plugin-postcss": "^4.0.2",
55+
"rollup-plugin-visualizer": "^5.12.0",
5756
"tailwindcss": "^3.4.13",
5857
"tailwindcss-animate": "^1.0.7",
5958
"typescript": "^5.6.2"

rollup.config.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import terser from "@rollup/plugin-terser";
55
import typescript from "@rollup/plugin-typescript";
66
import postcss from "rollup-plugin-postcss";
77
import packageJson from "./package.json" with { type: "json" };
8+
import { visualizer } from "rollup-plugin-visualizer";
89

910
const peerDependencies = Object.keys(packageJson.peerDependencies);
1011

@@ -37,5 +38,6 @@ export default {
3738
inject: true,
3839
minimize: true,
3940
}),
41+
visualizer(),
4042
],
4143
};

src/components/challenge/screens/authenticator-app-challenge.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { zodResolver } from "@hookform/resolvers/zod";
21
import React from "react";
32
import { useForm } from "react-hook-form";
43
import { Drawer } from "vaul";
5-
import { z } from "zod";
64

75
import { cn } from "../../../lib/utils";
86
import {
@@ -16,9 +14,9 @@ import {
1614
import { InputOTP, InputOTPGroup, InputOTPSlot } from "../../../ui/input-otp";
1715
import { useChallengeContext } from "../use-challenge-context";
1816

19-
const formSchema = z.object({
20-
code: z.string().min(6, { message: "Enter a valid code" }),
21-
});
17+
type FormData = {
18+
code: string;
19+
};
2220

2321
enum OtpInputState {
2422
IDLE = "IDLE",
@@ -35,8 +33,7 @@ export function AuthenticatorAppChallenge() {
3533

3634
const submitButtonRef = React.useRef<HTMLButtonElement>(null);
3735

38-
const form = useForm<z.infer<typeof formSchema>>({
39-
resolver: zodResolver(formSchema),
36+
const form = useForm<FormData>({
4037
defaultValues: {
4138
code: "",
4239
},
@@ -97,6 +94,7 @@ export function AuthenticatorAppChallenge() {
9794
<FormField
9895
control={form.control}
9996
name="code"
97+
rules={{ required: "Enter a code" }}
10098
render={({ field }) => (
10199
<FormItem className="as-mx-auto">
102100
<FormLabel className="as-sr-only">Code</FormLabel>

src/components/challenge/screens/email-otp-challenge.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { zodResolver } from "@hookform/resolvers/zod";
21
import React from "react";
32
import { useForm } from "react-hook-form";
43
import { Drawer } from "vaul";
5-
import { z } from "zod";
64

75
import { cn } from "../../../lib/utils";
86
import {
@@ -16,9 +14,9 @@ import {
1614
import { InputOTP, InputOTPGroup, InputOTPSlot } from "../../../ui/input-otp";
1715
import { useChallengeContext } from "../use-challenge-context";
1816

19-
const formSchema = z.object({
20-
code: z.string().min(6, { message: "Enter a valid code" }),
21-
});
17+
type FormData = {
18+
code: string;
19+
};
2220

2321
enum OtpInputState {
2422
IDLE = "IDLE",
@@ -35,8 +33,7 @@ export function EmailOtpChallenge() {
3533

3634
const submitButtonRef = React.useRef<HTMLButtonElement>(null);
3735

38-
const form = useForm<z.infer<typeof formSchema>>({
39-
resolver: zodResolver(formSchema),
36+
const form = useForm<FormData>({
4037
defaultValues: {
4138
code: "",
4239
},
@@ -101,6 +98,7 @@ export function EmailOtpChallenge() {
10198
<FormField
10299
control={form.control}
103100
name="code"
101+
rules={{ required: "Enter a code" }}
104102
render={({ field }) => (
105103
<FormItem className="as-mx-auto">
106104
<FormLabel className="as-sr-only">Code</FormLabel>

src/components/challenge/screens/sms-otp-challenge.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { zodResolver } from "@hookform/resolvers/zod";
21
import React from "react";
32
import { useForm } from "react-hook-form";
43
import { Drawer } from "vaul";
5-
import { z } from "zod";
64

75
import { cn } from "../../../lib/utils";
86
import {
@@ -16,9 +14,9 @@ import {
1614
import { InputOTP, InputOTPGroup, InputOTPSlot } from "../../../ui/input-otp";
1715
import { useChallengeContext } from "../use-challenge-context";
1816

19-
const formSchema = z.object({
20-
code: z.string().min(6, { message: "Enter a valid code" }),
21-
});
17+
type FormData = {
18+
code: string;
19+
};
2220

2321
enum OtpInputState {
2422
IDLE = "IDLE",
@@ -35,8 +33,7 @@ export function SmsOtpChallenge() {
3533

3634
const submitButtonRef = React.useRef<HTMLButtonElement>(null);
3735

38-
const form = useForm<z.infer<typeof formSchema>>({
39-
resolver: zodResolver(formSchema),
36+
const form = useForm<FormData>({
4037
defaultValues: {
4138
code: "",
4239
},
@@ -101,6 +98,7 @@ export function SmsOtpChallenge() {
10198
<FormField
10299
control={form.control}
103100
name="code"
101+
rules={{ required: "Enter a code" }}
104102
render={({ field }) => (
105103
<FormItem className="as-mx-auto">
106104
<FormLabel className="as-sr-only">Code</FormLabel>

src/ui/form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ const FormDescription = React.forwardRef<
139139
<p
140140
ref={ref}
141141
id={formDescriptionId}
142-
className={cn("text-[0.8rem] text-muted-foreground", className)}
142+
className={cn("as-text-[0.8rem] as-text-muted-foreground", className)}
143143
{...props}
144144
/>
145145
);

yarn.lock

Lines changed: 86 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,6 @@
395395
dependencies:
396396
tslib "^2.4.1"
397397

398-
"@hookform/resolvers@^3.9.0":
399-
version "3.9.0"
400-
resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.0.tgz#cf540ac21c6c0cd24a40cf53d8e6d64391fb753d"
401-
integrity sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==
402-
403398
"@humanwhocodes/module-importer@^1.0.1":
404399
version "1.0.1"
405400
resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
@@ -1199,6 +1194,15 @@ chokidar@^3.5.3:
11991194
optionalDependencies:
12001195
fsevents "~2.3.2"
12011196

1197+
cliui@^8.0.1:
1198+
version "8.0.1"
1199+
resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
1200+
integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
1201+
dependencies:
1202+
string-width "^4.2.0"
1203+
strip-ansi "^6.0.1"
1204+
wrap-ansi "^7.0.0"
1205+
12021206
color-convert@^1.9.0:
12031207
version "1.9.3"
12041208
resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
@@ -1422,6 +1426,11 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:
14221426
es-errors "^1.3.0"
14231427
gopd "^1.0.1"
14241428

1429+
define-lazy-prop@^2.0.0:
1430+
version "2.0.0"
1431+
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
1432+
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
1433+
14251434
define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
14261435
version "1.2.1"
14271436
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
@@ -1624,7 +1633,7 @@ es-to-primitive@^1.2.1:
16241633
is-date-object "^1.0.1"
16251634
is-symbol "^1.0.2"
16261635

1627-
escalade@^3.2.0:
1636+
escalade@^3.1.1, escalade@^3.2.0:
16281637
version "3.2.0"
16291638
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
16301639
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
@@ -1930,6 +1939,11 @@ gensync@^1.0.0-beta.2:
19301939
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
19311940
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
19321941

1942+
get-caller-file@^2.0.5:
1943+
version "2.0.5"
1944+
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1945+
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1946+
19331947
get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
19341948
version "1.2.4"
19351949
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
@@ -2183,6 +2197,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5:
21832197
dependencies:
21842198
has-tostringtag "^1.0.0"
21852199

2200+
is-docker@^2.0.0, is-docker@^2.1.1:
2201+
version "2.2.1"
2202+
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
2203+
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
2204+
21862205
is-extglob@^2.1.1:
21872206
version "2.1.1"
21882207
resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
@@ -2314,6 +2333,13 @@ is-weakset@^2.0.3:
23142333
call-bind "^1.0.7"
23152334
get-intrinsic "^1.2.4"
23162335

2336+
is-wsl@^2.2.0:
2337+
version "2.2.0"
2338+
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
2339+
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
2340+
dependencies:
2341+
is-docker "^2.0.0"
2342+
23172343
isarray@^2.0.5:
23182344
version "2.0.5"
23192345
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
@@ -2630,6 +2656,15 @@ object.values@^1.1.6, object.values@^1.2.0:
26302656
define-properties "^1.2.1"
26312657
es-object-atoms "^1.0.0"
26322658

2659+
open@^8.4.0:
2660+
version "8.4.2"
2661+
resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
2662+
integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
2663+
dependencies:
2664+
define-lazy-prop "^2.0.0"
2665+
is-docker "^2.1.1"
2666+
is-wsl "^2.2.0"
2667+
26332668
optionator@^0.9.3:
26342669
version "0.9.4"
26352670
resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
@@ -3164,6 +3199,11 @@ regexp.prototype.flags@^1.5.2:
31643199
es-errors "^1.3.0"
31653200
set-function-name "^2.0.1"
31663201

3202+
require-directory@^2.1.1:
3203+
version "2.1.1"
3204+
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
3205+
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
3206+
31673207
resolve-from@^4.0.0:
31683208
version "4.0.0"
31693209
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
@@ -3216,6 +3256,16 @@ rollup-plugin-postcss@^4.0.2:
32163256
safe-identifier "^0.4.2"
32173257
style-inject "^0.3.0"
32183258

3259+
rollup-plugin-visualizer@^5.12.0:
3260+
version "5.12.0"
3261+
resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302"
3262+
integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==
3263+
dependencies:
3264+
open "^8.4.0"
3265+
picomatch "^2.3.1"
3266+
source-map "^0.7.4"
3267+
yargs "^17.5.1"
3268+
32193269
rollup-pluginutils@^2.8.2:
32203270
version "2.8.2"
32213271
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
@@ -3373,6 +3423,11 @@ source-map@^0.6.0, source-map@^0.6.1:
33733423
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
33743424
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
33753425

3426+
source-map@^0.7.4:
3427+
version "0.7.4"
3428+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
3429+
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
3430+
33763431
stable@^0.1.8:
33773432
version "0.1.8"
33783433
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
@@ -3383,8 +3438,7 @@ string-hash@^1.1.1:
33833438
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
33843439
integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==
33853440

3386-
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
3387-
name string-width-cjs
3441+
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
33883442
version "4.2.3"
33893443
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
33903444
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -3817,7 +3871,7 @@ word-wrap@^1.2.5:
38173871
resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
38183872
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
38193873

3820-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
3874+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
38213875
version "7.0.0"
38223876
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
38233877
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -3835,6 +3889,11 @@ wrap-ansi@^8.1.0:
38353889
string-width "^5.0.1"
38363890
strip-ansi "^7.0.1"
38373891

3892+
y18n@^5.0.5:
3893+
version "5.0.8"
3894+
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
3895+
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
3896+
38383897
yallist@^3.0.2:
38393898
version "3.1.1"
38403899
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
@@ -3850,12 +3909,25 @@ yaml@^2.3.4:
38503909
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130"
38513910
integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==
38523911

3912+
yargs-parser@^21.1.1:
3913+
version "21.1.1"
3914+
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
3915+
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
3916+
3917+
yargs@^17.5.1:
3918+
version "17.7.2"
3919+
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
3920+
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
3921+
dependencies:
3922+
cliui "^8.0.1"
3923+
escalade "^3.1.1"
3924+
get-caller-file "^2.0.5"
3925+
require-directory "^2.1.1"
3926+
string-width "^4.2.3"
3927+
y18n "^5.0.5"
3928+
yargs-parser "^21.1.1"
3929+
38533930
yocto-queue@^0.1.0:
38543931
version "0.1.0"
38553932
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
38563933
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
3857-
3858-
zod@^3.23.8:
3859-
version "3.23.8"
3860-
resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
3861-
integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==

0 commit comments

Comments
 (0)