Перейти к основному содержимому

SDKs

Публичные клиентские SDK для плоскости Runtime (runtime.<domain>).
Management / Vendor Console API этими пакетами не покрываются.

Матрица совместимости, координаты пакетов, language floors и ссылки на examples: Матрица совместимости SDK.

Локальная проверка lease (скачать JWKS → проверить JWS → применить claims): Проверка доверия (JWKS) · snippets в Быстром старте для разработчика.

Ответ validate может содержать densified featureGrants. Используйте их только после доверенного allow; не soft-allow возможности при deny/degraded или при сбое signature trust.

Preview

.NET, JavaScript/TypeScript, Java, Go, Rust и C++ SDK собираются как 0.1.0-preview.1; Python — как 0.1.0a1. Публикация на nuget.org, npmjs, Maven Central, PyPI, proxy.golang.org / version-tag, crates.io и vcpkg/Conan закрыта gate — до намеренного релиза ставьте пакет из локального/CI артефакта (или pin @main / replace / path).

Доступно

ЯзыкПакетСтатусИсходникиПримеры
.NETMyHoreca.Licensing.SdkPreview 0.1.0-preview.1 (net10.0)igorpooh1978/myhoreca-licensing-sdk-dotnetQuickStart
JavaScript / TypeScript@myhoreca/licensing-sdkPreview 0.1.0-preview.1 (Node 20+ / современные браузеры)igorpooh1978/myhoreca-licensing-sdk-jsquickstart
Pythonmyhoreca-licensing-sdkAlpha 0.1.0a1 (Python 3.11+)igorpooh1978/myhoreca-licensing-sdk-pythonquickstart
Javacom.myhoreca:licensing-sdkPreview 0.1.0-preview.1 (Java 17+)igorpooh1978/myhoreca-licensing-sdk-javaquickstart
Gogithub.com/igorpooh1978/myhoreca-licensing-sdk-goPreview 0.1.0-preview.1 (Go 1.23+)igorpooh1978/myhoreca-licensing-sdk-goquickstart
Rustmyhoreca-licensing-sdkPreview 0.1.0-preview.1 (Rust 1.86+)igorpooh1978/myhoreca-licensing-sdk-rustquickstart
C++myhoreca-licensing-sdkPreview 0.1.0-preview.1 (C++20 / CMake 3.20+)igorpooh1978/myhoreca-licensing-sdk-cppquickstart

.NET Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-dotnet
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока nuget.org не открыт, соберите пакет из исходников или скачайте CI artifact:

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-dotnet.git
cd myhoreca-licensing-sdk-dotnet
pwsh ./tools/pack.ps1
# → artifacts/nuget/MyHoreca.Licensing.Sdk.0.1.0-preview.1.nupkg

Подключите локальный feed / PackageReference к этому nupkg в приложении.
Не считайте CI artifact стабильным публичным registry.

Минимальный пример

using MyHoreca.Licensing.Sdk;

var client = LicensingClient.Create(new LicensingClientOptions
{
BaseUrl = new Uri("https://runtime.example"),
TenantId = tenantId,
// LicenseKey = "...", // опционально — не логировать
});

var activated = await client.ActivateAsync(licenseId, cancellationToken);
var validated = await client.ValidateAsync(new ValidateRequest
{
LicenseId = licenseId,
LeaseToken = activated.LeaseToken
}, cancellationToken);

if (validated.IsAllowed) { /* выдать фичу после server decision */ }

// Локальное доверие: JWKS (внутри SDK) → Compact JWS → claims
var verified = await client.VerifyLeaseAsync(
activated.LeaseToken!,
new LeaseVerificationOptions { ExpectedAudience = "myhoreca.runtime" },
cancellationToken);
if (!verified.IsAccepted) { /* deny — см. Проверка доверия (JWKS) */ }

Также доступны: RefreshLeaseAsync, RegisterDeviceAsync. Narrative: Проверка доверия (JWKS).

Runnable-пример: examples/QuickStart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
ActivateActivateAsync
ValidateValidateAsync
Refresh leaseRefreshLeaseAsync
Register deviceRegisterDeviceAsync
JWKS / verify leaseVerifyLeaseAsync

JavaScript / TypeScript Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-js
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока npmjs не открыт, соберите пакет из исходников или скачайте CI artifact:

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-js.git
cd myhoreca-licensing-sdk-js
pnpm install
pnpm pack:local
# → artifacts/npm/myhoreca-licensing-sdk-0.1.0-preview.1.tgz

Подключите локальную / file-зависимость на этот tarball (или file:../myhoreca-licensing-sdk-js при разработке).
Не считайте CI artifact стабильным публичным registry.
Публикация на npmjs закрыта gate — см. NPM-PUBLISH.md.

После намеренного релиза на npmjs:

pnpm add @myhoreca/licensing-sdk

Минимальный пример

import { createLicensingClient } from "@myhoreca/licensing-sdk";

const client = createLicensingClient({
baseUrl: "https://runtime.example",
tenantId,
// licenseKey: "...", // опционально — не логировать
});

const activated = await client.activate(licenseId);
const validated = await client.validate({
licenseId,
leaseToken: activated.leaseToken,
});

if (validated.isAllowed) {
/* выдать фичу после server decision */
}

// Локальное доверие: JWKS (внутри SDK) → Compact JWS → claims
const verified = await client.verifyLease(activated.leaseToken!, {
expectedAudience: "myhoreca.runtime",
});
if (!verified.isAccepted) {
/* deny — см. Проверка доверия (JWKS) */
}

Также доступны: refreshLease, registerDevice. Narrative: Проверка доверия (JWKS).

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
Activateactivate
Validatevalidate
Refresh leaserefreshLease
Register deviceregisterDevice
JWKS / verify leaseverifyLease / verifyLeaseToken

Python Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-python
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (alpha)

Пока PyPI не открыт, установите из исходников или из собранного wheel:

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-python.git
cd myhoreca-licensing-sdk-python
python -m pip install -e .
# или pack:
python -m pip install build
python scripts/pack.py
# → artifacts/pypi/myhoreca_licensing_sdk-0.1.0a1-py3-none-any.whl
python -m pip install artifacts/pypi/myhoreca_licensing_sdk-0.1.0a1-py3-none-any.whl

Не считайте CI artifact стабильным публичным registry.
Публикация на PyPI закрыта gate — см. PYPI-PUBLISH.md.

После намеренного релиза на PyPI:

python -m pip install myhoreca-licensing-sdk

Минимальный пример

from myhoreca_licensing_sdk import (
LicensingClientOptions,
ValidateRequest,
create_licensing_client,
)

client = create_licensing_client(
LicensingClientOptions(
base_url="https://runtime.example",
tenant_id=tenant_id,
# license_key="...", # опционально — не логировать
)
)
try:
activated = await client.activate(license_id)
validated = await client.validate(
ValidateRequest(license_id=license_id, lease_token=activated.lease_token)
)
if validated.is_allowed:
... # выдать фичу
finally:
await client.aclose()

Также доступны: refresh_lease, verify_lease / verify_lease_token (локальная ES256 через JWKS), register_device, и sync facade create_licensing_client_sync (не вызывать из уже запущенного event loop).

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
Activateactivate
Validatevalidate
Refresh leaserefresh_lease
Register deviceregister_device
JWKS / verify leaseverify_lease / verify_lease_token

Java Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-java
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока Maven Central не открыт, соберите пакет из исходников или скачайте CI artifact:

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-java.git
cd myhoreca-licensing-sdk-java
pwsh ./tools/pack.ps1
# → artifacts/maven/com/myhoreca/licensing-sdk/0.1.0-preview.1/
./gradlew publishToMavenLocal

Подключите зависимость com.myhoreca:licensing-sdk:0.1.0-preview.1 из Maven Local (или file-based Maven repo на artifacts/maven).
Не считайте CI artifact стабильным публичным registry.
Публикация на Maven Central закрыта gate — см. MAVEN-PUBLISH.md.

После намеренного релиза в Maven Central:

<dependency>
<groupId>com.myhoreca</groupId>
<artifactId>licensing-sdk</artifactId>
<version>0.1.0-preview.1</version>
</dependency>

Минимальный пример

try (var client = LicensingClient.create(
LicensingClientOptions.builder()
.baseUrl("https://runtime.example")
.tenantId(tenantId)
// .licenseKey("...") // опционально — не логировать
.build())) {
var activated = client.activate(licenseId);
var validated = client.validate(ValidateRequest.builder()
.licenseId(licenseId)
.leaseToken(activated.getLeaseToken())
.build());
if (validated.isAllowed()) {
/* выдать фичу */
}
}

Также доступны: refreshLease, verifyLease (локальная ES256 через JWKS), registerDevice.

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
Activateactivate
Validatevalidate
Refresh leaserefreshLease
Register deviceregisterDevice
JWKS / verify leaseverifyLease / LeaseVerifier

Go Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-go
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока публичный version-tag / proxy.golang.org не открыт, клонируйте и пакуйте из исходников (или pin @main / replace при разработке):

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-go.git
cd myhoreca-licensing-sdk-go
pwsh ./tools/pack.ps1
# → artifacts/module/github.com/igorpooh1978/myhoreca-licensing-sdk-go/@v/v0.1.0-preview.1.zip

Не считайте CI artifact стабильным публичным module proxy.
Публикация version-tag / proxy.golang.org закрыта gate — см. MODULE-PUBLISH.md.

После намеренного tagged-релиза:

go get github.com/igorpooh1978/myhoreca-licensing-sdk-go@v0.1.0-preview.1

Минимальный пример

client, err := licensing.NewClient(licensing.Options{
BaseURL: "https://runtime.example",
TenantID: &tenantID,
// LicenseKey: "...", // опционально — не логировать
})
if err != nil { /* … */ }
defer client.Close()

activated, err := client.Activate(ctx, licenseID)
if err != nil { /* … */ }

validated, err := client.Validate(ctx, licensing.ValidateRequest{
LicenseID: &licenseID,
LeaseToken: activated.LeaseToken,
})
if err != nil { /* … */ }
if validated.Allowed() { /* выдать фичу */ }

Также доступны: RefreshLease, VerifyLease (локальная ES256 через JWKS), RegisterDevice.

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
ActivateActivate / ActivateRequest
ValidateValidate
Refresh leaseRefreshLease
Register deviceRegisterDevice
JWKS / verify leaseVerifyLease / VerifyLeaseOffline

Rust Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-rust
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока crates.io не открыт, клонируйте и пакуйте из исходников (или path / git dependency при разработке). В Cargo.toml остаётся publish = false:

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-rust.git
cd myhoreca-licensing-sdk-rust
pwsh ./tools/pack.ps1
# → artifacts/crate/myhoreca-licensing-sdk/myhoreca-licensing-sdk-0.1.0-preview.1.crate

В Cargo.toml приложения (пример path pin):

myhoreca-licensing-sdk = { path = "../myhoreca-licensing-sdk-rust" }

Не считайте CI artifact стабильным публичным registry.
Публикация на crates.io закрыта gate — см. CRATES-PUBLISH.md.

После намеренного релиза на crates.io:

myhoreca-licensing-sdk = "0.1.0-preview.1"

Минимальный пример

use myhoreca_licensing_sdk::{LicensingClient, Options, ValidateRequest};

let client = LicensingClient::new(Options {
base_url: "https://runtime.example".into(),
tenant_id: Some(tenant_id),
// license_key: Some("...".into()), // опционально — не логировать
..Default::default()
})?;

let activated = client.activate(license_id).await?;
let validated = client
.validate(ValidateRequest {
license_id: Some(license_id),
lease_token: Some(activated.lease_token.clone()),
..Default::default()
})
.await?;

if validated.is_allowed() { /* выдать фичу */ }

Также доступны: refresh_lease, verify_lease / verify_lease_offline (локальная ES256 через JWKS), register_device.

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
Activateactivate / activate_request
Validatevalidate
Refresh leaserefresh_lease
Register deviceregister_device
JWKS / verify leaseverify_lease / verify_lease_offline

C++ Quick Start

Репозиторий (Apache-2.0): myhoreca-licensing-sdk-cpp
Changelog: CHANGELOG.md
Совместимость: COMPATIBILITY.md

Установка (preview)

Пока vcpkg / Conan не открыты, клонируйте и собирайте из исходников (или локальный CMake install / pack artifact при разработке):

git clone https://github.com/igorpooh1978/myhoreca-licensing-sdk-cpp.git
cd myhoreca-licensing-sdk-cpp
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
pwsh ./tools/pack.ps1
# → artifacts/cmake-package/myhoreca-licensing-sdk/myhoreca-licensing-sdk-0.1.0-preview.1-*.zip

В CMakeLists.txt приложения (пример add_subdirectory / path pin):

add_subdirectory(../myhoreca-licensing-sdk-cpp sdk EXCLUDE_FROM_ALL)
target_link_libraries(app PRIVATE myhoreca::licensing)

Не считайте CI artifact стабильным публичным registry.
Публикация vcpkg / Conan закрыта gate — см. REGISTRY-PUBLISH.md.

После намеренного релиза в registry:

find_package(myhoreca-licensing-sdk CONFIG REQUIRED)
target_link_libraries(app PRIVATE myhoreca::licensing)

Минимальный пример

#include <myhoreca/licensing/client.hpp>

auto client = myhoreca::licensing::LicensingClient::Create({
.baseUrl = "https://runtime.example",
.tenantId = tenantId,
// .licenseKey = "...", // опционально — не логировать
});

auto activated = client->Activate(licenseId);
auto validated = client->Validate({
.licenseId = licenseId,
.leaseToken = activated.leaseToken,
});

if (validated.IsAllowed()) { /* выдать фичу */ }

Также доступны: RefreshLease, VerifyLease / VerifyLeaseOffline (локальная ES256 через JWKS), RegisterDevice.

Runnable-пример: examples/quickstart
(задайте MYHORECA_RUNTIME_BASE_URL, MYHORECA_TENANT_ID, MYHORECA_LICENSE_ID).

Поверхность Runtime (v1)

ОперацияAPI SDK
ActivateActivate / ActivateRequest
ValidateValidate
Refresh leaseRefreshLease
Register deviceRegisterDevice
JWKS / verify leaseVerifyLease / VerifyLeaseOffline

Правила

  • Ставьте пакеты только из официального публичного репозитория / одобренного registry после релиза.
  • Не вшивайте private signing keys, license keys и секреты platform.json в приложения и примеры docs.
  • Runtime-клиенты должны ходить на runtime.<domain>, а не на hostname Management UI.
  • Используйте типизированные ошибки / diagnostics; не логируйте lease token и device digest.

См. Выберите свой путь для ролей вендора и интегратора.