Server-side realtime SSE on per-app pub/sub topics, plus the three
v1.1.5 follow-ups and the version bumps.
Realtime:
- topics registry (0021) + admin endpoints + Capability::AppTopicManage
(-> app:admin; no new scope).
- GET /realtime/topics/{topic} SSE endpoint (orchestrator-core data
plane): Host -> app, RealtimeAuthority gate (404 missing/internal,
401 bad/absent token), broadcast::Receiver stream + heartbeat.
- RealtimeBroadcaster / RealtimeEvent / RealtimeAuthority traits
(picloud-shared); InProcessBroadcaster + GC (orchestrator-core);
DB-backed RealtimeAuthorityImpl (manager-core). Publish path fans out
to in-process subscribers after the durable outbox commit (best-effort,
panic-isolated).
- HMAC subscriber tokens (subscriber_token.rs) + app_secrets table (0022)
+ pubsub::subscriber_token SDK (schema 1.6 -> 1.7). TTL clamp + env
overrides.
- Dashboard Topics tab (register/list/edit/delete, prominent external
badge, flip confirmation).
v1.1.5 follow-ups:
- Empty blobs accepted (NewFile/FileUpdate::validate) + round-trip test.
- Orphan *.tmp.* sweeper (spawn_files_orphan_sweep).
- Dispatcher e2e tests, one per trigger kind (DATABASE_URL-gated).
Versions: workspace 1.1.6, SDK 1.7, dashboard 0.12.0. Schema-snapshot
golden re-blessed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
74 lines
3.7 KiB
Rust
74 lines
3.7 KiB
Rust
//! Version constants for PiCloud's compatibility surfaces.
|
|
//!
|
|
//! See [`docs/versioning.md`](../../../../docs/versioning.md) for the
|
|
//! full scheme. The product version is sourced from the workspace
|
|
//! package version; the four surface versions live in this module
|
|
//! and are bumped under the rules in that doc.
|
|
|
|
/// Product version (e.g. `"0.2.0"`). Sourced from this crate's
|
|
/// `Cargo.toml` so the workspace-inherited package version is the
|
|
/// single point of update.
|
|
pub const PRODUCT_VERSION: &str = env!("CARGO_PKG_VERSION");
|
|
|
|
/// Rhai SDK version, in `"major.minor"` form. Scripts read this from
|
|
/// `ctx.sdk_version` for feature detection. Bump rules:
|
|
/// * patch (`1.x.0`): doc-only, no script-observable change
|
|
/// * minor (`1.0 → 1.1`): added functions / fields; existing
|
|
/// scripts must still run unchanged
|
|
/// * major (`1 → 2`): removed, renamed, retyped, restricted
|
|
///
|
|
/// 1.1 additions: `ctx.request.params`, `ctx.request.query`,
|
|
/// `ctx.request.rest`.
|
|
///
|
|
/// 1.2 additions (v1.1.1): `kv::collection(name).{get,set,has,delete,list}`,
|
|
/// `dead_letters::{replay,resolve}`, `ctx.event` for triggered handlers.
|
|
///
|
|
/// 1.3 additions (v1.1.2):
|
|
/// `docs::collection(name).{create,get,find,find_one,update,delete,list}`
|
|
/// with the v1.1.2 query DSL subset; `ctx.event.docs` for docs-trigger
|
|
/// handlers (carries `prev_data` change-data-capture for update/delete).
|
|
///
|
|
/// 1.4 additions (v1.1.3): `import "<name>" as <alias>;` for scripts
|
|
/// whose corresponding module (`kind = 'module'`) lives in the same
|
|
/// app. Cross-app imports are unreachable (the `name` argument carries
|
|
/// no `app_id`). Modules expose `fn`/`const` declarations only;
|
|
/// top-level statements are rejected at create-time.
|
|
///
|
|
/// 1.5 additions (v1.1.4): `http::{get,post,put,patch,delete,head,
|
|
/// post_form,request}` for outbound HTTP from scripts (guarded by an
|
|
/// SSRF deny-list on the resolved IP); `ctx.event.cron` for cron-trigger
|
|
/// handlers (carries `schedule`, `timezone`, `scheduled_at`, `fired_at`).
|
|
/// The `Services` bundle gains `http: Arc<dyn HttpService>`.
|
|
///
|
|
/// 1.6 additions (v1.1.5):
|
|
/// `files::collection(name).{create,head,get,update,delete,list}` —
|
|
/// filesystem-backed blob storage (blobs in/out; metadata maps;
|
|
/// checksum-verified reads) with `ctx.event.files` for files-trigger
|
|
/// handlers (metadata only, never the bytes); and
|
|
/// `pubsub::publish_durable(topic, message)` — durable pub/sub with
|
|
/// publish-time fan-out and `ctx.event.pubsub` for pubsub-trigger
|
|
/// handlers. The `Services` bundle gains `files: Arc<dyn FilesService>`
|
|
/// and `pubsub: Arc<dyn PubsubService>`.
|
|
///
|
|
/// 1.7 additions (v1.1.6): `pubsub::subscriber_token(topics, ttl)` —
|
|
/// mints an HMAC-signed realtime subscriber token for externally-
|
|
/// subscribable topics (requires an authenticated principal). This is
|
|
/// the only new script-visible surface; the rest of the release is
|
|
/// server-side (the SSE `/realtime/topics/{topic}` endpoint; the
|
|
/// `RealtimeBroadcaster` / `RealtimeEvent` / `RealtimeAuthority` traits;
|
|
/// the `topics` registry + admin endpoints; the `@picloud/client`
|
|
/// TypeScript package).
|
|
pub const SDK_VERSION: &str = "1.7";
|
|
|
|
/// HTTP API major version. Appears in URL paths as `/api/v{N}/...`.
|
|
/// Bump (new integer + new URL prefix) when the request/response
|
|
/// shape, status-code semantics, or auth model changes. The previous
|
|
/// major is kept live for at least one product-minor deprecation
|
|
/// window.
|
|
pub const API_VERSION: u32 = 1;
|
|
|
|
/// Wire-protocol version between manager / orchestrator / executor
|
|
/// nodes in cluster mode. Negotiated via the `X-PiCloud-Wire` header
|
|
/// on inter-service requests. Reserved at `1`; cluster mode is v1.3+.
|
|
pub const WIRE_VERSION: u32 = 1;
|