mirror of
https://github.com/aljazceru/breez-sdk-docs.git
synced 2025-12-17 05:44:20 +01:00
feat: adding docs for payment metadata (#124)
Co-authored-by: vacwmX <vacwm01@gmail.com> Co-authored-by: ok300 <106775972+ok300@users.noreply.github.com>
This commit is contained in:
78
snippets/csharp/Metadata.cs
Normal file
78
snippets/csharp/Metadata.cs
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
using Breez.Sdk;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
public class MetadataSnippets
|
||||||
|
{
|
||||||
|
public void SetPaymentMetadata(BlockingBreezServices sdk)
|
||||||
|
{
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
sdk.SetPaymentMetadata("target-payment-hash", "{\"myCustomValue\":true}");
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FilterPaymentMetadata(BlockingBreezServices sdk)
|
||||||
|
{
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var metadataFilters = new List<MetadataFilter>() {
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: "true"
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
var payments = sdk.ListPayments(
|
||||||
|
new ListPaymentsRequest(
|
||||||
|
metadataFilters: metadataFilters
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// Handle error
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FilterPaymentMetadataString(BlockingBreezServices sdk)
|
||||||
|
{
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
var metadataFilters = new List<MetadataFilter>() {
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "customerName",
|
||||||
|
jsonValue: "\"Satoshi Nakamoto\""
|
||||||
|
),
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "customerName",
|
||||||
|
jsonValue: JsonSerializer.Serialize("Satoshi Nakamoto")
|
||||||
|
)
|
||||||
|
};
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FilterPaymentMetadataObject(BlockingBreezServices sdk)
|
||||||
|
{
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
var _metadataFilters = new List<MetadataFilter>() {
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "parent.nestedArray",
|
||||||
|
jsonValue: "[1, 2, 3]"
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
var metadataFilters = new List<MetadataFilter>() {
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "parent.nestedArray",
|
||||||
|
jsonValue: "[1,2,3]"
|
||||||
|
),
|
||||||
|
new MetadataFilter(
|
||||||
|
jsonPath: "parent.nestedArray",
|
||||||
|
jsonValue: JsonSerializer.Serialize(new int[] {1, 2, 3})
|
||||||
|
)
|
||||||
|
};
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
}
|
||||||
|
}
|
||||||
51
snippets/dart_snippets/lib/metadata.dart
Normal file
51
snippets/dart_snippets/lib/metadata.dart
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import 'package:breez_sdk/breez_sdk.dart';
|
||||||
|
import 'package:breez_sdk/bridge_generated.dart';
|
||||||
|
|
||||||
|
Future<void> setPaymentMetadata({required String paymentHash, required String metadata}) async {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
await BreezSDK().setPaymentMetadata(hash: "target-payment-hash", metadata: '{"myCustomValue":true}');
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> filterPaymentMetadata() async {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
List<MetadataFilter> metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: "true",
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
await BreezSDK().listPayments(
|
||||||
|
req: ListPaymentsRequest(
|
||||||
|
metadataFilters: metadataFilters
|
||||||
|
));
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "customerName",
|
||||||
|
jsonValue: '"Satoshi Nakamoto"',
|
||||||
|
),
|
||||||
|
];
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "parent.nestedArray",
|
||||||
|
jsonValue: "[1, 2, 3]",
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "parent.nestedArray",
|
||||||
|
jsonValue: "[1,2,3]",
|
||||||
|
),
|
||||||
|
];
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
}
|
||||||
72
snippets/go/metadata.go
Normal file
72
snippets/go/metadata.go
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
package example
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/breez/breez-sdk-go/breez_sdk"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetPaymentMetadata() {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
sdk.SetPaymentMetadata("target-payment-hash", `{"myCustomValue":true}`)
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadata() {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
metadataFilters := []breez_sdk.MetadataFilter{
|
||||||
|
{JsonPath: "myCustomValue", JsonValue: "true"},
|
||||||
|
}
|
||||||
|
|
||||||
|
payments, err := sdk.ListPayments(breez_sdk.ListPaymentsRequest{
|
||||||
|
MetadataFilters: &metadataFilters,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
log.Printf("%#v", payments)
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadataString() {
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
metadataFilters := []breez_sdk.MetadataFilter{
|
||||||
|
{JsonPath: "customerName", JsonValue: "\"Satoshi Nakamoto\""},
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonValue, _ := json.Marshal("Satoshi Nakamoto")
|
||||||
|
metadataFilters = []breez_sdk.MetadataFilter{
|
||||||
|
{
|
||||||
|
JsonPath: "customerName",
|
||||||
|
JsonValue: string(jsonValue),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
|
||||||
|
sdk.ListPayments(breez_sdk.ListPaymentsRequest{
|
||||||
|
MetadataFilters: &metadataFilters,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadataObject() {
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
metadataFilters := []breez_sdk.MetadataFilter{
|
||||||
|
{JsonPath: "parent.nestedArray", JsonValue: "[1, 2, 3]"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
jsonValue, _ := json.Marshal([]int{1, 2, 3})
|
||||||
|
|
||||||
|
metadataFilters = []breez_sdk.MetadataFilter{
|
||||||
|
{JsonPath: "parent.nestedArray", JsonValue: "[1,2,3]"},
|
||||||
|
{JsonPath: "parent.nestedArray", JsonValue: string(jsonValue)},
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
|
||||||
|
sdk.ListPayments(breez_sdk.ListPaymentsRequest{
|
||||||
|
MetadataFilters: &metadataFilters,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package com.example.kotlinmpplib
|
||||||
|
|
||||||
|
import breez_sdk.*
|
||||||
|
class Metadata {
|
||||||
|
fun SetPaymentMetadata(sdk: BlockingBreezServices) {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
try {
|
||||||
|
sdk.setPaymentMetadata("target-payment-hash", """{"myCustomValue":true}""")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// Handle error
|
||||||
|
}
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FilterPaymentMetadata(sdk: BlockingBreezServices) {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
val metadataFilters = listOf(MetadataFilter(
|
||||||
|
jsonPath = "myCustomValue",
|
||||||
|
jsonValue = "true"
|
||||||
|
))
|
||||||
|
|
||||||
|
try {
|
||||||
|
sdk.listPayments(
|
||||||
|
ListPaymentsRequest(
|
||||||
|
metadataFilters = metadataFilters
|
||||||
|
))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FilterPaymentMetadataString(sdk: BlockingBreezServices) {
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
val metadataFilters = listOf(MetadataFilter(
|
||||||
|
jsonPath = "customerName",
|
||||||
|
jsonValue = "\"Satoshi Nakamoto\""
|
||||||
|
))
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FilterPaymentMetadataObject(sdk: BlockingBreezServices) {
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
val _metadataFilters = listOf(MetadataFilter(
|
||||||
|
jsonPath = "parent.nestedArray",
|
||||||
|
jsonValue = "[1, 2, 3]"
|
||||||
|
))
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
val metadataFilters = listOf(MetadataFilter(
|
||||||
|
jsonPath = "parent.nestedArray",
|
||||||
|
jsonValue = "[1,2,3]"
|
||||||
|
))
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
}
|
||||||
|
}
|
||||||
45
snippets/python/src/metadata.py
Normal file
45
snippets/python/src/metadata.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import breez_sdk
|
||||||
|
|
||||||
|
def set_payment_metadata(sdk_services):
|
||||||
|
try:
|
||||||
|
# ANCHOR: set-payment-metadata
|
||||||
|
sdk_services.set_payment_metadata("target-payment-hash", '{"myCustomValue":true}')
|
||||||
|
# ANCHOR_END: set-payment-metadata
|
||||||
|
except Exception as error:
|
||||||
|
# handle error
|
||||||
|
raise
|
||||||
|
|
||||||
|
def filter_payment_metadata(sdk_services):
|
||||||
|
# ANCHOR: filter-payment-metadata
|
||||||
|
metadata_filters = [
|
||||||
|
breez_sdk.MetadataFilter("myCustomValue", "true")
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
sdk_services.list_payments(breez_sdk.ListPaymentsRequest(
|
||||||
|
metadata_filters = metadata_filters
|
||||||
|
))
|
||||||
|
except Exception as error:
|
||||||
|
# handle error
|
||||||
|
raise
|
||||||
|
# ANCHOR_END: filter-payment-metadata
|
||||||
|
|
||||||
|
# ANCHOR: filter-payment-metadata-string
|
||||||
|
metadata_filters = [
|
||||||
|
breez_sdk.MetadataFilter("customerName", "\"Satoshi Nakamoto\""),
|
||||||
|
breez_sdk.MetadataFilter("customerName", json.dumps("Satoshi Nakamoto")),
|
||||||
|
]
|
||||||
|
# ANCHOR_END: filter-payment-metadata-string
|
||||||
|
|
||||||
|
# ANCHOR: filter-payment-metadata-object
|
||||||
|
# This will *NOT* work
|
||||||
|
metadata_filters = [
|
||||||
|
breez_sdk.MetadataFilter("parent.nestedArray", "[1, 2, 3]")
|
||||||
|
]
|
||||||
|
|
||||||
|
# Any of these will work
|
||||||
|
metadata_filters = [
|
||||||
|
breez_sdk.MetadataFilter("parent.nestedArray", "[1,2,3]"),
|
||||||
|
breez_sdk.MetadataFilter("parent.nestedArray", json.dumps([1,2,3], separators=(',', ':'))),
|
||||||
|
]
|
||||||
|
# ANCHOR_END: filter-payment-metadata-object
|
||||||
66
snippets/react-native/metadata.ts
Normal file
66
snippets/react-native/metadata.ts
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import { setPaymentMetadata, listPayments } from '@breeztech/react-native-breez-sdk'
|
||||||
|
|
||||||
|
const testSetPaymentMetadata = async () => {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
await setPaymentMetadata('target-payment-hash', '{"myCustomValue":true}')
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
const testFilterPaymentMetadata = async () => {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
const metadataFilters = [
|
||||||
|
{
|
||||||
|
jsonPath: 'myCustomValue',
|
||||||
|
jsonValue: 'true'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
try {
|
||||||
|
await listPayments({
|
||||||
|
metadataFilters
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
const testFilterPaymentMetadataString = async () => {
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
// Note: These are equivalent
|
||||||
|
const metadataFilters = [
|
||||||
|
{
|
||||||
|
jsonPath: 'customerName',
|
||||||
|
jsonValue: 'Satoshi Nakamoto'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
jsonPath: 'customerName',
|
||||||
|
jsonValue: JSON.stringify('Satoshi Nakamoto')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
}
|
||||||
|
|
||||||
|
const testFilterPaymentMetadataObject = async () => {
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
const _metadataFilters = [
|
||||||
|
{
|
||||||
|
jsonPath: 'parent.nestedArray',
|
||||||
|
jsonValue: '[1, 2, 3]'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
const metadataFilters = [
|
||||||
|
{
|
||||||
|
jsonPath: 'parent.nestedArray',
|
||||||
|
jsonValue: '[1,2,3]'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
jsonPath: 'parent.nestedArray',
|
||||||
|
jsonValue: JSON.stringify([1, 2, 3])
|
||||||
|
}
|
||||||
|
]
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
}
|
||||||
73
snippets/rust/src/metadata.rs
Normal file
73
snippets/rust/src/metadata.rs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
use anyhow::Result;
|
||||||
|
use breez_sdk_core::*;
|
||||||
|
|
||||||
|
async fn set_payment_metadata(sdk: Arc<BreezServices>) -> Result<()> {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
sdk.set_payment_metadata("target-payment-hash", r#"{"myCustomValue":true}"#).await?;
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn filter_payment_metadata(sdk: Arc<BreezServices>) -> Result<()> {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
let metadata_filters = vec![
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "myCustomValue".to_string(),
|
||||||
|
json_value: "true".to_string(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
sdk.list_payments(ListPaymentsRequest {
|
||||||
|
metadata_filters,
|
||||||
|
..Default::default(),
|
||||||
|
}).await?;
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn filter_payment_metadata_string(sdk: Arc<BreezServices>) -> Result<()> {
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
// Note: The following are equivalent
|
||||||
|
let metadata_filters = vec![
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "customerName".to_string(),
|
||||||
|
json_value: r#""Satoshi Nakamoto""#.to_string(),
|
||||||
|
},
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "customerName".to_string(),
|
||||||
|
json_value: serde_json::json!("Satoshi Nakamoto").to_string(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn filter_payment_metadata_object(sdk: Arc<BreezServices>) -> Result<()> {
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
let metadata_filters = vec![
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "parent.nestedArray".to_string(),
|
||||||
|
json_value: r#"[1, 2, 3]"#.to_string(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
let metadata_filters = vec![
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "parent.nestedArray".to_string(),
|
||||||
|
json_value: r#"[1,2,3]"#.to_string(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
|
||||||
|
// ANCHOR: filter-payment-metadata-object-serde
|
||||||
|
let metadata_filters = vec![
|
||||||
|
MetadataFilter {
|
||||||
|
json_path: "parent.nestedArray".to_string(),
|
||||||
|
json_value: serde_json::json!(&[1, 2, 3]).to_string(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object-serde
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
76
snippets/swift/BreezSDKExamples/Sources/Metadata.swift
Normal file
76
snippets/swift/BreezSDKExamples/Sources/Metadata.swift
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
//
|
||||||
|
// Metadata.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import BreezSDK
|
||||||
|
|
||||||
|
func SetPaymentMetadata(sdk: BlockingBreezServices) throws {
|
||||||
|
// ANCHOR: set-payment-metadata
|
||||||
|
try sdk.setPaymentMetadata(hash: "target-payment-hash", metadata: #"{"myCustomValue":true}"#)
|
||||||
|
// ANCHOR_END: set-payment-metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadata(sdk: BlockingBreezServices) -> [Payment]? {
|
||||||
|
// ANCHOR: filter-payment-metadata
|
||||||
|
let metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: "true"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
let payments = try? sdk.listPayments(
|
||||||
|
req: ListPaymentsRequest(
|
||||||
|
metadataFilters: metadataFilters
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// ANCHOR_END: filter-payment-metadata
|
||||||
|
|
||||||
|
return payments
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadataString(sdk: BlockingBreezServices) -> [Payment]? {
|
||||||
|
// ANCHOR: filter-payment-metadata-string
|
||||||
|
let metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: #""true""#
|
||||||
|
)
|
||||||
|
]
|
||||||
|
// ANCHOR_END: filter-payment-metadata-string
|
||||||
|
|
||||||
|
return try? sdk.listPayments(
|
||||||
|
req: ListPaymentsRequest(
|
||||||
|
metadataFilters: metadataFilters
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterPaymentMetadataObject(sdk: BlockingBreezServices) -> [Payment]? {
|
||||||
|
// ANCHOR: filter-payment-metadata-object
|
||||||
|
// This will *NOT* work
|
||||||
|
var metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: #"[1, 2, 3]"#
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
// Any of these will work
|
||||||
|
metadataFilters = [
|
||||||
|
MetadataFilter(
|
||||||
|
jsonPath: "myCustomValue",
|
||||||
|
jsonValue: #"[1,2,3]"#
|
||||||
|
)
|
||||||
|
]
|
||||||
|
// ANCHOR_END: filter-payment-metadata-object
|
||||||
|
|
||||||
|
return try? sdk.listPayments(
|
||||||
|
req: ListPaymentsRequest(
|
||||||
|
metadataFilters: metadataFilters
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
- [Receiving payments via mobile notifications](guide/payment_notification.md)
|
- [Receiving payments via mobile notifications](guide/payment_notification.md)
|
||||||
- [iOS](guide/ios_notification_service_extension.md)
|
- [iOS](guide/ios_notification_service_extension.md)
|
||||||
- [Android](guide/android_notification_foreground_service.md)
|
- [Android](guide/android_notification_foreground_service.md)
|
||||||
|
- [Adding and filtering for payment metadata](guide/payment_metadata.md)
|
||||||
- [Connecting to an LSP](guide/connecting_lsp.md)
|
- [Connecting to an LSP](guide/connecting_lsp.md)
|
||||||
- [Receiving an On-Chain Transaction](guide/receive_onchain.md)
|
- [Receiving an On-Chain Transaction](guide/receive_onchain.md)
|
||||||
- [Sending an On-Chain Transaction](guide/send_onchain.md)
|
- [Sending an On-Chain Transaction](guide/send_onchain.md)
|
||||||
|
|||||||
326
src/guide/payment_metadata.md
Normal file
326
src/guide/payment_metadata.md
Normal file
@@ -0,0 +1,326 @@
|
|||||||
|
# Adding and filtering for payment metadata
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
As developers, we understand the necessity to associate external metadata to a certain payment. The Breez SDK allows you to easily do so with the `set_payment_metadata` method:
|
||||||
|
|
||||||
|
<custom-tabs category="lang">
|
||||||
|
<div slot="title">Rust</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```rust,ignore
|
||||||
|
{{#include ../../snippets/rust/src/metadata.rs:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Swift</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```swift,ignore
|
||||||
|
{{#include ../../snippets/swift/BreezSDKExamples/Sources/Metadata.swift:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Kotlin</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```kotlin,ignore
|
||||||
|
{{#include ../../snippets/kotlin_mpp_lib/shared/src/commonMain/kotlin/com/example/kotlinmpplib/Metadata.kt:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">React Native</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{{#include ../../snippets/react-native/metadata.ts:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Dart</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```dart,ignore
|
||||||
|
{{#include ../../snippets/dart_snippets/lib/metadata.dart:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Python</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```python,ignore
|
||||||
|
{{#include ../../snippets/python/src/metadata.py:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Go</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```go,ignore
|
||||||
|
{{#include ../../snippets/go/metadata.go:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">C#</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```cs,ignore
|
||||||
|
{{#include ../../snippets/csharp/Metadata.cs:set-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</custom-tabs>
|
||||||
|
|
||||||
|
Once the metadata has been set, you can filter for the specified value using the `list_payments` method:
|
||||||
|
|
||||||
|
<custom-tabs category="lang">
|
||||||
|
<div slot="title">Rust</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```rust,ignore
|
||||||
|
{{#include ../../snippets/rust/src/metadata.rs:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Swift</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```swift,ignore
|
||||||
|
{{#include ../../snippets/swift/BreezSDKExamples/Sources/Metadata.swift:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Kotlin</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```kotlin,ignore
|
||||||
|
{{#include ../../snippets/kotlin_mpp_lib/shared/src/commonMain/kotlin/com/example/kotlinmpplib/Metadata.kt:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">React Native</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{{#include ../../snippets/react-native/metadata.ts:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Dart</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```dart,ignore
|
||||||
|
{{#include ../../snippets/dart_snippets/lib/metadata.dart:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Python</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```python,ignore
|
||||||
|
{{#include ../../snippets/python/src/metadata.py:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Go</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```go,ignore
|
||||||
|
{{#include ../../snippets/go/metadata.go:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">C#</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```cs,ignore
|
||||||
|
{{#include ../../snippets/csharp/Metadata.cs:filter-payment-metadata}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</custom-tabs>
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
Searching for metadata is flexible, allowing you to search and compare all JSON-supported types (nested ones too, using [JSONPath](https://www.ibm.com/docs/en/netezza?topic=ddt-jsonpath)), but with a couple of caveats:
|
||||||
|
|
||||||
|
### 2.1 Filtering for Strings
|
||||||
|
|
||||||
|
Since the filter works as a one-to-one comparison to the JSON value, strings **must** be wrapped in double-quotes in order to be properly filtered:
|
||||||
|
|
||||||
|
<custom-tabs category="lang">
|
||||||
|
<div slot="title">Rust</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```rust,ignore
|
||||||
|
{{#include ../../snippets/rust/src/metadata.rs:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Swift</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```swift,ignore
|
||||||
|
{{#include ../../snippets/swift/BreezSDKExamples/Sources/Metadata.swift:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Kotlin</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```kotlin,ignore
|
||||||
|
{{#include ../../snippets/kotlin_mpp_lib/shared/src/commonMain/kotlin/com/example/kotlinmpplib/Metadata.kt:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">React Native</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{{#include ../../snippets/react-native/metadata.ts:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Dart</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```dart,ignore
|
||||||
|
{{#include ../../snippets/dart_snippets/lib/metadata.dart:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Python</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```python,ignore
|
||||||
|
{{#include ../../snippets/python/src/metadata.py:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Go</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```go,ignore
|
||||||
|
{{#include ../../snippets/go/metadata.go:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">C#</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```cs,ignore
|
||||||
|
{{#include ../../snippets/csharp/Metadata.cs:filter-payment-metadata-string}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</custom-tabs>
|
||||||
|
|
||||||
|
### 2.2 Filtering for Objects/Arrays
|
||||||
|
|
||||||
|
You can also compare complex objects against one another, but be careful of whitespaces! Since those are stripped during insertion, passing non-stripped filters will result in improper matching. For example, given the following metadata:
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<pre>
|
||||||
|
{
|
||||||
|
"isNested": true,
|
||||||
|
"parent": {
|
||||||
|
"nestedArray": [1, 2, 3]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
You would filter for payments matching the nested array as follows:
|
||||||
|
|
||||||
|
<custom-tabs category="lang">
|
||||||
|
<div slot="title">Rust</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```rust,ignore
|
||||||
|
{{#include ../../snippets/rust/src/metadata.rs:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
|
||||||
|
In Rust's case, this check can easily be overcome by using the [serde_json](https://docs.rs/serde_json/latest/serde_json/) crate (which you probably should be using anyway to serialize and insert the metadata):
|
||||||
|
|
||||||
|
```rust,ignore
|
||||||
|
{{#include ../../snippets/rust/src/metadata.rs:filter-payment-metadata-object-serde}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Swift</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```swift,ignore
|
||||||
|
{{#include ../../snippets/swift/BreezSDKExamples/Sources/Metadata.swift:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Kotlin</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```kotlin,ignore
|
||||||
|
{{#include ../../snippets/kotlin_mpp_lib/shared/src/commonMain/kotlin/com/example/kotlinmpplib/Metadata.kt:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">React Native</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{{#include ../../snippets/react-native/metadata.ts:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Dart</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```dart,ignore
|
||||||
|
{{#include ../../snippets/dart_snippets/lib/metadata.dart:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Python</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```python,ignore
|
||||||
|
{{#include ../../snippets/python/src/metadata.py:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">Go</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```go,ignore
|
||||||
|
{{#include ../../snippets/go/metadata.go:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div slot="title">C#</div>
|
||||||
|
<section>
|
||||||
|
|
||||||
|
```cs,ignore
|
||||||
|
{{#include ../../snippets/csharp/Metadata.cs:filter-payment-metadata-object}}
|
||||||
|
```
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</custom-tabs>
|
||||||
|
|
||||||
|
### 2.3 Same-key Insertion
|
||||||
|
|
||||||
|
In case the same key were to be specified twice during insertion, the _last_ one occurring in the string is taken as valid by default. E.g.
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<pre>
|
||||||
|
{
|
||||||
|
"completed": true,
|
||||||
|
"completed": false
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
will insert the value as `false`.
|
||||||
|
|
||||||
|
### 2.4 Size Limits
|
||||||
|
|
||||||
|
Currently, the SDK limits metadata storage per payment to 1,000 UTF-8 encoded characters, and any insertion beyond that will fail.
|
||||||
Reference in New Issue
Block a user