原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 10882,
"has_wiki": false,
"homepage": null,
"languages": {
"C": 102,
"Ruby": 4978,
"Shell": 1618,
"Swift": 89956,
"Kotlin": 67273,
"JavaScript": 2717,
"TypeScript": 129627
},
"pushed_at": "2026-07-22T16:52:09Z",
"created_at": "2023-12-08T16:27:15Z",
"owner_type": "User",
"updated_at": "2026-07-27T21:35:33Z",
"description": "Expo Module for native Spotify SDKs",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"Swift",
"Kotlin"
]
},
"owner": {
"blog": null,
"name": "Drew Miller",
"type": "User",
"login": "wwdrew",
"company": null,
"location": "Berkhamsted, UK",
"followers": 17,
"avatar_url": "https://avatars.githubusercontent.com/u/49833875?v=4",
"created_at": "2019-04-21T10:45:55Z",
"is_verified": null,
"public_repos": 51,
"account_age_days": 2658
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "expo-spotify-sdk-v2.3.2",
"kind": "other",
"published_at": "2026-07-22T16:52:10Z"
},
{
"tag": "expo-spotify-sdk-v2.3.1",
"kind": "other",
"published_at": "2026-07-07T10:25:40Z"
},
{
"tag": "expo-spotify-sdk-v2.3.0",
"kind": "other",
"published_at": "2026-06-29T10:21:18Z"
},
{
"tag": "expo-spotify-sdk-v2.2.3",
"kind": "other",
"published_at": "2026-06-23T15:03:40Z"
},
{
"tag": "expo-spotify-sdk-v2.2.2",
"kind": "other",
"published_at": "2026-06-09T12:42:10Z"
},
{
"tag": "expo-spotify-sdk-v2.2.1",
"kind": "other",
"published_at": "2026-06-08T17:22:32Z"
},
{
"tag": "expo-spotify-sdk-v2.2.0",
"kind": "other",
"published_at": "2026-06-06T18:58:28Z"
},
{
"tag": "expo-spotify-sdk-v2.1.0",
"kind": "other",
"published_at": "2026-06-03T21:05:23Z"
},
{
"tag": "expo-spotify-sdk-v2.0.0",
"kind": "other",
"published_at": "2026-05-29T16:24:13Z"
},
{
"tag": "expo-spotify-sdk-v1.0.0",
"kind": "other",
"published_at": "2026-05-28T22:29:20Z"
},
{
"tag": "expo-spotify-sdk-v0.8.0",
"kind": "other",
"published_at": "2026-05-07T15:26:10Z"
},
{
"tag": "expo-spotify-sdk-v0.7.1",
"kind": "other",
"published_at": "2026-04-30T11:21:02Z"
},
{
"tag": "expo-spotify-sdk-v0.7.0",
"kind": "other",
"published_at": "2026-04-29T17:26:10Z"
},
{
"tag": "expo-spotify-sdk-v0.6.0",
"kind": "other",
"published_at": "2026-04-29T11:45:25Z"
}
],
"recent_commits": [
{
"oid": "001f53ea9e05532755943742b3db8d883dfe08eb",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.3.2 (#75)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-22T16:51:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3fdf1a6f328f77392e7b6c6ab1d7b7e284684c84",
"body": "Also document Auth.isAvailable() platform semantics and refresh stale release-lane wording in CONTEXT.md.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "chore(ci): run Android auth availability unit tests in CI (#76)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-07-22T16:49:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f4f4b4f8c44972f2bccd7b7491d54e65fb13b7af",
"body": "* fix(android): guard Spotify browser auth when no handler exists\n\nAdd https/http manifest queries and a preflight availability check so\nAuth.authenticate rejects with SPOTIFY_NOT_INSTALLED instead of crashing\ninside the Spotify SDK LoginActivity browser fallback.\n\nCo-authored-by: Cursor <cursoragen\n[…]\ns Android-only, and show iOS-appropriate unavailable messaging in docs and the example app.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(android): guard Spotify browser auth when no handler exists (#74)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-07-22T16:12:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "448c21da0325d263a61fa1aabb7b13d2c3a08afa",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.3.1 (#73)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-07T10:25:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e7654c440ce5d722c6e89488315a49d2dbefbb1",
"body": "* fix(ios): avoid SIGABRT when NSError description key is non-string\n\nSpotify's SDK can deliver NSError userInfo values that are not strings;\nreading localizedDescription force-bridges them and aborts the process.\nRoute all diagnostic reads through safeLocalizedDescription instead.\n\nCo-authored-by: \n[…]\nhe NSError extension and read\nsafeLocalizedDescription once per App Remote mapper function.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(ios): avoid SIGABRT when NSError description key is non-string (#72)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-07-07T10:22:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6f04b0755648cf34161d3195464acf72c36f8354",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.3.0 (#70)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-29T10:21:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cebefd3becb9264756d53c2116df687d7bf026e6",
"body": "The fixture listed REFRESH_TOKEN_EXPIRED (and other directly-thrown\ncodes) in `codes` with no classifier rule, and the tests only checked\nthe forward direction (rules -> documented code). Add an explicit\n`passthroughCodes` allowlist for codes raised by dedicated paths rather\nthan the classifier, and assert the inverse: every documented code is\neither covered by a rule or marked pass-through, keeping the fixture\nauthoritative.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "test(auth): assert every documented code is rule-covered or pass-through",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b4dfae02b5a6eac453663a5cf9f9d0940d830b7a",
"body": "The RefreshTokenExpiredException remap used a loose raw-body substring\ncheck for \"invalid_grant\", which could misfire on unrelated payloads.\nParse the JSON body and check the OAuth `error` field (RFC 6749 5.2),\ngated on HTTP 400, while keeping the refresh-only scope via\ninvalidGrantIsExpiredToken.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(android): match structured invalid_grant field on refresh 400",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "35680767bbde279d7720958aace572c128e908f4",
"body": "describeError dumped the full userInfo dictionary into the detail string\nthat is both NSLog'd and embedded in JS-visible SpotifyError messages,\nrisking leakage of tokens, auth codes, or raw bodies. Emit a keys-only\nform (userInfoKeys=[...]) for everything that leaves the process while\nkeeping the unredacted detail for the in-process classification\nheuristics, so classification behaviour is unchanged.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(ios): redact NSError userInfo values from logs and JS errors",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bd73914bf299e50e30267367ee6ea0b9ac4394c7",
"body": "…h tokens\n\nSpotify returns `invalid_grant` when a refresh token has expired or been revoked\n(and, from 2026-07-20, expires them six months after issue). Both the iOS\n(SpotifyTokenRefreshClient) and Android (SpotifyTokenSwapClient) refresh paths\nnow detect `invalid_grant` in the error body and reject\n[…]\nre\nand tests, and documents the code and re-auth pattern across the README,\nerror-codes, auth-error-mapping, token-swap-server, and api-reference docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "feat(auth): add REFRESH_TOKEN_EXPIRED code for expired/revoked refres…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c6133cf0fec16650a58aca1cb5485ebbc406b45a",
"body": "…nt handling\n\nFrom 2026-07-20 Spotify expires refresh tokens six months after issue. Document\nthe re-authentication pattern (discard the token and re-run Auth.authenticate(),\nnever retry the refresh) in the README, the server-side requirement to forward\nSpotify's `400 invalid_grant` verbatim in the token-swap-server guide, and the\ninvalid_grant case on the TOKEN_SWAP_FAILED error code.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "docs: document Spotify refresh-token six-month expiry and invalid_gra…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "16ca8a183243cad7d7e760f5194a1a5403d8bd3a",
"body": "Collapse the two divergent auth-error classifiers (the delegate's mapSDKError\nand the module catch-all's mapRawAuthError) plus three duplicated NSError\nchain-walks into a single SpotifyAuthErrorMapping.classify entry point, so a\nraw error maps to the same code regardless of which path delivers it. S\n[…]\nt across\nthe async-rejection bridge. Document the pre-57 UNKNOWN behaviour and the\noptional patch-package workaround in the README and auth error docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "refactor(ios): unify auth error classification into one canonical mapper",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0fac47ba3b4ed0a0737f8f885b9ed281af391c05",
"body": "The Spotify iOS SDK does not always route a user-cancelled web auth through the\nsession-manager delegate, so the cancellation can reach authenticateAsync's\ntop-level catch as a raw NSError. The module only caught SpotifyError, so such\ncancellations escaped to JS as a generic UNKNOWN failure and trig\n[…]\nors via a new mapRawAuthError, and extract\nisKnownCancellationCode to a file-scope function so the delegate path and the\nraw path share a single source of truth for the cancellation domain/code rules.",
"is_bot": false,
"headline": "fix(ios): map cancellation NSErrors that bypass the session delegate",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8670b62d9aed13e5b62bd18006f2c9ee7c31c104",
"body": "The Spotify iOS login SDK surfaces a user-cancelled web auth under its own\n`com.spotify.sdk.login` domain with code 1. This was not recognised by\nisKnownCancellationCode, and the domain contains \"spotify\" but not \"auth\" so it\nalso slipped past the fuzzy message matching, leaving cancellations classified\nas UNKNOWN and surfacing a spurious sign-in failure to callers.\n\nRecognise the domain/code explicitly so it maps to USER_CANCELLED.",
"is_bot": false,
"headline": "fix(ios): classify com.spotify.sdk.login code 1 as user cancellation",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-29T10:17:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58763566c10eaa8ff0bbac9a9e336ee104b7ff75",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.2.3 (#68)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-23T15:03:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9322972cd999b7de78853d7efd27754beb801096",
"body": "* fix(auth): improve native error mapping and document iOS/Android parity\n\nMap auth failures to structured codes on iOS (network, token swap, OAuth)\nand wrap unexpected Android throwables so JS receives consistent AuthError\nevents instead of opaque UNKNOWN rejections.\n\nCo-authored-by: Cursor <cursor\n[…]\nng OAuth auth\nrejections as TOKEN_SWAP_FAILED/TOKEN_SWAP_PARSE_ERROR instead of AUTH_ERROR.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix: improve auth error mapping (#67)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-23T15:01:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e5502cd5028dd0a2d01fc7b10a8ac7bb05dead0d",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.2.2 (#66)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-09T12:41:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2ec75e0d446757438eefb5db1e195a4b6e84ba1",
"body": "* fix(ios): fetch SpotifyiOS via CocoaPods binary pod at pod install\n\nReplace SPM with an HTTP binary podspec and config-plugin Podfile injection so\nstatic-framework Expo apps can resolve SpotifyiOS without bundling it in npm.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* chore(example): sync \n[…]\ne, Podfile.lock, and yarn locks after validating the\nCocoaPods binary pod approach locally.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(ios): fetch SpotifyiOS via CocoaPods binary pod at pod install (#64)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-09T12:40:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "10d95338e9b572f4a497010e261067836e1d4b6c",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.2.1 (#60)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-08T17:22:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cfa5d725a8284968fbf1ffe7b2445746e6071a79",
"body": "…ch (#61)\n\nRely on Ant get defaults so slow networks are not cut off by fixed 30s/60s limits.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(android): drop explicit Ant download timeouts for Spotify AAR fet…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-08T17:21:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a51ef04aeb96bf33d85e7b01a6d6f7d2d9eaef90",
"body": "Follow-up to #54 — deduplicate connect/authorizeAndPlay bootstrap, replace\npendingAuthorizeRemote with a unified connectionAttempt model, and move\nlifecycle code into dedicated files without changing public API behavior.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "refactor(ios): extract App Remote connection lifecycle (#59)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-06T19:09:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a2ea3219686420f4ac1bc4c6b7f238dfeaea39b6",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.2.0 (#57)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-06T18:58:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c284f99c83412dae90e6582ae0ee0156bf963502",
"body": "…ing in npm (#58)\n\n* refactor(native): resolve Spotify SDKs at build time instead of bundling in npm\n\niOS pulls SpotifyiOS via spm_dependency at pod install; Android downloads\nthe App Remote AAR from GitHub in a Gradle preBuild task. Removes vendored\nbinaries, fetch/verify scripts, and native artifa\n[…]\ngestion to prefer the async wrapper over the\ncompletion-handler API; behavior is unchanged.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "refactor(native): resolve Spotify SDKs at build time instead of bundl…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-06T18:56:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bb4e23f4ac390203357a5285c73121c4cd6b9126",
"body": "…Spotify (#54)\n\n* feat(app-remote): add AppRemote.authorizeAndPlay to wake a suspended Spotify\n\n`AppRemote.connect()` only attaches to an already-running Spotify process.\nWhen Spotify has been suspended in the background (iOS reclaims a backgrounded\napp that isn't playing audio, or the App Remote co\n[…]\nhe previous `let launched = ...; if !launched` failed to compile\n(cannot convert Void to Bool). Use the completion handler: success=false\nmeans Spotify couldn't be opened, so fail the connection then.",
"is_bot": false,
"headline": "feat(app-remote): add AppRemote.authorizeAndPlay to wake a suspended …",
"author_name": "Johan Ekorn",
"author_login": "johra",
"committed_at": "2026-06-05T12:51:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3efec1521524063b1eb78367c1f721c8ce0168c4",
"body": "* fix(release): bundle Spotify native SDKs in npm via prepublish fetch\n\nPublished packages were missing the Android App Remote AAR because it was\ngitignored and never present in the CI checkout. Fetch pinned iOS and\nAndroid binaries before npm pack, verify the tarball includes both, and\ndocument the\n[…]\nksum, sync Android AAR paths from the fetch script, and\nshow npm pack output during verify.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(release): bundle Spotify native SDKs in npm (#55)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-05T12:39:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "601ac599762e0c99966bceabf5aa3e8ebd9713a3",
"body": "Run release-please on main and v1 with per-branch target-branch scoping,\npublish 1.x to npm dist-tag sdk55 so latest stays on 2.x, and document\nthe dual-lane release flow.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "ci: enable Release Please and sdk55 publishes on v1 lane (#56)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-05T12:37:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "70d7ee6ad6eb01c3cf88624313562c2ead567d44",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.1.0 (#50)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-03T21:05:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "903b9e00ef0afd88385240d256c4e2d0b713a2af",
"body": "* refactor(ios): split SpotifyAppRemoteCoordinator into focused modules\n\nExtract error types, SPT error mapping, and JS bridge mappers so the coordinator stays connection/API-only and stays under the 1k-line threshold as App Remote grows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* refactor(\n[…]\nand Basic auth construction, and document lane-specific payload differences for 1.x vs 2.x.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "docs: SDK lane model + maintainability refactors (recreated) (#51)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-06-03T21:04:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "88c37600f0fe00f1308274a31d24de0bc64d3dc1",
"body": "* feat: normalize Android token endpoint payloads and clarify backend contract\n\nAlign Android token swap/refresh request bodies with iOS by sending only the auth artifact fields, and expand docs/examples to define the server-owned Spotify exchange contract including redirect URI matching and Basic a\n[…]\nix example paths\n\n* improve readme and remove redundant manifest read\n\n---------\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "feat: GH-46 improve tokenSwap endpoint contract clarity (#49)",
"author_name": "Drew Miller",
"author_login": "skdrew",
"committed_at": "2026-06-03T20:40:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "657b0673363d51e9cd0b39902ff329b6919a77d3",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 2.0.0 (#42)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-05-29T16:23:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd3002764c0a36684595474b58becbd8e7196b14",
"body": "Rewrite RELEASE and QA checklists for the two-branch model, update\nCONTRIBUTING/CONTEXT/V1_PLAN/ADRs, and align README install guidance\nnow that v1 is cut from expo-spotify-sdk-v1.0.0.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "docs: document main as SDK 56 (2.x) and v1 as SDK 55 (1.x) (#44)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-29T16:22:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3419df79871b5df32cf6bec23af20d68f833148a",
"body": "expo-module-scripts ships extensionless subcommand bins as 644 in the npm\ntarball; Commander requires +x on Linux, so `prepare` failed in CI. Call\ntsc, eslint, and jest directly, remove the noop prepare script, drop the\nstale root package-lock.json, and build plugin/ in prepublishOnly.\n\nRefs expo/expo#46404\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix(ci): bypass expo-module CLI after install EACCES (#43)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-29T16:08:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6c191e60d7b97f8cc7c08575bd326d34c7065621",
"body": "Refresh iOS and Android prebuild output and yarn.lock so the example\nbuilds on current Expo tooling. Document Xcode 26.4+ in CONTRIBUTING.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "chore(example): regenerate native projects for Expo SDK 56",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-29T11:54:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "76eb1f8dd05cb069a3b4e9a5284a5937f0bf93e1",
"body": "The manifest must track the last shipped version, not the next one.\npackage.json stays at 2.0.0 so release-please can open the 2.0.0 release PR.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "chore: reset release-please manifest to last released version (1.0.0)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-29T11:15:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7369fd279debd9a3a00b974d5bb6a5f039cebed5",
"body": "Migrate main to the Expo SDK 56 lane (iOS 16.4+, expo-modules-core 56) and bump\npackage versioning to 2.0.0. Add a typed config plugin helper at\n@wwdrew/expo-spotify-sdk/plugin while keeping string/tuple plugin usage working,\nand upgrade the example app to Expo SDK 56.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "feat!: Expo SDK 56 lane + typed config plugin (v2.0.0)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-29T10:24:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e503ac386823c7a25c6ff06f52b9befeda908b2b",
"body": "Sync .release-please-manifest.json and package-lock.json with package.json\nso release automation publishes 1.0.0 instead of 0.9.0.\n\nRelease-As: 1.0.0\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "chore: align release-please manifest and lockfile to 1.0.0",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-28T22:28:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "71e124583885406f23ff679d174000369f668637",
"body": "* fix(ios): align App Remote bridge with Spotify SDK Swift imports\n\nUpdate native coordinators to use current SpotifyiOS Swift API names and resolve Swift 6 actor-isolation errors that blocked the example iOS build.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* fix(example): stabilize spotify \n[…]\nanes, polish the example with capability-gated library save and structured errors, and bump version to 1.0.0 with QA and release checklists.\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "fix: ios spotify sdk swift imports (#40)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-28T22:06:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c921d3572bcbc555b8480a1993705e82520863c8",
"body": "* feat(example): polish app-remote demo and release docs\n\n* GitButler Workspace Commit\n\nThis is placeholder commit and will be replaced by a merge of your virtual branches.\n\nDue to GitButler managing multiple virtual branches, you cannot switch back and\nforth between git branches and virtual branche\n[…]\nsh asset metadata\n\n---------\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>\nCo-authored-by: GitButler <gitbutler@gitbutler.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "feat: polish app remote demo (#39)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-28T13:22:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3e78d7746c1fb1bc131e904600f1e95f05982c69",
"body": "…(#38)\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(content-images): add Phase 5 content browsing and image loading …",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T16:45:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41515d1f57b763cfc5a6770d222ec9842d750982",
"body": "Co-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(hooks): restore missing Phase 4 hook exports (#37)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T16:33:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99bfa8e5e32679bbf8aa9431f958ff9f7ef0f093",
"body": "* GitButler Workspace Commit\n\nThis is placeholder commit and will be replaced by a merge of your virtual branches.\n\nDue to GitButler managing multiple virtual branches, you cannot switch back and\nforth between git branches and virtual branches easily. \n\nIf you switch to another branch, GitButler wil\n[…]\nagent@cursor.com>\n\n---------\n\nCo-authored-by: GitButler <gitbutler@gitbutler.com>\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "feat/phase-4-user-capabilities (#36)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T16:12:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11a9218744304a2e807fc22946023ba9254bd342",
"body": "…state) (#35)\n\niOS:\n- SpotifyAppRemoteCoordinator actor: creates SPTAppRemote per-connect call\n with the caller's access token in SPTAppRemoteConnectionParams; delegate\n bridge (NSObject) hops callbacks onto the actor via Task{}\n- AppRemoteError enum + AppRemoteException (same pattern as SpotifyAu\n[…]\nlStore; module-level stores seeded from native state on init\n- src/index.ts: export hooks, ConnectionState + related event types\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(app-remote): Phase 2 — connection lifecycle (connect/disconnect/…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T16:11:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dcc6f40ee4954afb33c75f685a4cb42c22a15205",
"body": "…(#34)\n\n- Abstract SpotifyError base class in src/error.ts (carries `code` +\n `namespace`; never thrown directly)\n- Six concrete error subclasses: AuthError, AppRemoteError, PlayerError,\n UserError, ContentError, ImagesError — each with a typed error-code union\n- Branded SpotifyURI type (src/uri/)\n[…]\nub updated: remove \"planned\" language; web is not supported\n- CONTEXT.md: add branch naming convention (feat/*, fix/*, docs/* …)\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(api): Phase 1 — namespace skeleton, error hierarchy, SpotifyURI …",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T14:28:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4c4405c817e1655c0f47b72baea1a0eed34495a0",
"body": "Establishes project domain language and the full v1/v2 plan for App\nRemote SDK wrapping:\n\n- CONTEXT.md — glossary covering Auth SDK, App Remote SDK, Web API,\n connection lifecycle, SpotifyURI branded type, error class hierarchy,\n and the explicit no-web-api-wrapper boundary\n- docs/V1_PLAN.md — liv\n[…]\n= SDK 56+); branch cut happens after v1.0.0 is feature-complete\n- ADR-0006 — six-namespace API and full App Remote sub-API scope\n\nCo-authored-by: Drew Miller <49833875+wwdrew@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: add CONTEXT.md, V1_PLAN.md and ADRs 0004–0006 (#33)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-27T13:59:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d2fb5b5f9e6e7771da52034253e92877f39e07a",
"body": "…S (#31)\n\nThe iOS module re-threw caught `SpotifyError` / `SpotifyRefreshError` via\n`GenericException<String>`, whose `param` carried `\"<CODE>: <message>\"`\nbut which never overrode `Exception.reason` — leaving it as the literal\ndefault `\"undefined reason\"`. `expo-modules-core` then wrapped that in\n`\n[…]\nKotlin changes are needed — the JS\nshape is now identical across platforms.\n\nSee `docs/adr/0003-structured-exception-bridging.md` for the full\nrationale, alternatives considered, and validation steps.",
"is_bot": false,
"headline": "fix(ios): bridge structured SpotifyError code and reason through to J…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-11T14:44:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c5359be5e426a8c1f9e3af9f3039bed914c018e4",
"body": "* docs(adr): propose build-time download of Spotify native SDKs (ADR-0001)\n\nDocuments the case for replacing the checked-in `SpotifyiOS.xcframework`\nbinary with a build-time download via the iOS podspec, and adding a\nparallel mechanism for the Android App Remote AAR (which is published as\na GitHub r\n[…]\n forcibly stopped (no public API). Android coordinator unchanged\nbecause its `Mutex`/structured-concurrency model has no analogous leak.\n\nStatus: Proposed. Implementation will follow in a separate PR.",
"is_bot": false,
"headline": "docs: add initial ADRs (#30)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-11T14:40:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6f2e3bc056f2155ea05ab6cedaf6e3cc515f8eeb",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 0.8.0 (#23)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-05-07T15:25:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5582135eefec9db0579dd0d1b0cf03d7066bdbc0",
"body": "Configure per-repo conventions for the engineering skills set:\n\n- AGENTS.md at the repo root pointing to the three docs below\n- docs/agents/issue-tracker.md (GitHub Issues via the gh CLI)\n- docs/agents/triage-labels.md (canonical default vocabulary)\n- docs/agents/domain.md (single-context layout for CONTEXT.md / docs/adr/)\n\nGenerated by the setup-matt-pocock-skills agent skill.",
"is_bot": false,
"headline": "docs: add AGENTS.md and agent skills configuration (#29)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-07T15:23:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "104bf50fd9ae6c30c3ecfee1983fd07f4c381aa8",
"body": "… (#28)\n\n`SPTScopeSerializer.deserialize` skipped scope strings that weren't in\nits hard-coded map, which meant a typo or a newly-added Spotify scope\nsilently changed the meaning of a caller's auth request. Android\nforwards scope strings raw and lets Spotify reject them, so the two\nplatforms diverge\n[…]\n observable behaviour.\n\n\nKeep the lenient drop (changing it to a hard error would be a breaking\nchange) but `NSLog` each unknown scope so the discrepancy is at\nleastdebuggable from the device console.",
"is_bot": false,
"headline": "fix(ios): log unknown scope strings instead of silently dropping them…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:51:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "baacce75c6c049a2774f588c45742ad218b9f907",
"body": "`URLComponents.percentEncodedQuery` does not escape `+`, but in\n`application/x-www-form-urlencoded` bodies `+` is interpreted as a\nspace. If a refresh token (or any future field) ever contains `+`, the\nserver would receive a corrupted value.\n\n\nSpotify's current token format is base64url so this hasn't bittenanyone\nin practice, but the Foundation gotcha is well known and thefix is a\none-liner. Android uses OkHttp's `FormBody.Builder` whichalready encodes\ncorrectly, so no change needed there.",
"is_bot": false,
"headline": "fix(ios): escape \"+\" in form-encoded refresh token bodies (#27)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:51:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7e5aea60bbf7e8598061fe0c3c1272a13357239",
"body": "When the Spotify Android auth activity is dismissed before completing\n(user backs out, swipes home, kills the activity), the Spotify\nSDKreturns AuthorizationResponse.Type.EMPTY. The module was reporting\nthisas UNKNOWN, which surfaces as a generic error in callers' UIs\neventhough it's a perfectly nor\n[…]\nandling(typically: silent dismissal, no error UI) treats it correctly.\nMatchesthe behaviour of CANCELLED already, and is consistent with the\niOSside, which produces userCancelled for the same gesture.",
"is_bot": false,
"headline": "fix: classify Android EMPTY auth response as USER_CANCELLED (#26)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:50:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c5f40b3bc79393e4a583e3e308a3167c50ec4d1c",
"body": "Spotify's refresh endpoint only returns the `scope` field when the\ngranted scope set has changed since the last issuance — most refresh\nresponses omit it. Both natives were hardcoding the fallback as an\nempty list, which meant that any refresh-without-scope returned a\nSpotifySession with `scopes: []\n[…]\nan pass the previous\nsession's scopes through. Existing call sites continue to work but\nare now explicitly opting into the lossy behaviour by omitting it;\nthe README documents the recommended pattern.",
"is_bot": false,
"headline": "fix: plumb previous scopes through refreshSessionAsync (#25)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:50:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35410754ea2fa9523a3bfd7203e1b7c5e7930458",
"body": "…tions (#24)\n\nThe iOS SpotifyAuthCoordinator's `pending` continuation is only cleared\nby SPTSessionManagerDelegate callbacks. When those don't fire — e.g. when\nSpotify never redirects back to the host app, or the host process is\nbackgrounded mid-flow — `pending` stays set forever and every subsequen\n[…]\nbefore\nauthenticateAsync to ensure retries actually open Spotify rather than\nimmediately rejecting.\nNo-op on Android (the Kotlin coordinator already self-cleans via\nstructured concurrency) and on web.",
"is_bot": false,
"headline": "feat: add cancelPendingAuthAsync to recover from leaked auth continua…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:29:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b00fc478118e64cef82b8ab12ebfb8ad6d45ee60",
"body": "ios/ExpoSpotifySDKModule.swift and android/.../ExpoSpotifySDKModule.kt\nboth hardcoded SDK_VERSION = \"0.5.0\" while the npm package was at 0.7.1.\nThe value flows into the User-Agent header on token swap and refresh\nrequests, so server-side metrics and logs were attributing real 0.7.x\ntraffic to a long\n[…]\nBumps both files to 0.7.1 and adds x-release-please-version inline\nmarkers wired into release-please's extra-files so the literals stay\nin sync with package.json automatically on every future release.",
"is_bot": false,
"headline": "fix: correct SDK_VERSION drift and auto-sync on future releases (#22)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-05-06T13:27:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8681338845ffc5fbcc9855502672e6061f4cec40",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 0.7.1 (#21)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-04-30T11:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93edca030e0895e15688a6edfcbaf64bf076293e",
"body": "The previous default required at least a literal \"/\" in the URI path,\nwhich fails to match the most common Spotify redirect URI shape\n\"scheme://host\" where the path component is the empty string. \".*\"\nmatches both empty and non-empty paths, so existing setups that\noverride to a stricter pattern continue to work unchanged.",
"is_bot": false,
"headline": "fix(plugin): change default redirectPathPattern from \"/.*\" to \".*\" (#20)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-04-30T11:18:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e705de34373734acfa295fd4e9ad6917eae7ccdb",
"body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 0.7.0 (#19)",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-04-29T17:25:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d061642eb2252251407a14ed57d5065537db1c57",
"body": "Add an optional `showDialog: boolean` to the `authenticateAsync` config that\nforces Spotify's authorization dialog to appear even when the user already has\nan active session. Defaults to `false` so existing behaviour is unchanged.\n\nMaps to `SPTSessionManager.alwaysShowAuthorizationDialog` on iOS (a \n[…]\nhorizationOptions` flag) and\n`AuthorizationRequest.Builder.setShowDialog(boolean)` on Android.\n\nUseful during development to re-prompt for scopes; Spotify recommends against\nenabling it in production.",
"is_bot": false,
"headline": "feat: add showDialog option to authenticateAsync (#18)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-04-29T17:24:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b1b7f401b1a8a5f756af1c2b9803b20323e2447",
"body": "chore(main): release expo-spotify-sdk 0.6.0",
"is_bot": false,
"headline": "chore(main): release expo-spotify-sdk 0.6.0",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-04-29T11:45:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd63291f40cd7246d74b11179a7d694311f91577",
"body": null,
"is_bot": true,
"headline": "chore(main): release expo-spotify-sdk 0.6.0",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-04-29T11:44:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3de74453b1da3a7ed627cb47aa5590e07ae71dcc",
"body": "Made-with: Cursor",
"is_bot": false,
"headline": "feat: SDK upgrades, Expo Router example, CI & release automation (#14)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2026-04-29T11:43:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1eade7ee370ad6ef7dd0e2b60bc855c4d5aa0c66",
"body": "* upgrade internal spotify sdk to 3.0.0\n\n* rebuild example project",
"is_bot": false,
"headline": "chore: upgrade spotify sdk to 3.0.0 (#13)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2025-04-22T08:30:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17bf8907ce3209d7d193faa3dd22a3b1ac73ddde",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.4.3",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-10-29T10:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "134bbc80739e0354403f4475e6f7b479ccc18727",
"body": null,
"is_bot": false,
"headline": "fix(android): fix compilation errors when using sdk 52 (#10)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-10-29T10:11:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e9f9ef9e7e9822d37b751a4bf1347ee5b1990c6",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.4.2",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-26T10:19:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9fcd584e1507c3ac469437add3e7a887d6cc5b2",
"body": null,
"is_bot": false,
"headline": "fix: use maven auth module and remove redundant dependency",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-26T10:15:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e215efdfa1232ef0f0c0ee7a613e9d0641cec4f",
"body": null,
"is_bot": false,
"headline": "chore: upgrade dependency for security",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-22T17:21:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e795af0be16079d937a0c4f3d7206b3bda930da",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.4.1",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-17T09:10:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cdaa6abb901e0eb00f25e81ec39c6002cb87f2de",
"body": null,
"is_bot": false,
"headline": "docs: android authentication is now included",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-17T09:08:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04fdce968ef534a69315e93889003e7259c872ba",
"body": null,
"is_bot": false,
"headline": "fix: include android folder in package",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-17T09:07:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7a7cbec5ed8015c182e9704615e6210e48a28dc",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.4.0",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-14T09:06:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc8626871a030478608e408120cc52b0885f9636",
"body": null,
"is_bot": false,
"headline": "chore: upgrade example to expo sdk 51 (#7)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-14T08:45:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "028e864270461f4695171213c9231dec6b79ce08",
"body": null,
"is_bot": false,
"headline": "feat: upgrade ios sdk (#6)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-12T15:22:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63f09bbae647162e0c12eadbe3c25c8f3b4c902d",
"body": null,
"is_bot": false,
"headline": "feat: add android authentication (#5)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-06-12T15:04:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e70d376f8f70a80a2863b2d345510b8f15024f39",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.3.1",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-17T17:30:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93dc4700060101ce42ac46b5084a9a7e8180b8bb",
"body": null,
"is_bot": false,
"headline": "fix: remove feature to return code only (#3)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-17T17:21:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9bdb4fcac7e618b5ee538e55ac167f398c9c936",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.3.0",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-16T18:05:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f0186bf6f6d4f1ee2b0cbdbf71e641a8660cd09",
"body": "…hentication (#2)",
"is_bot": false,
"headline": "feat: implement flag to toggle whether to send code or session on aut…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-16T17:58:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c573a4a54e0aa1e2b686250c5fb1ab89e3c5705",
"body": null,
"is_bot": false,
"headline": "docs: update docs for latest release",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-16T09:53:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a8910a3d0448c510a249764b57fcbe51ab91a24",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.2.0",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-16T09:40:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6b32081f870e6888694f2b5f93b091a42199fb9",
"body": "* change parameter to a config value\r\n\r\n* remove dynamic config values from plugin config\r\n\r\n* rename functions\r\n\r\n* remove non-required values from config\r\n\r\n* pass in new config to native function\r\n\r\n* put clientID back into config\r\n\r\n* enable passing in urls\r\n\r\n* create a new session manager when authenticating\r\n\r\n* reset token when re-authenticating\r\n\r\n* set new example settings",
"is_bot": false,
"headline": "feat: allow passing token swap and refresh values in config (#1)",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-15T20:35:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2500f7c91c952af15bf2849f3bdb798a3de85b93",
"body": null,
"is_bot": false,
"headline": "chore: bump version number",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-15T11:38:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5052971484b75bae37285ad2811f3b69cd69b4c",
"body": null,
"is_bot": false,
"headline": "fix: don't accept handling url unless it has been",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-15T11:13:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12b2126596985b247687d1044874018b814cfbd7",
"body": null,
"is_bot": false,
"headline": "refactor: improve types",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-15T10:40:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29189283a039b7ef6c04834d81efe6d0c0f854ff",
"body": null,
"is_bot": false,
"headline": "chore: move server and dependencies into example",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-15T10:12:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a1a62a26cd073b69ffc84d7c5ae66f527c9f613",
"body": null,
"is_bot": false,
"headline": "chore: setup package details",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-11T18:03:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2b9905e2aa1c15c2091e77488ff75c8d7300898",
"body": null,
"is_bot": false,
"headline": "feat: implement initial version",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-11T17:33:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7013a5242620daebfca8c355ad67aab2c3ec8a7",
"body": null,
"is_bot": false,
"headline": "fix: add missing config types",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T17:40:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbd811065c53df79bd47fb4a517f52cddaeac89b",
"body": null,
"is_bot": false,
"headline": "feat: add support for more config values",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T17:22:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3c1c863f9d21a72b4cc60861c0d8a28592ac197",
"body": null,
"is_bot": false,
"headline": "refactor: tidy up plugin functions",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T15:54:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "364f0f61ef87c2919e4a266174b7f74a400ca26f",
"body": null,
"is_bot": false,
"headline": "feat: add Spotify config to object in Info.plist",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T15:48:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd1fd72e6ad389c78672ba2d0b5b7425f173c596",
"body": null,
"is_bot": false,
"headline": "feat: add config plugins",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T15:10:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05083df1d0d0f3ef537d82c1c4e8c880e08e1fe0",
"body": "…ble on the device",
"is_bot": false,
"headline": "feat: add isAvailable function to check whether Spotify app is availa…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2024-01-04T12:42:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b64abb1134d2b52293f0555d271f4c012fdbe804",
"body": null,
"is_bot": false,
"headline": "feat: add initial dummy authenticate function",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T17:17:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba44d0837b9616c78f98835f3e23da39161bc311",
"body": null,
"is_bot": false,
"headline": "chore: remove redundant view module files",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T15:57:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da0df5c493df318914c3fcfbf27f3bf4f2b992f8",
"body": null,
"is_bot": false,
"headline": "chore: remove ios submodule",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T15:35:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6be15199009013dc6bcaca0ca6e9899478bd4e9",
"body": "…east it works",
"is_bot": false,
"headline": "build(ios): lesser attempt at getting iOS framework to build but at l…",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T15:34:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3d14d1b9da6c68375f81909f1cacf27c8f331c4",
"body": null,
"is_bot": false,
"headline": "build(ios): fix paths to ios submodule and update podspec",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T10:11:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "005e1df6c9a763fd80b91c8bdf35dab15196fde0",
"body": null,
"is_bot": false,
"headline": "build(android): fix paths to android submodule",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T10:05:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f38310ba110627055e7a8c0461b84c484a520d6",
"body": null,
"is_bot": false,
"headline": "chore: move submodules out of plugin directories",
"author_name": "Drew Miller",
"author_login": "wwdrew",
"committed_at": "2023-12-11T10:04:05Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 14,
"commits_last_year": 61,
"latest_release_at": "2026-07-22T16:52:10Z",
"latest_release_tag": "expo-spotify-sdk-v2.3.2",
"releases_from_tags": false,
"days_since_last_push": 9,
"active_weeks_last_year": 10,
"days_since_latest_release": 9,
"mean_days_between_releases": 6.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 71,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@wwdrew/expo-spotify-sdk",
"exists": true,
"license": "MIT",
"keywords": [
"react-native",
"expo",
"expo-spotify-sdk",
"ExpoSpotifySDK",
"Spotify"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@wwdrew/expo-spotify-sdk",
"is_deprecated": false,
"latest_version": "2.3.2",
"repository_url": "https://github.com/wwdrew/expo-spotify-sdk",
"versions_count": 24,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 4708,
"first_published_at": "2024-01-12T10:14:43.516000Z",
"latest_published_at": "2026-07-22T16:52:45.046000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
}
]
},
"popularity": {
"forks": 7,
"stars": 17,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2024-01-17",
"count": 1
},
{
"date": "2024-06-24",
"count": 1
},
{
"date": "2025-01-25",
"count": 1
},
{
"date": "2025-02-13",
"count": 1
},
{
"date": "2025-04-17",
"count": 1
},
{
"date": "2025-05-06",
"count": 1
},
{
"date": "2026-03-09",
"count": 1
}
],
"complete": true,
"collected": 7,
"total_forks": 7
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"example/tsconfig.json",
"plugin/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [
"android/build.gradle",
"example/android/app/build.gradle",
"example/android/build.gradle"
],
"largest_source_bytes": 20879,
"source_files_sampled": 97,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 531
},
"dependencies": {
"manifests": [
"android/build.gradle",
"example/package.json",
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.15",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 2,
"oldest_advisory_days": 11
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 2,
"oldest_advisory_days": 11
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.6",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 2,
"oldest_advisory_days": 11
},
{
"name": "form-data",
"direct": false,
"version": "4.0.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-hmw2-7cc7-3qxx"
],
"fixed_version": "4.0.6",
"advisory_count": 1,
"oldest_advisory_days": 46
},
{
"name": "js-yaml",
"direct": false,
"version": "3.14.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m",
"GHSA-h67p-54hq-rp68"
],
"fixed_version": "4.3.0",
"advisory_count": 2,
"oldest_advisory_days": 46
},
{
"name": "js-yaml",
"direct": false,
"version": "4.2.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m"
],
"fixed_version": "4.3.0",
"advisory_count": 1,
"oldest_advisory_days": 11
},
{
"name": "postcss",
"direct": false,
"version": "8.5.15",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-r28c-9q8g-f849"
],
"fixed_version": "8.5.18",
"advisory_count": 1,
"oldest_advisory_days": 7
},
{
"name": "shell-quote",
"direct": false,
"version": "1.8.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-395f-4hp3-45gv"
],
"fixed_version": "1.9.0",
"advisory_count": 1,
"oldest_advisory_days": 11
},
{
"name": "uuid",
"direct": false,
"version": "7.0.3",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-w5hq-g745-h8pq"
],
"fixed_version": "13.0.1",
"advisory_count": 1,
"oldest_advisory_days": 100
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 9
},
"advisory_count": 13,
"affected_count": 9,
"assessed_count": 1062,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"maven",
"npm"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@adobe/css-tools",
"direct": false,
"version": "4.5.0",
"ecosystem": "npm"
},
{
"name": "@babel/cli",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-annotate-as-pure",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-create-class-features-plugin",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-create-regexp-features-plugin",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-define-polyfill-provider",
"direct": false,
"version": "0.6.8",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-member-expression-to-functions",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-optimise-call-expression",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-remap-async-to-generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-replace-supers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-skip-transparent-expression-wrappers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-wrap-function",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-firefox-class-in-computed-class-key",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-safari-class-field-initializer-scope",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-decorators",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-export-default-from",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-private-property-in-object",
"direct": false,
"version": "7.21.0-placeholder-for-preset-env.2",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-async-generators",
"direct": false,
"version": "7.8.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-bigint",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-properties",
"direct": false,
"version": "7.12.13",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-static-block",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-decorators",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-dynamic-import",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-export-default-from",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-flow",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-assertions",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-attributes",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-meta",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-json-strings",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-jsx",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-logical-assignment-operators",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-nullish-coalescing-operator",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-numeric-separator",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-object-rest-spread",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-catch-binding",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-chaining",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-private-property-in-object",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-top-level-await",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-typescript",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-unicode-sets-regex",
"direct": false,
"version": "7.18.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-arrow-functions",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-async-generator-functions",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-async-to-generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-block-scoped-functions",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-block-scoping",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-class-properties",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-class-static-block",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-classes",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-computed-properties",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-destructuring",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-dotall-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-duplicate-keys",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-duplicate-named-capturing-groups-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-dynamic-import",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-explicit-resource-management",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-exponentiation-operator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-export-namespace-from",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-flow-strip-types",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-for-of",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-function-name",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-json-strings",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-literals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-logical-assignment-operators",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-member-expression-literals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-amd",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-commonjs",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-systemjs",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-umd",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-named-capturing-groups-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-new-target",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-nullish-coalescing-operator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-numeric-separator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-object-rest-spread",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-object-super",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-optional-catch-binding",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-optional-chaining",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-parameters",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-private-methods",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-private-property-in-object",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-property-literals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-display-name",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx-development",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-pure-annotations",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-regenerator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-regexp-modifiers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-reserved-words",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-runtime",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-shorthand-properties",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-spread",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-sticky-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-template-literals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-typeof-symbol",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-typescript",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-escapes",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-property-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-sets-regex",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/preset-env",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/preset-modules",
"direct": false,
"version": "0.1.6-no-external-plugins",
"ecosystem": "npm"
},
{
"name": "@babel/preset-typescript",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "0.2.3",
"ecosystem": "npm"
},
{
"name": "@egjs/hammerjs",
"direct": false,
"version": "2.0.17",
"ecosystem": "npm"
},
{
"name": "@eslint-community/eslint-utils",
"direct": false,
"version": "4.9.1",
"ecosystem": "npm"
},
{
"name": "@eslint-community/regexpp",
"direct": false,
"version": "4.12.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-array",
"direct": false,
"version": "0.21.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-helpers",
"direct": false,
"version": "0.4.2",
"ecosystem": "npm"
},
{
"name": "@eslint/core",
"direct": false,
"version": "0.17.0",
"ecosystem": "npm"
},
{
"name": "@eslint/eslintrc",
"direct": false,
"version": "3.3.5",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "9.39.4",
"ecosystem": "npm"
},
{
"name": "@eslint/object-schema",
"direct": false,
"version": "2.1.7",
"ecosystem": "npm"
},
{
"name": "@eslint/plugin-kit",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "@expo-google-fonts/material-symbols",
"direct": false,
"version": "0.4.38",
"ecosystem": "npm"
},
{
"name": "@expo/cli",
"direct": false,
"version": "56.1.16",
"ecosystem": "npm"
},
{
"name": "@expo/code-signing-certificates",
"direct": false,
"version": "0.0.6",
"ecosystem": "npm"
},
{
"name": "@expo/config",
"direct": false,
"version": "56.0.9",
"ecosystem": "npm"
},
{
"name": "@expo/config-plugins",
"direct": false,
"version": "56.0.8",
"ecosystem": "npm"
},
{
"name": "@expo/config-plugins",
"direct": false,
"version": "56.0.9",
"ecosystem": "npm"
},
{
"name": "@expo/config-types",
"direct": false,
"version": "56.0.5",
"ecosystem": "npm"
},
{
"name": "@expo/config-types",
"direct": false,
"version": "56.0.6",
"ecosystem": "npm"
},
{
"name": "@expo/devcert",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@expo/devtools",
"direct": false,
"version": "56.0.2",
"ecosystem": "npm"
},
{
"name": "@expo/dom-webview",
"direct": false,
"version": "56.0.5",
"ecosystem": "npm"
},
{
"name": "@expo/env",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "@expo/expo-modules-macros-plugin",
"direct": false,
"version": "0.0.9",
"ecosystem": "npm"
},
{
"name": "@expo/expo-modules-macros-plugin",
"direct": false,
"version": "0.2.2",
"ecosystem": "npm"
},
{
"name": "@expo/fingerprint",
"direct": false,
"version": "0.19.4",
"ecosystem": "npm"
},
{
"name": "@expo/image-utils",
"direct": false,
"version": "0.10.1",
"ecosystem": "npm"
},
{
"name": "@expo/inline-modules",
"direct": false,
"version": "0.0.12",
"ecosystem": "npm"
},
{
"name": "@expo/json-file",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "@expo/local-build-cache-provider",
"direct": false,
"version": "56.0.8",
"ecosystem": "npm"
},
{
"name": "@expo/log-box",
"direct": false,
"version": "56.0.13",
"ecosystem": "npm"
},
{
"name": "@expo/metro",
"direct": false,
"version": "56.0.0",
"ecosystem": "npm"
},
{
"name": "@expo/metro-config",
"direct": false,
"version": "56.0.14",
"ecosystem": "npm"
},
{
"name": "@expo/metro-file-map",
"direct": false,
"version": "56.0.3",
"ecosystem": "npm"
},
{
"name": "@expo/metro-runtime",
"direct": false,
"version": "56.0.15",
"ecosystem": "npm"
},
{
"name": "@expo/osascript",
"direct": false,
"version": "2.6.0",
"ecosystem": "npm"
},
{
"name": "@expo/package-manager",
"direct": false,
"version": "1.12.1",
"ecosystem": "npm"
},
{
"name": "@expo/plist",
"direct": false,
"version": "0.7.0",
"ecosystem": "npm"
},
{
"name": "@expo/prebuild-config",
"direct": false,
"version": "56.0.16",
"ecosystem": "npm"
},
{
"name": "@expo/require-utils",
"direct": false,
"version": "56.1.3",
"ecosystem": "npm"
},
{
"name": "@expo/router-server",
"direct": false,
"version": "56.0.14",
"ecosystem": "npm"
},
{
"name": "@expo/schema-utils",
"direct": false,
"version": "56.0.1",
"ecosystem": "npm"
},
{
"name": "@expo/sdk-runtime-versions",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "@expo/spawn-async",
"direct": false,
"version": "1.8.0",
"ecosystem": "npm"
},
{
"name": "@expo/sudo-prompt",
"direct": false,
"version": "9.3.2",
"ecosystem": "npm"
},
{
"name": "@expo/ui",
"direct": false,
"version": "56.0.18",
"ecosystem": "npm"
},
{
"name": "@expo/ws-tunnel",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "@expo/xcpretty",
"direct": false,
"version": "4.4.4",
"ecosystem": "npm"
},
{
"name": "@humanfs/core",
"direct": false,
"version": "0.19.2",
"ecosystem": "npm"
},
{
"name": "@humanfs/node",
"direct": false,
"version": "0.16.8",
"ecosystem": "npm"
},
{
"name": "@humanfs/types",
"direct": false,
"version": "0.15.0",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/module-importer",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/retry",
"direct": false,
"version": "0.4.3",
"ecosystem": "npm"
},
{
"name": "@isaacs/ttlcache",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/load-nyc-config",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.6",
"ecosystem": "npm"
},
{
"name": "@jest/console",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/core",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/create-cache-key-function",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/diff-sequences",
"direct": false,
"version": "30.4.0",
"ecosystem": "npm"
},
{
"name": "@jest/environment",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/fake-timers",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/get-type",
"direct": false,
"version": "30.1.0",
"ecosystem": "npm"
},
{
"name": "@jest/globals",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/reporters",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/schemas",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/schemas",
"direct": false,
"version": "30.4.1",
"ecosystem": "npm"
},
{
"name": "@jest/source-map",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/test-result",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/test-sequencer",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/transform",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/types",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/source-map",
"direct": false,
"version": "0.3.11",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@nicolo-ribaudo/chokidar-2",
"direct": false,
"version": "2.1.8-no-fsevents.3",
"ecosystem": "npm"
},
{
"name": "@pkgr/core",
"direct": false,
"version": "0.3.6",
"ecosystem": "npm"
},
{
"name": "@radix-ui/primitive",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-collection",
"direct": false,
"version": "1.1.10",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-compose-refs",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-context",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dialog",
"direct": false,
"version": "1.1.17",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-direction",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dismissable-layer",
"direct": false,
"version": "1.1.13",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-guards",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-scope",
"direct": false,
"version": "1.1.10",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-id",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-portal",
"direct": false,
"version": "1.1.12",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-presence",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-primitive",
"direct": false,
"version": "2.1.6",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-roving-focus",
"direct": false,
"version": "1.1.13",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-slot",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-tabs",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-callback-ref",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-controllable-state",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-effect-event",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-escape-keydown",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-layout-effect",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@react-native-async-storage/async-storage",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "@react-native-masked-view/masked-view",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "@react-native/assets-registry",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/babel-plugin-codegen",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/codegen",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/community-cli-plugin",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/debugger-frontend",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/debugger-shell",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/dev-middleware",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/gradle-plugin",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/jest-preset",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/js-polyfills",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/normalize-colors",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@react-native/virtualized-lists",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "@rtsao/scc",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@sinclair/typebox",
"direct": false,
"version": "0.27.10",
"ecosystem": "npm"
},
{
"name": "@sinclair/typebox",
"direct": false,
"version": "0.34.49",
"ecosystem": "npm"
},
{
"name": "@sinonjs/commons",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "@sinonjs/fake-timers",
"direct": false,
"version": "10.3.0",
"ecosystem": "npm"
},
{
"name": "@testing-library/jest-dom",
"direct": false,
"version": "6.9.1",
"ecosystem": "npm"
},
{
"name": "@testing-library/react-native",
"direct": false,
"version": "13.3.3",
"ecosystem": "npm"
},
{
"name": "@testing-library/user-event",
"direct": false,
"version": "14.6.1",
"ecosystem": "npm"
},
{
"name": "@tootallnate/once",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "@types/babel__core",
"direct": false,
"version": "7.20.5",
"ecosystem": "npm"
},
{
"name": "@types/babel__generator",
"direct": false,
"version": "7.27.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__template",
"direct": false,
"version": "7.4.4",
"ecosystem": "npm"
},
{
"name": "@types/babel__traverse",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/graceful-fs",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@types/hammerjs",
"direct": false,
"version": "2.0.46",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-coverage",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-report",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-reports",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/jest",
"direct": false,
"version": "29.5.14",
"ecosystem": "npm"
},
{
"name": "@types/jsdom",
"direct": false,
"version": "20.0.1",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/json5",
"direct": false,
"version": "0.0.29",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "25.9.2",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "26.0.0",
"ecosystem": "npm"
},
{
"name": "@types/react",
"direct": false,
"version": "19.2.17",
"ecosystem": "npm"
},
{
"name": "@types/react-test-renderer",
"direct": false,
"version": "19.1.0",
"ecosystem": "npm"
},
{
"name": "@types/stack-utils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "@types/tough-cookie",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "@types/yargs",
"direct": false,
"version": "17.0.35",
"ecosystem": "npm"
},
{
"name": "@types/yargs-parser",
"direct": false,
"version": "21.0.3",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/eslint-plugin",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/parser",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/project-service",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/scope-manager",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/tsconfig-utils",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/type-utils",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/types",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/typescript-estree",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/utils",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/visitor-keys",
"direct": false,
"version": "8.61.0",
"ecosystem": "npm"
},
{
"name": "@ungap/structured-clone",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "@xmldom/xmldom",
"direct": false,
"version": "0.8.13",
"ecosystem": "npm"
},
{
"name": "@xmldom/xmldom",
"direct": false,
"version": "0.9.10",
"ecosystem": "npm"
},
{
"name": "abab",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "abort-controller",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "1.3.8",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.16.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.17.0",
"ecosystem": "npm"
},
{
"name": "acorn-globals",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "acorn-jsx",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "acorn-walk",
"direct": false,
"version": "8.3.5",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "7.1.4",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "6.15.0",
"ecosystem": "npm"
},
{
"name": "anser",
"direct": false,
"version": "1.4.10",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "6.2.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "anymatch",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "arg",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "aria-hidden",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "aria-query",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "array-buffer-byte-length",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "array-includes",
"direct": false,
"version": "3.1.9",
"ecosystem": "npm"
},
{
"name": "array.prototype.findlast",
"direct": false,
"version": "1.2.5",
"ecosystem": "npm"
},
{
"name": "array.prototype.findlastindex",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "array.prototype.flat",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "array.prototype.flatmap",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "array.prototype.tosorted",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "arraybuffer.prototype.slice",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "asap",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "async-function",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "asynckit",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "available-typed-arrays",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "babel-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-dynamic-import-node",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "babel-plugin-istanbul",
"direct": false,
"version": "6.1.1",
"ecosystem": "npm"
},
{
"name": "babel-plugin-jest-hoist",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "babel-plugin-module-resolver",
"direct": false,
"version": "5.0.3",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs2",
"direct": false,
"version": "0.4.17",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs3",
"direct": false,
"version": "0.13.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs3",
"direct": false,
"version": "0.14.2",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-regenerator",
"direct": false,
"version": "0.6.8",
"ecosystem": "npm"
},
{
"name": "babel-plugin-react-compiler",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-react-native-web",
"direct": false,
"version": "0.21.2",
"ecosystem": "npm"
},
{
"name": "babel-plugin-syntax-hermes-parser",
"direct": false,
"version": "0.33.3",
"ecosystem": "npm"
},
{
"name": "babel-plugin-transform-flow-enums",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "babel-preset-current-node-syntax",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "babel-preset-expo",
"direct": false,
"version": "56.0.14",
"ecosystem": "npm"
},
{
"name": "babel-preset-expo",
"direct": false,
"version": "56.0.15",
"ecosystem": "npm"
},
{
"name": "babel-preset-jest",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "base64-js",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.34",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.38",
"ecosystem": "npm"
},
{
"name": "big-integer",
"direct": false,
"version": "1.6.52",
"ecosystem": "npm"
},
{
"name": "binary-extensions",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "bplist-creator",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "bplist-parser",
"direct": false,
"version": "0.3.1",
"ecosystem": "npm"
},
{
"name": "bplist-parser",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.2",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.4",
"ecosystem": "npm"
},
{
"name": "bs-logger",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "bser",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "5.3.1",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001797",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001799",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "char-regex",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "char-regex",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "chrome-launcher",
"direct": false,
"version": "0.15.2",
"ecosystem": "npm"
},
{
"name": "chromium-edge-launcher",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "3.9.0",
"ecosystem": "npm"
},
{
"name": "cjs-module-lexer",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "cli-cursor",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "cli-spinners",
"direct": false,
"version": "2.9.2",
"ecosystem": "npm"
},
{
"name": "client-only",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "clone",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "co",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "collect-v8-coverage",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "color",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "1.9.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "color-string",
"direct": false,
"version": "1.9.1",
"ecosystem": "npm"
},
{
"name": "combined-stream",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "12.1.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "2.20.3",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "6.2.1",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "compressible",
"direct": false,
"version": "2.0.18",
"ecosystem": "npm"
},
{
"name": "compression",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "connect",
"direct": false,
"version": "3.7.0",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "core-js-compat",
"direct": false,
"version": "3.49.0",
"ecosystem": "npm"
},
{
"name": "create-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "css.escape",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "cssom",
"direct": false,
"version": "0.3.8",
"ecosystem": "npm"
},
{
"name": "cssom",
"direct": false,
"version": "0.5.0",
"ecosystem": "npm"
},
{
"name": "cssstyle",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "csstype",
"direct": false,
"version": "3.2.3",
"ecosystem": "npm"
},
{
"name": "data-urls",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "data-view-buffer",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "data-view-byte-length",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "data-view-byte-offset",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "2.6.9",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decimal.js",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "decode-uri-component",
"direct": false,
"version": "0.2.2",
"ecosystem": "npm"
},
{
"name": "dedent",
"direct": false,
"version": "1.7.2",
"ecosystem": "npm"
},
{
"name": "deep-is",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "deepmerge",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "defaults",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "define-data-property",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "define-properties",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "delayed-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "destroy",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "detect-newline",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "detect-node-es",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "diff-sequences",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "dnssd-advertise",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "doctrine",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "dom-accessibility-api",
"direct": false,
"version": "0.6.3",
"ecosystem": "npm"
},
{
"name": "domexception",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.370",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.377",
"ecosystem": "npm"
},
{
"name": "emittery",
"direct": false,
"version": "0.13.1",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "enhanced-resolve",
"direct": false,
"version": "5.23.0",
"ecosystem": "npm"
},
{
"name": "entities",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "error-ex",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "error-stack-parser",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "es-abstract",
"direct": false,
"version": "1.24.2",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-iterator-helpers",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "es-shim-unscopables",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "es-to-primitive",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "escodegen",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "9.39.4",
"ecosystem": "npm"
},
{
"name": "eslint-compat-utils",
"direct": false,
"version": "0.5.1",
"ecosystem": "npm"
},
{
"name": "eslint-config-prettier",
"direct": false,
"version": "9.1.2",
"ecosystem": "npm"
},
{
"name": "eslint-config-universe",
"direct": false,
"version": "15.2.0",
"ecosystem": "npm"
},
{
"name": "eslint-import-resolver-node",
"direct": false,
"version": "0.3.10",
"ecosystem": "npm"
},
{
"name": "eslint-module-utils",
"direct": false,
"version": "2.13.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-es",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-es-x",
"direct": false,
"version": "7.8.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-import",
"direct": false,
"version": "2.32.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-n",
"direct": false,
"version": "17.24.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-node",
"direct": false,
"version": "11.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-prettier",
"direct": false,
"version": "5.5.6",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-react",
"direct": false,
"version": "7.37.5",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-react-hooks",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "8.4.0",
"ecosystem": "npm"
},
{
"name": "eslint-utils",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "4.2.1",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "10.4.0",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "esquery",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "event-target-shim",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "exit",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "expo",
"direct": false,
"version": "56.0.12",
"ecosystem": "npm"
},
{
"name": "expo-asset",
"direct": false,
"version": "56.0.17",
"ecosystem": "npm"
},
{
"name": "expo-constants",
"direct": false,
"version": "56.0.18",
"ecosystem": "npm"
},
{
"name": "expo-file-system",
"direct": false,
"version": "56.0.8",
"ecosystem": "npm"
},
{
"name": "expo-font",
"direct": false,
"version": "56.0.7",
"ecosystem": "npm"
},
{
"name": "expo-glass-effect",
"direct": false,
"version": "56.0.4",
"ecosystem": "npm"
},
{
"name": "expo-keep-awake",
"direct": false,
"version": "56.0.3",
"ecosystem": "npm"
},
{
"name": "expo-linking",
"direct": false,
"version": "56.0.14",
"ecosystem": "npm"
},
{
"name": "expo-module-scripts",
"direct": false,
"version": "56.0.3",
"ecosystem": "npm"
},
{
"name": "expo-modules-autolinking",
"direct": false,
"version": "56.0.16",
"ecosystem": "npm"
},
{
"name": "expo-modules-core",
"direct": false,
"version": "56.0.15",
"ecosystem": "npm"
},
{
"name": "expo-modules-core",
"direct": false,
"version": "56.0.17",
"ecosystem": "npm"
},
{
"name": "expo-modules-jsi",
"direct": false,
"version": "56.0.10",
"ecosystem": "npm"
},
{
"name": "expo-modules-jsi",
"direct": false,
"version": "56.0.8",
"ecosystem": "npm"
},
{
"name": "expo-router",
"direct": false,
"version": "56.2.11",
"ecosystem": "npm"
},
{
"name": "expo-server",
"direct": false,
"version": "56.0.5",
"ecosystem": "npm"
},
{
"name": "expo-splash-screen",
"direct": false,
"version": "56.0.10",
"ecosystem": "npm"
},
{
"name": "expo-status-bar",
"direct": false,
"version": "56.0.4",
"ecosystem": "npm"
},
{
"name": "expo-symbols",
"direct": false,
"version": "56.0.6",
"ecosystem": "npm"
},
{
"name": "expo-system-ui",
"direct": false,
"version": "56.0.5",
"ecosystem": "npm"
},
{
"name": "exponential-backoff",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-diff",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-levenshtein",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "fb-dotslash",
"direct": false,
"version": "0.5.8",
"ecosystem": "npm"
},
{
"name": "fb-watchman",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "fetch-nodeshim",
"direct": false,
"version": "0.4.10",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "filter-obj",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "finalhandler",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "find-babel-config",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "flatted",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "flow-enums-runtime",
"direct": false,
"version": "0.0.6",
"ecosystem": "npm"
},
{
"name": "fontfaceobserver",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "for-each",
"direct": false,
"version": "0.3.5",
"ecosystem": "npm"
},
{
"name": "form-data",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "0.5.2",
"ecosystem": "npm"
},
{
"name": "fs-readdir-recursive",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "function.prototype.name",
"direct": false,
"version": "1.1.8",
"ecosystem": "npm"
},
{
"name": "functions-have-names",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "generator-function",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-nonce",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-package-type",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "get-symbol-description",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "get-tsconfig",
"direct": false,
"version": "4.14.0",
"ecosystem": "npm"
},
{
"name": "getenv",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "13.0.6",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.3",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "9.3.5",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "14.0.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "15.15.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "16.5.0",
"ecosystem": "npm"
},
{
"name": "globalthis",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "globrex",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "handlebars",
"direct": false,
"version": "4.7.9",
"ecosystem": "npm"
},
{
"name": "has-bigints",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-property-descriptors",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-proto",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "hermes-compiler",
"direct": false,
"version": "250829098.0.10",
"ecosystem": "npm"
},
{
"name": "hermes-estree",
"direct": false,
"version": "0.25.1",
"ecosystem": "npm"
},
{
"name": "hermes-estree",
"direct": false,
"version": "0.33.3",
"ecosystem": "npm"
},
{
"name": "hermes-estree",
"direct": false,
"version": "0.35.0",
"ecosystem": "npm"
},
{
"name": "hermes-parser",
"direct": false,
"version": "0.25.1",
"ecosystem": "npm"
},
{
"name": "hermes-parser",
"direct": false,
"version": "0.33.3",
"ecosystem": "npm"
},
{
"name": "hermes-parser",
"direct": false,
"version": "0.35.0",
"ecosystem": "npm"
},
{
"name": "hoist-non-react-statics",
"direct": false,
"version": "3.3.2",
"ecosystem": "npm"
},
{
"name": "hosted-git-info",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "html-encoding-sniffer",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "http-proxy-agent",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "human-signals",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.6.3",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "7.0.5",
"ecosystem": "npm"
},
{
"name": "image-size",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "import-fresh",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "import-local",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "indent-string",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "inflight",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "internal-slot",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "invariant",
"direct": false,
"version": "2.2.4",
"ecosystem": "npm"
},
{
"name": "is-array-buffer",
"direct": false,
"version": "3.0.5",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.3.4",
"ecosystem": "npm"
},
{
"name": "is-async-function",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-bigint",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-binary-path",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-boolean-object",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "is-callable",
"direct": false,
"version": "1.2.7",
"ecosystem": "npm"
},
{
"name": "is-core-module",
"direct": false,
"version": "2.16.2",
"ecosystem": "npm"
},
{
"name": "is-data-view",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "is-date-object",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-docker",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-finalizationregistry",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-generator-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-generator-function",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-map",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-negative-zero",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-number-object",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-plain-obj",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-potential-custom-element-name",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "is-regex",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "is-set",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-shared-array-buffer",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "is-stream",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "is-string",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-symbol",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-typed-array",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "is-weakmap",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "is-weakref",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-weakset",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "is-wsl",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "isarray",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-coverage",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-source-maps",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "iterator.prototype",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-changed-files",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-circus",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-cli",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-config",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-diff",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-diff",
"direct": false,
"version": "30.4.1",
"ecosystem": "npm"
},
{
"name": "jest-docblock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-each",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-environment-jsdom",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-environment-node",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-expo",
"direct": false,
"version": "56.0.4",
"ecosystem": "npm"
},
{
"name": "jest-get-type",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-haste-map",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-leak-detector",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-matcher-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-matcher-utils",
"direct": false,
"version": "30.4.1",
"ecosystem": "npm"
},
{
"name": "jest-message-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-mock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-pnp-resolver",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "jest-regex-util",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-resolve",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-resolve-dependencies",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runner",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runtime",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-snapshot",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-snapshot-prettier",
"direct": false,
"version": "2.8.8",
"ecosystem": "npm"
},
{
"name": "jest-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-validate",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-watch-select-projects",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "jest-watch-typeahead",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "jest-watcher",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-worker",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jimp-compact",
"direct": false,
"version": "0.16.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "3.14.2",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "jsc-safe-url",
"direct": false,
"version": "0.2.4",
"ecosystem": "npm"
},
{
"name": "jsdom",
"direct": false,
"version": "20.0.3",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "json-buffer",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "json-parse-even-better-errors",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-stable-stringify-without-jsonify",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "jsx-ast-utils",
"direct": false,
"version": "3.3.5",
"ecosystem": "npm"
},
{
"name": "keyv",
"direct": false,
"version": "4.5.4",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "lan-network",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "leven",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "levn",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "lighthouse-logger",
"direct": false,
"version": "1.4.2",
"ecosystem": "npm"
},
{
"name": "lightningcss",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-android-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-freebsd-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm-gnueabihf",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-arm64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-x64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lines-and-columns",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lodash",
"direct": false,
"version": "4.18.1",
"ecosystem": "npm"
},
{
"name": "lodash.debounce",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "lodash.memoize",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "lodash.merge",
"direct": false,
"version": "4.6.2",
"ecosystem": "npm"
},
{
"name": "lodash.throttle",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "log-symbols",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "loose-envify",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "10.4.3",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "11.5.1",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "make-error",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "makeerror",
"direct": false,
"version": "1.0.12",
"ecosystem": "npm"
},
{
"name": "marky",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "memoize-one",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "merge-options",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "merge-stream",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "metro",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-babel-transformer",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-cache",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-cache-key",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-config",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-core",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-file-map",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-minify-terser",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-resolver",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-runtime",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-source-map",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-symbolicate",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-transform-plugins",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "metro-transform-worker",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mime",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.54.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "mimic-fn",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "mimic-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "min-indent",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "8.0.7",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "4.2.8",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "mkdirp",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "multitars",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.15",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "0.6.3",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "0.6.4",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "neo-async",
"direct": false,
"version": "2.6.2",
"ecosystem": "npm"
},
{
"name": "node-exports-info",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "node-forge",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "node-int64",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.47",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.48",
"ecosystem": "npm"
},
{
"name": "normalize-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "npm-package-arg",
"direct": false,
"version": "11.0.3",
"ecosystem": "npm"
},
{
"name": "npm-run-path",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "nullthrows",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "nwsapi",
"direct": false,
"version": "2.2.24",
"ecosystem": "npm"
},
{
"name": "ob1",
"direct": false,
"version": "0.84.4",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "object-keys",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "object.assign",
"direct": false,
"version": "4.1.7",
"ecosystem": "npm"
},
{
"name": "object.entries",
"direct": false,
"version": "1.1.9",
"ecosystem": "npm"
},
{
"name": "object.fromentries",
"direct": false,
"version": "2.0.8",
"ecosystem": "npm"
},
{
"name": "object.groupby",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "object.values",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "on-headers",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "open",
"direct": false,
"version": "7.4.2",
"ecosystem": "npm"
},
{
"name": "optionator",
"direct": false,
"version": "0.9.4",
"ecosystem": "npm"
},
{
"name": "ora",
"direct": false,
"version": "3.4.0",
"ecosystem": "npm"
},
{
"name": "own-keys",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "parent-module",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parse-json",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "parse-png",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "parse5",
"direct": false,
"version": "7.3.0",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "pify",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "pirates",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "pkg-up",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "plist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "pngjs",
"direct": false,
"version": "3.4.0",
"ecosystem": "npm"
},
{
"name": "possible-typed-array-names",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.15",
"ecosystem": "npm"
},
{
"name": "prelude-ls",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.4",
"ecosystem": "npm"
},
{
"name": "prettier-linter-helpers",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "pretty-format",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "pretty-format",
"direct": false,
"version": "30.4.1",
"ecosystem": "npm"
},
{
"name": "proc-log",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "progress",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "promise",
"direct": false,
"version": "8.3.0",
"ecosystem": "npm"
},
{
"name": "prompts",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "prop-types",
"direct": false,
"version": "15.8.1",
"ecosystem": "npm"
},
{
"name": "psl",
"direct": false,
"version": "1.15.0",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "pure-rand",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "query-string",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "querystringify",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "queue",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "range-parser",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "react",
"direct": false,
"version": "19.2.3",
"ecosystem": "npm"
},
{
"name": "react-devtools-core",
"direct": false,
"version": "6.1.5",
"ecosystem": "npm"
},
{
"name": "react-fast-compare",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "react-freeze",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "16.13.1",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "19.2.7",
"ecosystem": "npm"
},
{
"name": "react-is-18",
"direct": false,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "react-is-19",
"direct": false,
"version": "19.2.7",
"ecosystem": "npm"
},
{
"name": "react-native",
"direct": false,
"version": "0.85.3",
"ecosystem": "npm"
},
{
"name": "react-native-drawer-layout",
"direct": false,
"version": "4.2.5",
"ecosystem": "npm"
},
{
"name": "react-native-gesture-handler",
"direct": false,
"version": "2.31.2",
"ecosystem": "npm"
},
{
"name": "react-native-safe-area-context",
"direct": false,
"version": "5.7.0",
"ecosystem": "npm"
},
{
"name": "react-native-screens",
"direct": false,
"version": "4.25.2",
"ecosystem": "npm"
},
{
"name": "react-refresh",
"direct": false,
"version": "0.14.2",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll",
"direct": false,
"version": "2.7.2",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll-bar",
"direct": false,
"version": "2.3.8",
"ecosystem": "npm"
},
{
"name": "react-style-singleton",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "react-test-renderer",
"direct": false,
"version": "19.2.3",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "redent",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "reflect.getprototypeof",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "regenerate",
"direct": false,
"version": "1.4.2",
"ecosystem": "npm"
},
{
"name": "regenerate-unicode-properties",
"direct": false,
"version": "10.2.2",
"ecosystem": "npm"
},
{
"name": "regenerator-runtime",
"direct": false,
"version": "0.13.11",
"ecosystem": "npm"
},
{
"name": "regexp.prototype.flags",
"direct": false,
"version": "1.5.4",
"ecosystem": "npm"
},
{
"name": "regexpp",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "regexpu-core",
"direct": false,
"version": "6.4.0",
"ecosystem": "npm"
},
{
"name": "regjsgen",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "regjsparser",
"direct": false,
"version": "0.13.1",
"ecosystem": "npm"
},
{
"name": "regjsparser",
"direct": false,
"version": "0.13.2",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "requires-port",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "reselect",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "1.22.12",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "2.0.0-next.7",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-pkg-maps",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-workspace-root",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "resolve.exports",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "restore-cursor",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "safe-array-concat",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "safe-buffer",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "safe-push-apply",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "safe-regex-test",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "sax",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "saxes",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "scheduler",
"direct": false,
"version": "0.27.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "5.7.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.5",
"ecosystem": "npm"
},
{
"name": "send",
"direct": false,
"version": "0.19.2",
"ecosystem": "npm"
},
{
"name": "serialize-error",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "serve-static",
"direct": false,
"version": "1.16.3",
"ecosystem": "npm"
},
{
"name": "server-only",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "set-function-length",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "set-function-name",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "set-proto",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "sf-symbols-typescript",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "shallowequal",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "shell-quote",
"direct": false,
"version": "1.8.4",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "simple-plist",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "simple-swizzle",
"direct": false,
"version": "0.2.4",
"ecosystem": "npm"
},
{
"name": "sisteransi",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "slugify",
"direct": false,
"version": "1.6.9",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.5.6",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.5.7",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.13",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.21",
"ecosystem": "npm"
},
{
"name": "split-on-first",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "sprintf-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "stack-generator",
"direct": false,
"version": "2.0.10",
"ecosystem": "npm"
},
{
"name": "stack-utils",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "stackframe",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "stacktrace-gps",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "stacktrace-js",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "stacktrace-parser",
"direct": false,
"version": "0.1.11",
"ecosystem": "npm"
},
{
"name": "standard-navigation",
"direct": false,
"version": "0.0.5",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "stop-iteration-iterator",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "stream-buffers",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "strict-uri-encode",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "string-length",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "string-length",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string.prototype.matchall",
"direct": false,
"version": "4.0.12",
"ecosystem": "npm"
},
{
"name": "string.prototype.repeat",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "string.prototype.trim",
"direct": false,
"version": "1.2.11",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimend",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimstart",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "strip-final-newline",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "strip-indent",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "structured-headers",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "5.5.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "8.1.1",
"ecosystem": "npm"
},
{
"name": "supports-hyperlinks",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "supports-preserve-symlinks-flag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "symbol-tree",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "synckit",
"direct": false,
"version": "0.11.13",
"ecosystem": "npm"
},
{
"name": "tapable",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "terminal-link",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "terser",
"direct": false,
"version": "5.48.0",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "throat",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tmpl",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "toidentifier",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "toqr",
"direct": false,
"version": "0.1.1",
"ecosystem": "npm"
},
{
"name": "tough-cookie",
"direct": false,
"version": "4.1.4",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "ts-api-utils",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "ts-declaration-location",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "ts-jest",
"direct": false,
"version": "29.4.11",
"ecosystem": "npm"
},
{
"name": "tsconfig-paths",
"direct": false,
"version": "3.15.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "type-check",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "type-detect",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.21.3",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "4.41.0",
"ecosystem": "npm"
},
{
"name": "typed-array-buffer",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "typed-array-byte-length",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "typed-array-byte-offset",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "typed-array-length",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "uglify-js",
"direct": false,
"version": "3.19.3",
"ecosystem": "npm"
},
{
"name": "unbox-primitive",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "7.24.6",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "8.3.0",
"ecosystem": "npm"
},
{
"name": "unicode-canonical-property-names-ecmascript",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "unicode-match-property-ecmascript",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "unicode-match-property-value-ecmascript",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "unicode-property-aliases-ecmascript",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "universalify",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "url-parse",
"direct": false,
"version": "1.5.10",
"ecosystem": "npm"
},
{
"name": "use-callback-ref",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "use-latest-callback",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "use-sidecar",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "utils-merge",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "uuid",
"direct": false,
"version": "7.0.3",
"ecosystem": "npm"
},
{
"name": "v8-to-istanbul",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "validate-npm-package-name",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "vaul",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "vlq",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "w3c-xmlserializer",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "walker",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "warn-once",
"direct": false,
"version": "0.1.1",
"ecosystem": "npm"
},
{
"name": "wcwidth",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-encoding",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-fetch",
"direct": false,
"version": "3.6.20",
"ecosystem": "npm"
},
{
"name": "whatwg-mimetype",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "11.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-url-minimum",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "which-boxed-primitive",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "which-builtin-type",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "which-collection",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "which-typed-array",
"direct": false,
"version": "1.1.22",
"ecosystem": "npm"
},
{
"name": "word-wrap",
"direct": false,
"version": "1.2.5",
"ecosystem": "npm"
},
{
"name": "wordwrap",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "write-file-atomic",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "7.5.11",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "8.21.0",
"ecosystem": "npm"
},
{
"name": "xcode",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "xml-name-validator",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "xml2js",
"direct": false,
"version": "0.6.0",
"ecosystem": "npm"
},
{
"name": "xmlbuilder",
"direct": false,
"version": "11.0.1",
"ecosystem": "npm"
},
{
"name": "xmlbuilder",
"direct": false,
"version": "15.1.1",
"ecosystem": "npm"
},
{
"name": "xmlchars",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.3",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "3.25.76",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "zod-validation-error",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 1062,
"direct_count": 0,
"indirect_count": 1062
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 59,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 10,
"closed_unmerged_prs": 7
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "wwdrew",
"commits": 93,
"avatar_url": "https://avatars.githubusercontent.com/u/49833875?v=4"
},
{
"type": "User",
"login": "skdrew",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/101203626?v=4"
},
{
"type": "User",
"login": "johra",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1061240?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.979
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"yarn.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 9,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 7,
"reason": "17 out of 22 merged PRs checked by a CI test -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 1,
"reason": "Found 2/15 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 4,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 2,
"reason": "8 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "001f53ea9e05532755943742b3db8d883dfe08eb",
"ran_at": "2026-08-01T01:26:46Z",
"aggregate_score": 3.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-22T16:52:49Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-22T16:51:57Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/wwdrew/expo-spotify-sdk",
"host": "github.com",
"name": "expo-spotify-sdk",
"owner": "wwdrew"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 64 is calibrated to 73 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 64,
"calibrated": 73,
"calibration": "2026-08-02"
}
}
],
"value": 73,
"inputs": {
"security": 51,
"vitality": 77,
"community": 50,
"governance": 58,
"calibration": "2026-08-02",
"engineering": 76,
"ai_readiness": 77,
"weighted_overall_raw": 64
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 77,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"commits_last_year": 61,
"human_commit_share": 0.87,
"days_since_last_push": 9,
"active_weeks_last_year": 10
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 9 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 9
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "10/52 weeks with commits",
"points": 6.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 10
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "61 commits in the last year",
"points": 16.1,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 61
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "exceptional",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 14,
"latest_release_tag": "expo-spotify-sdk-v2.3.2",
"releases_from_tags": false,
"days_since_latest_release": 9,
"mean_days_between_releases": 6.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "14 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 14
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 9 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 9
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 11,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 11 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 11
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 50,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 26,
"inputs": {
"forks": 7,
"stars": 17,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "17 stars",
"points": 19.5,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 17
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "7 forks",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 7
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 61,
"inputs": {
"packages": [
"@wwdrew/expo-spotify-sdk"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 4708
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "4,708 downloads/month across npm",
"points": 49,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 4708,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 58,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 14,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.979
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 98% of commits",
"points": 0.5,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 98
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "3 contributors",
"points": 4.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 3
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 81,
"inputs": {
"merged_prs": 59,
"open_issues": 0,
"closed_issues": 10,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 7,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 42,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "59/66 decided PRs merged",
"points": 26.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 59,
"decided": 66
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 2/15 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 54,
"inputs": {
"followers": 17,
"owner_type": "User",
"is_verified": null,
"owner_login": "wwdrew",
"public_repos": 51,
"account_age_days": 2658
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "17 followers of wwdrew",
"points": 9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 17,
"login": "wwdrew"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "51 public repos, account ~7 yr old",
"points": 24.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 51
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@wwdrew/expo-spotify-sdk"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 9
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 9 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 9
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "24 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 24
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 76,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "17 out of 22 merged PRs checked by a CI test -- score normalized to 7",
"points": 14,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 51,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 39,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.9
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "17 out of 22 merged PRs checked by a CI test -- score normalized to 7",
"points": 1.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 2/15 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 2,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "8 existing vulnerabilities detected",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 1062 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 1062
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 13,
"affected_packages": 9,
"assessed_packages": 1062,
"unassessed_packages": 0,
"affected_by_severity": "high 9",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 1062,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 77,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 531
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "87 of 87 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 87,
"sampled": 87
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"yarn.lock"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"example/tsconfig.json",
"plugin/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0.27,
"toolchain_manifests": [
"android/build.gradle",
"example/android/app/build.gradle",
"example/android/build.gradle"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "android/build.gradle, example/android/app/build.gradle, example/android/build.gradle (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "android/build.gradle, example/android/app/build.gradle, example/android/build.gradle"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "example/tsconfig.json, plugin/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example/tsconfig.json, plugin/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "27 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 27,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 20879,
"source_files_sampled": 97,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/97 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 97,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "weak",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"labels": [
"library"
],
"scores": {
"library": 6
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:npm",
"weight": 6
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": true
},
"metrics_version": "2.3.1"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-08-01T01:27:03.879625Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wwdrew/expo-spotify-sdk.svg",
"full_name": "wwdrew/expo-spotify-sdk",
"license_state": "standard",
"license_spdx": "MIT"
}