From 44885f6e73f286cd3d26ca55713e78e338c14b74 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 10:05:34 +0000 Subject: [PATCH 1/3] [fern-generated] Update SDK Generated by Fern CLI Version: unknown Generators: - fernapi/fern-java-sdk: 4.19.2 --- .fern/metadata.json | 6 +- build.gradle | 4 +- .../com/schematic/api/core/ClientOptions.java | 4 +- .../api/types/GetOnboardingStateResp.java | 26 +++ .../api/types/SlackConnectInviteStatus.java | 114 ++++++++++ .../api/types/SlackConnectInviteView.java | 201 ++++++++++++++++++ 6 files changed, 348 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/schematic/api/types/SlackConnectInviteStatus.java create mode 100644 src/main/java/com/schematic/api/types/SlackConnectInviteView.java diff --git a/.fern/metadata.json b/.fern/metadata.json index acf2cba..914f688 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -14,10 +14,10 @@ "implementation redis.clients:jedis:5.2.0" ] }, - "originGitCommit": "31f498c0a9babdc0eec5ae88e1212a254b2f2561", + "originGitCommit": "a8c4d02880995eed9268732ac12e58a1ddc1b73d", "originGitCommitIsDirty": false, "invokedBy": "ci", - "requestedVersion": "1.5.9", + "requestedVersion": "1.5.10", "ciProvider": "github", - "sdkVersion": "1.5.9" + "sdkVersion": "1.5.10" } \ No newline at end of file diff --git a/build.gradle b/build.gradle index e618710..407eadd 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,7 @@ java { group = 'com.schematichq' -version = '1.5.9' +version = '1.5.10' jar { dependsOn(":generatePomFileForMavenPublication") @@ -93,7 +93,7 @@ publishing { maven(MavenPublication) { groupId = 'com.schematichq' artifactId = 'schematic-java' - version = '1.5.9' + version = '1.5.10' from components.java pom { name = 'Schematic' diff --git a/src/main/java/com/schematic/api/core/ClientOptions.java b/src/main/java/com/schematic/api/core/ClientOptions.java index a0483c8..44e7d48 100644 --- a/src/main/java/com/schematic/api/core/ClientOptions.java +++ b/src/main/java/com/schematic/api/core/ClientOptions.java @@ -47,10 +47,10 @@ private ClientOptions( this.headers.putAll(headers); this.headers.putAll(new HashMap() { { - put("User-Agent", "com.schematichq.schematic-java/1.5.9"); + put("User-Agent", "com.schematichq.schematic-java/1.5.10"); put("X-Fern-Language", "JAVA"); put("X-Fern-SDK-Name", "com.schematichq:schematic-java"); - put("X-Fern-SDK-Version", "1.5.9"); + put("X-Fern-SDK-Version", "1.5.10"); } }); this.headerSuppliers = headerSuppliers; diff --git a/src/main/java/com/schematic/api/types/GetOnboardingStateResp.java b/src/main/java/com/schematic/api/types/GetOnboardingStateResp.java index bbbce83..b148b6c 100644 --- a/src/main/java/com/schematic/api/types/GetOnboardingStateResp.java +++ b/src/main/java/com/schematic/api/types/GetOnboardingStateResp.java @@ -39,6 +39,8 @@ public final class GetOnboardingStateResp { private final List requirements; + private final Optional slackConnect; + private final Optional stripeImport; private final List suggestedNext; @@ -58,6 +60,7 @@ private GetOnboardingStateResp( Optional path, Optional pricingPageUrl, List requirements, + Optional slackConnect, Optional stripeImport, List suggestedNext, Optional track, @@ -71,6 +74,7 @@ private GetOnboardingStateResp( this.path = path; this.pricingPageUrl = pricingPageUrl; this.requirements = requirements; + this.slackConnect = slackConnect; this.stripeImport = stripeImport; this.suggestedNext = suggestedNext; this.track = track; @@ -118,6 +122,11 @@ public List getRequirements() { return requirements; } + @JsonProperty("slack_connect") + public Optional getSlackConnect() { + return slackConnect; + } + @JsonProperty("stripe_import") public Optional getStripeImport() { return stripeImport; @@ -158,6 +167,7 @@ private boolean equalTo(GetOnboardingStateResp other) { && path.equals(other.path) && pricingPageUrl.equals(other.pricingPageUrl) && requirements.equals(other.requirements) + && slackConnect.equals(other.slackConnect) && stripeImport.equals(other.stripeImport) && suggestedNext.equals(other.suggestedNext) && track.equals(other.track) @@ -175,6 +185,7 @@ public int hashCode() { this.path, this.pricingPageUrl, this.requirements, + this.slackConnect, this.stripeImport, this.suggestedNext, this.track, @@ -208,6 +219,8 @@ public static final class Builder { private List requirements = new ArrayList<>(); + private Optional slackConnect = Optional.empty(); + private Optional stripeImport = Optional.empty(); private List suggestedNext = new ArrayList<>(); @@ -230,6 +243,7 @@ public Builder from(GetOnboardingStateResp other) { path(other.getPath()); pricingPageUrl(other.getPricingPageUrl()); requirements(other.getRequirements()); + slackConnect(other.getSlackConnect()); stripeImport(other.getStripeImport()); suggestedNext(other.getSuggestedNext()); track(other.getTrack()); @@ -345,6 +359,17 @@ public Builder addAllRequirements(List requirements) return this; } + @JsonSetter(value = "slack_connect", nulls = Nulls.SKIP) + public Builder slackConnect(Optional slackConnect) { + this.slackConnect = slackConnect; + return this; + } + + public Builder slackConnect(SlackConnectInviteView slackConnect) { + this.slackConnect = Optional.ofNullable(slackConnect); + return this; + } + @JsonSetter(value = "stripe_import", nulls = Nulls.SKIP) public Builder stripeImport(Optional stripeImport) { this.stripeImport = stripeImport; @@ -409,6 +434,7 @@ public GetOnboardingStateResp build() { path, pricingPageUrl, requirements, + slackConnect, stripeImport, suggestedNext, track, diff --git a/src/main/java/com/schematic/api/types/SlackConnectInviteStatus.java b/src/main/java/com/schematic/api/types/SlackConnectInviteStatus.java new file mode 100644 index 0000000..35ea69d --- /dev/null +++ b/src/main/java/com/schematic/api/types/SlackConnectInviteStatus.java @@ -0,0 +1,114 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.schematic.api.types; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +public final class SlackConnectInviteStatus { + public static final SlackConnectInviteStatus DECLINED = new SlackConnectInviteStatus(Value.DECLINED, "declined"); + + public static final SlackConnectInviteStatus PENDING = new SlackConnectInviteStatus(Value.PENDING, "pending"); + + public static final SlackConnectInviteStatus EXPIRED = new SlackConnectInviteStatus(Value.EXPIRED, "expired"); + + public static final SlackConnectInviteStatus ACCEPTED = new SlackConnectInviteStatus(Value.ACCEPTED, "accepted"); + + public static final SlackConnectInviteStatus DISMISSED = new SlackConnectInviteStatus(Value.DISMISSED, "dismissed"); + + private final Value value; + + private final String string; + + SlackConnectInviteStatus(Value value, String string) { + this.value = value; + this.string = string; + } + + public Value getEnumValue() { + return value; + } + + @java.lang.Override + @JsonValue + public String toString() { + return this.string; + } + + @java.lang.Override + public boolean equals(Object other) { + return (this == other) + || (other instanceof SlackConnectInviteStatus + && this.string.equals(((SlackConnectInviteStatus) other).string)); + } + + @java.lang.Override + public int hashCode() { + return this.string.hashCode(); + } + + public T visit(Visitor visitor) { + switch (value) { + case DECLINED: + return visitor.visitDeclined(); + case PENDING: + return visitor.visitPending(); + case EXPIRED: + return visitor.visitExpired(); + case ACCEPTED: + return visitor.visitAccepted(); + case DISMISSED: + return visitor.visitDismissed(); + case UNKNOWN: + default: + return visitor.visitUnknown(string); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static SlackConnectInviteStatus valueOf(String value) { + switch (value) { + case "declined": + return DECLINED; + case "pending": + return PENDING; + case "expired": + return EXPIRED; + case "accepted": + return ACCEPTED; + case "dismissed": + return DISMISSED; + default: + return new SlackConnectInviteStatus(Value.UNKNOWN, value); + } + } + + public enum Value { + ACCEPTED, + + DECLINED, + + DISMISSED, + + EXPIRED, + + PENDING, + + UNKNOWN + } + + public interface Visitor { + T visitAccepted(); + + T visitDeclined(); + + T visitDismissed(); + + T visitExpired(); + + T visitPending(); + + T visitUnknown(String unknownType); + } +} diff --git a/src/main/java/com/schematic/api/types/SlackConnectInviteView.java b/src/main/java/com/schematic/api/types/SlackConnectInviteView.java new file mode 100644 index 0000000..2948ef7 --- /dev/null +++ b/src/main/java/com/schematic/api/types/SlackConnectInviteView.java @@ -0,0 +1,201 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.schematic.api.types; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.schematic.api.core.ObjectMappers; +import java.time.OffsetDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import org.jetbrains.annotations.NotNull; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = SlackConnectInviteView.Builder.class) +public final class SlackConnectInviteView { + private final Optional canResendAt; + + private final String email; + + private final OffsetDateTime sentAt; + + private final SlackConnectInviteStatus status; + + private final Map additionalProperties; + + private SlackConnectInviteView( + Optional canResendAt, + String email, + OffsetDateTime sentAt, + SlackConnectInviteStatus status, + Map additionalProperties) { + this.canResendAt = canResendAt; + this.email = email; + this.sentAt = sentAt; + this.status = status; + this.additionalProperties = additionalProperties; + } + + @JsonProperty("can_resend_at") + public Optional getCanResendAt() { + return canResendAt; + } + + @JsonProperty("email") + public String getEmail() { + return email; + } + + @JsonProperty("sent_at") + public OffsetDateTime getSentAt() { + return sentAt; + } + + @JsonProperty("status") + public SlackConnectInviteStatus getStatus() { + return status; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof SlackConnectInviteView && equalTo((SlackConnectInviteView) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(SlackConnectInviteView other) { + return canResendAt.equals(other.canResendAt) + && email.equals(other.email) + && sentAt.equals(other.sentAt) + && status.equals(other.status); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.canResendAt, this.email, this.sentAt, this.status); + } + + @java.lang.Override + public String toString() { + return ObjectMappers.stringify(this); + } + + public static EmailStage builder() { + return new Builder(); + } + + public interface EmailStage { + SentAtStage email(@NotNull String email); + + Builder from(SlackConnectInviteView other); + } + + public interface SentAtStage { + StatusStage sentAt(@NotNull OffsetDateTime sentAt); + } + + public interface StatusStage { + _FinalStage status(@NotNull SlackConnectInviteStatus status); + } + + public interface _FinalStage { + SlackConnectInviteView build(); + + _FinalStage additionalProperty(String key, Object value); + + _FinalStage additionalProperties(Map additionalProperties); + + _FinalStage canResendAt(Optional canResendAt); + + _FinalStage canResendAt(OffsetDateTime canResendAt); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static final class Builder implements EmailStage, SentAtStage, StatusStage, _FinalStage { + private String email; + + private OffsetDateTime sentAt; + + private SlackConnectInviteStatus status; + + private Optional canResendAt = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + @java.lang.Override + public Builder from(SlackConnectInviteView other) { + canResendAt(other.getCanResendAt()); + email(other.getEmail()); + sentAt(other.getSentAt()); + status(other.getStatus()); + return this; + } + + @java.lang.Override + @JsonSetter("email") + public SentAtStage email(@NotNull String email) { + this.email = Objects.requireNonNull(email, "email must not be null"); + return this; + } + + @java.lang.Override + @JsonSetter("sent_at") + public StatusStage sentAt(@NotNull OffsetDateTime sentAt) { + this.sentAt = Objects.requireNonNull(sentAt, "sentAt must not be null"); + return this; + } + + @java.lang.Override + @JsonSetter("status") + public _FinalStage status(@NotNull SlackConnectInviteStatus status) { + this.status = Objects.requireNonNull(status, "status must not be null"); + return this; + } + + @java.lang.Override + public _FinalStage canResendAt(OffsetDateTime canResendAt) { + this.canResendAt = Optional.ofNullable(canResendAt); + return this; + } + + @java.lang.Override + @JsonSetter(value = "can_resend_at", nulls = Nulls.SKIP) + public _FinalStage canResendAt(Optional canResendAt) { + this.canResendAt = canResendAt; + return this; + } + + @java.lang.Override + public SlackConnectInviteView build() { + return new SlackConnectInviteView(canResendAt, email, sentAt, status, additionalProperties); + } + + @java.lang.Override + public Builder additionalProperty(String key, Object value) { + this.additionalProperties.put(key, value); + return this; + } + + @java.lang.Override + public Builder additionalProperties(Map additionalProperties) { + this.additionalProperties.putAll(additionalProperties); + return this; + } + } +} From cd4332497d0a88defebc527caf685e79c76f7bd1 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 10:05:34 +0000 Subject: [PATCH 2/3] [fern-replay] advance lockfile --- .fern/replay.lock | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.fern/replay.lock b/.fern/replay.lock index 288e42a..1a7d37f 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -60,5 +60,11 @@ generations: cli_version: unknown generator_versions: fernapi/fern-java-sdk: 4.19.2 -current_generation: 66bda91e3e5e64805291b44f92c7ac83acce3768 + - commit_sha: b3a20d5bc0efff0c80a4fd3ffebff6088b149510 + tree_hash: fc8cb5247ca46bd0dc35f754a7d9160b1a7b9825 + timestamp: 2026-09-07T10:05:31.718Z + cli_version: unknown + generator_versions: + fernapi/fern-java-sdk: 4.19.2 +current_generation: b3a20d5bc0efff0c80a4fd3ffebff6088b149510 patches: [] From 5bf2d5e05302576ec3fc9b0957ec71c38abfe8fa Mon Sep 17 00:00:00 2001 From: Ben Papillon Date: Tue, 8 Sep 2026 15:44:03 -0700 Subject: [PATCH 3/3] chore(tests): drop flaky interleaving assertion in cache test testConcurrentAccess asserted the 30 surviving LRU entries were not a contiguous range, i.e. that the 10 writer threads interleaved. Nothing guarantees that: when one thread writes its whole block last, the survivors are exactly its contiguous keys. Stressing the scenario locally reproduced the failure in 2-13% of trials depending on machine load. The remaining assertion still covers the actual cache behavior, and did not fail once in 1000 trials. --- src/test/java/com/schematic/api/TestCache.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/schematic/api/TestCache.java b/src/test/java/com/schematic/api/TestCache.java index 5869735..2c455a3 100644 --- a/src/test/java/com/schematic/api/TestCache.java +++ b/src/test/java/com/schematic/api/TestCache.java @@ -116,7 +116,6 @@ void testConcurrentAccess() throws InterruptedException { } assertEquals(cacheCapacity, cacheHits.size()); - assertNotEquals(cacheCapacity, cacheHits.get(cacheHits.size() - 1) - cacheHits.get(0) + 1); } @Test