diff --git a/.changeset/solid-colts-spend.md b/.changeset/solid-colts-spend.md new file mode 100644 index 00000000..05889208 --- /dev/null +++ b/.changeset/solid-colts-spend.md @@ -0,0 +1,5 @@ +--- +'@oaknetwork/contracts-sdk': major +--- + +Initial release diff --git a/.vscode/settings.json b/.vscode/settings.json index d2145582..8d6d7340 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -25,7 +25,7 @@ { "name": "contracts", "rootPath": "packages/contracts", - "jestCommandLine": "pnpm --filter @oaknetwork/contracts test --", + "jestCommandLine": "pnpm --filter @oaknetwork/contracts-sdk test --", "pathToConfig": "jest.config.js" } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index 655ca791..5f9a2233 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Engine requirement updated: `pnpm >= 10.0.0` (was `>= 8.0.0`) - **CI/CD Improvements**: - Removed `continue-on-error` from lint step - lint failures now block PRs - - Excluded `@oaknetwork/contracts` placeholder package from CI builds + - Excluded `@oaknetwork/contracts-sdk` placeholder package from CI builds - Pinned npm version in release workflow to `10.9.2` for deterministic builds - Added `package-lock.json` to .gitignore (enforces pnpm as canonical package manager) diff --git a/CLAUDE.md b/CLAUDE.md index adbfdc3a..b74d0f74 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,7 +25,7 @@ This document provides strict rules and standards for AI assistants (Claude Code ## Architecture Principles (Payments SDK) -> **Scope:** This section applies to the **payments SDK** (`packages/payments-sdk`). For the contracts package (`packages/contracts`), see [Architecture Principles (Contracts SDK)](#architecture-principles-contracts-sdk) below. +> **Scope:** This section applies to the **payments SDK** (`packages/payments`). For the contracts package (`packages/contracts`), see [Architecture Principles (Contracts SDK)](#architecture-principles-contracts-sdk) below. ### Core Patterns (DO NOT BREAK) @@ -213,12 +213,12 @@ Write and simulate methods **MUST** use `requireSigner` and `requireAccount` gua | Import path | Contents | |-------------|----------| -| `@oaknetwork/contracts` | Client, utils, types, lib re-exports, constants, errors | -| `@oaknetwork/contracts/contracts` | Individual `create*Entity` factories | -| `@oaknetwork/contracts/client` | `createOakContractsClient` + client types | -| `@oaknetwork/contracts/utils` | Pure helper functions | -| `@oaknetwork/contracts/errors` | Error classes + parsing utilities | -| `@oaknetwork/contracts/metrics` | Reporting helpers (**NOT** re-exported from root) | +| `@oaknetwork/contracts-sdk` | Client, utils, types, lib re-exports, constants, errors | +| `@oaknetwork/contracts-sdk/contracts` | Individual `create*Entity` factories | +| `@oaknetwork/contracts-sdk/client` | `createOakContractsClient` + client types | +| `@oaknetwork/contracts-sdk/utils` | Pure helper functions | +| `@oaknetwork/contracts-sdk/errors` | Error classes + parsing utilities | +| `@oaknetwork/contracts-sdk/metrics` | Reporting helpers (**NOT** re-exported from root) | ### Testing (Contracts-Specific) @@ -892,7 +892,7 @@ export function verifyWebhookSignature( 1. Changesets gather changes 2. Version bump via `pnpm changeset:version` -3. Build packages: `pnpm --filter=!@oaknetwork/contracts build` +3. Build packages: `pnpm --filter=!@oaknetwork/contracts-sdk build` 4. Publish to npm with provenance 5. Create GitHub releases diff --git a/README.md b/README.md index 0507d530..d832980d 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,10 @@ Primary SDK for Oak payments APIs (customers, payments, webhooks, transfers, ref TypeScript SDK for Oak smart contracts and contract integrations. -- Package: `@oaknetwork/contracts` +- Package: `@oaknetwork/contracts-sdk` - Folder: [`packages/contracts`](./packages/contracts) -- Documentation: [oaknetwork.org](https://www.oaknetwork.org/) +- Documentation: [oaknetwork.org/docs/contracts-sdk/overview](https://oaknetwork.org/docs/contracts-sdk/overview) +- npm: [npmjs.com/package/@oaknetwork/contracts-sdk](https://www.npmjs.com/package/@oaknetwork/contracts-sdk) ## Monorepo quick start diff --git a/SECURITY.md b/SECURITY.md index 2183667a..ea2e9b3b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,11 +2,12 @@ ## Supported Versions -We actively maintain and provide security updates for the following versions of `@oaknetwork/payments-sdk`: +We actively maintain and provide security updates for the following published packages: -| Version | Supported | -| ------- | ----------------- | -| 1.x | ✅ Active support | +| Package | Supported versions | Status | +| ---------------------------- | ------------------ | ----------------- | +| `@oaknetwork/payments-sdk` | 1.x | ✅ Active support | +| `@oaknetwork/contracts-sdk` | 1.x | ✅ Active support | ## Reporting a Vulnerability diff --git a/packages/contracts/CHANGELOG.md b/packages/contracts/CHANGELOG.md index 19534a50..864dea5c 100644 --- a/packages/contracts/CHANGELOG.md +++ b/packages/contracts/CHANGELOG.md @@ -1,32 +1,15 @@ -# @oaknetwork/contracts +--- ## 1.0.0 - -### Major Changes - -### Major Changes - -- Added contract for sdk - -## 0.1.0 - -### Minor Changes - -### Minor Changes - -- testing changeset for releases - -## 1.0.0 - ### Major Changes ### Major Changes +- Initial release of `@oaknetwork/contracts-sdk` + + Package renamed from `@oaknetwork/contracts` to `@oaknetwork/contracts-sdk`. +'@oaknetwork/contracts-sdk': major +--- -- project setup - -### Minor Changes - -### Minor Changes +Initial release of `@oaknetwork/contracts-sdk` -- update changeset -- Fix release CI +Package renamed from `@oaknetwork/contracts` to `@oaknetwork/contracts-sdk`. diff --git a/packages/contracts/README.md b/packages/contracts/README.md index 650a2772..1ab458c8 100644 --- a/packages/contracts/README.md +++ b/packages/contracts/README.md @@ -13,15 +13,15 @@ TypeScript SDK for interacting with Oak Network smart contracts. Provides a type ## Installation ```bash -pnpm add @oaknetwork/contracts +pnpm add @oaknetwork/contracts-sdk ``` ```bash -npm install @oaknetwork/contracts +npm install @oaknetwork/contracts-sdk ``` ```bash -yarn add @oaknetwork/contracts +yarn add @oaknetwork/contracts-sdk ``` **Requirements:** Node.js 18+, TypeScript 5.x recommended. @@ -29,7 +29,7 @@ yarn add @oaknetwork/contracts ### Supported Chain IDs ```typescript -import { CHAIN_IDS } from "@oaknetwork/contracts"; +import { CHAIN_IDS } from "@oaknetwork/contracts-sdk"; CHAIN_IDS.ETHEREUM_MAINNET; // 1 CHAIN_IDS.CELO_MAINNET; // 42220 @@ -45,7 +45,7 @@ CHAIN_IDS.CELO_TESTNET_SEPOLIA; // 11142220 ### Create a client ```typescript -import { createOakContractsClient, CHAIN_IDS } from "@oaknetwork/contracts"; +import { createOakContractsClient, CHAIN_IDS } from "@oaknetwork/contracts-sdk"; const oak = createOakContractsClient({ chainId: CHAIN_IDS.CELO_TESTNET_SEPOLIA, @@ -100,7 +100,7 @@ import { createOakContractsClient, createWallet, CHAIN_IDS, -} from "@oaknetwork/contracts"; +} from "@oaknetwork/contracts-sdk"; const oak = createOakContractsClient({ chainId: CHAIN_IDS.CELO_TESTNET_SEPOLIA, @@ -151,7 +151,7 @@ import { http, getChainFromId, CHAIN_IDS, -} from "@oaknetwork/contracts"; +} from "@oaknetwork/contracts-sdk"; const chain = getChainFromId(CHAIN_IDS.CELO_TESTNET_SEPOLIA); const provider = createPublicClient({ chain, transport: http(RPC_URL) }); @@ -235,7 +235,7 @@ import { getCurrentTimestamp, addDays, CHAIN_IDS, -} from "@oaknetwork/contracts"; +} from "@oaknetwork/contracts-sdk"; const factory = oak.campaignInfoFactory("0x..."); @@ -468,7 +468,7 @@ Contract calls can revert with on-chain errors. The SDK decodes raw revert data ### Decoding revert errors: ```typescript -import { parseContractError, getRevertData } from "@oaknetwork/contracts"; +import { parseContractError, getRevertData } from "@oaknetwork/contracts-sdk"; function handleError(err) { // If the error is already a typed SDK error (thrown by simulate methods) @@ -503,7 +503,7 @@ try { ## Utility Functions -The SDK exports pure utility functions and constants that have no client dependency. Import them from @oaknetwork/contracts or @oaknetwork/contracts/utils. +The SDK exports pure utility functions and constants that have no client dependency. Import them from @oaknetwork/contracts-sdk or @oaknetwork/contracts-sdk/utils. ```typescript import { @@ -528,7 +528,7 @@ import { BYTES32_ZERO, DATA_REGISTRY_KEYS, scopedToPlatform, -} from "@oaknetwork/contracts"; +} from "@oaknetwork/contracts-sdk"; // Hash a string to bytes32 const platformHash = keccak256(toHex("my-platform")); @@ -557,11 +557,12 @@ For complete guidelines on utility functions, please refer to the following link | Entry point | Contents | | --------------------------------- | ------------------------------------------- | -| `@oaknetwork/contracts` | Everything — client, types, utils, errors | -| `@oaknetwork/contracts/utils` | Utility functions only (no client) | -| `@oaknetwork/contracts/contracts` | Contract entity factories only | -| `@oaknetwork/contracts/client` | `createOakContractsClient` only | -| `@oaknetwork/contracts/errors` | Error classes and `parseContractError` only | +| `@oaknetwork/contracts-sdk` | Everything — client, types, utils, errors | +| `@oaknetwork/contracts-sdk/utils` | Utility functions only (no client) | +| `@oaknetwork/contracts-sdk/contracts` | Contract entity factories only | +| `@oaknetwork/contracts-sdk/client` | `createOakContractsClient` only | +| `@oaknetwork/contracts-sdk/errors` | Error classes and `parseContractError` only | +| `@oaknetwork/contracts-sdk/metrics` | Platform, campaign, and treasury reporting helpers (not re-exported from root) | --- @@ -621,8 +622,8 @@ See [CLAUDE.md](../../CLAUDE.md) for coding standards including architecture pri ## Documentation -- [Full docs](https://oaknetwork.org/docs/contracts-sdk/overview) — oaknetwork.org/docs/sdk/overview -- [Quickstart](https://oaknetwork.org/docs/contracts-sdk/quickstart) — oaknetwork.org/docs/sdk/quickstart +- [Full docs](https://oaknetwork.org/docs/contracts-sdk/overview) — oaknetwork.org/docs/contracts-sdk/overview +- [Quickstart](https://oaknetwork.org/docs/contracts-sdk/quickstart) — oaknetwork.org/docs/contracts-sdk/quickstart - [Monorepo README](../../README.md) — README.md - [Changelog](./CHANGELOG.md) — CHANGELOG.md @@ -644,6 +645,6 @@ See [CLAUDE.md](../../CLAUDE.md) for coding standards including architecture pri - [Documentation](https://oaknetwork.org/docs/contracts-sdk/overview) - [GitHub](https://github.com/oak-network/sdk) - [Issues](https://github.com/oak-network/sdk/issues) -- [npm](https://www.npmjs.com/package/@oaknetwork/contracts) +- [npm](https://www.npmjs.com/package/@oaknetwork/contracts-sdk) Questions? [Open an issue](https://github.com/oak-network/sdk/issues) or contact **support@oaknetwork.org** diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 5f53b309..d31d4966 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,21 @@ { - "name": "@oaknetwork/contracts", - "version": "1.0.0", + "name": "@oaknetwork/contracts-sdk", + "version": "0.0.0", "description": "TypeScript SDK for Oak Network smart contracts", + "keywords": [ + "sdk", + "oaknetwork", + "oak", + "typescript", + "viem", + "web3", + "celo", + "smart-contracts" + ], + "homepage": "https://oaknetwork.org/docs/contracts-sdk/overview", + "bugs": { + "url": "https://github.com/oak-network/sdk/issues" + }, "publishConfig": { "access": "public" }, diff --git a/packages/contracts/src/lib/viem/provider.ts b/packages/contracts/src/lib/viem/provider.ts index dda49a1d..d0621420 100644 --- a/packages/contracts/src/lib/viem/provider.ts +++ b/packages/contracts/src/lib/viem/provider.ts @@ -19,7 +19,7 @@ import type { JsonRpcProvider, Wallet } from "../../client/types"; * * @example * ```typescript - * import { createJsonRpcProvider, mainnet } from '@oaknetwork/contracts' + * import { createJsonRpcProvider, mainnet } from '@oaknetwork/contracts-sdk' * * const provider = createJsonRpcProvider('https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY', mainnet) * ``` @@ -45,7 +45,7 @@ export function createJsonRpcProvider( * * @example * ```typescript - * import { createWallet, createJsonRpcProvider, mainnet } from '@oaknetwork/contracts' + * import { createWallet, createJsonRpcProvider, mainnet } from '@oaknetwork/contracts-sdk' * * const provider = createJsonRpcProvider(rpcUrl, mainnet) * const signer = createWallet(privateKey, provider, rpcUrl) @@ -81,7 +81,7 @@ export function createWallet( * * @example * ```typescript - * import { createBrowserProvider, mainnet } from '@oaknetwork/contracts' + * import { createBrowserProvider, mainnet } from '@oaknetwork/contracts-sdk' * * const provider = createBrowserProvider(window.ethereum, mainnet) * ``` @@ -106,7 +106,7 @@ export function createBrowserProvider( * * @example * ```typescript - * import { createBrowserProvider, getSigner, mainnet } from '@oaknetwork/contracts' + * import { createBrowserProvider, getSigner, mainnet } from '@oaknetwork/contracts-sdk' * * const provider = createBrowserProvider(window.ethereum, mainnet) * const signer = await getSigner(window.ethereum, mainnet) diff --git a/packages/contracts/src/metrics/index.ts b/packages/contracts/src/metrics/index.ts index 97782c34..e073f873 100644 --- a/packages/contracts/src/metrics/index.ts +++ b/packages/contracts/src/metrics/index.ts @@ -1,7 +1,6 @@ /** * @file metrics/index.ts - * Public surface for the @oaknetwork/contracts/metrics sub-path export. - * TODO: Register in package.json exports as `@oaknetwork/contracts/metrics`. + * Public surface for the @oaknetwork/contracts-sdk/metrics sub-path export. */ export { getPlatformStats } from "./platform"; diff --git a/packages/payments/package.json b/packages/payments/package.json index 38747cb3..050d8bd1 100644 --- a/packages/payments/package.json +++ b/packages/payments/package.json @@ -4,8 +4,16 @@ "description": "A fully-typed TypeScript SDK for the Oak Network payment API.", "keywords": [ "sdk", - "oaknetwork" + "oaknetwork", + "oak", + "typescript", + "payments", + "api" ], + "homepage": "https://www.oaknetwork.org/docs/sdk/overview", + "bugs": { + "url": "https://github.com/oak-network/sdk/issues" + }, "publishConfig": { "access": "public" },