This is an automated email from the ASF dual-hosted git repository.
roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 75a1a45014 [#7087] fix(license): Fix the licenses issues (#7090)
75a1a45014 is described below
commit 75a1a45014c3236f2b15d4f0418c1145c32cae50
Author: roryqi <[email protected]>
AuthorDate: Tue Apr 29 13:43:19 2025 +0800
[#7087] fix(license): Fix the licenses issues (#7090)
### What changes were proposed in this pull request?
Change the license header for the helm chart files.
Add the MIT licenses for web dependencies
Fix the license header for the `Either.java`
### Why are the changes needed?
Fix: #7087
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
By reivew.
---
LICENSE | 3 +
NOTICE | 6 +
.../api/event/AlterModelVersionFailureEvent.java | 13 +-
.../api/event/AlterModelVersionPreEvent.java | 14 +-
.../apache/gravitino/listener/api/info/Either.java | 167 ++++++++++++++-------
.../gravitino/listener/api/event/TestEither.java | 38 ++---
dev/ci/chart_schema.yaml | 25 ++-
dev/ci/lintconf.yaml | 25 ++-
web/web/LICENSE.bin | 6 +
web/web/licenses/call-bind-apply-helpers.txt | 21 +++
web/web/licenses/call-bound.txt | 21 +++
web/web/licenses/dunder-proto.txt | 21 +++
web/web/licenses/fast-color.txt | 20 +++
web/web/licenses/get-proto.txt | 21 +++
web/web/licenses/math-intrinstics.txt | 21 +++
15 files changed, 304 insertions(+), 118 deletions(-)
diff --git a/LICENSE b/LICENSE
index edee5679b2..9136038ffb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -312,6 +312,9 @@
./dev/ci/chart_schema.yaml
./dev/ci/lintconf.yaml
+ AWS SDK
+ ./core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+
This product bundles a third-party component under the
MIT License.
diff --git a/NOTICE b/NOTICE
index c8b1eda0d1..7944edae73 100644
--- a/NOTICE
+++ b/NOTICE
@@ -33,3 +33,9 @@ Copyright 2019 and onwards The Apache Software Foundation.
Apache Arrow
Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
\ No newline at end of file
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
index db1d666f4d..8773551b0d 100644
---
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
@@ -19,6 +19,7 @@
package org.apache.gravitino.listener.api.event;
+import com.google.common.base.Supplier;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
import org.apache.gravitino.listener.api.info.Either;
@@ -60,7 +61,11 @@ public class AlterModelVersionFailureEvent extends
ModelFailureEvent {
* otherwise throw IllegalStateException.
*/
public String alias() {
- return aliasOrVersion.getLeft();
+ return aliasOrVersion
+ .left()
+ .orElseThrow(
+ (Supplier<IllegalStateException>)
+ () -> new IllegalStateException("Alias can't be null value"));
}
/**
@@ -70,7 +75,11 @@ public class AlterModelVersionFailureEvent extends
ModelFailureEvent {
* otherwise throw IllegalStateException.
*/
public Integer version() {
- return aliasOrVersion.getRight();
+ return aliasOrVersion
+ .right()
+ .orElseThrow(
+ (Supplier<IllegalStateException>)
+ () -> new IllegalStateException("Version can't be null
value"));
}
/**
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
index 3c2bbc1b65..d123069e66 100644
---
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
@@ -19,6 +19,7 @@
package org.apache.gravitino.listener.api.event;
+import com.google.common.base.Supplier;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
import org.apache.gravitino.listener.api.info.Either;
@@ -59,7 +60,11 @@ public class AlterModelVersionPreEvent extends ModelPreEvent
{
* otherwise throw an IllegalStateException exception.
*/
public String alias() {
- return aliasOrVersion.getLeft();
+ return aliasOrVersion
+ .left()
+ .orElseThrow(
+ (Supplier<IllegalStateException>)
+ () -> new IllegalStateException("Alias can't be null value"));
}
/**
@@ -69,7 +74,12 @@ public class AlterModelVersionPreEvent extends ModelPreEvent
{
* otherwise throw an IllegalStateException exception.
*/
public Integer version() {
- return aliasOrVersion.getRight();
+
+ return aliasOrVersion
+ .right()
+ .orElseThrow(
+ (Supplier<IllegalStateException>)
+ () -> new IllegalStateException("Version can't be null
value"));
}
/**
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
index 60ebadaef3..b9b51e00b2 100644
--- a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+++ b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
@@ -1,42 +1,91 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
*
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
*/
package org.apache.gravitino.listener.api.info;
+import com.google.common.base.Preconditions;
import java.util.Optional;
-import org.glassfish.jersey.internal.guava.Preconditions;
+import java.util.function.Consumer;
+import java.util.function.Function;
/**
- * Either represents a value of two possible types (a disjoint union).
+ * Represents a value that can be one of two types.
*
* @param <L> Left type
* @param <R> Right type
*/
public final class Either<L, R> {
+
private final Optional<L> left;
private final Optional<R> right;
+ private Either(Optional<L> l, Optional<R> r) {
+ left = l;
+ right = r;
+ }
+
/**
- * Create a new {@code Either} instance with a left value.
+ * Maps the Either to a type and returns the resolved value (which may be
from the left or the
+ * right value).
+ *
+ * @param lFunc Function that maps the left value if present.
+ * @param rFunc Function that maps the right value if present.
+ * @param <T> Type that both the left and right should be mapped to.
+ * @return Mapped value from either lFunc or rFunc depending on which value
is present.
+ */
+ public <T> T map(Function<? super L, ? extends T> lFunc, Function<? super R,
? extends T> rFunc) {
+ return left.<T>map(lFunc).orElseGet(() -> right.map(rFunc).get());
+ }
+
+ /**
+ * Map the left most value and return a new Either reflecting the new types.
+ *
+ * @param lFunc Function that maps the left value if present.
+ * @param <T> New type of left value.
+ * @return New Either bound to the new left type and the same right type.
+ */
+ public <T> Either<T, R> mapLeft(Function<? super L, ? extends T> lFunc) {
+ return new Either<>(left.map(lFunc), right);
+ }
+
+ /**
+ * Map the right most value and return a new Either reflecting the new types.
+ *
+ * @param rFunc Function that maps the right value if present.
+ * @param <T> New type of right value.
+ * @return New Either bound to the same left type and the new right type.
+ */
+ public <T> Either<L, T> mapRight(Function<? super R, ? extends T> rFunc) {
+ return new Either<>(left, right.map(rFunc));
+ }
+
+ /**
+ * Apply the consumers to the left or the right value depending on which is
present.
+ *
+ * @param lFunc Consumer of left value, invoked if left value is present.
+ * @param rFunc Consumer of right value, invoked if right value is present.
+ */
+ public void apply(Consumer<? super L> lFunc, Consumer<? super R> rFunc) {
+ left.ifPresent(lFunc);
+ right.ifPresent(rFunc);
+ }
+
+ /**
+ * Create a new Either with the left type.
*
* @param value Left value
- * @return Either with left value
* @param <L> Left type
* @param <R> Right type
*/
@@ -46,10 +95,9 @@ public final class Either<L, R> {
}
/**
- * Create a new {@code Either} instance with a right value.
+ * Create a new Either with the right type.
*
* @param value Right value
- * @return Either with right value
* @param <L> Left type
* @param <R> Right type
*/
@@ -58,53 +106,60 @@ public final class Either<L, R> {
return new Either<>(Optional.empty(), Optional.of(value));
}
- /** Private constructor. */
- private Either(Optional<L> l, Optional<R> r) {
- left = l;
- right = r;
+ /** @return the left value */
+ public Optional<L> left() {
+ return left;
}
- /**
- * Returns true if this is a left value.
- *
- * @return True if this is a left value
- */
- public boolean isLeft() {
- return left.isPresent();
+ /** @return the right value */
+ public Optional<R> right() {
+ return right;
}
/**
- * Returns true if this is a right value.
+ * Create a new {@code Optional<Either>} from two possibly null values.
*
- * @return True if this is a right value
- */
- public boolean isRight() {
- return right.isPresent();
- }
-
- /**
- * Returns the left value if this is a left value, otherwise throws an
exception.
+ * <p>If both values are null, {@link Optional#empty()} is returned. Only
one of the left or right
+ * values is allowed to be non-null, otherwise an {@link
IllegalArgumentException} is thrown.
*
- * @return Left value
- * @throws IllegalStateException if this is a right value
+ * @param left The left value (possibly null)
+ * @param right The right value (possibly null)
+ * @param <L> Left type
+ * @param <R> Right type
+ * @return an Optional Either representing one of the two values or empty if
both are null
*/
- public L getLeft() {
- if (isRight()) {
- throw new IllegalStateException("Not a left value");
+ public static <L, R> Optional<Either<L, R>> fromNullable(L left, R right) {
+ if (left != null && right == null) {
+ return Optional.of(left(left));
+ }
+ if (left == null && right != null) {
+ return Optional.of(right(right));
}
- return left.get();
+ if (left == null && right == null) {
+ return Optional.empty();
+ }
+ throw new IllegalArgumentException(
+ String.format(
+ "Only one of either left or right should be non-null. " + "Got
(left: %s, right: %s)",
+ left, right));
}
- /**
- * Returns the right value if this is a right value, otherwise throws an
exception.
- *
- * @return Right value
- * @throws IllegalStateException if this is a left value
- */
- public R getRight() {
- if (isLeft()) {
- throw new IllegalStateException("Not a right value");
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Either)) {
+ return false;
}
- return right.get();
+
+ Either<?, ?> either = (Either<?, ?>) o;
+
+ return left.equals(either.left) && right.equals(either.right);
+ }
+
+ @Override
+ public int hashCode() {
+ return 31 * left.hashCode() + right.hashCode();
}
}
diff --git
a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
index de331b013d..e919e41b0b 100644
--- a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
+++ b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
@@ -29,36 +29,18 @@ public class TestEither {
void testLeftValue() {
Either<String, Integer> either = Either.left("alias");
- Assertions.assertTrue(either.isLeft());
- Assertions.assertFalse(either.isRight());
- Assertions.assertEquals("alias", either.getLeft());
+ Assertions.assertTrue(either.left().isPresent());
+ Assertions.assertFalse(either.right().isPresent());
+ Assertions.assertEquals("alias", either.left().get());
}
@Test
void testRightValue() {
Either<String, Integer> either = Either.right(42);
- Assertions.assertTrue(either.isRight());
- Assertions.assertFalse(either.isLeft());
- Assertions.assertEquals(42, either.getRight());
- }
-
- @Test
- void testGetLeftThrowsOnRight() {
- Either<String, Integer> either = Either.right(99);
-
- IllegalStateException exception =
- Assertions.assertThrows(IllegalStateException.class, either::getLeft);
- Assertions.assertEquals("Not a left value", exception.getMessage());
- }
-
- @Test
- void testGetRightThrowsOnLeft() {
- Either<String, Integer> either = Either.left("lefty");
-
- IllegalStateException exception =
- Assertions.assertThrows(IllegalStateException.class, either::getRight);
- Assertions.assertEquals("Not a right value", exception.getMessage());
+ Assertions.assertTrue(either.right().isPresent());
+ Assertions.assertFalse(either.left().isPresent());
+ Assertions.assertEquals(42, either.right().get());
}
@Test
@@ -67,10 +49,10 @@ public class TestEither {
Either<String, Integer> right = Either.right(3);
// Optional checks — not essential but good to verify Optional usage
- Assertions.assertTrue(left.isLeft());
- Assertions.assertEquals("model_v1", left.getLeft());
+ Assertions.assertTrue(left.left().isPresent());
+ Assertions.assertEquals("model_v1", left.left().get());
- Assertions.assertTrue(right.isRight());
- Assertions.assertEquals(3, right.getRight());
+ Assertions.assertTrue(right.right().isPresent());
+ Assertions.assertEquals(3, right.right().get());
}
}
diff --git a/dev/ci/chart_schema.yaml b/dev/ci/chart_schema.yaml
index c209822a19..8550d427e1 100644
--- a/dev/ci/chart_schema.yaml
+++ b/dev/ci/chart_schema.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
+# http://www.apache.org/licenses/LICENSE-2.0
#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
name: str()
home: str(required=False)
version: str()
diff --git a/dev/ci/lintconf.yaml b/dev/ci/lintconf.yaml
index c5c904f3e2..3e878e2c54 100644
--- a/dev/ci/lintconf.yaml
+++ b/dev/ci/lintconf.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
+# http://www.apache.org/licenses/LICENSE-2.0
#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
---
rules:
braces:
diff --git a/web/web/LICENSE.bin b/web/web/LICENSE.bin
index 7a1de16dad..a29d5b1e49 100644
--- a/web/web/LICENSE.bin
+++ b/web/web/LICENSE.bin
@@ -367,6 +367,8 @@
buffer-crc32
busboy
call-bind
+ call-bind-apply-helpers
+ call-bound
callsites
camelcase-css
cheerio
@@ -405,6 +407,7 @@
dom-helpers
dom-serializer
duplexer
+ dunder-proto
eastasianwidth
end-of-stream
enhanced-resolve
@@ -434,6 +437,7 @@
eslint-plugin-react-hooks
eslint-scope
execa
+ fast-color
fast-deep-equal
fast-glob
fast-json-stable-stringify
@@ -453,6 +457,7 @@
function.prototype.name
functions-have-names
get-intrinsic
+ get-proto
get-stream
get-symbol-description
get-tsconfig
@@ -532,6 +537,7 @@
lodash.merge
lodash-es
loose-envify
+ math-intrinsics
merge-stream
micromatch
minimist
diff --git a/web/web/licenses/call-bind-apply-helpers.txt
b/web/web/licenses/call-bind-apply-helpers.txt
new file mode 100644
index 0000000000..f82f38963b
--- /dev/null
+++ b/web/web/licenses/call-bind-apply-helpers.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/call-bound.txt b/web/web/licenses/call-bound.txt
new file mode 100644
index 0000000000..f82f38963b
--- /dev/null
+++ b/web/web/licenses/call-bound.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/dunder-proto.txt
b/web/web/licenses/dunder-proto.txt
new file mode 100644
index 0000000000..34995e79d1
--- /dev/null
+++ b/web/web/licenses/dunder-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/fast-color.txt b/web/web/licenses/fast-color.txt
new file mode 100644
index 0000000000..fbf368a7fb
--- /dev/null
+++ b/web/web/licenses/fast-color.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+Copyright (c) 2015-present Alipay.com, https://www.alipay.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/web/web/licenses/get-proto.txt b/web/web/licenses/get-proto.txt
new file mode 100644
index 0000000000..eeabd1c37c
--- /dev/null
+++ b/web/web/licenses/get-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/math-intrinstics.txt
b/web/web/licenses/math-intrinstics.txt
new file mode 100644
index 0000000000..34995e79d1
--- /dev/null
+++ b/web/web/licenses/math-intrinstics.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.