npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@murphai/importers

v0.1.15

Published

Owns ingestion adapters for documents, meals, and sample streams. Importers may parse inputs and prepare metadata, but they must route all canonical writes through `@murphai/core`.

Readme

@murphai/importers

Owns ingestion adapters for documents, meals, and sample streams. Importers may parse inputs and prepare metadata, but they must route all canonical writes through @murphai/core.

Adding a new wearable provider? Pair the importer work with the transport half described in docs/device-provider-contribution-kit.md at the repo root, and use the scaffolds listed in docs/templates/README.md so the provider lands through both seams together.

Baseline Scope

  • document import reads file metadata only and forwards a normalized document payload.
  • meal import inspects photo/audio attachments and forwards a normalized meal payload.
  • samples CSV import parses tabular sample rows and forwards a normalized batch payload.
  • No OCR, transcription, or structured lab parsing is performed in the baseline.

Built-in Device Providers

createImporters() and prepareDeviceProviderSnapshotImport() ship with built-in adapters for whoop, oura, and garmin.

Provider transport stays separate from normalization. Each adapter accepts one provider snapshot, preserves the upstream payloads as raw artifacts, and only promotes fields that fit the current canonical device batch surface.

Built-in providers now share one descriptor surface in device-providers/provider-descriptors.ts. That descriptor is the single source for provider key, transport modes, OAuth paths/scopes, webhook support, default sync windows, metric families, and source-priority hints, so importers and device-syncd no longer drift on provider metadata.

The Garmin adapter keeps one provider key, garmin, and expects a snapshot object with optional profile, dailySummaries, epochSummaries, sleeps, activities, activityFiles, womenHealth, and deletions collections. It validates the canonical record collections at the adapter boundary, preserves unsupported top-level sections as raw snapshot-section:* artifacts when they actually produce retained evidence, accepts Garmin activity exports only through activityFiles, and retains metadata-only activity-file evidence on first-class activity-asset:* raw-artifact roles instead of synthesizing fake .fit / .gpx / .tcx payloads.

Core Integration Seam

This package still supports an injected write port for tests and alternate callers, but its default workspace wiring now targets the concrete packages/core exports.

The assumed core surface is:

  • importDocument(payload)
  • addMeal(payload)
  • importSamples(payload)

Importers never write vault files directly. They validate inputs, inspect source files, normalize payloads, and delegate the final canonical mutation to the injected core port.