Publish Object

Use PublishObject to create or update a single Object, using object.id to control the upsert behavior:

  • An existing object.id updates that Object.

  • A new object.id creates a new Object with that ID.

  • An omitted object.id lets the service assign a new random ID.

package main

import (
	"context"
	"log"
	"time"

	"connectrpc.com/connect"
	"google.golang.org/protobuf/types/known/timestamppb"

	wdmsdk "github.com/raft-tech/raft-wdm-sdk-go"
	pb "github.com/raft-tech/raft-wdm-sdk-go/gen/raft/wdm/v1"
	svc "github.com/raft-tech/raft-wdm-sdk-go/gen/raft/wdm/v1/service"
)

func main() {
	cfg, err := wdmsdk.LoadConfig()
	if err != nil {
		log.Fatal(err)
	}

	client, err := wdmsdk.NewFromConfig(cfg)
	if err != nil {
		log.Fatal(err)
	}

	updatedAt := time.Now().UTC()
	_, err = client.ObjectService().PublishObject(context.Background(), connect.NewRequest(&svc.PublishObjectRequest{
		Object: &pb.Object{
			Id:     "link16-track-47210",
			Name:   "TRACK-47210",
			Status: pb.ObjectStatus_OBJECT_STATUS_ACTIVE,
			Ttl:    timestamppb.New(updatedAt.Add(5 * time.Minute)),
			Provenance: &pb.ProvenanceRecord{
				Name:      "aegis-radar-07",
				UpdatedAt: timestamppb.New(updatedAt),
			},
		},
	}))
	if err != nil {
		log.Fatal(err)
	}
}
import com.google.protobuf.Timestamp;
import com.raft.wdm.Wdm;
import com.raft.wdm.raft.wdm.v1.Object;
import com.raft.wdm.raft.wdm.v1.ObjectStatus;
import com.raft.wdm.raft.wdm.v1.ProvenanceRecord;
import com.raft.wdm.raft.wdm.v1.service.PublishObjectRequest;
import com.raft.wdm.v1.WdmV1Client;
import java.time.Instant;

public final class PublishObjectExample {
  public static void main(String[] args) {
    var options = Wdm.toOptions(Wdm.loadConfig(null, null));
    var updatedAt = Instant.now();

    try (var client = WdmV1Client.create(options)) {
      var req = PublishObjectRequest.newBuilder()
          .setObject(Object.newBuilder()
              .setId("link16-track-47210")
              .setName("TRACK-47210")
              .setStatus(ObjectStatus.OBJECT_STATUS_ACTIVE)
              .setTtl(timestamp(updatedAt.plusSeconds(300)))
              .setProvenance(ProvenanceRecord.newBuilder()
                  .setName("aegis-radar-07")
                  .setUpdatedAt(timestamp(updatedAt))))
          .build();

      client.getObjectServiceBlocking()
          .publishObjectBlocking(req)
          .execute();
    }
  }

  private static Timestamp timestamp(Instant instant) {
    return Timestamp.newBuilder()
        .setSeconds(instant.getEpochSecond())
        .setNanos(instant.getNano())
        .build();
  }
}
import asyncio
from datetime import datetime, timedelta, timezone

from google.protobuf.timestamp_pb2 import Timestamp
from raft.wdm.v1 import object_pb2
from raft.wdm.v1 import common_pb2
from raft.wdm.v1.service import object_service_pb2

import raft_wdm_sdk


def timestamp(dt: datetime) -> Timestamp:
    value = Timestamp()
    value.FromDatetime(dt)
    return value


async def main() -> None:
    updated_at = datetime.now(timezone.utc)

    async with raft_wdm_sdk.Client.from_config(raft_wdm_sdk.load_config()) as client:
        await client.object_service.publish_object(
            object_service_pb2.PublishObjectRequest(
                object=object_pb2.Object(
                    id="link16-track-47210",
                    name="TRACK-47210",
                    status=object_pb2.OBJECT_STATUS_ACTIVE,
                    ttl=timestamp(updated_at + timedelta(minutes=5)),
                    provenance=common_pb2.ProvenanceRecord(
                        name="aegis-radar-07",
                        updated_at=timestamp(updated_at),
                    ),
                ),
            ),
        )


asyncio.run(main())
import { create } from "@bufbuild/protobuf";
import { timestampFromDate } from "@bufbuild/protobuf/wkt";
import { createClient, fromNodeConfig, loadConfig } from "@raft-tech/raft-wdm-sdk-typescript";
import { ObjectStatus } from "@raft-tech/raft-wdm-sdk-typescript/gen/raft/wdm/v1/object_pb.js";
import { PublishObjectRequestSchema } from "@raft-tech/raft-wdm-sdk-typescript/gen/raft/wdm/v1/service/object_service_pb.js";

const client = createClient(...fromNodeConfig(loadConfig()));

const updatedAt = new Date();

await client.objectService.publishObject(
  create(PublishObjectRequestSchema, {
    object: {
      id: "link16-track-47210",
      name: "TRACK-47210",
      status: ObjectStatus.OBJECT_STATUS_ACTIVE,
      ttl: timestampFromDate(new Date(updatedAt.getTime() + 5 * 60 * 1000)),
      provenance: {
        name: "aegis-radar-07",
        updatedAt: timestampFromDate(updatedAt),
      },
    },
  }),
);
curl -X POST "${RDP_SERVER_URL}/api/v1/wdm/objects" \
  -H "X-API-KEY: ${RDP_API_KEY}" \
  -H "Content-Type: application/json" \
  --json @- <<JSON
{
  "object": {
    "id": "link16-track-47210",
    "name": "TRACK-47210",
    "status": "OBJECT_STATUS_ACTIVE",
    "ttl": "2026-05-27T21:36:04Z",
    "provenance": {
      "name": "aegis-radar-07",
      "updatedAt": "2026-05-27T21:31:04Z"
    }
  }
}
JSON