TypeScript monorepo (pnpm workspaces) with 7 packages under packages/. @lifi/sdk
is the hub; each provider depends on it via workspace:* as a regular dependency
(not peer), which resolves to the exact pinned version in published tarballs.
pnpm buildruns all packages in parallel — no dependency ordering neededisolatedDeclarations: true— all exports need explicit return type annotations
- No default exports in library code
sdk-provider-ethereum/src/utils/abi.ts— parseAbi results typed asAbi(broader than inferred); downstream code usesascasts for readContract results
Releases use Changesets (independent versioning). Lerna and standard-version are gone.
- Run
pnpm changeset, pick the affected package(s), choose a bump:feat:→ minor,fix:→ patch, breaking change → major.
- Skip a changeset for: docs-only, chore-only, CI/config, tests, examples.
(
changeset-botcomments a reminder when publishable source changes with no changeset; docs/chore PRs simply don't need one. The Version PR is the real publish gate.) - Only declare changesets for packages you intentionally changed. Do not author
cascade-only changesets for dependents — Changesets bumps providers automatically from the
dependency graph when
@lifi/sdkchanges. (updateInternalDependencies: "patch"— the default — re-releases every provider on any@lifi/sdkbump, including a patch, so theirworkspace:*pins stay current.)
Pre-mode/dist-tags, per-PR release-preview builds, the changeset:prepublish transform,
and the Linear anchor policy live in the release skill
(.claude/skills/release/SKILL.md). Read it before touching the publish path.
@lifi/types(18.x, in@lifi/sdkdeps) and@lifi/data-types(devDep) are external pinned versions. Changesets does not track or bump them. When upgrading, edit the pins by hand and add afix:/feat:changeset describing the bump.
- pnpm 12 only reads
pnpm-workspace.yaml;pnpm.overridesinpackage.jsonand non-auth.npmrcsettings are silently ignored - After moving/changing overrides, run
pnpm install --lockfile-onlyand grep the lockfile to confirm — "Already up to date" can be misleading - Verify a setting is applied:
pnpm config get <kebab-name>returnsundefinedif pnpm isn't reading it - Publish provenance comes from
NPM_CONFIG_PROVENANCE: trueenv in.github/workflows/publish.yaml(not a valid pnpm-workspace.yaml field)