Merge pull request #13820 from brave/bh-skus-sdk-submit-receipt

SKUs SDK Changes to Support Receipt Submission
This commit is contained in:
husobee
2022-08-31 08:28:18 -04:00
committed by GitHub
17 changed files with 490 additions and 271 deletions
+30 -9
View File
@@ -2,6 +2,12 @@ use std::error::Error;
use crate::ffi;
impl From<skus::errors::InternalError> for ffi::SkusResult {
fn from(e: skus::errors::InternalError) -> Self {
ffi::SkusResult::from(&e)
}
}
impl From<&skus::errors::InternalError> for ffi::SkusResult {
fn from(e: &skus::errors::InternalError) -> Self {
match e {
@@ -57,15 +63,30 @@ impl From<ffi::SkusResult> for skus::errors::InternalError {
fn from(e: ffi::SkusResult) -> Self {
match e {
ffi::SkusResult::RequestFailed => skus::errors::InternalError::RequestFailed,
ffi::SkusResult::InternalServer => skus::errors::InternalError::InternalServer(
skus::http::http::status::StatusCode::from_u16(599).expect("100 < 599 < 1000"),
),
ffi::SkusResult::BadRequest => skus::errors::InternalError::BadRequest(
skus::http::http::StatusCode::from_u16(499).expect("100 < 499 < 1000"),
),
ffi::SkusResult::UnhandledStatus => skus::errors::InternalError::UnhandledStatus(
skus::http::http::StatusCode::from_u16(699).expect("100 < 699 < 1000"),
),
ffi::SkusResult::InternalServer => {
skus::errors::InternalError::InternalServer(skus::models::APIError {
code: 599,
message: "internal server error".to_string(),
error_code: "unknown".to_string(),
data: serde_json::Value::Null,
})
}
ffi::SkusResult::BadRequest => {
skus::errors::InternalError::BadRequest(skus::models::APIError {
code: 499,
message: "bad request error".to_string(),
error_code: "unknown".to_string(),
data: serde_json::Value::Null,
})
}
ffi::SkusResult::UnhandledStatus => {
skus::errors::InternalError::UnhandledStatus(skus::models::APIError {
code: 699,
message: "unhandled error".to_string(),
error_code: "unknown".to_string(),
data: serde_json::Value::Null,
})
}
ffi::SkusResult::RetryLater => skus::errors::InternalError::RetryLater(None),
ffi::SkusResult::NotFound => skus::errors::InternalError::NotFound,
ffi::SkusResult::SerializationFailed => {
+65 -31
View File
@@ -149,6 +149,13 @@ mod ffi {
callback_state: UniquePtr<CredentialSummaryCallbackState>,
domain: String,
);
fn submit_receipt(
self: &CppSDK,
callback: SubmitReceiptCallback,
callback_state: UniquePtr<SubmitReceiptCallbackState>,
order_id: String,
receipt: String,
);
}
unsafe extern "C++" {
@@ -184,6 +191,8 @@ mod ffi {
type PrepareCredentialsPresentationCallback = crate::PrepareCredentialsPresentationCallback;
type CredentialSummaryCallbackState;
type CredentialSummaryCallback = crate::CredentialSummaryCallback;
type SubmitReceiptCallbackState;
type SubmitReceiptCallback = crate::SubmitReceiptCallback;
}
}
@@ -201,9 +210,7 @@ fn initialize_sdk(ctx: UniquePtr<ffi::SkusContext>, env: String) -> Box<CppSDK>
Err(_) => println!("tracing_subscriber - maybe already initialized"),
};
let env = env
.parse::<skus::Environment>()
.unwrap_or(skus::Environment::Local);
let env = env.parse::<skus::Environment>().unwrap_or(skus::Environment::Local);
let pool = LocalPool::new();
let spawner = pool.spawner();
@@ -212,10 +219,7 @@ fn initialize_sdk(ctx: UniquePtr<ffi::SkusContext>, env: String) -> Box<CppSDK>
is_shutdown: Rc::new(RefCell::new(false)),
pool: Rc::new(RefCell::new(pool)),
spawner: spawner.clone(),
ctx: Rc::new(RefCell::new(NativeClientContext {
environment: env.clone(),
ctx,
})),
ctx: Rc::new(RefCell::new(NativeClientContext { environment: env.clone(), ctx })),
},
env,
None,
@@ -251,12 +255,7 @@ impl CppSDK {
) {
let spawner = self.sdk.client.spawner.clone();
if spawner
.spawn_local(refresh_order_task(
self.sdk.clone(),
callback,
callback_state,
order_id,
))
.spawn_local(refresh_order_task(self.sdk.clone(), callback, callback_state, order_id))
.is_err()
{
debug!("pool is shutdown");
@@ -332,6 +331,30 @@ impl CppSDK {
self.sdk.client.try_run_until_stalled();
}
fn submit_receipt(
self: &CppSDK,
callback: SubmitReceiptCallback,
callback_state: UniquePtr<ffi::SubmitReceiptCallbackState>,
order_id: String,
receipt: String,
) {
let spawner = self.sdk.client.spawner.clone();
if spawner
.spawn_local(submit_receipt_task(
self.sdk.clone(),
callback,
callback_state,
order_id,
receipt,
))
.is_err()
{
debug!("pool is shutdown");
}
self.sdk.client.try_run_until_stalled();
}
}
#[repr(transparent)]
@@ -384,11 +407,7 @@ async fn fetch_order_credentials_task(
callback_state: UniquePtr<ffi::FetchOrderCredentialsCallbackState>,
order_id: String,
) {
match sdk
.fetch_order_credentials(&order_id)
.await
.map_err(|e| e.into())
{
match sdk.fetch_order_credentials(&order_id).await.map_err(|e| e.into()) {
Ok(_) => callback.0(callback_state.into_raw(), ffi::SkusResult::Ok),
Err(e) => callback.0(callback_state.into_raw(), e),
}
@@ -415,16 +434,10 @@ async fn prepare_credentials_presentation_task(
domain: String,
path: String,
) {
match sdk
.prepare_credentials_presentation(&domain, &path)
.await
.map_err(|e| e.into())
{
Ok(Some(presentation)) => callback.0(
callback_state.into_raw(),
ffi::SkusResult::Ok,
&presentation,
),
match sdk.prepare_credentials_presentation(&domain, &path).await.map_err(|e| e.into()) {
Ok(Some(presentation)) => {
callback.0(callback_state.into_raw(), ffi::SkusResult::Ok, &presentation)
}
Ok(None) => callback.0(callback_state.into_raw(), ffi::SkusResult::Ok, ""),
Err(e) => callback.0(callback_state.into_raw(), e, ""),
}
@@ -454,9 +467,7 @@ async fn credential_summary_task(
.matching_credential_summary(&domain)
.await
.and_then(|summary| {
summary
.map(|summary| serde_json::to_string(&summary).map_err(|e| e.into()))
.transpose()
summary.map(|summary| serde_json::to_string(&summary).map_err(|e| e.into())).transpose()
})
.map_err(|e| e.into())
{
@@ -465,3 +476,26 @@ async fn credential_summary_task(
Err(e) => callback.0(callback_state.into_raw(), e, ""),
}
}
#[repr(transparent)]
pub struct SubmitReceiptCallback(
pub extern "C" fn(callback_state: *mut ffi::SubmitReceiptCallbackState, result: ffi::SkusResult),
);
unsafe impl ExternType for SubmitReceiptCallback {
type Id = type_id!("skus::SubmitReceiptCallback");
type Kind = cxx::kind::Trivial;
}
async fn submit_receipt_task(
sdk: Rc<skus::sdk::SDK<NativeClient>>,
callback: SubmitReceiptCallback,
callback_state: UniquePtr<ffi::SubmitReceiptCallbackState>,
order_id: String,
receipt: String,
) {
match sdk.submit_receipt(&order_id, &receipt).await.map_err(|e| e.into()) {
Ok(_) => callback.0(callback_state.into_raw(), ffi::SkusResult::Ok),
Err(e) => callback.0(callback_state.into_raw(), e),
}
}
+9 -1
View File
@@ -53,6 +53,13 @@ class RefreshOrderCallbackState {
base::OnceCallback<void(const std::string&)> cb;
};
class SubmitReceiptCallbackState {
public:
SubmitReceiptCallbackState();
~SubmitReceiptCallbackState();
base::OnceCallback<void(const std::string&)> cb;
};
class SkusUrlLoader {
public:
virtual ~SkusUrlLoader() = default;
@@ -76,7 +83,6 @@ class SkusContext {
using RefreshOrderCallback = void (*)(RefreshOrderCallbackState* callback_state,
SkusResult result,
rust::cxxbridge1::Str order);
using FetchOrderCredentialsCallback =
void (*)(FetchOrderCredentialsCallbackState* callback_state,
SkusResult result);
@@ -88,6 +94,8 @@ using CredentialSummaryCallback =
void (*)(CredentialSummaryCallbackState* callback_state,
SkusResult result,
rust::cxxbridge1::Str summary);
using SubmitReceiptCallback =
void (*)(SubmitReceiptCallbackState* callback_state, SkusResult result);
void shim_logMessage(rust::cxxbridge1::Str file,
uint32_t line,
+34 -15
View File
@@ -1,17 +1,22 @@
use core::fmt;
use core::fmt::Display;
use http::StatusCode;
use std::error::Error;
use std::time::Duration;
use crate::models::APIError;
use serde_json::Value;
/// Internal errors. Most application-level developers will likely not
/// need to pay any attention to these.
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum InternalError {
RequestFailed,
InternalServer(http::StatusCode),
BadRequest(http::StatusCode),
UnhandledStatus(http::StatusCode),
InternalServer(APIError),
BadRequest(APIError),
UnhandledStatus(APIError),
RetryLater(Option<Duration>),
NotFound,
SerializationFailed,
@@ -36,28 +41,36 @@ impl Display for InternalError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
InternalError::RequestFailed => write!(f, "HTTP request failed"),
InternalError::InternalServer(status) => {
InternalError::InternalServer(app_err) => {
let code: StatusCode =
StatusCode::from_u16(app_err.code).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR);
write!(
f,
"Server internal error: {} {}",
status.as_str(),
status.canonical_reason().unwrap_or("unknown")
code.as_str(),
code.canonical_reason().unwrap_or("unknown")
)
}
InternalError::BadRequest(status) => {
InternalError::BadRequest(app_err) => {
let code: StatusCode =
StatusCode::from_u16(app_err.code).unwrap_or(StatusCode::BAD_REQUEST);
write!(
f,
"Bad client request: {} {}",
status.as_str(),
status.canonical_reason().unwrap_or("unknown")
"Bad client request: {} {} - {} {}",
code.as_str(),
code.canonical_reason().unwrap_or("unknown"),
app_err.error_code,
app_err.data.get("validationErrors").unwrap_or(&Value::Null)
)
}
InternalError::UnhandledStatus(status) => {
InternalError::UnhandledStatus(app_err) => {
let code: StatusCode =
StatusCode::from_u16(app_err.code).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR);
write!(
f,
"Unhandled request status: {} {}",
status.as_str(),
status.canonical_reason().unwrap_or("unknown")
code.as_str(),
code.canonical_reason().unwrap_or("unknown")
)
}
InternalError::RetryLater(after) => write!(
@@ -108,13 +121,19 @@ impl Display for InternalError {
impl Error for InternalError {}
impl From<(InternalError, usize)> for InternalError {
fn from((e, _attempt): (InternalError, usize)) -> Self {
e
}
}
impl From<serde_json::Error> for InternalError {
fn from(_: serde_json::Error) -> Self {
InternalError::SerializationFailed
}
}
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SkusError(pub(crate) InternalError);
impl Display for SkusError {
+16 -6
View File
@@ -11,21 +11,32 @@ pub use http;
use http::{Request, Response};
use crate::errors::*;
use crate::models::APIError;
use crate::sdk::SDK;
static BASE_DELAY_MS: u64 = 1000;
static MAX_DELAY_MS: u64 = 10000;
/// Default mapping of server response codes to be used after explicitly handling known response codes
impl<T> From<http::Response<T>> for InternalError {
fn from(resp: http::Response<T>) -> Self {
impl From<http::Response<Vec<u8>>> for InternalError {
fn from(resp: http::Response<Vec<u8>>) -> Self {
event!(Level::DEBUG, "coming from response to internal error");
let body = resp.body();
let app_err: APIError = serde_json::from_slice(&body).unwrap_or(APIError {
code: 0,
message: "unknown".to_string(),
error_code: "".to_string(),
data: Value::Null,
});
match resp.status() {
http::StatusCode::TOO_MANY_REQUESTS => {
InternalError::RetryLater(delay_from_response(&resp))
}
status if status.is_client_error() => InternalError::BadRequest(status),
status if status.is_server_error() => InternalError::InternalServer(status),
status => InternalError::UnhandledStatus(status),
status if status.is_client_error() => InternalError::BadRequest(app_err),
status if status.is_server_error() => InternalError::InternalServer(app_err),
_ => InternalError::UnhandledStatus(app_err),
}
}
}
@@ -172,7 +183,6 @@ impl<U> SDK<U> {
resp.body = %to_string_pretty(&v).unwrap(),
"recieved response",
);
Ok(Response::from_parts(parts, body))
}
}
@@ -4,6 +4,7 @@ use std::str::FromStr;
use challenge_bypass_ristretto::voprf::*;
use chrono::prelude::*;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::errors::*;
@@ -145,6 +146,12 @@ pub struct Order {
pub last_paid_at: Option<NaiveDateTime>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SubmitReceipt {
pub external_id: String,
pub vendor: String,
}
impl Order {
pub fn location_matches(&self, environment: &Environment, domain: &str) -> bool {
if *environment != Environment::Local && *environment != Environment::Testing {
@@ -192,3 +199,12 @@ pub struct TimeLimitedCredentials {
pub item_id: String,
pub creds: Vec<TimeLimitedCredential>,
}
#[derive(Deserialize, Eq, Clone, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub struct APIError {
pub code: u16, // the response status code
pub message: String, // the cause of the error
pub error_code: String, // the application error code
pub data: Value, // contains details about the errors
}
@@ -7,6 +7,7 @@ use chrono::NaiveDate;
use futures_retry::FutureRetry;
use rand::rngs::OsRng;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use sha2::Sha512;
use tracing::instrument;
@@ -101,12 +102,20 @@ where
))
.body(body)
.unwrap();
let resp = self.fetch(req).await?;
let app_err: APIError =
serde_json::from_slice(&resp.body()).unwrap_or(APIError {
code: 0,
message: "unknown".to_string(),
error_code: "".to_string(),
data: Value::Null,
});
match resp.status() {
http::StatusCode::OK => Ok(()),
http::StatusCode::CONFLICT => {
Err(InternalError::BadRequest(http::StatusCode::CONFLICT))
Err(InternalError::BadRequest(app_err))
}
http::StatusCode::NOT_FOUND => Err(InternalError::NotFound),
_ => Err(resp.into()),
@@ -3,7 +3,8 @@ use core::convert::{TryFrom, TryInto};
use chrono::{DateTime, Utc};
use futures_retry::FutureRetry;
use serde::{Deserialize, Serialize};
use tracing::instrument;
use std::str;
use tracing::{event, instrument, Level};
#[cfg(feature = "e2e_test")]
use serde_json::{json, to_vec};
@@ -206,8 +207,43 @@ where
Ok(order)
}
#[instrument]
// submit_receipt allows for order proof of payment
pub async fn submit_receipt(&self, order_id: &str, receipt: &str) -> Result<(), InternalError> {
event!(Level::DEBUG, order_id = order_id, "submit_receipt called");
let request_with_retries = FutureRetry::new(
|| async {
let mut builder = http::Request::builder();
builder.method("POST");
builder.uri(format!("{}/v1/orders/{}/submit-receipt", self.base_url, order_id));
let receipt_bytes = receipt.as_bytes().to_vec();
let req =
builder.body(receipt_bytes).or(Err(InternalError::SerializationFailed))?;
let resp = self.fetch(req).await?;
event!(
Level::DEBUG,
response = str::from_utf8(resp.body()).unwrap_or("<invalid body>"),
"submit_receipt called"
);
match resp.status() {
http::StatusCode::OK => Ok(resp),
http::StatusCode::NOT_FOUND => Err(InternalError::NotFound),
_ => Err(resp.into()),
}
},
HttpHandler::new(3, "Submit order receipt", &self.client),
);
request_with_retries.await?;
Ok(())
}
#[instrument]
pub async fn refresh_order(&self, order_id: &str) -> Result<Order, SkusError> {
event!(Level::DEBUG, order_id = order_id, "refresh_order called",);
let order = self.fetch_order(order_id).await?;
self.client.upsert_order(&order).await?;
Ok(order)
+182 -141
View File
@@ -2,6 +2,15 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "android_system_properties"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e"
dependencies = [
"libc",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
@@ -13,9 +22,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.52"
version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
dependencies = [
"proc-macro2",
"quote",
@@ -24,9 +33,9 @@ dependencies = [
[[package]]
name = "autocfg"
version = "1.0.1"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "base64"
@@ -67,9 +76,9 @@ dependencies = [
[[package]]
name = "bumpalo"
version = "3.8.0"
version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c"
checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
[[package]]
name = "byteorder"
@@ -87,12 +96,6 @@ dependencies = [
"iovec",
]
[[package]]
name = "cc"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
[[package]]
name = "cfg-if"
version = "0.1.10"
@@ -107,12 +110,11 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "challenge-bypass-ristretto"
version = "1.0.0"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a439d42c1cc301fb1a248114b56388e447ac1a9afed7bfb1424ae2f4c26f92c7"
checksum = "12658b539fe2693b4102b5d47e35e50f44e8096381f087fd8a78446a2b09cf90"
dependencies = [
"base64 0.13.0",
"clear_on_drop",
"crypto-mac",
"curve25519-dalek",
"digest",
@@ -122,16 +124,17 @@ dependencies = [
"rand_core",
"serde",
"subtle",
"zeroize",
]
[[package]]
name = "chrono"
version = "0.4.19"
version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
dependencies = [
"iana-time-zone",
"js-sys",
"libc",
"num-integer",
"num-traits",
"serde",
@@ -140,15 +143,6 @@ dependencies = [
"winapi",
]
[[package]]
name = "clear_on_drop"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9cc5db465b294c3fa986d5bbb0f3017cd850bff6dd6c52f9ccff8b4d21b7b08"
dependencies = [
"cc",
]
[[package]]
name = "console_error_panic_hook"
version = "0.1.7"
@@ -160,10 +154,16 @@ dependencies = [
]
[[package]]
name = "cpufeatures"
version = "0.2.1"
name = "core-foundation-sys"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
[[package]]
name = "cpufeatures"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc948ebb96241bb40ab73effeb80d9f93afaad49359d159a5e61be51619fe813"
dependencies = [
"libc",
]
@@ -180,9 +180,9 @@ dependencies = [
[[package]]
name = "curve25519-dalek"
version = "3.2.0"
version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0"
dependencies = [
"byteorder",
"digest",
@@ -220,9 +220,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
[[package]]
name = "futures"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4"
checksum = "ab30e97ab6aacfe635fad58f22c2bb06c8b685f7421eb1e064a729e2a5f481fa"
dependencies = [
"futures-channel",
"futures-core",
@@ -235,9 +235,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1"
dependencies = [
"futures-core",
"futures-sink",
@@ -254,9 +254,9 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115"
[[package]]
name = "futures-core-preview"
@@ -266,9 +266,9 @@ checksum = "b35b6263fb1ef523c3056565fa67b1d16f0a8604ff12b11b08c25f28a734c60a"
[[package]]
name = "futures-executor"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
checksum = "1d11aa21b5b587a64682c0094c2bdd4df0076c5324961a40cc3abd7f37930528"
dependencies = [
"futures-core",
"futures-task",
@@ -277,15 +277,15 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5"
[[package]]
name = "futures-macro"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c"
checksum = "0db9cce532b0eae2ccf2766ab246f114b56b9cf6d445e00c2549fbc100ca045d"
dependencies = [
"proc-macro2",
"quote",
@@ -297,22 +297,22 @@ name = "futures-retry"
version = "0.5.0"
source = "git+https://github.com/brave-intl/futures-retry?rev=2aaaafb#2aaaafbc3d394661534d4dbd14159d164243c20e"
dependencies = [
"futures 0.3.19",
"futures 0.3.23",
"futures-timer",
"pin-project",
]
[[package]]
name = "futures-sink"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508"
checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765"
[[package]]
name = "futures-task"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306"
[[package]]
name = "futures-timer"
@@ -326,9 +326,9 @@ dependencies = [
[[package]]
name = "futures-util"
version = "0.3.19"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577"
dependencies = [
"futures-channel",
"futures-core",
@@ -355,9 +355,9 @@ dependencies = [
[[package]]
name = "generic-array"
version = "0.14.4"
version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
dependencies = [
"typenum",
"version_check",
@@ -428,7 +428,20 @@ checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
dependencies = [
"bytes",
"fnv",
"itoa",
"itoa 0.4.8",
]
[[package]]
name = "iana-time-zone"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad2bfd338099682614d3ee3fe0cd72e0b6a41ca6a87f6a74a3bd593c91650501"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"js-sys",
"wasm-bindgen",
"winapi",
]
[[package]]
@@ -447,10 +460,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "js-sys"
version = "0.3.55"
name = "itoa"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84"
checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
[[package]]
name = "js-sys"
version = "0.3.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
dependencies = [
"wasm-bindgen",
]
@@ -463,15 +482,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.107"
version = "0.2.132"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219"
checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
[[package]]
name = "log"
version = "0.4.14"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if 1.0.0",
]
@@ -487,9 +506,9 @@ dependencies = [
[[package]]
name = "memchr"
version = "2.4.1"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "num-bigint"
@@ -504,9 +523,9 @@ dependencies = [
[[package]]
name = "num-integer"
version = "0.1.44"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
@@ -514,18 +533,18 @@ dependencies = [
[[package]]
name = "num-traits"
version = "0.2.14"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
]
[[package]]
name = "once_cell"
version = "1.8.0"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e"
[[package]]
name = "opaque-debug"
@@ -535,18 +554,18 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]]
name = "pin-project"
version = "0.4.28"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f"
checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "0.4.28"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e"
checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e"
dependencies = [
"proc-macro2",
"quote",
@@ -555,9 +574,9 @@ dependencies = [
[[package]]
name = "pin-project-lite"
version = "0.2.7"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
[[package]]
name = "pin-utils"
@@ -567,9 +586,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "ppv-lite86"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "proc-macro-hack"
@@ -579,18 +598,18 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
version = "1.0.32"
version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [
"unicode-xid",
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.10"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [
"proc-macro2",
]
@@ -638,9 +657,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.5.5"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
dependencies = [
"regex-syntax",
]
@@ -656,15 +675,15 @@ dependencies = [
[[package]]
name = "regex-syntax"
version = "0.6.25"
version = "0.6.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
[[package]]
name = "ryu"
version = "1.0.5"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
[[package]]
name = "safemem"
@@ -680,18 +699,29 @@ checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0"
[[package]]
name = "serde"
version = "1.0.130"
version = "1.0.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.130"
name = "serde-wasm-bindgen"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
checksum = "1cfc62771e7b829b517cb213419236475f434fb480eddd76112ae182d274434a"
dependencies = [
"js-sys",
"serde",
"wasm-bindgen",
]
[[package]]
name = "serde_derive"
version = "1.0.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
dependencies = [
"proc-macro2",
"quote",
@@ -700,20 +730,20 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.70"
version = "1.0.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e277c495ac6cd1a01a58d0a0c574568b4d1ddf14f59965c6a58b8d96400b54f3"
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
dependencies = [
"itoa",
"itoa 1.0.3",
"ryu",
"serde",
]
[[package]]
name = "sha2"
version = "0.9.8"
version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa"
checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
dependencies = [
"block-buffer",
"cfg-if 1.0.0",
@@ -756,15 +786,16 @@ dependencies = [
[[package]]
name = "skus-sdk"
version = "0.1.1"
version = "0.1.2"
dependencies = [
"async-trait",
"console_error_panic_hook",
"futures 0.3.19",
"futures 0.3.23",
"futures-util-preview",
"gloo-timers",
"js-sys",
"serde",
"serde-wasm-bindgen",
"serde_derive",
"serde_json",
"skus",
@@ -778,15 +809,18 @@ dependencies = [
[[package]]
name = "slab"
version = "0.4.5"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "1.7.0"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
[[package]]
name = "subtle"
@@ -796,13 +830,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "syn"
version = "1.0.81"
version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
"unicode-ident",
]
[[package]]
@@ -827,9 +861,9 @@ dependencies = [
[[package]]
name = "tracing"
version = "0.1.29"
version = "0.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
dependencies = [
"cfg-if 1.0.0",
"pin-project-lite",
@@ -839,9 +873,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
version = "0.1.18"
version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
dependencies = [
"proc-macro2",
"quote",
@@ -850,18 +884,19 @@ dependencies = [
[[package]]
name = "tracing-core"
version = "0.1.21"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7"
dependencies = [
"lazy_static",
"once_cell",
"valuable",
]
[[package]]
name = "tracing-log"
version = "0.1.2"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
dependencies = [
"lazy_static",
"log",
@@ -870,9 +905,9 @@ dependencies = [
[[package]]
name = "tracing-serde"
version = "0.1.2"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b"
checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
dependencies = [
"serde",
"tracing-core",
@@ -913,15 +948,15 @@ dependencies = [
[[package]]
name = "typenum"
version = "1.14.0"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
[[package]]
name = "unicode-xid"
version = "0.2.2"
name = "unicode-ident"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
[[package]]
name = "urlencoding"
@@ -939,10 +974,16 @@ dependencies = [
]
[[package]]
name = "version_check"
version = "0.9.3"
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wasi"
@@ -958,9 +999,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[package]]
name = "wasm-bindgen"
version = "0.2.78"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
dependencies = [
"cfg-if 1.0.0",
"serde",
@@ -970,13 +1011,13 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.78"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b"
checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
dependencies = [
"bumpalo",
"lazy_static",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn",
@@ -1001,9 +1042,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.78"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9"
checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1011,9 +1052,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.78"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab"
checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
dependencies = [
"proc-macro2",
"quote",
@@ -1024,9 +1065,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.78"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc"
checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
[[package]]
name = "wasm-cookies"
@@ -1042,9 +1083,9 @@ dependencies = [
[[package]]
name = "web-sys"
version = "0.3.55"
version = "0.3.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb"
checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1074,6 +1115,6 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "zeroize"
version = "1.4.3"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619"
checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
+3 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "skus-sdk"
version = "0.1.1"
version = "0.1.2"
authors = ["eV <ev@7pr.xyz>"]
edition = "2018"
@@ -15,7 +15,8 @@ js-sys = "0.3"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
serde-wasm-bindgen = "0.4.3"
wasm-bindgen = { version = "0.2.82", features = ["serde-serialize"] }
wasm-bindgen-futures = { version = "0.3", features = ["futures_0_3"] }
web-sys = { version = "0.3", features = ["console", "Headers", "Window", "Request", "RequestInit", "RequestMode", "Response", "Storage", "HtmlDocument", "Location", "Document", "Element", "HtmlIFrameElement", "CssStyleDeclaration", "MessageEvent", "Url", "DomTokenList"] }
console_error_panic_hook = "0.1.7"
@@ -3,7 +3,7 @@
"collaborators": [
"eV <ev@7pr.xyz>"
],
"version": "0.1.1",
"version": "0.1.2",
"files": [
"index.js",
"skus_sdk_bg.wasm",
+53 -59
View File
@@ -65,16 +65,12 @@ pub fn initialize(
let env = env.parse::<Environment>().or(Err("invalid environment"))?;
let level_filter = match log_level {
Some(log_level) => log_level
.parse::<LevelFilter>()
.or(Err("invalid log level"))?,
Some(log_level) => log_level.parse::<LevelFilter>().or(Err("invalid log level"))?,
None => LevelFilter::DEBUG,
};
skus::tracing::subscriber::set_global_default(
Registry::default()
.with(WASMLayer::new(WASMLayerConfig::default()))
.with(level_filter),
Registry::default().with(WASMLayer::new(WASMLayerConfig::default())).with(level_filter),
)
.expect("default global");
@@ -137,21 +133,30 @@ impl JSSDK {
let sdk = self.sdk.clone();
let future = async move {
let window: ChromeWindow = web_sys::window()
.ok_or("couldn't get window")?
.dyn_into()
.unwrap();
let window: ChromeWindow =
web_sys::window().ok_or("couldn't get window")?.dyn_into().unwrap();
if let Some(chrome) = window.chrome() {
if let Some(skus) = chrome.braveSkus() {
return JsFuture::from(skus.refresh_order(&order_id)).await;
}
}
let order = sdk
.refresh_order(&order_id)
.await
.map_err(|e| e.to_string())?;
Ok(JsValue::from_serde(&order).unwrap())
let order = sdk.refresh_order(&order_id).await.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&order)?;
Ok(js_value)
};
future_to_promise(future)
}
#[wasm_bindgen]
pub fn submit_receipt(&self, order_id: String, receipt: String) -> js_sys::Promise {
let sdk = self.sdk.clone();
let future = async move {
let resp = sdk.submit_receipt(&order_id, &receipt).await.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&resp)?;
Ok(js_value)
};
future_to_promise(future)
@@ -162,11 +167,10 @@ impl JSSDK {
let sdk = self.sdk.clone();
let future = async move {
let order = sdk
.submit_order_credentials_to_sign(&order_id)
.await
.map_err(|e| e.to_string())?;
Ok(JsValue::from_serde(&order).unwrap())
let order =
sdk.submit_order_credentials_to_sign(&order_id).await.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&order)?;
Ok(js_value)
};
future_to_promise(future)
@@ -177,21 +181,17 @@ impl JSSDK {
let sdk = self.sdk.clone();
let future = async move {
let window: ChromeWindow = web_sys::window()
.ok_or("couldn't get window")?
.dyn_into()
.unwrap();
let window: ChromeWindow =
web_sys::window().ok_or("couldn't get window")?.dyn_into().unwrap();
if let Some(chrome) = window.chrome() {
if let Some(skus) = chrome.braveSkus() {
return JsFuture::from(skus.fetch_order_credentials(&order_id)).await;
}
}
let order = sdk
.fetch_order_credentials(&order_id)
.await
.map_err(|e| e.to_string())?;
Ok(JsValue::from_serde(&order).unwrap())
let order = sdk.fetch_order_credentials(&order_id).await.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&order)?;
Ok(js_value)
};
future_to_promise(future)
@@ -202,11 +202,9 @@ impl JSSDK {
let sdk = self.sdk.clone();
let future = async move {
let order = sdk
.delete_order_credentials(&order_id)
.await
.map_err(|e| e.to_string())?;
Ok(JsValue::from_serde(&order).unwrap())
let order = sdk.delete_order_credentials(&order_id).await.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&order)?;
Ok(js_value)
};
future_to_promise(future)
@@ -228,12 +226,13 @@ impl JSSDK {
}
}
if let Some(credential_summary) = sdk
.matching_credential_summary(&subdomain)
.await
.map_err(|e| e.to_string())?
if let Some(credential_summary) =
sdk.matching_credential_summary(&subdomain).await.map_err(JsError::from)?
{
return Ok(JsValue::from_serde(&credential_summary).unwrap());
return {
let js_value = serde_wasm_bindgen::to_value(&credential_summary)?;
Ok(js_value)
};
}
Ok(JsValue::UNDEFINED)
@@ -257,9 +256,12 @@ impl JSSDK {
if let Some(credential_summary) = sdk
.matching_order_credential_summary(&order_id, &subdomain.unwrap_or(host))
.await
.map_err(|e| e.to_string())?
.map_err(JsError::from)?
{
return Ok(JsValue::from_serde(&credential_summary).unwrap());
return {
let js_value = serde_wasm_bindgen::to_value(&credential_summary)?;
Ok(js_value)
};
}
Ok(JsValue::UNDEFINED)
@@ -280,8 +282,9 @@ impl JSSDK {
let presentation = sdk
.prepare_credentials_presentation(&origin, &path.unwrap_or_else(|| "/".to_string()))
.await
.map_err(|e| e.to_string())?;
Ok(JsValue::from_serde(&presentation).unwrap())
.map_err(JsError::from)?;
let js_value = serde_wasm_bindgen::to_value(&presentation)?;
Ok(js_value)
};
future_to_promise(future)
@@ -306,7 +309,7 @@ impl JSSDK {
&path.unwrap_or_else(|| "/".to_string()),
)
.await
.map_err(|e| e.to_string())?;
.map_err(JsError::from)?;
Ok(JsValue::UNDEFINED)
};
@@ -331,7 +334,7 @@ impl JSSDK {
&path.unwrap_or_else(|| "/".to_string()),
)
.await
.map_err(|e| e.to_string())?
.map_err(JsError::from)?
{
return Ok(JsValue::from_str(&cred));
}
@@ -348,9 +351,7 @@ impl KVClient for JSClient {
#[allow(clippy::needless_lifetimes)]
fn get_store<'a>(&'a self) -> Result<RefMut<'a, JSStorage>, errors::InternalError> {
self.local_storage
.try_borrow_mut()
.or(Err(errors::InternalError::BorrowFailed))
self.local_storage.try_borrow_mut().or(Err(errors::InternalError::BorrowFailed))
}
}
@@ -387,12 +388,8 @@ impl KVStore for JSStorage {
#[async_trait(?Send)]
impl HTTPClient for JSClient {
fn set_cookie(&self, value: &str) {
let document = web_sys::window()
.unwrap()
.document()
.unwrap()
.dyn_into::<HtmlDocument>()
.unwrap();
let document =
web_sys::window().unwrap().document().unwrap().dyn_into::<HtmlDocument>().unwrap();
tracing::debug!("set cookie: {}", value);
document.set_cookie(value).unwrap();
@@ -415,7 +412,7 @@ impl HTTPClient for JSClient {
let mut opts = RequestInit::new();
opts.mode(RequestMode::Cors);
opts.method(&req.method().to_string());
opts.method(req.method().as_ref());
let body = req.body();
@@ -427,10 +424,7 @@ impl HTTPClient for JSClient {
let request = Request::new_with_str_and_init(&req.uri().to_string(), &opts).unwrap();
for (key, value) in req.headers().iter() {
request
.headers()
.set(key.as_str(), value.to_str().unwrap())
.unwrap();
request.headers().set(key.as_str(), value.to_str().unwrap()).unwrap();
}
let r = JsFuture::from(window.fetch_with_request(&request))
@@ -61,6 +61,9 @@ CredentialSummaryCallbackState::~CredentialSummaryCallbackState() = default;
RefreshOrderCallbackState::RefreshOrderCallbackState() = default;
RefreshOrderCallbackState::~RefreshOrderCallbackState() = default;
SubmitReceiptCallbackState::SubmitReceiptCallbackState() {}
SubmitReceiptCallbackState::~SubmitReceiptCallbackState() {}
void shim_logMessage(rust::cxxbridge1::Str file,
uint32_t line,
skus::TracingLevel level,
@@ -57,6 +57,14 @@ void OnCredentialSummary(skus::CredentialSummaryCallbackState* callback_state,
delete callback_state;
}
void OnSubmitReceipt(skus::SubmitReceiptCallbackState* callback_state,
skus::SkusResult result) {
if (callback_state->cb) {
std::move(callback_state->cb).Run("");
}
delete callback_state;
}
} // namespace
namespace skus {
@@ -149,4 +157,16 @@ void SkusServiceImpl::OnCredentialSummary(
}
}
void SkusServiceImpl::SubmitReceipt(
const std::string& domain,
const std::string& order_id,
const std::string& receipt,
skus::mojom::SkusService::SubmitReceiptCallback callback) {
std::unique_ptr<skus::SubmitReceiptCallbackState> cbs(
new skus::SubmitReceiptCallbackState);
cbs->cb = std::move(callback);
GetOrCreateSDK(domain)->submit_receipt(OnSubmitReceipt, std::move(cbs),
order_id, receipt);
}
} // namespace skus
@@ -89,6 +89,12 @@ class SkusServiceImpl : public KeyedService, public mojom::SkusService {
void CredentialSummary(
const std::string& domain,
skus::mojom::SkusService::CredentialSummaryCallback callback) override;
void SubmitReceipt(
const std::string& domain,
const std::string& order_id,
const std::string& receipt,
skus::mojom::SkusService::SubmitReceiptCallback callback) override;
::rust::Box<skus::CppSDK>& GetOrCreateSDK(const std::string& domain);
private:
+1
View File
@@ -10,4 +10,5 @@ interface SkusService {
FetchOrderCredentials(string domain, string order_id) => (string response);
PrepareCredentialsPresentation(string domain, string path) => (string response);
CredentialSummary(string domain) => (string response);
SubmitReceipt(string domain, string order_id, string receipt) => (string response);
};
+4 -4
View File
@@ -52,7 +52,7 @@ class SkusJSHandler : public gin::Wrappable<SkusJSHandler> {
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
// window.brave.skus.refresh_order
// window.chrome.braveSkus.refresh_order
v8::Local<v8::Promise> RefreshOrder(v8::Isolate* isolate,
std::string order_id);
void OnRefreshOrder(v8::Global<v8::Promise::Resolver> promise_resolver,
@@ -60,7 +60,7 @@ class SkusJSHandler : public gin::Wrappable<SkusJSHandler> {
v8::Global<v8::Context> context_old,
const std::string& response);
// window.brave.skus.fetch_order_credentials
// window.chrome.braveSkus.fetch_order_credentials
v8::Local<v8::Promise> FetchOrderCredentials(v8::Isolate* isolate,
std::string order_id);
void OnFetchOrderCredentials(
@@ -69,7 +69,7 @@ class SkusJSHandler : public gin::Wrappable<SkusJSHandler> {
v8::Global<v8::Context> context_old,
const std::string& response);
// window.brave.skus.prepare_credentials_presentation
// window.chrome.braveSkus.prepare_credentials_presentation
v8::Local<v8::Promise> PrepareCredentialsPresentation(v8::Isolate* isolate,
std::string domain,
std::string path);
@@ -79,7 +79,7 @@ class SkusJSHandler : public gin::Wrappable<SkusJSHandler> {
v8::Global<v8::Context> context_old,
const std::string& response);
// window.brave.skus.credential_summary
// window.chrome.braveSkus.credential_summary
v8::Local<v8::Promise> CredentialSummary(v8::Isolate* isolate,
std::string domain);
void OnCredentialSummary(const std::string& domain,