diff --git a/.clj-kondo/babashka/fs/config.edn b/.clj-kondo/babashka/fs/config.edn new file mode 100644 index 00000000000..23f36094841 --- /dev/null +++ b/.clj-kondo/babashka/fs/config.edn @@ -0,0 +1 @@ +{:lint-as {babashka.fs/with-temp-dir clojure.core/let}} diff --git a/.clj-kondo/babashka/sci/config.edn b/.clj-kondo/babashka/sci/config.edn new file mode 100644 index 00000000000..60ea30d04f3 --- /dev/null +++ b/.clj-kondo/babashka/sci/config.edn @@ -0,0 +1 @@ +{:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}} diff --git a/.clj-kondo/babashka/sci/sci/core.clj b/.clj-kondo/babashka/sci/sci/core.clj new file mode 100644 index 00000000000..ac324eecad5 --- /dev/null +++ b/.clj-kondo/babashka/sci/sci/core.clj @@ -0,0 +1,9 @@ +(ns sci.core) + +(defmacro copy-ns + ([ns-sym sci-ns] + `(copy-ns ~ns-sym ~sci-ns nil)) + ([ns-sym sci-ns opts] + `[(quote ~ns-sym) + ~sci-ns + (quote ~opts)])) diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index 596db9b42df..9354af1385d 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -1,4 +1,5 @@ -{:lint-as {status-im.utils.views/defview clojure.core/defn +{:config-paths ["status-im"] + :lint-as {status-im.utils.views/defview clojure.core/defn status-im.utils.views/letsubs clojure.core/let reagent.core/with-let clojure.core/let status-im.utils.fx/defn clj-kondo.lint-as/def-catch-all diff --git a/.clj-kondo/status-im/config.edn b/.clj-kondo/status-im/config.edn new file mode 100644 index 00000000000..eb6f89e6f4e --- /dev/null +++ b/.clj-kondo/status-im/config.edn @@ -0,0 +1,2 @@ +{:hooks {:analyze-call {utils.i18n/label hooks.core/i18n-label}} + :linters {:status-im.linter/invalid-translation-keyword {:level :error}}} diff --git a/.clj-kondo/status-im/hooks/core.clj b/.clj-kondo/status-im/hooks/core.clj new file mode 100644 index 00000000000..872bd3977c9 --- /dev/null +++ b/.clj-kondo/status-im/hooks/core.clj @@ -0,0 +1,19 @@ +(ns hooks.core + (:require [clj-kondo.hooks-api :as api])) + +(defn i18n-label + "Verify call to `i18n/label` pass the translation keyword qualified with `t`." + [{:keys [node]}] + (let [[_ translation-key-node & _] (:children node)] + (when (and (api/keyword-node? translation-key-node) + (not= "t" (-> translation-key-node api/sexpr namespace))) + (api/reg-finding! (assoc (meta translation-key-node) + :message "Translation keyword should be qualified with \"t\"" + :type :status-im.linter/invalid-translation-keyword))))) + +(comment + ;; Valid + (i18n-label {:node (api/parse-string "(i18n/label :t/foo)")}) + + ;; Invalid + (i18n-label {:node (api/parse-string "(i18n/label :foo)")})) diff --git a/nix/deps/clojure/README.md b/nix/deps/clojure/README.md index 7f048904a9a..5e532669f65 100644 --- a/nix/deps/clojure/README.md +++ b/nix/deps/clojure/README.md @@ -12,12 +12,13 @@ By using the following command: ```sh shadow-cljs classpath --force-spawn ``` -We both download the necessary JARs and POMs into `~/.m2` folder, but also get the classpath printed into standard output. +We download the necessary JARs into `~/.m2` folder, but also get the classpath printed into standard output. +We skip POM files since they are not necessary, and add edge cases we don't want to handle. We then use the classpath in combination with contents of `~/.m2` folder to generate the following files: * `deps.list` - List of JARs relative to the `~/.m2` cache folder. -* `deps.json` - Full list of JARs and POMs including their SHAs. +* `deps.json` - Full list of JARs including their SHAs. The `deps.list` file is just intermediate and for debugging purposes. The `deps.json` is loaded by the derivation in [`default.nix`](./default.nix) and used to produce a derivation that contains all the necessary dependencies: diff --git a/nix/deps/clojure/default.nix b/nix/deps/clojure/default.nix index 0b08a6bb304..9bea02a99aa 100644 --- a/nix/deps/clojure/default.nix +++ b/nix/deps/clojure/default.nix @@ -8,9 +8,6 @@ let # load dependencies deps = importJSON ./deps.json; - # some .jar files have an `-aot` suffix that doesn't work for .pom files - getPOM = jarUrl: "${removeSuffix "-aot" jarUrl}.pom"; - script = writeShellScriptBin "create-local-maven-repo" ('' mkdir -p $out cd $out @@ -18,18 +15,11 @@ let (concatMapStrings (dep: let url = "${dep.host}/${dep.path}"; - pom = { - sha1 = attrByPath [ "pom" "sha1" ] "" dep; - sha256 = attrByPath [ "pom" "sha256" ] "" dep; - }; - pom-download = optionalString (pom.sha256 != "") ( - fetchurl { url = getPOM url; inherit (pom) sha256; } - ); jar = { sha1 = attrByPath [ "jar" "sha1" ] "" dep; sha256 = attrByPath [ "jar" "sha256" ] "" dep; }; - jar-download = optionalString (jar.sha256 != "") ( + jarFile = optionalString (jar.sha256 != "") ( fetchurl { url = "${url}.jar"; inherit (jar) sha256; } ); fileName = last (splitString "/" dep.path); @@ -38,14 +28,8 @@ let '' mkdir -p ${directory} - ${optionalString (pom-download != "") '' - ln -s "${pom-download}" "${getPOM dep.path}" - ''} - ${optionalString (pom.sha1 != "") '' - echo "${pom.sha1}" > "${getPOM dep.path}.sha1" - ''} - ${optionalString (jar-download != "") '' - ln -s "${jar-download}" "${dep.path}.jar" + ${optionalString (jarFile != "") '' + ln -s "${jarFile}" "${dep.path}.jar" ''} ${optionalString (jar.sha1 != "") '' echo "${jar.sha1}" > "${dep.path}.jar.sha1" diff --git a/nix/deps/clojure/deps.json b/nix/deps/clojure/deps.json index 534df4e7409..c07f66f7301 100644 --- a/nix/deps/clojure/deps.json +++ b/nix/deps/clojure/deps.json @@ -1,11 +1,25 @@ [ + { + "path": "args4j/args4j/2.33/args4j-2.33", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "bd87a75374a6d6523de82fef51fc3cfe9baf9fc9", + "sha256": "1mlyqrqyhijwkjx4sv2zfn2ciqfwpc08qq8w55rcxb941fxfmpci" + } + }, + + { + "path": "babashka/fs/0.2.16/fs-0.2.16", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "4e7ad43c9d5ab8907ef0064105e788e0e84f282a", + "sha256": "1zhz4hnrzpnrz3d222py42xlhybwsk94bipmnm7ypb9vlf0p4m8y" + } + }, + { "path": "bidi/bidi/2.1.6/bidi-2.1.6", "host": "https://repo.clojars.org", - "pom": { - "sha1": "179b6a4d499f6830d8bf8ae030d82d8a49f61924", - "sha256": "1g3pzsal938f9s5xvfbkjplmprry33j0nc9x106z41jzzgqry37h" - }, "jar": { "sha1": "e17fa1c05ff99e99543c6d5328e293e933e15e06", "sha256": "1gld043c5qz7v9bp5s61vf1s5f8f1pbda9nzwqhy893dpm8xv0qb" @@ -15,10 +29,6 @@ { "path": "binaryage/env-config/0.2.2/env-config-0.2.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "8a8f0d726bb150b074dbaa92da5470f6144adb76", - "sha256": "07x1a046xcg9bbzwwgls8i036lzryv5ix29c8m0hf3pp742xa49v" - }, "jar": { "sha1": "ac36173f1802a5d7225be41faebedbf12949ae59", "sha256": "11j1bls84d8hn8gviawvxkbbnb0hcg1lvw6qqcjj356ap6xzxfic" @@ -28,23 +38,33 @@ { "path": "binaryage/oops/0.7.2/oops-0.7.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "bdce8b7dc9f2b569f5c42a4d6108325899970eb9", - "sha256": "1rc4slg4836pnxds447sam9hsiwd4x2al1ykazp6iglc10ix9igd" - }, "jar": { "sha1": "2f47298f9aa41ef6f2c4f2c49f472eb113e94ae7", "sha256": "0c9f7wylwl0lxcn4vqncprlzmdddqhxzb3vdaawdm0da0xh010hb" } }, + { + "path": "borkdude/edamame/1.1.17/edamame-1.1.17", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "9087f7abf0104e0354d7db7fc4576608eac558f4", + "sha256": "1n1872i240lakn4pzsag4grf7bv7lcsipmqllxd9m4k1zp3dgla1" + } + }, + + { + "path": "borkdude/sci.impl.reflector/0.0.1/sci.impl.reflector-0.0.1", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "33dfc86102e0ea400498cbca47572459c1c43b00", + "sha256": "0a5gxmj8kzc01y9bn7l4x7c1v5q9wcbvw5hdr525d3ylsyl6xfkw" + } + }, + { "path": "camel-snake-kebab/camel-snake-kebab/0.4.3/camel-snake-kebab-0.4.3", "host": "https://repo.clojars.org", - "pom": { - "sha1": "d8a86256bfd06736b84b6ee4c154a1b2518ab461", - "sha256": "1fxz1fdhppby21l4qkrci9kp38s508yn01z3cjspda56mj1plnid" - }, "jar": { "sha1": "5ae08f83ceb8959971e6334596bff0214bf6fdf2", "sha256": "1j627a99ccc4v0v83c8670vdnsp69cjk7ba0ga2xf433fwsz74c1" @@ -52,38 +72,44 @@ }, { - "path": "cider/cider-nrepl/0.29.0/cider-nrepl-0.29.0", + "path": "cheshire/cheshire/5.11.0/cheshire-5.11.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "d2dd4e969cf44bfffd8609d0d4945a4a561b5a58", - "sha256": "0f4yxk0wx1i13inkq9zjd1450bbly5lf62216a88clmn4l5x8knn" - }, "jar": { - "sha1": "45f6034b26a14138e74145b7a4059628c0fedcd1", - "sha256": "1dy1l6y8cb8xiqq97a4lf8giyiicq4wfl4s2lxn5fb6614cjxqx2" + "sha1": "1a1231c65bfd6a2033148e88dcbd1ed8dede12a4", + "sha256": "0iv2nidrz07qjsqhyh8r9n59hxc52jpagggj9ivxl7bbcyg0daqz" } }, { - "path": "cider/piggieback/0.5.2/piggieback-0.5.2", + "path": "cider/cider-nrepl/0.25.3/cider-nrepl-0.25.3", "host": "https://repo.clojars.org", - "pom": { - "sha1": "7e88493d18a4aaf13aff9d0319dcd82178d95f1d", - "sha256": "08w5y48bpvnlyqbdjs0h7nz9dp35rc7b46hsvh1a0vpdszisxh0p" - }, "jar": { - "sha1": "ecfd5c286a85db3f059e75c37fca5722d9e26f79", - "sha256": "1ps9yf3cxmlm447hqkidjb5xry90n0wl3jk0jn28fagq31lzylkl" + "sha1": "5ae0efd9377a5e60c084bdaf4a2ce094f759ce23", + "sha256": "0drxf9nm23i1pcgrkwbcr09msq37csilzww38709add0hz8spjhq" + } + }, + + { + "path": "cider/piggieback/0.4.1/piggieback-0.4.1", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "0a02a3e2ecd7a126ab60d8a44793342f20ced79b", + "sha256": "142vl5np33akcrnn6pksi0rjfsmmi528villxsj6cwcndvybiw4m" + } + }, + + { + "path": "clj-kondo/clj-kondo/2023.09.07/clj-kondo-2023.09.07", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "9bf516b973a0b77d7dc5a3c6c84a884e3470e7b7", + "sha256": "1qkw5ryqdzy4wl3xbr0r72ikrch75z5vh1dny569y3jlc888gkv8" } }, { "path": "cljs-bean/cljs-bean/1.3.0/cljs-bean-1.3.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "2920ec4ae47eaa47c8a8aeecb4670a42cd412aab", - "sha256": "0xamxny72ymyjfnmzjbnxfc0b19rbbzsmxgm6x2d5z2fbsgv3hz7" - }, "jar": { "sha1": "eef0aae8057df9c538bf009fd82766d5e86848c7", "sha256": "0c6wlpyc1k5aavw5dixllycdnmr64rrhpc4q57wfyfymixz87d7w" @@ -93,10 +119,6 @@ { "path": "clout/clout/2.1.2/clout-2.1.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "2c8aec1449373bfc2e7651b454104e4dc8d70168", - "sha256": "1kphwll940nz53cjnfc9jlwxzbd0dkpzjfs5jaxrl4q95l0d845x" - }, "jar": { "sha1": "87cc1bd24ec39a8572e66103039955d7570ce077", "sha256": "1y3pp542ml5za3iyc5szqh2xn65dqmd8d6621mznmzg8bng1yscx" @@ -106,10 +128,6 @@ { "path": "com/andrewmcveigh/cljs-time/0.5.2/cljs-time-0.5.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "21a75819b0540486c66a48bd9119201c368221ba", - "sha256": "035awyqyifbgn28faz0q90hm66vngdcl9x6jgbmkh5zjnp1xmpfi" - }, "jar": { "sha1": "7d4274be169f54a03d4afcc40ea95f40d44ca0a2", "sha256": "061cjh2a6qpkib5v5mdrsbwhvcbqvh1igvp3b7jhcfj05pgplm1x" @@ -119,10 +137,6 @@ { "path": "com/bhauman/cljs-test-display/0.1.1/cljs-test-display-0.1.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "1a8259078974068be03b4318aab377119e09c6fd", - "sha256": "1n2pksy9dms0vzdzcqxsrz6nm15kl4as7wrzl440dyk1hz8hc3gh" - }, "jar": { "sha1": "64735aaf0401970524db37053b5dca19aa01f0a6", "sha256": "13099h797xp6wh0f4yly480q59xwkm63fba43y99ilzc647ipwn1" @@ -130,25 +144,17 @@ }, { - "path": "com/cognitect/transit-clj/1.0.324/transit-clj-1.0.324", + "path": "com/cognitect/transit-clj/1.0.329/transit-clj-1.0.329", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3d54e59026768d11cc965d1a6ab6ddeb3c225a9b", - "sha256": "08ry2p15sznnzv08flkbficbn76z2qmwvvwmsda73jlgb1m8da6q" - }, "jar": { - "sha1": "02bac994fa44e4af474732929510b613a3c85138", - "sha256": "1wqw79zwf9v6744h8x0njgjpspdrfi0pk2s5bb3fp4ah4jfspcsv" + "sha1": "e3bc004c0ca6bef0a0249147f57d5d741521cb11", + "sha256": "0sn9m8sfmm3p5dr9gz95j8fbkk7xip0iqs8ld6j0pkrzvff476l1" } }, { "path": "com/cognitect/transit-cljs/0.8.248/transit-cljs-0.8.248", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "ab6791b20ec49ba9fa07f388db80f2c0647544fd", - "sha256": "0qh56qq5vnb5mnwql3wfz1j2wb4km3176mxwv92ay963g1kbilpx" - }, "jar": { "sha1": "7c364a28138880b613981516528a4e3132059394", "sha256": "1j71f5l3mpy34w2p59i5nzbwwrndmknfl4nafialiag2s8ps6pmd" @@ -156,25 +162,17 @@ }, { - "path": "com/cognitect/transit-java/1.0.343/transit-java-1.0.343", + "path": "com/cognitect/transit-java/1.0.362/transit-java-1.0.362", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "4cdf43733c5f281f7952e6376cbac1ac1b590a89", - "sha256": "0017gnil7yw6zmcybcq5c3dhs8y1mp80c9r7mnl852hm077pcw4z" - }, "jar": { - "sha1": "38ce7a916c3e4a627f93e51df83fd6cd32ddfdc6", - "sha256": "166vy4vysz9sdq281bg1qky5i947fggmk1ywd7fjn1b64lqzrdcm" + "sha1": "93775c7f592ccca35e1eba3a24ac807650dedc74", + "sha256": "0m6bywis7l7g4vl049g9fsgfidgyhz1b3nb3rh0mda6x8qymfs7b" } }, { "path": "com/cognitect/transit-js/0.8.846/transit-js-0.8.846", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "8ef0fbb4e15dd33a6f262e8cdc481f0f635592d3", - "sha256": "1r7991ljrh75f8622433sga70x8swcznycl2sczdqklg9iajqlhn" - }, "jar": { "sha1": "bc6e908a4a3ec8818b3de924cd3dce433dd3411f", "sha256": "01937017b9m3dw6s10drj2s76597ayjxdyvd102gnxmb031gynha" @@ -182,25 +180,71 @@ }, { - "path": "com/fasterxml/jackson/core/jackson-core/2.8.7/jackson-core-2.8.7", + "path": "com/fasterxml/jackson/core/jackson-core/2.13.3/jackson-core-2.13.3", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "a27014716e4421684416e5fa83d896ddb87002da", + "sha256": "0gbara9dbk2khk1ksqbxsmm57gpvkf20p1qfphp4fsfclf79l4db" + } + }, + + { + "path": "com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.13.3/jackson-dataformat-cbor-2.13.3", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "bf43eed9de0031521107dfea41d1e5d6bf1b9639", + "sha256": "0q78lxy2sh9gdscnbqrjb3gkgjy1gf76gyf3yfqj353kb5vnhsla" + } + }, + + { + "path": "com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.13.3/jackson-dataformat-smile-2.13.3", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "b4e03e361e2388e3a8a0b68e3b9988d3a07ee3f3", + "sha256": "1d4zhxvr9zc01lzsa3fq1bww2bmwc06p213sr058z3g85j4gzm1j" + } + }, + + { + "path": "com/github/javaparser/javaparser-core/3.25.3/javaparser-core-3.25.3", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "55a960eea36e9ae20e48c500c3dd356b33331f1f", + "sha256": "09rca8alzi5av62sjsd4m0j6wpa0nprml0zjas87xb8dh8cbq93k" + } + }, + + { + "path": "com/google/auto/value/auto-value-annotations/1.6/auto-value-annotations-1.6", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "da725083ee79fdcd86d9f3d8a76e38174a01892a", + "sha256": "0sdf3y01nmj6kixvfqd8ljxm1vvw7r1ngaza3dkzqaig8dn975fh" + } + }, + + { + "path": "com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "2ffdd0e4f11359b9216dd8e19d051b246da6a29f", - "sha256": "0nlbbnhyzcfnixhg76m4q9lrlb5v7gkxwymbhcwbw3rjarfl33qd" - }, "jar": { - "sha1": "8b46f39c78476fb848c81a49fa807a9e9506dddd", - "sha256": "0imv9xnw8l8zmpl5fz70v04zdw75wp1x5r1y9wdjsadb310z6vr5" + "sha1": "25ea2e8b0c338a877313bd4672d3fe056ea78f0d", + "sha256": "1iyh53li6y4b8gp8bl52fagqp8iqrkp4rmwa5jb8f9izg2hd4skn" + } + }, + + { + "path": "com/google/code/gson/gson/2.9.1/gson-2.9.1", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "02cc2131b98ebfb04e2b2c7dfb84431f4045096b", + "sha256": "00x67pi14r2kdpn3rhglwcdmvhgifsxkmyrn2w5xbrp677ik919p" } }, { "path": "com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "5e902aae26ac5c36f6420f689f43333129dd69e2", - "sha256": "10vzlnl8vbjv2jqf818wdb7kgy9c6qjka7fjmmi3vdpg1mcn6pv6" - }, "jar": { "sha1": "c9ad4a0850ab676c5c64461a05ca524cdfff59f1", "sha256": "170rflxnqnah0265ik2aylmxkshyqbf2zas9bp2l32xqj9l6jsaf" @@ -208,246 +252,197 @@ }, { - "path": "com/google/javascript/closure-compiler-unshaded/v20210302/closure-compiler-unshaded-v20210302", + "path": "com/google/errorprone/error_prone_annotations/2.15.0/error_prone_annotations-2.15.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "1f790dd30fd0c2279cf73d79c4eba6a9f7516532", - "sha256": "17vb4r6bn97s4jjwja7xmpwfdnfzknhyigz2vdiqpqyh4a31hb3c" - }, "jar": { - "sha1": "14a87750b6bbe6e29932446b6db1f015851fd4e8", - "sha256": "11ydn317q2aqh1bkm7gry48r2bakw5ifpx1yrrq192vq5kg7zwhq" + "sha1": "38c8485a652f808c8c149150da4e5c2b0bd17f9a", + "sha256": "1sy40pwq5rk87zpa0mccn8g3m7xgq38xkynvbfd7irs98dqlfw06" } }, { - "path": "com/ibm/icu/icu4j/66.1/icu4j-66.1", + "path": "com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "638f68796d2b8ac88866eea5655dd52699c3af6c", - "sha256": "0m5payayqb83nzn9syrlkawdqnsf2mnl2w7v6v4gqw76b6j0bzs2" - }, "jar": { - "sha1": "72c7519b6d91f7a1f993bd44a99fe95d67211b27", - "sha256": "06hgh1ndj7gfnh60bknglbcv32g1nx4qsjagfxbw7mkzys9skk2x" + "sha1": "1dcf1de382a0bf95a3d8b0849546c88bac1292c9", + "sha256": "09na6vwxmpw4xcqszba15avzl6k6yjfvw5jbgs1xmljdfd6fwwd1" } }, { - "path": "commons-codec/commons-codec/1.10/commons-codec-1.10", + "path": "com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "44b9477418d2942d45550f7e7c66c16262062d0e", - "sha256": "1yscxabk7i59vgfjg7c1y3prj39h1d8prnwgxbisc4ni29qdpf5x" - }, "jar": { - "sha1": "4b95f4897fa13f2cd904aee711aeafc0c5295cd8", - "sha256": "0scm6321zz76dc3bs8sy2qyami755lz4lq5455gl67bi9slxyha2" + "sha1": "119ea2b2bc205b138974d351777b20f02b92704b", + "sha256": "1fc7y1dan9jqfg7j27f9iywa6mdagd8x2fhrnfgj3gc7bvb99gnm" } }, { - "path": "commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4", + "path": "com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "65112009d674333c1acfafb4e198ff250d710764", - "sha256": "007nyd66fqp3fbrmnsbfp1fpkhmr2lk33qmkp3salqld3xd7qlc8" - }, "jar": { - "sha1": "f95188e3d372e20e7328706c37ef366e5d7859b0", - "sha256": "1xyyl54sfxsdcwxdyq6b0azmr31b4dwqns850jjkw9a9dwrh5v54" + "sha1": "b421526c5f297295adef1c886e5246c39d4ac629", + "sha256": "169zydsbk48cs370lpdq5l69qgqjsq7z7ppzprzsa2i3shvs0wmk" } }, { - "path": "commons-io/commons-io/2.6/commons-io-2.6", + "path": "com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "5060835593e5b6ed18c82fc2e782f0a3c30a00b1", - "sha256": "0q4a6fp6xkyd86ikymkyv2plhf9vj8aqvggxg9d1yad2jcw8c8qc" - }, "jar": { - "sha1": "815893df5f31da2ece4040fe0a12fd44b577afaf", - "sha256": "04v5fg53jl9gbn6pyz3l7kbpxv0xjzyasnw6yd1a3hhacq2d6xzq" + "sha1": "ba035118bc8bac37d7eff77700720999acd9986d", + "sha256": "0ysaws2dawf41raccmprx8vilr5nrh6d5d70q0i63gb74b4k1br1" } }, { - "path": "compojure/compojure/1.5.2/compojure-1.5.2", - "host": "https://repo.clojars.org", - "pom": { - "sha1": "9e8da477b6682094d56802cb155291a2acb829bd", - "sha256": "036z64iprypccz03iq7lqxvw99xjh4xlsfmfwbs37pmhfnfmbdnx" - }, + "path": "com/google/javascript/closure-compiler-unshaded/v20230411/closure-compiler-unshaded-v20230411", + "host": "https://repo1.maven.org/maven2", "jar": { - "sha1": "0b5258d0616ffc5f64c2b6d95f09de56d24df439", - "sha256": "1s2k05lwnlm9a66mxnsss437i9gp70dny8y2rlfkl090s6mdqsaf" + "sha1": "2f5d7ab921f9cc07ffeb4e1c0f156f164c650eeb", + "sha256": "0gphdrrhr88bcqa1scndachvhbayh7m11zm9hcsmvzn9bw72pabw" } }, { - "path": "com/taoensso/encore/2.105.0/encore-2.105.0", - "host": "https://repo.clojars.org", - "pom": { - "sha1": "1696bfdc4804fd0edf61b62a7ded6beb15623d2b", - "sha256": "0diy07ihlscksmnm318q63gjh7yjy79s60w99h14x4v0qa7dzpxq" - }, + "path": "com/google/protobuf/protobuf-java/3.21.12/protobuf-java-3.21.12", + "host": "https://repo1.maven.org/maven2", "jar": { - "sha1": "b3e95517f4a6eeaba4d0d205215f4743db48c54d", - "sha256": "04xf06gsldv3yx92kw3a7g2xl9n3dbds6w7984bf83l984cydyj0" + "sha1": "5589e79a33cb6509f7e681d7cf4fc59d47c51c71", + "sha256": "11yzx7m9qq682n8r1xh820gjnnhddgfn3xgayf060946jbddngiz" } }, { - "path": "com/taoensso/timbre/4.10.0/timbre-4.10.0", - "host": "https://repo.clojars.org", - "pom": { - "sha1": "79b9f08eb71f68de4a9e01e8899cd80313a6a2d2", - "sha256": "1a7xr3w667868wgdxfr5655i680ip47dmlw2khr87f70hc6d64nv" - }, + "path": "com/google/re2j/re2j/1.3/re2j-1.3", + "host": "https://repo1.maven.org/maven2", "jar": { - "sha1": "daf6b8826cb16aed7fb3e0dd7a5c5266d2a53854", - "sha256": "1rza24rhkzjmik5rwfzqzywp9yvcwilj16him9n7h7p751y6klry" + "sha1": "dc7de2b32fa8cc569ab44fb849abadbbc6983b91", + "sha256": "06fypacl4jsbiddgby40fxxz6bpck7jvc5ch344f472cqnhhy16q" + } + }, + + { + "path": "commons-codec/commons-codec/1.15/commons-codec-1.15", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "49d94806b6e3dc933dacbd8acb0fdbab8ebd1e5d", + "sha256": "0qzd8v96j4x7jjcfpvvdh9ar1xhwxpxi2rh51nzhj0br7bbgdsdk" + } + }, + + { + "path": "commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "f95188e3d372e20e7328706c37ef366e5d7859b0", + "sha256": "1xyyl54sfxsdcwxdyq6b0azmr31b4dwqns850jjkw9a9dwrh5v54" } }, { - "path": "com/taoensso/truss/1.5.0/truss-1.5.0", + "path": "commons-io/commons-io/2.11.0/commons-io-2.11.0", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "a2503f302b11ebde7ebc3df41daebe0e4eea3689", + "sha256": "020946yakki3qzc652arfndzi594drxanidz9bawbb6vhxnjy6wn" + } + }, + + { + "path": "compojure/compojure/1.5.2/compojure-1.5.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "dd64379ae860c87098eea582d30a48e887f9748e", - "sha256": "01j47fp91zv5g8yd5ayhnfgm59zsiq5wcicyjjpnkhy9nsw5vl5h" - }, "jar": { - "sha1": "ef3f595da76cbcbe40124ee0a858b7ca635d30f2", - "sha256": "1a49slgn2py6mxghwmq70nm9k4s27kmvp3cgnv6v2fi5zvkphwrs" + "sha1": "0b5258d0616ffc5f64c2b6d95f09de56d24df439", + "sha256": "1s2k05lwnlm9a66mxnsss437i9gp70dny8y2rlfkl090s6mdqsaf" } }, { - "path": "com/taoensso/tufte/2.1.0/tufte-2.1.0", + "path": "com/taoensso/encore/3.21.0/encore-3.21.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "baf126a42d10c1eb81bbc735730f832a206c564a", - "sha256": "0p8b86y32597lq4g5xs06hc03bmn8847r3bvrd2d62834p1k7bvb" - }, "jar": { - "sha1": "3bece3f233cf626ae373c349117531ccafb9dfde", - "sha256": "0lx12szc2n2y21iqvrsjhdw90jiq9a9nkkdki5i80933rgwn9agv" + "sha1": "2fd92b7a4ff59715cbbee0ebfd166e2feadfa9ce", + "sha256": "0krgb7s28l12nzcgcj4601ajlpkx4wk7zij7b1ly479dxgsr03qx" } }, { - "path": "com/wsscode/pathom/2.2.31/pathom-2.2.31", + "path": "com/taoensso/timbre/4.10.0/timbre-4.10.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "dfb29e4cf9e0ff1acd55e98539bc1f28732a03c6", - "sha256": "07w3zf8r6ww3fhxa388f15bjhfwcg2nfhb75r9lxdbdgbrgv8dlv" - }, "jar": { - "sha1": "2e288758b896e973ea9474abeab1104193f8f834", - "sha256": "19hngwfnq85c8j317fck14phzzj679d84q6mkgzrx5y4v4nfjkk7" + "sha1": "daf6b8826cb16aed7fb3e0dd7a5c5266d2a53854", + "sha256": "1rza24rhkzjmik5rwfzqzywp9yvcwilj16him9n7h7p751y6klry" } }, { - "path": "com/wsscode/spec-inspec/1.0.0-alpha2/spec-inspec-1.0.0-alpha2", + "path": "com/taoensso/truss/1.6.0/truss-1.6.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "34e3fcb80ca9d39ad1b816ecec87387d6f196c17", - "sha256": "0viz44h7h1kvzk1z00ndqdw8224ng6bwgvj6789ishcbga7s33mc" - }, "jar": { - "sha1": "6a1d1d2b670a57638dcab99bcf6bba97fef832a7", - "sha256": "087masqh68qpkh5m8f37jdqkfm7pw4vg93302rrikq47z1xa48h7" + "sha1": "02c08dae83153a50eb946c4d742f574a24bb2a76", + "sha256": "0z5mw41ikk2m09vv6rn9hiqjyqlcfkr99cy7kk074w78lryy9w2f" } }, { - "path": "crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0", + "path": "com/taoensso/tufte/2.1.0/tufte-2.1.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "6b025f8fe474fb3a379230bcfe34b4766d00e051", - "sha256": "0k7rdh1jrbd45igvx45747krdiv4s5bd8viqk83ng802rgw8x8aw" - }, "jar": { - "sha1": "6728b7a444008fe576167fcadb92fea23bb17d42", - "sha256": "1y9q8v245n4v3h6sh92a1rlf9rvi7j1akvb0cf47cgg6q60rrlbx" + "sha1": "3bece3f233cf626ae373c349117531ccafb9dfde", + "sha256": "0lx12szc2n2y21iqvrsjhdw90jiq9a9nkkdki5i80933rgwn9agv" } }, { - "path": "crypto-random/crypto-random/1.2.0/crypto-random-1.2.0", + "path": "crypto-equality/crypto-equality/1.0.1/crypto-equality-1.0.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "0cd21fd6f8b7f20a614580e0271474e94b8e8863", - "sha256": "19cczijlkg4zk4r4wgvp27j3wahvwgj0ci8pbqhg3gmjri56396d" - }, "jar": { - "sha1": "cd5ed1fa18919cc13f5ab5feabdff21cc4b0faf6", - "sha256": "024dkz5vg6w0q4llw26v35mraai8x8hp0nii2c99szshn6pd0549" + "sha1": "26f76ad46f4a9881992c158118419dd9e7846b52", + "sha256": "1psbxljxvqvjvvlz1cj0df50l5npzvpyj0kdr27kzxywfq5wq5gf" } }, { - "path": "day8/re-frame/test/0.1.5/test-0.1.5", + "path": "crypto-random/crypto-random/1.2.1/crypto-random-1.2.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "a46bdc5a76e9309bcc25aebe6b2aaa40f303a4fe", - "sha256": "19438axf7jvn8vgaq17q79lxhx0q23qi12933pvnlvhc70nyr1gn" - }, "jar": { - "sha1": "9e2d06c8564f0983098ddcc046a329c4faca46c2", - "sha256": "11qsa9y006f6cg8s08zzsbbgxnpv0504xns9r9xdyvkjwi280wxl" + "sha1": "ded0350f88e6f0bcca276c73f3aaadde94dc09f3", + "sha256": "0b75799a2lilbrm9j6k5zx22iq7pfaw76rvjx72m6vdnsx38h4jw" } }, { - "path": "edn-query-language/eql/0.0.9/eql-0.0.9", + "path": "day8/re-frame/test/0.1.5/test-0.1.5", "host": "https://repo.clojars.org", - "pom": { - "sha1": "cf5657fb7b1f62a26f45c99b7ac036d5ace16d07", - "sha256": "0q004j1mjbyvqk5h7fy1lbx8smqmxaqph94cryr6n8w54l90293p" - }, "jar": { - "sha1": "b73c0347b13a5f4f34481b8daa3be35fa1b8b6cf", - "sha256": "1wvjnhmv1bsncnaw4hmfc01h5grkfx4zs9mrvx3z5pyl0ziwrfaw" + "sha1": "9e2d06c8564f0983098ddcc046a329c4faca46c2", + "sha256": "11qsa9y006f6cg8s08zzsbbgxnpv0504xns9r9xdyvkjwi280wxl" } }, { - "path": "expound/expound/0.8.5/expound-0.8.5", + "path": "expound/expound/0.9.0/expound-0.9.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "bb1cca2459083f9a719049b4271052675249606d", - "sha256": "19li8mfj83ssp7sd8ajgf4ldm3w009dn3alw4llp0llb11mq0qww" - }, "jar": { - "sha1": "757c1e307707f1a8125157a5677dce3b34d74139", - "sha256": "179l073rsw934ys7fcg2b0idb0va1r1y4mi5408p0b45bk9bscql" + "sha1": "5294f6b31a2cfa6ffbe5021d9390c738fb471927", + "sha256": "0p7r33hglnl93v0sxbvspbl9khcbs69xd2vaz8dkbq0qk5h758yn" } }, { - "path": "fipp/fipp/0.6.23/fipp-0.6.23", + "path": "fipp/fipp/0.6.26/fipp-0.6.26", "host": "https://repo.clojars.org", - "pom": { - "sha1": "ede49f8648de2972fdae7ad14d84ada3a3769a2c", - "sha256": "1aa8si55rpsb3d7h7pl1090f7zpmkaymygh0nfxcpp88jqngn4v0" - }, "jar": { - "sha1": "c3dab4003e436d9133e8194afe57d1aea8cfcb4d", - "sha256": "0yzd7qkmqq6x1ny6qq7832h30yk82058svaggqq95yhw89vizf5y" + "sha1": "fde761cd9f5c9bd13e8c91e8b9724573a87f1449", + "sha256": "10vjhnb9g9yzcgjsi1gi394nspvyki0l2m4dhd6dgbsmrrn6kjzp" } }, { "path": "hiccup/hiccup/1.0.5/hiccup-1.0.5", "host": "https://repo.clojars.org", - "pom": { - "sha1": "ad8dca6233e4c76cfa408a6857c0fcf9b4939b0f", - "sha256": "0lp5q11li5wsr6gw70h801wklcqqcxcw54cpxabj4prbzva5jq1q" - }, "jar": { "sha1": "75940a400111bbb8f80e43325e23100b6e2227bc", "sha256": "1z07dh3qg9zzcwa8x31mnqxnkfsf2sbv315n43kxmnv1fkjagm0g" @@ -457,10 +452,6 @@ { "path": "hickory/hickory/0.7.1/hickory-0.7.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "5730f6d94df251fc3082ee7d0610a1a6b5327859", - "sha256": "0yhfpg8ivqyxg8615bvg3a0ljw0mxgqd2nis5gwhf9xn6p1id6x5" - }, "jar": { "sha1": "d9e6114592c434ca1df6022bbf4d5e97714666ee", "sha256": "021ag1b00821ma6mfl66ljyza1avjlpcld0zhnz1gvppwm5974xz" @@ -470,10 +461,6 @@ { "path": "http-kit/http-kit/2.2.0/http-kit-2.2.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "2ae358658936ae7d1bf5b929503e607d60c7d94c", - "sha256": "1p8kmih1x4fm21haacz80f5as52lg3q8i02n8qzh709iwx7za5xa" - }, "jar": { "sha1": "70b17515f43a0e74937cdc0dea270d4ef13c7f32", "sha256": "1nnvadcqc7mabyp0gp2kbic85ipnxx499w36984is3ajw8k2c47p" @@ -483,10 +470,6 @@ { "path": "instaparse/instaparse/1.4.0/instaparse-1.4.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "55e534aa45dc4b6a84fce2c2ea342c66070d7c2b", - "sha256": "0pjdm2js7rjgsbq6byrdbf8bqca66dg736jvw9imc3dzz9mvy4f6" - }, "jar": { "sha1": "ade13d743d1ec8a6c5103fd0f5701b0f997e2cc4", "sha256": "188325lqyc6p9fmrcsx5vwp4cydnaxf32034jqf2ch29mnax1gvh" @@ -496,36 +479,51 @@ { "path": "io/aviso/pretty/0.1.33/pretty-0.1.33", "host": "https://repo.clojars.org", - "pom": { - "sha1": "bd20d3111649da92524569882f0f9925740aac3e", - "sha256": "034rhbp6cqzbf9c4ql28n72vmqbxvh39ghf1b2axlnfza38w783b" - }, "jar": { "sha1": "2ebf75b7ff2a2260827453e7ea98e012a9eca3e2", "sha256": "06w7hpgccr7qy47cwzpq5h2fw27am1imc9cbpg3bc5bbydz9q4df" } }, + { + "path": "io/methvin/directory-watcher/0.17.1/directory-watcher-0.17.1", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "cf173a2fbca13eea5de68ea7b3434ce2c627fdeb", + "sha256": "176sa5hglp358nswyfafqh98l79971h8qxncpmbb5y227v4qx4xd" + } + }, + + { + "path": "io/replikativ/datalog-parser/0.2.25/datalog-parser-0.2.25", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "4d59fde5929044463b0385e9161709a64a4f3d32", + "sha256": "0lbwrpsgfg7ri7bqrh23w3fjkfc9jlh4s1nim8rd284pc42xhnhg" + } + }, + { "path": "io/undertow/undertow-core/2.2.4.Final/undertow-core-2.2.4.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "0c0f3b7a6b2c2b4e73d719362b4595e77fbe98cd", - "sha256": "14z0577jgx3r510zgjrzd2vcz9md3d5qpb81ir14zis9vdn5pwxf" - }, "jar": { "sha1": "78650b4029dd9280c4769d9425b5559f12cb83bf", "sha256": "1brpkd2l98byf76jga6hj5drv5sj2d93lxlq2xz0rxpqyqas1xm4" } }, + { + "path": "javax/annotation/jsr250-api/1.0/jsr250-api-1.0", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "5025422767732a1ab45d93abfea846513d742dcf jsr250-api-1.0.jar", + "sha256": "07wl9bsxxh9id5rr8vwc1sgibsz1s40srpq073nq7ldnv7825ad1" + } + }, + { "path": "javax/servlet/servlet-api/2.5/servlet-api-2.5", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "a159fa05cce714c83deff647655dd53db064b21c", - "sha256": "07ma7yabvz3jkbxjm87wxdzljsf6hxqahv3a5ljk516dyc31axv9" - }, "jar": { "sha1": "5959582d97d8b61f4d154ca9e495aafd16726e34", "sha256": "1p6lk86qwrr8k2pgjs3pmfh44h9ff05ckcvgnsnyxykh18vfln66" @@ -535,10 +533,6 @@ { "path": "javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "61dab99f547e2110e42e35f659d9ba27bd00108c", - "sha256": "0yi9yv58skp6badj6hjfy1hhjs55jja0wkyj3ap55s81k5xnwvs6" - }, "jar": { "sha1": "99f802e0cb3e953ba3d6e698795c4aeb98d37c48", "sha256": "00rxpc0m30d3jc572ni01ryxq8gcbnr955xsabrijg9pknc0fc48" @@ -548,10 +542,6 @@ { "path": "medley/medley/0.8.2/medley-0.8.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "f59de194201b5e90166571ce4b3db1774fb576f4", - "sha256": "1vhy2634m07a2asz354sds2i7g6gwm8bxfpsmp8dfbr4226hi4m3" - }, "jar": { "sha1": "0c05ef36ae49925af44c781108ecf8b704a83a8f", "sha256": "1hf1jd60jshd1p8yknfnimfsbiz9x1kg8x1gb6939xxx6sk953c8" @@ -561,10 +551,6 @@ { "path": "mvxcvi/alphabase/1.0.0/alphabase-1.0.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "2cd07338e4e0a8f7f20d26c8212e5a3333c7acac", - "sha256": "1kan1lb3ckc0l447cj3l83lh6svz5bk514j0y9lxif6is07b2qxg" - }, "jar": { "sha1": "008785c0ff977d8132af4aaa931d88ffc44fca03", "sha256": "1g395and521h2q370vh7w0psx63a1zb5f2rcrafqgzw5s3nwlm4q" @@ -574,10 +560,6 @@ { "path": "net/cgrand/macrovich/0.2.1/macrovich-0.2.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "8b596c51c4d541ce1cc936bba18ef4d0b8d4aac1", - "sha256": "1ajpbx1bk2bp5f6zvs0yc6ikzx816l9jm2fchbn0mmlb4x4nmdxp" - }, "jar": { "sha1": "abcb26cbfe0f8eef363b25525210c0fe1eb1f693", "sha256": "119rmznkfsk1df3q9408dkd9kcqsbpffni19dzrjr7k05ijcl487" @@ -585,337 +567,242 @@ }, { - "path": "nrepl/nrepl/1.0.0/nrepl-1.0.0", + "path": "net/java/dev/jna/jna/5.12.1/jna-5.12.1", + "host": "https://repo1.maven.org/maven2", + "jar": { + "sha1": "b1e93a735caea94f503e95e6fe79bf9cdc1e985d", + "sha256": "1cskrxarxlrh7h73sh44g4cn4k47mnlf2hnqj7p0vmj09yn19a4i" + } + }, + + { + "path": "nrepl/bencode/1.1.0/bencode-1.1.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "79b3e7030f2da9c4b8a20e4e5b44b401fbaccefc", - "sha256": "0wnsyd2vwikqljl8si3040s5b89fm8j9zfa4a1c8g3lzj4npjwvl" - }, "jar": { - "sha1": "f47774c43493efdc879d36b95ebd67ea0d9c890a", - "sha256": "1fx5ssmixgqmklliw0ng8fjz41kkhys56x8dbwv9yqrfzws9f2x3" + "sha1": "48e0674aeb221294c8728ad68571c01b95df4f5b", + "sha256": "0syyqsx376lxirv3prx27klvz1x98vxg6rqsaniz4ddi45vxlm2p" } }, { - "path": "org/clojure/clojure/1.10.1/clojure-1.10.1", - "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3fc51cbb6dc8bb6fefc2bae63da919ae7e3d538e", - "sha256": "131sv1nv3s0mpfv3bplh1z0b6hh7m403x00sxn236iqfz8jazxqh" - }, + "path": "nrepl/nrepl/1.0.0/nrepl-1.0.0", + "host": "https://repo.clojars.org", "jar": { - "sha1": "a1e6b92ce9b1bfc5d181867a45da8a38a6077662", - "sha256": "06nj99mi0092qhv32ipk0nws4sdhnc890xx4gsgabllyzn8zkxnl" + "sha1": "f47774c43493efdc879d36b95ebd67ea0d9c890a", + "sha256": "1fx5ssmixgqmklliw0ng8fjz41kkhys56x8dbwv9yqrfzws9f2x3" } }, { - "path": "org/clojure/clojurescript/1.10.844/clojurescript-1.10.844", + "path": "org/apache/ant/ant/1.10.11/ant-1.10.11", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "f4004d2de394c5f41317a38ae32f79e78826b45f", - "sha256": "0nq8mz45gl86aigrmjnkq2fd612caayxfzkyk03dmp5v4sr5zxf6" - }, "jar": { - "sha1": "86bedf67c795c72bde3feb0415b41be8b95f2cbb", - "sha256": "03rs4dpwssa5ym9idip6vkxq27np3dwx7mzxms2s0yv4lipla58v" + "sha1": "b875cd48a0bc955ae9c5c477ad991e1f26fb24d2", + "sha256": "0m07pifkdpwghpp8wvqh14sbxazmjbkkpsfakw6ixq5apfdvih48" } }, { - "path": "org/clojure/core.async/1.3.610/core.async-1.3.610", + "path": "org/apache/ant/ant-launcher/1.10.11/ant-launcher-1.10.11", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "bbc3c7d710edf8ab0ebf44b111f75861da7a862c", - "sha256": "0z1g9pklb3z4l4zc4327bzpwm9nfqn43mxrf7k4zlvl679a9j136" - }, "jar": { - "sha1": "dbe356df16976e1d820463722b6f0e3c3b3f8e26", - "sha256": "0xv11hc7mdgscy18pnpj1afkpmmz31cajygn698n35bc8v7jzfq3" + "sha1": "ea0a0475fb6dfcdcf48b30410fd9d4f5c80df07e", + "sha256": "0mnj5v660qvmrsi1m6z0dnykw3df8f1213byzp45l2wqgbgk1dfs" } }, { - "path": "org/clojure/core.cache/1.0.207/core.cache-1.0.207", - "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "685d2afab3d69ae3fc3d27a823c047a7ace55826", - "sha256": "06y0n1p98acyrw8af5lgrl7dysxvzf6drzsqxkl153bly4psagki" - }, + "path": "org/babashka/sci/0.7.38/sci-0.7.38", + "host": "https://repo.clojars.org", "jar": { - "sha1": "53a26d2487b67fb92ee429bcba951100927f653d", - "sha256": "1jjyasbxjylgr02gnfkxdf14sfkln547xj5r3x33p21n6fjysi4g" + "sha1": "ef2d8c74065b9a7d685a11bff017676db308a923", + "sha256": "04pkxwcgkd1p4f4rszsr6pp18fl0vni1az47a390llrhyyrjcckn" } }, { - "path": "org/clojure/core.memoize/1.0.236/core.memoize-1.0.236", - "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "ea0699a15104dd065c591d429d65c3a48884e97a", - "sha256": "1s094b7qns4g2yhjzh0kfkar91dpwvw137jqn79cscsvmq7qjkk3" - }, + "path": "org/babashka/sci.impl.types/0.0.2/sci.impl.types-0.0.2", + "host": "https://repo.clojars.org", "jar": { - "sha1": "56b14b1dfe3fe4ac638c191131124231f4417236", - "sha256": "0hal4qc90yxiq5mqp006bv9y9x0g48xw8hfcqvf79varzwwgg744" + "sha1": "45a05ece33609c3ad26a6ea4e05130560da82306", + "sha256": "0pwwqq11rcknpcwbwsbw7pgbgnd7hqiawn0r8yvk14qfwa6p7z46" } }, { - "path": "org/clojure/core.rrb-vector/0.1.1/core.rrb-vector-0.1.1", + "path": "org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3231642aa1dcf628c864a5f208cd293fbd6a385a", - "sha256": "18kk5sds5lg8r2kidhz9qpgyrvggkj8j4sgfdsmyyl93w3f16lnp" - }, "jar": { - "sha1": "aafb7677ec1e9f344fc834bbbdb91e8ba02af474", - "sha256": "0cqyy1vqrhilgwrdxsibd7360ch3hhwjnbbnzsak38v6i6mg66xl" + "sha1": "d5692f0526415fcc6de94bb5bfbd3afd9dd3b3e5", + "sha256": "1jzkwzdwd6wvrg0lrsh90df61frc5accp4y2x5fyqmx3q9d7h47z" } }, { - "path": "org/clojure/core.specs.alpha/0.2.44/core.specs.alpha-0.2.44", + "path": "org/clojure/clojure/1.11.1/clojure-1.11.1", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "5626897d1c41a6374c995a296789818a499b8804", - "sha256": "11m6k5bm8yzrhr872i5y74iqynhw6z4m7y9ff08kzrfqr5k7plwd" - }, "jar": { - "sha1": "6027ceb1d1ae70a6a3fb1a8da2144632fa688604", - "sha256": "071q9dvp9nn3fkqs9yc27kgnmddkps1r0w22d3vipr78y3bc87iv" + "sha1": "2896bc72c90da8125026c0e61df0470a084f9ec3", + "sha256": "1pml1iqzix0vzi51kf86c0yj8miss41lk52m2hanbd1s8blvd093" } }, { - "path": "org/clojure/data.json/1.0.0/data.json-1.0.0", + "path": "org/clojure/clojurescript/1.11.60/clojurescript-1.11.60", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "a668636a98c1c7ff5b076425b574048ea52f6f32", - "sha256": "181qbg3l3mqqdn5bwgr96qa2p57aydyq5wq6rwvfhbpgnpk2z30l" - }, "jar": { - "sha1": "a867078a9ab525f8acd7c363828678d9df73248f", - "sha256": "0pa7zdhhclfrn3pyylwv8dhkz8lfl5p3ihjdwdiqmj7xpsg4ypqv" + "sha1": "bc14df6666853ed869d7b88aaa864111c65d0c7f", + "sha256": "104mwhda4k9mw7qdszxrzha1idy9yqsidssw4ljf4m58l3rpgkhl" } }, { - "path": "org/clojure/data.priority-map/1.0.0/data.priority-map-1.0.0", + "path": "org/clojure/core.async/1.5.648/core.async-1.5.648", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "4c5e59860b70334b81ab32c989912eaa4dfc1edd", - "sha256": "058kbfgwhjf2w9clmk9jpwf21rr1q13lyk610cvw42x6fdb6dsd1" - }, "jar": { - "sha1": "44eeb2b3ee3ac2f210cfbf2b0452e2d70364e86f", - "sha256": "1x6bjz8qhba4660aaci5lzj46a593llxbh5hvpk689ar7xc3w65i" + "sha1": "134b1e0eac15fdd1718f8a8ddacbb0902961558f", + "sha256": "0b1krpckkc6ai85h32mfs3v7awgjcld38s7nwbklmjf7pxpv1fjd" } }, { - "path": "org/clojure/google-closure-library/0.0-20201211-3e6c510d/google-closure-library-0.0-20201211-3e6c510d", + "path": "org/clojure/core.cache/1.0.225/core.cache-1.0.225", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "9fbaa40e54d12d1d35afee260600b8e7325034cc", - "sha256": "046qdcbqclxz0p4lnahglqkazraw47gymx3cin5jrw2wd7dpmr0l" - }, "jar": { - "sha1": "b8c673dd84d8ed85c6d857e28afee5524a0ef82c", - "sha256": "0q84zw1nl0sg69cx9i7g2bkw7996ig2j3m9pw4yfysjsn5aycm1q" + "sha1": "ddd58c0d29cf1515d13351cc0770634ecac884f0", + "sha256": "1cd5yrlm80fqpjs0461isx57s0ymmgxwi0iqm7cdnp6sgsaally1" } }, { - "path": "org/clojure/google-closure-library-third-party/0.0-20201211-3e6c510d/google-closure-library-third-party-0.0-20201211-3e6c510d", + "path": "org/clojure/core.memoize/1.0.253/core.memoize-1.0.253", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "93650c3e00cf1dc0811d2e347068828cf6700fca", - "sha256": "1y6a10n8w98gr02ys8zxkddq2qrz7l5y3462d4hg8jpaq3r2pdm8" - }, "jar": { - "sha1": "edcb415db3c88ada448cfbf65b021f12c7b131e9", - "sha256": "1f5hjr2r323il0g9maamwdbgqxrvm3hg87jsgc13wa7naw4pm9pi" + "sha1": "bfa3ac940d93d50a14e4301b4cf8295e451b97c4", + "sha256": "1mhy3s8yjzyx47042za3b1d3nmp1bcqk83d2s30jdcra322hb4aa" } }, { - "path": "org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176", + "path": "org/clojure/core.rrb-vector/0.1.2/core.rrb-vector-0.1.2", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "7e28eb2449d59217132147c19a80e0d3c8c2515f", - "sha256": "14mj43w6lfqh68c7yx9rshchpjdzwl1nmmlwdavwhk2qgd3w1769" - }, "jar": { - "sha1": "cd2d5b03d2ff95a958cb075201b89d28a7dea626", - "sha256": "1i3chggca910ln6h59ns17p454rpw55ffl6hgymx5p9lzzn9ckpw" + "sha1": "0404feea925608b921b56acd11d3b187a0d33fe4", + "sha256": "13hkx1285f2imqlj6wbgyxki2yg8rmfr49iq1zijxm1cgfx8xyai" } }, { - "path": "org/clojure/test.check/1.1.0/test.check-1.1.0", + "path": "org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "ae05079a8fd1d3cb761a68d85c29d3c71b1f764c", - "sha256": "1njqpkx2zdsy28sijjfbzawlffajgb142cliz4xcm1w2sxng7ihv" - }, "jar": { - "sha1": "cdf224607aaed0c087eda05fd87144b86242366c", - "sha256": "04c8311pc39aaafkcrkdlnr0zfjkimhky246x9nj11mg5crnbhlx" + "sha1": "a2a7ea21a695561924bc8506f3feb5d8c8f894d5", + "sha256": "1j6bsr1blcps3gw18d0jx538rg41jr1l7r37hlamrr5vf30aivh6" } }, { - "path": "org/clojure/tools.analyzer/1.0.0/tools.analyzer-1.0.0", + "path": "org/clojure/data.json/2.4.0/data.json-2.4.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "fa72b6392b31762b55e0dc3de1c220ecdc6bb8a7", - "sha256": "1yg46a9zbga7rsrhwdv877hh60hcbyaykn37r3i50icxmgqcylq4" - }, "jar": { - "sha1": "d2fb65426c7998647fb1fb3db1fb5b222ab91df6", - "sha256": "0mj1xi3v03fzcw1smpayvbvbgly2p3ysbgfz7jgfdhmxi4gl6gs6" + "sha1": "d779823f78d614897df79cd1823cb1cef840fa5b", + "sha256": "1pva908ndg2havnxyljipsbmqpwca6jjni9w64hd9v8y9scjygzc" } }, { - "path": "org/clojure/tools.analyzer.jvm/1.1.0/tools.analyzer.jvm-1.1.0", + "path": "org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3f21bdbd549557232eb0bf0965b2beea34004d52", - "sha256": "0cyyhf82pn4mjw4whr4sx3cnxrgsk862dq92gn79yawxr6842i51" - }, "jar": { - "sha1": "027d2ebe594eb5f46d6bcea62593e184937b3011", - "sha256": "0kcfcn12dmyrm7sk1jkrlcb7ws8kazfqziv62mfid62xc095gayz" + "sha1": "fc412d06788c1ea186117f8ea656d44fba654788", + "sha256": "0k3gxah05i1pgfqvqx2sc7v2yh3na3jiv1zkcvyin3zsf92aylgy" } }, { - "path": "org/clojure/tools.cli/1.0.194/tools.cli-1.0.194", + "path": "org/clojure/google-closure-library/0.0-20230227-c7c0a541/google-closure-library-0.0-20230227-c7c0a541", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3f031e4de9d4226452b123afc9f49e2e8bb65194", - "sha256": "0fk77qbd53dyynhxzi0cdrrjhzsrz23a3f4v4myi5hjw1pm27zfq" - }, "jar": { - "sha1": "317c231f8bb8ea1c47a2f5d81eb051ad5eefd5b8", - "sha256": "0439zi1i5cwlrkh2chjip2p7i47asrdwgplxv6basyzwhlk5wgac" + "sha1": "533ce2bdbb7925db781449abb6527af1e6c5e782", + "sha256": "0js19lw8bp9gym3pn47h867vhf65j18qc6x1pfn883vkwyasm18l" } }, { - "path": "org/clojure/tools.logging/1.1.0/tools.logging-1.1.0", + "path": "org/clojure/google-closure-library-third-party/0.0-20230227-c7c0a541/google-closure-library-third-party-0.0-20230227-c7c0a541", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "44b6bd9ac74cb5e2254e1f0b258d53c1829b865d", - "sha256": "093jy29w5gm9rp9va6qlhb6096jpf5higyk7sgmbwb5nf53qi3qb" - }, "jar": { - "sha1": "84cb5d00caa9df2ee504d46f6107f4708271f619", - "sha256": "0x2zzivn38z179lxkw9wbi9n9qwsf466lrd9y27khdz7wbxhscb5" + "sha1": "f5ea82eb1309b81ada6a14371bb848323c65e38b", + "sha256": "0jk9v4bfrxvz6wq1s86msry2mf47nwcjfplnn41yabqc44g82hva" } }, { - "path": "org/clojure/tools.macro/0.1.5/tools.macro-0.1.5", + "path": "org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "6a01a15b02728d2aab47c2cc07b05b07d4003b95", - "sha256": "0cfv243i97r38kay3rmwf9j2gk9f646bifgsl4byi3m5gps98q3h" - }, "jar": { - "sha1": "925e200c906052e462e34a2c7e78a48ffec1dec4", - "sha256": "0j428ic8aazgv9s27820ybnsmgwfv7j8ywpkxs72dych9hlxf517" + "sha1": "a7dad492f8d6cf657d82dcd6b31bda0899f1ac0e", + "sha256": "1q5ax2bkpsz11lmqnrl7pnabjsrps62xsyajlmbsjrjwnn78kv37" } }, { - "path": "org/clojure/tools.reader/1.3.3/tools.reader-1.3.3", + "path": "org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "3b562275e65c32494f606eeb2aa2f297f4d7d434", - "sha256": "0qyngfvp5nbjgvjqdyicq0kz29i3ixc0lf71zbmcgnk6nlia4zy3" - }, "jar": { - "sha1": "d87b8bf9f6ce87b207d5ac625236d72923b7d71f", - "sha256": "13vvsxzyxy6ppkjw15gi5h4n8wy5rqy3cy4qwkv8dqlv8i2jzs36" + "sha1": "692882a35d7b50947d6e4852fba8a51d8d5e3646", + "sha256": "08fzw3srrppgq1d11sh1ghnyvi24ixa10kbqsncc7xyx7fybcs0k" } }, { - "path": "org/graalvm/js/js/20.1.0/js-20.1.0", + "path": "org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "95452a7fdac1d358f1dd66b33e49f4440e986922", - "sha256": "0gkazzg8771g3pc90fb99wmlk99rjimcryrmzz6zab742m4dbina" - }, "jar": { - "sha1": "0abe5e8068014ccb34cf075637a00b7ce37e4a8c", - "sha256": "0v5pxjl9p7wwfrrzkkqh6qbvnn0p8n342smxzcqk3qxl4ah3aqnk" + "sha1": "449691b55d7d526258ce02c69b4699f2897c494d", + "sha256": "0phfs1z1scvdi00348zjh223xncmgrkmlrnbca4dh7lk701gy34i" } }, { - "path": "org/graalvm/js/js-scriptengine/20.1.0/js-scriptengine-20.1.0", + "path": "org/clojure/tools.cli/1.0.206/tools.cli-1.0.206", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "020bac4e8232f0b051e3e6b8033f67653cf9c685", - "sha256": "1avd7kmwh0i6nkcirwl358a6lkpqwara0f5a7qiw1fjivc81qmzq" - }, "jar": { - "sha1": "a4accb1ced82da8d61bd2928f435de8af548dc2b", - "sha256": "03001wa3xs08lw2rz27w5s0fyspyhkiiarqsrq9yf8gfysmnik2s" + "sha1": "5341b1ff68ec84e4ecff14c3611f81d36dba1041", + "sha256": "05pns6pzb9kkpknicabk2wdbiv4hi9wyr3w99aafmf8r35lx55vb" } }, { - "path": "org/graalvm/regex/regex/20.1.0/regex-20.1.0", + "path": "org/clojure/tools.logging/1.1.0/tools.logging-1.1.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "c271e87bc6e9d32124542974ab13e6cc505667e7", - "sha256": "017wnn9g87zyvrrzkf7g0n04abdgdgpvjpfakjngbaam67klwdj9" - }, "jar": { - "sha1": "3aa7469814f842ac09b2c0441b14e9ffcd102bc4", - "sha256": "0mjhwprm9jvp0x3rwdkzkvpsa34l4zql0n6rrx8pca2dq5ylrzgv" + "sha1": "84cb5d00caa9df2ee504d46f6107f4708271f619", + "sha256": "0x2zzivn38z179lxkw9wbi9n9qwsf466lrd9y27khdz7wbxhscb5" } }, { - "path": "org/graalvm/sdk/graal-sdk/20.1.0/graal-sdk-20.1.0", + "path": "org/clojure/tools.macro/0.1.5/tools.macro-0.1.5", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "86ff6fd0a63edfb499edb63d9bc5a1eb1b67d775", - "sha256": "1nzlni24cqvqq35aplhjw7a5fkyx4hql5kysd804i2w07vs14f48" - }, "jar": { - "sha1": "bccc9108aabf60d30ce574bf83bb582b188df687", - "sha256": "0l73z955gnr4jiy45xjqnv28cnzdxc1sip4iqk1fx184kn1cs8jk" + "sha1": "925e200c906052e462e34a2c7e78a48ffec1dec4", + "sha256": "0j428ic8aazgv9s27820ybnsmgwfv7j8ywpkxs72dych9hlxf517" } }, { - "path": "org/graalvm/truffle/truffle-api/20.1.0/truffle-api-20.1.0", + "path": "org/clojure/tools.reader/1.3.6/tools.reader-1.3.6", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "de4d7ff00c0b8041fef975432f3ce8515f4b235a", - "sha256": "10sz902rdm9av7qc0hc99cc4xzi6kv13m2ms5svc2nn8cfaly19a" - }, "jar": { - "sha1": "32453b17c939deedab247f154e63c59ca286eec9", - "sha256": "08g5hgm3nha8vdray69nccnm28azi3dw14g5lim2gs1f6n5064h6" + "sha1": "927809dcb44fa726e4969d993e3e733636d95ebb", + "sha256": "1q5q7fmshybvp55f6qys8i5sbzfaix5v9f9b55dkbhv55hgv7l8i" } }, { "path": "org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "af3b2b71de5691126a16d00e3155576dcaa1e3dc", - "sha256": "03ysag9wb2binc8r7nkwhpsw97sdfhhg6isydba3apy4x1prbcas" - }, "jar": { "sha1": "d9a09f7732226af26bf99f19e2cffe0ae219db5b", "sha256": "0qk19ja8zv4jdxcmw4krcdax1j4iham9gszmjc7vp66hmwqi5drz" @@ -925,10 +812,6 @@ { "path": "org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "9d82f8eea1b5ed484775517d7588e320f9f7797a", - "sha256": "1fcjr8qlilsqhmlcqzayhhkjs4dvr4i62i9kga0a8gmc2q7g84gp" - }, "jar": { "sha1": "40fd4d696c55793e996d1ff3c475833f836c2498", "sha256": "1f7f4kjn3v6vibhgsr3k8hl0r2xq0c2rbcl82dx0bqg5jdyqgzlf" @@ -938,10 +821,6 @@ { "path": "org/jboss/threads/jboss-threads/3.1.0.Final/jboss-threads-3.1.0.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "95a6983bf04ecc982595c0f940a129943589d29f", - "sha256": "0gr3wmgj8am99r4jprspz9v11nqxgd7xcmaz27i8sxvhk32dfqcb" - }, "jar": { "sha1": "9b260c0302f637a84a52d3d118214a3c59217615", "sha256": "0yc0p71y7yjhqjhkvqqi9xqgljavp3aslnik2k7dppbxnkrnlff9" @@ -951,10 +830,6 @@ { "path": "org/jboss/xnio/xnio-api/3.8.0.Final/xnio-api-3.8.0.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "96d871c0d3cc7db4f0937ce7d74529eae287e1e0", - "sha256": "0zfs8pai9fy12v6kal1yspi8kz2fwgx63idl7ff5a80z779ra6z5" - }, "jar": { "sha1": "e2c29acf42ac6f42c34f0b74ba089e3f3d1b2394", "sha256": "041qnvb74bkgmfxyd23vdl26il55cmfbhi6a4bm3fcmyrpapjfjl" @@ -964,10 +839,6 @@ { "path": "org/jboss/xnio/xnio-nio/3.8.0.Final/xnio-nio-3.8.0.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "65b3bca2f547f1e7c9cc2b0e9f108c48c47bf295", - "sha256": "0yg6giqq33n9lwz4g5z3bw50jl61v03widfvfib45gizxpgxbanl" - }, "jar": { "sha1": "90c57dcf7f8c846b4da331d0e6e048c39842c92a", "sha256": "1zndnb5648wqw23gj80zjqk3yd8gq6grqhz9n4zrcqixx1z586jf" @@ -977,10 +848,6 @@ { "path": "org/jsoup/jsoup/1.9.2/jsoup-1.9.2", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "72f6a64cd9cd47bb7aba05c84b9935650a098998", - "sha256": "0zh9xn8qcgjyhki5kbhb3rhbhd12avwqy6n9fqfzymdq3c41k8lk" - }, "jar": { "sha1": "5e3bda828a80c7a21dfbe2308d1755759c2fd7b4", "sha256": "0sm4s1a8plb8z5467799jvp0s37dr98q82z3y436w9c2n7qqa64w" @@ -988,90 +855,44 @@ }, { - "path": "org/msgpack/msgpack/0.6.12/msgpack-0.6.12", + "path": "org/jspecify/jspecify/0.2.0/jspecify-0.2.0", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "92138e8a6a64f25d226b6244f80dc22154d79fa7", - "sha256": "1vkd0p2rb1pdxh963235mkczamqg05p17mdplmcq3ppq0a7psjcl" - }, "jar": { - "sha1": "6a0c88fe022993c490011c3dce7127b29f9a9b3b", - "sha256": "0plvpp9ra9848sb3psx2yi0gvk5gm146hhnwln08wj10hmfsd770" + "sha1": "89ca55e02b85c959bd0c4c0c13a0b1885829af44", + "sha256": "1bn0nw88v70i4sqxlfl3jsmfi0180426kh77dx07955ysbl9k8vx" } }, { - "path": "org/ow2/asm/asm/7.1/asm-7.1", - "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "7e40eb6619fd20bd7d98bf775bfdd810aec87ac7", - "sha256": "101i3pyrq082kjyz413hfqwkjjsyfnk9kx3rqr38ln56mlp78a8g" - }, - "jar": { - "sha1": "fa29aa438674ff19d5e1386d2c3527a0267f291e", - "sha256": "1pnlb1ick32bihpzc599xl9ppd07qhls6pm0xaqwrj9cdlmzmcja" - } - }, - - { - "path": "org/ow2/asm/asm-analysis/7.1/asm-analysis-7.1", - "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "71a39ae6a1a418295bd47392dc33df102b95d817", - "sha256": "1yr9djzczhygcp6b5gqr0j3mnhfdy3bil5jwjd2lvdc7jxr88qpb" - }, - "jar": { - "sha1": "379e0250f7a4a42c66c5e94e14d4c4491b3c2ed3", - "sha256": "0p5534jni1fb8nlls4g40fvqxv8rksax2yphf0jjmnv3398w04j6" - } - }, - - { - "path": "org/ow2/asm/asm-commons/7.1/asm-commons-7.1", + "path": "org/msgpack/msgpack/0.6.12/msgpack-0.6.12", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "71d16c198cfdce8f41f8a88a79b69503041d819a", - "sha256": "1p4ycfz11bph2xvyjgkhah9w1fqbkybs61b3525m433p28wpccms" - }, "jar": { - "sha1": "431dc677cf5c56660c1c9004870de1ed1ea7ce6c", - "sha256": "0n6kxicikl5v1r5fqj4xw25c4nac6wbkpggapy2lv67iv24h8ng5" + "sha1": "6a0c88fe022993c490011c3dce7127b29f9a9b3b", + "sha256": "0plvpp9ra9848sb3psx2yi0gvk5gm146hhnwln08wj10hmfsd770" } }, { - "path": "org/ow2/asm/asm-tree/7.1/asm-tree-7.1", + "path": "org/ow2/asm/asm/9.4/asm-9.4", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "56f0537ea33db27034987e0df682521ae0200a19", - "sha256": "07psh8550vfsw6dcggin2wxhmw0bq5rczyir9mcqlx0birziaabk" - }, "jar": { - "sha1": "a3662cf1c1d592893ffe08727f78db35392fa302", - "sha256": "0wq0n7py73ylp59305wbnp3rc1jklacqr9d2ghfcflha1ci2ps60" + "sha1": "b4e0e2d2e023aa317b7cfcfc916377ea348e07d1", + "sha256": "10gk2l71sfj4d0sgj971abh2d8cl19slay89kfh6bbs5vjry5l1r" } }, { - "path": "org/ow2/asm/asm-util/7.1/asm-util-7.1", + "path": "org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "206270184f3f60825fe78699bfb4854940f6c9b7", - "sha256": "11zkc7i6dw0khfcka8sfx89qmhmqaysfpacyli799azk21pxcaqh" - }, "jar": { - "sha1": "5b0b0f8cdb6c90582302ffcf5c20447206122f48", - "sha256": "06jdqxhgbb6abilnliyl4mf1x1ia9829qcpjvh1i1blnfm8qai52" + "sha1": "6c62681a2f655b49963a5983b8b0950a6120ae14", + "sha256": "1h512ry8g0nriazg3dqzs6s96502a77drw8vq26nfya97rg5gvyk" } }, { "path": "org/wildfly/client/wildfly-client-config/1.0.1.Final/wildfly-client-config-1.0.1.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "a70bef747156afdade33d9ece12f09e97c0bec77", - "sha256": "19mw1damqz6315ima64zhc16mf5jbg63zlr65whnfk8dcm6d2xg8" - }, "jar": { "sha1": "2a803b23c40a0de0f03a90d1fd3755747bc05f4b", "sha256": "1crv5kxfsbkmcfw504yqhzf26zrjgpkw1wmhxi1v1swlrriyk940" @@ -1081,10 +902,6 @@ { "path": "org/wildfly/common/wildfly-common/1.5.2.Final/wildfly-common-1.5.2.Final", "host": "https://repo1.maven.org/maven2", - "pom": { - "sha1": "c1b29b7e5445a2c0f4513155e70dade1ab24b04c", - "sha256": "0ab6aq17fc5smn30jb9g84lpg4ssy77lhq3z1xwc5p1rf35yfq5r" - }, "jar": { "sha1": "8eba40cfe86bcfcc223551e75201e6e7574c7c36", "sha256": "17rkkm9dqbxdzpamwl9jr8z285awsj6hzpavzmc87wcz9469hp5b" @@ -1094,10 +911,6 @@ { "path": "prismatic/schema/1.1.7/schema-1.1.7", "host": "https://repo.clojars.org", - "pom": { - "sha1": "d5bb7edbd1830e6400705c2b5797ced1737fb208", - "sha256": "0bmnmx53kjlcxx477wm7xvcnaf2vi95rr164xi49611kfbhh2dsd" - }, "jar": { "sha1": "289b571f1cbab59aef436fc0af56e7efc5322685", "sha256": "01zc13qhkyghhr4s1if9agbgz38gvrg8x62gn1g8fjll9nq7aca9" @@ -1107,10 +920,6 @@ { "path": "quoin/quoin/0.1.2/quoin-0.1.2", "host": "https://repo.clojars.org", - "pom": { - "sha1": "cdabd1b76f3a86c59260cd25be534a0a5b67c302", - "sha256": "0wv7m5l9hafc0ysxg7g7fqmdq94dxmv13cj37il69wvagqskarhc" - }, "jar": { "sha1": "0dbbb28df3e337233f934468915eb327ff488172", "sha256": "0b5rc1cmbgg8qpl80jyvh0ldgs7dv86c0qxixazdnz05limmnpb5" @@ -1120,10 +929,6 @@ { "path": "reagent/reagent/1.2.0/reagent-1.2.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "d2279922777793edfc0ae9e01d68a832eb5ce52d", - "sha256": "1h1gk4cykidm1jx75dq426lrgf8r7900fcir5jz59zp1ka2a0ywb" - }, "jar": { "sha1": "1b9a181b5c7ed3557768d2ea0c66f5616aef5e97", "sha256": "0scvkzfqjs613z10rngh7427v3pxdqablf0fcl65pbpkzz16wgav" @@ -1133,10 +938,6 @@ { "path": "re-com/re-com/2.8.0/re-com-2.8.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "50f13ab5d6d151b713d83a480aadb27daeae1c9e", - "sha256": "0yy5p9wvrikk2rz33xi75m10dzzcbvzb8ixcfgdb6czjbaj7mdln" - }, "jar": { "sha1": "fd038eef3c36c460613e94f2c70fc84c6eb35a66", "sha256": "0r431yq5hf8zc4j2k3lsi3vni60kk8ncinqrb7xv2qcyjw4qh178" @@ -1144,25 +945,17 @@ }, { - "path": "refactor-nrepl/refactor-nrepl/3.6.0/refactor-nrepl-3.6.0", + "path": "refactor-nrepl/refactor-nrepl/2.5.0/refactor-nrepl-2.5.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "699468e940eace1064d6fa7a7553bf87d4ed4026", - "sha256": "12djd3mxi22b23c9vrv6amq1r9x9iq9b00s3ywl301rjmq5lqh4l" - }, "jar": { - "sha1": "2b3bb82da53b5db9c2b2aa298417816b81d0ed97", - "sha256": "1ysqabmlnghki6x0636zngxza2d83c85276wp9ma9wk183mkv52a" + "sha1": "6bc3441afc94f7ca024e41a864ca75e05df7e207", + "sha256": "0w8hax99y98l53mixxzx2ja0vcnhjv8dnsaz1zj3vqk775ns5w6i" } }, { "path": "re-frame/re-frame/1.3.0/re-frame-1.3.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "b1f70463fba018c5464d3fc0843232fe955c1372", - "sha256": "0yqq1kg1si0akr7kx7w1l4vvkdai20na6h6627ibqkgwzivkc5n5" - }, "jar": { "sha1": "b7135a76432b8141027ba1f4eb6bb15a36acfb7c", "sha256": "16wi01z0j4wn04kldwzxvj0pd9dianjyb000nv5611ikhxk1qrps" @@ -1172,10 +965,6 @@ { "path": "re-frisk-remote/re-frisk-remote/1.6.0/re-frisk-remote-1.6.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "6b39ea7b345a81df08b80b411f9892b83f61890b", - "sha256": "0w577jvb7vgrdp29rfp85lvq3h3svycm6f0h29ln23j2qisqs7a8" - }, "jar": { "sha1": "dea48c4be6421c50c4bbf2c1be2ea3a6b2418d8d", "sha256": "1rkfyc5fwbafx56a6zhy0k9ygmlxp9asqzby09a5xzjsmkrx2jf1" @@ -1185,10 +974,6 @@ { "path": "re-frisk/sente/1.15.0/sente-1.15.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "4d11dff4814d1e90a548de53b373928123f74247", - "sha256": "1d2kvcf43mi9cp9ribrapgdvwmpwkq492nnsxkhdgfxyxh8cq270" - }, "jar": { "sha1": "d54aa873a848f624a282c2c2f7df947c976a77b5", "sha256": "0yhsqpi3d8x11pl1aq8z23fdyjspvq07dsyvrlkpbyx7rm64i21h" @@ -1198,10 +983,6 @@ { "path": "ring-cors/ring-cors/0.1.8/ring-cors-0.1.8", "host": "https://repo.clojars.org", - "pom": { - "sha1": "b59382655c98377c9280fe227c442e2705088ad8", - "sha256": "0qpagym9im5fjx1jmwc56abz4a9fpy7w4m0isv2lcbczy3g29k8i" - }, "jar": { "sha1": "4788dcaca6b2429bf823c1235dbb44cd5689584a", "sha256": "1382hxpgfpjdn0lcgq512yvbvq661skwd7lrakpnq9zs827jq9mc" @@ -1209,51 +990,26 @@ }, { - "path": "ring/ring-codec/1.1.2/ring-codec-1.1.2", + "path": "ring/ring-codec/1.2.0/ring-codec-1.2.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "55992693f2dd246828b727c676707a8cfd4c49f9", - "sha256": "1rqzrb4qws553vy9qw98jadq0x6prw2wsrz0kfg5bh7zh9awnpxj" - }, "jar": { - "sha1": "a3284e0488f4823d79d16ef6aea9cb62cfab08e3", - "sha256": "0q6h18mi3xcm7qn268idkdy253i8kqzm4fbr7gwbrbv7zlxjg3bm" + "sha1": "fbcc4a141c638a3bd386df8ed04c05d0481be209", + "sha256": "1hk58ln4vijf5zk2c61x8is5fhwgyrqhc49qnxbmn1b2002svn3g" } }, { - "path": "ring/ring-core/1.8.1/ring-core-1.8.1", + "path": "ring/ring-core/1.9.6/ring-core-1.9.6", "host": "https://repo.clojars.org", - "pom": { - "sha1": "0509c61560102008e76fcdd70f59a4fea50206d6", - "sha256": "0zyya3hvzbj0i5xv8acbg6hcprl10cfjakhnwmwpgb13j7sjd3b7" - }, "jar": { - "sha1": "d4d133d31918a093b15eb5dd144b70a841b61af8", - "sha256": "18dk2vx1l95p1pxsjszr4f18r4pgpha75l8pkfmb07kfddiz2bag" - } - }, - - { - "path": "spec-coerce/spec-coerce/1.0.0-alpha6/spec-coerce-1.0.0-alpha6", - "host": "https://repo.clojars.org", - "pom": { - "sha1": "87bc1c6d6f001c43c949a84c033f57b43d9e835c", - "sha256": "0hcqxrk9m9kv4n4bmj4fmqfq9q0kk3g6n0kwp5gf7nmccg6v5wn4" - }, - "jar": { - "sha1": "7ea5aa8be38113aadd61219738ac1af8651dae4f", - "sha256": "1mwi6i2v38c8jndy99qvxb9izngxkb0p7a5ynd430c63fl8kj35p" + "sha1": "8ca97618f914401c4112e2fd28d24d47c4fc2815", + "sha256": "1zj5dpcyvivvf7zsggvrd75ykr98pblv3bpfr01jbkwjwx1s2d4a" } }, { "path": "status-im/timbre/4.10.0-2-status/timbre-4.10.0-2-status", "host": "https://repo.clojars.org", - "pom": { - "sha1": "a0ada642eec4fc748cc52988754ad5cdfa1865b1", - "sha256": "1h7hhxq1kqpm2g0sk811zigi8c66si72l141gh964ly4pldpc940" - }, "jar": { "sha1": "e630bd13a422d7dbedeeb26f17aca0a473a9e5d3", "sha256": "1ipakbl438xkj1qhp6lrmjk25vihk15v86k69qba4ny7i0jhyj21" @@ -1263,10 +1019,6 @@ { "path": "thheller/shadow-client/1.3.3/shadow-client-1.3.3", "host": "https://repo.clojars.org", - "pom": { - "sha1": "90634d975a4dd78a30d147c80bc381d8a9f5dff9", - "sha256": "0v5qf5aavp9q5i92q943qphsfa40al8q8b4j98i1pymy05al9rrl" - }, "jar": { "sha1": "cb2034364161b68d1994d374eb59d6d2b0613989", "sha256": "13avr26yxns3kcab46anf5z4lxmyn72qydvgppvv26vcf77acx0p" @@ -1274,64 +1026,53 @@ }, { - "path": "thheller/shadow-cljs/2.12.0/shadow-cljs-2.12.0-aot", + "path": "thheller/shadow-cljs/2.25.0/shadow-cljs-2.25.0-aot", "host": "https://repo.clojars.org", - "pom": { - "sha1": "e89cabf1b6c7d268ee38343c839bc17c62160eaf", - "sha256": "0l9yv2c6acp3n2x5z1g9nqwqx58hl619srls5flnlf2x41f5gn7f" - }, "jar": { - "sha1": "4748679d4953be302acf7e791b284a8dc49523d7", - "sha256": "1gcbna7wam7fnhrxxfb4v3agq0655la2fmwd7r9a6ip9xxc86z3a" + "sha1": "013921db91ce4a3616aec9c72c1832a014a0fece", + "sha256": "0ks380z7h8i2ylirvjgmlicq9jjpz9w71gjv521h4xs5fb273cl0" } }, { - "path": "thheller/shadow-cljsjs/0.0.21/shadow-cljsjs-0.0.21", + "path": "thheller/shadow-cljsjs/0.0.22/shadow-cljsjs-0.0.22", "host": "https://repo.clojars.org", - "pom": { - "sha1": "c50afd20e5ad1d0a3179cfbe570e11e7f185bc40", - "sha256": "0969izwgf54hj5ddjcw57kjali5czzrr4p3g9647r8c91irplnw5" - }, "jar": { - "sha1": "9ba9f8ed128a3c607c8b81217a06b6098d2484d1", - "sha256": "0dfdq3s7sp6f9cksjpx2kzzb07cgh2zc60akk4l7shhmkcyh87yc" + "sha1": "4323f8e603a952cae34c4c6db04141e97928434f", + "sha256": "1bljcig3hkn1nhfbg2w6apz8lwm8qk74qcwd8l2mbw1plfxa0fzn" } }, { - "path": "thheller/shadow-undertow/0.1.0/shadow-undertow-0.1.0", + "path": "thheller/shadow-undertow/0.3.1/shadow-undertow-0.3.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "456dc9b20bccd14b6012540547d1a8e7c47f7c66", - "sha256": "0gwxvbpkfvy84h01gjasd0fnfgqmsaybiilbz0461vaazvcd3v8b" - }, "jar": { - "sha1": "e072ad66285641c59df19f5352872a51da106156", - "sha256": "1ywcyfsrr3g42kxwchj6jvb2x43md3sdpnnk87h9m5g786ilay3r" + "sha1": "9be444bea4037bb80b451cc52a8e80359c4c45be", + "sha256": "174s2rdxvp7d4jg9kvzjadps42bdsbi05rs2pjy5i0ssq9n23zwa" } }, { "path": "thheller/shadow-util/0.7.0/shadow-util-0.7.0", "host": "https://repo.clojars.org", - "pom": { - "sha1": "a32192757c81c784866bbe0f07d40fc3e9595190", - "sha256": "1y20asa5pvfsilqyli2l8v3dfh62wlygqcy5qvc22w0npnl0p7l8" - }, "jar": { "sha1": "61a374c204d797a92d9daeb4b8d9effeb0d81183", "sha256": "10fdbqrz7zcfan8x4aikl2i532dk9dz0dfxrww91mgynf0g90rp5" } }, + { + "path": "tigris/tigris/0.1.2/tigris-0.1.2", + "host": "https://repo.clojars.org", + "jar": { + "sha1": "a122db758561d995a83cbb40f252b64d8b0f506e", + "sha256": "184p1wqcc6ikj9gpaygv4f1mf1p6mqg3j6x1jmqfa53cvf769aj9" + } + }, + { "path": "viebel/codox-klipse-theme/0.0.1/codox-klipse-theme-0.0.1", "host": "https://repo.clojars.org", - "pom": { - "sha1": "5e1a00ea2bbdfc8cae4083c41e12be5cf89c1449", - "sha256": "1qxd30dl06yahcgqnypnc71mhqzijpmnq9imybbkbvzk65i6y4r8" - }, "jar": { "sha1": "09af0b348e6253dcf9fd567d0d22ffebdea46176", "sha256": "1qg2iyblykfkzmplc2c46916b9m0h5ad6lxmvrk5qn3pdxqr8vw0" diff --git a/nix/deps/clojure/deps.list b/nix/deps/clojure/deps.list index 93d64dbda4e..407cfa829cc 100644 --- a/nix/deps/clojure/deps.list +++ b/nix/deps/clojure/deps.list @@ -1,103 +1,120 @@ +args4j/args4j/2.33/args4j-2.33.jar +babashka/fs/0.2.16/fs-0.2.16.jar bidi/bidi/2.1.6/bidi-2.1.6.jar binaryage/env-config/0.2.2/env-config-0.2.2.jar binaryage/oops/0.7.2/oops-0.7.2.jar +borkdude/edamame/1.1.17/edamame-1.1.17.jar +borkdude/sci.impl.reflector/0.0.1/sci.impl.reflector-0.0.1.jar camel-snake-kebab/camel-snake-kebab/0.4.3/camel-snake-kebab-0.4.3.jar -cider/cider-nrepl/0.29.0/cider-nrepl-0.29.0.jar -cider/piggieback/0.5.2/piggieback-0.5.2.jar +cheshire/cheshire/5.11.0/cheshire-5.11.0.jar +cider/cider-nrepl/0.25.3/cider-nrepl-0.25.3.jar +cider/piggieback/0.4.1/piggieback-0.4.1.jar +clj-kondo/clj-kondo/2023.09.07/clj-kondo-2023.09.07.jar cljs-bean/cljs-bean/1.3.0/cljs-bean-1.3.0.jar clout/clout/2.1.2/clout-2.1.2.jar com/andrewmcveigh/cljs-time/0.5.2/cljs-time-0.5.2.jar com/bhauman/cljs-test-display/0.1.1/cljs-test-display-0.1.1.jar -com/cognitect/transit-clj/1.0.324/transit-clj-1.0.324.jar +com/cognitect/transit-clj/1.0.329/transit-clj-1.0.329.jar com/cognitect/transit-cljs/0.8.248/transit-cljs-0.8.248.jar -com/cognitect/transit-java/1.0.343/transit-java-1.0.343.jar +com/cognitect/transit-java/1.0.362/transit-java-1.0.362.jar com/cognitect/transit-js/0.8.846/transit-js-0.8.846.jar -com/fasterxml/jackson/core/jackson-core/2.8.7/jackson-core-2.8.7.jar +com/fasterxml/jackson/core/jackson-core/2.13.3/jackson-core-2.13.3.jar +com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.13.3/jackson-dataformat-cbor-2.13.3.jar +com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.13.3/jackson-dataformat-smile-2.13.3.jar +com/github/javaparser/javaparser-core/3.25.3/javaparser-core-3.25.3.jar +com/google/auto/value/auto-value-annotations/1.6/auto-value-annotations-1.6.jar +com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +com/google/code/gson/gson/2.9.1/gson-2.9.1.jar com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar -com/google/javascript/closure-compiler-unshaded/v20210302/closure-compiler-unshaded-v20210302.jar -com/ibm/icu/icu4j/66.1/icu4j-66.1.jar -commons-codec/commons-codec/1.10/commons-codec-1.10.jar +com/google/errorprone/error_prone_annotations/2.15.0/error_prone_annotations-2.15.0.jar +com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar +com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar +com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar +com/google/javascript/closure-compiler-unshaded/v20230411/closure-compiler-unshaded-v20230411.jar +com/google/protobuf/protobuf-java/3.21.12/protobuf-java-3.21.12.jar +com/google/re2j/re2j/1.3/re2j-1.3.jar +commons-codec/commons-codec/1.15/commons-codec-1.15.jar commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4.jar -commons-io/commons-io/2.6/commons-io-2.6.jar +commons-io/commons-io/2.11.0/commons-io-2.11.0.jar compojure/compojure/1.5.2/compojure-1.5.2.jar -com/taoensso/encore/2.105.0/encore-2.105.0.jar +com/taoensso/encore/3.21.0/encore-3.21.0.jar com/taoensso/timbre/4.10.0/timbre-4.10.0.jar -com/taoensso/truss/1.5.0/truss-1.5.0.jar +com/taoensso/truss/1.6.0/truss-1.6.0.jar com/taoensso/tufte/2.1.0/tufte-2.1.0.jar -com/wsscode/pathom/2.2.31/pathom-2.2.31.jar -com/wsscode/spec-inspec/1.0.0-alpha2/spec-inspec-1.0.0-alpha2.jar -crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0.jar -crypto-random/crypto-random/1.2.0/crypto-random-1.2.0.jar +crypto-equality/crypto-equality/1.0.1/crypto-equality-1.0.1.jar +crypto-random/crypto-random/1.2.1/crypto-random-1.2.1.jar day8/re-frame/test/0.1.5/test-0.1.5.jar -edn-query-language/eql/0.0.9/eql-0.0.9.jar -expound/expound/0.8.5/expound-0.8.5.jar -fipp/fipp/0.6.23/fipp-0.6.23.jar +expound/expound/0.9.0/expound-0.9.0.jar +fipp/fipp/0.6.26/fipp-0.6.26.jar hiccup/hiccup/1.0.5/hiccup-1.0.5.jar hickory/hickory/0.7.1/hickory-0.7.1.jar http-kit/http-kit/2.2.0/http-kit-2.2.0.jar instaparse/instaparse/1.4.0/instaparse-1.4.0.jar io/aviso/pretty/0.1.33/pretty-0.1.33.jar +io/methvin/directory-watcher/0.17.1/directory-watcher-0.17.1.jar +io/replikativ/datalog-parser/0.2.25/datalog-parser-0.2.25.jar io/undertow/undertow-core/2.2.4.Final/undertow-core-2.2.4.Final.jar +javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar javax/servlet/servlet-api/2.5/servlet-api-2.5.jar javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar medley/medley/0.8.2/medley-0.8.2.jar mvxcvi/alphabase/1.0.0/alphabase-1.0.0.jar net/cgrand/macrovich/0.2.1/macrovich-0.2.1.jar +net/java/dev/jna/jna/5.12.1/jna-5.12.1.jar +nrepl/bencode/1.1.0/bencode-1.1.0.jar nrepl/nrepl/1.0.0/nrepl-1.0.0.jar -org/clojure/clojure/1.10.1/clojure-1.10.1.jar -org/clojure/clojurescript/1.10.844/clojurescript-1.10.844.jar -org/clojure/core.async/1.3.610/core.async-1.3.610.jar -org/clojure/core.cache/1.0.207/core.cache-1.0.207.jar -org/clojure/core.memoize/1.0.236/core.memoize-1.0.236.jar -org/clojure/core.rrb-vector/0.1.1/core.rrb-vector-0.1.1.jar -org/clojure/core.specs.alpha/0.2.44/core.specs.alpha-0.2.44.jar -org/clojure/data.json/1.0.0/data.json-1.0.0.jar -org/clojure/data.priority-map/1.0.0/data.priority-map-1.0.0.jar -org/clojure/google-closure-library/0.0-20201211-3e6c510d/google-closure-library-0.0-20201211-3e6c510d.jar -org/clojure/google-closure-library-third-party/0.0-20201211-3e6c510d/google-closure-library-third-party-0.0-20201211-3e6c510d.jar -org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176.jar -org/clojure/test.check/1.1.0/test.check-1.1.0.jar -org/clojure/tools.analyzer/1.0.0/tools.analyzer-1.0.0.jar -org/clojure/tools.analyzer.jvm/1.1.0/tools.analyzer.jvm-1.1.0.jar -org/clojure/tools.cli/1.0.194/tools.cli-1.0.194.jar +org/apache/ant/ant/1.10.11/ant-1.10.11.jar +org/apache/ant/ant-launcher/1.10.11/ant-launcher-1.10.11.jar +org/babashka/sci/0.7.38/sci-0.7.38.jar +org/babashka/sci.impl.types/0.0.2/sci.impl.types-0.0.2.jar +org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar +org/clojure/clojure/1.11.1/clojure-1.11.1.jar +org/clojure/clojurescript/1.11.60/clojurescript-1.11.60.jar +org/clojure/core.async/1.5.648/core.async-1.5.648.jar +org/clojure/core.cache/1.0.225/core.cache-1.0.225.jar +org/clojure/core.memoize/1.0.253/core.memoize-1.0.253.jar +org/clojure/core.rrb-vector/0.1.2/core.rrb-vector-0.1.2.jar +org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.jar +org/clojure/data.json/2.4.0/data.json-2.4.0.jar +org/clojure/data.priority-map/1.1.0/data.priority-map-1.1.0.jar +org/clojure/google-closure-library/0.0-20230227-c7c0a541/google-closure-library-0.0-20230227-c7c0a541.jar +org/clojure/google-closure-library-third-party/0.0-20230227-c7c0a541/google-closure-library-third-party-0.0-20230227-c7c0a541.jar +org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.jar +org/clojure/tools.analyzer/1.1.0/tools.analyzer-1.1.0.jar +org/clojure/tools.analyzer.jvm/1.2.2/tools.analyzer.jvm-1.2.2.jar +org/clojure/tools.cli/1.0.206/tools.cli-1.0.206.jar org/clojure/tools.logging/1.1.0/tools.logging-1.1.0.jar org/clojure/tools.macro/0.1.5/tools.macro-0.1.5.jar -org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar -org/graalvm/js/js/20.1.0/js-20.1.0.jar -org/graalvm/js/js-scriptengine/20.1.0/js-scriptengine-20.1.0.jar -org/graalvm/regex/regex/20.1.0/regex-20.1.0.jar -org/graalvm/sdk/graal-sdk/20.1.0/graal-sdk-20.1.0.jar -org/graalvm/truffle/truffle-api/20.1.0/truffle-api-20.1.0.jar +org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.jar org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final.jar org/jboss/threads/jboss-threads/3.1.0.Final/jboss-threads-3.1.0.Final.jar org/jboss/xnio/xnio-api/3.8.0.Final/xnio-api-3.8.0.Final.jar org/jboss/xnio/xnio-nio/3.8.0.Final/xnio-nio-3.8.0.Final.jar org/jsoup/jsoup/1.9.2/jsoup-1.9.2.jar +org/jspecify/jspecify/0.2.0/jspecify-0.2.0.jar org/msgpack/msgpack/0.6.12/msgpack-0.6.12.jar -org/ow2/asm/asm/7.1/asm-7.1.jar -org/ow2/asm/asm-analysis/7.1/asm-analysis-7.1.jar -org/ow2/asm/asm-commons/7.1/asm-commons-7.1.jar -org/ow2/asm/asm-tree/7.1/asm-tree-7.1.jar -org/ow2/asm/asm-util/7.1/asm-util-7.1.jar +org/ow2/asm/asm/9.4/asm-9.4.jar +org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar org/wildfly/client/wildfly-client-config/1.0.1.Final/wildfly-client-config-1.0.1.Final.jar org/wildfly/common/wildfly-common/1.5.2.Final/wildfly-common-1.5.2.Final.jar prismatic/schema/1.1.7/schema-1.1.7.jar quoin/quoin/0.1.2/quoin-0.1.2.jar reagent/reagent/1.2.0/reagent-1.2.0.jar re-com/re-com/2.8.0/re-com-2.8.0.jar -refactor-nrepl/refactor-nrepl/3.6.0/refactor-nrepl-3.6.0.jar +refactor-nrepl/refactor-nrepl/2.5.0/refactor-nrepl-2.5.0.jar re-frame/re-frame/1.3.0/re-frame-1.3.0.jar re-frisk-remote/re-frisk-remote/1.6.0/re-frisk-remote-1.6.0.jar re-frisk/sente/1.15.0/sente-1.15.0.jar ring-cors/ring-cors/0.1.8/ring-cors-0.1.8.jar -ring/ring-codec/1.1.2/ring-codec-1.1.2.jar -ring/ring-core/1.8.1/ring-core-1.8.1.jar -spec-coerce/spec-coerce/1.0.0-alpha6/spec-coerce-1.0.0-alpha6.jar +ring/ring-codec/1.2.0/ring-codec-1.2.0.jar +ring/ring-core/1.9.6/ring-core-1.9.6.jar status-im/timbre/4.10.0-2-status/timbre-4.10.0-2-status.jar thheller/shadow-client/1.3.3/shadow-client-1.3.3.jar -thheller/shadow-cljs/2.12.0/shadow-cljs-2.12.0-aot.jar -thheller/shadow-cljsjs/0.0.21/shadow-cljsjs-0.0.21.jar -thheller/shadow-undertow/0.1.0/shadow-undertow-0.1.0.jar +thheller/shadow-cljs/2.25.0/shadow-cljs-2.25.0-aot.jar +thheller/shadow-cljsjs/0.0.22/shadow-cljsjs-0.0.22.jar +thheller/shadow-undertow/0.3.1/shadow-undertow-0.3.1.jar thheller/shadow-util/0.7.0/shadow-util-0.7.0.jar +tigris/tigris/0.1.2/tigris-0.1.2.jar viebel/codox-klipse-theme/0.0.1/codox-klipse-theme-0.0.1.jar diff --git a/nix/deps/clojure/generate.sh b/nix/deps/clojure/generate.sh index f2dca2397b4..42d34f73a71 100755 --- a/nix/deps/clojure/generate.sh +++ b/nix/deps/clojure/generate.sh @@ -53,8 +53,6 @@ function nix_entry_from_jar() { JAR_PATH="${MAVEN_CACHE_PATH}/${JAR_REL_PATH}" JAR_NAME=$(basename "${JAR_PATH}") JAR_DIR=$(dirname "${JAR_PATH}") - # POM might have a slightly different name - POM_PATH=$(echo ${JAR_DIR}/*.pom) REPO_NAME=$(get_repo_for_dir "${JAR_DIR}") REPO_URL=${REPOS[${REPO_NAME}]} @@ -62,18 +60,11 @@ function nix_entry_from_jar() { JAR_SHA1=$(cat "${JAR_PATH}.sha1") JAR_SHA256=$(get_nix_sha "${JAR_PATH}") - POM_SHA1=$(cat "${POM_PATH}.sha1") - POM_SHA256=$(get_nix_sha "${POM_PATH}") - # Format into a Nix attrset entry echo -n " { \"path\": \"${JAR_REL_NAME}\", \"host\": \"${REPO_URL}\", - \"pom\": { - \"sha1\": \"${POM_SHA1}\", - \"sha256\": \"${POM_SHA256}\" - }, \"jar\": { \"sha1\": \"${JAR_SHA1}\", \"sha256\": \"${JAR_SHA256}\" diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 14876d4d7b2..5acb02d8589 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -11,11 +11,16 @@ [com.cognitect/transit-cljs "0.8.248"] [mvxcvi/alphabase "1.0.0"] [camel-snake-kebab "0.4.3"] + ;; Dev dependencies [refactor-nrepl "2.5.0"] [cider/cider-nrepl "0.25.3"] [cider/piggieback "0.4.1"] [re-frisk-remote "1.6.0"] + + ;; Use the same version specified in the Nix dependency. + [clj-kondo/clj-kondo "2023.09.07"] + ;; We don't use the encore library, but re-frisk requires re-frisk/sente (fork of ;; com.taoensso/sente), which in turn requires encore. We need to bump encore to ;; 3.21.0+ to remove a warning displayed while shadow-cljs starts (commit diff --git a/src/mocks/js_dependencies.cljs b/src/mocks/js_dependencies.cljs index 2712704b92f..71ba47bc80a 100644 --- a/src/mocks/js_dependencies.cljs +++ b/src/mocks/js_dependencies.cljs @@ -323,7 +323,11 @@ (def react-native-permissions #js {:default #js {}}) -(def push-notification-ios #js {:default #js {:abandonPermissions identity}}) +(def push-notification-ios + #js + {:default #js + {:abandonPermissions identity + :removeAllDeliveredNotifications identity}}) (def rn-emoji-keyboard #js {:EmojiKeyboard #js {}}) diff --git a/src/native_module/core.cljs b/src/native_module/core.cljs index 855484bed7c..9967a33d2f6 100644 --- a/src/native_module/core.cljs +++ b/src/native_module/core.cljs @@ -3,7 +3,6 @@ [utils.validators :as validators] [taoensso.timbre :as log] [react-native.platform :as platform] - [react-native.core :as rn] [utils.transforms :as types] [clojure.string :as string])) @@ -14,7 +13,7 @@ (defn init [handler] - (.addListener ^js rn/device-event-emitter "gethEvent" #(handler (.-jsonEvent ^js %)))) + (.addListener ^js (.-DeviceEventEmitter ^js react-native) "gethEvent" #(handler (.-jsonEvent ^js %)))) (defn clear-web-data [] diff --git a/src/native_module/push_notifications.cljs b/src/native_module/push_notifications.cljs new file mode 100644 index 00000000000..40ba15dee40 --- /dev/null +++ b/src/native_module/push_notifications.cljs @@ -0,0 +1,42 @@ +(ns native-module.push-notifications + (:require ["react-native" :as react-native] + [taoensso.timbre :as log])) + +(defn push-notification + [] + (when (exists? (.-NativeModules react-native)) + (.-PushNotification ^js (.-NativeModules react-native)))) + +(defn present-local-notification + [opts] + (.presentLocalNotification ^js (push-notification) (clj->js opts))) + +(defn clear-message-notifications + [chat-id] + (.clearMessageNotifications ^js (push-notification) chat-id)) + +(defn clear-all-message-notifications + [] + (.clearAllMessageNotifications ^js (push-notification))) + +(defn create-channel + [{:keys [channel-id channel-name]}] + (.createChannel ^js (push-notification) + #js {:channelId channel-id :channelName channel-name} + #(log/info "Notifications create channel:" %))) + +(defn enable-notifications + [] + (.enableNotifications ^js (push-notification))) + +(defn disable-notifications + [] + (.disableNotifications ^js (push-notification))) + +(defn add-listener + [event callback] + (.addListener ^js (.-DeviceEventEmitter ^js react-native) + event + (fn [^js data] + (when (and data (.-dataJSON data) callback) + (callback (.-dataJSON data)))))) diff --git a/src/quo2/components/avatars/wallet_user_avatar.cljs b/src/quo2/components/avatars/wallet_user_avatar.cljs index 722d597365e..eae352af973 100644 --- a/src/quo2/components/avatars/wallet_user_avatar.cljs +++ b/src/quo2/components/avatars/wallet_user_avatar.cljs @@ -28,21 +28,25 @@ (defn wallet-user-avatar "params, first name, last name, color, size and if it's dark or not!" - [{:keys [f-name l-name customization-color size] - :or {f-name "John" - l-name "Doe" - customization-color :red - size :x-large}}] + [{:keys [f-name l-name customization-color size monospace? uppercase?] + :or {f-name "John" + l-name "Doe" + size :x-large + uppercase? true}}] (let [circle-size (size circle-sizes) small? (= size :small) f-name-initial (-> f-name - string/upper-case + (#(if uppercase? (string/upper-case %) %)) (subs 0 1)) l-name-initial (-> l-name - string/upper-case + (#(if uppercase? (string/upper-case %) %)) (subs 0 1)) - circle-color (colors/custom-color customization-color 50 20) - text-color (colors/custom-color-by-theme customization-color 50 60)] + circle-color (if customization-color + (colors/custom-color customization-color 50 20) + (colors/theme-colors colors/neutral-80-opa-5 colors/white-opa-5)) + text-color (if customization-color + (colors/custom-color-by-theme customization-color 50 60) + (colors/theme-colors colors/neutral-80-opa-70 colors/white-opa-70))] [rn/view {:style {:width circle-size :height circle-size @@ -53,7 +57,7 @@ :background-color circle-color}} [text/text {:size (size font-sizes) - :weight (size font-weights) + :weight (if monospace? :monospace (size font-weights)) :style {:color text-color}} (if small? (str f-name-initial) diff --git a/src/quo2/components/buttons/slide_button/animations.cljs b/src/quo2/components/buttons/slide_button/animations.cljs index bb32f0808f0..22f0304546a 100644 --- a/src/quo2/components/buttons/slide_button/animations.cljs +++ b/src/quo2/components/buttons/slide_button/animations.cljs @@ -22,7 +22,7 @@ (defn- track-cover-interpolation [track-width thumb-size] {:in [0 1] - :out [(/ thumb-size 2) track-width]}) + :out [thumb-size (+ track-width thumb-size)]}) (defn- arrow-icon-position-interpolation [thumb-size] diff --git a/src/quo2/components/buttons/slide_button/component_spec.cljs b/src/quo2/components/buttons/slide_button/component_spec.cljs index 754a0764c96..aba89e1a8b9 100644 --- a/src/quo2/components/buttons/slide_button/component_spec.cljs +++ b/src/quo2/components/buttons/slide_button/component_spec.cljs @@ -81,7 +81,7 @@ (h/has-style track-mock {:opacity constants/disable-opacity}))) (h/test "render the small button" - (h/render [slide-button/view (assoc default-props :size :size/s-40)]) + (h/render [slide-button/view (assoc default-props :size :size-40)]) (let [mock (h/get-by-test-id :slide-button-track) small-height (:track-height constants/small-dimensions)] (h/has-style mock {:height small-height}))) diff --git a/src/quo2/components/buttons/slide_button/style.cljs b/src/quo2/components/buttons/slide_button/style.cljs index 837f5ca03d5..1e7ed844ce2 100644 --- a/src/quo2/components/buttons/slide_button/style.cljs +++ b/src/quo2/components/buttons/slide_button/style.cljs @@ -2,8 +2,7 @@ (:require [quo2.components.buttons.slide-button.constants :as constants] [quo2.components.buttons.slide-button.utils :as utils] - [react-native.reanimated :as reanimated] - [quo2.foundations.typography :as typography])) + [react-native.reanimated :as reanimated])) (def absolute-fill {:position :absolute @@ -16,7 +15,7 @@ [{:keys [interpolate-track thumb-size customization-color theme]}] (reanimated/apply-animations-to-style {:transform [{:translate-x (interpolate-track :track-clamp)}]} - {:background-color (utils/slider-color :main customization-color theme) + {:background-color (utils/main-color customization-color theme) :border-radius 12 :height thumb-size :width thumb-size @@ -46,7 +45,7 @@ :justify-content :space-around})) (defn track - [{:keys [disabled? customization-color height theme]}] + [{:keys [disabled? customization-color height blur?]}] {:align-items :flex-start :justify-content :center :border-radius 14 @@ -54,7 +53,7 @@ :align-self :stretch :padding constants/track-padding :opacity (if disabled? 0.3 1) - :background-color (utils/slider-color :track customization-color theme)}) + :background-color (utils/track-color customization-color blur?)}) (defn track-cover [interpolate-track] @@ -74,7 +73,5 @@ :width track-width}) (defn track-text - [customization-color theme] - (-> typography/paragraph-1 - (merge typography/font-medium) - (assoc :color (utils/slider-color :main customization-color theme)))) + [customization-color theme blur?] + {:color (utils/text-color customization-color theme blur?)}) diff --git a/src/quo2/components/buttons/slide_button/utils.cljs b/src/quo2/components/buttons/slide_button/utils.cljs index deaac47fd8c..5e9a69559a5 100644 --- a/src/quo2/components/buttons/slide_button/utils.cljs +++ b/src/quo2/components/buttons/slide_button/utils.cljs @@ -3,19 +3,30 @@ [quo2.components.buttons.slide-button.constants :as constants] [quo2.foundations.colors :as colors])) -(defn slider-color - "- `color-key` `:main`/`:track` - - `customization-color` Customization color" - [color-key customization-color theme] - (let [colors-by-key {:main (colors/theme-colors - (colors/custom-color customization-color 50) - (colors/custom-color customization-color 60) - theme) - :track (colors/theme-colors - (colors/custom-color customization-color 50 10) - (colors/custom-color customization-color 60 10) - theme)}] - (color-key colors-by-key))) +(defn main-color + "`customization-color` Customization color" + [customization-color theme] + (colors/theme-colors + (colors/custom-color customization-color 50) + (colors/custom-color customization-color 60) + theme)) + +(defn track-color + "`customization-color` Customization color" + ([customization-color blur?] + (if blur? + colors/white-opa-5 + (colors/custom-color customization-color 50 10)))) + +(defn text-color + "`customization-color` Customization color" + [customization-color theme blur?] + (if blur? + colors/white-opa-40 + (colors/theme-colors + (colors/custom-color customization-color 50) + (colors/custom-color customization-color 60) + theme))) (defn clamp-value [value min-value max-value] @@ -34,8 +45,8 @@ (defn get-dimensions [track-width size dimension-key] (let [default-dimensions (case size - :size/s-40 constants/small-dimensions - :size/s-48 constants/large-dimensions + :size-40 constants/small-dimensions + :size-48 constants/large-dimensions constants/large-dimensions)] (-> default-dimensions (merge {:usable-track (calc-usable-track diff --git a/src/quo2/components/buttons/slide_button/view.cljs b/src/quo2/components/buttons/slide_button/view.cljs index 73995c8a2d2..575a3f3c0c2 100644 --- a/src/quo2/components/buttons/slide_button/view.cljs +++ b/src/quo2/components/buttons/slide_button/view.cljs @@ -10,6 +10,7 @@ [reagent.core :as reagent] [oops.core :as oops] [react-native.reanimated :as reanimated] + [quo2.components.markdown.text :as text] [quo2.components.buttons.slide-button.constants :as constants] [quo2.theme :as quo.theme])) @@ -29,7 +30,9 @@ customization-color size container-style - theme]}] + theme + type + blur?]}] (let [x-pos (reanimated/use-shared-value 0) dimensions (partial utils/get-dimensions (or @track-width constants/default-width) @@ -37,12 +40,12 @@ interpolate-track (partial animations/interpolate-track x-pos (dimensions :usable-track) - (dimensions :thumb))] + (dimensions :thumb)) + custom-color (if (= type :danger) :danger customization-color)] (rn/use-effect (fn [] (when @sliding-complete? (on-complete))) [@sliding-complete?]) - (rn/use-effect (fn [] (when on-reset (reset! sliding-complete? false) @@ -50,7 +53,6 @@ (animations/reset-track-position x-pos) (on-reset))) [on-reset]) - [gesture/gesture-detector {:gesture (animations/drag-gesture x-pos gestures-disabled? @@ -60,24 +62,29 @@ [reanimated/view {:test-ID :slide-button-track :style (merge (style/track {:disabled? disabled? - :customization-color customization-color + :customization-color custom-color :height (dimensions :track-height) - :theme theme}) + :blur? blur?}) container-style) :on-layout (when-not (some? @track-width) on-track-layout)} [reanimated/view {:style (style/track-cover interpolate-track)} [rn/view {:style (style/track-cover-text-container @track-width)} [icon/icon track-icon - {:color (utils/slider-color :main customization-color theme) + {:color (utils/text-color custom-color theme blur?) :size 20}] [rn/view {:width 4}] - [rn/text {:style (style/track-text customization-color theme)} track-text]]] + [text/text + {:weight :medium + :size :paragraph-1 + :style (style/track-text custom-color theme blur?)} + track-text]]] [reanimated/view {:style (style/thumb-container {:interpolate-track interpolate-track :thumb-size (dimensions :thumb) - :customization-color customization-color - :theme theme})} + :customization-color custom-color + :theme theme + :blur? blur?})} [reanimated/view {:style (style/arrow-icon-container interpolate-track)} [icon/icon :arrow-right {:color colors/white diff --git a/src/quo2/components/drawers/drawer_top/component_spec.cljs b/src/quo2/components/drawers/drawer_top/component_spec.cljs index 537b9fcccc0..7c8f7696028 100644 --- a/src/quo2/components/drawers/drawer_top/component_spec.cljs +++ b/src/quo2/components/drawers/drawer_top/component_spec.cljs @@ -56,7 +56,7 @@ {:title "Title" :type :account :account-avatar-emoji "๐Ÿฟ" - :networks [:ethereum] + :networks [{:name :ethereum :short :eth}] :description "0x62b...0a5" :customization-color :purple}]) (h/is-truthy (h/get-by-text "Title")) diff --git a/src/quo2/components/drawers/drawer_top/view.cljs b/src/quo2/components/drawers/drawer_top/view.cljs index 6ac0d779f1c..7222541c3e2 100644 --- a/src/quo2/components/drawers/drawer_top/view.cljs +++ b/src/quo2/components/drawers/drawer_top/view.cljs @@ -36,8 +36,8 @@ [text/text {:size :paragraph-2 :weight :regular - :style (style/network-text-color network)} - (str (subs (name network) 0 3) ":")]) + :style (style/network-text-color (:name network))} + (str (name (:short network)) ":")]) (defn- keypair-subtitle [{:keys [theme blur? keycard?]}] @@ -56,7 +56,7 @@ :size 16 :container-style style/keycard-icon}])]) -(defn- acocunt-subtitle +(defn- account-subtitle [{:keys [networks theme blur? description]}] [rn/view {:style style/row} (for [network networks] @@ -106,7 +106,7 @@ :keycard? keycard?}] (= :account type) - [acocunt-subtitle + [account-subtitle {:networks networks :theme theme :blur? blur? diff --git a/src/quo2/components/gradient/gradient_cover/style.cljs b/src/quo2/components/gradient/gradient_cover/style.cljs index 773278a7e16..feee187b65a 100644 --- a/src/quo2/components/gradient/gradient_cover/style.cljs +++ b/src/quo2/components/gradient/gradient_cover/style.cljs @@ -1,4 +1,6 @@ (ns quo2.components.gradient.gradient-cover.style) -(def root-container - {:height 252}) +(defn root-container + [opacity] + {:height 252 + :opacity opacity}) diff --git a/src/quo2/components/gradient/gradient_cover/view.cljs b/src/quo2/components/gradient/gradient_cover/view.cljs index 488920debf7..7fdb8c78392 100644 --- a/src/quo2/components/gradient/gradient_cover/view.cljs +++ b/src/quo2/components/gradient/gradient_cover/view.cljs @@ -5,7 +5,7 @@ [react-native.linear-gradient :as linear-gradient])) (defn- view-internal - [{:keys [customization-color container-style] :or {customization-color :blue}}] + [{:keys [customization-color opacity container-style] :or {customization-color :blue}}] (let [color-top (colors/custom-color customization-color 50 20) color-bottom (colors/custom-color customization-color 50 0)] [linear-gradient/linear-gradient @@ -13,6 +13,6 @@ :colors [color-top color-bottom] :start {:x 0 :y 0} :end {:x 0 :y 1} - :style (merge style/root-container container-style)}])) + :style (merge (style/root-container opacity) container-style)}])) (def view (quo.theme/with-theme view-internal)) diff --git a/src/quo2/components/list_items/account/view.cljs b/src/quo2/components/list_items/account/view.cljs index fe69d826a58..d477d534071 100644 --- a/src/quo2/components/list_items/account/view.cljs +++ b/src/quo2/components/list_items/account/view.cljs @@ -8,6 +8,14 @@ [reagent.core :as reagent] [quo2.components.icon :as icon])) +(defn- network-view + [network] + [text/text + {:size :paragraph-2 + :weight :regular + :style {:color (colors/custom-color (:name network))}} + (str (name (:short network)) ":")]) + (defn- account-view [{:keys [account-props title-icon? blur? theme] :or {title-icon? false}}] @@ -30,6 +38,9 @@ colors/white-opa-40 (colors/theme-colors colors/neutral-50 colors/neutral-40 theme))}]])] [text/text {:size :paragraph-2} + (for [network (:networks account-props)] + ^{:key (str network)} + [network-view network]) [text/text {:size :paragraph-2 :weight :monospace diff --git a/src/quo2/components/list_items/address/component_spec.cljs b/src/quo2/components/list_items/address/component_spec.cljs new file mode 100644 index 00000000000..b6d0e6fcee2 --- /dev/null +++ b/src/quo2/components/list_items/address/component_spec.cljs @@ -0,0 +1,41 @@ +(ns quo2.components.list-items.address.component-spec + (:require [test-helpers.component :as h] + [quo2.components.list-items.address.view :as address] + [quo2.foundations.colors :as colors])) + +(h/describe "List items: address" + (h/test "default render" + (h/render [address/view]) + (h/is-truthy (h/query-by-label-text :container))) + + (h/test "on-press-in changes state to :pressed" + (h/render [address/view]) + (h/fire-event :on-press-in (h/get-by-label-text :container)) + (h/wait-for #(h/has-style (h/query-by-label-text :container) + {:backgroundColor (colors/custom-color :blue 50 5)}))) + + (h/test "on-press-in changes state to :pressed with blur? enabled" + (h/render [address/view {:blur? true}]) + (h/fire-event :on-press-in (h/get-by-label-text :container)) + (h/wait-for #(h/has-style (h/query-by-label-text :container) + {:backgroundColor colors/white-opa-5}))) + + (h/test "on-press-out changes state to :active" + (h/render [address/view]) + (h/fire-event :on-press-in (h/get-by-label-text :container)) + (h/fire-event :on-press-out (h/get-by-label-text :container)) + (h/wait-for #(h/has-style (h/query-by-label-text :container) + {:backgroundColor (colors/custom-color :blue 50 10)}))) + + (h/test "on-press-out changes state to :active with blur? enabled" + (h/render [address/view {:blur? true}]) + (h/fire-event :on-press-in (h/get-by-label-text :container)) + (h/fire-event :on-press-out (h/get-by-label-text :container)) + (h/wait-for #(h/has-style (h/query-by-label-text :container) + {:backgroundColor colors/white-opa-10}))) + + (h/test "on-press event is called" + (let [on-press (h/mock-fn)] + (h/render [address/view {:on-press on-press}]) + (h/fire-event :on-press (h/get-by-label-text :container)) + (h/was-called on-press)))) diff --git a/src/quo2/components/list_items/address/style.cljs b/src/quo2/components/list_items/address/style.cljs new file mode 100644 index 00000000000..bf5c341be3e --- /dev/null +++ b/src/quo2/components/list_items/address/style.cljs @@ -0,0 +1,33 @@ +(ns quo2.components.list-items.address.style + (:require [quo2.foundations.colors :as colors])) + +(defn- background-color + [state customization-color blur?] + (cond (and (or (= state :pressed) (= state :selected)) (not blur?)) + (colors/custom-color customization-color 50 5) + (and (or (= state :pressed) (= state :selected)) blur?) + colors/white-opa-5 + (and (= state :active) (not blur?)) + (colors/custom-color customization-color 50 10) + (and (= state :active) blur?) + colors/white-opa-10 + (and (= state :pressed) blur?) colors/white-opa-10 + :else :transparent)) + +(defn container + [state customization-color blur?] + {:height 56 + :border-radius 12 + :background-color (background-color state customization-color blur?) + :flex-direction :row + :align-items :center + :padding-horizontal 12 + :padding-vertical 6 + :justify-content :space-between}) + +(def left-container + {:flex-direction :row + :align-items :center}) + +(def account-container + {:margin-left 8}) diff --git a/src/quo2/components/list_items/address/view.cljs b/src/quo2/components/list_items/address/view.cljs new file mode 100644 index 00000000000..032d102fe16 --- /dev/null +++ b/src/quo2/components/list_items/address/view.cljs @@ -0,0 +1,64 @@ +(ns quo2.components.list-items.address.view + (:require [quo2.components.avatars.wallet-user-avatar :as wallet-user-avatar] + [quo2.components.markdown.text :as text] + [quo2.foundations.colors :as colors] + [quo2.theme :as quo.theme] + [react-native.core :as rn] + [quo2.components.list-items.address.style :as style] + [reagent.core :as reagent] + [clojure.string :as string])) + +(defn- left-container + [{:keys [theme address networks blur?]}] + [rn/view {:style style/left-container} + [wallet-user-avatar/wallet-user-avatar + {:size :medium + :f-name "0" + :l-name "x" + :monospace? true + :uppercase? false}] + [rn/view {:style style/account-container} + [text/text {:size :paragraph-1} + (map (fn [network] + ^{:key (str network)} + [text/text + {:size :paragraph-1 + :weight :semi-bold + :style {:color (get colors/networks network)}} (str (subs (name network) 0 3) ":")]) + networks) + [text/text + {:size :paragraph-1 + :weight :monospace + :style {:color (if blur? + colors/white + (colors/theme-colors colors/neutral-100 colors/white theme))}} + (string/replace address "x" "ร—")]]]]) + +(defn- internal-view + [] + (let [state (reagent/atom :default) + active? (atom false) + timer (atom nil) + on-press-in (fn [] + (when-not (= @state :selected) + (reset! timer (js/setTimeout #(reset! state :pressed) 100))))] + (fn [{:keys [networks address customization-color on-press active-state? blur? theme] + :or {customization-color :blue}}] + (let [on-press-out (fn [] + (let [new-state (if (or (not active-state?) @active?) :default :active)] + (when @timer (js/clearTimeout @timer)) + (reset! timer nil) + (reset! active? (= new-state :active)) + (reset! state new-state)))] + [rn/pressable + {:style (style/container @state customization-color blur?) + :on-press-in on-press-in + :on-press-out on-press-out + :on-press on-press + :accessibility-label :container} + [left-container + {:theme theme + :networks networks + :address address}]])))) + +(def view (quo.theme/with-theme internal-view)) diff --git a/src/quo2/components/messages/system_message.cljs b/src/quo2/components/messages/system_message.cljs index 71c6e4419b2..bb31f12edb8 100644 --- a/src/quo2/components/messages/system_message.cljs +++ b/src/quo2/components/messages/system_message.cljs @@ -171,7 +171,7 @@ :style {:flex-shrink 1} :size :paragraph-2} pinned-by] - [split-text (i18n/label :pinned-a-message) theme true] + [split-text (i18n/label :t/pinned-a-message) theme true] [sm-timestamp timestamp theme]] (when child child)]]) diff --git a/src/quo2/components/tags/tiny_tag/component_spec.cljs b/src/quo2/components/tags/tiny_tag/component_spec.cljs new file mode 100644 index 00000000000..641e8b4b3e5 --- /dev/null +++ b/src/quo2/components/tags/tiny_tag/component_spec.cljs @@ -0,0 +1,15 @@ +(ns quo2.components.tags.tiny-tag.component-spec + (:require [quo2.components.tags.tiny-tag.view :as tiny-tag] + [test-helpers.component :as h])) + +(h/describe "Tiny tag component test" + (h/test "1,000 SNT render" + (h/render [tiny-tag/view + {:label "1,000 SNT" + :blur? false}]) + (h/is-truthy (h/get-by-text "1,000 SNT"))) + (h/test "2,000 SNT render with blur" + (h/render [tiny-tag/view + {:label "2,000 SNT" + :blur? true}]) + (h/is-truthy (h/get-by-text "2,000 SNT")))) diff --git a/src/quo2/components/tags/tiny_tag/style.cljs b/src/quo2/components/tags/tiny_tag/style.cljs new file mode 100644 index 00000000000..422fcb3d61f --- /dev/null +++ b/src/quo2/components/tags/tiny_tag/style.cljs @@ -0,0 +1,33 @@ +(ns quo2.components.tags.tiny-tag.style + (:require [quo2.foundations.colors :as colors])) + +(defn get-border-color + [blur? theme] + (if blur? + (colors/theme-colors colors/neutral-80-opa-5 colors/white-opa-10 theme) + (colors/theme-colors colors/neutral-20 colors/neutral-80 theme))) + +(defn get-label-color + [blur? theme] + (if blur? + (colors/theme-colors colors/neutral-80-opa-70 colors/white-opa-70 theme) + (colors/theme-colors colors/neutral-50 colors/neutral-40 theme))) + +(def main + {:justify-content :center + :align-items :center + :height 16}) + +(defn inner + [{:keys [blur? theme]}] + {:border-width 1 + :border-radius 6 + :border-color (get-border-color blur? theme) + :justify-content :center + :align-items :center + :padding-left 2 + :padding-right 3}) + +(defn label + [{:keys [blur? theme]}] + {:color (get-label-color blur? theme)}) diff --git a/src/quo2/components/tags/tiny_tag/view.cljs b/src/quo2/components/tags/tiny_tag/view.cljs new file mode 100644 index 00000000000..834b56f9a2b --- /dev/null +++ b/src/quo2/components/tags/tiny_tag/view.cljs @@ -0,0 +1,17 @@ +(ns quo2.components.tags.tiny-tag.view + (:require [quo2.components.markdown.text :as text] + [quo2.theme :as quo.theme] + [quo2.components.tags.tiny-tag.style :as style] + [react-native.core :as rn])) + +(defn- view-internal + [{:keys [label] :as props}] + [rn/view {:style style/main} + [rn/view {:style (style/inner props)} + [text/text + {:style (style/label props) + :weight :medium + :size :label + :align :center} label]]]) + +(def view (quo.theme/with-theme view-internal)) diff --git a/src/quo2/core.cljs b/src/quo2/core.cljs index c6c5378af90..62b785c7994 100644 --- a/src/quo2/core.cljs +++ b/src/quo2/core.cljs @@ -67,6 +67,7 @@ quo2.components.links.url-preview.view quo2.components.list-items.account.view quo2.components.list-items.account-list-card.view + quo2.components.list-items.address.view quo2.components.list-items.channel.view quo2.components.list-items.community.view quo2.components.list-items.dapp.view @@ -127,6 +128,7 @@ quo2.components.tags.status-tags quo2.components.tags.tag quo2.components.tags.tags + quo2.components.tags.tiny-tag.view quo2.components.tags.token-tag quo2.components.text-combinations.view quo2.components.wallet.account-card.view @@ -264,6 +266,7 @@ ;;;; List items (def account-item quo2.components.list-items.account.view/view) (def account-list-card quo2.components.list-items.account-list-card.view/view) +(def address quo2.components.list-items.address.view/view) (def channel quo2.components.list-items.channel.view/view) (def dapp quo2.components.list-items.dapp.view/view) (def menu-item quo2.components.list-items.menu-item/menu-item) @@ -353,6 +356,7 @@ (def status-tag quo2.components.tags.status-tags/status-tag) (def tag quo2.components.tags.tag/tag) (def tags quo2.components.tags.tags/tags) +(def tiny-tag quo2.components.tags.tiny-tag.view/view) (def token-tag quo2.components.tags.token-tag/tag) ;;;; Text combinations diff --git a/src/react_native/push_notification_ios.cljs b/src/react_native/push_notification_ios.cljs new file mode 100644 index 00000000000..5031592779b --- /dev/null +++ b/src/react_native/push_notification_ios.cljs @@ -0,0 +1,24 @@ +(ns react-native.push-notification-ios + (:require ["@react-native-community/push-notification-ios" :default pn-ios])) + +(defn present-local-notification + [title message user-info] + (.presentLocalNotification ^js pn-ios #js {:alertBody message :alertTitle title :userInfo user-info})) + +(defn add-listener + [event callback] + (.addEventListener ^js pn-ios event callback)) + +(defn request-permissions + [] + (-> (.requestPermissions ^js pn-ios) + (.then #()) + (.catch #()))) + +(defn abandon-permissions + [] + (.abandonPermissions ^js pn-ios)) + +(defn remove-all-delivered-notifications + [] + (.removeAllDeliveredNotifications ^js pn-ios)) diff --git a/src/status_im/chat/models/input.cljs b/src/status_im/chat/models/input.cljs index 676f804422e..2afe81ddc6e 100644 --- a/src/status_im/chat/models/input.cljs +++ b/src/status_im/chat/models/input.cljs @@ -6,7 +6,6 @@ [status-im.chat.models.mentions :as mentions] [status-im.chat.models.message :as chat.message] [status-im.chat.models.message-content :as message-content] - [status-im.utils.utils :as utils] [status-im2.constants :as constants] [status-im2.contexts.chat.composer.link-preview.events :as link-preview] [taoensso.timbre :as log] @@ -26,12 +25,6 @@ original)))) ;; effects -(re-frame/reg-fx - :show-cooldown-warning - (fn [_] - (utils/show-popup nil - (i18n/label :cooldown/warning-message) - #()))) (rf/defn set-chat-input-text "Set input text for current-chat. Takes db and input text and cofx diff --git a/src/status_im/chat/models/loading.cljs b/src/status_im/chat/models/loading.cljs index 1995bb0a4b1..edfc2282fb5 100644 --- a/src/status_im/chat/models/loading.cljs +++ b/src/status_im/chat/models/loading.cljs @@ -83,24 +83,26 @@ (rf/defn handle-mark-all-read {:events [:chat.ui/mark-all-read-pressed :chat/mark-all-as-read]} [{db :db} chat-id] - {:db (mark-chat-all-read db chat-id) - :clear-message-notifications [[chat-id] - (get-in db [:profile/profile :remote-push-notifications-enabled?])] - :json-rpc/call [{:method "wakuext_markAllRead" - :params [chat-id] - :on-success #(re-frame/dispatch [::mark-all-read-successful])}]}) + {:db (mark-chat-all-read db chat-id) + :effects/push-notifications-clear-message-notifications [chat-id] + :json-rpc/call [{:method "wakuext_markAllRead" + :params [chat-id] + :on-success + #(re-frame/dispatch + [::mark-all-read-successful])}]}) (rf/defn handle-mark-mark-all-read-in-community {:events [:chat.ui/mark-all-read-in-community-pressed]} [{db :db} community-id] (let [community-chat-ids (map #(str community-id %) (keys (get-in db [:communities community-id :chats])))] - {:clear-message-notifications [community-chat-ids - (get-in db [:profile/profile :remote-push-notifications-enabled?])] - :json-rpc/call [{:method "wakuext_markAllReadInCommunity" - :params [community-id] - :on-success #(re-frame/dispatch - [::mark-all-read-in-community-successful %])}]})) + {:effects/push-notifications-clear-message-notifications community-chat-ids + :json-rpc/call [{:method "wakuext_markAllReadInCommunity" + :params [community-id] + :on-success + #(re-frame/dispatch + [::mark-all-read-in-community-successful + %])}]})) (rf/defn messages-loaded "Loads more messages for current chat" diff --git a/src/status_im/communities/core.cljs b/src/status_im/communities/core.cljs index 09627e3a55d..6f37100690e 100644 --- a/src/status_im/communities/core.cljs +++ b/src/status_im/communities/core.cljs @@ -271,18 +271,20 @@ [{:keys [db]} community-id] (let [community-chat-ids (map #(str community-id %) (keys (get-in db [:communities community-id :chats])))] - {:clear-message-notifications [community-chat-ids - (get-in db [:profile/profile :remote-push-notifications-enabled?])] - :dispatch [:shell/close-switcher-card community-id] - :json-rpc/call [{:method "wakuext_leaveCommunity" - :params [community-id] - :js-response true - :on-success #(re-frame/dispatch [::left %]) - :on-error (fn [response] - (log/error "failed to leave community" - community-id - response) - (re-frame/dispatch [::failed-to-leave]))}]})) + {:effects/push-notifications-clear-message-notifications community-chat-ids + :dispatch [:shell/close-switcher-card community-id] + :json-rpc/call [{:method "wakuext_leaveCommunity" + :params [community-id] + :js-response true + :on-success #(re-frame/dispatch [::left + %]) + :on-error (fn [response] + (log/error + "failed to leave community" + community-id + response) + (re-frame/dispatch + [::failed-to-leave]))}]})) (rf/defn status-tag-pressed {:events [:communities/status-tag-pressed]} diff --git a/src/status_im/contact/block.cljs b/src/status_im/contact/block.cljs index 487b76e5732..4cb4ec6ceb3 100644 --- a/src/status_im/contact/block.cljs +++ b/src/status_im/contact/block.cljs @@ -41,17 +41,20 @@ (map #(->> (chats-store/<-rpc %) (clean-up-chat public-key)) (types/js->clj chats-js)))] - (apply rf/merge - cofx - {:db (-> db - (update :chats dissoc public-key) - (update :chats-home-list disj public-key) - (assoc-in [:contacts/contacts public-key :added?] false)) - :dispatch [:shell/close-switcher-card public-key] - :clear-message-notifications - [[public-key] (get-in db [:profile/profile :remote-push-notifications-enabled?])]} - (activity-center/notifications-fetch-unread-count) - fxs))) + (apply + rf/merge + cofx + {:db (-> + db + (update :chats dissoc public-key) + (update :chats-home-list disj public-key) + (assoc-in [:contacts/contacts public-key + :added?] + false)) + :dispatch [:shell/close-switcher-card public-key] + :effects/push-notifications-clear-message-notifications [public-key]} + (activity-center/notifications-fetch-unread-count) + fxs))) (rf/defn block-contact {:events [:contact.ui/block-contact-confirmed]} diff --git a/src/status_im/events.cljs b/src/status_im/events.cljs index 71c5d42e299..c0e5d7eab2e 100644 --- a/src/status_im/events.cljs +++ b/src/status_im/events.cljs @@ -60,7 +60,8 @@ status-im2.contexts.chat.home.events status-im2.contexts.communities.home.events status-im.ui.components.invite.events - [status-im2.common.biometric.events :as biometric])) + [status-im2.common.biometric.events :as biometric] + status-im.ui.screens.notifications-settings.events)) (re-frame/reg-fx :dismiss-keyboard diff --git a/src/status_im/multiaccounts/create/core.cljs b/src/status_im/multiaccounts/create/core.cljs index 2967824d792..cfabd634aab 100644 --- a/src/status_im/multiaccounts/create/core.cljs +++ b/src/status_im/multiaccounts/create/core.cljs @@ -165,7 +165,6 @@ :dapps-address (:address wallet-account) :latest-derived-path 0 :signing-phrase signing-phrase - :send-push-notifications? true :backup-enabled? true :installation-id (random-guid-generator) ;; default mailserver (history node) setting diff --git a/src/status_im/multiaccounts/logout/core.cljs b/src/status_im/multiaccounts/logout/core.cljs index ed931d7cf18..dcec2f0442f 100644 --- a/src/status_im/multiaccounts/logout/core.cljs +++ b/src/status_im/multiaccounts/logout/core.cljs @@ -2,7 +2,6 @@ (:require [native-module.core :as native-module] [re-frame.core :as re-frame] [status-im.multiaccounts.core :as multiaccounts] - [status-im.notifications.core :as notifications] [status-im.wallet.core :as wallet] [status-im2.common.keychain.events :as keychain] [status-im2.db :as db] @@ -46,14 +45,13 @@ (rf/defn logout {:events [:logout :multiaccounts.logout.ui/logout-confirmed :multiaccounts.update.callback/save-settings-success]} - [cofx] + [_] ;; we need to disable notifications before starting the logout process - (rf/merge cofx - {:dispatch-later [{:ms 100 - :dispatch [::logout-method - {:auth-method keychain/auth-method-none - :logout? true}]}]} - (notifications/logout-disable))) + {:effects/push-notifications-disable nil + :dispatch-later [{:ms 100 + :dispatch [::logout-method + {:auth-method keychain/auth-method-none + :logout? true}]}]}) (rf/defn show-logout-confirmation {:events [:multiaccounts.logout.ui/logout-pressed]} diff --git a/src/status_im/notifications/android.cljs b/src/status_im/notifications/android.cljs deleted file mode 100644 index 6e892465aff..00000000000 --- a/src/status_im/notifications/android.cljs +++ /dev/null @@ -1,37 +0,0 @@ -(ns status-im.notifications.android - (:require ["react-native" :as react-native] - [quo.platform :as platform] - [taoensso.timbre :as log])) - -(defn pn-android - [] - (when platform/android? - (.-PushNotification ^js (.-NativeModules react-native)))) - -(defn present-local-notification - [opts] - (.presentLocalNotification ^js (pn-android) (clj->js opts))) - -(defn clear-message-notifications - [chat-id] - (.clearMessageNotifications ^js (pn-android) chat-id)) - -(defn clear-all-message-notifications - [] - (.clearAllMessageNotifications ^js (pn-android))) - -(defn create-channel - [{:keys [channel-id channel-name]}] - (.createChannel ^js (pn-android) - #js - {:channelId channel-id - :channelName channel-name} - #(log/info "Notifications create channel:" %))) - -(defn enable-notifications - [] - (.enableNotifications ^js (pn-android))) - -(defn disable-notifications - [] - (.disableNotifications ^js (pn-android))) diff --git a/src/status_im/notifications/core.cljs b/src/status_im/notifications/core.cljs deleted file mode 100644 index bc05268d2d6..00000000000 --- a/src/status_im/notifications/core.cljs +++ /dev/null @@ -1,313 +0,0 @@ -(ns status-im.notifications.core - (:require ["@react-native-community/push-notification-ios" :default pn-ios] - [quo.platform :as platform] - [re-frame.core :as re-frame] - [status-im.multiaccounts.update.core :as multiaccounts.update] - [status-im.notifications.android :as pn-android] - [status-im.notifications.local :as local] - [status-im2.config :as config] - [utils.re-frame :as rf] - [taoensso.timbre :as log])) - -(def server-type-default 1) -(def server-type-custom 2) - -(def apn-token-type 1) -(def firebase-token-type 2) -(def listeners-added? (atom nil)) -(defn server<-rpc - [{:keys [type publicKey registered]}] - {:public-key publicKey - :type type - :registered registered}) - -(defn add-event-listeners - [] - (when-not @listeners-added? - (reset! listeners-added? true) - (.addEventListener - ^js pn-ios - "register" - (fn [token] - (re-frame/dispatch [:notifications/registered-for-push-notifications token]))) - (.addEventListener - ^js pn-ios - "registrationError" - (fn [error] - (re-frame/dispatch [:notifications/switch-error true error]))))) - -(defn enable-ios-notifications - [] - (add-event-listeners) - (-> (.requestPermissions ^js pn-ios) - (.then #()) - (.catch #()))) - -(defn disable-ios-notifications - [] - (.abandonPermissions ^js pn-ios) - (re-frame/dispatch [:notifications/unregistered-from-push-notifications])) - -(defn enable-android-notifications - [] - (pn-android/create-channel - {:channel-id "status-im-notifications" - :channel-name "Status push notifications"}) - (pn-android/enable-notifications)) - -(defn disable-android-notifications - [] - (pn-android/disable-notifications)) - -;; FIXME: Repalce with request permission from audio messages PR lib -(re-frame/reg-fx - ::request-permission - identity) - -(rf/defn request-permission - {:events [::request-permission]} - [_] - {::request-permission true}) - -(re-frame/reg-fx - ::local-notification - (fn [props] - (if platform/ios? - (local/local-push-ios props) - (local/local-push-android props)))) - -(re-frame/reg-fx - ::enable - (fn [] - (if platform/android? - (enable-android-notifications) - (enable-ios-notifications)))) - -(re-frame/reg-fx - ::disable - (fn [_] - (if platform/android? - (disable-android-notifications) - (disable-ios-notifications)))) - -(re-frame/reg-fx - ::logout-disable - (fn [_] - (if platform/android? - (pn-android/disable-notifications) - (.abandonPermissions ^js pn-ios)))) - -(re-frame/reg-fx - :clear-message-notifications - (fn [[chat-ids] remote-push-notifications-enabled?] - (if remote-push-notifications-enabled? - (if platform/android? - (pn-android/clear-all-message-notifications) - (.removeAllDeliveredNotifications ^js pn-ios)) - (when platform/android? - (doseq [chat-id chat-ids] - (pn-android/clear-message-notifications chat-id)))))) - -(rf/defn handle-enable-notifications-event - {:events [:notifications/registered-for-push-notifications]} - [cofx token] - {:json-rpc/call [{:method "wakuext_registerForPushNotifications" - :params [token (if platform/ios? config/apn-topic) - (if platform/ios? apn-token-type firebase-token-type)] - :on-success #(log/info "[push-notifications] register-success" %) - :on-error #(re-frame/dispatch [:notifications/switch-error true %])}]}) - -(rf/defn handle-disable-notifications-event - {:events [:notifications/unregistered-from-push-notifications]} - [cofx] - {:json-rpc/call [{:method "wakuext_unregisterFromPushNotifications" - :params [] - :on-success #(log/info "[push-notifications] unregister-success" %) - :on-error #(re-frame/dispatch [:notifications/switch-error false %])}]}) - -(rf/defn logout-disable - [cofx] - (merge {::logout-disable nil} - {:json-rpc/call [{:method "wakuext_unregisterFromPushNotifications" - :params [] - :on-success #(log/info "[push-notifications] unregister-success" %) - :on-error #(log/info "[push-notifications] unregister-error" %)}]})) - -(rf/defn notification-switch-error - {:events [:notifications/switch-error]} - [cofx enabled?] - (multiaccounts.update/multiaccount-update - cofx - :remote-push-notifications-enabled? - (not enabled?) - {})) - -(rf/defn notification-switch - {:events [::switch]} - [{:keys [db] :as cofx} enabled? remote-push-notifications?] - (rf/merge cofx - (if enabled? - {::enable remote-push-notifications?} - {::disable nil}) - (multiaccounts.update/multiaccount-update - :remote-push-notifications-enabled? - (and remote-push-notifications? enabled?) - {}) - (multiaccounts.update/multiaccount-update - :notifications-enabled? - (and (not remote-push-notifications?) enabled?) - {}))) - -(rf/defn notification-non-contacts-error - {:events [::non-contacts-update-error]} - [cofx enabled?] - (multiaccounts.update/optimistic cofx - :push-notifications-from-contacts-only? - (not (boolean enabled?)))) - -(rf/defn notification-block-mentions-error - {:events [::block-mentions-update-error]} - [cofx enabled?] - (multiaccounts.update/optimistic cofx :push-notifications-block-mentions? (not (boolean enabled?)))) - -(rf/defn notification-non-contacts - {:events [::switch-non-contacts]} - [{:keys [db] :as cofx} enabled?] - (let [method (if enabled? - "wakuext_enablePushNotificationsFromContactsOnly" - "wakuext_disablePushNotificationsFromContactsOnly")] - (rf/merge - cofx - {:json-rpc/call [{:method method - :params [] - :on-success #(log/info "[push-notifications] contacts-notification-success" %) - :on-error #(re-frame/dispatch [::non-contacts-update-error enabled? %])}]} - - (multiaccounts.update/optimistic :push-notifications-from-contacts-only? (boolean enabled?))))) - -(rf/defn notification-block-mentions - {:events [::switch-block-mentions]} - [{:keys [db] :as cofx} enabled?] - (let [method (if enabled? - "wakuext_enablePushNotificationsBlockMentions" - "wakuext_disablePushNotificationsBlockMentions")] - (log/info "USING METHOD" method enabled?) - (rf/merge cofx - {:json-rpc/call [{:method method - :params [] - :on-success #(log/info "[push-notifications] block-mentions-success" %) - :on-error #(re-frame/dispatch [::block-mentions-update-error enabled? - %])}]} - - (multiaccounts.update/optimistic :push-notifications-block-mentions? (boolean enabled?))))) - -(rf/defn switch-push-notifications-server-enabled - {:events [::switch-push-notifications-server-enabled]} - [{:keys [db] :as cofx} enabled?] - (let [method (if enabled? - "wakuext_startPushNotificationsServer" - "wakuext_stopPushNotificationsServer")] - (rf/merge - cofx - {:json-rpc/call [{:method method - :params [] - :on-success #(log/info "[push-notifications] switch-server-enabled successful" %) - :on-error #(re-frame/dispatch [::push-notifications-server-update-error - enabled? %])}]} - - (multiaccounts.update/optimistic :push-notifications-server-enabled? (boolean enabled?))))) - -(rf/defn switch-send-notifications - {:events [::switch-send-push-notifications]} - [{:keys [db] :as cofx} enabled?] - (let [method (if enabled? - "wakuext_enableSendingNotifications" - "wakuext_disableSendingNotifications")] - (rf/merge cofx - {:json-rpc/call [{:method method - :params [] - :on-success - #(log/info "[push-notifications] switch-send-notifications successful" - %) - :on-error #(re-frame/dispatch [::push-notifications-send-update-error - enabled? %])}]} - - (multiaccounts.update/optimistic :send-push-notifications? (boolean enabled?))))) - -(rf/defn handle-add-server-error - {:events [::push-notifications-add-server-error]} - [_ public-key error] - (log/error "failed to add server" public-key error)) - -(rf/defn add-server - {:events [::add-server]} - [{:keys [db] :as cofx} public-key] - (rf/merge cofx - {:json-rpc/call [{:method "wakuext_addPushNotificationsServer" - :params [public-key] - :on-success - #(do - (log/info "[push-notifications] switch-send-notifications successful" - %) - (re-frame/dispatch [::fetch-servers])) - :on-error #(re-frame/dispatch [::push-notifications-add-server-error - public-key %])}]})) - -(rf/defn handle-servers-fetched - {:events [::servers-fetched]} - [{:keys [db]} servers] - {:db (assoc db :push-notifications/servers (map server<-rpc servers))}) - -(rf/defn fetch-push-notifications-servers - {:events [::fetch-servers]} - [cofx] - {:json-rpc/call [{:method "wakuext_getPushNotificationsServers" - :params [] - :on-success #(do - (log/info "[push-notifications] servers fetched" %) - (re-frame/dispatch [::servers-fetched %]))}]}) - -;; Wallet transactions - -(rf/defn handle-preferences-load - {:events [::preferences-loaded]} - [{:keys [db]} preferences] - {:db (assoc db :push-notifications/preferences preferences)}) - -(rf/defn load-notification-preferences - {:events [::load-notification-preferences]} - [_] - {:json-rpc/call [{:method "localnotifications_notificationPreferences" - :params [] - :on-success #(re-frame/dispatch [::preferences-loaded %])}]}) - -(defn preference= - [x y] - (and (= (:service x) (:service y)) - (= (:event x) (:event y)) - (= (:identifier x) (:identifier y)))) - -(defn- update-preference - [all new-preference] - (conj (filter (comp not (partial preference= new-preference)) - all) - new-preference)) - -(rf/defn switch-transaction-notifications - {:events [::switch-transaction-notifications]} - [{:keys [db] :as cofx} enabled?] - {:db (update db - :push-notifications/preferences - update-preference - {:enabled (not enabled?) - :service "wallet" - :event "transaction" - :identifier "all"}) - :json-rpc/call [{:method "localnotifications_switchWalletNotifications" - :params [(not enabled?)] - :on-success #(log/info - "[push-notifications] switch-transaction-notifications successful" - %) - :on-error #(log/error - "[push-notifications] switch-transaction-notifications error" - %)}]}) diff --git a/src/status_im/notifications/local.cljs b/src/status_im/notifications/local.cljs deleted file mode 100644 index 8aa31d7d118..00000000000 --- a/src/status_im/notifications/local.cljs +++ /dev/null @@ -1,150 +0,0 @@ -(ns status-im.notifications.local - (:require ["@react-native-community/push-notification-ios" :default pn-ios] - [cljs-bean.core :as bean] - [clojure.string :as string] - [quo.platform :as platform] - [re-frame.core :as re-frame] - [react-native.async-storage :as async-storage] - [status-im.ethereum.decode :as decode] - [status-im.ethereum.tokens :as tokens] - [utils.i18n :as i18n] - [status-im.notifications.android :as pn-android] - [utils.re-frame :as rf] - [utils.money :as money] - [status-im.utils.deprecated-types :as types] - [status-im.utils.utils :as utils] - [react-native.core :as rn])) - -(def default-erc20-token - {:symbol :ERC20 - :decimals 18 - :name "ERC20"}) - -(def notification-event-ios "localNotification") -(def notification-event-android "remoteNotificationReceived") - -(defn local-push-ios - [{:keys [title message user-info body-type]}] - (when (not= body-type "message") - (.presentLocalNotification - pn-ios - #js - {:alertBody message - :alertTitle title - ;; NOTE: Use a special type to hide in Obj-C code other notifications - :userInfo (bean/->js (merge user-info - {:notificationType "local-notification"}))}))) - -(defn local-push-android - [notification] - (pn-android/present-local-notification notification)) - -(defn handle-notification-press - [{{deep-link :deepLink} :userInfo - interaction :userInteraction}] - (async-storage/set-item! (str :chat-id) nil) - (when (and deep-link - (or platform/ios? - (and platform/android? interaction))) - (re-frame/dispatch [:universal-links/handle-url deep-link]))) - -(defn listen-notifications - [] - (if platform/ios? - (.addEventListener ^js pn-ios - notification-event-ios - (fn [notification] - (handle-notification-press {:userInfo (bean/bean (.getData ^js - notification))}))) - (.addListener ^js rn/device-event-emitter - notification-event-android - (fn [^js data] - (when (and data (.-dataJSON data)) - (handle-notification-press (types/json->clj (.-dataJSON data)))))))) - -(defn create-transfer-notification - [{db :db} - {{:keys [state from to fromAccount toAccount value erc20 contract network]} - :body - :as notification}] - (let [token (if erc20 - (get-in db - [:wallet/all-tokens (string/lower-case contract)] - default-erc20-token) - (tokens/native-currency network)) - amount (money/wei->ether (decode/uint value)) - to (or (:name toAccount) (utils/get-shortened-address to)) - from (or (:name fromAccount) (utils/get-shortened-address from)) - title (case state - "inbound" (i18n/label :t/push-inbound-transaction - {:value amount - :currency (:symbol token)}) - "outbound" (i18n/label :t/push-outbound-transaction - {:value amount - :currency (:symbol token)}) - "failed" (i18n/label :t/push-failed-transaction - {:value amount - :currency (:symbol token)}) - nil) - description (case state - "inbound" (i18n/label :t/push-inbound-transaction-body - {:from from - :to to}) - "outbound" (i18n/label :t/push-outbound-transaction-body - {:from from - :to to}) - "failed" (i18n/label :t/push-failed-transaction-body - {:value amount - :currency (:symbol token) - :to to}) - nil)] - {:title title - :icon (get-in token [:icon :source]) - :deepLink (:deepLink notification) - :user-info notification - :message description})) - -(defn foreground-chat? - [{{:keys [current-chat-id view-id]} :db} chat-id] - (and (= current-chat-id chat-id) - (= view-id :chat))) - -(defn show-message-pn? - [{{:keys [app-state profile/profile]} :db :as cofx} - notification] - (let [chat-id (get-in notification [:body :chat :id]) - notification-author (get-in notification [:notificationAuthor :id])] - (and - (not= notification-author (:public-key profile)) - (or (= app-state "background") - (not (foreground-chat? cofx chat-id)))))) - -(defn create-notification - ([notification] - (create-notification nil notification)) - ([cofx {:keys [bodyType] :as notification}] - (assoc - (case bodyType - "message" (when (show-message-pn? cofx notification) notification) - "transaction" (create-transfer-notification cofx notification) - nil) - :body-type - bodyType))) - -(re-frame/reg-fx - ::local-push-ios - (fn [evt] - (-> evt create-notification local-push-ios))) - -(rf/defn local-notification-android - {:events [::local-notification-android]} - [cofx event] - (some->> event - (create-notification cofx) - local-push-android)) - -(rf/defn process - [cofx evt] - (if platform/ios? - {::local-push-ios evt} - (local-notification-android cofx evt))) diff --git a/src/status_im/notifications/wallet.cljs b/src/status_im/notifications/wallet.cljs new file mode 100644 index 00000000000..d629751d61f --- /dev/null +++ b/src/status_im/notifications/wallet.cljs @@ -0,0 +1,83 @@ +(ns status-im.notifications.wallet + (:require [utils.re-frame :as rf] + [taoensso.timbre :as log] + [clojure.string :as string] + [status-im.ethereum.tokens :as tokens] + [utils.money :as money] + [status-im.ethereum.decode :as decode] + [status-im.utils.utils :as utils] + [utils.i18n :as i18n])) + +(def default-erc20-token + {:symbol :ERC20 + :decimals 18 + :name "ERC20"}) + +(defn preference= + [x y] + (and (= (:service x) (:service y)) + (= (:event x) (:event y)) + (= (:identifier x) (:identifier y)))) + +(defn- update-preference + [all new-preference] + (conj (filter (comp not (partial preference= new-preference)) + all) + new-preference)) + +(rf/defn switch-transaction-notifications + {:events [:push-notifications.wallet/switch-transactions]} + [{:keys [db]} enabled?] + {:db (update db + :push-notifications/preferences + update-preference + {:enabled? enabled? + :service "wallet" + :event "transaction" + :identifier "all"}) + :json-rpc/call [{:method "localnotifications_switchWalletNotifications" + :params [enabled?] + :on-success #(log/info "[push-notifications] switch-transaction successful" %) + :on-error #(log/error "[push-notifications] switch-transaction error" %)}]}) + +(defn create-transfer-notification + [{db :db} + {{:keys [state from to fromAccount toAccount value erc20 contract network]} + :body + :as notification}] + (let [token (if erc20 + (get-in db + [:wallet/all-tokens (string/lower-case contract)] + default-erc20-token) + (tokens/native-currency network)) + amount (money/wei->ether (decode/uint value)) + to (or (:name toAccount) (utils/get-shortened-address to)) + from (or (:name fromAccount) (utils/get-shortened-address from)) + title (case state + "inbound" (i18n/label :t/push-inbound-transaction + {:value amount + :currency (:symbol token)}) + "outbound" (i18n/label :t/push-outbound-transaction + {:value amount + :currency (:symbol token)}) + "failed" (i18n/label :t/push-failed-transaction + {:value amount + :currency (:symbol token)}) + nil) + description (case state + "inbound" (i18n/label :t/push-inbound-transaction-body + {:from from + :to to}) + "outbound" (i18n/label :t/push-outbound-transaction-body + {:from from + :to to}) + "failed" (i18n/label :t/push-failed-transaction-body + {:value amount + :currency (:symbol token) + :to to}) + nil)] + {:title title + :icon (get-in token [:icon :source]) + :deepLink (:deepLink notification) + :user-info notification + :message description})) diff --git a/src/status_im/signals/core.cljs b/src/status_im/signals/core.cljs index fe62586a2a7..ff080b02fc0 100644 --- a/src/status_im/signals/core.cljs +++ b/src/status_im/signals/core.cljs @@ -2,7 +2,7 @@ (:require [status-im.chat.models.message :as models.message] [status-im.ethereum.subscriptions :as ethereum.subscriptions] [status-im.mailserver.core :as mailserver] - [status-im.notifications.local :as local-notifications] + [status-im2.contexts.push-notifications.local.events :as local-notifications] [status-im.transport.message.core :as transport.message] [status-im.visibility-status-updates.core :as visibility-status-updates] [utils.re-frame :as rf] diff --git a/src/status_im/ui/components/copyable_text.cljs b/src/status_im/ui/components/copyable_text.cljs index 8f53d8978a6..f66019fb9cf 100644 --- a/src/status_im/ui/components/copyable_text.cljs +++ b/src/status_im/ui/components/copyable_text.cljs @@ -79,7 +79,7 @@ ;; line height specified here because of figma spec :line-height 20 :font-size 14}} - (i18n/label :sharing-copied-to-clipboard)]]]) + (i18n/label :t/sharing-copied-to-clipboard)]]]) (defn copyable-text-view [{:keys [label container-style]} content] diff --git a/src/status_im/ui/screens/mobile_network_settings/sheets.cljs b/src/status_im/ui/screens/mobile_network_settings/sheets.cljs index 8f401812a55..87864329ec5 100644 --- a/src/status_im/ui/screens/mobile_network_settings/sheets.cljs +++ b/src/status_im/ui/screens/mobile_network_settings/sheets.cljs @@ -33,7 +33,7 @@ [react/text {:style styles/go-to-settings :on-press #(re-frame/dispatch [:mobile-network/navigate-to-settings])} - (i18n/label :mobile-network-go-to-settings)]]) + (i18n/label :t/mobile-network-go-to-settings)]]) (views/defview checkbox [] @@ -48,7 +48,7 @@ :on-value-change #(re-frame/dispatch [:mobile-network/remember-choice? %])}] [react/view {:style styles/checkbox-text-container} - [react/text (i18n/label :mobile-network-sheet-remember-choice)]]])) + [react/text (i18n/label :t/mobile-network-sheet-remember-choice)]]])) (defn settings [] @@ -57,9 +57,9 @@ [react/nested-text {:style styles/settings-text :on-press #(re-frame/dispatch [:mobile-network/navigate-to-settings])} - (i18n/label :mobile-network-sheet-configure) + (i18n/label :t/mobile-network-sheet-configure) [{:style styles/settings-link} - (str " " (i18n/label :mobile-network-sheet-settings))]]]) + (str " " (i18n/label :t/mobile-network-sheet-settings))]]]) (defn hide-sheet-and-dispatch [event] diff --git a/src/status_im/ui/screens/notifications_settings/events.cljs b/src/status_im/ui/screens/notifications_settings/events.cljs new file mode 100644 index 00000000000..5add06a57c0 --- /dev/null +++ b/src/status_im/ui/screens/notifications_settings/events.cljs @@ -0,0 +1,55 @@ +(ns status-im.ui.screens.notifications-settings.events + (:require [status-im.multiaccounts.update.core :as multiaccounts.update] + [utils.re-frame :as rf] + [taoensso.timbre :as log])) + +(rf/defn notification-non-contacts-error + {:events [:push-notifications/non-contacts-update-error]} + [cofx enabled?] + (multiaccounts.update/optimistic cofx + :push-notifications-from-contacts-only? + (not (boolean enabled?)))) + +(rf/defn notification-block-mentions-error + {:events [:push-notifications/block-mentions-update-error]} + [cofx enabled?] + (multiaccounts.update/optimistic cofx :push-notifications-block-mentions? (not (boolean enabled?)))) + +(rf/defn notification-non-contacts + {:events [:push-notifications/switch-non-contacts]} + [{:keys [db] :as cofx} enabled?] + (let [method (if enabled? + "wakuext_enablePushNotificationsFromContactsOnly" + "wakuext_disablePushNotificationsFromContactsOnly")] + (rf/merge + cofx + {:json-rpc/call [{:method method + :params [] + :on-success #(log/info "[push-notifications] contacts-notification-success" %) + :on-error #(log/info "[push-notifications] contacts-notification-error" %)}]} + (multiaccounts.update/optimistic :push-notifications-from-contacts-only? (boolean enabled?))))) + +(rf/defn notification-block-mentions + {:events [:push-notifications/switch-block-mentions]} + [{:keys [db] :as cofx} enabled?] + (let [method (if enabled? + "wakuext_enablePushNotificationsBlockMentions" + "wakuext_disablePushNotificationsBlockMentions")] + (rf/merge cofx + {:json-rpc/call [{:method method + :params [] + :on-success #(log/info "[push-notifications] block-mentions-success" %) + :on-error #(rf/dispatch + [:push-notifications/block-mentions-update-error enabled? + %])}]} + + (multiaccounts.update/optimistic :push-notifications-block-mentions? (boolean enabled?))))) + +(rf/defn notification-switch + {:events [:push-notifications/switch]} + [{:keys [db] :as cofx} enabled?] + (rf/merge cofx + (if enabled? + {:effects/push-notifications-enable nil} + {:effects/push-notifications-disable nil}) + (multiaccounts.update/multiaccount-update :notifications-enabled? enabled? {}))) diff --git a/src/status_im/ui/screens/notifications_settings/views.cljs b/src/status_im/ui/screens/notifications_settings/views.cljs index e02c79f5169..3b500b3dacf 100644 --- a/src/status_im/ui/screens/notifications_settings/views.cljs +++ b/src/status_im/ui/screens/notifications_settings/views.cljs @@ -1,19 +1,15 @@ (ns status-im.ui.screens.notifications-settings.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) (:require [quo.core :as quo] [quo.design-system.colors :as quo-colors] [quo.platform :as platform] - [re-frame.core :as re-frame] - [reagent.core :as reagent] [utils.i18n :as i18n] - [status-im.notifications.core :as notifications] - [status-im.ui.components.react :as react])) - -(defonce server (reagent/atom "")) + [status-im.ui.components.react :as react] + [utils.re-frame :as rf])) (defn local-notifications [] - (let [{:keys [enabled]} @(re-frame/subscribe [:notifications/wallet-transactions])] + (let [{:keys [enabled?]} (rf/sub [:push-notifications/wallet-transactions]) + {:keys [notifications-enabled?]} (rf/sub [:profile/profile])] [:<> [quo/separator {:color (:ui-02 @quo-colors/theme) @@ -23,25 +19,24 @@ {:size :small :title (i18n/label :t/notifications-transactions) :accessibility-label :notifications-button - :active enabled - :on-press #(re-frame/dispatch - [::notifications/switch-transaction-notifications enabled]) + :active (and notifications-enabled? enabled?) + :on-press #(rf/dispatch [:push-notifications.wallet/switch-transactions + (not enabled?)]) :accessory :switch}]])) (defn notifications-settings-ios [] - (let [{:keys [remote-push-notifications-enabled? + (let [{:keys [notifications-enabled? push-notifications-block-mentions? push-notifications-from-contacts-only?]} - @(re-frame/subscribe [:profile/profile])] + (rf/sub [:profile/profile])] [:<> [quo/list-item {:size :small :title (i18n/label :t/show-notifications) :accessibility-label :notifications-button - :active remote-push-notifications-enabled? - :on-press #(re-frame/dispatch [::notifications/switch - (not remote-push-notifications-enabled?) true]) + :active notifications-enabled? + :on-press #(rf/dispatch [:push-notifications/switch (not notifications-enabled?)]) :accessory :switch}] [quo/separator {:color (:ui-02 @quo-colors/theme) @@ -51,35 +46,34 @@ {:size :small :title (i18n/label :t/notifications-non-contacts) :accessibility-label :notifications-button - :active (and remote-push-notifications-enabled? + :active (and notifications-enabled? (not push-notifications-from-contacts-only?)) - :on-press #(re-frame/dispatch - [::notifications/switch-non-contacts + :on-press #(rf/dispatch + [:push-notifications/switch-non-contacts (not push-notifications-from-contacts-only?)]) :accessory :switch}] [quo/list-item {:size :small :title (i18n/label :t/allow-mention-notifications) :accessibility-label :notifications-button - :active (and remote-push-notifications-enabled? + :active (and notifications-enabled? (not push-notifications-block-mentions?)) - :on-press #(re-frame/dispatch - [::notifications/switch-block-mentions + :on-press #(rf/dispatch + [:push-notifications/switch-block-mentions (not push-notifications-block-mentions?)]) :accessory :switch}] [local-notifications]])) (defn notifications-settings-android [] - (let [{:keys [notifications-enabled?]} @(re-frame/subscribe [:profile/profile])] + (let [{:keys [notifications-enabled?]} (rf/sub [:profile/profile])] [:<> [quo/list-item {:title (i18n/label :t/local-notifications) :accessibility-label :local-notifications-settings-button :subtitle (i18n/label :t/local-notifications-subtitle) :active notifications-enabled? - :on-press #(re-frame/dispatch - [::notifications/switch (not notifications-enabled?) false]) + :on-press #(rf/dispatch [:push-notifications/switch (not notifications-enabled?)]) :accessory :switch}] [local-notifications]])) @@ -91,81 +85,3 @@ (if platform/ios? [notifications-settings-ios] [notifications-settings-android])]) - -(defn notifications-advanced-settings - [] - (let [{:keys [remote-push-notifications-enabled? - send-push-notifications? - push-notifications-server-enabled?]} - @(re-frame/subscribe [:profile/profile])] - [react/scroll-view - {:style {:flex 1} - :content-container-style {:padding-vertical 8}} - [quo/list-item - {:size :small - :title (i18n/label :t/send-push-notifications) - :accessibility-label :send-push-notifications-button - :active send-push-notifications? - :on-press #(re-frame/dispatch - [::notifications/switch-send-push-notifications - (not send-push-notifications?)]) - :accessory :switch}] - [quo/list-footer - (i18n/label :t/send-push-notifications-description)] - [quo/separator {:style {:margin-vertical 8}}] - [quo/list-item - {:size :small - :title (i18n/label :t/push-notifications-server-enabled) - :accessibility-label :send-push-notifications-button - :active (and remote-push-notifications-enabled? - push-notifications-server-enabled?) - :on-press #(re-frame/dispatch - [::notifications/switch-push-notifications-server-enabled - (not push-notifications-server-enabled?)]) - :accessory :switch}] - [quo/list-item - {:size :small - :title (i18n/label :t/push-notifications-servers) - :accessibility-label :send-push-notifications-button - :chevron true - :on-press #(re-frame/dispatch - [:navigate-to :notifications-servers])}]])) - -(defn server-view - [{:keys [public-key type registered]}] - [quo/list-item - {:size :small - :title (str (subs public-key 0 8) - " " - (if (= type notifications/server-type-custom) - (i18n/label :t/custom) - (i18n/label :t/default)) - " " - (if registered - (i18n/label :t/registered) - (i18n/label :t/not-registered)))}]) - -(defview notifications-servers - [] - (letsubs [servers [:push-notifications/servers]] - {:component-did-mount #(re-frame/dispatch [::notifications/fetch-servers])} - [react/scroll-view - {:style {:flex 1} - :content-container-style {:padding-vertical 8}} - (map server-view servers) - [react/keyboard-avoiding-view {} - [react/view {:style {:padding-horizontal 20}} - [quo/text-input - {:label (i18n/label :t/server) - :placeholder (i18n/label :t/specify-server-public-key) - :value @server - :on-change-text #(reset! server %) - :auto-focus true}]] - [quo/button - {:type :secondary - :after :main-icon/next - :disabled (empty? @server) - :on-press #(do - (re-frame/dispatch [::notifications/add-server @server]) - (reset! server ""))} - (i18n/label :t/save)]]])) diff --git a/src/status_im/ui/screens/screens.cljs b/src/status_im/ui/screens/screens.cljs index 82be0f7398f..9a9a0525e87 100644 --- a/src/status_im/ui/screens/screens.cljs +++ b/src/status_im/ui/screens/screens.cljs @@ -312,10 +312,6 @@ :options {:topBar {:title {:text (i18n/label :t/notification-settings)}} :insets {:top? true}} :component notifications-settings/notifications-settings} - {:name :notifications-servers - :options {:topBar {:title {:text (i18n/label :t/notifications-servers)}} - :insets {:top? true}} - :component notifications-settings/notifications-servers} {:name :sync-settings :options {:topBar {:title {:text (i18n/label :t/sync-settings)}} :insets {:top? true}} @@ -475,17 +471,6 @@ :top? true}} :component notifications-settings/notifications-settings} - ;;TODO WHY MODAL? - ;[Profile] Notifications Advanced settings - {:name :notifications-advanced-settings - :options {:topBar {:title {:text (i18n/label :t/notification-settings)}} - :popGesture false - :hardwareBackButton {:dismissModalOnPress false - :popStackOnPress false} - :insets {:bottom? true - :top? true}} - :component notifications-settings/notifications-advanced-settings} - ;[Wallet] Prepare Transaction {:name :prepare-send-transaction :on-dissmiss [:wallet/cancel-transaction-command] @@ -663,7 +648,7 @@ :component keycard.pairing/change-pairing-code} {:name :show-all-connections - :options {:topBar {:title {:text (i18n/label :all-connections)}} + :options {:topBar {:title {:text (i18n/label :t/all-connections)}} :insets {:bottom? true :top? true}} :component manage-all-connections/views} diff --git a/src/status_im/ui/screens/wallet/buy_crypto/views.cljs b/src/status_im/ui/screens/wallet/buy_crypto/views.cljs index 0fa3c929c1d..5d9834a528e 100644 --- a/src/status_im/ui/screens/wallet/buy_crypto/views.cljs +++ b/src/status_im/ui/screens/wallet/buy_crypto/views.cljs @@ -58,7 +58,7 @@ (when (seq learn-more-url) [react/touchable-highlight {:on-press #(re-frame/dispatch [:browser.ui/open-url learn-more-url])} [react/view {:padding-vertical 11} - [quo/text {:color :link} (i18n/label :learn-more)]]])]) + [quo/text {:color :link} (i18n/label :t/learn-more)]]])]) (views/defview buy-crypto [] @@ -124,8 +124,8 @@ site-url @webview-ref) :java-script-enabled true - ;; This is to avoid crashes on android devices - ;; due to https://github.com/react-native-webview/react-native-webview/issues/1838 + ;; This is to avoid crashes on android devices due to + ;; https://github.com/react-native-webview/react-native-webview/issues/1838 ;; We can't disable hardware acceleration as we need to use camera :style {:opacity 0.99} :local-storage-enabled true diff --git a/src/status_im/ui/screens/wallet/collectibles/views.cljs b/src/status_im/ui/screens/wallet/collectibles/views.cljs index 85b4e801660..58724e1e4c4 100644 --- a/src/status_im/ui/screens/wallet/collectibles/views.cljs +++ b/src/status_im/ui/screens/wallet/collectibles/views.cljs @@ -162,8 +162,7 @@ (cond fetching? [nft-assets-skeleton num-assets] - ;; OpenSea sometimes doesn't return an asset - ;; This condition handles it + ;; OpenSea sometimes doesn't return an asset. This condition handles it (and (not fetching?) (not (seq assets))) [no-assets-error] @@ -240,7 +239,7 @@ [::multiaccounts.update/toggle-opensea-nfts-visiblity true]) :theme :main :type :primary} - (i18n/label :display-collectibles)]] + (i18n/label :t/display-collectibles)]] [quo/text {:size :small :color :secondary @@ -285,14 +284,10 @@ ;; TODO : Enable txns ;; [quo/list-item {:title (i18n/label :t/wallet-send) - ;; :icon :main-icons/send - ;; :accessibility-label - ;; :nft-send - ;; :theme :accent + ;; :icon :main-icons/send :accessibility-label :nft-send :theme :accent ;; :on-press #()}] - ;; TODO : What to do with share? - ;; Share links or share image? + ;; TODO : What to do with share? Share links or share image? ;; [quo/list-item {:title (i18n/label :t/share) ;; :theme :accent ;; :accessibility-label @@ -307,7 +302,7 @@ (when (is-image? nft) [toastable-highlight-view ;; the last string is an emoji. It might not show up in all editors but its there - {:toast-label (str (i18n/label :profile-picture-updated)) " " "๐Ÿ˜Ž"} + {:toast-label (str (i18n/label :t/profile-picture-updated)) " " "๐Ÿ˜Ž"} [quo/list-item {:title (i18n/label :t/use-as-profile-picture) :theme :accent diff --git a/src/status_im2/common/biometric/events.cljs b/src/status_im2/common/biometric/events.cljs index 9de9141175b..eb3679b557e 100644 --- a/src/status_im2/common/biometric/events.cljs +++ b/src/status_im2/common/biometric/events.cljs @@ -67,7 +67,7 @@ :imageErrorColor :red :sensorDescription (i18n/label :t/biometric-auth-android-sensor-desc) :sensorErrorDescription (i18n/label :t/biometric-auth-android-sensor-error-desc) - :cancelText (i18n/label :cancel)}))} + :cancelText (i18n/label :t/cancel)}))} options)))) (rf/defn authenticate diff --git a/src/status_im2/common/bottom_sheet/style.cljs b/src/status_im2/common/bottom_sheet/style.cljs index b7509b44377..77a4f8a1677 100644 --- a/src/status_im2/common/bottom_sheet/style.cljs +++ b/src/status_im2/common/bottom_sheet/style.cljs @@ -14,7 +14,7 @@ :margin-vertical 8}) (defn sheet - [{:keys [top bottom]} window-height theme padding-bottom-override selected-item shell?] + [{:keys [top]} window-height selected-item] {:position :absolute :max-height (- window-height top) :z-index 1 @@ -24,11 +24,7 @@ :border-top-left-radius 20 :border-top-right-radius 20 :overflow (when-not selected-item :hidden) - :flex 1 - :padding-bottom (or padding-bottom-override (+ bottom)) - :background-color (if shell? - :transparent - (colors/theme-colors colors/white colors/neutral-95 theme))}) + :flex 1}) (def gradient-bg {:position :absolute @@ -45,16 +41,18 @@ :bottom 0}) (defn sheet-content - [theme padding-bottom-override insets bottom-margin] - {:background-color (colors/theme-colors colors/white colors/neutral-95 theme) - :border-top-left-radius 20 + [theme padding-bottom-override {:keys [bottom]} shell? bottom-margin] + {:border-top-left-radius 20 :border-top-right-radius 20 - :padding-bottom (or padding-bottom-override (+ (:bottom insets) bottom-margin))}) + :padding-bottom (or padding-bottom-override (+ bottom bottom-margin)) + :background-color (if shell? + :transparent + (colors/theme-colors colors/white colors/neutral-95 theme))}) (defn selected-item - [theme top bottom sheet-bottom-margin border-radius] + [theme top bottom selected-item-smaller-than-sheet? border-radius] {:position :absolute - :top (when-not sheet-bottom-margin (- 0 top)) + :top (when-not selected-item-smaller-than-sheet? (- 0 top)) :bottom bottom :overflow :hidden :left 0 diff --git a/src/status_im2/common/bottom_sheet/view.cljs b/src/status_im2/common/bottom_sheet/view.cljs index d60bc3d6081..dd1a73e2691 100644 --- a/src/status_im2/common/bottom_sheet/view.cljs +++ b/src/status_im2/common/bottom_sheet/view.cljs @@ -64,19 +64,23 @@ {:keys [content selected-item padding-bottom-override border-radius on-close shell? gradient-cover? customization-color] :or {border-radius 12}}] - (let [{window-height :height} (rn/get-window) - bg-opacity (reanimated/use-shared-value 0) - translate-y (reanimated/use-shared-value window-height) - sheet-gesture (get-sheet-gesture translate-y bg-opacity window-height on-close) - sheet-bottom-margin (< @item-height - (- window-height @sheet-height (:top insets) bottom-margin)) - top (- window-height (:top insets) (:bottom insets) @sheet-height) - bottom (if sheet-bottom-margin - (+ @sheet-height bottom-margin (:bottom insets)) - (:bottom insets))] - (js/console.log (str "item height " @item-height)) - (js/console.log (str "sheet height " @sheet-height)) - (js/console.log (str "sheet-bottom-margin " bottom)) + (let [{window-height :height} (rn/get-window) + bg-opacity (reanimated/use-shared-value 0) + translate-y (reanimated/use-shared-value window-height) + sheet-gesture (get-sheet-gesture translate-y + bg-opacity + window-height + on-close) + selected-item-smaller-than-sheet? (< @item-height + (- window-height + @sheet-height + (:top insets) + (:bottom insets) + bottom-margin)) + top (- window-height (:top insets) @sheet-height) + bottom (if selected-item-smaller-than-sheet? + (+ @sheet-height bottom-margin) + (:bottom insets))] (rn/use-effect #(if hide? (hide translate-y bg-opacity window-height on-close) @@ -99,27 +103,24 @@ [reanimated/view {:style (reanimated/apply-animations-to-style {:transform [{:translateY translate-y}]} - (style/sheet insets - window-height - theme - padding-bottom-override - selected-item - shell?))} - (when gradient-cover? - [rn/view {:style style/gradient-bg} - [quo/gradient-cover {:customization-color customization-color}]]) + (style/sheet insets window-height selected-item))} (when shell? [blur/ios-view {:style style/shell-bg}]) (when selected-item [rn/view {:on-layout #(reset! item-height (.-nativeEvent.layout.height ^js %)) :style - (style/selected-item theme top bottom sheet-bottom-margin border-radius)} + (style/selected-item theme top bottom selected-item-smaller-than-sheet? border-radius)} [selected-item]]) [rn/view - {:style (style/sheet-content theme padding-bottom-override insets bottom-margin) + {:style (style/sheet-content theme padding-bottom-override insets shell? bottom-margin) :on-layout #(reset! sheet-height (.-nativeEvent.layout.height ^js %))} + (when gradient-cover? + [rn/view {:style style/gradient-bg} + [quo/gradient-cover + {:customization-color customization-color + :opacity 0.4}]]) [rn/view {:style (style/handle theme)}] [content]]]]])))) diff --git a/src/status_im2/common/standard_authentication/standard_auth/view.cljs b/src/status_im2/common/standard_authentication/standard_auth/view.cljs index cbf78c02450..e38c2ab8885 100644 --- a/src/status_im2/common/standard_authentication/standard_auth/view.cljs +++ b/src/status_im2/common/standard_authentication/standard_auth/view.cljs @@ -73,7 +73,7 @@ :on-auth-success on-auth-success :on-auth-fail on-auth-fail :fallback-button-label fallback-button-label}) - :track-icon :i/face-id + :track-icon (if biometric-auth? :i/face-id :password) :track-text track-text}]]))) (def view (quo.theme/with-theme view-internal)) diff --git a/src/status_im2/contexts/chat/composer/images/style.cljs b/src/status_im2/contexts/chat/composer/images/style.cljs index cb5e13e60a3..5f2acbf7562 100644 --- a/src/status_im2/contexts/chat/composer/images/style.cljs +++ b/src/status_im2/contexts/chat/composer/images/style.cljs @@ -6,19 +6,29 @@ :padding-bottom 8 :padding-right 12}) -(def remove-photo-container +(defn remove-photo-container + [theme] + {:width 16 + :height 16 + :border-radius 8 + :background-color (colors/theme-colors colors/white colors/neutral-95 theme) + :position :absolute + :top 5 + :right 9 + :justify-content :center + :align-items :center + }) + +(def remove-photo-inner-container {:width 14 :height 14 :border-radius 7 :background-color colors/neutral-50 - :position :absolute - :top 5 - :right 5 :justify-content :center :align-items :center}) (def small-image {:width 56 :height 56 - :border-radius 8}) + :border-radius 12}) diff --git a/src/status_im2/contexts/chat/composer/images/view.cljs b/src/status_im2/contexts/chat/composer/images/view.cljs index 5e7bc826310..f3814a640c2 100644 --- a/src/status_im2/contexts/chat/composer/images/view.cljs +++ b/src/status_im2/contexts/chat/composer/images/view.cljs @@ -1,6 +1,7 @@ (ns status-im2.contexts.chat.composer.images.view (:require [quo2.core :as quo] [quo2.foundations.colors :as colors] + [quo2.theme :as quo.theme] [react-native.core :as rn] [react-native.gesture :as gesture] [react-native.reanimated :as reanimated] @@ -9,23 +10,25 @@ [status-im2.contexts.chat.composer.constants :as constants])) (defn image - [item] + [item theme] [rn/view style/image-container [rn/image {:source {:uri (:resized-uri (val item))} :style style/small-image}] [rn/touchable-opacity {:on-press #(rf/dispatch [:chat.ui/image-unselected (val item)]) - :style style/remove-photo-container + :style (style/remove-photo-container theme) :hit-slop {:right 5 :left 5 :top 10 :bottom 10}} - [quo/icon :i/close {:color colors/white :size 12}]]]) + [rn/view {:style style/remove-photo-inner-container} + [quo/icon :i/clear {:size 20 :color colors/neutral-50 :color-2 colors/white}]]]]) (defn f-images-list [] - (let [images (rf/sub [:chats/sending-image]) + (let [theme (quo.theme/use-theme-value) + images (rf/sub [:chats/sending-image]) height (reanimated/use-shared-value (if (seq images) constants/images-container-height 0))] (rn/use-effect (fn [] (reanimated/animate height @@ -37,7 +40,8 @@ :z-index 1})} [gesture/flat-list {:key-fn first - :render-fn image + :render-fn (fn [item] + (image item theme)) :data images :content-container-style {:padding-horizontal 20} :horizontal true diff --git a/src/status_im2/contexts/chat/composer/link_preview/events.cljs b/src/status_im2/contexts/chat/composer/link_preview/events.cljs index 5e1ce194588..806ee9dff0c 100644 --- a/src/status_im2/contexts/chat/composer/link_preview/events.cljs +++ b/src/status_im2/contexts/chat/composer/link_preview/events.cljs @@ -82,7 +82,7 @@ (rf/defn unfurl-parsed-urls-success {:events [:link-preview/unfurl-parsed-urls-success]} - [{:keys [db]} request-id new-previews] + [{:keys [db]} request-id {new-previews :linkPreviews}] (when (= request-id (get-in db [:chat/link-previews :request-id])) (let [new-previews (map data-store.messages/<-link-preview-rpc new-previews) curr-previews (get-in db [:chat/link-previews :unfurled]) diff --git a/src/status_im2/contexts/chat/composer/link_preview/events_test.cljs b/src/status_im2/contexts/chat/composer/link_preview/events_test.cljs index ddff60844e7..6ea012fbb65 100644 --- a/src/status_im2/contexts/chat/composer/link_preview/events_test.cljs +++ b/src/status_im2/contexts/chat/composer/link_preview/events_test.cljs @@ -139,7 +139,7 @@ {:request-id request-id :unfurled [] :cache {}}}}] - (is (nil? (events/unfurl-parsed-urls-success cofx "banana" [preview-github]))))) + (is (nil? (events/unfurl-parsed-urls-success cofx "banana" {:linkPreviews [preview-github]}))))) (testing "reconciles new previews with existing ones" (let [cofx {:db {:chat/link-previews @@ -147,9 +147,10 @@ :unfurled [preview-github {:url url-gitlab :loading? true}] :cache {url-github preview-github}}}} - {db :db} (events/unfurl-parsed-urls-success cofx - request-id - [preview-gitlab])] + {db :db} (events/unfurl-parsed-urls-success + cofx + request-id + {:linkPreviews [preview-gitlab]})] (is (= {:chat/link-previews {:request-id request-id :unfurled [preview-github preview-gitlab] @@ -165,10 +166,11 @@ preview-youtube {:url url-gitlab :loading? true}] :cache {(:url preview-youtube) preview-youtube}}}} - {db :db} (events/unfurl-parsed-urls-success cofx - request-id - [preview-github - preview-youtube])] + {db :db} (events/unfurl-parsed-urls-success + cofx + request-id + {:linkPreviews [preview-github + preview-youtube]})] (is (= {:chat/link-previews {:request-id request-id :unfurled [preview-github preview-youtube] diff --git a/src/status_im2/contexts/chat/composer/style.cljs b/src/status_im2/contexts/chat/composer/style.cljs index 4e36e258116..26b7e6381ce 100644 --- a/src/status_im2/contexts/chat/composer/style.cljs +++ b/src/status_im2/contexts/chat/composer/style.cljs @@ -54,12 +54,12 @@ [height max-height] (reanimated/apply-animations-to-style {:height height} - {:max-height max-height - :overflow :hidden})) + {:max-height max-height})) (defn input-view [{:keys [recording?]}] - {:z-index 1 + {:overflow :hidden + :z-index 1 :flex 1 :display (if @recording? :none :flex) :min-height constants/input-height}) diff --git a/src/status_im2/contexts/chat/events.cljs b/src/status_im2/contexts/chat/events.cljs index 0cf31d7c46d..d87e26e04ab 100644 --- a/src/status_im2/contexts/chat/events.cljs +++ b/src/status_im2/contexts/chat/events.cljs @@ -109,9 +109,7 @@ (update :chats #(apply dissoc % removed-chats)) (update :chats-home-list set/difference removed-chats)) :fx [(when (not-empty removed-chats) - [:clear-message-notifications - [removed-chats - (get-in db [:profile/profile :remote-push-notifications-enabled?])]]) + [:effects/push-notifications-clear-message-notifications removed-chats]) [:dispatch [:chat/leave-removed-chat]]]})) (re-frame/reg-event-fx :chat/ensure-chats ensure-chats) @@ -286,9 +284,9 @@ {:events [:chat.ui/remove-chat]} [{:keys [db now] :as cofx} chat-id] (rf/merge cofx - {:clear-message-notifications - [[chat-id] (get-in db [:profile/profile :remote-push-notifications-enabled?])] - :dispatch [:shell/close-switcher-card chat-id]} + {:effects/push-notifications-clear-message-notifications [chat-id] + :dispatch [:shell/close-switcher-card + chat-id]} (deactivate-chat chat-id) (offload-messages chat-id))) diff --git a/src/status_im2/contexts/chat/messages/content/audio/view.cljs b/src/status_im2/contexts/chat/messages/content/audio/view.cljs index 4ff95327392..f27cbb07590 100644 --- a/src/status_im2/contexts/chat/messages/content/audio/view.cljs +++ b/src/status_im2/contexts/chat/messages/content/audio/view.cljs @@ -184,7 +184,7 @@ :accessibility-label :audio-error-label :weight :medium :size :paragraph-2} - (i18n/label :error-loading-audio)] + (i18n/label :t/error-loading-audio)] [rn/view {:accessibility-label :audio-message-container :style (style/container)} diff --git a/src/status_im2/contexts/chat/messages/link_preview/view.cljs b/src/status_im2/contexts/chat/messages/link_preview/view.cljs index 36ebc6ba576..3131f448f19 100644 --- a/src/status_im2/contexts/chat/messages/link_preview/view.cljs +++ b/src/status_im2/contexts/chat/messages/link_preview/view.cljs @@ -71,7 +71,7 @@ :on-press #(rf/dispatch [:navigate-to :community {:from-chat true :community-id (:id community)}])} - (i18n/label :view)]])) + (i18n/label :t/view)]])) (defn community-preview-loader [community-link] @@ -149,7 +149,7 @@ [quo/button {:type :grey :on-press #(rf/dispatch [:open-modal :link-preview-settings])} - (i18n/label :enable)] + (i18n/label :t/enable)] [rn/view (style/separator)] [quo/button {:type :grey diff --git a/src/status_im2/contexts/chat/messages/list/view.cljs b/src/status_im2/contexts/chat/messages/list/view.cljs index 36704a595a6..6b2ace27f0e 100644 --- a/src/status_im2/contexts/chat/messages/list/view.cljs +++ b/src/status_im2/contexts/chat/messages/list/view.cljs @@ -292,6 +292,7 @@ [rn/flat-list {:key-fn list-key-fn :ref list-ref + :bounces false :header [:<> [list-header insets (:able-to-send-message? context) theme] (when (= (:chat-type chat) constants/private-group-chat-type) diff --git a/src/status_im2/contexts/communities/home/view.cljs b/src/status_im2/contexts/communities/home/view.cljs index fcb0338cefe..011d109f83b 100644 --- a/src/status_im2/contexts/communities/home/view.cljs +++ b/src/status_im2/contexts/communities/home/view.cljs @@ -34,11 +34,10 @@ item])) (def tabs-data - [{:id :joined :label (i18n/label :chats/joined) :accessibility-label :joined-tab} + [{:id :joined :label (i18n/label :t/joined) :accessibility-label :joined-tab} {:id :pending :label (i18n/label :t/pending) :accessibility-label :pending-tab} {:id :opened :label (i18n/label :t/opened) :accessibility-label :opened-tab}]) - (defn empty-state-content [theme] {:joined diff --git a/src/status_im2/contexts/communities/overview/utils.cljs b/src/status_im2/contexts/communities/overview/utils.cljs index 476435e7ab5..c760ce7b643 100644 --- a/src/status_im2/contexts/communities/overview/utils.cljs +++ b/src/status_im2/contexts/communities/overview/utils.cljs @@ -12,10 +12,10 @@ (case users-count 0 "" 1 (i18n/label :t/join-one-user {:user (first first-two)}) - 2 (i18n/label :join-two-users + 2 (i18n/label :t/join-two-users {:user1 (first first-two) :user2 (second first-two)}) - (i18n/label :join-more-users + (i18n/label :t/join-more-users {:user1 (first first-two) :user2 (second first-two) :left-count (- users-count 2)})))) diff --git a/src/status_im2/contexts/onboarding/create_profile/view.cljs b/src/status_im2/contexts/onboarding/create_profile/view.cljs index 70e6c780b17..9f682f9ab42 100644 --- a/src/status_im2/contexts/onboarding/create_profile/view.cljs +++ b/src/status_im2/contexts/onboarding/create_profile/view.cljs @@ -168,9 +168,9 @@ (rf/dispatch [:dismiss-keyboard]) (rf/dispatch [:show-bottom-sheet - {:content - (fn [] - [method-menu/view on-change-profile-pic])}])) + {:content (fn [] + [method-menu/view on-change-profile-pic]) + :shell? true}])) :image-picker-props {:profile-picture (or @profile-pic (rf/sub diff --git a/src/status_im2/contexts/onboarding/enable_notifications/view.cljs b/src/status_im2/contexts/onboarding/enable_notifications/view.cljs index b59324d7755..ad960b281c6 100644 --- a/src/status_im2/contexts/onboarding/enable_notifications/view.cljs +++ b/src/status_im2/contexts/onboarding/enable_notifications/view.cljs @@ -3,7 +3,6 @@ [react-native.core :as rn] [react-native.platform :as platform] [react-native.safe-area :as safe-area] - [status-im.notifications.core :as notifications] [status-im2.contexts.onboarding.enable-notifications.style :as style] [status-im2.contexts.shell.jump-to.utils :as shell.utils] [utils.i18n :as i18n] @@ -25,7 +24,7 @@ [quo/button {:on-press (fn [] (shell.utils/change-selected-stack-id :communities-stack true nil) - (rf/dispatch [::notifications/switch true platform/ios?]) + (rf/dispatch [:push-notifications/switch true platform/ios?]) (rf/dispatch [:navigate-to-within-stack [:welcome :enable-notifications]])) :type :primary diff --git a/src/status_im2/contexts/profile/login/events.cljs b/src/status_im2/contexts/profile/login/events.cljs index 86b3cfddb69..849db5819ed 100644 --- a/src/status_im2/contexts/profile/login/events.cljs +++ b/src/status_im2/contexts/profile/login/events.cljs @@ -9,7 +9,6 @@ [status-im2.common.biometric.events :as biometric] [status-im2.contexts.profile.config :as profile.config] [taoensso.timbre :as log] - [status-im.notifications.core :as notifications] [status-im2.config :as config] [status-im.data-store.settings :as data-store.settings] [status-im.communities.core :as communities] @@ -25,7 +24,8 @@ [status-im.data-store.visibility-status-updates :as visibility-status-updates-store] [status-im.data-store.switcher-cards :as switcher-cards-store] [status-im.browser.core :as browser] - [status-im.group-chats.core :as group-chats])) + [status-im.group-chats.core :as group-chats] + [status-im2.contexts.push-notifications.events :as notifications])) (re-frame/reg-fx ::login @@ -77,7 +77,7 @@ :networks/current-network current-network :networks/networks (merge networks config/default-networks-by-id) :profile/profile (merge profile settings))} - (notifications/load-notification-preferences) + (notifications/load-preferences) (data-store.chats/fetch-chats-preview {:on-success #(do (re-frame/dispatch [:chats-list/load-success %]) @@ -98,12 +98,10 @@ {:events [:profile.login/get-chats-callback]} [{:keys [db] :as cofx}] (let [{:networks/keys [current-network networks]} db - notifications-enabled? (get-in db [:profile/profile :notifications-enabled?]) - current-network-config (get networks current-network) - network-id (str (get-in networks - [current-network :config :NetworkId])) - remote-push-notifications-enabled? - (get-in db [:profile/profile :remote-push-notifications-enabled?])] + {:keys [notifications-enabled?]} (:profile/profile db) + current-network-config (get networks current-network) + network-id (str (get-in networks + [current-network :config :NetworkId]))] (rf/merge cofx (cond-> {:wallet/initialize-transactions-management-enabled nil :wallet/initialize-wallet @@ -114,8 +112,8 @@ accounts tokens custom-tokens favourites]))] :check-eip1559-activation {:network-id network-id} :chat/open-last-chat (get-in db [:profile/profile :key-uid])} - (or notifications-enabled? remote-push-notifications-enabled?) - (assoc ::notifications/enable remote-push-notifications-enabled?)) + notifications-enabled? + (assoc :effects/push-notifications-enable nil)) (transport/start-messenger) (contacts/initialize-contacts) (browser/initialize-browser) diff --git a/src/status_im2/contexts/profile/profiles/view.cljs b/src/status_im2/contexts/profile/profiles/view.cljs index 7825a09ac90..b43f888168e 100644 --- a/src/status_im2/contexts/profile/profiles/view.cljs +++ b/src/status_im2/contexts/profile/profiles/view.cljs @@ -64,8 +64,8 @@ (defn delete-profile-confirmation [key-uid context] [confirmation-drawer/confirmation-drawer - {:title (i18n/label :remove-profile?) - :description (i18n/label :remove-profile-confirm-message) + {:title (i18n/label :t/remove-profile?) + :description (i18n/label :t/remove-profile-confirm-message) :accessibility-label :remove-profile-confirm :context context :button-text (i18n/label :t/remove) @@ -88,7 +88,7 @@ [key-uid context] [quo/action-drawer [[{:icon :i/delete - :label (i18n/label :remove-profile-message) + :label (i18n/label :t/remove-profile-message) :on-press #(show-confirmation key-uid context) :accessibility-label :remove-profile :danger? true}]]]) diff --git a/src/status_im2/contexts/push_notifications/effects.cljs b/src/status_im2/contexts/push_notifications/effects.cljs new file mode 100644 index 00000000000..e0c026892bf --- /dev/null +++ b/src/status_im2/contexts/push_notifications/effects.cljs @@ -0,0 +1,59 @@ +(ns status-im2.contexts.push-notifications.effects + (:require [react-native.push-notification-ios :as pn-ios] + [utils.re-frame :as rf] + [native-module.push-notifications :as native-module.pn] + [react-native.platform :as platform])) + +(def ios-listeners-added? (atom nil)) + +(defn enable-ios-notifications + [] + (when-not @ios-listeners-added? + (reset! ios-listeners-added? true) + (pn-ios/add-listener + "register" + (fn [token] + (rf/dispatch [:push-notifications/registered-for-push-notifications token]))) + (pn-ios/add-listener + "registrationError" + (fn [error] + (rf/dispatch [:push-notifications/switch-error true error])))) + (pn-ios/request-permissions)) + +(defn disable-ios-notifications + [] + (pn-ios/abandon-permissions) + (rf/dispatch [:push-notifications/unregistered-from-push-notifications])) + +(defn enable-android-notifications + [] + (native-module.pn/create-channel + {:channel-id "status-im-notifications" + :channel-name "Status push notifications"}) + (native-module.pn/enable-notifications)) + +(defn disable-android-notifications + [] + (native-module.pn/disable-notifications)) + +(rf/reg-fx + :effects/push-notifications-enable + (fn [] + (if platform/android? + (enable-android-notifications) + (enable-ios-notifications)))) + +(rf/reg-fx + :effects/push-notifications-disable + (fn [] + (if platform/android? + (disable-android-notifications) + (disable-ios-notifications)))) + +(rf/reg-fx + :effects/push-notifications-clear-message-notifications + (fn [chat-ids] + (if platform/android? + (doseq [chat-id chat-ids] + (native-module.pn/clear-message-notifications chat-id)) + (pn-ios/remove-all-delivered-notifications)))) diff --git a/src/status_im2/contexts/push_notifications/events.cljs b/src/status_im2/contexts/push_notifications/events.cljs new file mode 100644 index 00000000000..8564602f97d --- /dev/null +++ b/src/status_im2/contexts/push_notifications/events.cljs @@ -0,0 +1,60 @@ +(ns status-im2.contexts.push-notifications.events + (:require [react-native.push-notification-ios :as pn-ios] + [native-module.push-notifications :as native-module.pn] + [status-im2.config :as config] + [utils.re-frame :as rf] + [taoensso.timbre :as log] + [react-native.platform :as platform] + [react-native.async-storage :as async-storage] + [utils.transforms :as transforms] + [cljs-bean.core :as bean] + status-im2.contexts.push-notifications.effects)) + +(def server-type-default 1) +(def server-type-custom 2) + +(def apn-token-type 1) +(def firebase-token-type 2) + +(defn handle-notification-press + [{{deep-link :deepLink} :userInfo + interaction :userInteraction}] + (async-storage/set-item! (str :chat-id) nil) + (when (and deep-link (or platform/ios? (and platform/android? interaction))) + (rf/dispatch [:universal-links/handle-url deep-link]))) + +(defn listen-notifications + [] + (if platform/ios? + (pn-ios/add-listener "localNotification" + #(handle-notification-press {:userInfo (bean/bean (.getData ^js %))})) + (native-module.pn/add-listener "remoteNotificationReceived" + #(handle-notification-press (transforms/json->clj %))))) + +(rf/defn handle-enable-notifications-event + {:events [:push-notifications/registered-for-push-notifications]} + [_ token] + {:json-rpc/call [{:method "wakuext_registerForPushNotifications" + :params [token (if platform/ios? config/apn-topic) + (if platform/ios? apn-token-type firebase-token-type)] + :on-success #(log/info "[push-notifications] register-success" %) + :on-error #(log/info "[push-notifications] register-error" %)}]}) + +(rf/defn handle-disable-notifications-event + {:events [:push-notifications/unregistered-from-push-notifications]} + [_] + {:json-rpc/call [{:method "wakuext_unregisterFromPushNotifications" + :params [] + :on-success #(log/info "[push-notifications] unregister-success" %) + :on-error #(log/info "[push-notifications] unregister-error" %)}]}) + +(rf/defn handle-preferences-load + {:events [:push-notifications/preferences-loaded]} + [{:keys [db]} preferences] + {:db (assoc db :push-notifications/preferences preferences)}) + +(rf/defn load-preferences + [_] + {:json-rpc/call [{:method "localnotifications_notificationPreferences" + :params [] + :on-success #(rf/dispatch [:push-notifications/preferences-loaded %])}]}) diff --git a/src/status_im2/contexts/push_notifications/local/effects.cljs b/src/status_im2/contexts/push_notifications/local/effects.cljs new file mode 100644 index 00000000000..aa1b0dd60c2 --- /dev/null +++ b/src/status_im2/contexts/push_notifications/local/effects.cljs @@ -0,0 +1,18 @@ +(ns status-im2.contexts.push-notifications.local.effects + (:require [react-native.push-notification-ios :as pn-ios] + [cljs-bean.core :as bean] + [native-module.push-notifications :as native-module.pn] + [utils.re-frame :as rf])) + +(rf/reg-fx :effects/push-notifications-local-present-ios + (fn [{:keys [title message user-info body-type]}] + (when (not= body-type "message") + (pn-ios/present-local-notification title + message + (bean/->js (merge user-info + {:notificationType + "local-notification"})))))) + +(rf/reg-fx :effects/push-notifications-local-present-android + (fn [notification] + (native-module.pn/present-local-notification notification))) diff --git a/src/status_im2/contexts/push_notifications/local/events.cljs b/src/status_im2/contexts/push_notifications/local/events.cljs new file mode 100644 index 00000000000..5ed3fb3a616 --- /dev/null +++ b/src/status_im2/contexts/push_notifications/local/events.cljs @@ -0,0 +1,36 @@ +(ns status-im2.contexts.push-notifications.local.events + (:require [quo.platform :as platform] + [utils.re-frame :as rf] + [status-im.notifications.wallet :as notifications.wallet] + status-im2.contexts.push-notifications.local.effects)) + +(defn foreground-chat? + [{{:keys [current-chat-id view-id]} :db} chat-id] + (and (= current-chat-id chat-id) + (= view-id :chat))) + +(defn show-message-pn? + [{{:keys [app-state profile/profile]} :db :as cofx} + notification] + (let [chat-id (get-in notification [:body :chat :id]) + notification-author (get-in notification [:notificationAuthor :id])] + (and + (not= notification-author (:public-key profile)) + (or (= app-state "background") + (not (foreground-chat? cofx chat-id)))))) + +(defn create-notification + [cofx {:keys [bodyType] :as notification}] + (assoc + (case bodyType + "message" (when (show-message-pn? cofx notification) notification) + "transaction" (notifications.wallet/create-transfer-notification cofx notification) + nil) + :body-type + bodyType)) + +(rf/defn process + [cofx event] + (if platform/ios? + {:effects/push-notifications-local-present-ios (create-notification nil event)} + {:effects/push-notifications-local-present-android (create-notification cofx event)})) diff --git a/src/status_im2/contexts/quo_preview/buttons/slide_button.cljs b/src/status_im2/contexts/quo_preview/buttons/slide_button.cljs index a26a0471684..b7235fb1fae 100644 --- a/src/status_im2/contexts/quo_preview/buttons/slide_button.cljs +++ b/src/status_im2/contexts/quo_preview/buttons/slide_button.cljs @@ -1,29 +1,43 @@ (ns status-im2.contexts.quo-preview.buttons.slide-button (:require [quo2.core :as quo] [reagent.core :as reagent] - [status-im2.contexts.quo-preview.preview :as preview])) + [status-im2.contexts.quo-preview.preview :as preview] + [react-native.core :as rn])) (def descriptor [{:key :size :type :select - :options [{:key :size/s-48} - {:key :size/s-40}]} + :options [{:key :size-48} + {:key :size-40}]} + {:key :type + :type :select + :options [{:key :default} + {:key :danger}]} {:key :disabled? :type :boolean} + {:key :blur? + :type :boolean} (preview/customization-color-option {:key :color})]) -(defn view +(defn f-view [] (let [state (reagent/atom {:disabled? false :color :blue - :size :size/s-48}) + :size :size-48}) color (reagent/cursor state [:color]) + blur? (reagent/cursor state [:blur?]) complete? (reagent/atom false)] (fn [] + (rn/use-effect (fn [] + (reset! complete? true) + (js/setTimeout #(reset! complete? false) 50)) + [(:size @state)]) [preview/preview-container {:state state :descriptor descriptor - :component-container-style {:align-items :center}} + :component-container-style (when-not @blur? (:align-items :center)) + :blur? @blur? + :show-blur-background? true} (if (not @complete?) [quo/slide-button {:track-text "We gotta slide" @@ -31,9 +45,13 @@ :customization-color @color :size (:size @state) :disabled? (:disabled? @state) + :blur? @blur? + :type (:type @state) :on-complete (fn [] (js/setTimeout (fn [] (reset! complete? true)) 1000) (js/alert "I don't wanna slide anymore"))}] [quo/button {:on-press (fn [] (reset! complete? false))} "Try again"])]))) + +(defn view [] [:f> f-view]) diff --git a/src/status_im2/contexts/quo_preview/gradient/gradient_cover.cljs b/src/status_im2/contexts/quo_preview/gradient/gradient_cover.cljs index 688755be3a9..4986b2735bc 100644 --- a/src/status_im2/contexts/quo_preview/gradient/gradient_cover.cljs +++ b/src/status_im2/contexts/quo_preview/gradient/gradient_cover.cljs @@ -9,18 +9,16 @@ [utils.re-frame :as rf])) (defn render-action-sheet - [] + [customization-color] [:<> - [rn/view {:style {:align-items :center}} - [quo/summary-info - {:type :status-account - :networks? false - :account-props {:customization-color :purple - :size 32 - :emoji "๐Ÿ‘" - :type :default - :name "Collectibles vault" - :address "0x0ah...78b"}}]] + [quo/drawer-top + {:type :account + :blur? false + :title "Collectibles vault" + :networks [:ethereum :optimism] + :description "0x0ah...78b" + :account-avatar-emoji "๐Ÿฟ" + :customization-color (or customization-color :blue)}] [quo/action-drawer [[{:icon :i/edit :label "Edit account" @@ -31,10 +29,11 @@ {:icon :i/share :label "Share account" :on-press #(js/alert "Share account")} - {:icon :i/delete - :label "Remove account" - :danger? true - :on-press #(js/alert "Remove account")}]]]]) + {:icon :i/delete + :label "Remove account" + :danger? true + :on-press #(js/alert "Remove account") + :add-divider? true}]]]]) (def descriptor [(preview/customization-color-option) @@ -76,7 +75,9 @@ [quo/button {:container-style {:margin-horizontal 40} :on-press #(rf/dispatch [:show-bottom-sheet - {:content (fn [] [render-action-sheet]) + {:content (fn [] + [render-action-sheet + @customization-color]) :gradient-cover? true :customization-color @customization-color}])} "See in bottom sheet"]])])) diff --git a/src/status_im2/contexts/quo_preview/list_items/address.cljs b/src/status_im2/contexts/quo_preview/list_items/address.cljs new file mode 100644 index 00000000000..d287b5e01e2 --- /dev/null +++ b/src/status_im2/contexts/quo_preview/list_items/address.cljs @@ -0,0 +1,26 @@ +(ns status-im2.contexts.quo-preview.list-items.address + (:require [quo2.core :as quo] + [reagent.core :as reagent] + [status-im2.contexts.quo-preview.preview :as preview])) + +(def descriptor + [{:key :active-state? :type :boolean} + {:key :show-alert-on-press? :type :boolean} + {:key :blur? :type :boolean} + (preview/customization-color-option)]) + +(defn view + [] + (let [state (reagent/atom {:address "0x0ah...78b" + :networks [:ethereum :optimism]})] + (fn [] + [preview/preview-container + {:state state + :descriptor descriptor + :blur? (:blur? @state) + :show-blur-background? true + :blur-dark-only? true} + [quo/address + (merge @state + (when (:show-alert-on-press? @state) + {:on-press #(js/alert "Pressed!")}))]]))) diff --git a/src/status_im2/contexts/quo_preview/main.cljs b/src/status_im2/contexts/quo_preview/main.cljs index 72e95a832e6..3a940a06fab 100644 --- a/src/status_im2/contexts/quo_preview/main.cljs +++ b/src/status_im2/contexts/quo_preview/main.cljs @@ -84,6 +84,7 @@ account-item] [status-im2.contexts.quo-preview.list-items.account-list-card :as account-list-card] + [status-im2.contexts.quo-preview.list-items.address :as address] [status-im2.contexts.quo-preview.list-items.channel :as channel] [status-im2.contexts.quo-preview.list-items.dapp :as dapp] [status-im2.contexts.quo-preview.list-items.preview-lists :as preview-lists] @@ -146,6 +147,7 @@ [status-im2.contexts.quo-preview.tags.permission-tag :as permission-tag] [status-im2.contexts.quo-preview.tags.status-tags :as status-tags] [status-im2.contexts.quo-preview.tags.tags :as tags] + [status-im2.contexts.quo-preview.tags.tiny-tag :as tiny-tag] [status-im2.contexts.quo-preview.tags.token-tag :as token-tag] [status-im2.contexts.quo-preview.text-combinations.preview :as text-combinations] @@ -307,6 +309,8 @@ :component account-item/view} {:name :account-list-card :component account-list-card/view} + {:name :address + :component address/view} {:name :channel :component channel/view} {:name :community-list @@ -420,6 +424,8 @@ :component status-tags/preview-status-tags} {:name :tags :component tags/preview-tags} + {:name :tiny-tag + :component tiny-tag/preview-tiny-tag} {:name :token-tag :component token-tag/preview-token-tag}] :text-combinations [{:name :text-combinations diff --git a/src/status_im2/contexts/quo_preview/messages/gap.cljs b/src/status_im2/contexts/quo_preview/messages/gap.cljs index 9b64c9780ec..10fffd395d4 100644 --- a/src/status_im2/contexts/quo_preview/messages/gap.cljs +++ b/src/status_im2/contexts/quo_preview/messages/gap.cljs @@ -14,7 +14,7 @@ :timestamp-near "Mar 8 ยท 22:42" :on-info-button-pressed identity :on-press #(println "fill gaps") - :warning-label (i18n/label :messages-gap-warning)})] + :warning-label (i18n/label :t/messages-gap-warning)})] (fn [] [preview/preview-container {:state state diff --git a/src/status_im2/contexts/quo_preview/tags/tiny_tag.cljs b/src/status_im2/contexts/quo_preview/tags/tiny_tag.cljs new file mode 100644 index 00000000000..b20368b014f --- /dev/null +++ b/src/status_im2/contexts/quo_preview/tags/tiny_tag.cljs @@ -0,0 +1,26 @@ +(ns status-im2.contexts.quo-preview.tags.tiny-tag + (:require [quo2.core :as quo] + [react-native.core :as rn] + [reagent.core :as reagent] + [status-im2.contexts.quo-preview.preview :as preview])) + +(def descriptor + [{:label "Blur?" + :key :blur? + :type :boolean} + {:label "Label" + :key :label + :type :text}]) + +(defn preview-tiny-tag + [] + (let [state (reagent/atom {:blur? false + :label "1,000 SNT"})] + (fn [] + [preview/preview-container + {:state state + :descriptor descriptor + :blur? (:blur? @state) + :show-blur-background? true} + [rn/view {:style {:align-items :center}} + [quo/tiny-tag @state]]]))) diff --git a/src/status_im2/contexts/shell/activity_center/header/view.cljs b/src/status_im2/contexts/shell/activity_center/header/view.cljs index d5d143713cf..e2c82b7ac19 100644 --- a/src/status_im2/contexts/shell/activity_center/header/view.cljs +++ b/src/status_im2/contexts/shell/activity_center/header/view.cljs @@ -40,7 +40,8 @@ :accessibility-label :activity-center-open-more :on-press #(rf/dispatch [:show-bottom-sheet {:content drawer/options - :theme :dark}])} + :theme :dark + :shell? true}])} :i/options]] [quo/text {:size :heading-1 diff --git a/src/status_im2/contexts/syncing/setup_syncing/view.cljs b/src/status_im2/contexts/syncing/setup_syncing/view.cljs index 183e40d4081..aae54852726 100644 --- a/src/status_im2/contexts/syncing/setup_syncing/view.cljs +++ b/src/status_im2/contexts/syncing/setup_syncing/view.cljs @@ -120,7 +120,7 @@ [rn/view {:style style/standard-auth} [standard-auth/view {:blur? true - :size :size/s-40 + :size :size-40 :track-text (i18n/label :t/slide-to-reveal-code) :customization-color customization-color :on-enter-password on-enter-password diff --git a/src/status_im2/contexts/wallet/account/view.cljs b/src/status_im2/contexts/wallet/account/view.cljs index bd71e060625..ec6b04b254b 100644 --- a/src/status_im2/contexts/wallet/account/view.cljs +++ b/src/status_im2/contexts/wallet/account/view.cljs @@ -10,6 +10,35 @@ [utils.i18n :as i18n] [utils.re-frame :as rf])) +(defn account-options + [] + [:<> + [quo/drawer-top temp/account-data] + [quo/action-drawer + [[{:icon :i/edit + :accessibility-label :edit + :label (i18n/label :t/edit-account)} + {:icon :i/copy + :accessibility-label :copy-address + :label (i18n/label :t/copy-address)} + {:icon :i/share + :accessibility-label :share-account + :label (i18n/label :t/share-account)} + {:icon :i/delete + :accessibility-label :remove-account + :label (i18n/label :t/remove-account) + :danger? true}]]] + [quo/divider-line] + [rn/view + {:style {:padding-horizontal 20 + :padding-top 12 + :padding-bottom 8}} + [quo/section-label {:section (i18n/label :t/select-another-account)}]] + [rn/flat-list + {:data temp/other-accounts + :render-fn (fn [account] [quo/account-item {:account-props account}]) + :style {:margin-horizontal 8}}]]) + (def ^:private networks-list [{:source (quo.resources/get-network :ethereum)} {:source (quo.resources/get-network :optimism)} @@ -40,7 +69,8 @@ :networks-on-press #(js/alert "Pressed Networks") :right-side :account-switcher :account-switcher {:customization-color :purple - :on-press #(js/alert "Pressed Account Switcher") + :on-press #(rf/dispatch [:show-bottom-sheet + {:content account-options}]) :emoji "๐Ÿ‘"}}] [quo/account-overview temp/account-overview-state] [quo/wallet-graph {:time-frame :empty}] diff --git a/src/status_im2/contexts/wallet/common/temp.cljs b/src/status_im2/contexts/wallet/common/temp.cljs index 7fc960b43b0..308d80b9fe8 100644 --- a/src/status_im2/contexts/wallet/common/temp.cljs +++ b/src/status_im2/contexts/wallet/common/temp.cljs @@ -179,3 +179,26 @@ :state :default :action :icon :on-press-icon on-press-icon}]) + +(def account-data + {:title "Trip to Vegas" + :type :account + :networks [{:name :ethereum :short :eth} + {:name :optimism :short :opt} + {:name :arbitrum :short :arb1}] + :description "0x62b...0a5" + :account-avatar-emoji "๐Ÿ‘" + :customization-color :purple}) + +(def other-accounts + [{:customization-color :flamingo + :emoji "๐Ÿฟ" + :name "New House" + :address "0x21a...49e" + :networks [{:name :ethereum :short :eth} + {:name :optimism :short :opt}]} + {:customization-color :blue + :emoji "๐ŸŽฎ" + :name "My savings" + :address "0x43c...98d" + :networks [{:name :ethereum :short :eth}]}]) diff --git a/src/status_im2/core.cljs b/src/status_im2/core.cljs index f6188fc2bd8..9c38b0d2bae 100644 --- a/src/status_im2/core.cljs +++ b/src/status_im2/core.cljs @@ -18,12 +18,12 @@ [status-im2.setup.interceptors :as interceptors] [react-native.async-storage :as async-storage] [native-module.core :as native-module] - [status-im.notifications.local :as notifications] [status-im.utils.universal-links.core :as utils.universal-links] status-im.events status-im2.events status-im2.navigation.core - status-im2.subs.root)) + status-im2.subs.root + [status-im2.contexts.push-notifications.events :as notifications])) ;;;; re-frame RN setup (set! interop/next-tick js/setTimeout) diff --git a/src/status_im2/subs/chat/messages.cljs b/src/status_im2/subs/chat/messages.cljs index deaca5173f1..08aa1f718aa 100644 --- a/src/status_im2/subs/chat/messages.cljs +++ b/src/status_im2/subs/chat/messages.cljs @@ -92,8 +92,8 @@ (and (= constants/private-group-chat-type chat-type) ; it's a private group chat (or (not (pos? joined)) ; we haven't joined (>= (quot joined 1000) synced-from))) ; the history goes before we joined - (:gap-ids (peek messages-with-gaps))) ; there's already a gap on top of the chat - ; history + (:gap-ids (peek messages-with-gaps))) ; there's already a gap on top of the + ; chat history messages-with-gaps ; don't add an extra gap (conj messages-with-gaps (last-gap chat-id synced-from))))) @@ -186,7 +186,7 @@ (defn message-text [{:keys [content-type] :as message}] (cond (= content-type constants/content-type-audio) - (i18n/label :audio-message) + (i18n/label :t/audio-message) :else (get-in message [:content :parsed-text]))) diff --git a/src/status_im2/subs/root.cljs b/src/status_im2/subs/root.cljs index dc0dcc8bde4..0f7e2a44e18 100644 --- a/src/status_im2/subs/root.cljs +++ b/src/status_im2/subs/root.cljs @@ -236,7 +236,6 @@ (reg-root-key-sub :delete-profile/keep-keys-on-keycard? :delete-profile/keep-keys-on-keycard?) ;; push notifications -(reg-root-key-sub :push-notifications/servers :push-notifications/servers) (reg-root-key-sub :push-notifications/preferences :push-notifications/preferences) (reg-root-key-sub :buy-crypto/on-ramps :buy-crypto/on-ramps) diff --git a/src/status_im2/subs/wallet/transactions.cljs b/src/status_im2/subs/wallet/transactions.cljs index e672772b7b5..bda2d0d6ce1 100644 --- a/src/status_im2/subs/wallet/transactions.cljs +++ b/src/status_im2/subs/wallet/transactions.cljs @@ -2,11 +2,11 @@ (:require [re-frame.core :as re-frame] [status-im.ethereum.transactions.core :as transactions] [utils.i18n :as i18n] - [status-im.notifications.core :as notifications] [utils.datetime :as datetime] [utils.money :as money] [status-im.wallet.db :as wallet.db] - [status-im.wallet.utils :as wallet.utils])) + [status-im.wallet.utils :as wallet.utils] + [status-im.notifications.wallet :as notifications.wallet])) (re-frame/reg-sub :wallet/accounts @@ -42,7 +42,7 @@ (if (= type :inbound) [from :from-contact :to-wallet] [to :to-contact :from-wallet]) - wallet (i18n/label :main-wallet) + wallet (i18n/label :t/main-wallet) contact (get contacts contact-address) {:keys [symbol-display decimals] :as asset} (or token native-currency) @@ -70,11 +70,7 @@ (assoc acc tx-hash (enrich-transaction transaction contacts native-currency))) ;;TODO this doesn't - ;;look good for - ;;performance, we - ;;need to calculate - ;;this only once for - ;;each transaction + ;;look good for performance, we need to calculate this only once for each transaction {} transactions))) @@ -210,12 +206,12 @@ "-") :date (datetime/timestamp->long-date timestamp)} (if (= type :unsigned) - {:block (i18n/label :not-applicable) - :cost (i18n/label :not-applicable) - :gas-limit (i18n/label :not-applicable) - :gas-used (i18n/label :not-applicable) - :nonce (i18n/label :not-applicable) - :hash (i18n/label :not-applicable)} + {:block (i18n/label :t/not-applicable) + :cost (i18n/label :t/not-applicable) + :gas-limit (i18n/label :t/not-applicable) + :gas-used (i18n/label :t/not-applicable) + :nonce (i18n/label :t/not-applicable) + :hash (i18n/label :t/not-applicable)} {:cost (when gas-used (money/wei->str :eth (money/fee-value gas-used gas-price) @@ -240,11 +236,11 @@ (* 100 (/ confirmations transactions/confirmations-count-threshold))))))) (re-frame/reg-sub - :notifications/wallet-transactions + :push-notifications/wallet-transactions :<- [:push-notifications/preferences] (fn [pref] - (first (filter #(notifications/preference= % - {:service "wallet" - :event "transaction" - :identifier "all"}) + (first (filter #(notifications.wallet/preference= % + {:service "wallet" + :event "transaction" + :identifier "all"}) pref)))) diff --git a/src/utils/re_frame.cljs b/src/utils/re_frame.cljs index bff7c1231d4..5857473a06e 100644 --- a/src/utils/re_frame.cljs +++ b/src/utils/re_frame.cljs @@ -78,3 +78,5 @@ (def sub (comp deref re-frame/subscribe)) (def dispatch re-frame/dispatch) + +(def reg-fx re-frame/reg-fx) diff --git a/status-go-version.json b/status-go-version.json index b7abc6385d7..0ba75ca5d6a 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -3,7 +3,7 @@ "_comment": "Instead use: scripts/update-status-go.sh ", "owner": "status-im", "repo": "status-go", - "version": "v0.168.1", - "commit-sha1": "9034f0a984601d71e40d0aa846fbc5e4d01017cd", - "src-sha256": "1niics10a0p3dnlfr011sqf5prrjilv6kjplnc2c51q2pw6fv35h" + "version": "v0.170.0", + "commit-sha1": "aded258ccb68f88dc995e22f8b4e06157bb642db", + "src-sha256": "1wdc814yx6qam2ngrh119hm63bgjigqi4cpiawy2i0ywk47qwdbg" } diff --git a/translations/en.json b/translations/en.json index 438fe4d4579..763a50bf323 100644 --- a/translations/en.json +++ b/translations/en.json @@ -2344,5 +2344,9 @@ "show-address-qr": "Show address QR", "scan-sync-code-placeholder": "cs2:4FH...", "visit-dapp": "Visit dApp", - "disconnect-dapp": "Disconnect dApp" + "disconnect-dapp": "Disconnect dApp", + "edit-account": "Edit account", + "share-account": "Share account", + "remove-account": "Remove account", + "select-another-account": "Select another account" }