Java SDK

The norq Java package provides a client for sending and linting notification templates from Java applications.

Install

Maven

<dependency>
  <groupId>com.suprsend</groupId>
  <artifactId>norq</artifactId>
  <version>0.1.0-alpha.1</version>
</dependency>

Gradle

implementation 'com.suprsend:norq:0.1.0-alpha.1'

Requires the norq binary to be installed and available in $PATH.

Quick start

import com.suprsend.Norq;
import com.suprsend.Types.*;
import java.util.Map;
 
public class Example {
    public static void main(String[] args) {
        Norq notif = new Norq();
 
        // Send
        SendMultiResult result = notif.send("transactional/order-shipped", new SendOpts()
            .to(new Recipient().email("gaurav@example.com"))
            .data(Map.of("user", Map.of("first_name", "Gaurav"))));
 
        for (SendResult r : result.getResults()) {
            System.out.printf("%s: success=%b%n", r.getChannel(), r.isSuccess());
        }
    }
}

Builder pattern

Norq notif = Norq.builder()
    .binaryPath("/usr/local/bin/norq")
    .cwd("/path/to/project")
    .recipientResolver(myResolver)
    .build();

API

send(notification, opts)

SendMultiResult result = notif.send("transactional/welcome", new SendOpts()
    .to(new Recipient().email("user@example.com"))
    .data(Map.of("user", Map.of("first_name", "Gaurav")))
    .channels(List.of("email"))
    .dryRun(false));

lint(notification)

List<LintResult> results = notif.lint(null);       // all
List<LintResult> results = notif.lint("transactional/welcome");  // one
 
for (LintResult result : results) {
    for (LintDiagnostic diag : result.getDiagnostics()) {
        System.out.printf("%s: %s [%s]%n",
            diag.getSeverity(), diag.getMessage(), diag.getRule());
    }
}

RecipientResolver

public class MyResolver implements RecipientResolver {
    private final UserRepository repo;
 
    public MyResolver(UserRepository repo) {
        this.repo = repo;
    }
 
    @Override
    public Recipient resolve(String userId) {
        User user = repo.findById(userId);
        return new Recipient()
            .email(user.getEmail())
            .phone(user.getPhone());
    }
}
 
Norq notif = Norq.builder()
    .recipientResolver(new MyResolver(userRepo))
    .build();

Error handling

import com.suprsend.NorqException;
 
try {
    notif.send("transactional/welcome", opts);
} catch (NorqException e) {
    System.err.println("Norq error: " + e.getMessage());
}

Codegen

norq codegen --lang java --out src/main/java/com/example/NorqTypes.java

Generates typed Java classes for each notification's data shape.