Skip to content

Commit 5cfc85f

Browse files
authored
sdks: Add v1.message.create-precheck (#2197)
2 parents fdfd65b + 4bbcaf8 commit 5cfc85f

40 files changed

+1121
-3
lines changed

ChangeLog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changelog
22

3+
## Unreleased
4+
* Libs/All: Add support for `v1.message.create-precheck` (Svix Cloud exclusive endpoint)
5+
36
## Version 1.85.0
47
* Server: Fix non-determinism with regards to overrides of specific header names
58
* Server: Bump MSRV to 1.88.0

codegen/generated_files.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@
168168
"csharp/Svix/Models/MessageEndpointOut.cs",
169169
"csharp/Svix/Models/MessageIn.cs",
170170
"csharp/Svix/Models/MessageOut.cs",
171+
"csharp/Svix/Models/MessagePrecheckIn.cs",
172+
"csharp/Svix/Models/MessagePrecheckOut.cs",
171173
"csharp/Svix/Models/MessageStatus.cs",
172174
"csharp/Svix/Models/MessageStatusText.cs",
173175
"csharp/Svix/Models/OperationalWebhookEndpointHeadersIn.cs",
@@ -412,6 +414,8 @@
412414
"go/models/message_endpoint_out.go",
413415
"go/models/message_in.go",
414416
"go/models/message_out.go",
417+
"go/models/message_precheck_in.go",
418+
"go/models/message_precheck_out.go",
415419
"go/models/message_status.go",
416420
"go/models/message_status_text.go",
417421
"go/models/operational_webhook_endpoint_headers_in.go",
@@ -577,6 +581,7 @@
577581
"java/lib/src/main/java/com/svix/api/MessagePollerConsumerPollOptions.java",
578582
"java/lib/src/main/java/com/svix/api/MessagePollerConsumerSeekOptions.java",
579583
"java/lib/src/main/java/com/svix/api/MessagePollerPollOptions.java",
584+
"java/lib/src/main/java/com/svix/api/MessagePrecheckOptions.java",
580585
"java/lib/src/main/java/com/svix/api/OperationalWebhookEndpointCreateOptions.java",
581586
"java/lib/src/main/java/com/svix/api/OperationalWebhookEndpointListOptions.java",
582587
"java/lib/src/main/java/com/svix/api/OperationalWebhookEndpointRotateSecretOptions.java",
@@ -738,6 +743,8 @@
738743
"java/lib/src/main/java/com/svix/models/MessageEndpointOut.java",
739744
"java/lib/src/main/java/com/svix/models/MessageIn.java",
740745
"java/lib/src/main/java/com/svix/models/MessageOut.java",
746+
"java/lib/src/main/java/com/svix/models/MessagePrecheckIn.java",
747+
"java/lib/src/main/java/com/svix/models/MessagePrecheckOut.java",
741748
"java/lib/src/main/java/com/svix/models/MessageStatus.java",
742749
"java/lib/src/main/java/com/svix/models/MessageStatusText.java",
743750
"java/lib/src/main/java/com/svix/models/OperationalWebhookEndpointHeadersIn.java",
@@ -980,6 +987,8 @@
980987
"javascript/src/models/messageEndpointOut.ts",
981988
"javascript/src/models/messageIn.ts",
982989
"javascript/src/models/messageOut.ts",
990+
"javascript/src/models/messagePrecheckIn.ts",
991+
"javascript/src/models/messagePrecheckOut.ts",
983992
"javascript/src/models/messageStatus.ts",
984993
"javascript/src/models/messageStatusText.ts",
985994
"javascript/src/models/operationalWebhookEndpointHeadersIn.ts",
@@ -1219,6 +1228,8 @@
12191228
"kotlin/lib/src/main/kotlin/models/MessageEndpointOut.kt",
12201229
"kotlin/lib/src/main/kotlin/models/MessageIn.kt",
12211230
"kotlin/lib/src/main/kotlin/models/MessageOut.kt",
1231+
"kotlin/lib/src/main/kotlin/models/MessagePrecheckIn.kt",
1232+
"kotlin/lib/src/main/kotlin/models/MessagePrecheckOut.kt",
12221233
"kotlin/lib/src/main/kotlin/models/MessageStatus.kt",
12231234
"kotlin/lib/src/main/kotlin/models/MessageStatusText.kt",
12241235
"kotlin/lib/src/main/kotlin/models/OperationalWebhookEndpointHeadersIn.kt",
@@ -1355,6 +1366,7 @@
13551366
"php/src/Api/MessagePollerConsumerPollOptions.php",
13561367
"php/src/Api/MessagePollerConsumerSeekOptions.php",
13571368
"php/src/Api/MessagePollerPollOptions.php",
1369+
"php/src/Api/MessagePrecheckOptions.php",
13581370
"php/src/Api/OperationalWebhookEndpointCreateOptions.php",
13591371
"php/src/Api/OperationalWebhookEndpointListOptions.php",
13601372
"php/src/Api/OperationalWebhookEndpointRotateSecretOptions.php",
@@ -1496,6 +1508,8 @@
14961508
"php/src/Models/MessageEndpointOut.php",
14971509
"php/src/Models/MessageIn.php",
14981510
"php/src/Models/MessageOut.php",
1511+
"php/src/Models/MessagePrecheckIn.php",
1512+
"php/src/Models/MessagePrecheckOut.php",
14991513
"php/src/Models/MessageStatus.php",
15001514
"php/src/Models/MessageStatusText.php",
15011515
"php/src/Models/OperationalWebhookEndpointHeadersIn.php",
@@ -1717,6 +1731,8 @@
17171731
"python/svix/models/message_endpoint_out.py",
17181732
"python/svix/models/message_in.py",
17191733
"python/svix/models/message_out.py",
1734+
"python/svix/models/message_precheck_in.py",
1735+
"python/svix/models/message_precheck_out.py",
17201736
"python/svix/models/message_status.py",
17211737
"python/svix/models/message_status_text.py",
17221738
"python/svix/models/operational_webhook_endpoint_headers_in.py",
@@ -1956,6 +1972,8 @@
19561972
"ruby/lib/svix/models/message_endpoint_out.rb",
19571973
"ruby/lib/svix/models/message_in.rb",
19581974
"ruby/lib/svix/models/message_out.rb",
1975+
"ruby/lib/svix/models/message_precheck_in.rb",
1976+
"ruby/lib/svix/models/message_precheck_out.rb",
19591977
"ruby/lib/svix/models/message_status.rb",
19601978
"ruby/lib/svix/models/message_status_text.rb",
19611979
"ruby/lib/svix/models/operational_webhook_endpoint_headers_in.rb",
@@ -2194,6 +2212,8 @@
21942212
"rust/src/models/message_endpoint_out.rs",
21952213
"rust/src/models/message_in.rs",
21962214
"rust/src/models/message_out.rs",
2215+
"rust/src/models/message_precheck_in.rs",
2216+
"rust/src/models/message_precheck_out.rs",
21972217
"rust/src/models/message_status.rs",
21982218
"rust/src/models/message_status_text.rs",
21992219
"rust/src/models/operational_webhook_endpoint_headers_in.rs",

codegen/lib-openapi.json

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8251,6 +8251,7 @@
82518251
"MessagePrecheckOut": {
82528252
"properties": {
82538253
"active": {
8254+
"description": "Whether there are any active endpoint that would get sent such a message.",
82548255
"type": "boolean"
82558256
}
82568257
},
@@ -21588,7 +21589,7 @@
2158821589
},
2158921590
"/api/v1/app/{app_id}/msg/precheck/active": {
2159021591
"post": {
21591-
"description": "A pre-check call for `create.message` that checks whether endpoints are actively listening to\nthis message.",
21592+
"description": "A pre-check call for `message.create` that checks whether any active endpoints are\nlistening to this message.\n\nNote: most people shouldn't be using this API. Svix doesn't bill you for\nmessages not actually sent, so using this API doesn't save money.\nIf unsure, please ask Svix support before using this API.",
2159221593
"operationId": "v1.message.precheck",
2159321594
"parameters": [
2159421595
{
@@ -21717,7 +21718,73 @@
2171721718
"tags": [
2171821719
"Message"
2171921720
],
21720-
"x-internal": true
21721+
"x-codeSamples": [
21722+
{
21723+
"label": "JavaScript",
21724+
"lang": "JavaScript",
21725+
"source": "const response = await svix.message.precheck(\"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\", {\n eventType: \"user.signup\",\n channels: [\"project_123\", \"group_2\"],\n});"
21726+
},
21727+
{
21728+
"label": "TypeScript",
21729+
"lang": "TypeScript",
21730+
"source": "const response = await svix.message.precheck(\"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\", {\n eventType: \"user.signup\",\n channels: [\"project_123\", \"group_2\"],\n});"
21731+
},
21732+
{
21733+
"label": "Python",
21734+
"lang": "Python",
21735+
"source": "response = svix.message.precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n MessagePrecheckIn(\n event_type=\"user.signup\",\n channels=[\n \"project_123\",\n \"group_2\",\n ],\n ),\n)"
21736+
},
21737+
{
21738+
"label": "Python (Async)",
21739+
"lang": "Python (Async)",
21740+
"source": "response = await svix.message.precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n MessagePrecheckIn(\n event_type=\"user.signup\",\n channels=[\n \"project_123\",\n \"group_2\",\n ],\n ),\n)"
21741+
},
21742+
{
21743+
"label": "Go",
21744+
"lang": "Go",
21745+
"source": "response, err := svix.Message.Precheck(\n\tctx,\n\t\"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n\tMessagePrecheckIn{EventType: \"user.signup\", Channels: []string{\"project_123\", \"group_2\"}},\n\tnil,\n)"
21746+
},
21747+
{
21748+
"label": "Kotlin",
21749+
"lang": "Kotlin",
21750+
"source": "val response =\n svix.message.precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n MessagePrecheckIn(eventType = \"user.signup\", channels = setOf(\"project_123\", \"group_2\")),\n )"
21751+
},
21752+
{
21753+
"label": "Java",
21754+
"lang": "Java",
21755+
"source": "var response = svix.getMessage()\n .precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n new MessagePrecheckIn()\n .eventType(\"user.signup\")\n .channels(Set.of(\"project_123\", \"group_2\")));"
21756+
},
21757+
{
21758+
"label": "Ruby",
21759+
"lang": "Ruby",
21760+
"source": "response = svix\n .message\n .precheck(\"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\", {eventType: \"user.signup\", channels: [\"project_123\", \"group_2\"]})"
21761+
},
21762+
{
21763+
"label": "Rust",
21764+
"lang": "Rust",
21765+
"source": "let response = svix\n .message()\n .precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\".to_string(),\n MessagePrecheckIn {\n event_type: \"user.signup\".to_string(),\n channels: Some(vec![\"project_123\".to_string(), \"group_2\".to_string()]),\n },\n None,\n )\n .await?;"
21766+
},
21767+
{
21768+
"label": "C#",
21769+
"lang": "C#",
21770+
"source": "var response = svix.Message.Precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n new MessagePrecheckIn { EventType = \"user.signup\", Channels = [\"project_123\", \"group_2\"] }\n);"
21771+
},
21772+
{
21773+
"label": "PHP",
21774+
"lang": "PHP",
21775+
"source": "$response = $svix->message->precheck(\n \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\",\n MessagePrecheckIn::create(\n eventType: \"user.signup\"\n )\n ->withChannels([\"project_123\",\"group_2\"])\n);"
21776+
},
21777+
{
21778+
"label": "CLI",
21779+
"lang": "CLI",
21780+
"source": "svix message precheck \"app_1srOrx2ZWZBpBUvZwXKQmoEYga2\" '{\n \"channels\": [\n \"project_123\",\n \"group_2\"\n ],\n \"eventType\": \"user.signup\"\n }'"
21781+
},
21782+
{
21783+
"label": "cURL",
21784+
"lang": "cURL",
21785+
"source": "curl -X 'POST' \\\n 'https://api.eu.svix.com/api/v1/app/app_1srOrx2ZWZBpBUvZwXKQmoEYga2/msg/precheck/active' \\\n -H 'Authorization: Bearer AUTH_TOKEN' \\\n -H 'Accept: application/json' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"channels\": [\n \"project_123\",\n \"group_2\"\n ],\n \"eventType\": \"user.signup\"\n }'"
21786+
}
21787+
]
2172121788
}
2172221789
},
2172321790
"/api/v1/app/{app_id}/msg/{msg_id}": {

csharp/Svix/Message.cs

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ public class MessageExpungeAllContentsOptions : SvixOptionsBase
6666
}
6767
}
6868

69+
public class MessagePrecheckOptions : SvixOptionsBase
70+
{
71+
public string? IdempotencyKey { get; set; }
72+
73+
public new Dictionary<string, string> HeaderParams()
74+
{
75+
return SerializeParams(
76+
new Dictionary<string, object?> { { "idempotency-key", IdempotencyKey } }
77+
);
78+
}
79+
}
80+
6981
public class MessageGetOptions : SvixOptionsBase
7082
{
7183
public bool? WithContent { get; set; }
@@ -372,6 +384,80 @@ public ExpungeAllContentsOut ExpungeAllContents(
372384
}
373385
}
374386

387+
/// <summary>
388+
/// A pre-check call for `message.create` that checks whether any active endpoints are
389+
/// listening to this message.
390+
///
391+
/// Note: most people shouldn't be using this API. Svix doesn't bill you for
392+
/// messages not actually sent, so using this API doesn't save money.
393+
/// If unsure, please ask Svix support before using this API.
394+
/// </summary>
395+
public async Task<MessagePrecheckOut> PrecheckAsync(
396+
string appId,
397+
MessagePrecheckIn messagePrecheckIn,
398+
MessagePrecheckOptions? options = null,
399+
CancellationToken cancellationToken = default
400+
)
401+
{
402+
messagePrecheckIn =
403+
messagePrecheckIn ?? throw new ArgumentNullException(nameof(messagePrecheckIn));
404+
try
405+
{
406+
var response = await _client.SvixHttpClient.SendRequestAsync<MessagePrecheckOut>(
407+
method: HttpMethod.Post,
408+
path: "/api/v1/app/{app_id}/msg/precheck/active",
409+
pathParams: new Dictionary<string, string> { { "app_id", appId } },
410+
queryParams: options?.QueryParams(),
411+
headerParams: options?.HeaderParams(),
412+
content: messagePrecheckIn,
413+
cancellationToken: cancellationToken
414+
);
415+
return response.Data;
416+
}
417+
catch (ApiException e)
418+
{
419+
_client.Logger?.LogError(e, $"{nameof(PrecheckAsync)} failed");
420+
421+
throw;
422+
}
423+
}
424+
425+
/// <summary>
426+
/// A pre-check call for `message.create` that checks whether any active endpoints are
427+
/// listening to this message.
428+
///
429+
/// Note: most people shouldn't be using this API. Svix doesn't bill you for
430+
/// messages not actually sent, so using this API doesn't save money.
431+
/// If unsure, please ask Svix support before using this API.
432+
/// </summary>
433+
public MessagePrecheckOut Precheck(
434+
string appId,
435+
MessagePrecheckIn messagePrecheckIn,
436+
MessagePrecheckOptions? options = null
437+
)
438+
{
439+
messagePrecheckIn =
440+
messagePrecheckIn ?? throw new ArgumentNullException(nameof(messagePrecheckIn));
441+
try
442+
{
443+
var response = _client.SvixHttpClient.SendRequest<MessagePrecheckOut>(
444+
method: HttpMethod.Post,
445+
path: "/api/v1/app/{app_id}/msg/precheck/active",
446+
pathParams: new Dictionary<string, string> { { "app_id", appId } },
447+
queryParams: options?.QueryParams(),
448+
headerParams: options?.HeaderParams(),
449+
content: messagePrecheckIn
450+
);
451+
return response.Data;
452+
}
453+
catch (ApiException e)
454+
{
455+
_client.Logger?.LogError(e, $"{nameof(Precheck)} failed");
456+
457+
throw;
458+
}
459+
}
460+
375461
/// <summary>
376462
/// Get a message by its ID or eventID.
377463
/// </summary>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// this file is @generated
2+
using System.Text;
3+
using Newtonsoft.Json;
4+
5+
namespace Svix.Models
6+
{
7+
public class MessagePrecheckIn
8+
{
9+
[JsonProperty("channels")]
10+
public List<string>? Channels { get; set; } = null;
11+
12+
[JsonProperty("eventType", Required = Required.Always)]
13+
public required string EventType { get; set; }
14+
15+
public override string ToString()
16+
{
17+
StringBuilder sb = new StringBuilder();
18+
19+
sb.Append("class MessagePrecheckIn {\n");
20+
sb.Append(" Channels: ").Append(Channels).Append('\n');
21+
sb.Append(" EventType: ").Append(EventType).Append('\n');
22+
sb.Append("}\n");
23+
return sb.ToString();
24+
}
25+
}
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// this file is @generated
2+
using System.Text;
3+
using Newtonsoft.Json;
4+
5+
namespace Svix.Models
6+
{
7+
public class MessagePrecheckOut
8+
{
9+
[JsonProperty("active", Required = Required.Always)]
10+
public required bool Active { get; set; }
11+
12+
public override string ToString()
13+
{
14+
StringBuilder sb = new StringBuilder();
15+
16+
sb.Append("class MessagePrecheckOut {\n");
17+
sb.Append(" Active: ").Append(Active).Append('\n');
18+
sb.Append("}\n");
19+
return sb.ToString();
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)