Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "openiap",
"interface": {
"displayName": "OpenIAP"
},
"plugins": [
{
"name": "openiap",
"source": {
"source": "local",
"path": "./plugins/openiap"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer Tools"
}
]
}
60 changes: 51 additions & 9 deletions .claude/commands/commit.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Complete workflow: branch → commit → push → PR
```

**Options:**

- `--push` or `-p`: Push to remote after commit
- `--pr`: Create PR after push
- `--all` or `-a`: Commit all changes at once
Expand Down Expand Up @@ -48,20 +49,23 @@ git branch --show-current
```

**If on `main`** → Create a feature branch first:

```bash
git checkout -b feat/<feature-name>
```

**If NOT on `main`** → Proceed with commits directly.

**Branch naming conventions:**

- **Always include the target library/package name** in the branch name
- `feat/<library>-<feature-name>` - New features (e.g., `feat/godot-win-back-offers`)
- `fix/<library>-<bug-description>` - Bug fixes (e.g., `fix/expo-double-init`)
- `docs/<library>-<doc-update>` - Documentation only (e.g., `docs/flutter-api-reference`)
- `chore/<library>-<task>` - Maintenance tasks (e.g., `chore/kmp-bump-deps`)

**Library shortnames:**

- `rn` or `react-native` → react-native-iap
- `expo` → expo-iap
- `flutter` → flutter_inapp_purchase
Expand All @@ -82,21 +86,25 @@ git diff --name-only
### 3. Stage Changes

**GQL schema only (FIRST COMMIT):**

```bash
git add packages/gql/src/*.graphql
```

**Generated types (SECOND COMMIT):**

```bash
git add packages/gql/src/generated/
```

**Specific path:**

```bash
git add <path>
```

**All changes:**

```bash
git add .
```
Expand Down Expand Up @@ -134,6 +142,7 @@ EOF
| `test` | Adding/updating tests |

**Scope Examples:**

- `gql` - GraphQL schema changes
- `apple` - iOS/macOS package
- `google` - Android package
Expand Down Expand Up @@ -174,6 +183,28 @@ EOF
)"
```

### 7a. Upload Preview Recording

For every PR that adds a new feature, visible behavior change, UI change,
documentation page, example flow, or developer workflow, record a preview before
handoff:

1. Render the actual changed surface after implementation. Use the Codex Chrome
Extension for web/docs/dashboard previews.
2. Compress the final recording to **under 10 MB**. Prefer H.264 MP4 with lower
resolution / frame rate when needed.
3. Upload the compressed recording to the GitHub PR as a PR body attachment or a
clearly labeled attached `Preview` comment.
Do not commit one-off PR preview recordings. Only commit preview media when
the media itself is product documentation or an example asset that should
ship with the repository.
4. Link/embed the GitHub-hosted recording in the PR body or preview comment.

If there is no visual or interactive surface, add a short PR note explaining why
recording is not applicable and include the best terminal/API proof instead.
Never include secrets, private customer data, or browser profile details in the
recording.

### 8. Add Labels to PR

After creating the PR, add appropriate labels based on the changes.
Expand All @@ -184,6 +215,7 @@ gh pr edit <PR_NUMBER> --add-label "<label1>,<label2>"
```

**Label selection guide:**

- Changes to `packages/apple/` → `📱 iOS`
- Changes to `packages/google/` → `🤖 android`
- Changes to `packages/docs/` → `📖 documentation`
Expand All @@ -207,17 +239,18 @@ gh pr edit <PR_NUMBER> --add-label "<label1>,<label2>"

When making cross-package changes, commit in this order:

| Order | Path | Description |
|-------|------|-------------|
| 1 | `packages/gql/src/*.graphql` | GraphQL schema ONLY (no generated types) |
| 2 | `packages/gql/src/generated/` | Generated types (after schema review) |
| 3 | `packages/apple/` | iOS implementation |
| 4 | `packages/google/` | Android implementation |
| 5 | `packages/docs/` | Documentation updates |
| 6 | `.claude/commands/` | Skill/workflow updates |
| 7 | `knowledge/` | Knowledge base updates |
| Order | Path | Description |
| ----- | ----------------------------- | ---------------------------------------- |
| 1 | `packages/gql/src/*.graphql` | GraphQL schema ONLY (no generated types) |
| 2 | `packages/gql/src/generated/` | Generated types (after schema review) |
| 3 | `packages/apple/` | iOS implementation |
| 4 | `packages/google/` | Android implementation |
| 5 | `packages/docs/` | Documentation updates |
| 6 | `.claude/commands/` | Skill/workflow updates |
| 7 | `knowledge/` | Knowledge base updates |

**IMPORTANT - First Commit Must Be GQL Spec Only:**

```bash
# Stage ONLY .graphql files (not generated/)
git add packages/gql/src/*.graphql
Expand All @@ -233,6 +266,7 @@ git commit -m "feat(gql): add new types..."
```

This order allows:

- API schema to be reviewed first before any implementation
- Generated types committed after schema approval
- Platform implementations to follow the approved schema
Expand All @@ -243,6 +277,7 @@ This order allows:
## Example Commit Messages

**GQL schema update:**

```
feat(gql): add win-back offer and product status types

Expand All @@ -259,6 +294,7 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
```

**Generated types:**

```
chore(gql): regenerate types for all platforms

Expand All @@ -269,6 +305,7 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
```

**iOS implementation:**

```
feat(apple): implement win-back offers and JWS promotional offers

Expand All @@ -281,6 +318,7 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
```

**Documentation update:**

```
docs: add release notes and type documentation

Expand All @@ -306,20 +344,24 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Changes

### GraphQL Schema (packages/gql)

- `WinBackOfferInputIOS` - Win-back offer input type
- `ProductStatusAndroid` - Product fetch status enum
- `PromotionalOfferJWSInputIOS` - JWS format promo offers

### iOS (packages/apple)

- Implement win-back offer handling in purchase flow
- Add JWS promotional offer support (back-deployed to iOS 15)
- Add introductory offer eligibility override

### Android (packages/google)

- Map ProductStatusAndroid from BillingResult
- Return status in fetchProducts response

### Documentation (packages/docs)

- Release notes for v1.3.13
- Type documentation updates
- Example code updates
Expand Down
7 changes: 7 additions & 0 deletions .codex/skills/openiap-workflows/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ appropriate labels before merging.
- For release-note package lists, verify versions from package metadata and
GitHub release tags; never infer framework versions from `openiap-versions.json`
or from a nearby release block.
- For PRs with new features, visible behavior changes, UI changes, docs pages,
example flows, or developer workflows, record the actual changed surface,
compress the video to under 10 MB, and upload it to the GitHub PR as a
`Preview` comment or PR body attachment. Do not commit one-off PR preview
recordings; only commit media when the asset itself is part of product docs or
examples. Use the Codex Chrome Extension for web/docs/dashboard previews when
applicable.
- Keep commits in Angular Conventional Commits format:
`<type>(<scope>): <subject>`.

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# PR preview recordings should be uploaded to GitHub PR attachments, not
# committed to the repository.
.github/pr-previews/

# Testing
coverage/
.nyc_output/
Expand Down
3 changes: 3 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions knowledge/internal/06-git-deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,33 @@
- No trailing period
- Use imperative mood ("add" not "added")

## Pull Request Preview Recordings

Every PR that introduces a new feature, visible behavior change, UI change,
documentation page, example flow, or developer workflow must include a preview
recording before it is handed off for review.

Requirements:

- Record the actual changed surface after the implementation is complete. Use
the Codex Chrome Extension for web/docs/dashboard previews whenever a browser
can render the change.
- Compress the final video to **under 10 MB** so GitHub accepts it reliably.
Prefer H.264 MP4 with a modest resolution / frame rate when the raw capture is
too large.
- Upload the compressed recording to the GitHub PR as a PR body attachment or a
clearly labeled attached `Preview` comment.
- Do not commit one-off PR preview recordings. Only commit preview media when
the media itself is a product documentation or example asset that should ship
with the repository.
- Link or embed the uploaded preview in the PR body or a clearly labeled
`Preview` PR comment.
- If the change has no visual or interactive surface, include a short note in
the PR explaining why a recording was not applicable and show the most useful
terminal/API proof instead.
- Do not upload secrets, private customer data, unreleased credentials, or local
browser profile details in previews. Redact or use test fixtures.

### With Tag and Scope

When a commit targets a specific package or library, include the scope:
Expand Down
Binary file not shown.
2 changes: 1 addition & 1 deletion packages/docs/src/generated/version-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"godotPackageVersion": "2.3.1",
"kmpPackageVersion": "2.3.1",
"mauiPackageId": "OpenIap.Maui",
"mauiPackageVersion": "1.1.2",
"mauiPackageVersion": "1.1.3",
"googleCompileSdk": "35",
"googleMinSdk": "23",
"googlePlayBillingVersion": "8.3.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/docs/src/pages/docs/getting-started.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ await iap.request_purchase(props)`}</CodeBlock>
<li>
<Link to="/docs/features/validation">Validation</Link> — server-side
verification (your own backend or IAPKit — open source under MIT,
hosted free at{' '}
with hosted validation and analytics free at{' '}
<a
href="https://kit.openiap.dev"
target="_blank"
Expand Down
Loading