diff --git a/MODULE.bazel b/MODULE.bazel index 36417ca9d..40907021a 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -117,6 +117,7 @@ enola_maven.install( "org.jsoup:jsoup:1.18.1", "org.apache.tika:tika-core:3.0.0-BETA2", "org.apache.tika:tika-parsers-standard-package:3.0.0-BETA2", + "com.github.ipld:java-cid:1.3.8", ], # NB: Never de-activate duplicate_version_warning = "error"! # While it can be tempting to resolve a build-time problem which @@ -139,6 +140,8 @@ enola_maven.install( repositories = [ # Override legacy default https://repo1.maven.org/maven2/ "https://repo.maven.apache.org/maven2/", + # Used by Multiformats, IPFS & IPLD + "https://jitpack.io", ], ) use_repo(enola_maven, "enola_maven") diff --git a/docs/use/fetch/index.md b/docs/use/fetch/index.md index 08a7af021..46150f0d6 100644 --- a/docs/use/fetch/index.md +++ b/docs/use/fetch/index.md @@ -84,8 +84,8 @@ and then use `--ipfs-gateway="http://localhost:8080/ipfs/"` instead. For initial testing you can specify one of the [public IPFS Gateways](https://ipfs.github.io/public-gateway-checker/) (or "rent" one from a provider such as [Pinata](https://pinata.cloud/dedicated-ipfs-gateways) or [Infura](https://www.infura.io/product/ipfs) or [Cloudflare](https://www.cloudflare.com/application-services/products/web3/)). -However, we do **NOT*** recommend using these for anything else than for illustration and initial testing, -because this has the following disadvantages: +However, we do **NOT** recommend using these for anything "real", +because of the following disadvantages: * Local Nodes make great local caches to improve Enola's performance * Public gateways are likely to rate limit your HTTP requests and return 403 errors diff --git a/java/dev/enola/common/io/BUILD b/java/dev/enola/common/io/BUILD index ca4a8ea8c..5d2840e20 100644 --- a/java/dev/enola/common/io/BUILD +++ b/java/dev/enola/common/io/BUILD @@ -30,12 +30,15 @@ java_library( "//java/dev/enola/common/context", "//java/dev/enola/common/convert", "//java/dev/enola/data", + # TODO Separate BUILD for IPFSResource + "@enola_maven//:com_github_ipld_java_cid", "@enola_maven//:com_github_java_json_tools_uri_template", "@enola_maven//:com_google_auto_service_auto_service_annotations", "@enola_maven//:com_google_errorprone_error_prone_annotations", "@enola_maven//:com_google_guava_guava", + # TODO Separate BUILD for OkHttpResource "@enola_maven//:com_squareup_okhttp3_logging_interceptor", - "@enola_maven//:com_squareup_okhttp3_okhttp", # TODO Separate library? + "@enola_maven//:com_squareup_okhttp3_okhttp", "@enola_maven//:org_jspecify_jspecify", "@enola_maven//:org_slf4j_slf4j_api", ], @@ -51,6 +54,7 @@ junit_tests( "//java/dev/enola/common/context/testlib", "//java/dev/enola/common/protobuf", "//test", + "@enola_maven//:com_github_ipld_java_cid", "@enola_maven//:com_github_java_json_tools_uri_template", "@enola_maven//:com_google_auto_service_auto_service_annotations", "@enola_maven//:org_jspecify_jspecify", diff --git a/java/dev/enola/common/io/resource/IPFSResource.java b/java/dev/enola/common/io/resource/IPFSResource.java index 9d70e92b3..19a0377c0 100644 --- a/java/dev/enola/common/io/resource/IPFSResource.java +++ b/java/dev/enola/common/io/resource/IPFSResource.java @@ -21,22 +21,17 @@ import com.google.common.io.ByteSource; import com.google.common.net.MediaType; +import io.ipfs.cid.Cid; + import java.net.URI; /** * IPFS Resource. TODO: * *
    - *
  1. Support IPLD <=> Thing API bridge... - *
  2. Existing? https://github.com/ipld/java-cid and - * https://github.com/ipfs-shipyard/java-ipfs-http-client#dependencies - * com.github.ipfs:java-ipfs-api, com.github.multiformats:java-multiaddr; cid.jar, - * multibase.jar, multihash.jar ? - *
  3. Get Thing and add https://cid.ipfs.tech -like technical debugging info? - *
  4. Support CAR files? + *
  5. Support IPLD <=> Thing API bridge; see https://github.com/enola-dev/enola/issues/777. *
  6. Support writing - via a WritableResource, or (probably) a separate API? *
  7. Support ipns:// - *
  8. Detect IPFS in other links, using https://github.com/ipfs-shipyard/is-ipfs's algorithm *
*/ public class IPFSResource extends BaseResource implements ReadableResource { @@ -67,6 +62,8 @@ private static void check(URI uri, String gateway) { if (!isIPFS(uri)) throw new IllegalArgumentException(uri.toString()); if (Strings.isNullOrEmpty(gateway)) throw new IllegalStateException("IPFS HTTP Gateway is required"); + // Validate CID using parser from https://github.com/ipld/java-cid + Cid.decode(uri.getAuthority()); } private final ReadableResource httpResource; diff --git a/java/dev/enola/common/io/resource/IPFSResourceTest.java b/java/dev/enola/common/io/resource/IPFSResourceTest.java index 978ca0ae5..a4feb3dba 100644 --- a/java/dev/enola/common/io/resource/IPFSResourceTest.java +++ b/java/dev/enola/common/io/resource/IPFSResourceTest.java @@ -28,6 +28,8 @@ import dev.enola.common.context.testlib.SingletonRule; import dev.enola.common.io.mediatype.MediaTypeProviders; +import io.ipfs.cid.Cid.CidEncodingException; + import org.junit.Rule; import org.junit.Test; @@ -50,7 +52,7 @@ public void hello() throws IOException { } @Test - public void vanGough() throws IOException { + public void vanGogh() throws IOException { var url = "ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html"; var r = @@ -71,8 +73,15 @@ private ReadableResource resourceFromIPFS(String url) throws IOException { return new IPFSResource(URI.create(url), httpResourceProvider, IPFS_GATEWAY); } - // TODO Test "ipfs:QmXV7pL1CB7A8Tzk7jP2XE9kRyk8HZd145KDptdxzmNLfu" - // (without // ) and "ipfs:/QmXV7pL1CB7A8Tzk7jP2XE9kRyk8HZd145KDptdxzmNLfu" with a single - // slash; - // does it also need to support "ipfs:/ipfs/Qm...." ? + @Test(expected = IllegalArgumentException.class) + public void notIFPS() { + var url = "http://www.google.com"; + new IPFSResource(URI.create(url), httpResourceProvider, IPFS_GATEWAY); + } + + @Test(expected = CidEncodingException.class) + public void badCID() { + var url = "ipfs://bad"; + new IPFSResource(URI.create(url), httpResourceProvider, IPFS_GATEWAY); + } } diff --git a/learn/jbang/hello.java b/learn/jbang/hello.java index 49a0e4773..7297bb610 100644 --- a/learn/jbang/hello.java +++ b/learn/jbang/hello.java @@ -19,6 +19,7 @@ //JAVA 21+ //PREVIEW //DEPS dev.enola:enola:0.0.1-SNAPSHOT +//REPOS mavencentral,jitpack import static java.lang.System.out; diff --git a/maven_install.json b/maven_install.json index 12ef253a5..9a2945b3c 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 2008296772, - "__RESOLVED_ARTIFACTS_HASH": 642002534, + "__INPUT_ARTIFACTS_HASH": 254086413, + "__RESOLVED_ARTIFACTS_HASH": -1820843477, "conflict_resolution": { "com.fasterxml.jackson.core:jackson-databind:2.13.5": "com.fasterxml.jackson.core:jackson-databind:2.17.2" }, @@ -69,6 +69,13 @@ }, "version": "2.5.0" }, + "com.github.ipld:java-cid": { + "shasums": { + "jar": "8904dd42a363f383679ffea9cfe1d907370596541ca87e832c191080c8fbbfa8", + "sources": "b69eb1b08766b06e37efef7f0ded0df84e00df8f4143b133b85532318d2e6091" + }, + "version": "1.3.8" + }, "com.github.jai-imageio:jai-imageio-core": { "shasums": { "jar": "8ad3c68e9efffb10ac87ff8bc589adf64b04a729c5194c079efd0643607fd72a", @@ -111,6 +118,20 @@ }, "version": "7.5.5" }, + "com.github.multiformats:java-multibase": { + "shasums": { + "jar": "0d7bc5ac1d173c29a1b16a50fe770986d12fca2f72a769822229ff04d07e5020", + "sources": "57a8371f2f248446f43eedaf522aca52d03e1fdd8b2b97a803743047b71fcb73" + }, + "version": "v1.1.1" + }, + "com.github.multiformats:java-multihash": { + "shasums": { + "jar": "0ebd9fd4b17a698507da6bb1105d6170dedeb21b0e81dea5579d2ab06957e5b1", + "sources": "d73fb293d9daecab3f191dbfd929523e98aebc43271ed0486a838704943f994c" + }, + "version": "v1.3.4" + }, "com.github.spotbugs:spotbugs-annotations": { "shasums": { "jar": "4548b74a815ed44f5480ca4f06204a8b00809dc7e5f6a825a9edf18f40377b65", @@ -1386,6 +1407,9 @@ "com.fasterxml.jackson.core:jackson-core", "com.fasterxml.jackson.core:jackson-databind" ], + "com.github.ipld:java-cid": [ + "com.github.multiformats:java-multihash" + ], "com.github.java-json-tools:btf": [ "com.google.code.findbugs:jsr305" ], @@ -1401,6 +1425,9 @@ "com.github.junrar:junrar": [ "org.slf4j:slf4j-api" ], + "com.github.multiformats:java-multihash": [ + "com.github.multiformats:java-multibase" + ], "com.github.spotbugs:spotbugs-annotations": [ "com.google.code.findbugs:jsr305" ], @@ -2157,6 +2184,9 @@ "org.mozilla.universalchardet.prober.sequence", "org.mozilla.universalchardet.prober.statemachine" ], + "com.github.ipld:java-cid": [ + "io.ipfs.cid" + ], "com.github.jai-imageio:jai-imageio-core": [ "com.github.jaiimageio.impl.common", "com.github.jaiimageio.impl.plugins.bmp", @@ -2233,6 +2263,13 @@ "com.github.junrar.unsigned", "com.github.junrar.volume" ], + "com.github.multiformats:java-multibase": [ + "io.ipfs.multibase", + "io.ipfs.multibase.binary" + ], + "com.github.multiformats:java-multihash": [ + "io.ipfs.multihash" + ], "com.github.spotbugs:spotbugs-annotations": [ "edu.umd.cs.findbugs.annotations" ], @@ -4270,6 +4307,401 @@ "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources", "com.github.albfernandez:juniversalchardet", "com.github.albfernandez:juniversalchardet:jar:sources", + "com.github.ipld:java-cid", + "com.github.ipld:java-cid:jar:sources", + "com.github.jai-imageio:jai-imageio-core", + "com.github.jai-imageio:jai-imageio-core:jar:sources", + "com.github.java-json-tools:btf", + "com.github.java-json-tools:btf:jar:sources", + "com.github.java-json-tools:msg-simple", + "com.github.java-json-tools:msg-simple:jar:sources", + "com.github.java-json-tools:uri-template", + "com.github.java-json-tools:uri-template:jar:sources", + "com.github.jsonld-java:jsonld-java", + "com.github.jsonld-java:jsonld-java:jar:sources", + "com.github.junrar:junrar", + "com.github.junrar:junrar:jar:sources", + "com.github.multiformats:java-multibase", + "com.github.multiformats:java-multibase:jar:sources", + "com.github.multiformats:java-multihash", + "com.github.multiformats:java-multihash:jar:sources", + "com.github.spotbugs:spotbugs-annotations", + "com.github.spotbugs:spotbugs-annotations:jar:sources", + "com.github.virtuald:curvesapi", + "com.github.virtuald:curvesapi:jar:sources", + "com.google.android:annotations", + "com.google.android:annotations:jar:sources", + "com.google.api.grpc:grpc-google-cloud-pubsub-v1", + "com.google.api.grpc:grpc-google-cloud-pubsub-v1:jar:sources", + "com.google.api.grpc:proto-google-cloud-pubsub-v1", + "com.google.api.grpc:proto-google-cloud-pubsub-v1:jar:sources", + "com.google.api.grpc:proto-google-common-protos", + "com.google.api.grpc:proto-google-common-protos:jar:sources", + "com.google.api.grpc:proto-google-iam-v1", + "com.google.api.grpc:proto-google-iam-v1:jar:sources", + "com.google.api:api-common", + "com.google.api:api-common:jar:sources", + "com.google.auto.service:auto-service", + "com.google.auto.service:auto-service-annotations", + "com.google.auto.service:auto-service-annotations:jar:sources", + "com.google.auto.service:auto-service:jar:sources", + "com.google.auto.value:auto-value", + "com.google.auto.value:auto-value-annotations", + "com.google.auto.value:auto-value-annotations:jar:sources", + "com.google.auto.value:auto-value:jar:sources", + "com.google.auto:auto-common", + "com.google.auto:auto-common:jar:sources", + "com.google.code.findbugs:jsr305", + "com.google.code.findbugs:jsr305:jar:sources", + "com.google.code.gson:gson", + "com.google.code.gson:gson:jar:sources", + "com.google.errorprone:error_prone_annotations", + "com.google.errorprone:error_prone_annotations:jar:sources", + "com.google.errorprone:error_prone_type_annotations", + "com.google.errorprone:error_prone_type_annotations:jar:sources", + "com.google.guava:failureaccess", + "com.google.guava:failureaccess:jar:sources", + "com.google.guava:guava", + "com.google.guava:guava:jar:sources", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.j2objc:j2objc-annotations:jar:sources", + "com.google.jimfs:jimfs", + "com.google.jimfs:jimfs:jar:sources", + "com.google.protobuf:protobuf-java", + "com.google.protobuf:protobuf-java-util", + "com.google.protobuf:protobuf-java-util:jar:sources", + "com.google.protobuf:protobuf-java:jar:sources", + "com.google.truth.extensions:truth-java8-extension", + "com.google.truth.extensions:truth-java8-extension:jar:sources", + "com.google.truth.extensions:truth-liteproto-extension", + "com.google.truth.extensions:truth-liteproto-extension:jar:sources", + "com.google.truth.extensions:truth-proto-extension", + "com.google.truth.extensions:truth-proto-extension:jar:sources", + "com.google.truth:truth", + "com.google.truth:truth:jar:sources", + "com.googlecode.plist:dd-plist", + "com.googlecode.plist:dd-plist:jar:sources", + "com.healthmarketscience.jackcess:jackcess", + "com.healthmarketscience.jackcess:jackcess-encrypt", + "com.healthmarketscience.jackcess:jackcess-encrypt:jar:sources", + "com.healthmarketscience.jackcess:jackcess:jar:sources", + "com.pff:java-libpst", + "com.pff:java-libpst:jar:sources", + "com.rometools:rome", + "com.rometools:rome:jar:sources", + "com.squareup.okhttp3:logging-interceptor", + "com.squareup.okhttp3:logging-interceptor:jar:sources", + "com.squareup.okhttp3:okhttp", + "com.squareup.okhttp3:okhttp:jar:sources", + "com.squareup.okio:okio", + "com.squareup.okio:okio-jvm", + "com.squareup.okio:okio-jvm:jar:sources", + "com.squareup.okio:okio:jar:sources", + "com.sun.istack:istack-commons-runtime", + "com.sun.istack:istack-commons-runtime:jar:sources", + "com.zaxxer:SparseBitSet", + "com.zaxxer:SparseBitSet:jar:sources", + "commons-codec:commons-codec", + "commons-codec:commons-codec:jar:sources", + "commons-io:commons-io", + "commons-io:commons-io:jar:sources", + "dev.dirs:directories", + "dev.dirs:directories:jar:sources", + "info.picocli:picocli", + "info.picocli:picocli:jar:sources", + "io.github.amithkoujalgi:ollama4j", + "io.github.amithkoujalgi:ollama4j:jar:sources", + "io.github.classgraph:classgraph", + "io.github.classgraph:classgraph:jar:sources", + "io.github.java-diff-utils:java-diff-utils", + "io.github.java-diff-utils:java-diff-utils:jar:sources", + "io.grpc:grpc-api", + "io.grpc:grpc-api:jar:sources", + "io.grpc:grpc-context", + "io.grpc:grpc-context:jar:sources", + "io.grpc:grpc-core", + "io.grpc:grpc-core:jar:sources", + "io.grpc:grpc-inprocess", + "io.grpc:grpc-inprocess:jar:sources", + "io.grpc:grpc-netty", + "io.grpc:grpc-netty:jar:sources", + "io.grpc:grpc-protobuf", + "io.grpc:grpc-protobuf-lite", + "io.grpc:grpc-protobuf-lite:jar:sources", + "io.grpc:grpc-protobuf:jar:sources", + "io.grpc:grpc-stub", + "io.grpc:grpc-stub:jar:sources", + "io.grpc:grpc-util", + "io.grpc:grpc-util:jar:sources", + "io.gsonfire:gson-fire", + "io.gsonfire:gson-fire:jar:sources", + "io.kubernetes:client-java", + "io.kubernetes:client-java-api", + "io.kubernetes:client-java-api:jar:sources", + "io.kubernetes:client-java-proto", + "io.kubernetes:client-java-proto:jar:sources", + "io.kubernetes:client-java:jar:sources", + "io.netty:netty-buffer", + "io.netty:netty-buffer:jar:sources", + "io.netty:netty-codec", + "io.netty:netty-codec-http", + "io.netty:netty-codec-http2", + "io.netty:netty-codec-http2:jar:sources", + "io.netty:netty-codec-http:jar:sources", + "io.netty:netty-codec-socks", + "io.netty:netty-codec-socks:jar:sources", + "io.netty:netty-codec:jar:sources", + "io.netty:netty-common", + "io.netty:netty-common:jar:sources", + "io.netty:netty-handler", + "io.netty:netty-handler-proxy", + "io.netty:netty-handler-proxy:jar:sources", + "io.netty:netty-handler:jar:sources", + "io.netty:netty-resolver", + "io.netty:netty-resolver:jar:sources", + "io.netty:netty-transport", + "io.netty:netty-transport-native-unix-common", + "io.netty:netty-transport-native-unix-common:jar:sources", + "io.netty:netty-transport:jar:sources", + "io.perfmark:perfmark-api", + "io.perfmark:perfmark-api:jar:sources", + "io.swagger:swagger-annotations", + "io.swagger:swagger-annotations:jar:sources", + "jakarta.activation:jakarta.activation-api", + "jakarta.activation:jakarta.activation-api:jar:sources", + "jakarta.json:jakarta.json-api", + "jakarta.json:jakarta.json-api:jar:sources", + "jakarta.xml.bind:jakarta.xml.bind-api", + "jakarta.xml.bind:jakarta.xml.bind-api:jar:sources", + "javax.annotation:javax.annotation-api", + "javax.annotation:javax.annotation-api:jar:sources", + "junit:junit", + "junit:junit:jar:sources", + "no.hasmac:hasmac-json-ld", + "no.hasmac:hasmac-json-ld:jar:sources", + "org.apache.commons:commons-collections4", + "org.apache.commons:commons-collections4:jar:sources", + "org.apache.commons:commons-compress", + "org.apache.commons:commons-compress:jar:sources", + "org.apache.commons:commons-csv", + "org.apache.commons:commons-csv:jar:sources", + "org.apache.commons:commons-exec", + "org.apache.commons:commons-exec:jar:sources", + "org.apache.commons:commons-lang3", + "org.apache.commons:commons-lang3:jar:sources", + "org.apache.commons:commons-math3", + "org.apache.commons:commons-math3:jar:sources", + "org.apache.httpcomponents:httpclient", + "org.apache.httpcomponents:httpclient-cache", + "org.apache.httpcomponents:httpclient-cache:jar:sources", + "org.apache.httpcomponents:httpclient:jar:sources", + "org.apache.httpcomponents:httpcore", + "org.apache.httpcomponents:httpcore:jar:sources", + "org.apache.james:apache-mime4j-core", + "org.apache.james:apache-mime4j-core:jar:sources", + "org.apache.james:apache-mime4j-dom", + "org.apache.james:apache-mime4j-dom:jar:sources", + "org.apache.logging.log4j:log4j-api", + "org.apache.logging.log4j:log4j-api:jar:sources", + "org.apache.logging.log4j:log4j-to-jul", + "org.apache.logging.log4j:log4j-to-jul:jar:sources", + "org.apache.pdfbox:fontbox", + "org.apache.pdfbox:fontbox:jar:sources", + "org.apache.pdfbox:jbig2-imageio", + "org.apache.pdfbox:jbig2-imageio:jar:sources", + "org.apache.pdfbox:jempbox", + "org.apache.pdfbox:jempbox:jar:sources", + "org.apache.pdfbox:pdfbox", + "org.apache.pdfbox:pdfbox-io", + "org.apache.pdfbox:pdfbox-io:jar:sources", + "org.apache.pdfbox:pdfbox-tools", + "org.apache.pdfbox:pdfbox-tools:jar:sources", + "org.apache.pdfbox:pdfbox:jar:sources", + "org.apache.pdfbox:xmpbox", + "org.apache.pdfbox:xmpbox:jar:sources", + "org.apache.poi:poi", + "org.apache.poi:poi-ooxml", + "org.apache.poi:poi-ooxml-lite", + "org.apache.poi:poi-ooxml-lite:jar:sources", + "org.apache.poi:poi-ooxml:jar:sources", + "org.apache.poi:poi-scratchpad", + "org.apache.poi:poi-scratchpad:jar:sources", + "org.apache.poi:poi:jar:sources", + "org.apache.tika:tika-core", + "org.apache.tika:tika-core:jar:sources", + "org.apache.tika:tika-parser-apple-module", + "org.apache.tika:tika-parser-apple-module:jar:sources", + "org.apache.tika:tika-parser-audiovideo-module", + "org.apache.tika:tika-parser-audiovideo-module:jar:sources", + "org.apache.tika:tika-parser-cad-module", + "org.apache.tika:tika-parser-cad-module:jar:sources", + "org.apache.tika:tika-parser-code-module", + "org.apache.tika:tika-parser-code-module:jar:sources", + "org.apache.tika:tika-parser-crypto-module", + "org.apache.tika:tika-parser-crypto-module:jar:sources", + "org.apache.tika:tika-parser-digest-commons", + "org.apache.tika:tika-parser-digest-commons:jar:sources", + "org.apache.tika:tika-parser-font-module", + "org.apache.tika:tika-parser-font-module:jar:sources", + "org.apache.tika:tika-parser-html-module", + "org.apache.tika:tika-parser-html-module:jar:sources", + "org.apache.tika:tika-parser-image-module", + "org.apache.tika:tika-parser-image-module:jar:sources", + "org.apache.tika:tika-parser-mail-commons", + "org.apache.tika:tika-parser-mail-commons:jar:sources", + "org.apache.tika:tika-parser-mail-module", + "org.apache.tika:tika-parser-mail-module:jar:sources", + "org.apache.tika:tika-parser-microsoft-module", + "org.apache.tika:tika-parser-microsoft-module:jar:sources", + "org.apache.tika:tika-parser-miscoffice-module", + "org.apache.tika:tika-parser-miscoffice-module:jar:sources", + "org.apache.tika:tika-parser-news-module", + "org.apache.tika:tika-parser-news-module:jar:sources", + "org.apache.tika:tika-parser-ocr-module", + "org.apache.tika:tika-parser-ocr-module:jar:sources", + "org.apache.tika:tika-parser-pdf-module", + "org.apache.tika:tika-parser-pdf-module:jar:sources", + "org.apache.tika:tika-parser-pkg-module", + "org.apache.tika:tika-parser-pkg-module:jar:sources", + "org.apache.tika:tika-parser-text-module", + "org.apache.tika:tika-parser-text-module:jar:sources", + "org.apache.tika:tika-parser-webarchive-module", + "org.apache.tika:tika-parser-webarchive-module:jar:sources", + "org.apache.tika:tika-parser-xml-module", + "org.apache.tika:tika-parser-xml-module:jar:sources", + "org.apache.tika:tika-parser-xmp-commons", + "org.apache.tika:tika-parser-xmp-commons:jar:sources", + "org.apache.tika:tika-parser-zip-commons", + "org.apache.tika:tika-parser-zip-commons:jar:sources", + "org.apache.tika:tika-parsers-standard-package", + "org.apache.tika:tika-parsers-standard-package:jar:sources", + "org.apache.tomcat:annotations-api", + "org.apache.xmlbeans:xmlbeans", + "org.apache.xmlbeans:xmlbeans:jar:sources", + "org.bitbucket.b_c:jose4j", + "org.bitbucket.b_c:jose4j:jar:sources", + "org.bouncycastle:bcjmail-jdk18on", + "org.bouncycastle:bcjmail-jdk18on:jar:sources", + "org.bouncycastle:bcpkix-jdk18on", + "org.bouncycastle:bcpkix-jdk18on:jar:sources", + "org.bouncycastle:bcprov-jdk18on", + "org.bouncycastle:bcprov-jdk18on:jar:sources", + "org.bouncycastle:bcutil-jdk18on", + "org.bouncycastle:bcutil-jdk18on:jar:sources", + "org.brotli:dec", + "org.brotli:dec:jar:sources", + "org.ccil.cowan.tagsoup:tagsoup", + "org.ccil.cowan.tagsoup:tagsoup:jar:sources", + "org.checkerframework:checker-qual", + "org.checkerframework:checker-qual:jar:sources", + "org.codehaus.mojo:animal-sniffer-annotations", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources", + "org.codelibs:jhighlight", + "org.codelibs:jhighlight:jar:sources", + "org.eclipse.angus:angus-activation", + "org.eclipse.angus:angus-activation:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-annotation", + "org.eclipse.rdf4j:rdf4j-common-annotation:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-exception", + "org.eclipse.rdf4j:rdf4j-common-exception:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-io", + "org.eclipse.rdf4j:rdf4j-common-io:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-iterator", + "org.eclipse.rdf4j:rdf4j-common-iterator:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-order", + "org.eclipse.rdf4j:rdf4j-common-order:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-text", + "org.eclipse.rdf4j:rdf4j-common-text:jar:sources", + "org.eclipse.rdf4j:rdf4j-common-xml", + "org.eclipse.rdf4j:rdf4j-common-xml:jar:sources", + "org.eclipse.rdf4j:rdf4j-model", + "org.eclipse.rdf4j:rdf4j-model-api", + "org.eclipse.rdf4j:rdf4j-model-api:jar:sources", + "org.eclipse.rdf4j:rdf4j-model-vocabulary", + "org.eclipse.rdf4j:rdf4j-model-vocabulary:jar:sources", + "org.eclipse.rdf4j:rdf4j-model:jar:sources", + "org.eclipse.rdf4j:rdf4j-rio-api", + "org.eclipse.rdf4j:rdf4j-rio-api:jar:sources", + "org.eclipse.rdf4j:rdf4j-rio-datatypes", + "org.eclipse.rdf4j:rdf4j-rio-datatypes:jar:sources", + "org.eclipse.rdf4j:rdf4j-rio-jsonld", + "org.eclipse.rdf4j:rdf4j-rio-jsonld:jar:sources", + "org.eclipse.rdf4j:rdf4j-rio-languages", + "org.eclipse.rdf4j:rdf4j-rio-languages:jar:sources", + "org.eclipse.rdf4j:rdf4j-rio-turtle", + "org.eclipse.rdf4j:rdf4j-rio-turtle:jar:sources", + "org.gagravarr:vorbis-java-core", + "org.gagravarr:vorbis-java-core:jar:sources", + "org.gagravarr:vorbis-java-tika", + "org.gagravarr:vorbis-java-tika:jar:sources", + "org.glassfish.jaxb:jaxb-core", + "org.glassfish.jaxb:jaxb-core:jar:sources", + "org.glassfish.jaxb:jaxb-runtime", + "org.glassfish.jaxb:jaxb-runtime:jar:sources", + "org.glassfish.jaxb:txw2", + "org.glassfish.jaxb:txw2:jar:sources", + "org.glassfish:jakarta.json", + "org.glassfish:jakarta.json:jar:sources", + "org.hamcrest:hamcrest-core", + "org.hamcrest:hamcrest-core:jar:sources", + "org.jdom:jdom2", + "org.jdom:jdom2:jar:sources", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", + "org.jetbrains:annotations", + "org.jetbrains:annotations:jar:sources", + "org.jsoup:jsoup", + "org.jsoup:jsoup:jar:sources", + "org.jspecify:jspecify", + "org.jspecify:jspecify:jar:sources", + "org.netpreserve:jwarc", + "org.netpreserve:jwarc:jar:sources", + "org.ow2.asm:asm", + "org.ow2.asm:asm:jar:sources", + "org.slf4j:jcl-over-slf4j", + "org.slf4j:jcl-over-slf4j:jar:sources", + "org.slf4j:slf4j-api", + "org.slf4j:slf4j-api:jar:sources", + "org.slf4j:slf4j-jdk14", + "org.slf4j:slf4j-jdk14:jar:sources", + "org.slf4j:slf4j-simple", + "org.slf4j:slf4j-simple:jar:sources", + "org.snakeyaml:snakeyaml-engine", + "org.snakeyaml:snakeyaml-engine:jar:sources", + "org.tallison:jmatio", + "org.tallison:jmatio:jar:sources", + "org.tukaani:xz", + "org.tukaani:xz:jar:sources", + "org.yaml:snakeyaml", + "org.yaml:snakeyaml:jar:sources" + ], + "https://jitpack.io/": [ + "ch.vorburger.exec:exec", + "ch.vorburger.exec:exec:jar:sources", + "com.adobe.xmp:xmpcore", + "com.drewnoakes:metadata-extractor", + "com.drewnoakes:metadata-extractor:jar:sources", + "com.epam:parso", + "com.epam:parso:jar:sources", + "com.fasterxml.jackson.core:jackson-annotations", + "com.fasterxml.jackson.core:jackson-annotations:jar:sources", + "com.fasterxml.jackson.core:jackson-core", + "com.fasterxml.jackson.core:jackson-core:jar:sources", + "com.fasterxml.jackson.core:jackson-databind", + "com.fasterxml.jackson.core:jackson-databind:jar:sources", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources", + "com.github.albfernandez:juniversalchardet", + "com.github.albfernandez:juniversalchardet:jar:sources", + "com.github.ipld:java-cid", + "com.github.ipld:java-cid:jar:sources", "com.github.jai-imageio:jai-imageio-core", "com.github.jai-imageio:jai-imageio-core:jar:sources", "com.github.java-json-tools:btf", @@ -4282,6 +4714,10 @@ "com.github.jsonld-java:jsonld-java:jar:sources", "com.github.junrar:junrar", "com.github.junrar:junrar:jar:sources", + "com.github.multiformats:java-multibase", + "com.github.multiformats:java-multibase:jar:sources", + "com.github.multiformats:java-multihash", + "com.github.multiformats:java-multihash:jar:sources", "com.github.spotbugs:spotbugs-annotations", "com.github.spotbugs:spotbugs-annotations:jar:sources", "com.github.virtuald:curvesapi",