kdpika-licensing 1.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. kdpika_licensing-1.1.5/.gitattributes +2 -0
  2. kdpika_licensing-1.1.5/.github/ISSUE_TEMPLATE/bug_report.md +13 -0
  3. kdpika_licensing-1.1.5/.github/ISSUE_TEMPLATE/feature_request.md +9 -0
  4. kdpika_licensing-1.1.5/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  5. kdpika_licensing-1.1.5/.github/dependabot.yml +10 -0
  6. kdpika_licensing-1.1.5/.github/workflows/ci.yml +76 -0
  7. kdpika_licensing-1.1.5/.github/workflows/release.yml +65 -0
  8. kdpika_licensing-1.1.5/.pre-commit-config.yaml +13 -0
  9. kdpika_licensing-1.1.5/CHANGELOG.md +108 -0
  10. kdpika_licensing-1.1.5/CODE_OF_CONDUCT.md +10 -0
  11. kdpika_licensing-1.1.5/CONTRIBUTING.md +31 -0
  12. kdpika_licensing-1.1.5/LICENSE +21 -0
  13. kdpika_licensing-1.1.5/MANIFEST.in +12 -0
  14. kdpika_licensing-1.1.5/PKG-INFO +502 -0
  15. kdpika_licensing-1.1.5/README.md +448 -0
  16. kdpika_licensing-1.1.5/SECURITY.md +21 -0
  17. kdpika_licensing-1.1.5/docs/api.md +32 -0
  18. kdpika_licensing-1.1.5/docs/changelog.md +49 -0
  19. kdpika_licensing-1.1.5/docs/concepts.md +27 -0
  20. kdpika_licensing-1.1.5/docs/configuration.md +23 -0
  21. kdpika_licensing-1.1.5/docs/contributing.md +15 -0
  22. kdpika_licensing-1.1.5/docs/errors.md +33 -0
  23. kdpika_licensing-1.1.5/docs/faq.md +147 -0
  24. kdpika_licensing-1.1.5/docs/getting-started.md +37 -0
  25. kdpika_licensing-1.1.5/docs/guides/async.md +21 -0
  26. kdpika_licensing-1.1.5/docs/guides/backend.md +16 -0
  27. kdpika_licensing-1.1.5/docs/guides/cli.md +22 -0
  28. kdpika_licensing-1.1.5/docs/guides/desktop.md +15 -0
  29. kdpika_licensing-1.1.5/docs/index.md +15 -0
  30. kdpika_licensing-1.1.5/docs/license.md +17 -0
  31. kdpika_licensing-1.1.5/docs/migration-phase1.md +93 -0
  32. kdpika_licensing-1.1.5/docs/migration.md +23 -0
  33. kdpika_licensing-1.1.5/docs/offline.md +21 -0
  34. kdpika_licensing-1.1.5/docs/release.md +196 -0
  35. kdpika_licensing-1.1.5/docs/security.md +25 -0
  36. kdpika_licensing-1.1.5/docs/storage.md +26 -0
  37. kdpika_licensing-1.1.5/docs/upgrading.md +13 -0
  38. kdpika_licensing-1.1.5/examples/README.md +28 -0
  39. kdpika_licensing-1.1.5/examples/_common.py +60 -0
  40. kdpika_licensing-1.1.5/examples/async_usage.py +27 -0
  41. kdpika_licensing-1.1.5/examples/backend_flask.py +42 -0
  42. kdpika_licensing-1.1.5/examples/basic.py +12 -0
  43. kdpika_licensing-1.1.5/examples/errors.py +27 -0
  44. kdpika_licensing-1.1.5/examples/features.py +24 -0
  45. kdpika_licensing-1.1.5/examples/members.py +16 -0
  46. kdpika_licensing-1.1.5/examples/offline.py +20 -0
  47. kdpika_licensing-1.1.5/examples/pyqt_activation.py +18 -0
  48. kdpika_licensing-1.1.5/examples/session.py +28 -0
  49. kdpika_licensing-1.1.5/mkdocs.yml +53 -0
  50. kdpika_licensing-1.1.5/pyproject.toml +80 -0
  51. kdpika_licensing-1.1.5/release-config.json +10 -0
  52. kdpika_licensing-1.1.5/setup.cfg +4 -0
  53. kdpika_licensing-1.1.5/setup.py +4 -0
  54. kdpika_licensing-1.1.5/src/kdpika_licensing/__init__.py +25 -0
  55. kdpika_licensing-1.1.5/src/kdpika_licensing/_json.py +102 -0
  56. kdpika_licensing-1.1.5/src/kdpika_licensing/_storage.py +303 -0
  57. kdpika_licensing-1.1.5/src/kdpika_licensing/_transport.py +155 -0
  58. kdpika_licensing-1.1.5/src/kdpika_licensing/_verification.py +85 -0
  59. kdpika_licensing-1.1.5/src/kdpika_licensing/_version.py +3 -0
  60. kdpika_licensing-1.1.5/src/kdpika_licensing/async_client.py +110 -0
  61. kdpika_licensing-1.1.5/src/kdpika_licensing/client.py +552 -0
  62. kdpika_licensing-1.1.5/src/kdpika_licensing/errors.py +76 -0
  63. kdpika_licensing-1.1.5/src/kdpika_licensing/models.py +160 -0
  64. kdpika_licensing-1.1.5/src/kdpika_licensing/py.typed +0 -0
  65. kdpika_licensing-1.1.5/src/kdpika_licensing/ui.py +111 -0
  66. kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/PKG-INFO +502 -0
  67. kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/SOURCES.txt +126 -0
  68. kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/dependency_links.txt +1 -0
  69. kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/requires.txt +40 -0
  70. kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/top_level.txt +2 -0
  71. kdpika_licensing-1.1.5/src/license_sdk/__init__.py +28 -0
  72. kdpika_licensing-1.1.5/src/license_sdk/client.py +5 -0
  73. kdpika_licensing-1.1.5/src/license_sdk/errors.py +17 -0
  74. kdpika_licensing-1.1.5/src/license_sdk/models.py +5 -0
  75. kdpika_licensing-1.1.5/src/license_sdk/storage.py +10 -0
  76. kdpika_licensing-1.1.5/src/license_sdk/transport.py +5 -0
  77. kdpika_licensing-1.1.5/src/license_sdk/ui.py +5 -0
  78. kdpika_licensing-1.1.5/tests/conftest.py +43 -0
  79. kdpika_licensing-1.1.5/tests/fixtures/vectors/array-payload.envelope.json +1 -0
  80. kdpika_licensing-1.1.5/tests/fixtures/vectors/conformance.key.json +1 -0
  81. kdpika_licensing-1.1.5/tests/fixtures/vectors/depth-limit.envelope.json +1 -0
  82. kdpika_licensing-1.1.5/tests/fixtures/vectors/duplicate-property.envelope.json +1 -0
  83. kdpika_licensing-1.1.5/tests/fixtures/vectors/escaped-duplicate.envelope.json +1 -0
  84. kdpika_licensing-1.1.5/tests/fixtures/vectors/expired.envelope.json +1 -0
  85. kdpika_licensing-1.1.5/tests/fixtures/vectors/expired.key.json +1 -0
  86. kdpika_licensing-1.1.5/tests/fixtures/vectors/index.json +1 -0
  87. kdpika_licensing-1.1.5/tests/fixtures/vectors/integral-float.envelope.json +1 -0
  88. kdpika_licensing-1.1.5/tests/fixtures/vectors/integral-float.key.json +1 -0
  89. kdpika_licensing-1.1.5/tests/fixtures/vectors/invalid-unicode.envelope.json +1 -0
  90. kdpika_licensing-1.1.5/tests/fixtures/vectors/key-order.envelope.json +1 -0
  91. kdpika_licensing-1.1.5/tests/fixtures/vectors/missing-payload.envelope.json +1 -0
  92. kdpika_licensing-1.1.5/tests/fixtures/vectors/nested.envelope.json +1 -0
  93. kdpika_licensing-1.1.5/tests/fixtures/vectors/normalization.envelope.json +1 -0
  94. kdpika_licensing-1.1.5/tests/fixtures/vectors/numbers.envelope.json +1 -0
  95. kdpika_licensing-1.1.5/tests/fixtures/vectors/padded-signature.envelope.json +1 -0
  96. kdpika_licensing-1.1.5/tests/fixtures/vectors/positive.envelope.json +1 -0
  97. kdpika_licensing-1.1.5/tests/fixtures/vectors/positive.key.json +1 -0
  98. kdpika_licensing-1.1.5/tests/fixtures/vectors/replacement-invalid-utf8.envelope.json +1 -0
  99. kdpika_licensing-1.1.5/tests/fixtures/vectors/replacement-surrogate.envelope.json +1 -0
  100. kdpika_licensing-1.1.5/tests/fixtures/vectors/short-signature.envelope.json +1 -0
  101. kdpika_licensing-1.1.5/tests/fixtures/vectors/tampered.envelope.json +1 -0
  102. kdpika_licensing-1.1.5/tests/fixtures/vectors/tampered.key.json +1 -0
  103. kdpika_licensing-1.1.5/tests/fixtures/vectors/trailing-content.envelope.json +1 -0
  104. kdpika_licensing-1.1.5/tests/fixtures/vectors/unicode.envelope.json +1 -0
  105. kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-algorithm.envelope.json +1 -0
  106. kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key-id.envelope.json +1 -0
  107. kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key.envelope.json +1 -0
  108. kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key.key.json +1 -0
  109. kdpika_licensing-1.1.5/tests/installed_examples_smoke.py +46 -0
  110. kdpika_licensing-1.1.5/tests/installed_smoke.py +133 -0
  111. kdpika_licensing-1.1.5/tests/live_acceptance.py +63 -0
  112. kdpika_licensing-1.1.5/tests/test_boundaries.py +184 -0
  113. kdpika_licensing-1.1.5/tests/test_conformance.py +103 -0
  114. kdpika_licensing-1.1.5/tests/test_dependency_audit.py +54 -0
  115. kdpika_licensing-1.1.5/tests/test_documentation.py +74 -0
  116. kdpika_licensing-1.1.5/tests/test_examples.py +91 -0
  117. kdpika_licensing-1.1.5/tests/test_live_sandbox.py +42 -0
  118. kdpika_licensing-1.1.5/tests/test_network_guard.py +27 -0
  119. kdpika_licensing-1.1.5/tests/test_optional_ui.py +56 -0
  120. kdpika_licensing-1.1.5/tests/test_release_tooling.py +144 -0
  121. kdpika_licensing-1.1.5/tests/test_sdk.py +248 -0
  122. kdpika_licensing-1.1.5/tests/test_security.py +390 -0
  123. kdpika_licensing-1.1.5/tests/test_storage.py +256 -0
  124. kdpika_licensing-1.1.5/tests/test_transport.py +169 -0
  125. kdpika_licensing-1.1.5/tools/audit_dependencies.py +89 -0
  126. kdpika_licensing-1.1.5/tools/release_gate.py +68 -0
  127. kdpika_licensing-1.1.5/tools/verify_artifacts.py +124 -0
  128. kdpika_licensing-1.1.5/tox.ini +23 -0
@@ -0,0 +1,2 @@
1
+ # Keep approved text bytes identical across Windows, macOS and Linux checkouts.
2
+ * text=auto eol=lf
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: SDK bug report
3
+ about: Reproduce a Python SDK problem without sensitive data
4
+ ---
5
+ ## Runtime and SDK version
6
+ Python / OS / SDK version:
7
+
8
+ ## Synthetic reproduction
9
+ Expected vs actual behavior; include safe error code/request_id only.
10
+
11
+ ## Checklist
12
+ - [ ] No license keys, tokens, customer payloads or private files attached.
13
+ - [ ] Security vulnerabilities reported privately to hi@kdpika.com instead.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: Feature request
3
+ about: Describe a concrete SDK integration need
4
+ ---
5
+ ## Use case
6
+ What software/workflow needs this?
7
+
8
+ ## Proposed behavior and security/compatibility impact
9
+ Do not post credentials or customer data.
@@ -0,0 +1,7 @@
1
+ ## Change and reason
2
+ ## Tests actually run (OS/Python/results)
3
+ ## Compatibility and security
4
+ - [ ] API-v1 signing/state semantics preserved or migration documented.
5
+ - [ ] Regression/example tests added where appropriate.
6
+ - [ ] No secrets/customer data.
7
+ - [ ] No unapproved publishing/tag/push or hosted download changes.
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ - package-ecosystem: github-actions
8
+ directory: /
9
+ schedule:
10
+ interval: weekly
@@ -0,0 +1,76 @@
1
+ name: Python SDK checks
2
+ on:
3
+ push:
4
+ branches: ["main"]
5
+ pull_request:
6
+ workflow_call:
7
+ permissions:
8
+ contents: read
9
+ jobs:
10
+ tests:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ # Use the independent Intel pool after repeated arm64 acquisition failures.
15
+ os: [ubuntu-latest, macos-15-intel, windows-latest]
16
+ python: ["3.11", "3.12", "3.13", "3.14"]
17
+ runs-on: ${{ matrix.os }}
18
+ timeout-minutes: 15
19
+ steps:
20
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
21
+ with:
22
+ persist-credentials: false
23
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
24
+ with:
25
+ python-version: ${{ matrix.python }}
26
+ - name: Prepare native macOS cryptography build
27
+ if: runner.os == 'macOS'
28
+ env:
29
+ HOMEBREW_NO_AUTO_UPDATE: "1"
30
+ run: |
31
+ brew install openssl@3
32
+ rustc --version
33
+ echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> "$GITHUB_ENV"
34
+ - run: python -m pip install --upgrade "pip>=26.2.1,<27"
35
+ - run: python -m pip install ".[test]"
36
+ - run: python -m pytest --cov --cov-report=xml --cov-report=term-missing
37
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
38
+ with:
39
+ name: coverage-${{ matrix.os }}-${{ matrix.python }}
40
+ path: coverage.xml
41
+ if-no-files-found: error
42
+ quality:
43
+ runs-on: ubuntu-latest
44
+ timeout-minutes: 15
45
+ steps:
46
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
47
+ with:
48
+ persist-credentials: false
49
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
50
+ with:
51
+ python-version: "3.13"
52
+ - run: python -m pip install --upgrade "pip>=26.2.1,<27"
53
+ - run: python -m pip install ".[dev,docs,test]"
54
+ - run: ruff check src tests tools examples
55
+ - run: ruff format --check src tests tools examples
56
+ - run: mypy --strict src
57
+ - run: mkdocs build --strict
58
+ - run: python -m build
59
+ - run: python -m twine check dist/*
60
+ - run: python tools/verify_artifacts.py
61
+ - run: python tools/audit_dependencies.py
62
+ - run: python tools/audit_dependencies.py --tooling
63
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
64
+ with:
65
+ name: python-distributions
66
+ path: dist/*
67
+ if-no-files-found: error
68
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
69
+ with:
70
+ name: candidate-docs-and-evidence
71
+ path: |
72
+ site/
73
+ docs/internal/artifact-verification-release.json
74
+ docs/internal/dependency-audit-release.json
75
+ docs/internal/dependency-audit-tooling-release.json
76
+ if-no-files-found: error
@@ -0,0 +1,65 @@
1
+ name: Publish owner-approved SDK
2
+ on:
3
+ push:
4
+ tags: ["v*"]
5
+ permissions:
6
+ contents: read
7
+ jobs:
8
+ prepare:
9
+ runs-on: ubuntu-latest
10
+ outputs:
11
+ prerelease: ${{ steps.version.outputs.prerelease }}
12
+ steps:
13
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
14
+ with:
15
+ persist-credentials: false
16
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
17
+ with:
18
+ python-version: "3.13"
19
+ - run: python -m pip install "packaging>=25,<27"
20
+ - name: Validate owner decisions and exact tag
21
+ env:
22
+ RELEASE_TAG: ${{ github.ref_name }}
23
+ RELEASE_REPOSITORY: ${{ github.repository }}
24
+ run: python tools/release_gate.py --tag "$RELEASE_TAG" --repository "$RELEASE_REPOSITORY"
25
+ - id: version
26
+ run: |
27
+ python -c "from tools.release_gate import version; print('prerelease=' + str(version().is_prerelease).lower())" >> "$GITHUB_OUTPUT"
28
+ verify:
29
+ needs: prepare
30
+ uses: ./.github/workflows/ci.yml
31
+ permissions:
32
+ contents: read
33
+ testpypi:
34
+ needs: [prepare, verify]
35
+ if: needs.prepare.outputs.prerelease == 'true'
36
+ runs-on: ubuntu-latest
37
+ environment: testpypi
38
+ permissions:
39
+ contents: read
40
+ id-token: write
41
+ steps:
42
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
43
+ with:
44
+ name: python-distributions
45
+ path: dist/
46
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
47
+ with:
48
+ repository-url: https://test.pypi.org/legacy/
49
+ packages-dir: dist/
50
+ pypi:
51
+ needs: [prepare, verify]
52
+ if: needs.prepare.outputs.prerelease == 'false'
53
+ runs-on: ubuntu-latest
54
+ environment: pypi
55
+ permissions:
56
+ contents: read
57
+ id-token: write
58
+ steps:
59
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
60
+ with:
61
+ name: python-distributions
62
+ path: dist/
63
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
64
+ with:
65
+ packages-dir: dist/
@@ -0,0 +1,13 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ - id: ruff
5
+ name: ruff
6
+ entry: ruff check
7
+ language: system
8
+ types: [python]
9
+ - id: ruff-format
10
+ name: ruff-format
11
+ entry: ruff format --check
12
+ language: system
13
+ types: [python]
@@ -0,0 +1,108 @@
1
+ # Changelog
2
+
3
+ Notable changes follow Keep a Changelog categories. API v1 and SDK package
4
+ versions are independent. Registry availability is recorded on PyPI; a source
5
+ changelog entry is not proof of publication.
6
+
7
+ ## [1.1.5] — 2026-10-20
8
+
9
+ ### Changed
10
+
11
+ - Use GitHub's supported Intel macOS runner pool after arm64 jobs repeatedly
12
+ failed to acquire runners. Build the same cryptography dependency with Rust
13
+ and OpenSSL 3; retain all Python 3.11–3.14 tests, audits and publication gates.
14
+ No SDK runtime logic or dependency-version changes.
15
+
16
+ ## [1.1.4] — unpublished release preparation, 2026-10-20
17
+
18
+ ### Fixed
19
+
20
+ - Audit exact installed third-party distributions (including transitive dependencies)
21
+ without looking up the unpublished SDK candidate on PyPI. Record that scope in
22
+ audit evidence; vulnerabilities, collection failures and service errors still block
23
+ publication. SDK runtime and all protected publication gates are unchanged.
24
+
25
+ ## [1.1.3] — unpublished release preparation, 2026-10-20
26
+
27
+ ### Changed
28
+
29
+ - Pin native macOS CI to the supported `macos-15` arm64 image after repeated
30
+ `macos-latest` runner-acquisition failures. All Python 3.11–3.14 checks and
31
+ protected OIDC publication gates remain required; SDK runtime is unchanged.
32
+ - Preserve previous unpublished tags instead of rewriting release history.
33
+
34
+ ## [1.1.1] — unpublished release preparation, 2026-10-20
35
+
36
+ ### Fixed
37
+
38
+ - Pin Git text checkouts to LF so the approved MIT license retains the same
39
+ SHA-256 on Windows, macOS and Linux. No license bytes or SDK logic changed.
40
+ - Supersedes the blocked, unpublished `v1.1.0` release attempt; that tag is
41
+ preserved rather than rewritten. This source entry is not upload evidence.
42
+
43
+ ## [1.1.0] — unpublished release preparation, 2026-10-20
44
+
45
+ ### Fixed
46
+
47
+ - Make the test harness portable to Windows: bounded parametrized case names,
48
+ POSIX-only permission assertions and asyncio's private socketpair wake-up path.
49
+ Ordinary test network connections remain blocked. SDK runtime is unchanged.
50
+ - Preserve signed JSON wire number tokens through HTTP/cache round trips and
51
+ escape U+2028/U+2029; strict duplicate/UTF-8/base64url/depth/size checks.
52
+ - Gate feature helpers on a verified valid current result, including expiry,
53
+ signed grace, binding and clock failures; no enabling failure defaults.
54
+ - Bound HTTPS requests and public-key GET retries; refuse redirects and
55
+ never retry uncertain activation/deactivation POSTs.
56
+ - Validate signed timestamps and key-derived IDs; pinned keys never rotate
57
+ silently. Safe upstream messages and repr without payload/credential values.
58
+ - Atomic private version-1 storage, bounded process/thread locks, no new identity
59
+ after corruption, and explicit keyring failure/fallback behavior.
60
+
61
+ ### Added
62
+
63
+ - `kdpika_licensing` public package and an async adapter using the same core.
64
+ - Strict typing, py.typed, shared PHP-signed fixtures, regression/property tests,
65
+ ruff/mypy/pytest/tox tooling and a Phase 1 migration/security audit.
66
+ - Complete candidate README with 35 FAQ entries, source-generated API reference,
67
+ strict-build MkDocs guides, safe runnable Sandbox examples and example/doctest checks.
68
+ - Project security/contribution/conduct policies and version-derived artifact checks.
69
+ - SHA-pinned dedicated-repository CI templates (12 OS/Python combinations) and
70
+ OIDC TestPyPI/PyPI release routing; owner/repository/tag/license gates stay closed.
71
+ - Separate installed-base and dedicated-tooling advisory audits; require pytest
72
+ 9.0.3+ after the initial tooling audit found the old temporary-directory advisory.
73
+
74
+ ### Changed
75
+
76
+ - Owner-selected MIT License for this Python SDK and its documentation; no
77
+ grant to the separately hosted platform/backend or service access.
78
+
79
+ - Candidate distribution `kdpika-licensing`; `license_sdk` remains a deprecated
80
+ compatibility shim. Storage namespace, filenames and keyring service unchanged.
81
+ - Candidate Python support 3.11–3.14; local loopback HTTP needs explicit opt-in.
82
+ - Inconsistent pinned IDs are now configuration errors before any HTTP call.
83
+ - Require cryptography 50.0.2+ (below 51) after dependency auditing; upstream
84
+ no longer supplies Intel macOS or 32-bit Windows wheels. Native compatibility
85
+ beyond the executed arm64 macOS matrix remains unverified.
86
+
87
+ ### Release verification
88
+
89
+ The owner approved publication and configured PyPI Trusted Publishing for
90
+ `kdpika/kdpika-licensing`, `release.yml`, environment `pypi`. Uploads remain
91
+ conditional on successful release checks and the protected environment review.
92
+ Native Qt, OS keyring and packaged-app acceptance are separate from core CI.
93
+
94
+ ## 1.0.0 — observed current source, 2026-10-17
95
+
96
+ This is the version recorded in current package/project metadata (PHP uses the
97
+ existing versioned download label). It is not a reconstructed original release
98
+ date, a published registry release or an invented earlier-version history.
99
+
100
+ - Added complete source-install, lifecycle, storage/offline and known-limit
101
+ documentation, license-information notice and runnable example links.
102
+ - Preserved runtime implementation, public APIs, response handling and package
103
+ identity. Documentation changes do not silently fix known signing/cache gaps.
104
+ - PHP includes a new package-local standalone test entry; its legacy repository
105
+ test remains unchanged and still assumes the repository-root autoload layout.
106
+
107
+ Future entries must identify the exact version, verified changes, compatibility
108
+ impact and tests. API v1 and SDK package versions are independent.
@@ -0,0 +1,10 @@
1
+ # Community conduct
2
+
3
+ Treat contributors and users respectfully. No harassment, discriminatory abuse,
4
+ threats, doxxing or publication of private customer/credential information.
5
+ Discuss code and evidence constructively; respect different experience levels.
6
+
7
+ Report conduct concerns privately to hi@kdpika.com. Maintainers may remove
8
+ harmful content or restrict participation proportionately and review context.
9
+ This project does not claim adoption of an external trademarked policy or a
10
+ response-time guarantee. Security vulnerabilities follow SECURITY.md instead.
@@ -0,0 +1,31 @@
1
+ # Contributing
2
+
3
+ The public SDK repository is https://github.com/kdpika/kdpika-licensing.
4
+ It does not contain the separately hosted platform/backend. Contact
5
+ hi@kdpika.com if needed; report security issues privately using SECURITY.md.
6
+
7
+ From the SDK root in a private active virtualenv:
8
+ ~~~bash
9
+ python -m pip install -e '.[dev,docs,test]'
10
+ ruff check src tests tools examples
11
+ ruff format --check src tests tools examples
12
+ mypy --strict src
13
+ python -m pytest --cov
14
+ tox -e py311,py312,py313,py314
15
+ mkdocs build --strict
16
+ python -m build
17
+ python -m twine check dist/*
18
+ python tools/verify_artifacts.py
19
+ python tools/audit_dependencies.py
20
+ python tools/audit_dependencies.py --tooling
21
+ ~~~
22
+
23
+ Use synthetic fixtures and ephemeral test keys only. Default tests cannot open
24
+ sockets; optional live Sandbox tests need explicit opt-in. Preserve API-v1
25
+ shapes/signing/state semantics, add regressions and document compatibility
26
+ changes. Do not update hosted downloads or publish/tag/push without owner approval.
27
+
28
+ Local pre-commit hooks require Ruff on PATH; running pre-commit install is an
29
+ optional developer action, not performed automatically. Follow CODE_OF_CONDUCT.md.
30
+ Contributions must be compatible with the project's MIT License. Only submit
31
+ code and documentation you have permission to share; no separate CLA is imposed.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 KHALED AL HARAZI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,12 @@
1
+ include LICENSE README.md CHANGELOG.md pyproject.toml setup.py tox.ini .pre-commit-config.yaml
2
+ include SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md mkdocs.yml release-config.json
3
+ include .gitattributes
4
+ recursive-include docs *.md
5
+ prune docs/internal
6
+ recursive-include examples *.py *.md
7
+ recursive-include tools *.py
8
+ recursive-include .github *.yml *.md
9
+ recursive-include src *.py py.typed
10
+ recursive-include tests *.py *.json
11
+ global-exclude .DS_Store *.pyc
12
+ prune tests/__pycache__