// Copyright 2024 Salesforce, Inc. All rights reserved.
mod generated;
use anyhow::Result;
use crate::generated::config::Config;
use pdk::authentication::{Authentication, AuthenticationHandler};
use pdk::logger::info;
use pdk::hl::*;
use pdk::script::{Evaluator, HandlerAttributesBinding, Value};
async fn request_filter(
state: RequestState,
stream: StreamProperties,
auth: Authentication,
mut evaluator: Evaluator<'_>,
) {
evaluator.bind_vars("myVar", "myVal");
evaluator.bind_authentication(&auth.authentication());
let state = state.into_headers_state().await;
evaluator.bind_attributes(&HandlerAttributesBinding::new(state.handler(), &stream));
let state = state.into_body_state().await;
evaluator.bind_payload(&state);
if let Ok(value) = evaluator.eval() {
match value {
Value::Null => info!("value was null!"),
Value::Bool(val) => info!("value was Bool: {val}"),
Value::Number(val) => info!("value was Number: {val}"),
Value::String(val) => info!("value was String: {val}"),
Value::Array(val) => info!("value was Array: {val:?}"),
Value::Object(val) => info!("value was Object: {val:?}"),
}
}
}
#[entrypoint]
async fn configure(launcher: Launcher, Configuration(bytes): Configuration) -> Result<()> {
let config: Config = serde_json::from_slice(&bytes)?;
launcher
.launch(on_request(|request, stream, auth| {
request_filter(request, stream, auth, config.token_extractor.evaluator())
}))
.await?;
Ok(())
}