diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 56c1661b0..fa7ff7af3 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -2,73 +2,132 @@
## Our Pledge
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, gender identity and expression, level of experience,
-nationality, personal appearance, race, religion, or sexual identity and
-orientation.
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
## Our Standards
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contributes to a positive environment for our
+community include:
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the overall
+ community
-Examples of unacceptable behavior by participants include:
+Examples of unacceptable behavior include:
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
+* The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
+* Publishing others' private information, such as a physical or email address,
+ without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
-## Our Responsibilities
+## Enforcement Responsibilities
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
## Scope
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting one of the project maintainers https://github.com/orgs/space-code/people. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
+reported to the community leaders responsible for enforcement at
+nv3212@gmail.com.
+
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
## Attribution
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at [http://contributor-covenant.org/version/1/4][version]
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/4/
\ No newline at end of file
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d6e29ff27..03000cfdb 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,149 +1,665 @@
-# Contributing Guidelines
+# Contributing to Flare
+
+First off, thank you for considering contributing to Flare! It's people like you that make Flare such a great tool for working with in-app purchases.
+
+## Table of Contents
+
+- [Code of Conduct](#code-of-conduct)
+- [Getting Started](#getting-started)
+ - [Development Setup](#development-setup)
+- [How Can I Contribute?](#how-can-i-contribute)
+ - [Reporting Bugs](#reporting-bugs)
+ - [Suggesting Features](#suggesting-features)
+ - [Improving Documentation](#improving-documentation)
+ - [Submitting Code](#submitting-code)
+- [Development Workflow](#development-workflow)
+ - [Branching Strategy](#branching-strategy)
+ - [Commit Guidelines](#commit-guidelines)
+ - [Pull Request Process](#pull-request-process)
+- [Coding Standards](#coding-standards)
+ - [Swift Style Guide](#swift-style-guide)
+ - [Code Quality](#code-quality)
+ - [Testing Requirements](#testing-requirements)
+- [Community](#community)
+
+## Code of Conduct
+
+This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to nv3212@gmail.com.
+
+## Getting Started
+
+### Development Setup
+
+1. **Fork the repository**
+ ```bash
+ # Click the "Fork" button on GitHub
+ ```
+
+2. **Clone your fork**
+ ```bash
+ git clone https://github.com/YOUR_USERNAME/flare.git
+ cd flare
+ ```
+
+3. **Set up the development environment**
+ ```bash
+ # Install mise (if not already installed)
+ curl https://mise.run | sh
+
+ # Install project dependencies
+ mise install
+ ```
+
+4. **Create a feature branch**
+ ```bash
+ git checkout -b feature/your-feature-name
+ ```
+
+5. **Open the project in Xcode**
+ ```bash
+ open Package.swift
+ ```
+
+## How Can I Contribute?
+
+### Reporting Bugs
+
+Before creating a bug report, please check the [existing issues](https://github.com/space-code/flare/issues) to avoid duplicates.
+
+When creating a bug report, use our [bug report template](.github/ISSUE_TEMPLATE/bug_report.md) and include:
+
+- **Clear title** - Describe the issue concisely
+- **Reproduction steps** - Detailed steps to reproduce the bug
+- **Expected behavior** - What you expected to happen
+- **Actual behavior** - What actually happened
+- **Environment** - OS, Xcode version, Swift version, StoreKit version
+- **Code samples** - Minimal reproducible example
+- **Console logs** - Relevant error messages or logs
+- **Screenshots** - If applicable (especially for UI issues)
+
+**Example:**
+```markdown
+**Title:** Purchase completion handler not called for cancelled transactions
+
+**Steps to reproduce:**
+1. Call Flare.shared.purchase(product: product)
+2. Cancel the purchase dialog
+3. Completion handler is never invoked
+
+**Expected:** Completion called with .cancelled result
+**Actual:** No callback, causing UI to hang
+
+**Environment:**
+- iOS 17.0
+- Xcode 15.3
+- Flare 3.1.0
+- Testing on physical device (iPhone 15 Pro)
+```
+
+### Suggesting Features
+
+We love feature suggestions! Use our [feature request template](.github/ISSUE_TEMPLATE/feature_request.md) and include:
+
+- **Problem statement** - What problem does this solve?
+- **Proposed solution** - How should it work?
+- **Alternatives** - What alternatives did you consider?
+- **Use cases** - Real-world scenarios where this would be useful
+- **API design** - Example code showing proposed usage
+- **StoreKit compatibility** - Consider both StoreKit 1 and 2
+
+**Example:**
+```markdown
+**Problem:** Difficult to track subscription renewal dates
+
+**Proposed solution:**
+Add a method to get the next renewal date for active subscriptions:
+```swift
+let renewalDate = try await Flare.shared.renewalDate(for: subscription)
+```
+
+**Use cases:**
+- Display "Next billing date" in subscription management UI
+- Send reminders before renewal
+- Analytics on subscription lifecycle
+```
+
+### Improving Documentation
+
+Documentation improvements are always welcome:
+
+- **Code comments** - Add/improve inline documentation
+- **API documentation** - Enhance DocC documentation
+- **README** - Fix typos, add examples, improve clarity
+- **Guides** - Write tutorials or how-to guides
+- **Code examples** - Add sample code for common use cases
+- **Translations** - Help translate documentation
+
+Use our [documentation template](.github/ISSUE_TEMPLATE/documentation.md) for documentation issues.
+
+### Submitting Code
+
+1. **Check existing work** - Look for related issues or PRs
+2. **Discuss major changes** - Open an issue for large features
+3. **Follow coding standards** - See [Coding Standards](#coding-standards)
+4. **Write tests** - All code changes require tests
+5. **Update documentation** - Keep docs in sync with code
+6. **Test on devices** - Test purchases on physical devices when possible
+7. **Create a pull request** - Use our [PR template](.github/PULL_REQUEST_TEMPLATE.md)
+
+## Development Workflow
+
+### Branching Strategy
+
+We follow a simplified Git Flow:
+
+- **`main`** - Main development branch (default, all PRs target this branch)
+- **`feature/*`** - New features
+- **`fix/*`** - Bug fixes
+- **`docs/*`** - Documentation updates
+- **`refactor/*`** - Code refactoring
+- **`test/*`** - Test improvements
+
+**Branch naming examples:**
+```bash
+feature/promotional-offers-support
+fix/transaction-finish-callback
+docs/update-swiftui-examples
+refactor/storekit2-implementation
+test/add-subscription-tests
+```
+
+### Commit Guidelines
+
+We use [Conventional Commits](https://www.conventionalcommits.org/) for clear, structured commit history.
+
+**Format:**
+```
+():
+
+
+
+
## Description
-Flare is a framework written in Swift that makes it easy for you to work with in-app purchases and subscriptions.
-- [Features](#features)
-- [Usage](#usage)
-- [Documentation](#documentation)
+Flare is a modern, lightweight Swift framework that simplifies working with in-app purchases and subscriptions. Built on top of StoreKit and StoreKit 2, it provides a clean, unified API with async/await support and includes ready-to-use UI components for seamless integration across all Apple platforms.
+
+## ✨ Features
+
+- 🛍️ **Complete Purchase Support** - Consumable, non-consumable, and subscription purchases
+- 🎁 **Promotional Offers** - Support for promotional and introductory offers
+- ⚡ **Modern Swift** - Built with async/await for clean, readable code
+- 🔄 **StoreKit 1 & 2** - Unified API supporting both StoreKit versions
+- 🎨 **UI Components** - Pre-built SwiftUI and UIKit views for product displays
+- 📱 **Cross-Platform** - iOS, tvOS, watchOS, macOS, and visionOS compatible
+- 🧪 **Thoroughly Tested** - Complete unit, integration, and snapshot test coverage
+- 📦 **Zero Dependencies** - Lightweight with no external dependencies
+
+## 📋 Table of Contents
+
- [Requirements](#requirements)
- [Installation](#installation)
-- [Communication](#communication)
+- [Quick Start](#quick-start)
+- [Usage](#usage)
+ - [Fetching Products](#fetching-products)
+ - [Making Purchases](#making-purchases)
+ - [Managing Subscriptions](#managing-subscriptions)
+ - [Handling Transactions](#handling-transactions)
+ - [Promotional Offers](#promotional-offers)
+- [FlareUI](#flareui)
+ - [SwiftUI Integration](#swiftui-integration)
+ - [UIKit Integration](#uikit-integration)
+- [Documentation](#documentation)
- [Contributing](#contributing)
-- [Have a Question](#have-a-question)
-- [Author](#author)
- [License](#license)
-## Features
-- [x] Support Consumable & Non-Consumable Purchases
-- [x] Support Subscription Purchase
-- [x] Support Promotional & Introductory Offers
-- [x] Support StoreKit and StoreKit 2
-- [x] iOS, tvOS, watchOS, macOS, and visionOS compatible
-- [x] Complete Unit, Integration & Snapshot Test Coverage
-- [x] Offer a UI for building in-app purchase stores in SwiftUI and UIKit
+## 📱 Requirements
-## Usage
+| Package | Supported Platforms | Xcode | Minimum Swift Version |
+|---------|-------------------|-------|----------------------|
+| **Flare** | iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 7.0+ / visionOS 1.0+ | 15.3+ | 5.10 |
+| **FlareUI** | iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ | 15.3+ | 5.10 |
+
+## 🚀 Installation
+
+### Swift Package Manager
+
+Add the following dependency to your `Package.swift`:
+
+```swift
+dependencies: [
+ .package(url: "https://github.com/space-code/flare.git", .upToNextMajor(from: "3.1.0"))
+]
+```
+
+**Or via Xcode:**
+
+1. File > Add Package Dependencies
+2. Enter package URL: `https://github.com/space-code/flare.git`
+3. Select version requirements
+
+The package contains two libraries:
+- **Flare** - Core in-app purchase functionality
+- **FlareUI** - Ready-to-use UI components for SwiftUI and UIKit
+
+## Quick Start
-### Quick Start
```swift
import Flare
-/// Fetch a product with the given id
-guard let product = try await Flare.shared.products(productIDs: ["product_identifier"]) else { return }
+// Fetch products
+let products = try await Flare.shared.fetch(productIDs: ["premium_monthly"])
-/// Purchase a product
-let transaction = try await Flare.shared.purchase(product: product)
+// Purchase a product
+let transaction = try await Flare.shared.purchase(product: products.first!)
-/// Finish a transaction
+// Finish the transaction
Flare.shared.finish(transaction: transaction, completion: nil)
```
-## Documentation
-Check out the [documentation](https://space-code.github.io/flare/).
+## Usage
+
+### Fetching Products
-- [**Flare Docs**](https://space-code.github.io/flare/flare/documentation/flare/) describe how to integrate the main framework
-- [**FlareUI Docs**](https://space-code.github.io/flare/flareui/documentation/flareui/) contains information about integrating the UI framework, displaying products and subscriptions, and customizing them.
+Retrieve product information from the App Store:
-## Requirements
+```swift
+import Flare
-| Package | Supported Platforms | XCode | Minimum Swift Version |
-| ------------- | --------------------------------------------------------------------- | ----- | --------------------- |
-| Flare | iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 7.0+ / visionOS 1.0+ | 15.3 | 5.9 |
-| FlareUI | iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ | 15.3 | 5.9 |
+// Fetch single product
+let productIDs = ["com.app.premium"]
+let products = try await Flare.shared.fetch(productIDs: productIDs)
-## Installation
-### Swift Package Manager
+// Fetch multiple products
+let subscriptionIDs = [
+ "com.app.monthly",
+ "com.app.yearly",
+ "com.app.lifetime"
+]
+let subscriptions = try await Flare.shared.fetch(productIDs: subscriptionIDs)
+
+// Access product details
+for product in products {
+ print("Product: \(product.localizedTitle)")
+ print("Price: \(product.localizedPriceString)")
+ print("Description: \(product.localizedDescription)")
+}
+```
-The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. It is in early development, but `flare` does support its use on supported platforms.
+### Making Purchases
-Once you have your Swift package set up, adding `flare` as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
+Handle purchases with simple async/await syntax:
```swift
-dependencies: [
- .package(url: "https://github.com/space-code/flare.git", .upToNextMajor(from: "3.1.0"))
-]
+import Flare
+
+ func purchasePremium() async throws {
+ let productID = "com.app.premium"
+
+ let products = try await Flare.shared.fetch(productIDs: [productID])
+
+ guard let product = products.first else {
+ throw IAPError.storeProductNotAvailable
+ }
+
+ do {
+ let transaction = try await Flare.shared.purchase(product: product)
+ await unlockPremiumFeatures()
+ Flare.shared.finish(transaction: transaction, completion: nil)
+ } catch {
+ guard let error = error as? IAPError else { return }
+
+ switch error {
+ case .paymentCancelled:
+ print("❌ User cancelled the purchase")
+ default:
+ print("❌ Purchase failed: \(error)")
+ }
+ }
+}
```
-## Communication
-- If you **found a bug**, open an issue.
-- If you **have a feature request**, open an issue.
-- If you **want to contribute**, submit a pull request.
+### Managing Subscriptions
-## Contributing
-Bootstrapping development environment
+Work with subscription products and their states:
+```swift
+import Flare
+
+func purchaseSubscription(product: StoreProduct) async throws {
+ do {
+ let transaction = try await Flare.shared.purchase(product: product)
+ Flare.shared.finish(transaction: transaction, completion: nil)
+ } catch {
+ guard let error = error as? IAPError else { return }
+ // Handle the error
+ }
+}
```
-mise install
+
+### Handling Transactions
+
+Manage transaction lifecycle:
+
+```swift
+import Flare
+
+// Finish a transaction after delivering content
+func completeTransaction(_ transaction: Transaction) {
+ Flare.shared.finish(transaction: transaction) {
+ print("✅ Transaction completed successfully")
+ }
+}
+
+// Restore previous purchases
+func restorePurchases() async throws {
+ do {
+ try await Flare.shared.restore()
+ print("✅ Purchases restored successfully")
+ } catch {
+ print("❌ Failed to restore purchases: \(error)")
+ }
+}
+
+// Listen for transaction updates
+func observeTransactions() {
+ Flare.shared.addTransactionObserver { result in
+ switch result {
+ case let .success(transaction):
+ handleTransaction(transaction)
+ case let .failure(error):
+ print("Transaction error: \(error)")
+ }
+ }
+}
```
-Please feel free to help out with this project! If you see something that could be made better or want a new feature, open up an issue or send a Pull Request!
+### Promotional Offers
+
+Support promotional and introductory offers:
+
+```swift
+import Flare
+
+func purchaseWithOffer(product: StoreProduct, offer: PromotionalOffer) async throws {
+ do {
+ let transaction = try await Flare.shared.purchase(
+ product: product,
+ promotionalOffer: offer
+ )
+
+ print("✅ Purchased with promotional offer!")
+ Flare.shared.finish(transaction: transaction, completion: nil)
+ } catch {
+ guard let error = error as? IAPError else { return }
+ // Handle the error
+ }
+}
+```
-## Have a Question?
+## 🎨 FlareUI
-Contact us via [issues on GitHub](https://github.com/space-code/flare/issues).
+FlareUI provides ready-to-use UI components for displaying products and handling purchases in both SwiftUI and UIKit.
+
+### SwiftUI Integration
+
+Display products with built-in SwiftUI views:
+
+```swift
+import SwiftUI
+import FlareUI
+
+struct StoreView: View {
+ var body: some View {
+ NavigationView {
+ SubscriptionsView(ids: ["com.product.subscription"])
+ .navigationTitle("Premium Features")
+ }
+ }
+}
+```
+
+### UIKit Integration
+
+Integrate with UIKit applications:
+
+```swift
+import UIKit
+import FlareUI
+
+let subscriptionsVC = SubscriptionsViewController(ids: [com.company.subscription_id])
+let nav = UINavigationController(rootViewController: subscriptionsVC)
+present(nav, animated: true)
+```
+
+## Documentation
+
+Comprehensive documentation is available:
+
+- **[Flare Documentation](https://space-code.github.io/flare/flare/documentation/flare/)** - Core framework integration and APIs
+- **[FlareUI Documentation](https://space-code.github.io/flare/flareui/documentation/flareui/)** - UI components, customization, and integration guides
+
+## Contributing
+
+We love contributions! Please read our [Contributing Guide](CONTRIBUTING.md) to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes.
+
+### Development Setup
+
+Bootstrap the development environment:
+
+```bash
+mise install
+```
+
+### Code of Conduct
+
+This project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
## Author
-Nikita Vasilev, nv3212@gmail.com
+
+**Nikita Vasilev**
+- Email: [nv3212@gmail.com](mailto:nv3212@gmail.com)
+- GitHub: [@ns-vasilev](https://github.com/ns-vasilev)
## License
-flare is available under the MIT license. See the LICENSE file for more info.
+
+Flare is released under the MIT license. See [LICENSE](LICENSE) for details.
+
+---
+
+
+
+**[⬆ back to top](#validator)**
+
+Made with ❤️ by [space-code](https://github.com/space-code)
+
+