From da68fb4de86471f9cf11b64584817b495320a335 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Tue, 20 Oct 2026 20:39:11 +1300 Subject: [PATCH 1/4] chore: update React Native SDK to 3.0.0 --- CHANGELOG.md | 11 + docs/examples/account/create-push-target.md | 2 + docs/examples/account/list-memberships.md | 16 + docs/examples/account/update-push-target.md | 2 + docs/examples/databases/create-query.md | 20 + docs/examples/documentsdb/create-query.md | 20 + docs/examples/tablesdb/create-query.md | 20 + package-lock.json | 1957 ++++++++----------- package.json | 9 +- src/client.ts | 2 +- src/lib/file-system.ts | 13 + src/query.ts | 2 +- src/services/account.ts | 195 +- src/services/avatars.ts | 45 +- src/services/databases.ts | 186 +- src/services/documents-db.ts | 177 ++ src/services/storage.ts | 45 +- src/services/tables-db.ts | 179 +- tsconfig.json | 2 +- 19 files changed, 1721 insertions(+), 1182 deletions(-) create mode 100644 docs/examples/account/list-memberships.md create mode 100644 docs/examples/databases/create-query.md create mode 100644 docs/examples/documentsdb/create-query.md create mode 100644 docs/examples/tablesdb/create-query.md create mode 100644 src/lib/file-system.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 3897ac8c..b966b674 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change log +## 3.0.0 + +* Breaking: `expo-file-system` is a peer dependency (`>=18.0.0`); install it in your app +* Breaking: `expo` peer dependency requires `>=52.0.0` +* Added: `createQuery` on `databases`, `documentsDB` and `tablesDB` to send list queries in the request body +* Added: `account.listMemberships` +* Added: `bundleId` and `environment` on `account.createPushTarget` and `account.updatePushTarget` for APNs routing +* Fixed: uploads on Expo SDK 54 and later use `expo-file-system/legacy` instead of crashing +* Fixed: Android upload chunks are deleted from the cache once their request completes +* Updated: `package.json` declares `engines.node` `>=20.0.0` + ## 2.0.0 * Breaking: requests send `X-Appwrite-Response-Format: 2.5.0`; responses follow the 2.5 shapes diff --git a/docs/examples/account/create-push-target.md b/docs/examples/account/create-push-target.md index da09d09d..65deaeee 100644 --- a/docs/examples/account/create-push-target.md +++ b/docs/examples/account/create-push-target.md @@ -11,6 +11,8 @@ const result = await account.createPushTarget({ targetId: '', identifier: '', providerId: '', // optional + bundleId: '', // optional + environment: 'sandbox', // optional }); console.log(result); diff --git a/docs/examples/account/list-memberships.md b/docs/examples/account/list-memberships.md new file mode 100644 index 00000000..30067e5d --- /dev/null +++ b/docs/examples/account/list-memberships.md @@ -0,0 +1,16 @@ +```javascript +import { Client, Account } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const account = new Account(client); + +const result = await account.listMemberships({ + queries: [], // optional + total: false, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/account/update-push-target.md b/docs/examples/account/update-push-target.md index a759e5c5..d796a280 100644 --- a/docs/examples/account/update-push-target.md +++ b/docs/examples/account/update-push-target.md @@ -10,6 +10,8 @@ const account = new Account(client); const result = await account.updatePushTarget({ targetId: '', identifier: '', + bundleId: '', // optional + environment: 'sandbox', // optional }); console.log(result); diff --git a/docs/examples/databases/create-query.md b/docs/examples/databases/create-query.md new file mode 100644 index 00000000..7c618a00 --- /dev/null +++ b/docs/examples/databases/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, Databases } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const databases = new Databases(client); + +const result = await databases.createQuery({ + databaseId: '', + collectionId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/documentsdb/create-query.md b/docs/examples/documentsdb/create-query.md new file mode 100644 index 00000000..d75f7918 --- /dev/null +++ b/docs/examples/documentsdb/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, DocumentsDB } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const documentsDB = new DocumentsDB(client); + +const result = await documentsDB.createQuery({ + databaseId: '', + collectionId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/tablesdb/create-query.md b/docs/examples/tablesdb/create-query.md new file mode 100644 index 00000000..9779e4c8 --- /dev/null +++ b/docs/examples/tablesdb/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, TablesDB } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const tablesDB = new TablesDB(client); + +const result = await tablesDB.createQuery({ + databaseId: '', + tableId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/package-lock.json b/package-lock.json index bbf4775e..224efa11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,15 @@ { "name": "react-native-appwrite", - "version": "2.0.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-appwrite", - "version": "2.0.0", + "version": "3.0.0", "license": "BSD-3-Clause", "dependencies": { "buffer": "6.0.3", - "expo-file-system": "18.*.*", "json-bigint": "1.0.0", "mqtt": "5.15.2", "process": "0.11.10", @@ -23,6 +22,7 @@ "@types/node": "24.9.2", "@types/readable-stream": "4.0.24", "eslint": "10.10.0", + "expo-file-system": "58.0.9", "playwright": "1.59.0", "prettier": "3.9.6", "rollup": "4.63.2", @@ -32,10 +32,11 @@ "typescript-eslint": "8.70.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "expo": "*", + "expo": ">=52.0.0", + "expo-file-system": ">=18.0.0", "expo-notifications": "*", "react-native": ">=0.76.7 <1.0.0", "react-native-background-actions": ">=4.0.0 <5.0.0", @@ -221,14 +222,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", - "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.10.tgz", + "integrity": "sha512-/YY9soQuWa8TURtHXHT+GbklpbAA+dZErxFGHIr6qgDg96xuGWrTAs1+MfjgVJPF0YLQsOVsOYs8lhgsPbOinQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", - "regexpu-core": "^6.3.1", + "regexpu-core": "^6.5.3", "semver": "^6.3.1" }, "engines": { @@ -440,14 +441,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", + "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", "license": "MIT", "peer": true, "dependencies": { "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" + "@babel/types": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1124,9 +1125,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", - "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz", + "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1148,16 +1149,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", + "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", + "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" @@ -1333,35 +1334,40 @@ } }, "node_modules/@expo/cli": { - "version": "57.0.27", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-57.0.27.tgz", - "integrity": "sha512-Jauk4chxmpVG5ElrMLTCwjFP20jbYU7PB4l3LYV8j+4e/3HU5jdl7qTQ4eVy1AaDUE9Ia2NCQ5A9kar2V1gaLg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/devcert": "^1.2.1", - "@expo/env": "~2.4.3", - "@expo/image-utils": "^0.11.5", - "@expo/inline-modules": "^0.1.7", - "@expo/json-file": "^11.0.1", - "@expo/log-box": "^57.0.4", - "@expo/metro": "~56.0.2", - "@expo/metro-config": "~57.0.12", - "@expo/metro-file-map": "^57.0.3", - "@expo/osascript": "^2.7.1", - "@expo/package-manager": "^1.13.1", - "@expo/plist": "^0.8.1", - "@expo/prebuild-config": "^57.0.16", - "@expo/require-utils": "^57.0.5", - "@expo/router-server": "^57.0.11", - "@expo/schema-utils": "^57.0.2", + "version": "58.1.11", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.11.tgz", + "integrity": "sha512-wkFTSLXXYqLkRT5oy4DnLuTOtbFIu3qTiXHSHkFSqUBTHiE92y3bOIwM3UN7Y1ys18qVJge8lXjezaEfsHmijQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/code-signing-certificates": "^0.0.7", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/devcert": "^1.2.2", + "@expo/env": "~2.5.2", + "@expo/image-utils": "^0.12.5", + "@expo/inline-modules": "^0.2.6", + "@expo/json-file": "^11.2.1", + "@expo/log-box": "^58.0.12", + "@expo/log-box-utils": "^58.0.2", + "@expo/metro": "~58.0.0", + "@expo/metro-config": "58.0.14", + "@expo/metro-file-map": "^58.0.5", + "@expo/osascript": "^2.8.1", + "@expo/package-manager": "^1.14.2", + "@expo/platforms": "^58.0.1", + "@expo/plist": "^0.10.1", + "@expo/prebuild-config": "^58.0.14", + "@expo/require-utils": "^58.0.4", + "@expo/router-server": "^58.0.14", + "@expo/schema-utils": "^58.0.2", "@expo/spawn-async": "^1.8.0", - "@expo/ws-tunnel": "^2.0.0", - "@expo/xcpretty": "^4.4.4", - "@react-native/dev-middleware": "0.86.3", + "@expo/ws-tunnel": "^2.0.1", + "@expo/xcpretty": "^4.4.6", + "@react-native/asset-utils": "0.88.0", + "@react-native/dev-middleware": "0.88.0", + "@react-native/js-polyfills": "0.88.0", + "2g": "^1.0.1", "accepts": "^1.3.8", "agent-cli-detector": "0.1.7", "arg": "^5.0.2", @@ -1371,15 +1377,14 @@ "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", - "debug": "^4.3.4", - "dnssd-advertise": "^1.1.4", - "expo-server": "^57.0.3", + "dnssd-advertise": "^1.1.6", + "expo-server": "^58.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.2", - "node-forge": "^1.3.3", + "node-forge": "^1.4.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", @@ -1388,7 +1393,7 @@ "prompts": "^2.3.2", "resolve-from": "^5.0.0", "sandbox-cli-detector": "^0.2.0", - "semver": "^7.6.0", + "semver": "^7.7.4", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", @@ -1400,7 +1405,7 @@ "zod": "^3.25.76" }, "bin": { - "expo-internal": "main.js" + "expo-internal": "bin/cli.js" }, "peerDependencies": { "expo": "*", @@ -1417,67 +1422,71 @@ } }, "node_modules/@expo/code-signing-certificates": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", - "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.7.tgz", + "integrity": "sha512-zP0tnfqrFFRL8INtOaQ6XwEYfdIpIH9vrEo7y0bHQGQa50z4/QWXE5CI4nRUHxqFW4MVWOwXFg1hom1aAZHNkQ==", "license": "MIT", "peer": true, "dependencies": { - "node-forge": "^1.3.3" + "node-forge": "^1.4.0" + }, + "engines": { + "node": ">=22.13.0" } }, "node_modules/@expo/config": { - "version": "57.0.9", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-57.0.9.tgz", - "integrity": "sha512-dmzlKraIFxa7wLwV6K7WzI8jp6QZpW6Mc5mGjLimJUFjzh4uQdYaT3m3plEutM5yxBoBEwqzks7l+I/ljCbxAQ==", + "version": "58.0.6", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.6.tgz", + "integrity": "sha512-PT1qv4s/R5A/NxXb4efGlFsYF5Consi7F8xSsJBAN090EGDr6U1EDQGOijFqzDc3JA2epD8zjKLJLOVB9YOewg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~57.0.9", - "@expo/config-types": "^57.0.2", - "@expo/json-file": "^11.0.1", - "@expo/require-utils": "^57.0.5", + "@expo/config-plugins": "~58.0.9", + "@expo/config-types": "^58.0.3", + "@expo/json-file": "^11.2.1", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-workspace-root": "^2.0.0", - "semver": "^7.6.0", + "semver": "^7.7.4", "slugify": "^1.3.4" } }, "node_modules/@expo/config-plugins": { - "version": "57.0.9", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-57.0.9.tgz", - "integrity": "sha512-hHgfL1avkCdEvDSw7IwlKwRYYNgcxzbNNMIk6W6lTkJpY0MajinAfeJUS0J+wPCsjUfGbVqOJM+XhPaO5ulUxg==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.9.tgz", + "integrity": "sha512-HyP7V1QgDxeHcOEh4qQH7cfK7cI7wNp0y9lszAu98SRYCshhDbwB9gWpFfnpX1GQUtgiqG4Hvgh1z3ntcGwAjw==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-types": "^57.0.2", - "@expo/json-file": "~11.0.1", - "@expo/plist": "^0.8.1", - "@expo/require-utils": "^57.0.5", - "@expo/sdk-runtime-versions": "^1.0.0", + "@expo/config-types": "^58.0.3", + "@expo/json-file": "~11.2.1", + "@expo/plist": "^0.10.1", + "@expo/require-utils": "^58.0.4", + "@expo/sdk-runtime-versions": "^1.0.1", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", - "semver": "^7.5.4", + "semver": "^7.7.4", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "node_modules/@expo/config-types": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-57.0.2.tgz", - "integrity": "sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==", + "version": "58.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-58.0.3.tgz", + "integrity": "sha512-wyfrwkTT/hQHzwyqkXkngKxoOa8L6ovsTP4h/UukS1mTmssee5et6HOPoN5RtawdJPnm5JO28f//C/wXlpka8Q==", "license": "MIT", "peer": true }, "node_modules/@expo/devcert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz", - "integrity": "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.2.tgz", + "integrity": "sha512-wz1YedXwdNbYqk/PRr34vixnuw1+l6uSwmPXUj649cot5iYNccb2zIOnK7Nonb1Pfd/dxAY6CvU6KM3uSdxC7A==", "license": "MIT", "peer": true, "dependencies": { @@ -1496,19 +1505,23 @@ } }, "node_modules/@expo/devtools": { - "version": "57.0.1", - "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-57.0.1.tgz", - "integrity": "sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-58.0.2.tgz", + "integrity": "sha512-WBj/K+vv8JPSmY70ennL04YYOHkpEsGGkfuVY9lfv4XO7Qhbt5qz4q6W7maME194I5oGcimRMigUFfWNkBe90w==", "license": "MIT", "peer": true, "dependencies": { "chalk": "^4.1.2" }, "peerDependencies": { + "expo": "*", "react": "*", "react-native": "*" }, "peerDependenciesMeta": { + "expo": { + "optional": true + }, "react": { "optional": true }, @@ -1518,9 +1531,9 @@ } }, "node_modules/@expo/dom-webview": { - "version": "57.0.1", - "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-57.0.1.tgz", - "integrity": "sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-58.0.2.tgz", + "integrity": "sha512-bLkREoP7qL3rEuzxP60xG+TjdPoGjbnZfxkvYo5imJxGWfKMOf7x962W06Pu+WWAr4gcDRk16iA+Clg8D0zjCg==", "license": "MIT", "peer": true, "peerDependencies": { @@ -1530,9 +1543,9 @@ } }, "node_modules/@expo/env": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.4.3.tgz", - "integrity": "sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.2.tgz", + "integrity": "sha512-z8kCvBVJpd2S20a+Ab1otQgz8sJLeR7CXDTsuAMcNbYFsK10Fdhfb7rx9Ys1vvlbijnY55eZhQvJACajc1IjBQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1544,21 +1557,14 @@ "node": ">=20.12.0" } }, - "node_modules/@expo/expo-modules-macros-plugin": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@expo/expo-modules-macros-plugin/-/expo-modules-macros-plugin-0.6.1.tgz", - "integrity": "sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==", - "license": "MIT", - "peer": true - }, "node_modules/@expo/fingerprint": { - "version": "0.20.13", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.20.13.tgz", - "integrity": "sha512-h1x+w+JpNRu88a/5SMZRzJs9YDGR/f7R8ApCr7OdenhqmJ00hFxQMzvxajDLL+1P2Y2g/ND0xksusqvBqWSW5Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.5.tgz", + "integrity": "sha512-4ngc+aPgMK56sYc47tfabmoaNdP7OvPBOH7QPgN3riSYM0Ev+KwsGRDius5jBBwjCI9ADp7IpjJEK9xlRYjjvA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "^2.4.3", + "@expo/env": "^2.5.2", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -1568,42 +1574,42 @@ "ignore": "^5.3.1", "minimatch": "^10.2.2", "resolve-from": "^5.0.0", - "semver": "^7.6.0" + "semver": "^7.7.4" }, "bin": { "fingerprint": "bin/cli.js" } }, "node_modules/@expo/image-utils": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.11.5.tgz", - "integrity": "sha512-KPQBTpmpAfy/Vu9y4wPW808/qtZxjYmyJg8cm2QCPAupp+qEWA3b5zmk0ulOwQ9OgeHxuCPgUqWgkwHFo7UsrQ==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.12.5.tgz", + "integrity": "sha512-nsFYd7GfDdwZa+S+p+EkVCkh7UKKNf0kfUXDQ53HbyMmNFD3psb5JYwU/2N+uZG5wOEfKGfQ5u7pk/wn2gMlBA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/require-utils": "^57.0.5", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", - "semver": "^7.6.0" + "semver": "^7.7.4" } }, "node_modules/@expo/inline-modules": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.1.7.tgz", - "integrity": "sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.6.tgz", + "integrity": "sha512-S8PK3wx6ogwunoQ7pqdPbklQGtXloeWTAOzWJ9yIL7xHFxvnI/Ryj0phA3KEGCMlaKZjaCP1h/3s7n/ueErRgQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~57.0.9" + "@expo/config-plugins": "~58.0.9" } }, "node_modules/@expo/json-file": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.0.1.tgz", - "integrity": "sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.2.1.tgz", + "integrity": "sha512-UPhKoFCj8BcwgLB1rKQ1CuR/REITnZLiqxHEHOeH1tPsdXcHGtUDh0P5bLbr7oU0nKVdtJ5rzyKx8jniMQdESQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1612,76 +1618,93 @@ } }, "node_modules/@expo/local-build-cache-provider": { - "version": "57.0.8", - "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-57.0.8.tgz", - "integrity": "sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==", + "version": "58.0.6", + "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.6.tgz", + "integrity": "sha512-AJk3pslFNlwRMbUbfvxhu6CPA9U7A+JPb88VS/uWkG/S/QMJL90Iw4sPVfG4BOKfRUNkB8ipl432Dr4txjSMKw==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~57.0.9", + "@expo/config": "~58.0.6", "chalk": "^4.1.2" } }, "node_modules/@expo/log-box": { - "version": "57.0.4", - "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-57.0.4.tgz", - "integrity": "sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==", + "version": "58.0.12", + "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.12.tgz", + "integrity": "sha512-IzDYoFY2iUsmSDvl1V7YUM7UkCPDyMVS4e4a38c2LnFc1A3WGMUiQh+vsHLYTPKjIelu4r7/u4V7Gxtfa0oJgA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/dom-webview": "^57.0.1", + "@expo/dom-webview": "^58.0.2", + "@expo/log-box-utils": "^58.0.2", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10" }, "peerDependencies": { - "@expo/dom-webview": "^57.0.1", + "@expo/dom-webview": "^58.0.2", "expo": "*", "react": "*", "react-native": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } } }, + "node_modules/@expo/log-box-utils": { + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/log-box-utils/-/log-box-utils-58.0.2.tgz", + "integrity": "sha512-My8Lwe9FU/yDwwzqwi5LN2rzzDcJqIAZKrD9f0XHZEKz/FQnWJYdt1rsV7+RwqMGeGq2XsxTCVT1ggTCOvumxw==", + "license": "MIT", + "peer": true + }, "node_modules/@expo/metro": { - "version": "56.0.2", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-56.0.2.tgz", - "integrity": "sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==", + "version": "58.0.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-58.0.0.tgz", + "integrity": "sha512-PMD640ihB0C3Oqm0AnDVJ/8qF2cKbRUEqGuSOr4tM/OTb9ktxsQqsiSSSeaOEgdCZBq20AxRS0d6WHNhhH2P+g==", "license": "MIT", "peer": true, "dependencies": { - "metro": "0.84.5", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-config": "0.84.5", - "metro-core": "0.84.5", - "metro-file-map": "0.84.5", - "metro-minify-terser": "0.84.5", - "metro-resolver": "0.84.5", - "metro-runtime": "0.84.5", - "metro-source-map": "0.84.5", - "metro-symbolicate": "0.84.5", - "metro-transform-plugins": "0.84.5", - "metro-transform-worker": "0.84.5" + "metro": "0.87.1", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-config": "0.87.1", + "metro-core": "0.87.1", + "metro-file-map": "0.87.1", + "metro-minify-terser": "0.87.1", + "metro-resolver": "0.87.1", + "metro-runtime": "0.87.1", + "metro-source-map": "0.87.1", + "metro-symbolicate": "0.87.1", + "metro-transform-plugins": "0.87.1", + "metro-transform-worker": "0.87.1" } }, "node_modules/@expo/metro-config": { - "version": "57.0.12", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-57.0.12.tgz", - "integrity": "sha512-S62Lrq35HZqBFD55423pmWb8PjaiR/W02zQC1uECBmw1vTN8WZaFz4TJ0i21EeJzwfebMb9MLxL8JZ102Z6VbA==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.14.tgz", + "integrity": "sha512-UDUMAJwYGEzaB26ejMLG/IOVzwKDbHzoODBf3FZeRS94kk9jDf1dWE1VMX6bLBLoiflxXwqrMWiH0Fvz3gZ9YQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~57.0.9", - "@expo/env": "~2.4.3", - "@expo/json-file": "~11.0.1", - "@expo/metro": "~56.0.2", - "@expo/require-utils": "^57.0.5", + "@expo/config": "~58.0.6", + "@expo/env": "~2.5.2", + "@expo/json-file": "~11.2.1", + "@expo/metro": "~58.0.0", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "@jridgewell/gen-mapping": "^0.3.13", "@jridgewell/remapping": "^2.3.5", "@jridgewell/sourcemap-codec": "^1.5.5", + "@jridgewell/trace-mapping": "^0.3.31", + "@react-native/js-polyfills": "0.88.0", + "2g": "^1.0.1", "browserslist": "^4.25.0", "chalk": "^4.1.0", "debug": "^4.3.2", @@ -1690,8 +1713,9 @@ "hermes-parser": "^0.36.0", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", + "noxcturnal": "^0.1.0", "picomatch": "^4.0.4", - "postcss": "^8.5.14", + "postcss": "^8.5.23", "resolve-from": "^5.0.0" }, "peerDependencies": { @@ -1704,24 +1728,52 @@ } }, "node_modules/@expo/metro-file-map": { - "version": "57.0.3", - "resolved": "https://registry.npmjs.org/@expo/metro-file-map/-/metro-file-map-57.0.3.tgz", - "integrity": "sha512-1OXy+uPYY5uc7Tm4VBsd2NRn+3wHhqeqNuEO/Xo4kmYgv8FjYgUAc+bUXON9FpC2ikcLn4EVlGM9ce2exx9Mlg==", + "version": "58.0.5", + "resolved": "https://registry.npmjs.org/@expo/metro-file-map/-/metro-file-map-58.0.5.tgz", + "integrity": "sha512-Y2w8qKklLffZie28In4WF6f6e8nIJOhU0mZ5UaQdCiITVQm2a5teNdIDudEPkBsh8ItlvyHZt9n42PN2onRbkQ==", "license": "MIT", "peer": true, "dependencies": { + "2g": "^1.0.1", "debug": "^4.3.4", "fb-watchman": "^2.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", "walker": "^1.0.8" } }, + "node_modules/@expo/modules-macros-win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.20.0.tgz", + "integrity": "sha512-7B57gc7+TeygPcK8fLYlEhJbbvaPh+JBzex11YIYZrSzbFhz7Q+Z37fSdAfp4EsfCswJNcX0S6wpkgSlVNefVw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@expo/modules-macros-win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.20.0.tgz", + "integrity": "sha512-BM5a2U2tCyHzmtiSEY70KPsts82Mfy1bHSZ7AUbg6z9LcnxuThxJlcH85/SV5eFbhrPfgDBAG/WAncyZCvKvyA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, "node_modules/@expo/osascript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.7.1.tgz", - "integrity": "sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.8.1.tgz", + "integrity": "sha512-SCi+6q6uOkGhiAn6AIP/OPFgaIq/iKD2oYpnAOg2rShHStJ8ey7wyT127RbOaZXmlcY/62rHOX1WiiMnD8u/BA==", "license": "MIT", "peer": true, "dependencies": { @@ -1732,13 +1784,13 @@ } }, "node_modules/@expo/package-manager": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.13.1.tgz", - "integrity": "sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.14.2.tgz", + "integrity": "sha512-sftl0eRVVCarI6grMdjAB3jX2pX1Mt3cdSnajlXS4QyeDkaKRM/ntBy6dcagj1VL0+cEfEqctlyvinmlZdNubg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/json-file": "^11.0.1", + "@expo/json-file": "^11.2.1", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", @@ -1746,10 +1798,17 @@ "resolve-workspace-root": "^2.0.0" } }, + "node_modules/@expo/platforms": { + "version": "58.0.1", + "resolved": "https://registry.npmjs.org/@expo/platforms/-/platforms-58.0.1.tgz", + "integrity": "sha512-KtLrtAvpShq16l9lTxd2fZSjULxcGxXrJTHA31iUVqrc+Af7aTAJW4ZB3yQBgi/w+kSb6BB/CG9RXI0ohbMm6g==", + "license": "MIT", + "peer": true + }, "node_modules/@expo/plist": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.8.1.tgz", - "integrity": "sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.10.1.tgz", + "integrity": "sha512-nuNOqj+r/hGJbZ1Ax3jUpZaOB8UAMHUrISALJEUKaCieTflYj7224EqFWmMpriCGk9wXS1gH+9GGVnSj0tWzuQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1759,28 +1818,28 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "57.0.16", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-57.0.16.tgz", - "integrity": "sha512-QA8oMZ7y70kjOzw+abhRl9uYC8Nu/abeUTHr0YVxb3pgIC14gc7w543bYtI+5gEDI3q55jKUViIauC76QvZN1w==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.14.tgz", + "integrity": "sha512-2wVzVDfXjRB3LzUbW5shOM/A+6eUUCfR+2bpZiWRBBZBtZP2HA5Zq1YgCio1tDqMGAHf2NQQDhvy/Rz1U6aC3A==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/config-types": "^57.0.2", - "@expo/image-utils": "^0.11.5", - "@expo/json-file": "^11.0.1", - "@react-native/normalize-colors": "0.86.3", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/config-types": "^58.0.3", + "@expo/image-utils": "^0.12.5", + "@expo/json-file": "^11.2.1", + "@react-native/normalize-colors": "0.88.0", "debug": "^4.3.1", - "expo-modules-autolinking": "~57.0.13", + "expo-modules-autolinking": "~58.0.13", "resolve-from": "^5.0.0", - "semver": "^7.6.0" + "semver": "^7.7.4" } }, "node_modules/@expo/require-utils": { - "version": "57.0.5", - "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-57.0.5.tgz", - "integrity": "sha512-kTAXj9lDFEIPMsbAOGCGbjBbMF0oi7CqkYM79KOX0DDD9wSwXmlKL1z2h8OwsrBf7mbOo2DjlRvZu4BEjrIxGw==", + "version": "58.0.4", + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-58.0.4.tgz", + "integrity": "sha512-DvjS5NCitXYcad2Woe1EMHJKcbhTbE77HX0BgOQGL2LFHE3q2H0n8kCWDPBOCVJ63Drap3c35nwoJwF5TQL7Tw==", "license": "MIT", "peer": true, "dependencies": { @@ -1798,24 +1857,24 @@ } }, "node_modules/@expo/router-server": { - "version": "57.0.11", - "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-57.0.11.tgz", - "integrity": "sha512-0QxbqEkceb1WDeu5VqNdnTPVHlm3U183F7Y1t5LMohmGRAkHVL0PB4tCHBvEqKpLzOzHVObw3reGkJ1tX48h8Q==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.14.tgz", + "integrity": "sha512-RSzQYMA+Tv2eTemhjhzpx8+hL+pMC30JTVqAWrk5AZwht+OgaKZar/gHmj4iJf7n3rq+GG6KujrkKF9xAXLz2w==", "license": "MIT", "peer": true, "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { - "@expo/metro-runtime": "^57.0.16", + "@expo/metro-runtime": "^58.0.14", "expo": "*", - "expo-constants": "^57.0.19", - "expo-font": "^57.0.4", + "expo-constants": "^58.0.12", + "expo-font": "^58.0.8", "expo-router": "*", - "expo-server": "^57.0.3", + "expo-server": "^58.0.5", "react": "*", "react-dom": "*", - "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" + "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1 || ~19.3.0" }, "peerDependenciesMeta": { "@expo/metro-runtime": { @@ -1833,16 +1892,16 @@ } }, "node_modules/@expo/schema-utils": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-57.0.2.tgz", - "integrity": "sha512-fMu/jyN0l1Wzv7XkeWR4IYCx1M8ryui3FdBNGrWwbRgJ7EhxXxK8E2jxP2W3pbgUwUY0V3hG8+GyfCZwny+Lxw==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-58.0.2.tgz", + "integrity": "sha512-w28y8SG+5ZTdDdmH2ZnCQk9wHVwGzI9NqX5V4urJUFEnxbm7I129fJRkb8RIAJmMA1WKU5h3ONmranV473uaXQ==", "license": "MIT", "peer": true }, "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.1.tgz", + "integrity": "sha512-kvisefkhxu8Fm/4M8G6DEqUaigrXfrSOm2lFw7hsk/nq0zchcp6B4wSk8rlheHY8FRi5iHxKtoVMGY/3M6h04A==", "license": "MIT", "peer": true }, @@ -1867,9 +1926,9 @@ "peer": true }, "node_modules/@expo/ws-tunnel": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.0.tgz", - "integrity": "sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.1.tgz", + "integrity": "sha512-mljsRffbOHzmSimYQbQu9h9NR3alwCCwEEouRGFL4QRTt8dNvsNtKEPa/5jHmtDLDtsh4xXsWKwzjN9BTpeXHQ==", "license": "MIT", "peer": true, "peerDependencies": { @@ -1877,10 +1936,10 @@ } }, "node_modules/@expo/xcpretty": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.5.tgz", - "integrity": "sha512-J3eL4n4h5QTwfD0SIz8OIk6/+sOL/hFZAMacgCM07UNlxBQfJipEpIC2AQxvGkbYeStByJ0TVhQAJo+DeNgaSQ==", - "license": "BSD-3-Clause", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.7.tgz", + "integrity": "sha512-EbxYllZ7/ozONVZd425cm4XnolfW+AmSFT5aP7Jdno6oc3WrYQcHz2CO20z/2rwWwYgztmV2PXvYH+BQ8YFjqg==", + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", @@ -2103,501 +2162,265 @@ "node": "^22.20 || ^24.12 || >=25" } }, - "node_modules/@react-native/asset-utils": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/asset-utils/-/asset-utils-0.87.1.tgz", - "integrity": "sha512-FeFnbn9ENPs7IVBzZt1bBWfiRGvT4q+CsWwXGFyKVW/1ol3ylBRuTtXBGHIAmcNN4fUR60nSXsCN19pzNHkPgA==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.86.3.tgz", - "integrity": "sha512-O6Xza4JBGPIU8J7YbKTyBoYL4thpy8jMW/oaLDWdAyOwYHKIjK47pAL5HUEbOe2bWz2PEKjbYRF2ApkJv1ottQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@react-native/codegen": "0.86.3" - }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.86.3.tgz", - "integrity": "sha512-Ux4jHi0fh+bdtVEcL0gaPLbY56V+SvFUDl/8sRAE1jdb4k+o7fT/4Nc29yz4X+qfjstkSqObQTMBGhdzxH9JvA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.29.0", - "hermes-parser": "0.36.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "tinyglobby": "^0.2.15", - "yargs": "^17.6.2" - }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen/node_modules/hermes-estree": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.36.0.tgz", - "integrity": "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==", - "license": "MIT", - "peer": true - }, - "node_modules/@react-native/codegen/node_modules/hermes-parser": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.36.0.tgz", - "integrity": "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w==", - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-estree": "0.36.0" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.87.1.tgz", - "integrity": "sha512-aGBae6v+ngy8fIpU1EOaVxn/8DOgmJNphEdn5Eb0wTchUCxr8bDjpTJYNdrptyn3qI/elk8r9agQ2OBaFvrRlw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@react-native/asset-utils": "0.87.1", - "@react-native/dev-middleware": "0.87.1", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.87.0", - "semver": "^7.1.3" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - }, - "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "0.87.1" - }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - }, - "@react-native/metro-config": { - "optional": true - } - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.87.1.tgz", - "integrity": "sha512-RNm7soJB+8YSauLnsCCylA1eVfT6JWaDTPUEF01uu9YwDyZ7remKlZbXtmVbtscbNGcp+hbI4iZUdVOpQWsHuA==", - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-shell": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.87.1.tgz", - "integrity": "sha512-eNbKjcnseJIjy5XCDwyhKOT1ngOg3Dv1fVxTDtnVFqdqjqsbfY4v9JuJG1RZJ7+mFoRRe05HE8GSQU8B7n5xwQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.6", - "debug": "^4.4.0", - "fb-dotslash": "0.5.8" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.87.1.tgz", - "integrity": "sha512-KgvAGUaVl6/XrWFAPK8e0ojDRbsdBjr4bnwyn6PC3CwxPQc5iv+i7hMoUwYS8ORSkHKfjt+cV86/mBQ4lG8yfA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.87.1", - "@react-native/debugger-shell": "0.87.1", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.3.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^7.5.10" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "peer": true, - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.87.1.tgz", - "integrity": "sha512-1oyLU9elM7hPAsKIqKooEekwxiuWr27+MZBhUROPhzcbXhMDxK64GPF/hCXwBZVp1F89ODavCrBmJtLx9WtBoQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "accepts": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "flow-parser": "0.331.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.87.1", - "metro-cache": "0.87.1", - "metro-cache-key": "0.87.1", - "metro-config": "0.87.1", - "metro-core": "0.87.1", - "metro-file-map": "0.87.1", - "metro-resolver": "0.87.1", - "metro-runtime": "0.87.1", - "metro-source-map": "0.87.1", - "metro-symbolicate": "0.87.1", - "metro-transform-plugins": "0.87.1", - "metro-transform-worker": "0.87.1", - "mime-types": "^3.0.1", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-babel-transformer": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.87.1.tgz", - "integrity": "sha512-orvRIGpb0yK1yMbk5YP3dhVKjmoxUkRB9fdltGJxNppEqus/1tFpNuf9KnGFR3Qjg0izoUrJ4z6WgoBvdkXPrA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "flow-parser": "0.331.0", - "metro-cache-key": "0.87.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.87.1.tgz", - "integrity": "sha512-juNPaj0Xi5tkLp8imXqvbSnEIijwKG36m7OiFFVJMqEkiURwAjkMFVek3/xpix1+LVQqO7kjVp3PvuvIM61mKQ==", + "node_modules/@noxcturnal/noxcturnal-darwin-arm64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.5.tgz", + "integrity": "sha512-hQgDaWxKYln83Uk1Hh4Liju9AvGoYh4aLd4A1ou3lGn5hxzhW2uO+z3mERtWk6BMGVazvi/yUXtp9x3IlaWyhA==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "peer": true, - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache-key": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.87.1.tgz", - "integrity": "sha512-scqVVPMA2c+RVO12I3wyMDp5xCkRPLsyrcG4Qc3xfU5JR0EW/0sz2tjty+5UjMUtG09uiM1KYQ8HjWg7OQXHtw==", + "node_modules/@noxcturnal/noxcturnal-darwin-x64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.5.tgz", + "integrity": "sha512-I57zR8QF7Xam+4nGD5UoIODsw0VjkVyn51iDBL3CMaDR5Lh1OxXwKZMYKtv3CtQl+RSDsMfmXBEqGYLE8lIPHg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-config": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.87.1.tgz", - "integrity": "sha512-NmkDlc/qZAdo5gTkVTuO2AKE/khemRKRH5IA+SKfqUBJigI5GqZ5TOXhmEokhlkAqzjt8dyzKhzI6FHvXoXaTQ==", + "node_modules/@noxcturnal/noxcturnal-linux-arm64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.5.tgz", + "integrity": "sha512-gVH4XJPh8RdrdjjlU0dKeielQt/FXfvqhr8IEWEf3VeNtQs8l2rPzFPdqS0uwLWQYHLBGgB0LkuOil1KKYx1gQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "connect": "^3.6.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.87.1", - "metro-cache": "0.87.1", - "metro-core": "0.87.1", - "metro-runtime": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-core": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.87.1.tgz", - "integrity": "sha512-xizzky/4+c/Mkznege8OW05j7bSdM39VPoEps61Se4+hf32UQujmbvLvIE9+UnP6kNEPVomk0Fw8NsBK9iRQmw==", + "node_modules/@noxcturnal/noxcturnal-linux-arm64-musl": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.5.tgz", + "integrity": "sha512-rzQ075fcHZ+ebsELussRjnW8WBMy1RuLdS8wSqBGhdVlPR7/NaSyoWkNxnVDT8sEO26xjqGoW/o/08ghBzr/zA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-file-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.87.1.tgz", - "integrity": "sha512-9sPuNCojC3pS4vj+ZPY7FXmHGpdJeckXuKXQrDAfJvZc60AF8owRFTkI8XdwlwrmPIB2w++KraK9FMEXvC4wJw==", + "node_modules/@noxcturnal/noxcturnal-linux-x64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.5.tgz", + "integrity": "sha512-X5O0lXMrv8HGOGoXDB1PG0Hjt7Rl+MJA+seR2NecQvUAAw2gzDvF/unCV5sqTAVeHfXhBHEFGkLenHZSD44efg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-minify-terser": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.87.1.tgz", - "integrity": "sha512-YK4k1oO1wV48hfE+Nbw2rJCnAgeabzrgT/xH5ha5n9gbK4p3HYFC898cERUiyTl9vRh58CNTiXRc88f7y6PfKg==", + "node_modules/@noxcturnal/noxcturnal-linux-x64-musl": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.5.tgz", + "integrity": "sha512-fkQIQHRxqldNXVmjxfeCvGOiLhLU9SLBw1As02pMA2xjyiZfiXcUn4SUrZ92ciGnyCS8/XMbx+nZSxgEc3qDPw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-resolver": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.87.1.tgz", - "integrity": "sha512-FXH/brY69wT6sPxaSW8BhMmDGD/6irmBr/cL4rUi+VWwqR3pbvdcfUOfyjcHucgQ7pe5IW3xJY21eHKLVKNumQ==", + "node_modules/@noxcturnal/noxcturnal-win32-arm64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.5.tgz", + "integrity": "sha512-baeH5m/vM1nf0J2UkW8cfgiVogpM0gRO9b4PZWknXQPbv5+k+0N5sGOYl/UAO2q72qYb3Xbiu7eD8c4A2kR2SA==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-runtime": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", - "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", + "node_modules/@noxcturnal/noxcturnal-win32-x64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.5.tgz", + "integrity": "sha512-2faDMzom8pCG/s/uR4Czh1atz4KohI85AaSmA2vtAuVnCq+nLL4Viys3A5vUlNz9MNBmTNFxzXyF2Z5HtfxXLg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "peer": true, - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-source-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", - "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", + "node_modules/@oxc-project/types": { + "version": "0.154.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.154.0.tgz", + "integrity": "sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==", "license": "MIT", "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.87.1", - "nullthrows": "^1.1.1", - "ob1": "0.87.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "funding": { + "url": "https://github.com/sponsors/oxc-project" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-symbolicate": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", - "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", + "node_modules/@react-native/asset-utils": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/asset-utils/-/asset-utils-0.88.0.tgz", + "integrity": "sha512-Bj1DxQt5f4OrjdlgSVkZT37Z3hx5hUIN5AUDSqL/e99vgtTcqj5vnm067epZL1EF/QiqsniZO8Q1GSkItOakDg==", "license": "MIT", "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.87.1", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-plugins": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.87.1.tgz", - "integrity": "sha512-qMiJ/x+VfqumFJJSefKS6nj8uojzC29b2/aK8vlMuFABIqGjDucICEOXd2Yt6k/XMFAgAcaJvShUOT0HLyYaPw==", + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.88.0.tgz", + "integrity": "sha512-leGEnCcS7Q0hTxvzvhNtr8zGQpI1gfWqXjzC4UedsFmNMv6kIo4s70o0XbtM30ZXbpfWe4BcSC8NKWuak5sI4A==", "license": "MIT", "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" + "@react-native/codegen": "0.88.0" }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-worker": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.87.1.tgz", - "integrity": "sha512-VOzs3OV405FuOLYdAhqA2wsn1F9lvueDVxMDLvCKaQ44U+yknIqphJ9eMjjsGwLDZiJq9sW3DMLhjD27JxQgqQ==", + "node_modules/@react-native/codegen": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.88.0.tgz", + "integrity": "sha512-SAGg+XfzsrPiYTscbKa9bo2/H2ei2TjyxW8RTMq2Ps661kRK3AnmpMGVfrEFshEMr3FGEbuQIvj86X98kaXlRA==", "license": "MIT", "peer": true, "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "metro": "0.87.1", - "metro-babel-transformer": "0.87.1", - "metro-cache": "0.87.1", - "metro-cache-key": "0.87.1", - "metro-minify-terser": "0.87.1", - "metro-source-map": "0.87.1", - "metro-transform-plugins": "0.87.1", - "nullthrows": "^1.1.1" + "flow-parser": "0.327.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", + "yargs": "^17.6.2" }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", - "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "node_modules/@react-native/community-cli-plugin": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.88.0.tgz", + "integrity": "sha512-WrQdXbjVt1gwAay8ZzYtpOi9ly99ksJ0VMYFdVcMe6nq3vtiRgqKRpHgCdN6ySIbtr5o+aJ+Vr7OTDY98ec/Ow==", "license": "MIT", "peer": true, "dependencies": { - "content-type": "^2.1.0" + "@react-native/asset-utils": "0.88.0", + "@react-native/dev-middleware": "0.88.0", + "commander": "^12.0.0", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.87.1", + "semver": "^7.1.3" }, "engines": { - "node": ">=18" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "0.88.0" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ob1": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", - "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", + "node_modules/@react-native/community-cli-plugin/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.86.3.tgz", - "integrity": "sha512-TQmeofQ0PcuylhhlleOeuzHYZfbrgm3gayXzowqUEzgRisTm1D40/J3ggqs7XkQi5HP5ZA3n8dHmKL9vIzPcsw==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.88.0.tgz", + "integrity": "sha512-v5cnBaaWhDRPcQv8EC20zj53jOAKH7u2wnzzXS4JTNu+diPC+cA2+kC7rq3eKI5vGhlAcG2kDPoViRuC0AY0oA==", "license": "BSD-3-Clause", "peer": true, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/debugger-shell": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.86.3.tgz", - "integrity": "sha512-O4ds+J7xZfxkbih9T+cAGegBdvKSPKYJm/lDgC9CpEjFMkmzWTpVLU3Qsv9sqZuo58z+sGhIcJfPsCFFWHpqbQ==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.88.0.tgz", + "integrity": "sha512-p82zT8ZKNx7nIm/8zf8pi55sxm5KQBm8td47kzoJysTdqHLyPsRMUvDXtvCJIWadHSv7RJ6t/yiCc+IoImLBtw==", "license": "MIT", "peer": true, "dependencies": { @@ -2606,37 +2429,45 @@ "fb-dotslash": "0.5.8" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.86.3.tgz", - "integrity": "sha512-LiEPTqTg/63bYUnrPyHLfjTDCNhA/+CUqI1+DsA9tYyewtSbULd5awsva6SgE10I+2iMhgKXS3ymkhU/kSCrGA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.88.0.tgz", + "integrity": "sha512-sHLxVHOwfkF672ZzMepNh4d3IKbrZy3qXDKWSwN5LC5VJkzzZ5FdmSPP4N/CCn2pcKJ4oSqvojXwN4De3Xk92A==", "license": "MIT", "peer": true, "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.86.3", - "@react-native/debugger-shell": "0.86.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.3.0", + "@react-native/debugger-frontend": "0.88.0", + "@react-native/debugger-shell": "0.88.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", - "open": "^7.0.3", + "open": "^8.4.2", "serve-static": "^1.16.2", "ws": "^7.5.10" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.87.1.tgz", - "integrity": "sha512-bZ5X2BNxaSlfp2KlDtUM910QqW9G1yTIeZXghuv4ag8SAQLzm5Mf9j5GjJfT6ax2Qo2aRT15Vi3Tro/yLGJstA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.88.0.tgz", + "integrity": "sha512-4jPSKslOfJj8NKY/jv9qmWkxZYmqPyamoS3Vs0JOFxw9t4PM6L/ea0fUsjNV0LxC9zJlvWilPJOCTOf7h8wlyw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.88.0.tgz", + "integrity": "sha512-Iq6v4+EWdOLv0M1+BpADQJBVfInl6FkABXCIBSi0FbvHahEYT+Y4UJ7Cm96p18gbEN1VKzqz3nbBbwLA6bx0rQ==", "license": "MIT", "peer": true, "engines": { @@ -2644,16 +2475,16 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.86.3.tgz", - "integrity": "sha512-Cv3CDkprb67GrzuaS9BGbBJC/6G4lIw3nyKOHRKTqTTum4bn37y5+R0Z04L8mcbQN85eEohNrRwb7IOM4j6uvg==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.88.0.tgz", + "integrity": "sha512-eZCu3tGAQCfvMCPQJVY4dmoMX8ZZYBvqIGHX7lwOYyzNK+Dl8e5ky7ZoXub1Rq75oSrQXNNmSP2CDjNNXXZpFQ==", "license": "MIT", "peer": true }, "node_modules/@react-native/virtualized-lists": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.87.1.tgz", - "integrity": "sha512-qSZjeX3UJrDvyfjf7yc3E68rp1XnzE+5nu8ImklhkVC0+p/XiaHPb/KGkRqDdnQyWHN55BRYSsCMEwgVI6WRNQ==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.88.0.tgz", + "integrity": "sha512-zpZIOAbobdS93edwHkNUdGDzvElNeQJqukRERRPns3/ucPvuMd2G4fYpmVJSVjhxtGCcLLB1PFndLYYfwaYoBQ==", "license": "MIT", "peer": true, "dependencies": { @@ -2666,7 +2497,7 @@ "peerDependencies": { "@types/react": "^19.2.0", "react": "*", - "react-native": "0.87.1" + "react-native": "0.88.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3249,9 +3080,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.10.tgz", - "integrity": "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz", + "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==", "dev": true, "license": "MIT", "engines": { @@ -3466,6 +3297,24 @@ "node": ">=14.6" } }, + "node_modules/2g": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/2g/-/2g-1.0.1.tgz", + "integrity": "sha512-+uViadKOS/wwR4pFu5g8TPn3QHpKqoX19JHCnp8k/3cLpImdcXozwvZA6Q/5PeW3AcU8neL8faaMidBcv7o8CA==", + "license": "MIT", + "peer": true, + "bin": { + "2g": "bin/cli.js" + }, + "peerDependencies": { + "typescript": ">=5.8.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -3493,9 +3342,9 @@ } }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3700,9 +3549,9 @@ } }, "node_modules/babel-plugin-react-native-web": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.3.tgz", - "integrity": "sha512-e4fG8NbyRvk5GwU/7G2U9WxzPYtpC4IQN28AyRDzKE0kvywgohq8vT2x0/xBfg8a0RfSkXLlHAtUAGlSy3VhAw==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.4.tgz", + "integrity": "sha512-FSclsDTGi5EcvpbW3TM7s8GLWwQqo5wI9zQqJr2m0IoJRenSkp1+bVvdeZXTNznI5Ms9Bry7DLBR+C5Shb9gtw==", "license": "MIT", "peer": true }, @@ -3727,9 +3576,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "57.0.13", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-57.0.13.tgz", - "integrity": "sha512-OOl3lqNQ4IagJfsNgtxuna0wpTWt1BswdyktGTOJ5EJCgdQUk/B2vaj/jsl03+kMyuIvpxKioVtbTzxh3mdvvQ==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.17.tgz", + "integrity": "sha512-Rrqc/Z5Idc4bG2/PrEh725t3kvuAc7jUKCJ+wZVU9KXk2bKSdqAniXxQa8aph9aHdv4h5sGKLpMXMaMNz/4+Og==", "license": "MIT", "peer": true, "dependencies": { @@ -3769,9 +3618,9 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-plugin-codegen": "0.86.3", + "@react-native/babel-plugin-codegen": "0.88.0", "babel-plugin-react-compiler": "^1.0.0", - "babel-plugin-react-native-web": "~0.21.0", + "babel-plugin-react-native-web": "~0.21.4", "babel-plugin-syntax-hermes-parser": "^0.36.0", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4" @@ -3779,7 +3628,7 @@ "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", - "expo-widgets": "^57.0.21", + "expo-widgets": "^58.0.20", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { @@ -3824,9 +3673,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.26", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.26.tgz", - "integrity": "sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==", + "version": "2.11.29", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.29.tgz", + "integrity": "sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==", "license": "Apache-2.0", "peer": true, "bin": { @@ -3962,10 +3811,10 @@ } }, "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.2.tgz", + "integrity": "sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw==", + "license": "MIT", "peer": true, "dependencies": { "node-int64": "^0.4.0" @@ -4039,9 +3888,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001814", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", - "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", + "version": "1.0.30001816", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz", + "integrity": "sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==", "funding": [ { "type": "opencollective", @@ -4076,39 +3925,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.3.0.tgz", - "integrity": "sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4" - } - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4460,6 +4276,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4506,9 +4332,9 @@ "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.442", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.442.tgz", - "integrity": "sha512-najZYZ3+ZpjN1z3VOsrBiv5ej18vQgfV2lvEmxWzfmKrk4bdm3Owseyud4yGU6DfFn9pyunoAHDDyM4KmP78Ew==", + "version": "1.5.459", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.459.tgz", + "integrity": "sha512-4SC9HHSFjO/liAhifpdOL5hG9b4BP7/5G3y3UPZVO8trlAXr1CaUEEJL0gWK3kOcYcZrOA5rkwG45Gra/lTIgg==", "license": "ISC", "peer": true }, @@ -4569,6 +4395,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4768,41 +4595,45 @@ } }, "node_modules/expo": { - "version": "57.0.26", - "resolved": "https://registry.npmjs.org/expo/-/expo-57.0.26.tgz", - "integrity": "sha512-U1rsFwcuZNnU61Z/YLnnVC/ZqP0wpxh/rCKUMff3ot/rhLpxFY1zxEqu4vyaexyvBAB1mwpl9lA/ltcHBoQGyg==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.14.tgz", + "integrity": "sha512-M05O++KRgG4NA6kQ9AP60kbN8xqHJ6S8uTXdtkeiwcGVIYzdu2kaUXJyraVturvePO/Mf4PWa0C9+JggrHITwA==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "^57.0.27", - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/devtools": "~57.0.1", - "@expo/dom-webview": "~57.0.1", - "@expo/fingerprint": "^0.20.13", - "@expo/local-build-cache-provider": "^57.0.8", - "@expo/log-box": "^57.0.4", - "@expo/metro": "~56.0.2", - "@expo/metro-config": "~57.0.12", + "@expo/cli": "^58.1.11", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/devtools": "~58.0.2", + "@expo/dom-webview": "~58.0.2", + "@expo/fingerprint": "^0.21.5", + "@expo/local-build-cache-provider": "^58.0.6", + "@expo/log-box": "^58.0.12", + "@expo/log-box-utils": "^58.0.2", + "@expo/metro": "~58.0.0", + "@expo/metro-config": "~58.0.14", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~57.0.13", - "expo-asset": "~57.0.18", - "expo-constants": "~57.0.20", - "expo-file-system": "~57.0.7", - "expo-font": "~57.0.4", - "expo-keep-awake": "~57.0.2", - "expo-modules-autolinking": "~57.0.13", - "expo-modules-core": "~57.0.20", + "babel-preset-expo": "~58.0.17", + "expo-asset": "~58.0.16", + "expo-constants": "~58.0.12", + "expo-file-system": "~58.0.9", + "expo-font": "~58.0.8", + "expo-keep-awake": "~58.0.3", + "expo-modules-autolinking": "~58.0.13", + "expo-modules-core": "~58.0.22", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", - "whatwg-url-minimum": "^0.1.2" + "whatwg-url-minimum": "^0.2.0" }, "bin": { "expo": "bin/cli", "expo-modules-autolinking": "bin/autolinking", "fingerprint": "bin/fingerprint" }, + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" + }, "peerDependencies": { "@expo/dom-webview": "*", "@expo/metro-runtime": "*", @@ -4831,14 +4662,14 @@ } }, "node_modules/expo-asset": { - "version": "57.0.18", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-57.0.18.tgz", - "integrity": "sha512-zDIQkUr0NM2S7YRj98Zohf/OBuM1q0o4ctxLz1C1oe4/33lHNLjp+2v3qUtBWVwn0zKka8UGADmS8M+83Wi6pw==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.16.tgz", + "integrity": "sha512-beR3uusLA+rFo+6Ug0L7FPR4b6y/37VwtYW2Jig/i+3Co+oyYCTnvVuFPWhb05W9TOZRxdHUEI569fVKIgtYAA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/image-utils": "^0.11.5", - "expo-constants": "~57.0.19" + "@expo/image-utils": "^0.12.5", + "expo-constants": "~58.0.12" }, "peerDependencies": { "expo": "*", @@ -4847,13 +4678,14 @@ } }, "node_modules/expo-constants": { - "version": "57.0.20", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-57.0.20.tgz", - "integrity": "sha512-WycPVvBgbluSa6yAh6DKnX646ZHrae0gV2ZLum5fioNkR+DiWyulq1+UfS++Jc6yfAh/l55NOirv6mt5cnQhSw==", + "version": "58.0.12", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.12.tgz", + "integrity": "sha512-d3/dsps32nU4m6YJQbXQ1dIfn58GxfmJjTnZ0WtnhdSHTdG/oVsOakLqYRlX/FaLUKkQOSHXMf7hyCx+2a/HSQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "~2.4.3" + "@expo/env": "~2.5.2", + "@expo/require-utils": "^58.0.4" }, "peerDependencies": { "expo": "*", @@ -4861,9 +4693,9 @@ } }, "node_modules/expo-file-system": { - "version": "18.1.11", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.1.11.tgz", - "integrity": "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.9.tgz", + "integrity": "sha512-JT0km3Wa+wDz/7Rli8ifreoMnmk68ulf/uaWzRA26xm/4K+jGTY+cDhnboRmpmXUCBkED6uqxWmNoXjaVU9VUw==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -4871,14 +4703,11 @@ } }, "node_modules/expo-font": { - "version": "57.0.4", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-57.0.4.tgz", - "integrity": "sha512-7WOMC2oA6xCfOm8bbofqWn2bIqyWFm7YLEnpc/gA1MJH0Ll0TfT/3+CqRkoW2eNRWMS8sxrz5WukUmSvmNquHA==", + "version": "58.0.8", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.8.tgz", + "integrity": "sha512-i9HKj/ljdmmjLamYQEkI4wXJB9+ap7AG5CpCqK/bgwwy45y5T8+1lpNbYgRXE7aQgmDjPpzd09wX6dOZkHfrxg==", "license": "MIT", "peer": true, - "dependencies": { - "fontfaceobserver": "^2.1.0" - }, "peerDependencies": { "expo": "*", "react": "*", @@ -4886,9 +4715,9 @@ } }, "node_modules/expo-keep-awake": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-57.0.2.tgz", - "integrity": "sha512-GqgH746wtJImmsbyHmCQoi7cOslKuWQBbJHXr53S35Bpf5UvxCAztvnitUEd7D0QvFN2rvkOhylbZpgZZfBLlQ==", + "version": "58.0.3", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-58.0.3.tgz", + "integrity": "sha512-wLRF+XeVsD/Rt/ZyX+A0mk1brdf8vefWizNAPzqV5eOCgkj23LCRZdN8gUi5X8UwyR8UJ7Y7Dzdz4YDGB/4c9Q==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4897,13 +4726,14 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "57.0.13", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-57.0.13.tgz", - "integrity": "sha512-Hj5NjZRlfccazhKab+wK19leRVUr1Y/PUERaRvegIbUSkq4GVxKq6lU9QHlKQyC16MdD/VS4iwsiLivB4o7lvQ==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.13.tgz", + "integrity": "sha512-uzLFoTnAKabUdITvzRqWTvFkZsOdRPEXj7AEMAuBEhA2kGhqaBDa2EOWqPXVay0QJVoZuIQaEEgPGAXN1dPuYg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/require-utils": "^57.0.5", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" @@ -4913,20 +4743,20 @@ } }, "node_modules/expo-modules-core": { - "version": "57.0.20", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-57.0.20.tgz", - "integrity": "sha512-vEL3aeih32yuD7sQHB3Y3LKXRT8mMgoVQWFIcHtX811Bl0StnNZUG2vT5je4fe+OWYVfkjb6gNqfMc04moREgA==", + "version": "58.0.22", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.22.tgz", + "integrity": "sha512-T3YJYziFkF4JlGDpX4zCl91oIxz1Skq5sp1LFVO+GL/BARSIXk013QWGdRZrvt+wMxoVaql5dpOdPdP5q2+0jQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/expo-modules-macros-plugin": "0.6.1", - "expo-modules-jsi": "~57.1.1", + "expo-modules-jsi": "~58.0.15", + "expo-modules-macros": "0.20.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", - "react-native-worklets": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0" + "react-native-worklets": ">=0.13.0" }, "peerDependenciesMeta": { "react-native-worklets": { @@ -4935,34 +4765,34 @@ } }, "node_modules/expo-modules-jsi": { - "version": "57.1.1", - "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-57.1.1.tgz", - "integrity": "sha512-ssnwz3ZuIgCbZj5A3J6NlhQrXZojg+BjkeWrOWqVJhyMHlV/A/cRT7s986chKku97BFt6ucmDu6/BCzrV45Wcw==", + "version": "58.0.15", + "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.15.tgz", + "integrity": "sha512-PsjYgL4KWtvBqWH242r0wbP99VjgHkHCpkPCekO7nzb+ulkDNyrNnhysxa0TcNpfRTNLetmCUaLs9t4CcoquZQ==", "license": "MIT", "peer": true, "peerDependencies": { "react-native": "*" } }, - "node_modules/expo-server": { - "version": "57.0.3", - "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-57.0.3.tgz", - "integrity": "sha512-aK+LdKzauHSGmsOStZtyxdzv0zWssCkxTw3m4QuOhfDSJsZaMRTd9O41d8ixU/QfELTbaJ0oRNcF7JFV/7O9YQ==", + "node_modules/expo-modules-macros": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.20.0.tgz", + "integrity": "sha512-Ekgb5c9LQPM9CPnmDZdeWcOa1eBbCDUGrgdN5lIFNH2GWDUf9doeAOK7IqQOOVviamy37eIp5FW+N1zyrIwzoA==", "license": "MIT", "peer": true, - "engines": { - "node": ">=20.16.0" + "optionalDependencies": { + "@expo/modules-macros-win32-arm64": "0.20.0", + "@expo/modules-macros-win32-x64": "0.20.0" } }, - "node_modules/expo/node_modules/expo-file-system": { - "version": "57.0.7", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-57.0.7.tgz", - "integrity": "sha512-1vkZRadOsIputFDBcclqBa1pO3iXOO6iIsdqJipQWw4V5TSnWgmRTuOF7ro8IzrVue+PHbum++KCG3Tawem4cg==", + "node_modules/expo-server": { + "version": "58.0.5", + "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-58.0.5.tgz", + "integrity": "sha512-FHYecxfGOuAhacHcanR6qCN8Cln9S+FFulcYetLu3ddDg55ohuCsMZ9U4Egzwdm+A2o6N+MdSoJKquBC5F9NIg==", "license": "MIT", "peer": true, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" } }, "node_modules/exponential-backoff": { @@ -5020,13 +4850,13 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.4.tgz", + "integrity": "sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ==", + "license": "MIT", "peer": true, "dependencies": { - "bser": "2.1.1" + "bser": "2.1.2" } }, "node_modules/fdir": { @@ -5156,9 +4986,9 @@ "peer": true }, "node_modules/flow-estree": { - "version": "0.331.0", - "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", - "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", + "version": "0.327.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.327.0.tgz", + "integrity": "sha512-f9vK751YUzD0qaHSpKc5/qQM6gqOlgGS+4ZRqTNcZOpVqn3mC55yEQ6dUG2K1eaVm5FbKkz9CFWe6XNvrkQFQg==", "license": "MIT", "peer": true, "engines": { @@ -5166,25 +4996,18 @@ } }, "node_modules/flow-parser": { - "version": "0.331.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", - "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", + "version": "0.327.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.327.0.tgz", + "integrity": "sha512-/MYZ5hXWf5ozpbdfUDmazMgQXviLxWEiRLH3MppEGDdW0itRVqmB5UaU7QX+SBCDNiq+gEesSVn8nlxmPDyDkw==", "license": "MIT", "peer": true, "dependencies": { - "flow-estree": "0.331.0" + "flow-estree": "0.327.0" }, "engines": { "node": ">=0.4.0" } }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -5329,9 +5152,9 @@ "license": "MIT" }, "node_modules/hermes-compiler": { - "version": "250829098.0.17", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.17.tgz", - "integrity": "sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==", + "version": "260318099.0.4", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-260318099.0.4.tgz", + "integrity": "sha512-8odcPFkPC82HlqCl0C5QI9mBN4rEAT+IAo55sJhzwKw//K3qZloiv3ex6J2O8CuBbhdmkJozfidNsset2KH25w==", "license": "MIT", "peer": true }, @@ -5480,9 +5303,9 @@ } }, "node_modules/ip-address": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", - "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", + "version": "10.7.4", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.4.tgz", + "integrity": "sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg==", "license": "MIT", "engines": { "node": ">= 12" @@ -5829,34 +5652,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "peer": true - }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -6284,13 +6079,6 @@ "tmpl": "1.0.5" } }, - "node_modules/marky": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", - "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -6306,9 +6094,9 @@ "peer": true }, "node_modules/metro": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.84.5.tgz", - "integrity": "sha512-r1liLkyFZMVSEMNjU1CJU5pRzs3NdkxHqXS60O25c0rCIqAR+cGk7rPydw/g0WAIKVXojIBIF45yYBPagJGcgw==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.87.1.tgz", + "integrity": "sha512-1oyLU9elM7hPAsKIqKooEekwxiuWr27+MZBhUROPhzcbXhMDxK64GPF/hCXwBZVp1F89ODavCrBmJtLx9WtBoQ==", "license": "MIT", "peer": true, "dependencies": { @@ -6320,29 +6108,28 @@ "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "accepts": "^2.0.0", - "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", + "flow-parser": "0.331.0", "graceful-fs": "^4.2.4", - "hermes-parser": "0.35.0", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-config": "0.84.5", - "metro-core": "0.84.5", - "metro-file-map": "0.84.5", - "metro-resolver": "0.84.5", - "metro-runtime": "0.84.5", - "metro-source-map": "0.84.5", - "metro-symbolicate": "0.84.5", - "metro-transform-plugins": "0.84.5", - "metro-transform-worker": "0.84.5", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-config": "0.87.1", + "metro-core": "0.87.1", + "metro-file-map": "0.87.1", + "metro-resolver": "0.87.1", + "metro-runtime": "0.87.1", + "metro-source-map": "0.87.1", + "metro-symbolicate": "0.87.1", + "metro-transform-plugins": "0.87.1", + "metro-transform-worker": "0.87.1", "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -6355,111 +6142,116 @@ "metro": "src/cli.js" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-babel-transformer": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.84.5.tgz", - "integrity": "sha512-2WbHILKMiJUzfdjmGOQOqU1bWi9//gqiclc/tkk/AIsrrVw3efhZ1uhkOwMTxUEPOzqoo091H0olLmVZH5FHGQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.87.1.tgz", + "integrity": "sha512-orvRIGpb0yK1yMbk5YP3dhVKjmoxUkRB9fdltGJxNppEqus/1tFpNuf9KnGFR3Qjg0izoUrJ4z6WgoBvdkXPrA==", "license": "MIT", "peer": true, "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.35.0", - "metro-cache-key": "0.84.5", + "flow-parser": "0.331.0", + "metro-cache-key": "0.87.1", "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "node_modules/metro-babel-transformer/node_modules/flow-estree": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", + "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=18" + } }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "node_modules/metro-babel-transformer/node_modules/flow-parser": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", + "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", "license": "MIT", "peer": true, "dependencies": { - "hermes-estree": "0.35.0" + "flow-estree": "0.331.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/metro-cache": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.84.5.tgz", - "integrity": "sha512-WHS0n2OxQqtwEjSeQFPePNrMvEFhmQcUQM9cRJMHByWoi/GMWFBEWOf7hVkAM/0KRutAXNbDlSu/cZB6CyxgQQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.87.1.tgz", + "integrity": "sha512-juNPaj0Xi5tkLp8imXqvbSnEIijwKG36m7OiFFVJMqEkiURwAjkMFVek3/xpix1+LVQqO7kjVp3PvuvIM61mKQ==", "license": "MIT", "peer": true, "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.84.5" + "metro-core": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-cache-key": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.84.5.tgz", - "integrity": "sha512-3dPB2TnvGjjf0/9O7AXVQURKXuQNauTZE7WpTGTlR017Gh/B5y0m/2wcqxfveUguHSpu89KhVxCAlr2k/H7uhQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.87.1.tgz", + "integrity": "sha512-scqVVPMA2c+RVO12I3wyMDp5xCkRPLsyrcG4Qc3xfU5JR0EW/0sz2tjty+5UjMUtG09uiM1KYQ8HjWg7OQXHtw==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-config": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.84.5.tgz", - "integrity": "sha512-zie+uN6oohscowi2S7ByU+wUw6CrT4ZxW9uAbONOObSxx86RGmnIAmjXHLkfmcdYoY7jzOPEbqcI6oeVmqyBQA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.87.1.tgz", + "integrity": "sha512-NmkDlc/qZAdo5gTkVTuO2AKE/khemRKRH5IA+SKfqUBJigI5GqZ5TOXhmEokhlkAqzjt8dyzKhzI6FHvXoXaTQ==", "license": "MIT", "peer": true, "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.84.5", - "metro-cache": "0.84.5", - "metro-core": "0.84.5", - "metro-runtime": "0.84.5", - "yaml": "^2.6.1" + "metro": "0.87.1", + "metro-cache": "0.87.1", + "metro-core": "0.87.1", + "metro-runtime": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-core": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.84.5.tgz", - "integrity": "sha512-xwm605hCi5Y6eJTTb8ZWo6pkUcoBEIyiQOfkZh5GwtDwUrP9SNhTQZhzJHrBCwwxlf3Ptl/pxWJgQ1rsNYMnrA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.87.1.tgz", + "integrity": "sha512-xizzky/4+c/Mkznege8OW05j7bSdM39VPoEps61Se4+hf32UQujmbvLvIE9+UnP6kNEPVomk0Fw8NsBK9iRQmw==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.84.5" + "metro-resolver": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-file-map": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.84.5.tgz", - "integrity": "sha512-mlm/JL8toSbSc2akpKIGmzvrVRSCgZ5vkbycI34oMLoOnLGuLyC8WTyVJ6P0hZG/usDaGwZSl/s9BCRriqjGJA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.87.1.tgz", + "integrity": "sha512-9sPuNCojC3pS4vj+ZPY7FXmHGpdJeckXuKXQrDAfJvZc60AF8owRFTkI8XdwlwrmPIB2w++KraK9FMEXvC4wJw==", "license": "MIT", "peer": true, "dependencies": { @@ -6470,17 +6262,16 @@ "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" + "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-minify-terser": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.84.5.tgz", - "integrity": "sha512-BJoFwCEDsYnagPqarayInv2+diCDNDdLlaof/p6s9w4gh+gc9HXYM+pDvsKGKKUumpZswNF3Z/ftTMqKl/5IBg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.87.1.tgz", + "integrity": "sha512-YK4k1oO1wV48hfE+Nbw2rJCnAgeabzrgT/xH5ha5n9gbK4p3HYFC898cERUiyTl9vRh58CNTiXRc88f7y6PfKg==", "license": "MIT", "peer": true, "dependencies": { @@ -6488,26 +6279,26 @@ "terser": "^5.15.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-resolver": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.84.5.tgz", - "integrity": "sha512-VSSnepg1k6LyCwtb6eirWdAWlpKwBG8Rdtsr1mU38rMelFyWgh3/QuMSiZIZAIjwg/fsa8GhW5/FO54CAUPCEA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.87.1.tgz", + "integrity": "sha512-FXH/brY69wT6sPxaSW8BhMmDGD/6irmBr/cL4rUi+VWwqR3pbvdcfUOfyjcHucgQ7pe5IW3xJY21eHKLVKNumQ==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-runtime": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.84.5.tgz", - "integrity": "sha512-U1m2+d1Pr+JO2/iVXBB2OfXXityz7tqwIorxfrT15IEgaHvpJBq/OHiqnOWPKJbUl3JcxjcdviZZOKk85oK4Qg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", + "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", "license": "MIT", "peer": true, "dependencies": { @@ -6515,13 +6306,13 @@ "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-source-map": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.84.5.tgz", - "integrity": "sha512-2BtV5L9uPc49F13Gn5wiP6bX/EncqzqTIk2VL/0F/96Vo0YEOjluT/qktQjFODfqGFsucwnh5mPEAl/2jVEfeg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", + "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", "license": "MIT", "peer": true, "dependencies": { @@ -6529,26 +6320,26 @@ "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.84.5", + "metro-symbolicate": "0.87.1", "nullthrows": "^1.1.1", - "ob1": "0.84.5", + "ob1": "0.87.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-symbolicate": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.84.5.tgz", - "integrity": "sha512-rQ40zYDAkaWBN9yvjUuAD0ZpzBMZSoKyGYXnb5JrfbKjun7fTvfoLHL3KXFYenBTYZkQtlp4cKSCv/1utxFyOw==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", + "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.84.5", + "metro-source-map": "0.87.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -6557,13 +6348,13 @@ "metro-symbolicate": "src/index.js" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-transform-plugins": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.84.5.tgz", - "integrity": "sha512-+InaSVGaOyt0DyRo4Y/zIdPI6CZwnbNho5LAL23tgmuGwv7fyfkF7kKfPjZcfxXBcoYdTLLFnCfCH/dHSiCqNg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.87.1.tgz", + "integrity": "sha512-qMiJ/x+VfqumFJJSefKS6nj8uojzC29b2/aK8vlMuFABIqGjDucICEOXd2Yt6k/XMFAgAcaJvShUOT0HLyYaPw==", "license": "MIT", "peer": true, "dependencies": { @@ -6575,13 +6366,13 @@ "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-transform-worker": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.84.5.tgz", - "integrity": "sha512-ui1Z8x4s5RL36gMmKLaMMO7O9NNDHNdthEZSCDQHAau3JcAsTaFOK6I+2q4I/kW5u8hSEjJk9L45TXSVJw6g1A==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.87.1.tgz", + "integrity": "sha512-VOzs3OV405FuOLYdAhqA2wsn1F9lvueDVxMDLvCKaQ44U+yknIqphJ9eMjjsGwLDZiJq9sW3DMLhjD27JxQgqQ==", "license": "MIT", "peer": true, "dependencies": { @@ -6590,17 +6381,17 @@ "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", - "metro": "0.84.5", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-minify-terser": "0.84.5", - "metro-source-map": "0.84.5", - "metro-transform-plugins": "0.84.5", + "metro": "0.87.1", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-minify-terser": "0.87.1", + "metro-source-map": "0.87.1", + "metro-transform-plugins": "0.87.1", "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro/node_modules/accepts": { @@ -6617,28 +6408,27 @@ "node": ">= 0.6" } }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT", - "peer": true - }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "node_modules/metro/node_modules/flow-estree": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", + "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=18" + } }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "node_modules/metro/node_modules/flow-parser": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", + "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", "license": "MIT", "peer": true, "dependencies": { - "hermes-estree": "0.35.0" + "flow-estree": "0.331.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/metro/node_modules/mime-types": { @@ -6792,19 +6582,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mqtt": { "version": "5.15.2", "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.15.2.tgz", @@ -6868,9 +6645,9 @@ "peer": true }, "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "funding": [ { "type": "github", @@ -6921,13 +6698,37 @@ "peer": true }, "node_modules/node-releases": { - "version": "2.0.57", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", - "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "version": "2.0.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", + "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/noxcturnal": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.5.tgz", + "integrity": "sha512-X/HQXJP/xn7LVQ4z1E4La0NHSl5UHdtJPG6ky4r2/Xgb7k79nGDJgBXk7I5f1V2vInWjlSCM14oSB0cUxwZS/Q==", "license": "MIT", "peer": true, + "dependencies": { + "@babel/code-frame": "^7.20.0", + "@oxc-project/types": "0.154.0" + }, "engines": { "node": ">=18" + }, + "optionalDependencies": { + "@noxcturnal/noxcturnal-darwin-arm64": "0.1.5", + "@noxcturnal/noxcturnal-darwin-x64": "0.1.5", + "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.5", + "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.5", + "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.5", + "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.5", + "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.5", + "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.5" } }, "node_modules/npm-package-arg": { @@ -6964,16 +6765,16 @@ } }, "node_modules/ob1": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.84.5.tgz", - "integrity": "sha512-aH9RkoZc7w/90HBamFxTw8ZLFr05wXS+iOnvmrgo53Ep8Pyrm5FieQSaPIVROkfFVQISeD/zo92fes26TOwe+A==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", + "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/on-finished": { @@ -7013,17 +6814,18 @@ } }, "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "peer": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7341,9 +7143,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz", + "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==", "funding": [ { "type": "opencollective", @@ -7361,9 +7163,9 @@ "license": "MIT", "peer": true, "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7523,9 +7325,9 @@ } }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "license": "MIT", "peer": true, "engines": { @@ -7551,36 +7353,35 @@ "peer": true }, "node_modules/react-native": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.87.1.tgz", - "integrity": "sha512-DJKG6ANoD7BtrE4z9DewiSD7/RxCX73lK5Pu49aUr85P3333Dm2roTiP0rRjQNDZdVizHSOmstWfwF/o9EjCRA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.88.0.tgz", + "integrity": "sha512-v/wee0nYWcammMYBnSat/e3WY/5iaf9YQOMcBrfKT/wPApPPlHp94hgZovBtwhMuthR01yc/8cGn0FpFTE/C4A==", "license": "MIT", "peer": true, "dependencies": { - "@react-native/asset-utils": "0.87.1", - "@react-native/codegen": "0.87.1", - "@react-native/community-cli-plugin": "0.87.1", - "@react-native/gradle-plugin": "0.87.1", - "@react-native/normalize-colors": "0.87.1", - "@react-native/virtualized-lists": "0.87.1", + "@react-native/asset-utils": "0.88.0", + "@react-native/codegen": "0.88.0", + "@react-native/community-cli-plugin": "0.88.0", + "@react-native/gradle-plugin": "0.88.0", + "@react-native/normalize-colors": "0.88.0", + "@react-native/virtualized-lists": "0.88.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", - "babel-plugin-syntax-hermes-parser": "0.36.1", "base64-js": "^1.5.1", - "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", - "hermes-compiler": "250829098.0.17", + "flow-parser": "0.327.0", + "hermes-compiler": "260318099.0.4", "invariant": "^2.2.4", "memoize-one": "^5.0.0", - "metro-runtime": "^0.87.0", - "metro-source-map": "^0.87.0", + "metro-runtime": "^0.87.1", + "metro-source-map": "^0.87.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", - "scheduler": "0.27.0", + "scheduler": "0.28.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", @@ -7596,7 +7397,7 @@ }, "peerDependencies": { "@types/react": "^19.1.1", - "react": "^19.2.3" + "react": "^19.3.0" }, "peerDependenciesMeta": { "@types/react": { @@ -7604,114 +7405,6 @@ } } }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.87.1.tgz", - "integrity": "sha512-qbaqEdlUfj2vRgvWTpMoNgHnEqAhAYJLUrpGkb0WC9n0kdtqUvgigpz4bDktZwolM9BemXwgGFgyiAnbs3t0xw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.29.0", - "hermes-parser": "0.36.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "tinyglobby": "^0.2.15", - "yargs": "^17.6.2" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.87.1.tgz", - "integrity": "sha512-8+AutemzX+a7cuKgTUyb7JUk3sFYgLyrSnlTLrL6LuW/LKDE+FYE8lJGWYhJPJcE51Ge1D8yRzxgQEdEFZtuIw==", - "license": "MIT", - "peer": true - }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/react-native/node_modules/metro-runtime": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", - "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/metro-source-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", - "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.87.1", - "nullthrows": "^1.1.1", - "ob1": "0.87.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/metro-symbolicate": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", - "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.87.1", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/ob1": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", - "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -7739,9 +7432,9 @@ } }, "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.5.0.tgz", + "integrity": "sha512-1s+CxXjJ71i7LNVy8nYwg47XV4y6lAnOEhsMtSKq3WpmPfhl9LuKlTqKIn/3yUpE8lBz+W+TT88Bxyhnr0U4yw==", "license": "MIT", "peer": true }, @@ -7766,13 +7459,13 @@ "peer": true }, "node_modules/regexpu-core": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.2.tgz", - "integrity": "sha512-zkmVH92DlzjSFc4xKGZp/2BXIFrDIdBQBC8gUXKCsMgKYb1bkCkxfSuoW1werDjaTEMTbULkHtKFHe1L+Abnaw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.3.tgz", + "integrity": "sha512-E8VgUoSK+LMQrLboDxavm76MTBGrQhx9RiNuomRmYnZ10Uw12HrI8fkxOOncktb2hBpzIZ9SV/347euQHG5z+g==", "license": "MIT", "peer": true, "dependencies": { - "regenerate": "^1.4.2", + "regenerate": "^1.5.0", "regenerate-unicode-properties": "^10.3.0", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", @@ -7791,9 +7484,9 @@ "peer": true }, "node_modules/regjsparser": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.3.tgz", - "integrity": "sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.4.tgz", + "integrity": "sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==", "license": "BSD-2-Clause", "peer": true, "dependencies": { @@ -7814,13 +7507,13 @@ } }, "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "version": "1.22.13", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", + "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", + "is-core-module": "^2.17.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -7961,9 +7654,9 @@ } }, "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "license": "MIT", "peer": true }, @@ -8191,9 +7884,9 @@ } }, "node_modules/shell-quote": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.11.0.tgz", - "integrity": "sha512-JdxDPD0DBTyu08pq0kPC0xSNet/qsU07qT6IsX1AS8oO2ICNRY4ldNa8OAI6PuwAH8tG3lxEhbqmyp4Dw4036g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.12.0.tgz", + "integrity": "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==", "license": "MIT", "peer": true, "engines": { @@ -8287,9 +7980,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "license": "BSD-3-Clause", "peer": true, "engines": { @@ -8722,9 +8415,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", - "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "funding": [ { "type": "opencollective", @@ -8779,9 +8472,9 @@ } }, "node_modules/uuid": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz", - "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.3.tgz", + "integrity": "sha512-Sc5u1VVln93y1Xnz4R+CunOZc7R9LUcTmhj7Rc7Eg3HVcf7rVn2FOoa812fe0W8p3jD7xeoGSYbfqCGGH2B6xw==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8847,9 +8540,9 @@ "peer": true }, "node_modules/whatwg-url-minimum": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/whatwg-url-minimum/-/whatwg-url-minimum-0.1.2.tgz", - "integrity": "sha512-XPEm0XFQWNVG292lII1PrRRJl3sItrs7CettZ4ncYxuDVpLyy+NwlGyut2hXI0JswcJUxeCH+CyOJK0ZzAXD6A==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url-minimum/-/whatwg-url-minimum-0.2.0.tgz", + "integrity": "sha512-BtjXU1caNcCFfETP2DhqSeVPfRDl2MTUitI107RE34rJXjR/izfUtR5IoTFOK1WqjNLXbbeqaCH/mQAOLjpc8g==", "license": "MIT", "peer": true }, @@ -9042,22 +8735,6 @@ "license": "ISC", "peer": true }, - "node_modules/yaml": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", - "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", - "license": "ISC", - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/yargs": { "version": "17.7.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", diff --git a/package.json b/package.json index b36e9cfc..ab93bd38 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "react-native-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API", - "version": "2.0.0", + "version": "3.0.0", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { @@ -39,11 +39,12 @@ "analyse": "tsc --noEmit" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "devDependencies": { "@eslint/js": "10.0.1", "eslint": "10.10.0", + "expo-file-system": "58.0.9", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", "@types/node": "24.9.2", @@ -58,14 +59,14 @@ }, "dependencies": { "buffer": "6.0.3", - "expo-file-system": "18.*.*", "json-bigint": "1.0.0", "mqtt": "5.15.2", "process": "0.11.10", "readable-stream": "4.7.0" }, "peerDependencies": { - "expo": "*", + "expo": ">=52.0.0", + "expo-file-system": ">=18.0.0", "expo-notifications": "*", "react-native": ">=0.76.7 <1.0.0", "react-native-background-actions": ">=4.0.0 <5.0.0", diff --git a/src/client.ts b/src/client.ts index 8efff40a..c5277c40 100644 --- a/src/client.ts +++ b/src/client.ts @@ -291,7 +291,7 @@ class Client { 'x-sdk-name': 'React Native', 'x-sdk-platform': 'client', 'x-sdk-language': 'reactnative', - 'x-sdk-version': '2.0.0', + 'x-sdk-version': '3.0.0', 'X-Appwrite-Response-Format': '2.5.0', }; diff --git a/src/lib/file-system.ts b/src/lib/file-system.ts new file mode 100644 index 00000000..284e273a --- /dev/null +++ b/src/lib/file-system.ts @@ -0,0 +1,13 @@ +import type * as Legacy from 'expo-file-system/legacy'; + +export type FileSystem = typeof Legacy; + +export function fileSystem(): FileSystem { + /* eslint-disable @typescript-eslint/no-require-imports */ + try { + return require('expo-file-system/legacy'); + } catch { + return require('expo-file-system'); + } + /* eslint-enable @typescript-eslint/no-require-imports */ +} diff --git a/src/query.ts b/src/query.ts index 9c614c75..7b5c0913 100644 --- a/src/query.ts +++ b/src/query.ts @@ -652,7 +652,7 @@ export class Query { new Query('on', undefined, [left, operator, right]).toString(); /** - * Inner join. `table` is the joined collection/table ID. + * Inner join. `table` is the joined collection/table ID; without an alias the server names the join after it, if the ID is a valid alias, and otherwise rejects the query. */ static join = ( table: string, diff --git a/src/services/account.ts b/src/services/account.ts index 983002d2..734b600d 100644 --- a/src/services/account.ts +++ b/src/services/account.ts @@ -1159,6 +1159,117 @@ export class Account extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get the team memberships of the currently logged in user. + * + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm, roles + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @throws {AppwriteException} + * @returns {Promise} + */ + listMemberships(params?: { + queries?: string[]; + total?: boolean; + }): Promise; + /** + * Get the team memberships of the currently logged in user. + * + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm, roles + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @throws {AppwriteException} + * @returns {Promise} + * @deprecated Use the object parameter style method for a better developer experience. + */ + listMemberships( + queries?: string[], + total?: boolean, + ): Promise; + listMemberships( + paramsOrFirst?: { queries?: string[]; total?: boolean } | string[], + ...rest: [boolean?] + ): Promise { + let params: { queries?: string[]; total?: boolean }; + + if ( + (typeof paramsOrFirst === 'undefined' && rest.length === 0) || + (paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst)) + ) { + params = (paramsOrFirst || {}) as { + queries?: string[]; + total?: boolean; + }; + } else { + params = { + queries: paramsOrFirst as string[], + total: rest[0] as boolean, + }; + } + + const queries = params.queries; + const total = params.total; + + const apiPath = '/account/memberships'; + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'get', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'membershipList', + models: { + membershipList: { + defaults: { + total: 0, + memberships: [], + }, + properties: { + memberships: { + items: 'membership', + }, + }, + }, + membership: { + defaults: { + $id: '', + $createdAt: '', + $updatedAt: '', + userId: '', + userName: '', + userEmail: '', + userPhone: '', + teamId: '', + teamName: '', + invited: '', + joined: '', + confirm: false, + mfa: false, + userAccessedAt: '', + roles: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Enable or disable MFA on an account. * @@ -3623,6 +3734,9 @@ export class Account extends Service { * * Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * + * * @param {string} params.userId - User ID. * @param {string} params.secret - Valid reset token. * @param {string} params.password - New user password. Must be between 8 and 256 chars. @@ -3639,6 +3753,9 @@ export class Account extends Service { * * Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * + * * @param {string} userId - User ID. * @param {string} secret - Valid reset token. * @param {string} password - New user password. Must be between 8 and 256 chars. @@ -3840,6 +3957,8 @@ export class Account extends Service { /** * Use this endpoint to complete the user password recovery process using the 6-digit code that was emailed by [createRecoveryOTP](https://appwrite.io/docs/references/cloud/client-web/account#createRecoveryOTP). Pass the **userId** of the user along with the **secret** code from the email and the new **password** to set. If confirmed, this route will return a 200 status code, the code is consumed and the user's password is updated. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * * * @param {string} params.userId - User ID. * @param {string} params.secret - Valid recovery OTP code. @@ -3855,6 +3974,8 @@ export class Account extends Service { /** * Use this endpoint to complete the user password recovery process using the 6-digit code that was emailed by [createRecoveryOTP](https://appwrite.io/docs/references/cloud/client-web/account#createRecoveryOTP). Pass the **userId** of the user along with the **secret** code from the email and the new **password** to set. If confirmed, this route will return a 200 status code, the code is consumed and the user's password is updated. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * * * @param {string} userId - User ID. * @param {string} secret - Valid recovery OTP code. @@ -5377,6 +5498,8 @@ export class Account extends Service { * @param {string} params.targetId - Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. * @param {string} params.identifier - The target identifier (token, email, phone etc.) * @param {string} params.providerId - Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used. + * @param {string} params.bundleId - App bundle ID of the device registering an APNs token. Without `providerId`, routes the target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} params.environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} */ @@ -5384,6 +5507,8 @@ export class Account extends Service { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }): Promise; /** * Use this endpoint to register a device for push notifications. Provide a target ID (custom or generated using ID.unique()), a device identifier (usually a device token), and optionally specify which provider should send notifications to this target. The target is automatically linked to the current session and includes device information like brand and model. A session holds one push target per provider, so if one already exists this endpoint updates and returns that target instead of creating a second one, and a device that rotates its token is never notified twice. @@ -5391,6 +5516,8 @@ export class Account extends Service { * @param {string} targetId - Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. * @param {string} identifier - The target identifier (token, email, phone etc.) * @param {string} providerId - Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used. + * @param {string} bundleId - App bundle ID of the device registering an APNs token. Without `providerId`, routes the target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} * @deprecated Use the object parameter style method for a better developer experience. @@ -5399,17 +5526,27 @@ export class Account extends Service { targetId: string, identifier: string, providerId?: string, + bundleId?: string, + environment?: string, ): Promise; createPushTarget( paramsOrFirst: - | { targetId: string; identifier: string; providerId?: string } + | { + targetId: string; + identifier: string; + providerId?: string; + bundleId?: string; + environment?: string; + } | string, - ...rest: [string?, string?] + ...rest: [string?, string?, string?, string?] ): Promise { let params: { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }; if ( @@ -5421,18 +5558,24 @@ export class Account extends Service { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }; } else { params = { targetId: paramsOrFirst as string, identifier: rest[0] as string, providerId: rest[1] as string, + bundleId: rest[2] as string, + environment: rest[3] as string, }; } const targetId = params.targetId; const identifier = params.identifier; const providerId = params.providerId; + const bundleId = params.bundleId; + const environment = params.environment; if (typeof targetId === 'undefined') { throw new AppwriteException( @@ -5461,6 +5604,14 @@ export class Account extends Service { apiPayload['providerId'] = providerId; } + if (typeof bundleId !== 'undefined') { + apiPayload['bundleId'] = bundleId; + } + + if (typeof environment !== 'undefined') { + apiPayload['environment'] = environment; + } + const uri = new URL(this.client.config.endpoint + apiPath); const request = this.client.call( 'post', @@ -5498,18 +5649,24 @@ export class Account extends Service { * * @param {string} params.targetId - Target ID. * @param {string} params.identifier - The target identifier (token, email, phone etc.) + * @param {string} params.bundleId - App bundle ID of the device registering an APNs token. Routes an APNs target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} params.environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} */ updatePushTarget(params: { targetId: string; identifier: string; + bundleId?: string; + environment?: string; }): Promise; /** * Update the currently logged in user's push notification target. You can modify the target's identifier (device token) and provider ID (token, email, phone etc.). The target must exist and belong to the current user. If you change the provider ID, notifications will be sent through the new messaging provider instead. * * @param {string} targetId - Target ID. * @param {string} identifier - The target identifier (token, email, phone etc.) + * @param {string} bundleId - App bundle ID of the device registering an APNs token. Routes an APNs target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} * @deprecated Use the object parameter style method for a better developer experience. @@ -5517,12 +5674,26 @@ export class Account extends Service { updatePushTarget( targetId: string, identifier: string, + bundleId?: string, + environment?: string, ): Promise; updatePushTarget( - paramsOrFirst: { targetId: string; identifier: string } | string, - ...rest: [string?] + paramsOrFirst: + | { + targetId: string; + identifier: string; + bundleId?: string; + environment?: string; + } + | string, + ...rest: [string?, string?, string?] ): Promise { - let params: { targetId: string; identifier: string }; + let params: { + targetId: string; + identifier: string; + bundleId?: string; + environment?: string; + }; if ( paramsOrFirst && @@ -5532,16 +5703,22 @@ export class Account extends Service { params = (paramsOrFirst || {}) as { targetId: string; identifier: string; + bundleId?: string; + environment?: string; }; } else { params = { targetId: paramsOrFirst as string, identifier: rest[0] as string, + bundleId: rest[1] as string, + environment: rest[2] as string, }; } const targetId = params.targetId; const identifier = params.identifier; + const bundleId = params.bundleId; + const environment = params.environment; if (typeof targetId === 'undefined' || targetId === '') { throw new AppwriteException( @@ -5565,6 +5742,14 @@ export class Account extends Service { apiPayload['identifier'] = identifier; } + if (typeof bundleId !== 'undefined') { + apiPayload['bundleId'] = bundleId; + } + + if (typeof environment !== 'undefined') { + apiPayload['environment'] = environment; + } + const uri = new URL(this.client.config.endpoint + apiPath); const request = this.client.call( 'put', diff --git a/src/services/avatars.ts b/src/services/avatars.ts index e634ce6d..168ed2e5 100644 --- a/src/services/avatars.ts +++ b/src/services/avatars.ts @@ -2,7 +2,7 @@ import { Service } from '../service'; import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; -import * as FileSystem from 'expo-file-system'; +import { fileSystem } from '../lib/file-system'; import { Platform as RNPlatform } from 'react-native'; import { Browser } from '../enums/browser'; @@ -973,6 +973,8 @@ export class Avatars extends Service { accept: 'application/json', }; + const FileSystem = fileSystem(); + const size = file.size; if (size <= Service.CHUNK_SIZE) { @@ -1025,12 +1027,20 @@ export class Avatars extends Service { async () => firstChunk, ); - response = await this.client.call( - 'put', - uri, - firstChunkHeaders, - apiPayload, - ); + try { + response = await this.client.call( + 'put', + uri, + firstChunkHeaders, + apiPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(firstPath, { + idempotent: true, + }).catch(() => undefined); + } + } offset = firstChunkEnd; if (onProgress) { @@ -1109,12 +1119,21 @@ export class Avatars extends Service { async () => chunkData, ); - const chunkResponse = await this.client.call( - 'put', - uri, - chunkHeaders, - chunkPayload, - ); + let chunkResponse; + try { + chunkResponse = await this.client.call( + 'put', + uri, + chunkHeaders, + chunkPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(chunkPath, { + idempotent: true, + }).catch(() => undefined); + } + } if (failed) { return chunkResponse; diff --git a/src/services/databases.ts b/src/services/databases.ts index 43e4b4a9..4a36dd39 100644 --- a/src/services/databases.ts +++ b/src/services/databases.ts @@ -544,12 +544,14 @@ export class Databases extends Service { /** * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. * + * Documents returned by aggregate, groupBy or distinct queries hold only the attributes they select, group or aggregate, typed as a document types them, with a joined attribute named by its join alias (`alias.attribute`). They have no `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` or `$collectionId` unless they select or group it, and neither does a right or full join document that no document of this collection matched. + * * @param {string} params.databaseId - Database ID. * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise} * @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.listRows` instead. @@ -567,12 +569,14 @@ export class Databases extends Service { /** * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. * + * Documents returned by aggregate, groupBy or distinct queries hold only the attributes they select, group or aggregate, typed as a document types them, with a joined attribute named by its join alias (`alias.attribute`). They have no `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` or `$collectionId` unless they select or group it, and neither does a right or full join document that no document of this collection matched. + * * @param {string} databaseId - Database ID. * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise>} * @deprecated Use the object parameter style method for a better developer experience. @@ -916,6 +920,184 @@ export class Databases extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + * @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.createQuery` instead. + */ + createQuery< + Document extends Models.Document = Models.DefaultDocument, + >(params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + collectionId: string, + queries?: string[], + transactionId?: string | null, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, (string | null)?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + collectionId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string | null, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const collectionId = params.collectionId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof collectionId === 'undefined' || collectionId === '') { + throw new AppwriteException( + 'Missing required parameter: "collectionId"', + ); + } + + const apiPath = + '/databases/{databaseId}/collections/{collectionId}/documents/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace( + '{collectionId}', + encodeURIComponent(String(collectionId)), + ); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'documentList', + models: { + documentList: { + defaults: { + total: 0, + documents: [], + }, + properties: { + documents: { + items: 'document', + }, + }, + }, + document: { + defaults: { + $id: '', + $sequence: '', + $collectionId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. * diff --git a/src/services/documents-db.ts b/src/services/documents-db.ts index d43db5a9..012b8a03 100644 --- a/src/services/documents-db.ts +++ b/src/services/documents-db.ts @@ -1063,6 +1063,183 @@ export class DocumentsDB extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for cached responses when caching is enabled for select queries. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + */ + createQuery< + Document extends Models.Document = Models.DefaultDocument, + >(params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for cached responses when caching is enabled for select queries. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + collectionId: string, + queries?: string[], + transactionId?: string, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, string?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + collectionId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const collectionId = params.collectionId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof collectionId === 'undefined' || collectionId === '') { + throw new AppwriteException( + 'Missing required parameter: "collectionId"', + ); + } + + const apiPath = + '/documentsdb/{databaseId}/collections/{collectionId}/documents/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace( + '{collectionId}', + encodeURIComponent(String(collectionId)), + ); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'documentList', + models: { + documentList: { + defaults: { + total: 0, + documents: [], + }, + properties: { + documents: { + items: 'document', + }, + }, + }, + document: { + defaults: { + $id: '', + $sequence: '', + $collectionId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. * diff --git a/src/services/storage.ts b/src/services/storage.ts index f14c66cf..738745ca 100644 --- a/src/services/storage.ts +++ b/src/services/storage.ts @@ -2,7 +2,7 @@ import { Service } from '../service'; import { AppwriteException, Client, applyDefaults } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; -import * as FileSystem from 'expo-file-system'; +import { fileSystem } from '../lib/file-system'; import { Platform as RNPlatform } from 'react-native'; import { ImageGravity } from '../enums/image-gravity'; @@ -329,6 +329,8 @@ export class Storage extends Service { accept: 'application/json', }; + const FileSystem = fileSystem(); + const size = file.size; if (size <= Service.CHUNK_SIZE) { @@ -399,12 +401,20 @@ export class Storage extends Service { async () => firstChunk, ); - response = await this.client.call( - 'post', - uri, - firstChunkHeaders, - apiPayload, - ); + try { + response = await this.client.call( + 'post', + uri, + firstChunkHeaders, + apiPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(firstPath, { + idempotent: true, + }).catch(() => undefined); + } + } offset = firstChunkEnd; if (onProgress) { @@ -483,12 +493,21 @@ export class Storage extends Service { async () => chunkData, ); - const chunkResponse = await this.client.call( - 'post', - uri, - chunkHeaders, - chunkPayload, - ); + let chunkResponse; + try { + chunkResponse = await this.client.call( + 'post', + uri, + chunkHeaders, + chunkPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(chunkPath, { + idempotent: true, + }).catch(() => undefined); + } + } if (failed) { return chunkResponse; diff --git a/src/services/tables-db.ts b/src/services/tables-db.ts index 20a11bc1..b4117e75 100644 --- a/src/services/tables-db.ts +++ b/src/services/tables-db.ts @@ -538,12 +538,14 @@ export class TablesDB extends Service { /** * Get a list of all the user's rows in a given table. You can use the query params to filter your results. * + * Rows returned by aggregate, groupBy or distinct queries hold only the columns they select, group or aggregate, typed as a row types them, with a joined column named by its join alias (`alias.column`). They have no `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` or `$tableId` unless they select or group it, and neither does a right or full join row that no row of this table matched. + * * @param {string} params.databaseId - Database ID. * @param {string} params.tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise} */ @@ -558,12 +560,14 @@ export class TablesDB extends Service { /** * Get a list of all the user's rows in a given table. You can use the query params to filter your results. * + * Rows returned by aggregate, groupBy or distinct queries hold only the columns they select, group or aggregate, typed as a row types them, with a joined column named by its join alias (`alias.column`). They have no `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` or `$tableId` unless they select or group it, and neither does a right or full join row that no row of this table matched. + * * @param {string} databaseId - Database ID. * @param {string} tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise>} * @deprecated Use the object parameter style method for a better developer experience. @@ -889,6 +893,177 @@ export class TablesDB extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's rows in a given table using a POST request. This behaves identically to the list rows endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + */ + createQuery(params: { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's rows in a given table using a POST request. This behaves identically to the list rows endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + tableId: string, + queries?: string[], + transactionId?: string | null, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, (string | null)?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + tableId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string | null, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const tableId = params.tableId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof tableId === 'undefined' || tableId === '') { + throw new AppwriteException( + 'Missing required parameter: "tableId"', + ); + } + + const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace('{tableId}', encodeURIComponent(String(tableId))); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'rowList', + models: { + rowList: { + defaults: { + total: 0, + rows: [], + }, + properties: { + rows: { + items: 'row', + }, + }, + }, + row: { + defaults: { + $id: '', + $sequence: '', + $tableId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a row by its unique ID. This endpoint response returns a JSON object with the row data. * diff --git a/tsconfig.json b/tsconfig.json index c7292aa8..0bc3af2b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "lib": ["ESNext", "DOM"], "listEmittedFiles": false, "listFiles": false, - "moduleResolution": "node", + "moduleResolution": "bundler", "noFallthroughCasesInSwitch": true, "pretty": true, "rootDir": "src", From c16df9d8a56d1e7e6b4472054a69b38a39c8d9e8 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Wed, 21 Oct 2026 12:39:53 +1300 Subject: [PATCH 2/4] chore: update React Native SDK to 3.0.0 --- CHANGELOG.md | 11 + docs/examples/account/create-push-target.md | 2 + docs/examples/account/list-memberships.md | 16 + docs/examples/account/update-push-target.md | 2 + docs/examples/databases/create-query.md | 20 + docs/examples/documentsdb/create-query.md | 20 + docs/examples/tablesdb/create-query.md | 20 + package-lock.json | 1957 ++++++++----------- package.json | 9 +- src/client.ts | 2 +- src/lib/file-system.ts | 13 + src/query.ts | 2 +- src/services/account.ts | 195 +- src/services/avatars.ts | 45 +- src/services/databases.ts | 186 +- src/services/documents-db.ts | 177 ++ src/services/storage.ts | 45 +- src/services/tables-db.ts | 179 +- tsconfig.json | 2 +- 19 files changed, 1721 insertions(+), 1182 deletions(-) create mode 100644 docs/examples/account/list-memberships.md create mode 100644 docs/examples/databases/create-query.md create mode 100644 docs/examples/documentsdb/create-query.md create mode 100644 docs/examples/tablesdb/create-query.md create mode 100644 src/lib/file-system.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 3897ac8c..b966b674 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change log +## 3.0.0 + +* Breaking: `expo-file-system` is a peer dependency (`>=18.0.0`); install it in your app +* Breaking: `expo` peer dependency requires `>=52.0.0` +* Added: `createQuery` on `databases`, `documentsDB` and `tablesDB` to send list queries in the request body +* Added: `account.listMemberships` +* Added: `bundleId` and `environment` on `account.createPushTarget` and `account.updatePushTarget` for APNs routing +* Fixed: uploads on Expo SDK 54 and later use `expo-file-system/legacy` instead of crashing +* Fixed: Android upload chunks are deleted from the cache once their request completes +* Updated: `package.json` declares `engines.node` `>=20.0.0` + ## 2.0.0 * Breaking: requests send `X-Appwrite-Response-Format: 2.5.0`; responses follow the 2.5 shapes diff --git a/docs/examples/account/create-push-target.md b/docs/examples/account/create-push-target.md index da09d09d..65deaeee 100644 --- a/docs/examples/account/create-push-target.md +++ b/docs/examples/account/create-push-target.md @@ -11,6 +11,8 @@ const result = await account.createPushTarget({ targetId: '', identifier: '', providerId: '', // optional + bundleId: '', // optional + environment: 'sandbox', // optional }); console.log(result); diff --git a/docs/examples/account/list-memberships.md b/docs/examples/account/list-memberships.md new file mode 100644 index 00000000..30067e5d --- /dev/null +++ b/docs/examples/account/list-memberships.md @@ -0,0 +1,16 @@ +```javascript +import { Client, Account } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const account = new Account(client); + +const result = await account.listMemberships({ + queries: [], // optional + total: false, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/account/update-push-target.md b/docs/examples/account/update-push-target.md index a759e5c5..d796a280 100644 --- a/docs/examples/account/update-push-target.md +++ b/docs/examples/account/update-push-target.md @@ -10,6 +10,8 @@ const account = new Account(client); const result = await account.updatePushTarget({ targetId: '', identifier: '', + bundleId: '', // optional + environment: 'sandbox', // optional }); console.log(result); diff --git a/docs/examples/databases/create-query.md b/docs/examples/databases/create-query.md new file mode 100644 index 00000000..7c618a00 --- /dev/null +++ b/docs/examples/databases/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, Databases } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const databases = new Databases(client); + +const result = await databases.createQuery({ + databaseId: '', + collectionId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/documentsdb/create-query.md b/docs/examples/documentsdb/create-query.md new file mode 100644 index 00000000..d75f7918 --- /dev/null +++ b/docs/examples/documentsdb/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, DocumentsDB } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const documentsDB = new DocumentsDB(client); + +const result = await documentsDB.createQuery({ + databaseId: '', + collectionId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/docs/examples/tablesdb/create-query.md b/docs/examples/tablesdb/create-query.md new file mode 100644 index 00000000..9779e4c8 --- /dev/null +++ b/docs/examples/tablesdb/create-query.md @@ -0,0 +1,20 @@ +```javascript +import { Client, TablesDB } from 'react-native-appwrite'; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +const tablesDB = new TablesDB(client); + +const result = await tablesDB.createQuery({ + databaseId: '', + tableId: '', + queries: [], // optional + transactionId: '', // optional + total: false, // optional + ttl: 0, // optional +}); + +console.log(result); +``` diff --git a/package-lock.json b/package-lock.json index bbf4775e..224efa11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,15 @@ { "name": "react-native-appwrite", - "version": "2.0.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-appwrite", - "version": "2.0.0", + "version": "3.0.0", "license": "BSD-3-Clause", "dependencies": { "buffer": "6.0.3", - "expo-file-system": "18.*.*", "json-bigint": "1.0.0", "mqtt": "5.15.2", "process": "0.11.10", @@ -23,6 +22,7 @@ "@types/node": "24.9.2", "@types/readable-stream": "4.0.24", "eslint": "10.10.0", + "expo-file-system": "58.0.9", "playwright": "1.59.0", "prettier": "3.9.6", "rollup": "4.63.2", @@ -32,10 +32,11 @@ "typescript-eslint": "8.70.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "expo": "*", + "expo": ">=52.0.0", + "expo-file-system": ">=18.0.0", "expo-notifications": "*", "react-native": ">=0.76.7 <1.0.0", "react-native-background-actions": ">=4.0.0 <5.0.0", @@ -221,14 +222,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", - "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.10.tgz", + "integrity": "sha512-/YY9soQuWa8TURtHXHT+GbklpbAA+dZErxFGHIr6qgDg96xuGWrTAs1+MfjgVJPF0YLQsOVsOYs8lhgsPbOinQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", - "regexpu-core": "^6.3.1", + "regexpu-core": "^6.5.3", "semver": "^6.3.1" }, "engines": { @@ -440,14 +441,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", + "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", "license": "MIT", "peer": true, "dependencies": { "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" + "@babel/types": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1124,9 +1125,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", - "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz", + "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1148,16 +1149,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", + "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", + "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" @@ -1333,35 +1334,40 @@ } }, "node_modules/@expo/cli": { - "version": "57.0.27", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-57.0.27.tgz", - "integrity": "sha512-Jauk4chxmpVG5ElrMLTCwjFP20jbYU7PB4l3LYV8j+4e/3HU5jdl7qTQ4eVy1AaDUE9Ia2NCQ5A9kar2V1gaLg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/devcert": "^1.2.1", - "@expo/env": "~2.4.3", - "@expo/image-utils": "^0.11.5", - "@expo/inline-modules": "^0.1.7", - "@expo/json-file": "^11.0.1", - "@expo/log-box": "^57.0.4", - "@expo/metro": "~56.0.2", - "@expo/metro-config": "~57.0.12", - "@expo/metro-file-map": "^57.0.3", - "@expo/osascript": "^2.7.1", - "@expo/package-manager": "^1.13.1", - "@expo/plist": "^0.8.1", - "@expo/prebuild-config": "^57.0.16", - "@expo/require-utils": "^57.0.5", - "@expo/router-server": "^57.0.11", - "@expo/schema-utils": "^57.0.2", + "version": "58.1.11", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.11.tgz", + "integrity": "sha512-wkFTSLXXYqLkRT5oy4DnLuTOtbFIu3qTiXHSHkFSqUBTHiE92y3bOIwM3UN7Y1ys18qVJge8lXjezaEfsHmijQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/code-signing-certificates": "^0.0.7", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/devcert": "^1.2.2", + "@expo/env": "~2.5.2", + "@expo/image-utils": "^0.12.5", + "@expo/inline-modules": "^0.2.6", + "@expo/json-file": "^11.2.1", + "@expo/log-box": "^58.0.12", + "@expo/log-box-utils": "^58.0.2", + "@expo/metro": "~58.0.0", + "@expo/metro-config": "58.0.14", + "@expo/metro-file-map": "^58.0.5", + "@expo/osascript": "^2.8.1", + "@expo/package-manager": "^1.14.2", + "@expo/platforms": "^58.0.1", + "@expo/plist": "^0.10.1", + "@expo/prebuild-config": "^58.0.14", + "@expo/require-utils": "^58.0.4", + "@expo/router-server": "^58.0.14", + "@expo/schema-utils": "^58.0.2", "@expo/spawn-async": "^1.8.0", - "@expo/ws-tunnel": "^2.0.0", - "@expo/xcpretty": "^4.4.4", - "@react-native/dev-middleware": "0.86.3", + "@expo/ws-tunnel": "^2.0.1", + "@expo/xcpretty": "^4.4.6", + "@react-native/asset-utils": "0.88.0", + "@react-native/dev-middleware": "0.88.0", + "@react-native/js-polyfills": "0.88.0", + "2g": "^1.0.1", "accepts": "^1.3.8", "agent-cli-detector": "0.1.7", "arg": "^5.0.2", @@ -1371,15 +1377,14 @@ "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", - "debug": "^4.3.4", - "dnssd-advertise": "^1.1.4", - "expo-server": "^57.0.3", + "dnssd-advertise": "^1.1.6", + "expo-server": "^58.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.2", - "node-forge": "^1.3.3", + "node-forge": "^1.4.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", @@ -1388,7 +1393,7 @@ "prompts": "^2.3.2", "resolve-from": "^5.0.0", "sandbox-cli-detector": "^0.2.0", - "semver": "^7.6.0", + "semver": "^7.7.4", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", @@ -1400,7 +1405,7 @@ "zod": "^3.25.76" }, "bin": { - "expo-internal": "main.js" + "expo-internal": "bin/cli.js" }, "peerDependencies": { "expo": "*", @@ -1417,67 +1422,71 @@ } }, "node_modules/@expo/code-signing-certificates": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", - "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.7.tgz", + "integrity": "sha512-zP0tnfqrFFRL8INtOaQ6XwEYfdIpIH9vrEo7y0bHQGQa50z4/QWXE5CI4nRUHxqFW4MVWOwXFg1hom1aAZHNkQ==", "license": "MIT", "peer": true, "dependencies": { - "node-forge": "^1.3.3" + "node-forge": "^1.4.0" + }, + "engines": { + "node": ">=22.13.0" } }, "node_modules/@expo/config": { - "version": "57.0.9", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-57.0.9.tgz", - "integrity": "sha512-dmzlKraIFxa7wLwV6K7WzI8jp6QZpW6Mc5mGjLimJUFjzh4uQdYaT3m3plEutM5yxBoBEwqzks7l+I/ljCbxAQ==", + "version": "58.0.6", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.6.tgz", + "integrity": "sha512-PT1qv4s/R5A/NxXb4efGlFsYF5Consi7F8xSsJBAN090EGDr6U1EDQGOijFqzDc3JA2epD8zjKLJLOVB9YOewg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~57.0.9", - "@expo/config-types": "^57.0.2", - "@expo/json-file": "^11.0.1", - "@expo/require-utils": "^57.0.5", + "@expo/config-plugins": "~58.0.9", + "@expo/config-types": "^58.0.3", + "@expo/json-file": "^11.2.1", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-workspace-root": "^2.0.0", - "semver": "^7.6.0", + "semver": "^7.7.4", "slugify": "^1.3.4" } }, "node_modules/@expo/config-plugins": { - "version": "57.0.9", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-57.0.9.tgz", - "integrity": "sha512-hHgfL1avkCdEvDSw7IwlKwRYYNgcxzbNNMIk6W6lTkJpY0MajinAfeJUS0J+wPCsjUfGbVqOJM+XhPaO5ulUxg==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.9.tgz", + "integrity": "sha512-HyP7V1QgDxeHcOEh4qQH7cfK7cI7wNp0y9lszAu98SRYCshhDbwB9gWpFfnpX1GQUtgiqG4Hvgh1z3ntcGwAjw==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-types": "^57.0.2", - "@expo/json-file": "~11.0.1", - "@expo/plist": "^0.8.1", - "@expo/require-utils": "^57.0.5", - "@expo/sdk-runtime-versions": "^1.0.0", + "@expo/config-types": "^58.0.3", + "@expo/json-file": "~11.2.1", + "@expo/plist": "^0.10.1", + "@expo/require-utils": "^58.0.4", + "@expo/sdk-runtime-versions": "^1.0.1", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", - "semver": "^7.5.4", + "semver": "^7.7.4", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "node_modules/@expo/config-types": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-57.0.2.tgz", - "integrity": "sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==", + "version": "58.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-58.0.3.tgz", + "integrity": "sha512-wyfrwkTT/hQHzwyqkXkngKxoOa8L6ovsTP4h/UukS1mTmssee5et6HOPoN5RtawdJPnm5JO28f//C/wXlpka8Q==", "license": "MIT", "peer": true }, "node_modules/@expo/devcert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz", - "integrity": "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.2.tgz", + "integrity": "sha512-wz1YedXwdNbYqk/PRr34vixnuw1+l6uSwmPXUj649cot5iYNccb2zIOnK7Nonb1Pfd/dxAY6CvU6KM3uSdxC7A==", "license": "MIT", "peer": true, "dependencies": { @@ -1496,19 +1505,23 @@ } }, "node_modules/@expo/devtools": { - "version": "57.0.1", - "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-57.0.1.tgz", - "integrity": "sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-58.0.2.tgz", + "integrity": "sha512-WBj/K+vv8JPSmY70ennL04YYOHkpEsGGkfuVY9lfv4XO7Qhbt5qz4q6W7maME194I5oGcimRMigUFfWNkBe90w==", "license": "MIT", "peer": true, "dependencies": { "chalk": "^4.1.2" }, "peerDependencies": { + "expo": "*", "react": "*", "react-native": "*" }, "peerDependenciesMeta": { + "expo": { + "optional": true + }, "react": { "optional": true }, @@ -1518,9 +1531,9 @@ } }, "node_modules/@expo/dom-webview": { - "version": "57.0.1", - "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-57.0.1.tgz", - "integrity": "sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-58.0.2.tgz", + "integrity": "sha512-bLkREoP7qL3rEuzxP60xG+TjdPoGjbnZfxkvYo5imJxGWfKMOf7x962W06Pu+WWAr4gcDRk16iA+Clg8D0zjCg==", "license": "MIT", "peer": true, "peerDependencies": { @@ -1530,9 +1543,9 @@ } }, "node_modules/@expo/env": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.4.3.tgz", - "integrity": "sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.2.tgz", + "integrity": "sha512-z8kCvBVJpd2S20a+Ab1otQgz8sJLeR7CXDTsuAMcNbYFsK10Fdhfb7rx9Ys1vvlbijnY55eZhQvJACajc1IjBQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1544,21 +1557,14 @@ "node": ">=20.12.0" } }, - "node_modules/@expo/expo-modules-macros-plugin": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@expo/expo-modules-macros-plugin/-/expo-modules-macros-plugin-0.6.1.tgz", - "integrity": "sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==", - "license": "MIT", - "peer": true - }, "node_modules/@expo/fingerprint": { - "version": "0.20.13", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.20.13.tgz", - "integrity": "sha512-h1x+w+JpNRu88a/5SMZRzJs9YDGR/f7R8ApCr7OdenhqmJ00hFxQMzvxajDLL+1P2Y2g/ND0xksusqvBqWSW5Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.5.tgz", + "integrity": "sha512-4ngc+aPgMK56sYc47tfabmoaNdP7OvPBOH7QPgN3riSYM0Ev+KwsGRDius5jBBwjCI9ADp7IpjJEK9xlRYjjvA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "^2.4.3", + "@expo/env": "^2.5.2", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -1568,42 +1574,42 @@ "ignore": "^5.3.1", "minimatch": "^10.2.2", "resolve-from": "^5.0.0", - "semver": "^7.6.0" + "semver": "^7.7.4" }, "bin": { "fingerprint": "bin/cli.js" } }, "node_modules/@expo/image-utils": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.11.5.tgz", - "integrity": "sha512-KPQBTpmpAfy/Vu9y4wPW808/qtZxjYmyJg8cm2QCPAupp+qEWA3b5zmk0ulOwQ9OgeHxuCPgUqWgkwHFo7UsrQ==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.12.5.tgz", + "integrity": "sha512-nsFYd7GfDdwZa+S+p+EkVCkh7UKKNf0kfUXDQ53HbyMmNFD3psb5JYwU/2N+uZG5wOEfKGfQ5u7pk/wn2gMlBA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/require-utils": "^57.0.5", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", - "semver": "^7.6.0" + "semver": "^7.7.4" } }, "node_modules/@expo/inline-modules": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.1.7.tgz", - "integrity": "sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.6.tgz", + "integrity": "sha512-S8PK3wx6ogwunoQ7pqdPbklQGtXloeWTAOzWJ9yIL7xHFxvnI/Ryj0phA3KEGCMlaKZjaCP1h/3s7n/ueErRgQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~57.0.9" + "@expo/config-plugins": "~58.0.9" } }, "node_modules/@expo/json-file": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.0.1.tgz", - "integrity": "sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.2.1.tgz", + "integrity": "sha512-UPhKoFCj8BcwgLB1rKQ1CuR/REITnZLiqxHEHOeH1tPsdXcHGtUDh0P5bLbr7oU0nKVdtJ5rzyKx8jniMQdESQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1612,76 +1618,93 @@ } }, "node_modules/@expo/local-build-cache-provider": { - "version": "57.0.8", - "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-57.0.8.tgz", - "integrity": "sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==", + "version": "58.0.6", + "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.6.tgz", + "integrity": "sha512-AJk3pslFNlwRMbUbfvxhu6CPA9U7A+JPb88VS/uWkG/S/QMJL90Iw4sPVfG4BOKfRUNkB8ipl432Dr4txjSMKw==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~57.0.9", + "@expo/config": "~58.0.6", "chalk": "^4.1.2" } }, "node_modules/@expo/log-box": { - "version": "57.0.4", - "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-57.0.4.tgz", - "integrity": "sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==", + "version": "58.0.12", + "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.12.tgz", + "integrity": "sha512-IzDYoFY2iUsmSDvl1V7YUM7UkCPDyMVS4e4a38c2LnFc1A3WGMUiQh+vsHLYTPKjIelu4r7/u4V7Gxtfa0oJgA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/dom-webview": "^57.0.1", + "@expo/dom-webview": "^58.0.2", + "@expo/log-box-utils": "^58.0.2", "anser": "^1.4.9", "stacktrace-parser": "^0.1.10" }, "peerDependencies": { - "@expo/dom-webview": "^57.0.1", + "@expo/dom-webview": "^58.0.2", "expo": "*", "react": "*", "react-native": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } } }, + "node_modules/@expo/log-box-utils": { + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/log-box-utils/-/log-box-utils-58.0.2.tgz", + "integrity": "sha512-My8Lwe9FU/yDwwzqwi5LN2rzzDcJqIAZKrD9f0XHZEKz/FQnWJYdt1rsV7+RwqMGeGq2XsxTCVT1ggTCOvumxw==", + "license": "MIT", + "peer": true + }, "node_modules/@expo/metro": { - "version": "56.0.2", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-56.0.2.tgz", - "integrity": "sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==", + "version": "58.0.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-58.0.0.tgz", + "integrity": "sha512-PMD640ihB0C3Oqm0AnDVJ/8qF2cKbRUEqGuSOr4tM/OTb9ktxsQqsiSSSeaOEgdCZBq20AxRS0d6WHNhhH2P+g==", "license": "MIT", "peer": true, "dependencies": { - "metro": "0.84.5", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-config": "0.84.5", - "metro-core": "0.84.5", - "metro-file-map": "0.84.5", - "metro-minify-terser": "0.84.5", - "metro-resolver": "0.84.5", - "metro-runtime": "0.84.5", - "metro-source-map": "0.84.5", - "metro-symbolicate": "0.84.5", - "metro-transform-plugins": "0.84.5", - "metro-transform-worker": "0.84.5" + "metro": "0.87.1", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-config": "0.87.1", + "metro-core": "0.87.1", + "metro-file-map": "0.87.1", + "metro-minify-terser": "0.87.1", + "metro-resolver": "0.87.1", + "metro-runtime": "0.87.1", + "metro-source-map": "0.87.1", + "metro-symbolicate": "0.87.1", + "metro-transform-plugins": "0.87.1", + "metro-transform-worker": "0.87.1" } }, "node_modules/@expo/metro-config": { - "version": "57.0.12", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-57.0.12.tgz", - "integrity": "sha512-S62Lrq35HZqBFD55423pmWb8PjaiR/W02zQC1uECBmw1vTN8WZaFz4TJ0i21EeJzwfebMb9MLxL8JZ102Z6VbA==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.14.tgz", + "integrity": "sha512-UDUMAJwYGEzaB26ejMLG/IOVzwKDbHzoODBf3FZeRS94kk9jDf1dWE1VMX6bLBLoiflxXwqrMWiH0Fvz3gZ9YQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~57.0.9", - "@expo/env": "~2.4.3", - "@expo/json-file": "~11.0.1", - "@expo/metro": "~56.0.2", - "@expo/require-utils": "^57.0.5", + "@expo/config": "~58.0.6", + "@expo/env": "~2.5.2", + "@expo/json-file": "~11.2.1", + "@expo/metro": "~58.0.0", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "@jridgewell/gen-mapping": "^0.3.13", "@jridgewell/remapping": "^2.3.5", "@jridgewell/sourcemap-codec": "^1.5.5", + "@jridgewell/trace-mapping": "^0.3.31", + "@react-native/js-polyfills": "0.88.0", + "2g": "^1.0.1", "browserslist": "^4.25.0", "chalk": "^4.1.0", "debug": "^4.3.2", @@ -1690,8 +1713,9 @@ "hermes-parser": "^0.36.0", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", + "noxcturnal": "^0.1.0", "picomatch": "^4.0.4", - "postcss": "^8.5.14", + "postcss": "^8.5.23", "resolve-from": "^5.0.0" }, "peerDependencies": { @@ -1704,24 +1728,52 @@ } }, "node_modules/@expo/metro-file-map": { - "version": "57.0.3", - "resolved": "https://registry.npmjs.org/@expo/metro-file-map/-/metro-file-map-57.0.3.tgz", - "integrity": "sha512-1OXy+uPYY5uc7Tm4VBsd2NRn+3wHhqeqNuEO/Xo4kmYgv8FjYgUAc+bUXON9FpC2ikcLn4EVlGM9ce2exx9Mlg==", + "version": "58.0.5", + "resolved": "https://registry.npmjs.org/@expo/metro-file-map/-/metro-file-map-58.0.5.tgz", + "integrity": "sha512-Y2w8qKklLffZie28In4WF6f6e8nIJOhU0mZ5UaQdCiITVQm2a5teNdIDudEPkBsh8ItlvyHZt9n42PN2onRbkQ==", "license": "MIT", "peer": true, "dependencies": { + "2g": "^1.0.1", "debug": "^4.3.4", "fb-watchman": "^2.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", "walker": "^1.0.8" } }, + "node_modules/@expo/modules-macros-win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.20.0.tgz", + "integrity": "sha512-7B57gc7+TeygPcK8fLYlEhJbbvaPh+JBzex11YIYZrSzbFhz7Q+Z37fSdAfp4EsfCswJNcX0S6wpkgSlVNefVw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@expo/modules-macros-win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.20.0.tgz", + "integrity": "sha512-BM5a2U2tCyHzmtiSEY70KPsts82Mfy1bHSZ7AUbg6z9LcnxuThxJlcH85/SV5eFbhrPfgDBAG/WAncyZCvKvyA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, "node_modules/@expo/osascript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.7.1.tgz", - "integrity": "sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.8.1.tgz", + "integrity": "sha512-SCi+6q6uOkGhiAn6AIP/OPFgaIq/iKD2oYpnAOg2rShHStJ8ey7wyT127RbOaZXmlcY/62rHOX1WiiMnD8u/BA==", "license": "MIT", "peer": true, "dependencies": { @@ -1732,13 +1784,13 @@ } }, "node_modules/@expo/package-manager": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.13.1.tgz", - "integrity": "sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.14.2.tgz", + "integrity": "sha512-sftl0eRVVCarI6grMdjAB3jX2pX1Mt3cdSnajlXS4QyeDkaKRM/ntBy6dcagj1VL0+cEfEqctlyvinmlZdNubg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/json-file": "^11.0.1", + "@expo/json-file": "^11.2.1", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", @@ -1746,10 +1798,17 @@ "resolve-workspace-root": "^2.0.0" } }, + "node_modules/@expo/platforms": { + "version": "58.0.1", + "resolved": "https://registry.npmjs.org/@expo/platforms/-/platforms-58.0.1.tgz", + "integrity": "sha512-KtLrtAvpShq16l9lTxd2fZSjULxcGxXrJTHA31iUVqrc+Af7aTAJW4ZB3yQBgi/w+kSb6BB/CG9RXI0ohbMm6g==", + "license": "MIT", + "peer": true + }, "node_modules/@expo/plist": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.8.1.tgz", - "integrity": "sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.10.1.tgz", + "integrity": "sha512-nuNOqj+r/hGJbZ1Ax3jUpZaOB8UAMHUrISALJEUKaCieTflYj7224EqFWmMpriCGk9wXS1gH+9GGVnSj0tWzuQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1759,28 +1818,28 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "57.0.16", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-57.0.16.tgz", - "integrity": "sha512-QA8oMZ7y70kjOzw+abhRl9uYC8Nu/abeUTHr0YVxb3pgIC14gc7w543bYtI+5gEDI3q55jKUViIauC76QvZN1w==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.14.tgz", + "integrity": "sha512-2wVzVDfXjRB3LzUbW5shOM/A+6eUUCfR+2bpZiWRBBZBtZP2HA5Zq1YgCio1tDqMGAHf2NQQDhvy/Rz1U6aC3A==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/config-types": "^57.0.2", - "@expo/image-utils": "^0.11.5", - "@expo/json-file": "^11.0.1", - "@react-native/normalize-colors": "0.86.3", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/config-types": "^58.0.3", + "@expo/image-utils": "^0.12.5", + "@expo/json-file": "^11.2.1", + "@react-native/normalize-colors": "0.88.0", "debug": "^4.3.1", - "expo-modules-autolinking": "~57.0.13", + "expo-modules-autolinking": "~58.0.13", "resolve-from": "^5.0.0", - "semver": "^7.6.0" + "semver": "^7.7.4" } }, "node_modules/@expo/require-utils": { - "version": "57.0.5", - "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-57.0.5.tgz", - "integrity": "sha512-kTAXj9lDFEIPMsbAOGCGbjBbMF0oi7CqkYM79KOX0DDD9wSwXmlKL1z2h8OwsrBf7mbOo2DjlRvZu4BEjrIxGw==", + "version": "58.0.4", + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-58.0.4.tgz", + "integrity": "sha512-DvjS5NCitXYcad2Woe1EMHJKcbhTbE77HX0BgOQGL2LFHE3q2H0n8kCWDPBOCVJ63Drap3c35nwoJwF5TQL7Tw==", "license": "MIT", "peer": true, "dependencies": { @@ -1798,24 +1857,24 @@ } }, "node_modules/@expo/router-server": { - "version": "57.0.11", - "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-57.0.11.tgz", - "integrity": "sha512-0QxbqEkceb1WDeu5VqNdnTPVHlm3U183F7Y1t5LMohmGRAkHVL0PB4tCHBvEqKpLzOzHVObw3reGkJ1tX48h8Q==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.14.tgz", + "integrity": "sha512-RSzQYMA+Tv2eTemhjhzpx8+hL+pMC30JTVqAWrk5AZwht+OgaKZar/gHmj4iJf7n3rq+GG6KujrkKF9xAXLz2w==", "license": "MIT", "peer": true, "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { - "@expo/metro-runtime": "^57.0.16", + "@expo/metro-runtime": "^58.0.14", "expo": "*", - "expo-constants": "^57.0.19", - "expo-font": "^57.0.4", + "expo-constants": "^58.0.12", + "expo-font": "^58.0.8", "expo-router": "*", - "expo-server": "^57.0.3", + "expo-server": "^58.0.5", "react": "*", "react-dom": "*", - "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" + "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1 || ~19.3.0" }, "peerDependenciesMeta": { "@expo/metro-runtime": { @@ -1833,16 +1892,16 @@ } }, "node_modules/@expo/schema-utils": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-57.0.2.tgz", - "integrity": "sha512-fMu/jyN0l1Wzv7XkeWR4IYCx1M8ryui3FdBNGrWwbRgJ7EhxXxK8E2jxP2W3pbgUwUY0V3hG8+GyfCZwny+Lxw==", + "version": "58.0.2", + "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-58.0.2.tgz", + "integrity": "sha512-w28y8SG+5ZTdDdmH2ZnCQk9wHVwGzI9NqX5V4urJUFEnxbm7I129fJRkb8RIAJmMA1WKU5h3ONmranV473uaXQ==", "license": "MIT", "peer": true }, "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.1.tgz", + "integrity": "sha512-kvisefkhxu8Fm/4M8G6DEqUaigrXfrSOm2lFw7hsk/nq0zchcp6B4wSk8rlheHY8FRi5iHxKtoVMGY/3M6h04A==", "license": "MIT", "peer": true }, @@ -1867,9 +1926,9 @@ "peer": true }, "node_modules/@expo/ws-tunnel": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.0.tgz", - "integrity": "sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.1.tgz", + "integrity": "sha512-mljsRffbOHzmSimYQbQu9h9NR3alwCCwEEouRGFL4QRTt8dNvsNtKEPa/5jHmtDLDtsh4xXsWKwzjN9BTpeXHQ==", "license": "MIT", "peer": true, "peerDependencies": { @@ -1877,10 +1936,10 @@ } }, "node_modules/@expo/xcpretty": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.5.tgz", - "integrity": "sha512-J3eL4n4h5QTwfD0SIz8OIk6/+sOL/hFZAMacgCM07UNlxBQfJipEpIC2AQxvGkbYeStByJ0TVhQAJo+DeNgaSQ==", - "license": "BSD-3-Clause", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.7.tgz", + "integrity": "sha512-EbxYllZ7/ozONVZd425cm4XnolfW+AmSFT5aP7Jdno6oc3WrYQcHz2CO20z/2rwWwYgztmV2PXvYH+BQ8YFjqg==", + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", @@ -2103,501 +2162,265 @@ "node": "^22.20 || ^24.12 || >=25" } }, - "node_modules/@react-native/asset-utils": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/asset-utils/-/asset-utils-0.87.1.tgz", - "integrity": "sha512-FeFnbn9ENPs7IVBzZt1bBWfiRGvT4q+CsWwXGFyKVW/1ol3ylBRuTtXBGHIAmcNN4fUR60nSXsCN19pzNHkPgA==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.86.3.tgz", - "integrity": "sha512-O6Xza4JBGPIU8J7YbKTyBoYL4thpy8jMW/oaLDWdAyOwYHKIjK47pAL5HUEbOe2bWz2PEKjbYRF2ApkJv1ottQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@react-native/codegen": "0.86.3" - }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.86.3.tgz", - "integrity": "sha512-Ux4jHi0fh+bdtVEcL0gaPLbY56V+SvFUDl/8sRAE1jdb4k+o7fT/4Nc29yz4X+qfjstkSqObQTMBGhdzxH9JvA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.29.0", - "hermes-parser": "0.36.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "tinyglobby": "^0.2.15", - "yargs": "^17.6.2" - }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen/node_modules/hermes-estree": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.36.0.tgz", - "integrity": "sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==", - "license": "MIT", - "peer": true - }, - "node_modules/@react-native/codegen/node_modules/hermes-parser": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.36.0.tgz", - "integrity": "sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w==", - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-estree": "0.36.0" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.87.1.tgz", - "integrity": "sha512-aGBae6v+ngy8fIpU1EOaVxn/8DOgmJNphEdn5Eb0wTchUCxr8bDjpTJYNdrptyn3qI/elk8r9agQ2OBaFvrRlw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@react-native/asset-utils": "0.87.1", - "@react-native/dev-middleware": "0.87.1", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.87.0", - "semver": "^7.1.3" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - }, - "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "0.87.1" - }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - }, - "@react-native/metro-config": { - "optional": true - } - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.87.1.tgz", - "integrity": "sha512-RNm7soJB+8YSauLnsCCylA1eVfT6JWaDTPUEF01uu9YwDyZ7remKlZbXtmVbtscbNGcp+hbI4iZUdVOpQWsHuA==", - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-shell": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.87.1.tgz", - "integrity": "sha512-eNbKjcnseJIjy5XCDwyhKOT1ngOg3Dv1fVxTDtnVFqdqjqsbfY4v9JuJG1RZJ7+mFoRRe05HE8GSQU8B7n5xwQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.6", - "debug": "^4.4.0", - "fb-dotslash": "0.5.8" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.87.1.tgz", - "integrity": "sha512-KgvAGUaVl6/XrWFAPK8e0ojDRbsdBjr4bnwyn6PC3CwxPQc5iv+i7hMoUwYS8ORSkHKfjt+cV86/mBQ4lG8yfA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.87.1", - "@react-native/debugger-shell": "0.87.1", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.3.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^7.5.10" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "peer": true, - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.87.1.tgz", - "integrity": "sha512-1oyLU9elM7hPAsKIqKooEekwxiuWr27+MZBhUROPhzcbXhMDxK64GPF/hCXwBZVp1F89ODavCrBmJtLx9WtBoQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "accepts": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "flow-parser": "0.331.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.87.1", - "metro-cache": "0.87.1", - "metro-cache-key": "0.87.1", - "metro-config": "0.87.1", - "metro-core": "0.87.1", - "metro-file-map": "0.87.1", - "metro-resolver": "0.87.1", - "metro-runtime": "0.87.1", - "metro-source-map": "0.87.1", - "metro-symbolicate": "0.87.1", - "metro-transform-plugins": "0.87.1", - "metro-transform-worker": "0.87.1", - "mime-types": "^3.0.1", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-babel-transformer": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.87.1.tgz", - "integrity": "sha512-orvRIGpb0yK1yMbk5YP3dhVKjmoxUkRB9fdltGJxNppEqus/1tFpNuf9KnGFR3Qjg0izoUrJ4z6WgoBvdkXPrA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "flow-parser": "0.331.0", - "metro-cache-key": "0.87.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.87.1.tgz", - "integrity": "sha512-juNPaj0Xi5tkLp8imXqvbSnEIijwKG36m7OiFFVJMqEkiURwAjkMFVek3/xpix1+LVQqO7kjVp3PvuvIM61mKQ==", + "node_modules/@noxcturnal/noxcturnal-darwin-arm64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.5.tgz", + "integrity": "sha512-hQgDaWxKYln83Uk1Hh4Liju9AvGoYh4aLd4A1ou3lGn5hxzhW2uO+z3mERtWk6BMGVazvi/yUXtp9x3IlaWyhA==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "peer": true, - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache-key": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.87.1.tgz", - "integrity": "sha512-scqVVPMA2c+RVO12I3wyMDp5xCkRPLsyrcG4Qc3xfU5JR0EW/0sz2tjty+5UjMUtG09uiM1KYQ8HjWg7OQXHtw==", + "node_modules/@noxcturnal/noxcturnal-darwin-x64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.5.tgz", + "integrity": "sha512-I57zR8QF7Xam+4nGD5UoIODsw0VjkVyn51iDBL3CMaDR5Lh1OxXwKZMYKtv3CtQl+RSDsMfmXBEqGYLE8lIPHg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-config": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.87.1.tgz", - "integrity": "sha512-NmkDlc/qZAdo5gTkVTuO2AKE/khemRKRH5IA+SKfqUBJigI5GqZ5TOXhmEokhlkAqzjt8dyzKhzI6FHvXoXaTQ==", + "node_modules/@noxcturnal/noxcturnal-linux-arm64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.5.tgz", + "integrity": "sha512-gVH4XJPh8RdrdjjlU0dKeielQt/FXfvqhr8IEWEf3VeNtQs8l2rPzFPdqS0uwLWQYHLBGgB0LkuOil1KKYx1gQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "connect": "^3.6.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.87.1", - "metro-cache": "0.87.1", - "metro-core": "0.87.1", - "metro-runtime": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-core": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.87.1.tgz", - "integrity": "sha512-xizzky/4+c/Mkznege8OW05j7bSdM39VPoEps61Se4+hf32UQujmbvLvIE9+UnP6kNEPVomk0Fw8NsBK9iRQmw==", + "node_modules/@noxcturnal/noxcturnal-linux-arm64-musl": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.5.tgz", + "integrity": "sha512-rzQ075fcHZ+ebsELussRjnW8WBMy1RuLdS8wSqBGhdVlPR7/NaSyoWkNxnVDT8sEO26xjqGoW/o/08ghBzr/zA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.87.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-file-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.87.1.tgz", - "integrity": "sha512-9sPuNCojC3pS4vj+ZPY7FXmHGpdJeckXuKXQrDAfJvZc60AF8owRFTkI8XdwlwrmPIB2w++KraK9FMEXvC4wJw==", + "node_modules/@noxcturnal/noxcturnal-linux-x64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.5.tgz", + "integrity": "sha512-X5O0lXMrv8HGOGoXDB1PG0Hjt7Rl+MJA+seR2NecQvUAAw2gzDvF/unCV5sqTAVeHfXhBHEFGkLenHZSD44efg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-minify-terser": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.87.1.tgz", - "integrity": "sha512-YK4k1oO1wV48hfE+Nbw2rJCnAgeabzrgT/xH5ha5n9gbK4p3HYFC898cERUiyTl9vRh58CNTiXRc88f7y6PfKg==", + "node_modules/@noxcturnal/noxcturnal-linux-x64-musl": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.5.tgz", + "integrity": "sha512-fkQIQHRxqldNXVmjxfeCvGOiLhLU9SLBw1As02pMA2xjyiZfiXcUn4SUrZ92ciGnyCS8/XMbx+nZSxgEc3qDPw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-resolver": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.87.1.tgz", - "integrity": "sha512-FXH/brY69wT6sPxaSW8BhMmDGD/6irmBr/cL4rUi+VWwqR3pbvdcfUOfyjcHucgQ7pe5IW3xJY21eHKLVKNumQ==", + "node_modules/@noxcturnal/noxcturnal-win32-arm64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.5.tgz", + "integrity": "sha512-baeH5m/vM1nf0J2UkW8cfgiVogpM0gRO9b4PZWknXQPbv5+k+0N5sGOYl/UAO2q72qYb3Xbiu7eD8c4A2kR2SA==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-runtime": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", - "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", + "node_modules/@noxcturnal/noxcturnal-win32-x64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.5.tgz", + "integrity": "sha512-2faDMzom8pCG/s/uR4Czh1atz4KohI85AaSmA2vtAuVnCq+nLL4Viys3A5vUlNz9MNBmTNFxzXyF2Z5HtfxXLg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "peer": true, - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-source-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", - "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", + "node_modules/@oxc-project/types": { + "version": "0.154.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.154.0.tgz", + "integrity": "sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==", "license": "MIT", "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.87.1", - "nullthrows": "^1.1.1", - "ob1": "0.87.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "funding": { + "url": "https://github.com/sponsors/oxc-project" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-symbolicate": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", - "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", + "node_modules/@react-native/asset-utils": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/asset-utils/-/asset-utils-0.88.0.tgz", + "integrity": "sha512-Bj1DxQt5f4OrjdlgSVkZT37Z3hx5hUIN5AUDSqL/e99vgtTcqj5vnm067epZL1EF/QiqsniZO8Q1GSkItOakDg==", "license": "MIT", "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.87.1", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-plugins": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.87.1.tgz", - "integrity": "sha512-qMiJ/x+VfqumFJJSefKS6nj8uojzC29b2/aK8vlMuFABIqGjDucICEOXd2Yt6k/XMFAgAcaJvShUOT0HLyYaPw==", + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.88.0.tgz", + "integrity": "sha512-leGEnCcS7Q0hTxvzvhNtr8zGQpI1gfWqXjzC4UedsFmNMv6kIo4s70o0XbtM30ZXbpfWe4BcSC8NKWuak5sI4A==", "license": "MIT", "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" + "@react-native/codegen": "0.88.0" }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-worker": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.87.1.tgz", - "integrity": "sha512-VOzs3OV405FuOLYdAhqA2wsn1F9lvueDVxMDLvCKaQ44U+yknIqphJ9eMjjsGwLDZiJq9sW3DMLhjD27JxQgqQ==", + "node_modules/@react-native/codegen": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.88.0.tgz", + "integrity": "sha512-SAGg+XfzsrPiYTscbKa9bo2/H2ei2TjyxW8RTMq2Ps661kRK3AnmpMGVfrEFshEMr3FGEbuQIvj86X98kaXlRA==", "license": "MIT", "peer": true, "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "metro": "0.87.1", - "metro-babel-transformer": "0.87.1", - "metro-cache": "0.87.1", - "metro-cache-key": "0.87.1", - "metro-minify-terser": "0.87.1", - "metro-source-map": "0.87.1", - "metro-transform-plugins": "0.87.1", - "nullthrows": "^1.1.1" + "flow-parser": "0.327.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", + "yargs": "^17.6.2" }, "engines": { "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", - "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "node_modules/@react-native/community-cli-plugin": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.88.0.tgz", + "integrity": "sha512-WrQdXbjVt1gwAay8ZzYtpOi9ly99ksJ0VMYFdVcMe6nq3vtiRgqKRpHgCdN6ySIbtr5o+aJ+Vr7OTDY98ec/Ow==", "license": "MIT", "peer": true, "dependencies": { - "content-type": "^2.1.0" + "@react-native/asset-utils": "0.88.0", + "@react-native/dev-middleware": "0.88.0", + "commander": "^12.0.0", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.87.1", + "semver": "^7.1.3" }, "engines": { - "node": ">=18" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "0.88.0" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ob1": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", - "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", + "node_modules/@react-native/community-cli-plugin/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + "node": ">=18" } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.86.3.tgz", - "integrity": "sha512-TQmeofQ0PcuylhhlleOeuzHYZfbrgm3gayXzowqUEzgRisTm1D40/J3ggqs7XkQi5HP5ZA3n8dHmKL9vIzPcsw==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.88.0.tgz", + "integrity": "sha512-v5cnBaaWhDRPcQv8EC20zj53jOAKH7u2wnzzXS4JTNu+diPC+cA2+kC7rq3eKI5vGhlAcG2kDPoViRuC0AY0oA==", "license": "BSD-3-Clause", "peer": true, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/debugger-shell": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.86.3.tgz", - "integrity": "sha512-O4ds+J7xZfxkbih9T+cAGegBdvKSPKYJm/lDgC9CpEjFMkmzWTpVLU3Qsv9sqZuo58z+sGhIcJfPsCFFWHpqbQ==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.88.0.tgz", + "integrity": "sha512-p82zT8ZKNx7nIm/8zf8pi55sxm5KQBm8td47kzoJysTdqHLyPsRMUvDXtvCJIWadHSv7RJ6t/yiCc+IoImLBtw==", "license": "MIT", "peer": true, "dependencies": { @@ -2606,37 +2429,45 @@ "fb-dotslash": "0.5.8" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.86.3.tgz", - "integrity": "sha512-LiEPTqTg/63bYUnrPyHLfjTDCNhA/+CUqI1+DsA9tYyewtSbULd5awsva6SgE10I+2iMhgKXS3ymkhU/kSCrGA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.88.0.tgz", + "integrity": "sha512-sHLxVHOwfkF672ZzMepNh4d3IKbrZy3qXDKWSwN5LC5VJkzzZ5FdmSPP4N/CCn2pcKJ4oSqvojXwN4De3Xk92A==", "license": "MIT", "peer": true, "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.86.3", - "@react-native/debugger-shell": "0.86.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.3.0", + "@react-native/debugger-frontend": "0.88.0", + "@react-native/debugger-shell": "0.88.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", - "open": "^7.0.3", + "open": "^8.4.2", "serve-static": "^1.16.2", "ws": "^7.5.10" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.87.1.tgz", - "integrity": "sha512-bZ5X2BNxaSlfp2KlDtUM910QqW9G1yTIeZXghuv4ag8SAQLzm5Mf9j5GjJfT6ax2Qo2aRT15Vi3Tro/yLGJstA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.88.0.tgz", + "integrity": "sha512-4jPSKslOfJj8NKY/jv9qmWkxZYmqPyamoS3Vs0JOFxw9t4PM6L/ea0fUsjNV0LxC9zJlvWilPJOCTOf7h8wlyw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.88.0.tgz", + "integrity": "sha512-Iq6v4+EWdOLv0M1+BpADQJBVfInl6FkABXCIBSi0FbvHahEYT+Y4UJ7Cm96p18gbEN1VKzqz3nbBbwLA6bx0rQ==", "license": "MIT", "peer": true, "engines": { @@ -2644,16 +2475,16 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.86.3", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.86.3.tgz", - "integrity": "sha512-Cv3CDkprb67GrzuaS9BGbBJC/6G4lIw3nyKOHRKTqTTum4bn37y5+R0Z04L8mcbQN85eEohNrRwb7IOM4j6uvg==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.88.0.tgz", + "integrity": "sha512-eZCu3tGAQCfvMCPQJVY4dmoMX8ZZYBvqIGHX7lwOYyzNK+Dl8e5ky7ZoXub1Rq75oSrQXNNmSP2CDjNNXXZpFQ==", "license": "MIT", "peer": true }, "node_modules/@react-native/virtualized-lists": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.87.1.tgz", - "integrity": "sha512-qSZjeX3UJrDvyfjf7yc3E68rp1XnzE+5nu8ImklhkVC0+p/XiaHPb/KGkRqDdnQyWHN55BRYSsCMEwgVI6WRNQ==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.88.0.tgz", + "integrity": "sha512-zpZIOAbobdS93edwHkNUdGDzvElNeQJqukRERRPns3/ucPvuMd2G4fYpmVJSVjhxtGCcLLB1PFndLYYfwaYoBQ==", "license": "MIT", "peer": true, "dependencies": { @@ -2666,7 +2497,7 @@ "peerDependencies": { "@types/react": "^19.2.0", "react": "*", - "react-native": "0.87.1" + "react-native": "0.88.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3249,9 +3080,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.10.tgz", - "integrity": "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz", + "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==", "dev": true, "license": "MIT", "engines": { @@ -3466,6 +3297,24 @@ "node": ">=14.6" } }, + "node_modules/2g": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/2g/-/2g-1.0.1.tgz", + "integrity": "sha512-+uViadKOS/wwR4pFu5g8TPn3QHpKqoX19JHCnp8k/3cLpImdcXozwvZA6Q/5PeW3AcU8neL8faaMidBcv7o8CA==", + "license": "MIT", + "peer": true, + "bin": { + "2g": "bin/cli.js" + }, + "peerDependencies": { + "typescript": ">=5.8.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -3493,9 +3342,9 @@ } }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3700,9 +3549,9 @@ } }, "node_modules/babel-plugin-react-native-web": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.3.tgz", - "integrity": "sha512-e4fG8NbyRvk5GwU/7G2U9WxzPYtpC4IQN28AyRDzKE0kvywgohq8vT2x0/xBfg8a0RfSkXLlHAtUAGlSy3VhAw==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.4.tgz", + "integrity": "sha512-FSclsDTGi5EcvpbW3TM7s8GLWwQqo5wI9zQqJr2m0IoJRenSkp1+bVvdeZXTNznI5Ms9Bry7DLBR+C5Shb9gtw==", "license": "MIT", "peer": true }, @@ -3727,9 +3576,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "57.0.13", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-57.0.13.tgz", - "integrity": "sha512-OOl3lqNQ4IagJfsNgtxuna0wpTWt1BswdyktGTOJ5EJCgdQUk/B2vaj/jsl03+kMyuIvpxKioVtbTzxh3mdvvQ==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.17.tgz", + "integrity": "sha512-Rrqc/Z5Idc4bG2/PrEh725t3kvuAc7jUKCJ+wZVU9KXk2bKSdqAniXxQa8aph9aHdv4h5sGKLpMXMaMNz/4+Og==", "license": "MIT", "peer": true, "dependencies": { @@ -3769,9 +3618,9 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-plugin-codegen": "0.86.3", + "@react-native/babel-plugin-codegen": "0.88.0", "babel-plugin-react-compiler": "^1.0.0", - "babel-plugin-react-native-web": "~0.21.0", + "babel-plugin-react-native-web": "~0.21.4", "babel-plugin-syntax-hermes-parser": "^0.36.0", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4" @@ -3779,7 +3628,7 @@ "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", - "expo-widgets": "^57.0.21", + "expo-widgets": "^58.0.20", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { @@ -3824,9 +3673,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.26", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.26.tgz", - "integrity": "sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==", + "version": "2.11.29", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.29.tgz", + "integrity": "sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==", "license": "Apache-2.0", "peer": true, "bin": { @@ -3962,10 +3811,10 @@ } }, "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.2.tgz", + "integrity": "sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw==", + "license": "MIT", "peer": true, "dependencies": { "node-int64": "^0.4.0" @@ -4039,9 +3888,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001814", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", - "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", + "version": "1.0.30001816", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz", + "integrity": "sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==", "funding": [ { "type": "opencollective", @@ -4076,39 +3925,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.3.0.tgz", - "integrity": "sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4" - } - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4460,6 +4276,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4506,9 +4332,9 @@ "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.442", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.442.tgz", - "integrity": "sha512-najZYZ3+ZpjN1z3VOsrBiv5ej18vQgfV2lvEmxWzfmKrk4bdm3Owseyud4yGU6DfFn9pyunoAHDDyM4KmP78Ew==", + "version": "1.5.459", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.459.tgz", + "integrity": "sha512-4SC9HHSFjO/liAhifpdOL5hG9b4BP7/5G3y3UPZVO8trlAXr1CaUEEJL0gWK3kOcYcZrOA5rkwG45Gra/lTIgg==", "license": "ISC", "peer": true }, @@ -4569,6 +4395,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4768,41 +4595,45 @@ } }, "node_modules/expo": { - "version": "57.0.26", - "resolved": "https://registry.npmjs.org/expo/-/expo-57.0.26.tgz", - "integrity": "sha512-U1rsFwcuZNnU61Z/YLnnVC/ZqP0wpxh/rCKUMff3ot/rhLpxFY1zxEqu4vyaexyvBAB1mwpl9lA/ltcHBoQGyg==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.14.tgz", + "integrity": "sha512-M05O++KRgG4NA6kQ9AP60kbN8xqHJ6S8uTXdtkeiwcGVIYzdu2kaUXJyraVturvePO/Mf4PWa0C9+JggrHITwA==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "^57.0.27", - "@expo/config": "~57.0.9", - "@expo/config-plugins": "~57.0.9", - "@expo/devtools": "~57.0.1", - "@expo/dom-webview": "~57.0.1", - "@expo/fingerprint": "^0.20.13", - "@expo/local-build-cache-provider": "^57.0.8", - "@expo/log-box": "^57.0.4", - "@expo/metro": "~56.0.2", - "@expo/metro-config": "~57.0.12", + "@expo/cli": "^58.1.11", + "@expo/config": "~58.0.6", + "@expo/config-plugins": "~58.0.9", + "@expo/devtools": "~58.0.2", + "@expo/dom-webview": "~58.0.2", + "@expo/fingerprint": "^0.21.5", + "@expo/local-build-cache-provider": "^58.0.6", + "@expo/log-box": "^58.0.12", + "@expo/log-box-utils": "^58.0.2", + "@expo/metro": "~58.0.0", + "@expo/metro-config": "~58.0.14", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~57.0.13", - "expo-asset": "~57.0.18", - "expo-constants": "~57.0.20", - "expo-file-system": "~57.0.7", - "expo-font": "~57.0.4", - "expo-keep-awake": "~57.0.2", - "expo-modules-autolinking": "~57.0.13", - "expo-modules-core": "~57.0.20", + "babel-preset-expo": "~58.0.17", + "expo-asset": "~58.0.16", + "expo-constants": "~58.0.12", + "expo-file-system": "~58.0.9", + "expo-font": "~58.0.8", + "expo-keep-awake": "~58.0.3", + "expo-modules-autolinking": "~58.0.13", + "expo-modules-core": "~58.0.22", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", - "whatwg-url-minimum": "^0.1.2" + "whatwg-url-minimum": "^0.2.0" }, "bin": { "expo": "bin/cli", "expo-modules-autolinking": "bin/autolinking", "fingerprint": "bin/fingerprint" }, + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" + }, "peerDependencies": { "@expo/dom-webview": "*", "@expo/metro-runtime": "*", @@ -4831,14 +4662,14 @@ } }, "node_modules/expo-asset": { - "version": "57.0.18", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-57.0.18.tgz", - "integrity": "sha512-zDIQkUr0NM2S7YRj98Zohf/OBuM1q0o4ctxLz1C1oe4/33lHNLjp+2v3qUtBWVwn0zKka8UGADmS8M+83Wi6pw==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.16.tgz", + "integrity": "sha512-beR3uusLA+rFo+6Ug0L7FPR4b6y/37VwtYW2Jig/i+3Co+oyYCTnvVuFPWhb05W9TOZRxdHUEI569fVKIgtYAA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/image-utils": "^0.11.5", - "expo-constants": "~57.0.19" + "@expo/image-utils": "^0.12.5", + "expo-constants": "~58.0.12" }, "peerDependencies": { "expo": "*", @@ -4847,13 +4678,14 @@ } }, "node_modules/expo-constants": { - "version": "57.0.20", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-57.0.20.tgz", - "integrity": "sha512-WycPVvBgbluSa6yAh6DKnX646ZHrae0gV2ZLum5fioNkR+DiWyulq1+UfS++Jc6yfAh/l55NOirv6mt5cnQhSw==", + "version": "58.0.12", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.12.tgz", + "integrity": "sha512-d3/dsps32nU4m6YJQbXQ1dIfn58GxfmJjTnZ0WtnhdSHTdG/oVsOakLqYRlX/FaLUKkQOSHXMf7hyCx+2a/HSQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "~2.4.3" + "@expo/env": "~2.5.2", + "@expo/require-utils": "^58.0.4" }, "peerDependencies": { "expo": "*", @@ -4861,9 +4693,9 @@ } }, "node_modules/expo-file-system": { - "version": "18.1.11", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.1.11.tgz", - "integrity": "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.9.tgz", + "integrity": "sha512-JT0km3Wa+wDz/7Rli8ifreoMnmk68ulf/uaWzRA26xm/4K+jGTY+cDhnboRmpmXUCBkED6uqxWmNoXjaVU9VUw==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -4871,14 +4703,11 @@ } }, "node_modules/expo-font": { - "version": "57.0.4", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-57.0.4.tgz", - "integrity": "sha512-7WOMC2oA6xCfOm8bbofqWn2bIqyWFm7YLEnpc/gA1MJH0Ll0TfT/3+CqRkoW2eNRWMS8sxrz5WukUmSvmNquHA==", + "version": "58.0.8", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.8.tgz", + "integrity": "sha512-i9HKj/ljdmmjLamYQEkI4wXJB9+ap7AG5CpCqK/bgwwy45y5T8+1lpNbYgRXE7aQgmDjPpzd09wX6dOZkHfrxg==", "license": "MIT", "peer": true, - "dependencies": { - "fontfaceobserver": "^2.1.0" - }, "peerDependencies": { "expo": "*", "react": "*", @@ -4886,9 +4715,9 @@ } }, "node_modules/expo-keep-awake": { - "version": "57.0.2", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-57.0.2.tgz", - "integrity": "sha512-GqgH746wtJImmsbyHmCQoi7cOslKuWQBbJHXr53S35Bpf5UvxCAztvnitUEd7D0QvFN2rvkOhylbZpgZZfBLlQ==", + "version": "58.0.3", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-58.0.3.tgz", + "integrity": "sha512-wLRF+XeVsD/Rt/ZyX+A0mk1brdf8vefWizNAPzqV5eOCgkj23LCRZdN8gUi5X8UwyR8UJ7Y7Dzdz4YDGB/4c9Q==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4897,13 +4726,14 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "57.0.13", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-57.0.13.tgz", - "integrity": "sha512-Hj5NjZRlfccazhKab+wK19leRVUr1Y/PUERaRvegIbUSkq4GVxKq6lU9QHlKQyC16MdD/VS4iwsiLivB4o7lvQ==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.13.tgz", + "integrity": "sha512-uzLFoTnAKabUdITvzRqWTvFkZsOdRPEXj7AEMAuBEhA2kGhqaBDa2EOWqPXVay0QJVoZuIQaEEgPGAXN1dPuYg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/require-utils": "^57.0.5", + "@expo/platforms": "^58.0.1", + "@expo/require-utils": "^58.0.4", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" @@ -4913,20 +4743,20 @@ } }, "node_modules/expo-modules-core": { - "version": "57.0.20", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-57.0.20.tgz", - "integrity": "sha512-vEL3aeih32yuD7sQHB3Y3LKXRT8mMgoVQWFIcHtX811Bl0StnNZUG2vT5je4fe+OWYVfkjb6gNqfMc04moREgA==", + "version": "58.0.22", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.22.tgz", + "integrity": "sha512-T3YJYziFkF4JlGDpX4zCl91oIxz1Skq5sp1LFVO+GL/BARSIXk013QWGdRZrvt+wMxoVaql5dpOdPdP5q2+0jQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/expo-modules-macros-plugin": "0.6.1", - "expo-modules-jsi": "~57.1.1", + "expo-modules-jsi": "~58.0.15", + "expo-modules-macros": "0.20.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", - "react-native-worklets": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0" + "react-native-worklets": ">=0.13.0" }, "peerDependenciesMeta": { "react-native-worklets": { @@ -4935,34 +4765,34 @@ } }, "node_modules/expo-modules-jsi": { - "version": "57.1.1", - "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-57.1.1.tgz", - "integrity": "sha512-ssnwz3ZuIgCbZj5A3J6NlhQrXZojg+BjkeWrOWqVJhyMHlV/A/cRT7s986chKku97BFt6ucmDu6/BCzrV45Wcw==", + "version": "58.0.15", + "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.15.tgz", + "integrity": "sha512-PsjYgL4KWtvBqWH242r0wbP99VjgHkHCpkPCekO7nzb+ulkDNyrNnhysxa0TcNpfRTNLetmCUaLs9t4CcoquZQ==", "license": "MIT", "peer": true, "peerDependencies": { "react-native": "*" } }, - "node_modules/expo-server": { - "version": "57.0.3", - "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-57.0.3.tgz", - "integrity": "sha512-aK+LdKzauHSGmsOStZtyxdzv0zWssCkxTw3m4QuOhfDSJsZaMRTd9O41d8ixU/QfELTbaJ0oRNcF7JFV/7O9YQ==", + "node_modules/expo-modules-macros": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.20.0.tgz", + "integrity": "sha512-Ekgb5c9LQPM9CPnmDZdeWcOa1eBbCDUGrgdN5lIFNH2GWDUf9doeAOK7IqQOOVviamy37eIp5FW+N1zyrIwzoA==", "license": "MIT", "peer": true, - "engines": { - "node": ">=20.16.0" + "optionalDependencies": { + "@expo/modules-macros-win32-arm64": "0.20.0", + "@expo/modules-macros-win32-x64": "0.20.0" } }, - "node_modules/expo/node_modules/expo-file-system": { - "version": "57.0.7", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-57.0.7.tgz", - "integrity": "sha512-1vkZRadOsIputFDBcclqBa1pO3iXOO6iIsdqJipQWw4V5TSnWgmRTuOF7ro8IzrVue+PHbum++KCG3Tawem4cg==", + "node_modules/expo-server": { + "version": "58.0.5", + "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-58.0.5.tgz", + "integrity": "sha512-FHYecxfGOuAhacHcanR6qCN8Cln9S+FFulcYetLu3ddDg55ohuCsMZ9U4Egzwdm+A2o6N+MdSoJKquBC5F9NIg==", "license": "MIT", "peer": true, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" } }, "node_modules/exponential-backoff": { @@ -5020,13 +4850,13 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.4.tgz", + "integrity": "sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ==", + "license": "MIT", "peer": true, "dependencies": { - "bser": "2.1.1" + "bser": "2.1.2" } }, "node_modules/fdir": { @@ -5156,9 +4986,9 @@ "peer": true }, "node_modules/flow-estree": { - "version": "0.331.0", - "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", - "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", + "version": "0.327.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.327.0.tgz", + "integrity": "sha512-f9vK751YUzD0qaHSpKc5/qQM6gqOlgGS+4ZRqTNcZOpVqn3mC55yEQ6dUG2K1eaVm5FbKkz9CFWe6XNvrkQFQg==", "license": "MIT", "peer": true, "engines": { @@ -5166,25 +4996,18 @@ } }, "node_modules/flow-parser": { - "version": "0.331.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", - "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", + "version": "0.327.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.327.0.tgz", + "integrity": "sha512-/MYZ5hXWf5ozpbdfUDmazMgQXviLxWEiRLH3MppEGDdW0itRVqmB5UaU7QX+SBCDNiq+gEesSVn8nlxmPDyDkw==", "license": "MIT", "peer": true, "dependencies": { - "flow-estree": "0.331.0" + "flow-estree": "0.327.0" }, "engines": { "node": ">=0.4.0" } }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -5329,9 +5152,9 @@ "license": "MIT" }, "node_modules/hermes-compiler": { - "version": "250829098.0.17", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.17.tgz", - "integrity": "sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==", + "version": "260318099.0.4", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-260318099.0.4.tgz", + "integrity": "sha512-8odcPFkPC82HlqCl0C5QI9mBN4rEAT+IAo55sJhzwKw//K3qZloiv3ex6J2O8CuBbhdmkJozfidNsset2KH25w==", "license": "MIT", "peer": true }, @@ -5480,9 +5303,9 @@ } }, "node_modules/ip-address": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", - "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", + "version": "10.7.4", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.4.tgz", + "integrity": "sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg==", "license": "MIT", "engines": { "node": ">= 12" @@ -5829,34 +5652,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "peer": true - }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -6284,13 +6079,6 @@ "tmpl": "1.0.5" } }, - "node_modules/marky": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", - "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -6306,9 +6094,9 @@ "peer": true }, "node_modules/metro": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.84.5.tgz", - "integrity": "sha512-r1liLkyFZMVSEMNjU1CJU5pRzs3NdkxHqXS60O25c0rCIqAR+cGk7rPydw/g0WAIKVXojIBIF45yYBPagJGcgw==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.87.1.tgz", + "integrity": "sha512-1oyLU9elM7hPAsKIqKooEekwxiuWr27+MZBhUROPhzcbXhMDxK64GPF/hCXwBZVp1F89ODavCrBmJtLx9WtBoQ==", "license": "MIT", "peer": true, "dependencies": { @@ -6320,29 +6108,28 @@ "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "accepts": "^2.0.0", - "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", + "flow-parser": "0.331.0", "graceful-fs": "^4.2.4", - "hermes-parser": "0.35.0", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-config": "0.84.5", - "metro-core": "0.84.5", - "metro-file-map": "0.84.5", - "metro-resolver": "0.84.5", - "metro-runtime": "0.84.5", - "metro-source-map": "0.84.5", - "metro-symbolicate": "0.84.5", - "metro-transform-plugins": "0.84.5", - "metro-transform-worker": "0.84.5", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-config": "0.87.1", + "metro-core": "0.87.1", + "metro-file-map": "0.87.1", + "metro-resolver": "0.87.1", + "metro-runtime": "0.87.1", + "metro-source-map": "0.87.1", + "metro-symbolicate": "0.87.1", + "metro-transform-plugins": "0.87.1", + "metro-transform-worker": "0.87.1", "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -6355,111 +6142,116 @@ "metro": "src/cli.js" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-babel-transformer": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.84.5.tgz", - "integrity": "sha512-2WbHILKMiJUzfdjmGOQOqU1bWi9//gqiclc/tkk/AIsrrVw3efhZ1uhkOwMTxUEPOzqoo091H0olLmVZH5FHGQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.87.1.tgz", + "integrity": "sha512-orvRIGpb0yK1yMbk5YP3dhVKjmoxUkRB9fdltGJxNppEqus/1tFpNuf9KnGFR3Qjg0izoUrJ4z6WgoBvdkXPrA==", "license": "MIT", "peer": true, "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.35.0", - "metro-cache-key": "0.84.5", + "flow-parser": "0.331.0", + "metro-cache-key": "0.87.1", "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "node_modules/metro-babel-transformer/node_modules/flow-estree": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", + "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=18" + } }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "node_modules/metro-babel-transformer/node_modules/flow-parser": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", + "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", "license": "MIT", "peer": true, "dependencies": { - "hermes-estree": "0.35.0" + "flow-estree": "0.331.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/metro-cache": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.84.5.tgz", - "integrity": "sha512-WHS0n2OxQqtwEjSeQFPePNrMvEFhmQcUQM9cRJMHByWoi/GMWFBEWOf7hVkAM/0KRutAXNbDlSu/cZB6CyxgQQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.87.1.tgz", + "integrity": "sha512-juNPaj0Xi5tkLp8imXqvbSnEIijwKG36m7OiFFVJMqEkiURwAjkMFVek3/xpix1+LVQqO7kjVp3PvuvIM61mKQ==", "license": "MIT", "peer": true, "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.84.5" + "metro-core": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-cache-key": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.84.5.tgz", - "integrity": "sha512-3dPB2TnvGjjf0/9O7AXVQURKXuQNauTZE7WpTGTlR017Gh/B5y0m/2wcqxfveUguHSpu89KhVxCAlr2k/H7uhQ==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.87.1.tgz", + "integrity": "sha512-scqVVPMA2c+RVO12I3wyMDp5xCkRPLsyrcG4Qc3xfU5JR0EW/0sz2tjty+5UjMUtG09uiM1KYQ8HjWg7OQXHtw==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-config": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.84.5.tgz", - "integrity": "sha512-zie+uN6oohscowi2S7ByU+wUw6CrT4ZxW9uAbONOObSxx86RGmnIAmjXHLkfmcdYoY7jzOPEbqcI6oeVmqyBQA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.87.1.tgz", + "integrity": "sha512-NmkDlc/qZAdo5gTkVTuO2AKE/khemRKRH5IA+SKfqUBJigI5GqZ5TOXhmEokhlkAqzjt8dyzKhzI6FHvXoXaTQ==", "license": "MIT", "peer": true, "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.84.5", - "metro-cache": "0.84.5", - "metro-core": "0.84.5", - "metro-runtime": "0.84.5", - "yaml": "^2.6.1" + "metro": "0.87.1", + "metro-cache": "0.87.1", + "metro-core": "0.87.1", + "metro-runtime": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-core": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.84.5.tgz", - "integrity": "sha512-xwm605hCi5Y6eJTTb8ZWo6pkUcoBEIyiQOfkZh5GwtDwUrP9SNhTQZhzJHrBCwwxlf3Ptl/pxWJgQ1rsNYMnrA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.87.1.tgz", + "integrity": "sha512-xizzky/4+c/Mkznege8OW05j7bSdM39VPoEps61Se4+hf32UQujmbvLvIE9+UnP6kNEPVomk0Fw8NsBK9iRQmw==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.84.5" + "metro-resolver": "0.87.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-file-map": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.84.5.tgz", - "integrity": "sha512-mlm/JL8toSbSc2akpKIGmzvrVRSCgZ5vkbycI34oMLoOnLGuLyC8WTyVJ6P0hZG/usDaGwZSl/s9BCRriqjGJA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.87.1.tgz", + "integrity": "sha512-9sPuNCojC3pS4vj+ZPY7FXmHGpdJeckXuKXQrDAfJvZc60AF8owRFTkI8XdwlwrmPIB2w++KraK9FMEXvC4wJw==", "license": "MIT", "peer": true, "dependencies": { @@ -6470,17 +6262,16 @@ "invariant": "^2.2.4", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" + "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-minify-terser": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.84.5.tgz", - "integrity": "sha512-BJoFwCEDsYnagPqarayInv2+diCDNDdLlaof/p6s9w4gh+gc9HXYM+pDvsKGKKUumpZswNF3Z/ftTMqKl/5IBg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.87.1.tgz", + "integrity": "sha512-YK4k1oO1wV48hfE+Nbw2rJCnAgeabzrgT/xH5ha5n9gbK4p3HYFC898cERUiyTl9vRh58CNTiXRc88f7y6PfKg==", "license": "MIT", "peer": true, "dependencies": { @@ -6488,26 +6279,26 @@ "terser": "^5.15.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-resolver": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.84.5.tgz", - "integrity": "sha512-VSSnepg1k6LyCwtb6eirWdAWlpKwBG8Rdtsr1mU38rMelFyWgh3/QuMSiZIZAIjwg/fsa8GhW5/FO54CAUPCEA==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.87.1.tgz", + "integrity": "sha512-FXH/brY69wT6sPxaSW8BhMmDGD/6irmBr/cL4rUi+VWwqR3pbvdcfUOfyjcHucgQ7pe5IW3xJY21eHKLVKNumQ==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-runtime": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.84.5.tgz", - "integrity": "sha512-U1m2+d1Pr+JO2/iVXBB2OfXXityz7tqwIorxfrT15IEgaHvpJBq/OHiqnOWPKJbUl3JcxjcdviZZOKk85oK4Qg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", + "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", "license": "MIT", "peer": true, "dependencies": { @@ -6515,13 +6306,13 @@ "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-source-map": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.84.5.tgz", - "integrity": "sha512-2BtV5L9uPc49F13Gn5wiP6bX/EncqzqTIk2VL/0F/96Vo0YEOjluT/qktQjFODfqGFsucwnh5mPEAl/2jVEfeg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", + "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", "license": "MIT", "peer": true, "dependencies": { @@ -6529,26 +6320,26 @@ "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.84.5", + "metro-symbolicate": "0.87.1", "nullthrows": "^1.1.1", - "ob1": "0.84.5", + "ob1": "0.87.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-symbolicate": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.84.5.tgz", - "integrity": "sha512-rQ40zYDAkaWBN9yvjUuAD0ZpzBMZSoKyGYXnb5JrfbKjun7fTvfoLHL3KXFYenBTYZkQtlp4cKSCv/1utxFyOw==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", + "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.84.5", + "metro-source-map": "0.87.1", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -6557,13 +6348,13 @@ "metro-symbolicate": "src/index.js" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-transform-plugins": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.84.5.tgz", - "integrity": "sha512-+InaSVGaOyt0DyRo4Y/zIdPI6CZwnbNho5LAL23tgmuGwv7fyfkF7kKfPjZcfxXBcoYdTLLFnCfCH/dHSiCqNg==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.87.1.tgz", + "integrity": "sha512-qMiJ/x+VfqumFJJSefKS6nj8uojzC29b2/aK8vlMuFABIqGjDucICEOXd2Yt6k/XMFAgAcaJvShUOT0HLyYaPw==", "license": "MIT", "peer": true, "dependencies": { @@ -6575,13 +6366,13 @@ "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro-transform-worker": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.84.5.tgz", - "integrity": "sha512-ui1Z8x4s5RL36gMmKLaMMO7O9NNDHNdthEZSCDQHAau3JcAsTaFOK6I+2q4I/kW5u8hSEjJk9L45TXSVJw6g1A==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.87.1.tgz", + "integrity": "sha512-VOzs3OV405FuOLYdAhqA2wsn1F9lvueDVxMDLvCKaQ44U+yknIqphJ9eMjjsGwLDZiJq9sW3DMLhjD27JxQgqQ==", "license": "MIT", "peer": true, "dependencies": { @@ -6590,17 +6381,17 @@ "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", - "metro": "0.84.5", - "metro-babel-transformer": "0.84.5", - "metro-cache": "0.84.5", - "metro-cache-key": "0.84.5", - "metro-minify-terser": "0.84.5", - "metro-source-map": "0.84.5", - "metro-transform-plugins": "0.84.5", + "metro": "0.87.1", + "metro-babel-transformer": "0.87.1", + "metro-cache": "0.87.1", + "metro-cache-key": "0.87.1", + "metro-minify-terser": "0.87.1", + "metro-source-map": "0.87.1", + "metro-transform-plugins": "0.87.1", "nullthrows": "^1.1.1" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/metro/node_modules/accepts": { @@ -6617,28 +6408,27 @@ "node": ">= 0.6" } }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT", - "peer": true - }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "node_modules/metro/node_modules/flow-estree": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-estree/-/flow-estree-0.331.0.tgz", + "integrity": "sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==", "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=18" + } }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "node_modules/metro/node_modules/flow-parser": { + "version": "0.331.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.331.0.tgz", + "integrity": "sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==", "license": "MIT", "peer": true, "dependencies": { - "hermes-estree": "0.35.0" + "flow-estree": "0.331.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/metro/node_modules/mime-types": { @@ -6792,19 +6582,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mqtt": { "version": "5.15.2", "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.15.2.tgz", @@ -6868,9 +6645,9 @@ "peer": true }, "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "funding": [ { "type": "github", @@ -6921,13 +6698,37 @@ "peer": true }, "node_modules/node-releases": { - "version": "2.0.57", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", - "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "version": "2.0.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", + "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/noxcturnal": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.5.tgz", + "integrity": "sha512-X/HQXJP/xn7LVQ4z1E4La0NHSl5UHdtJPG6ky4r2/Xgb7k79nGDJgBXk7I5f1V2vInWjlSCM14oSB0cUxwZS/Q==", "license": "MIT", "peer": true, + "dependencies": { + "@babel/code-frame": "^7.20.0", + "@oxc-project/types": "0.154.0" + }, "engines": { "node": ">=18" + }, + "optionalDependencies": { + "@noxcturnal/noxcturnal-darwin-arm64": "0.1.5", + "@noxcturnal/noxcturnal-darwin-x64": "0.1.5", + "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.5", + "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.5", + "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.5", + "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.5", + "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.5", + "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.5" } }, "node_modules/npm-package-arg": { @@ -6964,16 +6765,16 @@ } }, "node_modules/ob1": { - "version": "0.84.5", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.84.5.tgz", - "integrity": "sha512-aH9RkoZc7w/90HBamFxTw8ZLFr05wXS+iOnvmrgo53Ep8Pyrm5FieQSaPIVROkfFVQISeD/zo92fes26TOwe+A==", + "version": "0.87.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", + "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" } }, "node_modules/on-finished": { @@ -7013,17 +6814,18 @@ } }, "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "peer": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7341,9 +7143,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz", + "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==", "funding": [ { "type": "opencollective", @@ -7361,9 +7163,9 @@ "license": "MIT", "peer": true, "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7523,9 +7325,9 @@ } }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "license": "MIT", "peer": true, "engines": { @@ -7551,36 +7353,35 @@ "peer": true }, "node_modules/react-native": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.87.1.tgz", - "integrity": "sha512-DJKG6ANoD7BtrE4z9DewiSD7/RxCX73lK5Pu49aUr85P3333Dm2roTiP0rRjQNDZdVizHSOmstWfwF/o9EjCRA==", + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.88.0.tgz", + "integrity": "sha512-v/wee0nYWcammMYBnSat/e3WY/5iaf9YQOMcBrfKT/wPApPPlHp94hgZovBtwhMuthR01yc/8cGn0FpFTE/C4A==", "license": "MIT", "peer": true, "dependencies": { - "@react-native/asset-utils": "0.87.1", - "@react-native/codegen": "0.87.1", - "@react-native/community-cli-plugin": "0.87.1", - "@react-native/gradle-plugin": "0.87.1", - "@react-native/normalize-colors": "0.87.1", - "@react-native/virtualized-lists": "0.87.1", + "@react-native/asset-utils": "0.88.0", + "@react-native/codegen": "0.88.0", + "@react-native/community-cli-plugin": "0.88.0", + "@react-native/gradle-plugin": "0.88.0", + "@react-native/normalize-colors": "0.88.0", + "@react-native/virtualized-lists": "0.88.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", - "babel-plugin-syntax-hermes-parser": "0.36.1", "base64-js": "^1.5.1", - "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", - "hermes-compiler": "250829098.0.17", + "flow-parser": "0.327.0", + "hermes-compiler": "260318099.0.4", "invariant": "^2.2.4", "memoize-one": "^5.0.0", - "metro-runtime": "^0.87.0", - "metro-source-map": "^0.87.0", + "metro-runtime": "^0.87.1", + "metro-source-map": "^0.87.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", - "scheduler": "0.27.0", + "scheduler": "0.28.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", @@ -7596,7 +7397,7 @@ }, "peerDependencies": { "@types/react": "^19.1.1", - "react": "^19.2.3" + "react": "^19.3.0" }, "peerDependenciesMeta": { "@types/react": { @@ -7604,114 +7405,6 @@ } } }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.87.1.tgz", - "integrity": "sha512-qbaqEdlUfj2vRgvWTpMoNgHnEqAhAYJLUrpGkb0WC9n0kdtqUvgigpz4bDktZwolM9BemXwgGFgyiAnbs3t0xw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.29.0", - "hermes-parser": "0.36.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "tinyglobby": "^0.2.15", - "yargs": "^17.6.2" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.87.1.tgz", - "integrity": "sha512-8+AutemzX+a7cuKgTUyb7JUk3sFYgLyrSnlTLrL6LuW/LKDE+FYE8lJGWYhJPJcE51Ge1D8yRzxgQEdEFZtuIw==", - "license": "MIT", - "peer": true - }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/react-native/node_modules/metro-runtime": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.87.1.tgz", - "integrity": "sha512-kjeuSvInsM6OzBjkCQsWxnkrKZFMKtnkCl38oXWRI9lDGs2L9hGs9Tak9sQYJ9h3gtDujneB7wZio+irgqJKDw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/metro-source-map": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.87.1.tgz", - "integrity": "sha512-Bqpm0PBGdy53pigIJb4HRF7QxD2pUOdgSmVh/4AWbP635kSCv+Y6ltVxUZgSnzS/QbSmzyCGijmRPlXMj2/qHw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.87.1", - "nullthrows": "^1.1.1", - "ob1": "0.87.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/metro-symbolicate": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.87.1.tgz", - "integrity": "sha512-rcGvwabrg0lbXGRGRKl14PY3My3+dkno2jZYhdJEuH2DmjTtTkV5bYwgto4JtV/Lbe+sXE6GO1UGg654430uow==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.87.1", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, - "node_modules/react-native/node_modules/ob1": { - "version": "0.87.1", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", - "integrity": "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": "^22.13.0 || ^24.3.0 || >= 26.0.0" - } - }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -7739,9 +7432,9 @@ } }, "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.5.0.tgz", + "integrity": "sha512-1s+CxXjJ71i7LNVy8nYwg47XV4y6lAnOEhsMtSKq3WpmPfhl9LuKlTqKIn/3yUpE8lBz+W+TT88Bxyhnr0U4yw==", "license": "MIT", "peer": true }, @@ -7766,13 +7459,13 @@ "peer": true }, "node_modules/regexpu-core": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.2.tgz", - "integrity": "sha512-zkmVH92DlzjSFc4xKGZp/2BXIFrDIdBQBC8gUXKCsMgKYb1bkCkxfSuoW1werDjaTEMTbULkHtKFHe1L+Abnaw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.3.tgz", + "integrity": "sha512-E8VgUoSK+LMQrLboDxavm76MTBGrQhx9RiNuomRmYnZ10Uw12HrI8fkxOOncktb2hBpzIZ9SV/347euQHG5z+g==", "license": "MIT", "peer": true, "dependencies": { - "regenerate": "^1.4.2", + "regenerate": "^1.5.0", "regenerate-unicode-properties": "^10.3.0", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", @@ -7791,9 +7484,9 @@ "peer": true }, "node_modules/regjsparser": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.3.tgz", - "integrity": "sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.4.tgz", + "integrity": "sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==", "license": "BSD-2-Clause", "peer": true, "dependencies": { @@ -7814,13 +7507,13 @@ } }, "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "version": "1.22.13", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", + "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", + "is-core-module": "^2.17.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -7961,9 +7654,9 @@ } }, "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "license": "MIT", "peer": true }, @@ -8191,9 +7884,9 @@ } }, "node_modules/shell-quote": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.11.0.tgz", - "integrity": "sha512-JdxDPD0DBTyu08pq0kPC0xSNet/qsU07qT6IsX1AS8oO2ICNRY4ldNa8OAI6PuwAH8tG3lxEhbqmyp4Dw4036g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.12.0.tgz", + "integrity": "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==", "license": "MIT", "peer": true, "engines": { @@ -8287,9 +7980,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "license": "BSD-3-Clause", "peer": true, "engines": { @@ -8722,9 +8415,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", - "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "funding": [ { "type": "opencollective", @@ -8779,9 +8472,9 @@ } }, "node_modules/uuid": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz", - "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.3.tgz", + "integrity": "sha512-Sc5u1VVln93y1Xnz4R+CunOZc7R9LUcTmhj7Rc7Eg3HVcf7rVn2FOoa812fe0W8p3jD7xeoGSYbfqCGGH2B6xw==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8847,9 +8540,9 @@ "peer": true }, "node_modules/whatwg-url-minimum": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/whatwg-url-minimum/-/whatwg-url-minimum-0.1.2.tgz", - "integrity": "sha512-XPEm0XFQWNVG292lII1PrRRJl3sItrs7CettZ4ncYxuDVpLyy+NwlGyut2hXI0JswcJUxeCH+CyOJK0ZzAXD6A==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url-minimum/-/whatwg-url-minimum-0.2.0.tgz", + "integrity": "sha512-BtjXU1caNcCFfETP2DhqSeVPfRDl2MTUitI107RE34rJXjR/izfUtR5IoTFOK1WqjNLXbbeqaCH/mQAOLjpc8g==", "license": "MIT", "peer": true }, @@ -9042,22 +8735,6 @@ "license": "ISC", "peer": true }, - "node_modules/yaml": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", - "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", - "license": "ISC", - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/yargs": { "version": "17.7.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", diff --git a/package.json b/package.json index b36e9cfc..ab93bd38 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "react-native-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API", - "version": "2.0.0", + "version": "3.0.0", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { @@ -39,11 +39,12 @@ "analyse": "tsc --noEmit" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "devDependencies": { "@eslint/js": "10.0.1", "eslint": "10.10.0", + "expo-file-system": "58.0.9", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", "@types/node": "24.9.2", @@ -58,14 +59,14 @@ }, "dependencies": { "buffer": "6.0.3", - "expo-file-system": "18.*.*", "json-bigint": "1.0.0", "mqtt": "5.15.2", "process": "0.11.10", "readable-stream": "4.7.0" }, "peerDependencies": { - "expo": "*", + "expo": ">=52.0.0", + "expo-file-system": ">=18.0.0", "expo-notifications": "*", "react-native": ">=0.76.7 <1.0.0", "react-native-background-actions": ">=4.0.0 <5.0.0", diff --git a/src/client.ts b/src/client.ts index 8efff40a..c5277c40 100644 --- a/src/client.ts +++ b/src/client.ts @@ -291,7 +291,7 @@ class Client { 'x-sdk-name': 'React Native', 'x-sdk-platform': 'client', 'x-sdk-language': 'reactnative', - 'x-sdk-version': '2.0.0', + 'x-sdk-version': '3.0.0', 'X-Appwrite-Response-Format': '2.5.0', }; diff --git a/src/lib/file-system.ts b/src/lib/file-system.ts new file mode 100644 index 00000000..284e273a --- /dev/null +++ b/src/lib/file-system.ts @@ -0,0 +1,13 @@ +import type * as Legacy from 'expo-file-system/legacy'; + +export type FileSystem = typeof Legacy; + +export function fileSystem(): FileSystem { + /* eslint-disable @typescript-eslint/no-require-imports */ + try { + return require('expo-file-system/legacy'); + } catch { + return require('expo-file-system'); + } + /* eslint-enable @typescript-eslint/no-require-imports */ +} diff --git a/src/query.ts b/src/query.ts index 9c614c75..7b5c0913 100644 --- a/src/query.ts +++ b/src/query.ts @@ -652,7 +652,7 @@ export class Query { new Query('on', undefined, [left, operator, right]).toString(); /** - * Inner join. `table` is the joined collection/table ID. + * Inner join. `table` is the joined collection/table ID; without an alias the server names the join after it, if the ID is a valid alias, and otherwise rejects the query. */ static join = ( table: string, diff --git a/src/services/account.ts b/src/services/account.ts index 983002d2..734b600d 100644 --- a/src/services/account.ts +++ b/src/services/account.ts @@ -1159,6 +1159,117 @@ export class Account extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get the team memberships of the currently logged in user. + * + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm, roles + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @throws {AppwriteException} + * @returns {Promise} + */ + listMemberships(params?: { + queries?: string[]; + total?: boolean; + }): Promise; + /** + * Get the team memberships of the currently logged in user. + * + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm, roles + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @throws {AppwriteException} + * @returns {Promise} + * @deprecated Use the object parameter style method for a better developer experience. + */ + listMemberships( + queries?: string[], + total?: boolean, + ): Promise; + listMemberships( + paramsOrFirst?: { queries?: string[]; total?: boolean } | string[], + ...rest: [boolean?] + ): Promise { + let params: { queries?: string[]; total?: boolean }; + + if ( + (typeof paramsOrFirst === 'undefined' && rest.length === 0) || + (paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst)) + ) { + params = (paramsOrFirst || {}) as { + queries?: string[]; + total?: boolean; + }; + } else { + params = { + queries: paramsOrFirst as string[], + total: rest[0] as boolean, + }; + } + + const queries = params.queries; + const total = params.total; + + const apiPath = '/account/memberships'; + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'get', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'membershipList', + models: { + membershipList: { + defaults: { + total: 0, + memberships: [], + }, + properties: { + memberships: { + items: 'membership', + }, + }, + }, + membership: { + defaults: { + $id: '', + $createdAt: '', + $updatedAt: '', + userId: '', + userName: '', + userEmail: '', + userPhone: '', + teamId: '', + teamName: '', + invited: '', + joined: '', + confirm: false, + mfa: false, + userAccessedAt: '', + roles: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Enable or disable MFA on an account. * @@ -3623,6 +3734,9 @@ export class Account extends Service { * * Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * + * * @param {string} params.userId - User ID. * @param {string} params.secret - Valid reset token. * @param {string} params.password - New user password. Must be between 8 and 256 chars. @@ -3639,6 +3753,9 @@ export class Account extends Service { * * Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * + * * @param {string} userId - User ID. * @param {string} secret - Valid reset token. * @param {string} password - New user password. Must be between 8 and 256 chars. @@ -3840,6 +3957,8 @@ export class Account extends Service { /** * Use this endpoint to complete the user password recovery process using the 6-digit code that was emailed by [createRecoveryOTP](https://appwrite.io/docs/references/cloud/client-web/account#createRecoveryOTP). Pass the **userId** of the user along with the **secret** code from the email and the new **password** to set. If confirmed, this route will return a 200 status code, the code is consumed and the user's password is updated. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * * * @param {string} params.userId - User ID. * @param {string} params.secret - Valid recovery OTP code. @@ -3855,6 +3974,8 @@ export class Account extends Service { /** * Use this endpoint to complete the user password recovery process using the 6-digit code that was emailed by [createRecoveryOTP](https://appwrite.io/docs/references/cloud/client-web/account#createRecoveryOTP). Pass the **userId** of the user along with the **secret** code from the email and the new **password** to set. If confirmed, this route will return a 200 status code, the code is consumed and the user's password is updated. * + * The new password must satisfy the project's enabled password policies, including custom deny lists. Dictionary entries match the entire password case-sensitively; personal-data terms match substrings case-insensitively. Personal-data validation runs after token verification against the recovered user's ID, name, email, and phone, closing the previous recovery gap for profile-based checks. A rejected password leaves the existing credentials unchanged and the recovery token usable. + * * * @param {string} userId - User ID. * @param {string} secret - Valid recovery OTP code. @@ -5377,6 +5498,8 @@ export class Account extends Service { * @param {string} params.targetId - Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. * @param {string} params.identifier - The target identifier (token, email, phone etc.) * @param {string} params.providerId - Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used. + * @param {string} params.bundleId - App bundle ID of the device registering an APNs token. Without `providerId`, routes the target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} params.environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} */ @@ -5384,6 +5507,8 @@ export class Account extends Service { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }): Promise; /** * Use this endpoint to register a device for push notifications. Provide a target ID (custom or generated using ID.unique()), a device identifier (usually a device token), and optionally specify which provider should send notifications to this target. The target is automatically linked to the current session and includes device information like brand and model. A session holds one push target per provider, so if one already exists this endpoint updates and returns that target instead of creating a second one, and a device that rotates its token is never notified twice. @@ -5391,6 +5516,8 @@ export class Account extends Service { * @param {string} targetId - Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. * @param {string} identifier - The target identifier (token, email, phone etc.) * @param {string} providerId - Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used. + * @param {string} bundleId - App bundle ID of the device registering an APNs token. Without `providerId`, routes the target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} * @deprecated Use the object parameter style method for a better developer experience. @@ -5399,17 +5526,27 @@ export class Account extends Service { targetId: string, identifier: string, providerId?: string, + bundleId?: string, + environment?: string, ): Promise; createPushTarget( paramsOrFirst: - | { targetId: string; identifier: string; providerId?: string } + | { + targetId: string; + identifier: string; + providerId?: string; + bundleId?: string; + environment?: string; + } | string, - ...rest: [string?, string?] + ...rest: [string?, string?, string?, string?] ): Promise { let params: { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }; if ( @@ -5421,18 +5558,24 @@ export class Account extends Service { targetId: string; identifier: string; providerId?: string; + bundleId?: string; + environment?: string; }; } else { params = { targetId: paramsOrFirst as string, identifier: rest[0] as string, providerId: rest[1] as string, + bundleId: rest[2] as string, + environment: rest[3] as string, }; } const targetId = params.targetId; const identifier = params.identifier; const providerId = params.providerId; + const bundleId = params.bundleId; + const environment = params.environment; if (typeof targetId === 'undefined') { throw new AppwriteException( @@ -5461,6 +5604,14 @@ export class Account extends Service { apiPayload['providerId'] = providerId; } + if (typeof bundleId !== 'undefined') { + apiPayload['bundleId'] = bundleId; + } + + if (typeof environment !== 'undefined') { + apiPayload['environment'] = environment; + } + const uri = new URL(this.client.config.endpoint + apiPath); const request = this.client.call( 'post', @@ -5498,18 +5649,24 @@ export class Account extends Service { * * @param {string} params.targetId - Target ID. * @param {string} params.identifier - The target identifier (token, email, phone etc.) + * @param {string} params.bundleId - App bundle ID of the device registering an APNs token. Routes an APNs target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} params.environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} */ updatePushTarget(params: { targetId: string; identifier: string; + bundleId?: string; + environment?: string; }): Promise; /** * Update the currently logged in user's push notification target. You can modify the target's identifier (device token) and provider ID (token, email, phone etc.). The target must exist and belong to the current user. If you change the provider ID, notifications will be sent through the new messaging provider instead. * * @param {string} targetId - Target ID. * @param {string} identifier - The target identifier (token, email, phone etc.) + * @param {string} bundleId - App bundle ID of the device registering an APNs token. Routes an APNs target to the enabled APNs provider for this bundle ID and `environment`. + * @param {string} environment - APNs environment the token belongs to, `sandbox` or `production`. Used with `bundleId`. * @throws {AppwriteException} * @returns {Promise} * @deprecated Use the object parameter style method for a better developer experience. @@ -5517,12 +5674,26 @@ export class Account extends Service { updatePushTarget( targetId: string, identifier: string, + bundleId?: string, + environment?: string, ): Promise; updatePushTarget( - paramsOrFirst: { targetId: string; identifier: string } | string, - ...rest: [string?] + paramsOrFirst: + | { + targetId: string; + identifier: string; + bundleId?: string; + environment?: string; + } + | string, + ...rest: [string?, string?, string?] ): Promise { - let params: { targetId: string; identifier: string }; + let params: { + targetId: string; + identifier: string; + bundleId?: string; + environment?: string; + }; if ( paramsOrFirst && @@ -5532,16 +5703,22 @@ export class Account extends Service { params = (paramsOrFirst || {}) as { targetId: string; identifier: string; + bundleId?: string; + environment?: string; }; } else { params = { targetId: paramsOrFirst as string, identifier: rest[0] as string, + bundleId: rest[1] as string, + environment: rest[2] as string, }; } const targetId = params.targetId; const identifier = params.identifier; + const bundleId = params.bundleId; + const environment = params.environment; if (typeof targetId === 'undefined' || targetId === '') { throw new AppwriteException( @@ -5565,6 +5742,14 @@ export class Account extends Service { apiPayload['identifier'] = identifier; } + if (typeof bundleId !== 'undefined') { + apiPayload['bundleId'] = bundleId; + } + + if (typeof environment !== 'undefined') { + apiPayload['environment'] = environment; + } + const uri = new URL(this.client.config.endpoint + apiPath); const request = this.client.call( 'put', diff --git a/src/services/avatars.ts b/src/services/avatars.ts index e634ce6d..168ed2e5 100644 --- a/src/services/avatars.ts +++ b/src/services/avatars.ts @@ -2,7 +2,7 @@ import { Service } from '../service'; import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; -import * as FileSystem from 'expo-file-system'; +import { fileSystem } from '../lib/file-system'; import { Platform as RNPlatform } from 'react-native'; import { Browser } from '../enums/browser'; @@ -973,6 +973,8 @@ export class Avatars extends Service { accept: 'application/json', }; + const FileSystem = fileSystem(); + const size = file.size; if (size <= Service.CHUNK_SIZE) { @@ -1025,12 +1027,20 @@ export class Avatars extends Service { async () => firstChunk, ); - response = await this.client.call( - 'put', - uri, - firstChunkHeaders, - apiPayload, - ); + try { + response = await this.client.call( + 'put', + uri, + firstChunkHeaders, + apiPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(firstPath, { + idempotent: true, + }).catch(() => undefined); + } + } offset = firstChunkEnd; if (onProgress) { @@ -1109,12 +1119,21 @@ export class Avatars extends Service { async () => chunkData, ); - const chunkResponse = await this.client.call( - 'put', - uri, - chunkHeaders, - chunkPayload, - ); + let chunkResponse; + try { + chunkResponse = await this.client.call( + 'put', + uri, + chunkHeaders, + chunkPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(chunkPath, { + idempotent: true, + }).catch(() => undefined); + } + } if (failed) { return chunkResponse; diff --git a/src/services/databases.ts b/src/services/databases.ts index 43e4b4a9..69623d16 100644 --- a/src/services/databases.ts +++ b/src/services/databases.ts @@ -544,12 +544,14 @@ export class Databases extends Service { /** * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. * + * Documents returned by aggregate, groupBy or distinct queries hold only the attributes they select, group or aggregate, typed as a document types them, with a joined attribute named by its join alias (`alias.attribute`). The response omits their `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` and `$collectionId` unless they select or group it, and those of a right or full join document that no document of this collection matched. SDK document models fill omitted system attributes with empty values. + * * @param {string} params.databaseId - Database ID. * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise} * @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.listRows` instead. @@ -567,12 +569,14 @@ export class Databases extends Service { /** * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. * + * Documents returned by aggregate, groupBy or distinct queries hold only the attributes they select, group or aggregate, typed as a document types them, with a joined attribute named by its join alias (`alias.attribute`). The response omits their `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` and `$collectionId` unless they select or group it, and those of a right or full join document that no document of this collection matched. SDK document models fill omitted system attributes with empty values. + * * @param {string} databaseId - Database ID. * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise>} * @deprecated Use the object parameter style method for a better developer experience. @@ -916,6 +920,184 @@ export class Databases extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + * @deprecated This API has been deprecated since 1.8.0. Please use `TablesDB.createQuery` instead. + */ + createQuery< + Document extends Models.Document = Models.DefaultDocument, + >(params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, collection, schema version (attributes and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; document writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + collectionId: string, + queries?: string[], + transactionId?: string | null, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, (string | null)?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + collectionId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string | null, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const collectionId = params.collectionId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof collectionId === 'undefined' || collectionId === '') { + throw new AppwriteException( + 'Missing required parameter: "collectionId"', + ); + } + + const apiPath = + '/databases/{databaseId}/collections/{collectionId}/documents/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace( + '{collectionId}', + encodeURIComponent(String(collectionId)), + ); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'documentList', + models: { + documentList: { + defaults: { + total: 0, + documents: [], + }, + properties: { + documents: { + items: 'document', + }, + }, + }, + document: { + defaults: { + $id: '', + $sequence: '', + $collectionId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. * diff --git a/src/services/documents-db.ts b/src/services/documents-db.ts index d43db5a9..012b8a03 100644 --- a/src/services/documents-db.ts +++ b/src/services/documents-db.ts @@ -1063,6 +1063,183 @@ export class DocumentsDB extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for cached responses when caching is enabled for select queries. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + */ + createQuery< + Document extends Models.Document = Models.DefaultDocument, + >(params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's documents in a given collection using a POST request. This behaves identically to the list documents endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} collectionId - Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for cached responses when caching is enabled for select queries. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + collectionId: string, + queries?: string[], + transactionId?: string, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, string?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + collectionId: string; + queries?: string[]; + transactionId?: string; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + collectionId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const collectionId = params.collectionId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof collectionId === 'undefined' || collectionId === '') { + throw new AppwriteException( + 'Missing required parameter: "collectionId"', + ); + } + + const apiPath = + '/documentsdb/{databaseId}/collections/{collectionId}/documents/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace( + '{collectionId}', + encodeURIComponent(String(collectionId)), + ); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'documentList', + models: { + documentList: { + defaults: { + total: 0, + documents: [], + }, + properties: { + documents: { + items: 'document', + }, + }, + }, + document: { + defaults: { + $id: '', + $sequence: '', + $collectionId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. * diff --git a/src/services/storage.ts b/src/services/storage.ts index f14c66cf..738745ca 100644 --- a/src/services/storage.ts +++ b/src/services/storage.ts @@ -2,7 +2,7 @@ import { Service } from '../service'; import { AppwriteException, Client, applyDefaults } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; -import * as FileSystem from 'expo-file-system'; +import { fileSystem } from '../lib/file-system'; import { Platform as RNPlatform } from 'react-native'; import { ImageGravity } from '../enums/image-gravity'; @@ -329,6 +329,8 @@ export class Storage extends Service { accept: 'application/json', }; + const FileSystem = fileSystem(); + const size = file.size; if (size <= Service.CHUNK_SIZE) { @@ -399,12 +401,20 @@ export class Storage extends Service { async () => firstChunk, ); - response = await this.client.call( - 'post', - uri, - firstChunkHeaders, - apiPayload, - ); + try { + response = await this.client.call( + 'post', + uri, + firstChunkHeaders, + apiPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(firstPath, { + idempotent: true, + }).catch(() => undefined); + } + } offset = firstChunkEnd; if (onProgress) { @@ -483,12 +493,21 @@ export class Storage extends Service { async () => chunkData, ); - const chunkResponse = await this.client.call( - 'post', - uri, - chunkHeaders, - chunkPayload, - ); + let chunkResponse; + try { + chunkResponse = await this.client.call( + 'post', + uri, + chunkHeaders, + chunkPayload, + ); + } finally { + if (RNPlatform.OS.toLowerCase() === 'android') { + await FileSystem.deleteAsync(chunkPath, { + idempotent: true, + }).catch(() => undefined); + } + } if (failed) { return chunkResponse; diff --git a/src/services/tables-db.ts b/src/services/tables-db.ts index 20a11bc1..f0ed6e9c 100644 --- a/src/services/tables-db.ts +++ b/src/services/tables-db.ts @@ -538,12 +538,14 @@ export class TablesDB extends Service { /** * Get a list of all the user's rows in a given table. You can use the query params to filter your results. * + * Rows returned by aggregate, groupBy or distinct queries hold only the columns they select, group or aggregate, typed as a row types them, with a joined column named by its join alias (`alias.column`). The response omits their `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` and `$tableId` unless they select or group it, and those of a right or full join row that no row of this table matched. SDK row models fill omitted system columns with empty values. + * * @param {string} params.databaseId - Database ID. * @param {string} params.tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} params.transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise} */ @@ -558,12 +560,14 @@ export class TablesDB extends Service { /** * Get a list of all the user's rows in a given table. You can use the query params to filter your results. * + * Rows returned by aggregate, groupBy or distinct queries hold only the columns they select, group or aggregate, typed as a row types them, with a joined column named by its join alias (`alias.column`). The response omits their `$id`, `$sequence`, `$createdAt`, `$updatedAt`, `$permissions`, `$databaseId` and `$tableId` unless they select or group it, and those of a right or full join row that no row of this table matched. SDK row models fill omitted system columns with empty values. + * * @param {string} databaseId - Database ID. * @param {string} tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. * @param {string} transactionId - Transaction ID to read uncommitted changes within the transaction. * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. - * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Must be between 0 and 86400 (24 hours). + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). * @throws {AppwriteException} * @returns {Promise>} * @deprecated Use the object parameter style method for a better developer experience. @@ -889,6 +893,177 @@ export class TablesDB extends Service { return request.then((response) => applyDefaults(response, defaults)); } + /** + * Get a list of all the user's rows in a given table using a POST request. This behaves identically to the list rows endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} params.databaseId - Database ID. + * @param {string} params.tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). + * @param {string[]} params.queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} params.transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} params.total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} params.ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise} + */ + createQuery(params: { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }): Promise>; + /** + * Get a list of all the user's rows in a given table using a POST request. This behaves identically to the list rows endpoint but accepts the queries in the request body, allowing much larger `queries` arrays than can fit in a URL query string. + * + * + * @param {string} databaseId - Database ID. + * @param {string} tableId - Table ID. You can create a new table using the TablesDB service [server integration](https://appwrite.io/docs/products/databases/tables#create-table). + * @param {string[]} queries - Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. + * @param {string | null} transactionId - Transaction ID to read uncommitted changes within the transaction. + * @param {boolean} total - When set to false, the total count returned will be 0 and will not be calculated. + * @param {number} ttl - TTL (seconds) for caching list responses. Responses are stored in an in-memory key-value cache, keyed per project, table, schema version (columns and indexes), caller authorization roles, and the exact query — so users with different permissions never share cached entries. Schema changes invalidate cached entries automatically; row writes do not, so choose a TTL you are comfortable serving as stale data. Set to 0 to disable caching. Lists with join queries are not cached. Must be between 0 and 86400 (24 hours). + * @throws {AppwriteException} + * @returns {Promise>} + * @deprecated Use the object parameter style method for a better developer experience. + */ + createQuery( + databaseId: string, + tableId: string, + queries?: string[], + transactionId?: string | null, + total?: boolean, + ttl?: number, + ): Promise>; + createQuery( + paramsOrFirst: + | { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + } + | string, + ...rest: [string?, string[]?, (string | null)?, boolean?, number?] + ): Promise> { + let params: { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + + if ( + paramsOrFirst && + typeof paramsOrFirst === 'object' && + !Array.isArray(paramsOrFirst) + ) { + params = (paramsOrFirst || {}) as { + databaseId: string; + tableId: string; + queries?: string[]; + transactionId?: string | null; + total?: boolean; + ttl?: number; + }; + } else { + params = { + databaseId: paramsOrFirst as string, + tableId: rest[0] as string, + queries: rest[1] as string[], + transactionId: rest[2] as string | null, + total: rest[3] as boolean, + ttl: rest[4] as number, + }; + } + + const databaseId = params.databaseId; + const tableId = params.tableId; + const queries = params.queries; + const transactionId = params.transactionId; + const total = params.total; + const ttl = params.ttl; + + if (typeof databaseId === 'undefined' || databaseId === '') { + throw new AppwriteException( + 'Missing required parameter: "databaseId"', + ); + } + + if (typeof tableId === 'undefined' || tableId === '') { + throw new AppwriteException( + 'Missing required parameter: "tableId"', + ); + } + + const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/query' + .replace('{databaseId}', encodeURIComponent(String(databaseId))) + .replace('{tableId}', encodeURIComponent(String(tableId))); + const apiPayload: Payload = {}; + + if (typeof queries !== 'undefined') { + apiPayload['queries'] = queries; + } + + if (typeof transactionId !== 'undefined') { + apiPayload['transactionId'] = transactionId; + } + + if (typeof total !== 'undefined') { + apiPayload['total'] = total; + } + + if (typeof ttl !== 'undefined') { + apiPayload['ttl'] = ttl; + } + + const uri = new URL(this.client.config.endpoint + apiPath); + const request = this.client.call( + 'post', + uri, + { + 'X-Appwrite-Project': this.client.config.project, + 'content-type': 'application/json', + accept: 'application/json', + }, + apiPayload, + ); + const defaults = { + root: 'rowList', + models: { + rowList: { + defaults: { + total: 0, + rows: [], + }, + properties: { + rows: { + items: 'row', + }, + }, + }, + row: { + defaults: { + $id: '', + $sequence: '', + $tableId: '', + $databaseId: '', + $createdAt: '', + $updatedAt: '', + $permissions: [], + }, + }, + }, + }; + + return request.then((response) => applyDefaults(response, defaults)); + } + /** * Get a row by its unique ID. This endpoint response returns a JSON object with the row data. * diff --git a/tsconfig.json b/tsconfig.json index c7292aa8..0bc3af2b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "lib": ["ESNext", "DOM"], "listEmittedFiles": false, "listFiles": false, - "moduleResolution": "node", + "moduleResolution": "bundler", "noFallthroughCasesInSwitch": true, "pretty": true, "rootDir": "src", From 4c0f3778b72a15e8709f2abe8e7e72841e3142f3 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Tue, 27 Oct 2026 16:02:24 +0000 Subject: [PATCH 3/4] chore: update React Native SDK to 3.1.0 --- .github/workflows/publish.yml | 4 +- CHANGELOG.md | 8 + README.md | 4 +- docs/examples/oauth2/authorize-post.md | 2 +- docs/examples/oauth2/authorize.md | 2 +- docs/examples/storage/update-file.md | 2 +- package-lock.json | 862 +++++++++++++------------ package.json | 18 +- src/client.ts | 12 +- src/lib/tcp-stream.ts | 2 + src/services/account.ts | 57 +- src/services/analytics.ts | 8 +- src/services/apps.ts | 73 +-- src/services/avatars.ts | 14 +- src/services/databases.ts | 106 ++- src/services/documents-db.ts | 113 ++-- src/services/functions.ts | 15 +- src/services/messaging.ts | 16 +- src/services/oauth-2.ts | 40 +- src/services/organization.ts | 13 +- src/services/presences.ts | 15 +- src/services/push.ts | 1 + src/services/storage.ts | 47 +- src/services/tables-db.ts | 67 +- src/services/teams.ts | 74 +-- src/services/vectors-db.ts | 84 +-- 26 files changed, 810 insertions(+), 849 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1775eff9..3c96add7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -27,8 +27,10 @@ jobs: - name: Determine release tag id: release_tag + env: + REF: ${{ github.ref }} run: | - if [[ "${{ github.ref }}" == *"-rc"* ]] || [[ "${{ github.ref }}" == *"-RC"* ]]; then + if [[ "$REF" == *"-rc"* ]] || [[ "$REF" == *"-RC"* ]]; then echo "tag=next" >> "$GITHUB_OUTPUT" else echo "tag=latest" >> "$GITHUB_OUTPUT" diff --git a/CHANGELOG.md b/CHANGELOG.md index b966b674..a45b97d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change log +## 3.1.0 + +* Updated: requests send `X-Appwrite-Response-Format: 2.6.2`; the SDK targets Appwrite 2.6.x +* Updated: `mqtt` dependency to `5.16.1` and `readable-stream` to `4.8.0` +* Fixed: `Push` reconnects after the broker rejects a connection or the native socket closes +* Fixed: path parameters `.` and `..` throw `AppwriteException` instead of changing the request URL +* Fixed: examples leave unset optional params `undefined` instead of passing empty strings + ## 3.0.0 * Breaking: `expo-file-system` is a peer dependency (`>=18.0.0`); install it in your app diff --git a/README.md b/README.md index 88c07d62..6db4ff0c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Appwrite React Native SDK ![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg?style=flat-square) -![Version](https://img.shields.io/badge/api%20version-2.5.0-blue.svg?style=flat-square) +![Version](https://img.shields.io/badge/api%20version-2.6.2-blue.svg?style=flat-square) [![X Account](https://img.shields.io/badge/follow-%40appwrite-000000?logo=x&style=flat-square)](https://x.com/appwrite) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord) -**This SDK targets Appwrite server version 2.5.x as shipped on Appwrite Cloud.** Self-hosted releases can lag behind Cloud — if you run an older self-hosted build, use a matching older SDK from [previous releases](https://github.com/appwrite/sdk-for-react-native/releases) when APIs differ. +**This SDK targets Appwrite server version 2.6.x as shipped on Appwrite Cloud.** Self-hosted releases can lag behind Cloud — if you run an older self-hosted build, use a matching older SDK from [previous releases](https://github.com/appwrite/sdk-for-react-native/releases) when APIs differ. Appwrite is an open-source backend as a service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the React Native SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) diff --git a/docs/examples/oauth2/authorize-post.md b/docs/examples/oauth2/authorize-post.md index f7dd540c..f1250504 100644 --- a/docs/examples/oauth2/authorize-post.md +++ b/docs/examples/oauth2/authorize-post.md @@ -10,7 +10,7 @@ const oauth2 = new Oauth2(client); const result = await oauth2.authorizePost({ clientId: '', // optional redirectUri: 'https://example.com', // optional - responseType: '', // optional + responseType: undefined, // optional scope: '', // optional state: '', // optional nonce: '', // optional diff --git a/docs/examples/oauth2/authorize.md b/docs/examples/oauth2/authorize.md index 256e9cb6..5c078cf1 100644 --- a/docs/examples/oauth2/authorize.md +++ b/docs/examples/oauth2/authorize.md @@ -10,7 +10,7 @@ const oauth2 = new Oauth2(client); const result = await oauth2.authorize({ clientId: '', // optional redirectUri: 'https://example.com', // optional - responseType: '', // optional + responseType: undefined, // optional scope: '', // optional state: '', // optional nonce: '', // optional diff --git a/docs/examples/storage/update-file.md b/docs/examples/storage/update-file.md index 417fb811..6e5286e5 100644 --- a/docs/examples/storage/update-file.md +++ b/docs/examples/storage/update-file.md @@ -10,7 +10,7 @@ const storage = new Storage(client); const result = await storage.updateFile({ bucketId: '', fileId: '', - name: '', // optional + name: undefined, // optional permissions: [Permission.read(Role.any())], // optional }); diff --git a/package-lock.json b/package-lock.json index 224efa11..795eede6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,35 @@ { "name": "react-native-appwrite", - "version": "3.0.0", + "version": "3.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-appwrite", - "version": "3.0.0", + "version": "3.1.0", "license": "BSD-3-Clause", "dependencies": { "buffer": "6.0.3", "json-bigint": "1.0.0", - "mqtt": "5.15.2", + "mqtt": "5.16.1", "process": "0.11.10", - "readable-stream": "4.7.0" + "readable-stream": "4.8.0" }, "devDependencies": { "@eslint/js": "10.0.1", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", - "@types/node": "24.9.2", - "@types/readable-stream": "4.0.24", - "eslint": "10.10.0", + "@types/node": "24.19.2", + "@types/readable-stream": "4.0.25", + "eslint": "10.13.0", "expo-file-system": "58.0.9", "playwright": "1.59.0", - "prettier": "3.9.6", - "rollup": "4.63.2", + "prettier": "3.9.10", + "rollup": "4.64.10", "serve-handler": "6.1.7", "tslib": "2.8.1", "typescript": "5.9.3", - "typescript-eslint": "8.70.0" + "typescript-eslint": "8.71.2" }, "engines": { "node": ">=20.0.0" @@ -1334,32 +1334,32 @@ } }, "node_modules/@expo/cli": { - "version": "58.1.11", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.11.tgz", - "integrity": "sha512-wkFTSLXXYqLkRT5oy4DnLuTOtbFIu3qTiXHSHkFSqUBTHiE92y3bOIwM3UN7Y1ys18qVJge8lXjezaEfsHmijQ==", + "version": "58.1.14", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.14.tgz", + "integrity": "sha512-Qrpkhb9XrQn+wuxaOVR0hh0dLzeFZjGZHC9Jz86hPsexPzP+/mnMigRoWVaeEP8q7b3Hsr98gozL5d94DzFOBw==", "license": "MIT", "peer": true, "dependencies": { "@expo/code-signing-certificates": "^0.0.7", - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/devcert": "^1.2.2", - "@expo/env": "~2.5.2", + "@expo/env": "~2.5.3", "@expo/image-utils": "^0.12.5", - "@expo/inline-modules": "^0.2.6", + "@expo/inline-modules": "^0.2.7", "@expo/json-file": "^11.2.1", - "@expo/log-box": "^58.0.12", + "@expo/log-box": "^58.0.13", "@expo/log-box-utils": "^58.0.2", "@expo/metro": "~58.0.0", - "@expo/metro-config": "58.0.14", + "@expo/metro-config": "58.0.16", "@expo/metro-file-map": "^58.0.5", "@expo/osascript": "^2.8.1", "@expo/package-manager": "^1.14.2", "@expo/platforms": "^58.0.1", "@expo/plist": "^0.10.1", - "@expo/prebuild-config": "^58.0.14", + "@expo/prebuild-config": "^58.0.15", "@expo/require-utils": "^58.0.4", - "@expo/router-server": "^58.0.14", + "@expo/router-server": "^58.0.16", "@expo/schema-utils": "^58.0.2", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.1", @@ -1435,13 +1435,13 @@ } }, "node_modules/@expo/config": { - "version": "58.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.6.tgz", - "integrity": "sha512-PT1qv4s/R5A/NxXb4efGlFsYF5Consi7F8xSsJBAN090EGDr6U1EDQGOijFqzDc3JA2epD8zjKLJLOVB9YOewg==", + "version": "58.0.7", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.7.tgz", + "integrity": "sha512-FzpIEDVLNHNeztnWxvg1Oh6WJQwd5nXBgZILrrE9rG7GPjWBf3KbFr4qpqLe/QUeyuzPhHyfIbxMMUjiRBBgCQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~58.0.9", + "@expo/config-plugins": "~58.0.10", "@expo/config-types": "^58.0.3", "@expo/json-file": "^11.2.1", "@expo/platforms": "^58.0.1", @@ -1455,9 +1455,9 @@ } }, "node_modules/@expo/config-plugins": { - "version": "58.0.9", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.9.tgz", - "integrity": "sha512-HyP7V1QgDxeHcOEh4qQH7cfK7cI7wNp0y9lszAu98SRYCshhDbwB9gWpFfnpX1GQUtgiqG4Hvgh1z3ntcGwAjw==", + "version": "58.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.10.tgz", + "integrity": "sha512-oW0geRREubSsqV2d0EwkK0rRcAoB7a68CnJx7s8Al33HoTtEg7KLTQNcKlSTmmwoUESQQvAmzNqAZy4ajuCBKA==", "license": "MIT", "peer": true, "dependencies": { @@ -1472,7 +1472,7 @@ "glob": "^13.0.0", "semver": "^7.7.4", "slugify": "^1.6.6", - "xcode": "^3.0.1", + "xcode": "^4.0.0", "xml2js": "0.6.0" } }, @@ -1543,9 +1543,9 @@ } }, "node_modules/@expo/env": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.2.tgz", - "integrity": "sha512-z8kCvBVJpd2S20a+Ab1otQgz8sJLeR7CXDTsuAMcNbYFsK10Fdhfb7rx9Ys1vvlbijnY55eZhQvJACajc1IjBQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.3.tgz", + "integrity": "sha512-dBGu8BAfvUcXvG4HvYth+EhcHEsdC+/fT6HTH/zFvvwfp50LG6uzpzT8TXObwEq/t2B/rvAMV5OolxQ46LWXHg==", "license": "MIT", "peer": true, "dependencies": { @@ -1558,13 +1558,13 @@ } }, "node_modules/@expo/fingerprint": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.5.tgz", - "integrity": "sha512-4ngc+aPgMK56sYc47tfabmoaNdP7OvPBOH7QPgN3riSYM0Ev+KwsGRDius5jBBwjCI9ADp7IpjJEK9xlRYjjvA==", + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.6.tgz", + "integrity": "sha512-EKh7ak+SYwXjvX/4P7BcyeLxip2z9KAsnN/55VP10g8H1Ua4Dm/BgLAhgBcbzbsYretYmNEynAcf9oKCK9pjxA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "^2.5.2", + "@expo/env": "^2.5.3", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -1597,13 +1597,13 @@ } }, "node_modules/@expo/inline-modules": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.6.tgz", - "integrity": "sha512-S8PK3wx6ogwunoQ7pqdPbklQGtXloeWTAOzWJ9yIL7xHFxvnI/Ryj0phA3KEGCMlaKZjaCP1h/3s7n/ueErRgQ==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.7.tgz", + "integrity": "sha512-jjVtmz1LDhohT19U1fwMSL1kVUVZ9ewHdlEoDwSoZd3QELpyUR54nL677nHUbz0nNA5eh/zk38nByi03T06rLg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~58.0.9" + "@expo/config-plugins": "~58.0.10" } }, "node_modules/@expo/json-file": { @@ -1618,20 +1618,20 @@ } }, "node_modules/@expo/local-build-cache-provider": { - "version": "58.0.6", - "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.6.tgz", - "integrity": "sha512-AJk3pslFNlwRMbUbfvxhu6CPA9U7A+JPb88VS/uWkG/S/QMJL90Iw4sPVfG4BOKfRUNkB8ipl432Dr4txjSMKw==", + "version": "58.0.7", + "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.7.tgz", + "integrity": "sha512-RlpFBiduGKpcltNMDVMCEx+YfxsmMVORh5dOuJ1ntdq8igiJv1Qg9nIpRWqFuHL8iY70woRIqG8Ov/txJuHONA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~58.0.6", + "@expo/config": "~58.0.7", "chalk": "^4.1.2" } }, "node_modules/@expo/log-box": { - "version": "58.0.12", - "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.12.tgz", - "integrity": "sha512-IzDYoFY2iUsmSDvl1V7YUM7UkCPDyMVS4e4a38c2LnFc1A3WGMUiQh+vsHLYTPKjIelu4r7/u4V7Gxtfa0oJgA==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.13.tgz", + "integrity": "sha512-Cl9qc77nWjQVivUI5/OCPSEP8s20EtbK3Ivy5ayy+uHO0Cf+XatatWfTvKiHO38VOpT2ywlROzZb4XZyxZUZ1Q==", "license": "MIT", "peer": true, "dependencies": { @@ -1683,17 +1683,17 @@ } }, "node_modules/@expo/metro-config": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.14.tgz", - "integrity": "sha512-UDUMAJwYGEzaB26ejMLG/IOVzwKDbHzoODBf3FZeRS94kk9jDf1dWE1VMX6bLBLoiflxXwqrMWiH0Fvz3gZ9YQ==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.16.tgz", + "integrity": "sha512-njvkkNGe2joPmIwoquGTmlmt24q4zYfQs0AIEh5XAyK7o6oVIB/t5EjS4j3f+P6v+ib9U7vxmo62T5+/Dy2pcg==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~58.0.6", - "@expo/env": "~2.5.2", + "@expo/config": "~58.0.7", + "@expo/env": "~2.5.3", "@expo/json-file": "~11.2.1", "@expo/metro": "~58.0.0", "@expo/platforms": "^58.0.1", @@ -1713,7 +1713,7 @@ "hermes-parser": "^0.36.0", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", - "noxcturnal": "^0.1.0", + "noxcturnal": "^0.1.8", "picomatch": "^4.0.4", "postcss": "^8.5.23", "resolve-from": "^5.0.0" @@ -1742,10 +1742,44 @@ "walker": "^1.0.8" } }, + "node_modules/@expo/modules-macros-linux-arm64": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-linux-arm64/-/modules-macros-linux-arm64-0.22.0.tgz", + "integrity": "sha512-FGXyxpZMEJ4pDPCeCBjfBjftCbk03P/1Rf6UkFoL22joqu4XXt+XUsjfTzyKBzP9pAXL39FVdbNClwk529CEEQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@expo/modules-macros-linux-x64": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-linux-x64/-/modules-macros-linux-x64-0.22.0.tgz", + "integrity": "sha512-4yN4cZTCUWkq1Olr0/lA57gFan8+MEo7K3K0cx0bB3TUEqHgL/hyJN79vQKXlp9NWTnOxO7J5uwqMQkQwfh6aw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, "node_modules/@expo/modules-macros-win32-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.20.0.tgz", - "integrity": "sha512-7B57gc7+TeygPcK8fLYlEhJbbvaPh+JBzex11YIYZrSzbFhz7Q+Z37fSdAfp4EsfCswJNcX0S6wpkgSlVNefVw==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.22.0.tgz", + "integrity": "sha512-nLDXRGZWKNERzP4zH9LdfdZ3jvPBQcQE7LX5UnWW4cnDE/GoiVyUKdXQFK+KRnMD6We5gxqhIOU6SLj74h6fHA==", "cpu": [ "arm64" ], @@ -1757,9 +1791,9 @@ "peer": true }, "node_modules/@expo/modules-macros-win32-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.20.0.tgz", - "integrity": "sha512-BM5a2U2tCyHzmtiSEY70KPsts82Mfy1bHSZ7AUbg6z9LcnxuThxJlcH85/SV5eFbhrPfgDBAG/WAncyZCvKvyA==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.22.0.tgz", + "integrity": "sha512-IT5/YsBTj2gnfNlxDfv3sC51rBudiSHbPFBKoPBbpwmTCMcQg1rmWVdUoiy7LLC48NNzm86wyMxHpSI5lkW1Gg==", "cpu": [ "x64" ], @@ -1818,20 +1852,20 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.14.tgz", - "integrity": "sha512-2wVzVDfXjRB3LzUbW5shOM/A+6eUUCfR+2bpZiWRBBZBtZP2HA5Zq1YgCio1tDqMGAHf2NQQDhvy/Rz1U6aC3A==", + "version": "58.0.15", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.15.tgz", + "integrity": "sha512-1qvYdhCRO3iu2iPtTNhVTetk5U3Cmby/MMDQmunFQ94jyrbtpLyb9PvU6bvvRdzoaC7PZbHp3Xvlwtx+Webx9A==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/config-types": "^58.0.3", "@expo/image-utils": "^0.12.5", "@expo/json-file": "^11.2.1", "@react-native/normalize-colors": "0.88.0", "debug": "^4.3.1", - "expo-modules-autolinking": "~58.0.13", + "expo-modules-autolinking": "~58.0.14", "resolve-from": "^5.0.0", "semver": "^7.7.4" } @@ -1857,19 +1891,19 @@ } }, "node_modules/@expo/router-server": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.14.tgz", - "integrity": "sha512-RSzQYMA+Tv2eTemhjhzpx8+hL+pMC30JTVqAWrk5AZwht+OgaKZar/gHmj4iJf7n3rq+GG6KujrkKF9xAXLz2w==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.16.tgz", + "integrity": "sha512-pBts7H/ntTcmJnn/2T2Wfpm2XNu+yp7FVJbB9iKG+pqEDqH7PEFpts1Ju80OXQHL1sDQKhUVMe0TCNp+tclp1w==", "license": "MIT", "peer": true, "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { - "@expo/metro-runtime": "^58.0.14", + "@expo/metro-runtime": "^58.0.15", "expo": "*", - "expo-constants": "^58.0.12", - "expo-font": "^58.0.8", + "expo-constants": "^58.0.13", + "expo-font": "^58.0.9", "expo-router": "*", "expo-server": "^58.0.5", "react": "*", @@ -2163,9 +2197,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-darwin-arm64": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.5.tgz", - "integrity": "sha512-hQgDaWxKYln83Uk1Hh4Liju9AvGoYh4aLd4A1ou3lGn5hxzhW2uO+z3mERtWk6BMGVazvi/yUXtp9x3IlaWyhA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.8.tgz", + "integrity": "sha512-IaKvOx7pb7nr+OQ4rm6VKO4z4a7BfqBrvxcDYfvtOHRq9yVylrph0crkWJRgxskGlaBrLMrNiWYHvFqrd0hRSA==", "cpu": [ "arm64" ], @@ -2180,9 +2214,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-darwin-x64": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.5.tgz", - "integrity": "sha512-I57zR8QF7Xam+4nGD5UoIODsw0VjkVyn51iDBL3CMaDR5Lh1OxXwKZMYKtv3CtQl+RSDsMfmXBEqGYLE8lIPHg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.8.tgz", + "integrity": "sha512-Fb6Ak5vvDvrroakL+wqN+YWB4QdrPSkqaZEE2vM2xEacFozsCckzx3cDzSeA1uFOK52LPEzY5n9ylkGDjw5WcQ==", "cpu": [ "x64" ], @@ -2197,9 +2231,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-arm64-gnu": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.5.tgz", - "integrity": "sha512-gVH4XJPh8RdrdjjlU0dKeielQt/FXfvqhr8IEWEf3VeNtQs8l2rPzFPdqS0uwLWQYHLBGgB0LkuOil1KKYx1gQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.8.tgz", + "integrity": "sha512-P0zDdjt1Y3bhi790BJBLV84CRTFedHouV11VQMu8kiCgc+Y+fxVnmob2D6DBvyk8INdTnfxz4cXUMA7DgG9Qxg==", "cpu": [ "arm64" ], @@ -2217,9 +2251,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-arm64-musl": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.5.tgz", - "integrity": "sha512-rzQ075fcHZ+ebsELussRjnW8WBMy1RuLdS8wSqBGhdVlPR7/NaSyoWkNxnVDT8sEO26xjqGoW/o/08ghBzr/zA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.8.tgz", + "integrity": "sha512-Pd6DMObIX0Brh4Sj/kon9F0766Fw7DKjVLrjptITcmeE44jKJAWNihPC3dTbgkgb/9Q2inp0VGLFRW19+073bQ==", "cpu": [ "arm64" ], @@ -2237,9 +2271,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-x64-gnu": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.5.tgz", - "integrity": "sha512-X5O0lXMrv8HGOGoXDB1PG0Hjt7Rl+MJA+seR2NecQvUAAw2gzDvF/unCV5sqTAVeHfXhBHEFGkLenHZSD44efg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.8.tgz", + "integrity": "sha512-gPAYMhvQmN1BOK5fPII9f3TGtUaR71fCFsKNFoYsiTMs8MidFkkkSvSpawDNubgFMBqYaO38mKtKAW1AuXCnMw==", "cpu": [ "x64" ], @@ -2257,9 +2291,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-x64-musl": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.5.tgz", - "integrity": "sha512-fkQIQHRxqldNXVmjxfeCvGOiLhLU9SLBw1As02pMA2xjyiZfiXcUn4SUrZ92ciGnyCS8/XMbx+nZSxgEc3qDPw==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.8.tgz", + "integrity": "sha512-dhQuKKN75YTCgjjh/txGBP6Lc2L9/HMqyeBEMLWkyFlq1u2OC0j8HeGQtzKjP5cnLiibrn0JgcuLJqDSklxuMg==", "cpu": [ "x64" ], @@ -2277,9 +2311,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-win32-arm64-msvc": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.5.tgz", - "integrity": "sha512-baeH5m/vM1nf0J2UkW8cfgiVogpM0gRO9b4PZWknXQPbv5+k+0N5sGOYl/UAO2q72qYb3Xbiu7eD8c4A2kR2SA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.8.tgz", + "integrity": "sha512-ltg2UV1I/hdux6rPSF0RTlh2V2F7NXuqp3AdbwAGexEqxbXFdy2tw2hwmsUrCbIgwrXsjlijpgsOl5JEXRc84w==", "cpu": [ "arm64" ], @@ -2294,9 +2328,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-win32-x64-msvc": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.5.tgz", - "integrity": "sha512-2faDMzom8pCG/s/uR4Czh1atz4KohI85AaSmA2vtAuVnCq+nLL4Viys3A5vUlNz9MNBmTNFxzXyF2Z5HtfxXLg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.8.tgz", + "integrity": "sha512-A39bKv270jJnC5NN6mAy46E2d3LPywjrbmNJhgckPQNldV9acTYUKZcySCYeLgP/2yAVUh3UFSjo84pFX2npVw==", "cpu": [ "x64" ], @@ -2533,9 +2567,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", - "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.5.1.tgz", + "integrity": "sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug==", "dev": true, "license": "MIT", "dependencies": { @@ -2556,9 +2590,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.2.tgz", - "integrity": "sha512-Xa6RDoWa+hNiX6PgsljlH6W75RaONx3y6PVlbLhkEWW+GaPQ3dP5gwbL/erAzQHWwkvW5UxdD5l87Qx2FAQ/4A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.10.tgz", + "integrity": "sha512-oJ9ZfVIZjSjts0ZIYA48+5T0vurE5fQfX/Liad2U52Y6EN99x/OCdjGGuKMDP6jSk2i2lY6jwwA3X0drEc4PBg==", "cpu": [ "arm" ], @@ -2570,9 +2604,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.2.tgz", - "integrity": "sha512-vNASxsghMfQ5s+v3PrpnJd+ryL/26lxCCaGI+sDJ7VzmHiYXIrrVltsDhaawxLM1WcoMU2oYlbPHLaYQtBzhcg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.10.tgz", + "integrity": "sha512-LylBINgYYwgHNz8OMCy5+Y0w/LEgRYE0PcAIZfEuTuLNMf0S40GSLX6SFwqZsBLplS7RIHHy4zOAbl8Y5cQEvg==", "cpu": [ "arm64" ], @@ -2584,9 +2618,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.2.tgz", - "integrity": "sha512-0dWDjmlrpZAgjPD/aPzUDhBW8APLRjAni5bOrM76wiiZm+E+KTMVKNhAzaTBohz8UyO2fKNAl0+fygbe2HZXOA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.10.tgz", + "integrity": "sha512-vbuT3VT1GBI2fAOoUJUrsHVoOg9nbrFXTM7e3DSnb9PYf4n6jZCN8v4Vo8O6x4u5B67+/c803b8BtCZe2nIeqA==", "cpu": [ "arm64" ], @@ -2598,9 +2632,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.2.tgz", - "integrity": "sha512-N58uktcwzk3+qT4KHEuNdIxX1N01RWrkfVoml69EAbSaNDL+sbNVLx2RMl4Qd23lpA0fgPvyh5hHb4weD5WKmg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.10.tgz", + "integrity": "sha512-qYUp/qYvM3T4cF+VWalPl+przBUESILxi+qZ1m1MVRHpg06vS+jHaxXubjCaRpXjLJPDFdXzOZ0FABDghHOhNQ==", "cpu": [ "x64" ], @@ -2612,9 +2646,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.2.tgz", - "integrity": "sha512-HWF2zH8EAp2scWRpt2PGe6iUGz7zi04waXsdRr3zb4DWCk2ImIo5FZu0jjmD53nP/DGSvnW0e7/1ToCNZs2lZw==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.10.tgz", + "integrity": "sha512-v9NRQG+JztbP4DP/0yuhSyDcEJk047lYbqeNnqIgbXITcVDjGDS7OpkW5nadSY3tJ7MY8W1qIMMqP4Q3Q8BDjQ==", "cpu": [ "arm64" ], @@ -2626,9 +2660,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.2.tgz", - "integrity": "sha512-MkvcwHMnzPSMOQEwB6wHnLzmc+hT8BGc5bW/Mhmjjgx3wbj6VBnlc47XsK74kD0K9MikFfXpQqyz4NUXaUW62A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.10.tgz", + "integrity": "sha512-CHc9LBHdxhn6/NXfb9IegXCWoz5VlvcDOx9QrzZ9q+XYhFlfzwymSWJjOlZcEMMtC1zgMV7qxDe6U18AI1SG0A==", "cpu": [ "x64" ], @@ -2640,9 +2674,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.2.tgz", - "integrity": "sha512-xe1bCKPJaKsD0tfd7Rb6bGfUogJTpKbTEEthsfdb7hTfTRNJVQTdirabQx0o6ERVba/smkM720soMY+0QnrlSQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.10.tgz", + "integrity": "sha512-ble2WR7kWfzZFJUd3ODMGCJn1XDszptfRC0QvWc0h9/EA6MxnrQ1mvbjPZifEdgHyfHhDrwWeKeJONDITcrHSg==", "cpu": [ "arm" ], @@ -2657,9 +2691,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.2.tgz", - "integrity": "sha512-yOM7LdK0p6gk6+Q773OEwtlsikT1TL3yMmYsTtRlDRPha5vV2DC5x7LqRWDr6f3cSYNMKVqxzffXv8ivxNBIFQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.10.tgz", + "integrity": "sha512-DMCYegihxBMKvLpODdk4OsvIgxtHTi+Oddf1Pm3d6wMVNjcBiG2pqyXjMPy55HgG1gCdEFr9VfhB1CmvuKn1lw==", "cpu": [ "arm" ], @@ -2674,9 +2708,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.2.tgz", - "integrity": "sha512-qiWuJJV3DybA2IfzvRimeKXGrGuVPv1zobSY/26KnP3HbV0VcNb3ECzgvtbvF3xjSMkcooou6HASXZuLdjnhpQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.10.tgz", + "integrity": "sha512-HQ6HuVH9TmhvPWIas7MA/KeAROgdwqH3REpUU6hZq47NW7m1b1QCrHgM+M3+N/B8DfMt88x1/z79ppRc9RflCQ==", "cpu": [ "arm64" ], @@ -2691,9 +2725,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.2.tgz", - "integrity": "sha512-akcZquRzCY/KpUoZAMBhGf7oi4LmXq1BzRA5CPAC3rkUf28Y/sAYV3jSL+JKd7cwEyFvR5G0XVZ0gaMedP+60A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.10.tgz", + "integrity": "sha512-avBhxba1DdctX0kxKkN3JWdTSg72QsxSn6FdfhZ9MkL3TTYDOXqxY1GqbC7VNttlgviK7tCe2No5btfRkFgeIg==", "cpu": [ "arm64" ], @@ -2708,9 +2742,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.2.tgz", - "integrity": "sha512-fNwYHrPyYyxauPzX/cpYw8Z7LQpp+DGA0KCoswA0aVFBpmdMil9XgjB8V3Ny64Ihu797+GKcuJqnsOKEmor7fA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.10.tgz", + "integrity": "sha512-UtQMex7fiXq0W/GqcWRpy6XKqUbXgQeGKB+Bd5rJngmHzpI+3kjwpWFLAhKg02onFsIMSh+Zx0zp9JIMQ7/05A==", "cpu": [ "loong64" ], @@ -2725,9 +2759,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.2.tgz", - "integrity": "sha512-XfvsgzR7DZqREdst7K1Mj3ilSUM5xLAHJcIMDFPKdxTs9q5VHOT8aMA+a683fqBu7DQl8+Sd9HCsQYL8EMY9qA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.10.tgz", + "integrity": "sha512-0Aum2pUsCSuOopi6oka+nR1DTj/nfvc1xjL979lvh6kXUjNa30TCX7sKFjyMsrX7bK3bNVs0FsJwQcE2HCWX1Q==", "cpu": [ "loong64" ], @@ -2742,9 +2776,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.2.tgz", - "integrity": "sha512-Pp7gVZggEFlbcuztay+/U0gVG9S1XAh8i7I1Re/htbAzo43P5wHZHw6pTyzotISqlKohoh9RpIfnOz3RbemK1w==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.10.tgz", + "integrity": "sha512-4dgsouKal3qfMFORgtNigLPt7K3HXiO6jTr7+nFJv1GWu1OkZx0kvQIXbK4sjrIGnaLBk0s80eQCQ9hPIelLrw==", "cpu": [ "ppc64" ], @@ -2759,9 +2793,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.2.tgz", - "integrity": "sha512-zkgL2xff6i7u5hau/m6FGeS8gRkLEdgLw522WGmdWWlLd9btmNl3S80mcEjtGq+kvgUekQ3+BOYLLLcPlS2LIA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.10.tgz", + "integrity": "sha512-d7NE89try3jisYzBD7J9M5iwfgcrXYC4dwHEjQ3HIWBftvwch1U/cy3iZ26SthtUOyClKiu7iqYiFjQEwiOlqQ==", "cpu": [ "ppc64" ], @@ -2776,9 +2810,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.2.tgz", - "integrity": "sha512-qOheJomrkVCbbHFJ7L3J97cnhfogKqguAQphv26+3ZsAQIF1L19b+dArl//s8rjJHJLz9byykyM8NBP4nmSa1g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.10.tgz", + "integrity": "sha512-dqB5ChSBp91JWXxpCKAS5ZVAE38esKQvdfyqANm0lF5JPiQrXnYwgG3oVBQmuNRcQ1WHkA3j5qYLsrl2CtfhCA==", "cpu": [ "riscv64" ], @@ -2793,9 +2827,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.2.tgz", - "integrity": "sha512-XlxLD54wQhH3FciCgMofxBw27NzUe818gJH410qWvc41UT0ZFcgxVjyX5/EK8MPTupjeVWqN5oy+9pCA9mqfCA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.10.tgz", + "integrity": "sha512-7GMf3vbQQslorWLmfsbi5fdt9RVnglk205XpOMFvW6UY5jE5oJc6JLieQJPHtsYlZ2EO0PtC06nY9Hz/IG8guw==", "cpu": [ "riscv64" ], @@ -2810,9 +2844,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.2.tgz", - "integrity": "sha512-vdryWeRb2bLJZf0Fv/W8se6nvsHe2PkTCxV0meheK3nQE+G90VCJcke51Miy1yQRsfm2uqIyjXOu4wmUzbTtkQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.10.tgz", + "integrity": "sha512-tuKbkB23DKc5LG+irPSUnZZztRHqC3CNmyxeWloueBteHB+i+1HkRCMzAE41lseLDlarybeLhqfibFitKOxKMg==", "cpu": [ "s390x" ], @@ -2827,9 +2861,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.2.tgz", - "integrity": "sha512-bcq2h2pkKmH2po4cZV8VWzO4lL40STyu/nLoFpYMQp9C2tCVNTdcVv86MwSsn3D5s1FBe2Ty1atqvVAUTMimNg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.10.tgz", + "integrity": "sha512-ntHtQOMw7oIshHRF1swV3vyBw+beQt9PeZ04O3D32EeDZUMoHMJuZKp4/fDllH/+xogeK0GUCONVfjjKusqKLg==", "cpu": [ "x64" ], @@ -2844,9 +2878,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.2.tgz", - "integrity": "sha512-EGoo5DMVMRkTId8fuTDaoxVlR5ZTsKULUezRjd9gCw5eeY+DjCvDpZAOlNUvKPGX+7rS1RWx6j+yOpNPx0cUgQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.10.tgz", + "integrity": "sha512-Dlh8q8r145aYgh+N3gNIG1dz35Fz/FCxe5hs/43orDsffjP8S1P4Xz5I4FpSJsDS4LpQw1QmswZkQlUbkCldjQ==", "cpu": [ "x64" ], @@ -2861,9 +2895,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.2.tgz", - "integrity": "sha512-MErl12k7BFHZG1TI9QF/3lSSZARzq9KgNy/FjnqFMCkv+N4RSSzoUCA5h2mqHX4Mox3WaTVKblyzhQ1zRb2ZuQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.10.tgz", + "integrity": "sha512-VBJhHWz/55u45CWFv9OmfSRDgJDVENESgFxSAn13gIKJpTuFJbP4/7ymMZhDfeKFx1zGn1XBsLnNB7Ryy71qww==", "cpu": [ "x64" ], @@ -2875,9 +2909,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.2.tgz", - "integrity": "sha512-ILs8k07Wh4p0PsNY4wYLEaXZKMOpVhrG5QDB0yHhGhuzOfDlnyHN6sflL4El/MpUP1y8uY2lUZrv4oBS6pTT3g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.10.tgz", + "integrity": "sha512-Vjcazg+EEzUfIz+LcaxS6YtbQHo+sv0sCD+5VbwhY504bCKNW4OOreVgKq61pHT2esRQ/+AXYVPStDwxSvAOdw==", "cpu": [ "arm64" ], @@ -2889,9 +2923,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.2.tgz", - "integrity": "sha512-hKgB3nz/TKD3Wv78XEsyXzQsNjvhOHmwKQTvXADGOyU/cIClZDO7DsoggbdmJDPGp5V80tA3Vfv61PaKTLH3LA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.10.tgz", + "integrity": "sha512-jJAaP4El+HWxYkM0jeJghASaFgfnluY0FRHhyHXxU6STs/nBhKMIxIMDrJEFg2ftKz6orX9WAo4diVan5NugNA==", "cpu": [ "arm64" ], @@ -2903,9 +2937,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.2.tgz", - "integrity": "sha512-T4wf1mudIDxN8Q/CWIBJC1u5gQUc+r5mPvlwoSbIvNkyVTP2TAFeobEmst5AQ4gMyAz4sSByVdoTDfvTmGK/8g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.10.tgz", + "integrity": "sha512-bXXdRUfRx9PaHCToKt8R/7wjDV6Tbk/hmSHK0uQBKmD3rj4jkuYndct8uGX77ZuZsePrVkQbWUgPR2jJhCTMpQ==", "cpu": [ "ia32" ], @@ -2917,9 +2951,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.2.tgz", - "integrity": "sha512-tC3IY7qoaD9Ll3/8WJQn49j5V2f/NuI9S41NOE2iM5MPs3sPIvOkVToLcz/7Bz4pyF7PSvrtwu8I/pUrGOSecQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.10.tgz", + "integrity": "sha512-57Idx+VkEOQeG6Ys6sZOBFT7FfbeyxGv9A3k1m+Lf/z2SwqT40rNWbAINzjPHSMoCCBvY7Fnb9RGZWQin/HHAw==", "cpu": [ "x64" ], @@ -2931,9 +2965,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.2.tgz", - "integrity": "sha512-6NHnk/K3eq2ZFYcU1X8g67s9qIJRCOTT92gwLMVBp08dB2uuuwI1/Q/empzL2Bfr2f2WRLJVwpp90RmacQyFkw==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.10.tgz", + "integrity": "sha512-vrvuasIpm/xf+BpZbzgirku0WnrQZMAc+H2Ai26jzqBxYEmQQE4DdJb7h8erkJMfRRipx0ma2Cty8jJwUm9ocQ==", "cpu": [ "x64" ], @@ -3007,18 +3041,18 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "version": "24.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz", + "integrity": "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/readable-stream": { - "version": "4.0.24", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.24.tgz", - "integrity": "sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==", + "version": "4.0.25", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.25.tgz", + "integrity": "sha512-7GsxL8Wd5X3jh73/qgW7WCnbBvGSdD8U3E4Jiuus3/8I+PN20DtlkJtwFhr/sImXfDDQ2Z03i/9wNiIF3TVSsw==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -3051,17 +3085,17 @@ "peer": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz", - "integrity": "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.2.tgz", + "integrity": "sha512-K72/pvT7qpm8q3k8G5u93NCSN1RcLxX5h7Gw0bQpbMXviBHeY6Nx1WEwmk9wP+eKTSQ8ecxvcgt/ZX/rB938xQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/type-utils": "8.70.0", - "@typescript-eslint/utils": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/type-utils": "8.71.2", + "@typescript-eslint/utils": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3074,15 +3108,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.70.0", + "@typescript-eslint/parser": "^8.71.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz", - "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.13.tgz", + "integrity": "sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==", "dev": true, "license": "MIT", "engines": { @@ -3090,16 +3124,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.0.tgz", - "integrity": "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.2.tgz", + "integrity": "sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3" }, "engines": { @@ -3115,14 +3149,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.0.tgz", - "integrity": "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.2.tgz", + "integrity": "sha512-Pd68GsLVh5ZXlcEccFPdhSOvtHZ/2WU0XsA8zmXOS3F158lVlcTLhfQ6qvtL1RzbMie0Kp8xtbVwAg4nejKPHw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.70.0", - "@typescript-eslint/types": "^8.70.0", + "@typescript-eslint/tsconfig-utils": "^8.71.2", + "@typescript-eslint/types": "^8.71.2", "debug": "^4.4.3" }, "engines": { @@ -3137,14 +3171,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.0.tgz", - "integrity": "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.2.tgz", + "integrity": "sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0" + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3155,9 +3189,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.0.tgz", - "integrity": "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.2.tgz", + "integrity": "sha512-jz49TAWokm/7yWD9/o837nYax9DyALxIPOImdImvVzo6canBCZYzin8zJyqNR5k1j9K1DE0bVvr0XYB+99uAdg==", "dev": true, "license": "MIT", "engines": { @@ -3172,15 +3206,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.0.tgz", - "integrity": "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.2.tgz", + "integrity": "sha512-cC8UaalCViJkb3rH/xLIvidEwoFRtMZMUqDjjJMGEKaTFwYRHYBcoczlEGHuvkHEO8svRDrgZ0yQgOArFmwang==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3197,9 +3231,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.0.tgz", - "integrity": "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.2.tgz", + "integrity": "sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw==", "dev": true, "license": "MIT", "engines": { @@ -3211,16 +3245,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.0.tgz", - "integrity": "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.2.tgz", + "integrity": "sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.70.0", - "@typescript-eslint/tsconfig-utils": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/project-service": "8.71.2", + "@typescript-eslint/tsconfig-utils": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3239,16 +3273,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.0.tgz", - "integrity": "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.2.tgz", + "integrity": "sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0" + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3263,13 +3297,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.0.tgz", - "integrity": "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.2.tgz", + "integrity": "sha512-zozlN0UA32bSG2zkKAgQyRYSbEISVoyU6vvkKYo2aSny74D8Jh4e+POkJ6Lk0dlezZi5x7TtD+88Xb06IB8nhg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/types": "8.71.2", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3576,9 +3610,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "58.0.17", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.17.tgz", - "integrity": "sha512-Rrqc/Z5Idc4bG2/PrEh725t3kvuAc7jUKCJ+wZVU9KXk2bKSdqAniXxQa8aph9aHdv4h5sGKLpMXMaMNz/4+Og==", + "version": "58.0.19", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.19.tgz", + "integrity": "sha512-vla5Ga5RCH+L+DhrVZCNf1V481iYNxJtlIq/O0OIj9PcZORv0oLu1SIrUO7ZkzCA1fR5wMEtjhqAQUpvRbpWWw==", "license": "MIT", "peer": true, "dependencies": { @@ -3628,7 +3662,7 @@ "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", - "expo-widgets": "^58.0.20", + "expo-widgets": "^58.0.22", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { @@ -3673,9 +3707,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.29.tgz", - "integrity": "sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==", + "version": "2.11.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.30.tgz", + "integrity": "sha512-YJs6Pz17RMNv8HoyKREtCY38E3BV1nPkWVmIb+XN1uHC1Vqt3KZCH/uJH9ZKRoiKb/icZ6tvehyee6RZNbFfRA==", "license": "Apache-2.0", "peer": true, "bin": { @@ -3777,9 +3811,9 @@ } }, "node_modules/browserslist": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", - "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", + "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", "funding": [ { "type": "opencollective", @@ -3797,11 +3831,11 @@ "license": "MIT", "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.11.26", - "caniuse-lite": "^1.0.30001813", - "electron-to-chromium": "^1.5.439", - "node-releases": "^2.0.57", - "update-browserslist-db": "^1.3.3" + "baseline-browser-mapping": "^2.11.29", + "caniuse-lite": "^1.0.30001816", + "electron-to-chromium": "^1.5.459", + "node-releases": "^2.0.59", + "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" @@ -3888,9 +3922,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001816", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz", - "integrity": "sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==", + "version": "1.0.30001819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", + "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", "funding": [ { "type": "opencollective", @@ -4199,13 +4233,13 @@ "peer": true }, "node_modules/core-js-compat": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", - "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", + "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", "license": "MIT", "peer": true, "dependencies": { - "browserslist": "^4.28.7" + "browserslist": "^4.29.3" }, "engines": { "node": ">=6.4.0" @@ -4332,9 +4366,9 @@ "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.459", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.459.tgz", - "integrity": "sha512-4SC9HHSFjO/liAhifpdOL5hG9b4BP7/5G3y3UPZVO8trlAXr1CaUEEJL0gWK3kOcYcZrOA5rkwG45Gra/lTIgg==", + "version": "1.5.463", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.463.tgz", + "integrity": "sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==", "license": "ISC", "peer": true }, @@ -4405,9 +4439,9 @@ } }, "node_modules/eslint": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.10.0.tgz", - "integrity": "sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==", + "version": "10.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.13.0.tgz", + "integrity": "sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==", "dev": true, "license": "MIT", "workspaces": [ @@ -4595,39 +4629,41 @@ } }, "node_modules/expo": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.14.tgz", - "integrity": "sha512-M05O++KRgG4NA6kQ9AP60kbN8xqHJ6S8uTXdtkeiwcGVIYzdu2kaUXJyraVturvePO/Mf4PWa0C9+JggrHITwA==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.17.tgz", + "integrity": "sha512-IFH8ExamRC2m7La8q/RiBaZ3dcHga2fuMPQzRXsagS7w2sLDwwExEpZWT9Mr+30A13xEuXAHxZD3zmtgetzvHw==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "^58.1.11", - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/cli": "^58.1.14", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/devtools": "~58.0.2", "@expo/dom-webview": "~58.0.2", - "@expo/fingerprint": "^0.21.5", - "@expo/local-build-cache-provider": "^58.0.6", - "@expo/log-box": "^58.0.12", + "@expo/fingerprint": "^0.21.6", + "@expo/local-build-cache-provider": "^58.0.7", + "@expo/log-box": "^58.0.13", "@expo/log-box-utils": "^58.0.2", "@expo/metro": "~58.0.0", - "@expo/metro-config": "~58.0.14", + "@expo/metro-config": "~58.0.16", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~58.0.17", - "expo-asset": "~58.0.16", - "expo-constants": "~58.0.12", - "expo-file-system": "~58.0.9", - "expo-font": "~58.0.8", + "babel-preset-expo": "~58.0.19", + "expo-asset": "~58.0.18", + "expo-constants": "~58.0.13", + "expo-file-system": "~58.0.10", + "expo-font": "~58.0.9", "expo-keep-awake": "~58.0.3", - "expo-modules-autolinking": "~58.0.13", - "expo-modules-core": "~58.0.22", + "expo-modules-autolinking": "~58.0.14", + "expo-modules-cli": "~0.3.1", + "expo-modules-core": "~58.0.24", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.2.0" }, "bin": { "expo": "bin/cli", + "expo-modules": "bin/modules", "expo-modules-autolinking": "bin/autolinking", "fingerprint": "bin/fingerprint" }, @@ -4662,14 +4698,14 @@ } }, "node_modules/expo-asset": { - "version": "58.0.16", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.16.tgz", - "integrity": "sha512-beR3uusLA+rFo+6Ug0L7FPR4b6y/37VwtYW2Jig/i+3Co+oyYCTnvVuFPWhb05W9TOZRxdHUEI569fVKIgtYAA==", + "version": "58.0.18", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.18.tgz", + "integrity": "sha512-Cc49mpDd81hIIKw1DVDkL52a/S6MJlHLA+LirUHNR7qJJfopoHrSypg9rRuqvCUVW7/JKvXKqbFX43NynpVzmg==", "license": "MIT", "peer": true, "dependencies": { "@expo/image-utils": "^0.12.5", - "expo-constants": "~58.0.12" + "expo-constants": "~58.0.13" }, "peerDependencies": { "expo": "*", @@ -4678,13 +4714,13 @@ } }, "node_modules/expo-constants": { - "version": "58.0.12", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.12.tgz", - "integrity": "sha512-d3/dsps32nU4m6YJQbXQ1dIfn58GxfmJjTnZ0WtnhdSHTdG/oVsOakLqYRlX/FaLUKkQOSHXMf7hyCx+2a/HSQ==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.13.tgz", + "integrity": "sha512-zUj1rcnYg0O2wKF9L32ToEtFujc5OkslZJ4lWeg+fEwoPMLVwldn6kdEkX8zx31KgSwF94Ey1mIFdFX8Brp73Q==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "~2.5.2", + "@expo/env": "~2.5.3", "@expo/require-utils": "^58.0.4" }, "peerDependencies": { @@ -4696,6 +4732,7 @@ "version": "58.0.9", "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.9.tgz", "integrity": "sha512-JT0km3Wa+wDz/7Rli8ifreoMnmk68ulf/uaWzRA26xm/4K+jGTY+cDhnboRmpmXUCBkED6uqxWmNoXjaVU9VUw==", + "dev": true, "license": "MIT", "peerDependencies": { "expo": "*", @@ -4703,9 +4740,9 @@ } }, "node_modules/expo-font": { - "version": "58.0.8", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.8.tgz", - "integrity": "sha512-i9HKj/ljdmmjLamYQEkI4wXJB9+ap7AG5CpCqK/bgwwy45y5T8+1lpNbYgRXE7aQgmDjPpzd09wX6dOZkHfrxg==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.9.tgz", + "integrity": "sha512-C8sIeVA2NBb76xqqnQ6eVzfXezAfKJC4qVGU9ukKM4KXdLtkhH5bRCvRSc6qUFUmrcNoM3RjI78SEH3lhigRSg==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4726,9 +4763,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "58.0.13", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.13.tgz", - "integrity": "sha512-uzLFoTnAKabUdITvzRqWTvFkZsOdRPEXj7AEMAuBEhA2kGhqaBDa2EOWqPXVay0QJVoZuIQaEEgPGAXN1dPuYg==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.14.tgz", + "integrity": "sha512-KlSVwfggAUM7Y+c4msfLr9r73nkrnkKi7iJ3D9fz7ayaqhAiHR7vd7I2hHj+R6hSTyLyJQuCttmjEfs1N2Mp2w==", "license": "MIT", "peer": true, "dependencies": { @@ -4742,15 +4779,31 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, + "node_modules/expo-modules-cli": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/expo-modules-cli/-/expo-modules-cli-0.3.1.tgz", + "integrity": "sha512-dRLz4GMRi6lETbE729xFVforu9VI2hQ+YLMtVXfukHMjm6KposDOlJGCdYoZpB6oLVMK/NShc1q9v/u4yr1dkA==", + "license": "MIT", + "peer": true, + "dependencies": { + "arg": "^5.0.2" + }, + "bin": { + "expo-modules": "bin/expo-modules.js" + }, + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" + } + }, "node_modules/expo-modules-core": { - "version": "58.0.22", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.22.tgz", - "integrity": "sha512-T3YJYziFkF4JlGDpX4zCl91oIxz1Skq5sp1LFVO+GL/BARSIXk013QWGdRZrvt+wMxoVaql5dpOdPdP5q2+0jQ==", + "version": "58.0.24", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.24.tgz", + "integrity": "sha512-RrE6FEWHJWpyazngFj2ZtpGrgf0sDWsl0Pa6TxHP9VD+Ns0Fju6E831d9nDary0PnGlGLHY31nJqfurOd2uEbg==", "license": "MIT", "peer": true, "dependencies": { - "expo-modules-jsi": "~58.0.15", - "expo-modules-macros": "0.20.0", + "expo-modules-jsi": "~58.0.17", + "expo-modules-macros": "0.22.0", "invariant": "^2.2.4" }, "peerDependencies": { @@ -4765,9 +4818,9 @@ } }, "node_modules/expo-modules-jsi": { - "version": "58.0.15", - "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.15.tgz", - "integrity": "sha512-PsjYgL4KWtvBqWH242r0wbP99VjgHkHCpkPCekO7nzb+ulkDNyrNnhysxa0TcNpfRTNLetmCUaLs9t4CcoquZQ==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.17.tgz", + "integrity": "sha512-pGIj40nf3roqUvCkRbeEJ40ROouyOAdlP3tLWRTci6julMd+FlmCL8UIb6p7TQMODxb8fV2O5VM+QdUd+MPI9A==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4775,14 +4828,16 @@ } }, "node_modules/expo-modules-macros": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.20.0.tgz", - "integrity": "sha512-Ekgb5c9LQPM9CPnmDZdeWcOa1eBbCDUGrgdN5lIFNH2GWDUf9doeAOK7IqQOOVviamy37eIp5FW+N1zyrIwzoA==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.22.0.tgz", + "integrity": "sha512-IHY+FkILfG19qsyf9G/z7dcWVgsyqdkWsvvob3n5nWKa2meCCAGeEjp42N68fG8Ta6dn/bsceuma7uh2i6ho9g==", "license": "MIT", "peer": true, "optionalDependencies": { - "@expo/modules-macros-win32-arm64": "0.20.0", - "@expo/modules-macros-win32-x64": "0.20.0" + "@expo/modules-macros-linux-arm64": "0.22.0", + "@expo/modules-macros-linux-x64": "0.22.0", + "@expo/modules-macros-win32-arm64": "0.22.0", + "@expo/modules-macros-win32-x64": "0.22.0" } }, "node_modules/expo-server": { @@ -4795,6 +4850,17 @@ "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" } }, + "node_modules/expo/node_modules/expo-file-system": { + "version": "58.0.10", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.10.tgz", + "integrity": "sha512-n0M7amp/Bv9TAqVfTWq1zGykmQJWiPzDePZIKp8YYKkVvY7N65bo96sMBQlHkhAyW4I1B6MZABnybliy5DXQig==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -5502,16 +5568,6 @@ "license": "MIT", "peer": true }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6583,9 +6639,9 @@ } }, "node_modules/mqtt": { - "version": "5.15.2", - "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.15.2.tgz", - "integrity": "sha512-VWZU2CSUY3U3oN0PSBRDE5SNsFi4zqqNeQ/uv3pZWqY3CrBXD/dhd0ZLjlsk5YnebGlrapi4lRVNJPUNQ5aZ3w==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.16.1.tgz", + "integrity": "sha512-9aEaiR/mLblsMAiynD8quhcGTaINdta2bdyknAtfVzESfoe6Ncdh/uEs5p+3zqcTEtgYErwL4pNk0QkAynXxlg==", "license": "MIT", "dependencies": { "@types/readable-stream": "^4.0.21", @@ -6597,7 +6653,6 @@ "lru-cache": "^10.4.3", "minimist": "^1.2.8", "mqtt-packet": "^9.0.2", - "number-allocator": "^1.0.14", "readable-stream": "^4.7.0", "rfdc": "^1.4.1", "socks": "^2.8.6", @@ -6698,9 +6753,9 @@ "peer": true }, "node_modules/node-releases": { - "version": "2.0.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", - "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", + "version": "2.0.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz", + "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==", "license": "MIT", "peer": true, "engines": { @@ -6708,9 +6763,9 @@ } }, "node_modules/noxcturnal": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.5.tgz", - "integrity": "sha512-X/HQXJP/xn7LVQ4z1E4La0NHSl5UHdtJPG6ky4r2/Xgb7k79nGDJgBXk7I5f1V2vInWjlSCM14oSB0cUxwZS/Q==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.8.tgz", + "integrity": "sha512-oeyzgpWW2rnWFEdmXpRRBMLqwEfAhoypOBwaU5/BS3iizvmg8Hld+kxONLxifyHi2NJ1v6de2skIifN5mNzIVw==", "license": "MIT", "peer": true, "dependencies": { @@ -6721,14 +6776,14 @@ "node": ">=18" }, "optionalDependencies": { - "@noxcturnal/noxcturnal-darwin-arm64": "0.1.5", - "@noxcturnal/noxcturnal-darwin-x64": "0.1.5", - "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.5", - "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.5", - "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.5", - "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.5", - "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.5", - "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.5" + "@noxcturnal/noxcturnal-darwin-arm64": "0.1.8", + "@noxcturnal/noxcturnal-darwin-x64": "0.1.8", + "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.8", + "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.8", + "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.8", + "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.8", + "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.8", + "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.8" } }, "node_modules/npm-package-arg": { @@ -6754,16 +6809,6 @@ "license": "MIT", "peer": true }, - "node_modules/number-allocator": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", - "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "js-sdsl": "4.3.0" - } - }, "node_modules/ob1": { "version": "0.87.1", "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", @@ -7182,9 +7227,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", "dev": true, "license": "MIT", "bin": { @@ -7416,9 +7461,9 @@ } }, "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.8.0.tgz", + "integrity": "sha512-2jhTTU3Eilp/2DMT71gbcoqC35eQHasMJH0RHkYxwlxIv3+FR6Y5xAFZIwEGLxKkjZYEFlsiMNIdwUqjK2lLHQ==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -7565,9 +7610,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.2.tgz", - "integrity": "sha512-l5eyksV4tPBj6lJyEa37YzIOCSOV7lkZzEHUdpjWZbtD7wTcFYmEYXSgm5bT4vV+dZLb9rBG1W9GROOG4NS4Ew==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.10.tgz", + "integrity": "sha512-8N52YH1B5JzBP+B1rkcBERG7rfRTGAM0RmUpyd76yyRfTljuG452GCNbVm6MPzs1+gXBha6Rw5/oHRFohOpfDg==", "dev": true, "license": "MIT", "dependencies": { @@ -7582,31 +7627,31 @@ }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.2", - "@rollup/rollup-android-arm64": "4.63.2", - "@rollup/rollup-darwin-arm64": "4.63.2", - "@rollup/rollup-darwin-x64": "4.63.2", - "@rollup/rollup-freebsd-arm64": "4.63.2", - "@rollup/rollup-freebsd-x64": "4.63.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.2", - "@rollup/rollup-linux-arm-musleabihf": "4.63.2", - "@rollup/rollup-linux-arm64-gnu": "4.63.2", - "@rollup/rollup-linux-arm64-musl": "4.63.2", - "@rollup/rollup-linux-loong64-gnu": "4.63.2", - "@rollup/rollup-linux-loong64-musl": "4.63.2", - "@rollup/rollup-linux-ppc64-gnu": "4.63.2", - "@rollup/rollup-linux-ppc64-musl": "4.63.2", - "@rollup/rollup-linux-riscv64-gnu": "4.63.2", - "@rollup/rollup-linux-riscv64-musl": "4.63.2", - "@rollup/rollup-linux-s390x-gnu": "4.63.2", - "@rollup/rollup-linux-x64-gnu": "4.63.2", - "@rollup/rollup-linux-x64-musl": "4.63.2", - "@rollup/rollup-openbsd-x64": "4.63.2", - "@rollup/rollup-openharmony-arm64": "4.63.2", - "@rollup/rollup-win32-arm64-msvc": "4.63.2", - "@rollup/rollup-win32-ia32-msvc": "4.63.2", - "@rollup/rollup-win32-x64-gnu": "4.63.2", - "@rollup/rollup-win32-x64-msvc": "4.63.2", + "@rollup/rollup-android-arm-eabi": "4.64.10", + "@rollup/rollup-android-arm64": "4.64.10", + "@rollup/rollup-darwin-arm64": "4.64.10", + "@rollup/rollup-darwin-x64": "4.64.10", + "@rollup/rollup-freebsd-arm64": "4.64.10", + "@rollup/rollup-freebsd-x64": "4.64.10", + "@rollup/rollup-linux-arm-gnueabihf": "4.64.10", + "@rollup/rollup-linux-arm-musleabihf": "4.64.10", + "@rollup/rollup-linux-arm64-gnu": "4.64.10", + "@rollup/rollup-linux-arm64-musl": "4.64.10", + "@rollup/rollup-linux-loong64-gnu": "4.64.10", + "@rollup/rollup-linux-loong64-musl": "4.64.10", + "@rollup/rollup-linux-ppc64-gnu": "4.64.10", + "@rollup/rollup-linux-ppc64-musl": "4.64.10", + "@rollup/rollup-linux-riscv64-gnu": "4.64.10", + "@rollup/rollup-linux-riscv64-musl": "4.64.10", + "@rollup/rollup-linux-s390x-gnu": "4.64.10", + "@rollup/rollup-linux-x64-gnu": "4.64.10", + "@rollup/rollup-linux-x64-musl": "4.64.10", + "@rollup/rollup-openbsd-x64": "4.64.10", + "@rollup/rollup-openharmony-arm64": "4.64.10", + "@rollup/rollup-win32-arm64-msvc": "4.64.10", + "@rollup/rollup-win32-ia32-msvc": "4.64.10", + "@rollup/rollup-win32-x64-gnu": "4.64.10", + "@rollup/rollup-win32-x64-msvc": "4.64.10", "fsevents": "~2.3.2" } }, @@ -7725,9 +7770,9 @@ } }, "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.2.tgz", + "integrity": "sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==", "license": "MIT", "peer": true, "dependencies": { @@ -7735,6 +7780,10 @@ }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/send/node_modules/statuses": { @@ -8331,16 +8380,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz", - "integrity": "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.2.tgz", + "integrity": "sha512-Rz4effbMy2g9wnvOJZG6SbVavX313Lap1vNEbk1RUochzickvzP8P4HB+bkNg5e50eVz1hQGjh9K1omI1xB4Bw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.70.0", - "@typescript-eslint/parser": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0" + "@typescript-eslint/eslint-plugin": "8.71.2", + "@typescript-eslint/parser": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8355,9 +8404,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -8471,20 +8520,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.3.tgz", - "integrity": "sha512-Sc5u1VVln93y1Xnz4R+CunOZc7R9LUcTmhj7Rc7Eg3HVcf7rVn2FOoa812fe0W8p3jD7xeoGSYbfqCGGH2B6xw==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/validate-npm-package-name": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", @@ -8671,17 +8706,16 @@ } }, "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-4.0.0.tgz", + "integrity": "sha512-dDaoWzc9EP2fp9FS9PVZUkyvFxY4y1TOV9pcKaKLk++Ei/qb97XDFEVP7GnW7Osii/TzVABJ0jq2F+9/lq0TVA==", "license": "Apache-2.0", "peer": true, "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" + "simple-plist": "^1.3.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, "node_modules/xml2js": { diff --git a/package.json b/package.json index ab93bd38..1abe15c0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "react-native-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API", - "version": "3.0.0", + "version": "3.1.0", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { @@ -43,26 +43,26 @@ }, "devDependencies": { "@eslint/js": "10.0.1", - "eslint": "10.10.0", + "eslint": "10.13.0", "expo-file-system": "58.0.9", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", - "@types/node": "24.9.2", - "@types/readable-stream": "4.0.24", + "@types/node": "24.19.2", + "@types/readable-stream": "4.0.25", "playwright": "1.59.0", - "prettier": "3.9.6", - "rollup": "4.63.2", + "prettier": "3.9.10", + "rollup": "4.64.10", "serve-handler": "6.1.7", "tslib": "2.8.1", "typescript": "5.9.3", - "typescript-eslint": "8.70.0" + "typescript-eslint": "8.71.2" }, "dependencies": { "buffer": "6.0.3", "json-bigint": "1.0.0", - "mqtt": "5.15.2", + "mqtt": "5.16.1", "process": "0.11.10", - "readable-stream": "4.7.0" + "readable-stream": "4.8.0" }, "peerDependencies": { "expo": ">=52.0.0", diff --git a/src/client.ts b/src/client.ts index c5277c40..6a92e72d 100644 --- a/src/client.ts +++ b/src/client.ts @@ -270,6 +270,14 @@ class AppwriteException extends Error { } } +export function encodePath(value: unknown): string { + const segment = String(value); + if (segment === '.' || segment === '..') { + throw new AppwriteException('Path parameter cannot be "." or ".."'); + } + return encodeURIComponent(segment); +} + class Client { config: { [key: string]: string } = { endpoint: 'https://cloud.appwrite.io/v1', @@ -291,8 +299,8 @@ class Client { 'x-sdk-name': 'React Native', 'x-sdk-platform': 'client', 'x-sdk-language': 'reactnative', - 'x-sdk-version': '3.0.0', - 'X-Appwrite-Response-Format': '2.5.0', + 'x-sdk-version': '3.1.0', + 'X-Appwrite-Response-Format': '2.6.2', }; /** diff --git a/src/lib/tcp-stream.ts b/src/lib/tcp-stream.ts index 11d8f53c..2197cbbe 100644 --- a/src/lib/tcp-stream.ts +++ b/src/lib/tcp-stream.ts @@ -78,6 +78,8 @@ export function createTcpStream({ socket.setNoDelay(true); const duplex = new Duplex({ + // A closed native socket ends both halves so MQTT.js sees 'close' and reconnects. + allowHalfOpen: false, read() { socket.resume(); }, diff --git a/src/services/account.ts b/src/services/account.ts index 734b600d..806e9e73 100644 --- a/src/services/account.ts +++ b/src/services/account.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -391,7 +396,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -470,7 +475,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -553,7 +558,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}/tokens'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -673,8 +678,8 @@ export class Account extends Service { } const apiPath = '/account/consents/{consentId}/tokens/{tokenId}' - .replace('{consentId}', encodeURIComponent(String(consentId))) - .replace('{tokenId}', encodeURIComponent(String(tokenId))); + .replace('{consentId}', encodePath(consentId)) + .replace('{tokenId}', encodePath(tokenId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -771,8 +776,8 @@ export class Account extends Service { } const apiPath = '/account/consents/{consentId}/tokens/{tokenId}' - .replace('{consentId}', encodeURIComponent(String(consentId))) - .replace('{tokenId}', encodeURIComponent(String(tokenId))); + .replace('{consentId}', encodePath(consentId)) + .replace('{tokenId}', encodePath(tokenId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1073,7 +1078,7 @@ export class Account extends Service { const apiPath = '/account/identities/{identityId}'.replace( '{identityId}', - encodeURIComponent(String(identityId)), + encodePath(identityId), ); const apiPayload: Payload = {}; @@ -1425,7 +1430,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1500,7 +1505,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1596,7 +1601,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1725,7 +1730,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1833,7 +1838,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1893,7 +1898,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -2953,7 +2958,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3044,7 +3049,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3123,7 +3128,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3204,7 +3209,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}/verification'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -4894,7 +4899,7 @@ export class Account extends Service { const apiPath = '/account/sessions/oauth2/{provider}'.replace( '{provider}', - encodeURIComponent(String(provider)), + encodePath(provider), ); const apiPayload: Payload = {}; @@ -5208,7 +5213,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5308,7 +5313,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5407,7 +5412,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5734,7 +5739,7 @@ export class Account extends Service { const apiPath = '/account/targets/{targetId}/push'.replace( '{targetId}', - encodeURIComponent(String(targetId)), + encodePath(targetId), ); const apiPayload: Payload = {}; @@ -5826,7 +5831,7 @@ export class Account extends Service { const apiPath = '/account/targets/{targetId}/push'.replace( '{targetId}', - encodeURIComponent(String(targetId)), + encodePath(targetId), ); const apiPayload: Payload = {}; @@ -6204,7 +6209,7 @@ export class Account extends Service { const apiPath = '/account/tokens/oauth2/{provider}'.replace( '{provider}', - encodeURIComponent(String(provider)), + encodePath(provider), ); const apiPayload: Payload = {}; diff --git a/src/services/analytics.ts b/src/services/analytics.ts index af61d584..37e44a72 100644 --- a/src/services/analytics.ts +++ b/src/services/analytics.ts @@ -1,5 +1,5 @@ import { Service } from '../service'; -import { AppwriteException, Client } from '../client'; +import { AppwriteException, Client, encodePath } from '../client'; import type { Payload } from '../client'; export class Analytics extends Service { @@ -11,7 +11,7 @@ export class Analytics extends Service { * Send a tracking event from a browser, native app, or server-side SDK. * * @param {string} params.propertyId - Analytics property ID. - * @param {string} params.name - Event name. "pageview" is just a conventional event name; events are not modeled specially. + * @param {string} params.name - Event name. "pageview" and "screen_view" are counted as views, every other name is a custom event. * @param {string} params.url - Full page URL or screen identifier. * @param {string} params.domain - Hostname (e.g. example.com). * @param {string} params.referrer - Referrer URL. @@ -45,7 +45,7 @@ export class Analytics extends Service { * Send a tracking event from a browser, native app, or server-side SDK. * * @param {string} propertyId - Analytics property ID. - * @param {string} name - Event name. "pageview" is just a conventional event name; events are not modeled specially. + * @param {string} name - Event name. "pageview" and "screen_view" are counted as views, every other name is a custom event. * @param {string} url - Full page URL or screen identifier. * @param {string} domain - Hostname (e.g. example.com). * @param {string} referrer - Referrer URL. @@ -193,7 +193,7 @@ export class Analytics extends Service { const apiPath = '/analytics/properties/{propertyId}/events'.replace( '{propertyId}', - encodeURIComponent(String(propertyId)), + encodePath(propertyId), ); const apiPayload: Payload = {}; diff --git a/src/services/apps.ts b/src/services/apps.ts index 896038d7..55edd0be 100644 --- a/src/services/apps.ts +++ b/src/services/apps.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -670,10 +675,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "appId"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -990,10 +992,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "name"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; if (typeof name !== 'undefined') { @@ -1177,10 +1176,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "appId"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1260,7 +1256,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/installations'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1376,11 +1372,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1473,11 +1466,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1554,11 +1544,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}/tokens' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1654,7 +1641,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/keys'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1750,7 +1737,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/keys'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1836,8 +1823,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/keys/{keyId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{keyId}', encodeURIComponent(String(keyId))); + .replace('{appId}', encodePath(appId)) + .replace('{keyId}', encodePath(keyId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1921,8 +1908,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/keys/{keyId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{keyId}', encodeURIComponent(String(keyId))); + .replace('{appId}', encodePath(appId)) + .replace('{keyId}', encodePath(keyId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2002,7 +1989,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/secrets'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2098,7 +2085,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/secrets'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2192,8 +2179,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/secrets/{secretId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{secretId}', encodeURIComponent(String(secretId))); + .replace('{appId}', encodePath(appId)) + .replace('{secretId}', encodePath(secretId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2282,8 +2269,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/secrets/{secretId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{secretId}', encodeURIComponent(String(secretId))); + .replace('{appId}', encodePath(appId)) + .replace('{secretId}', encodePath(secretId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2350,7 +2337,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/team'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2465,7 +2452,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/tokens'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; diff --git a/src/services/avatars.ts b/src/services/avatars.ts index 168ed2e5..0748b5ab 100644 --- a/src/services/avatars.ts +++ b/src/services/avatars.ts @@ -1,5 +1,5 @@ import { Service } from '../service'; -import { AppwriteException, Client } from '../client'; +import { AppwriteException, Client, encodePath } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; import { fileSystem } from '../lib/file-system'; @@ -107,7 +107,7 @@ export class Avatars extends Service { const apiPath = '/avatars/browsers/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -237,7 +237,7 @@ export class Avatars extends Service { const apiPath = '/avatars/credit-cards/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -433,7 +433,7 @@ export class Avatars extends Service { const apiPath = '/avatars/flags/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1720,7 +1720,7 @@ export class Avatars extends Service { const apiPath = '/avatars/browsers/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1780,7 +1780,7 @@ export class Avatars extends Service { const apiPath = '/avatars/credit-cards/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1877,7 +1877,7 @@ export class Avatars extends Service { const apiPath = '/avatars/flags/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; diff --git a/src/services/databases.ts b/src/services/databases.ts index 69623d16..8d416971 100644 --- a/src/services/databases.ts +++ b/src/services/databases.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -233,7 +238,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -338,7 +343,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -425,7 +430,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -503,7 +508,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -656,11 +661,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -866,11 +868,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1033,11 +1032,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1206,15 +1202,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1399,15 +1389,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1597,15 +1581,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1748,15 +1726,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -1919,13 +1891,10 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2114,13 +2083,10 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/documents-db.ts b/src/services/documents-db.ts index 012b8a03..498b1bb2 100644 --- a/src/services/documents-db.ts +++ b/src/services/documents-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -645,11 +650,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -854,11 +856,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1006,11 +1005,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documents !== 'undefined') { @@ -1175,11 +1171,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1347,15 +1340,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1539,15 +1526,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1736,15 +1717,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1886,15 +1861,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -2049,13 +2018,10 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2236,13 +2202,10 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/functions.ts b/src/services/functions.ts index db74d35c..453d8ccf 100644 --- a/src/services/functions.ts +++ b/src/services/functions.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -76,7 +81,7 @@ export class Functions extends Service { const apiPath = '/functions/{functionId}/executions'.replace( '{functionId}', - encodeURIComponent(String(functionId)), + encodePath(functionId), ); const apiPayload: Payload = {}; @@ -270,7 +275,7 @@ export class Functions extends Service { const apiPath = '/functions/{functionId}/executions'.replace( '{functionId}', - encodeURIComponent(String(functionId)), + encodePath(functionId), ); const apiPayload: Payload = {}; @@ -415,8 +420,8 @@ export class Functions extends Service { } const apiPath = '/functions/{functionId}/executions/{executionId}' - .replace('{functionId}', encodeURIComponent(String(functionId))) - .replace('{executionId}', encodeURIComponent(String(executionId))); + .replace('{functionId}', encodePath(functionId)) + .replace('{executionId}', encodePath(executionId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); diff --git a/src/services/messaging.ts b/src/services/messaging.ts index b1939ddf..7d0e93f6 100644 --- a/src/services/messaging.ts +++ b/src/services/messaging.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -87,7 +92,7 @@ export class Messaging extends Service { const apiPath = '/messaging/topics/{topicId}/subscribers'.replace( '{topicId}', - encodeURIComponent(String(topicId)), + encodePath(topicId), ); const apiPayload: Payload = {}; @@ -191,11 +196,8 @@ export class Messaging extends Service { } const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}' - .replace('{topicId}', encodeURIComponent(String(topicId))) - .replace( - '{subscriberId}', - encodeURIComponent(String(subscriberId)), - ); + .replace('{topicId}', encodePath(topicId)) + .replace('{subscriberId}', encodePath(subscriberId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); diff --git a/src/services/oauth-2.ts b/src/services/oauth-2.ts index 185fad00..9f96bd6a 100644 --- a/src/services/oauth-2.ts +++ b/src/services/oauth-2.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -79,7 +84,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/approve'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -302,7 +307,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/authorize'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -569,7 +574,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/authorize'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -742,7 +747,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/device_authorization'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -839,7 +844,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/grants'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -925,11 +930,8 @@ export class Oauth2 extends Service { } const apiPath = '/oauth2/{project_id}/grants/{grant_id}' - .replace( - '{project_id}', - encodeURIComponent(String(this.client.config.project)), - ) - .replace('{grant_id}', encodeURIComponent(String(grantId))); + .replace('{project_id}', encodePath(this.client.config.project)) + .replace('{grant_id}', encodePath(grantId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1063,7 +1065,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/logout'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1199,7 +1201,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/logout'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1300,7 +1302,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/organizations'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1540,7 +1542,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/par'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1682,7 +1684,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/projects'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1778,7 +1780,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/reject'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1892,7 +1894,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/revoke'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -2072,7 +2074,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/token'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; diff --git a/src/services/organization.ts b/src/services/organization.ts index 4ec51e57..930dd0bc 100644 --- a/src/services/organization.ts +++ b/src/services/organization.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -258,7 +263,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; @@ -357,7 +362,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; @@ -442,7 +447,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; diff --git a/src/services/presences.ts b/src/services/presences.ts index 4cc36d8b..a3c1de34 100644 --- a/src/services/presences.ts +++ b/src/services/presences.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -170,7 +175,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -302,7 +307,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -456,7 +461,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -554,7 +559,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; diff --git a/src/services/push.ts b/src/services/push.ts index 9d7e985e..4bad16a3 100644 --- a/src/services/push.ts +++ b/src/services/push.ts @@ -1415,6 +1415,7 @@ export class Push extends Service { clean: false, // always keep the session so the broker can replay QoS-1 topics keepalive: KEEP_ALIVE_SECONDS, reconnectPeriod: RECONNECT_PERIOD_MS, + reconnectOnConnackError: true, manualConnect: true, // Enhanced auth carried in CONNECT properties. properties: { diff --git a/src/services/storage.ts b/src/services/storage.ts index 738745ca..510d682a 100644 --- a/src/services/storage.ts +++ b/src/services/storage.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; import { fileSystem } from '../lib/file-system'; @@ -96,7 +101,7 @@ export class Storage extends Service { const apiPath = '/storage/buckets/{bucketId}/files'.replace( '{bucketId}', - encodeURIComponent(String(bucketId)), + encodePath(bucketId), ); const apiPayload: Payload = {}; @@ -301,7 +306,7 @@ export class Storage extends Service { const apiPath = '/storage/buckets/{bucketId}/files'.replace( '{bucketId}', - encodeURIComponent(String(bucketId)), + encodePath(bucketId), ); const apiPayload: Payload = {}; @@ -615,8 +620,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -745,8 +750,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof name !== 'undefined') { @@ -852,8 +857,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -938,8 +943,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1159,8 +1164,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof width !== 'undefined') { @@ -1302,8 +1307,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1355,8 +1360,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1428,8 +1433,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof width !== 'undefined') { @@ -1517,8 +1522,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { diff --git a/src/services/tables-db.ts b/src/services/tables-db.ts index f0ed6e9c..2d11c637 100644 --- a/src/services/tables-db.ts +++ b/src/services/tables-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -646,8 +651,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -842,8 +847,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof rowId !== 'undefined') { @@ -1002,8 +1007,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1166,9 +1171,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1343,9 +1348,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1525,9 +1530,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1666,9 +1671,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -1820,10 +1825,10 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))) - .replace('{column}', encodeURIComponent(String(column))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)) + .replace('{column}', encodePath(column)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2001,10 +2006,10 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))) - .replace('{column}', encodeURIComponent(String(column))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)) + .replace('{column}', encodePath(column)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/teams.ts b/src/services/teams.ts index b5cd1362..791b95c3 100644 --- a/src/services/teams.ts +++ b/src/services/teams.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -281,7 +286,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -373,7 +378,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -450,7 +455,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -531,7 +536,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/installations'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -659,7 +664,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/installations'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -765,11 +770,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -882,11 +884,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; if (typeof authorizationDetails !== 'undefined') { @@ -984,11 +983,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1086,7 +1082,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/memberships'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1295,7 +1291,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/memberships'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1427,11 +1423,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1547,11 +1540,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; if (typeof roles !== 'undefined') { @@ -1655,11 +1645,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1776,11 +1763,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}/status' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; if (typeof userId !== 'undefined') { @@ -1876,7 +1860,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/prefs'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1949,7 +1933,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/prefs'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; diff --git a/src/services/vectors-db.ts b/src/services/vectors-db.ts index 61b4df27..4355e31f 100644 --- a/src/services/vectors-db.ts +++ b/src/services/vectors-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -645,11 +650,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -854,11 +856,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1020,11 +1019,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1192,15 +1188,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1384,15 +1374,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1581,15 +1565,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1731,15 +1709,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { From 517bc3fe8c255c444881a9fff2639d135e5311fe Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Tue, 27 Oct 2026 19:23:14 +0000 Subject: [PATCH 4/4] chore: update React Native SDK to 3.1.0 --- .github/workflows/publish.yml | 4 +- CHANGELOG.md | 8 + README.md | 4 +- docs/examples/oauth2/authorize-post.md | 2 +- docs/examples/oauth2/authorize.md | 2 +- docs/examples/storage/update-file.md | 2 +- package-lock.json | 862 +++++++++++++------------ package.json | 18 +- src/client.ts | 12 +- src/lib/tcp-stream.ts | 2 + src/services/account.ts | 57 +- src/services/analytics.ts | 8 +- src/services/apps.ts | 73 +-- src/services/avatars.ts | 14 +- src/services/databases.ts | 106 ++- src/services/documents-db.ts | 113 ++-- src/services/functions.ts | 15 +- src/services/messaging.ts | 16 +- src/services/oauth-2.ts | 40 +- src/services/organization.ts | 13 +- src/services/presences.ts | 15 +- src/services/push.ts | 1 + src/services/storage.ts | 47 +- src/services/tables-db.ts | 67 +- src/services/teams.ts | 74 +-- src/services/vectors-db.ts | 84 +-- 26 files changed, 810 insertions(+), 849 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1775eff9..3c96add7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -27,8 +27,10 @@ jobs: - name: Determine release tag id: release_tag + env: + REF: ${{ github.ref }} run: | - if [[ "${{ github.ref }}" == *"-rc"* ]] || [[ "${{ github.ref }}" == *"-RC"* ]]; then + if [[ "$REF" == *"-rc"* ]] || [[ "$REF" == *"-RC"* ]]; then echo "tag=next" >> "$GITHUB_OUTPUT" else echo "tag=latest" >> "$GITHUB_OUTPUT" diff --git a/CHANGELOG.md b/CHANGELOG.md index b966b674..a45b97d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change log +## 3.1.0 + +* Updated: requests send `X-Appwrite-Response-Format: 2.6.2`; the SDK targets Appwrite 2.6.x +* Updated: `mqtt` dependency to `5.16.1` and `readable-stream` to `4.8.0` +* Fixed: `Push` reconnects after the broker rejects a connection or the native socket closes +* Fixed: path parameters `.` and `..` throw `AppwriteException` instead of changing the request URL +* Fixed: examples leave unset optional params `undefined` instead of passing empty strings + ## 3.0.0 * Breaking: `expo-file-system` is a peer dependency (`>=18.0.0`); install it in your app diff --git a/README.md b/README.md index 88c07d62..6db4ff0c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Appwrite React Native SDK ![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg?style=flat-square) -![Version](https://img.shields.io/badge/api%20version-2.5.0-blue.svg?style=flat-square) +![Version](https://img.shields.io/badge/api%20version-2.6.2-blue.svg?style=flat-square) [![X Account](https://img.shields.io/badge/follow-%40appwrite-000000?logo=x&style=flat-square)](https://x.com/appwrite) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord) -**This SDK targets Appwrite server version 2.5.x as shipped on Appwrite Cloud.** Self-hosted releases can lag behind Cloud — if you run an older self-hosted build, use a matching older SDK from [previous releases](https://github.com/appwrite/sdk-for-react-native/releases) when APIs differ. +**This SDK targets Appwrite server version 2.6.x as shipped on Appwrite Cloud.** Self-hosted releases can lag behind Cloud — if you run an older self-hosted build, use a matching older SDK from [previous releases](https://github.com/appwrite/sdk-for-react-native/releases) when APIs differ. Appwrite is an open-source backend as a service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the React Native SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) diff --git a/docs/examples/oauth2/authorize-post.md b/docs/examples/oauth2/authorize-post.md index f7dd540c..f1250504 100644 --- a/docs/examples/oauth2/authorize-post.md +++ b/docs/examples/oauth2/authorize-post.md @@ -10,7 +10,7 @@ const oauth2 = new Oauth2(client); const result = await oauth2.authorizePost({ clientId: '', // optional redirectUri: 'https://example.com', // optional - responseType: '', // optional + responseType: undefined, // optional scope: '', // optional state: '', // optional nonce: '', // optional diff --git a/docs/examples/oauth2/authorize.md b/docs/examples/oauth2/authorize.md index 256e9cb6..5c078cf1 100644 --- a/docs/examples/oauth2/authorize.md +++ b/docs/examples/oauth2/authorize.md @@ -10,7 +10,7 @@ const oauth2 = new Oauth2(client); const result = await oauth2.authorize({ clientId: '', // optional redirectUri: 'https://example.com', // optional - responseType: '', // optional + responseType: undefined, // optional scope: '', // optional state: '', // optional nonce: '', // optional diff --git a/docs/examples/storage/update-file.md b/docs/examples/storage/update-file.md index 417fb811..6e5286e5 100644 --- a/docs/examples/storage/update-file.md +++ b/docs/examples/storage/update-file.md @@ -10,7 +10,7 @@ const storage = new Storage(client); const result = await storage.updateFile({ bucketId: '', fileId: '', - name: '', // optional + name: undefined, // optional permissions: [Permission.read(Role.any())], // optional }); diff --git a/package-lock.json b/package-lock.json index 224efa11..795eede6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,35 @@ { "name": "react-native-appwrite", - "version": "3.0.0", + "version": "3.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-appwrite", - "version": "3.0.0", + "version": "3.1.0", "license": "BSD-3-Clause", "dependencies": { "buffer": "6.0.3", "json-bigint": "1.0.0", - "mqtt": "5.15.2", + "mqtt": "5.16.1", "process": "0.11.10", - "readable-stream": "4.7.0" + "readable-stream": "4.8.0" }, "devDependencies": { "@eslint/js": "10.0.1", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", - "@types/node": "24.9.2", - "@types/readable-stream": "4.0.24", - "eslint": "10.10.0", + "@types/node": "24.19.2", + "@types/readable-stream": "4.0.25", + "eslint": "10.13.0", "expo-file-system": "58.0.9", "playwright": "1.59.0", - "prettier": "3.9.6", - "rollup": "4.63.2", + "prettier": "3.9.10", + "rollup": "4.64.10", "serve-handler": "6.1.7", "tslib": "2.8.1", "typescript": "5.9.3", - "typescript-eslint": "8.70.0" + "typescript-eslint": "8.71.2" }, "engines": { "node": ">=20.0.0" @@ -1334,32 +1334,32 @@ } }, "node_modules/@expo/cli": { - "version": "58.1.11", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.11.tgz", - "integrity": "sha512-wkFTSLXXYqLkRT5oy4DnLuTOtbFIu3qTiXHSHkFSqUBTHiE92y3bOIwM3UN7Y1ys18qVJge8lXjezaEfsHmijQ==", + "version": "58.1.14", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-58.1.14.tgz", + "integrity": "sha512-Qrpkhb9XrQn+wuxaOVR0hh0dLzeFZjGZHC9Jz86hPsexPzP+/mnMigRoWVaeEP8q7b3Hsr98gozL5d94DzFOBw==", "license": "MIT", "peer": true, "dependencies": { "@expo/code-signing-certificates": "^0.0.7", - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/devcert": "^1.2.2", - "@expo/env": "~2.5.2", + "@expo/env": "~2.5.3", "@expo/image-utils": "^0.12.5", - "@expo/inline-modules": "^0.2.6", + "@expo/inline-modules": "^0.2.7", "@expo/json-file": "^11.2.1", - "@expo/log-box": "^58.0.12", + "@expo/log-box": "^58.0.13", "@expo/log-box-utils": "^58.0.2", "@expo/metro": "~58.0.0", - "@expo/metro-config": "58.0.14", + "@expo/metro-config": "58.0.16", "@expo/metro-file-map": "^58.0.5", "@expo/osascript": "^2.8.1", "@expo/package-manager": "^1.14.2", "@expo/platforms": "^58.0.1", "@expo/plist": "^0.10.1", - "@expo/prebuild-config": "^58.0.14", + "@expo/prebuild-config": "^58.0.15", "@expo/require-utils": "^58.0.4", - "@expo/router-server": "^58.0.14", + "@expo/router-server": "^58.0.16", "@expo/schema-utils": "^58.0.2", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.1", @@ -1435,13 +1435,13 @@ } }, "node_modules/@expo/config": { - "version": "58.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.6.tgz", - "integrity": "sha512-PT1qv4s/R5A/NxXb4efGlFsYF5Consi7F8xSsJBAN090EGDr6U1EDQGOijFqzDc3JA2epD8zjKLJLOVB9YOewg==", + "version": "58.0.7", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-58.0.7.tgz", + "integrity": "sha512-FzpIEDVLNHNeztnWxvg1Oh6WJQwd5nXBgZILrrE9rG7GPjWBf3KbFr4qpqLe/QUeyuzPhHyfIbxMMUjiRBBgCQ==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~58.0.9", + "@expo/config-plugins": "~58.0.10", "@expo/config-types": "^58.0.3", "@expo/json-file": "^11.2.1", "@expo/platforms": "^58.0.1", @@ -1455,9 +1455,9 @@ } }, "node_modules/@expo/config-plugins": { - "version": "58.0.9", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.9.tgz", - "integrity": "sha512-HyP7V1QgDxeHcOEh4qQH7cfK7cI7wNp0y9lszAu98SRYCshhDbwB9gWpFfnpX1GQUtgiqG4Hvgh1z3ntcGwAjw==", + "version": "58.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-58.0.10.tgz", + "integrity": "sha512-oW0geRREubSsqV2d0EwkK0rRcAoB7a68CnJx7s8Al33HoTtEg7KLTQNcKlSTmmwoUESQQvAmzNqAZy4ajuCBKA==", "license": "MIT", "peer": true, "dependencies": { @@ -1472,7 +1472,7 @@ "glob": "^13.0.0", "semver": "^7.7.4", "slugify": "^1.6.6", - "xcode": "^3.0.1", + "xcode": "^4.0.0", "xml2js": "0.6.0" } }, @@ -1543,9 +1543,9 @@ } }, "node_modules/@expo/env": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.2.tgz", - "integrity": "sha512-z8kCvBVJpd2S20a+Ab1otQgz8sJLeR7CXDTsuAMcNbYFsK10Fdhfb7rx9Ys1vvlbijnY55eZhQvJACajc1IjBQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.5.3.tgz", + "integrity": "sha512-dBGu8BAfvUcXvG4HvYth+EhcHEsdC+/fT6HTH/zFvvwfp50LG6uzpzT8TXObwEq/t2B/rvAMV5OolxQ46LWXHg==", "license": "MIT", "peer": true, "dependencies": { @@ -1558,13 +1558,13 @@ } }, "node_modules/@expo/fingerprint": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.5.tgz", - "integrity": "sha512-4ngc+aPgMK56sYc47tfabmoaNdP7OvPBOH7QPgN3riSYM0Ev+KwsGRDius5jBBwjCI9ADp7IpjJEK9xlRYjjvA==", + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.21.6.tgz", + "integrity": "sha512-EKh7ak+SYwXjvX/4P7BcyeLxip2z9KAsnN/55VP10g8H1Ua4Dm/BgLAhgBcbzbsYretYmNEynAcf9oKCK9pjxA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "^2.5.2", + "@expo/env": "^2.5.3", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -1597,13 +1597,13 @@ } }, "node_modules/@expo/inline-modules": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.6.tgz", - "integrity": "sha512-S8PK3wx6ogwunoQ7pqdPbklQGtXloeWTAOzWJ9yIL7xHFxvnI/Ryj0phA3KEGCMlaKZjaCP1h/3s7n/ueErRgQ==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.2.7.tgz", + "integrity": "sha512-jjVtmz1LDhohT19U1fwMSL1kVUVZ9ewHdlEoDwSoZd3QELpyUR54nL677nHUbz0nNA5eh/zk38nByi03T06rLg==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config-plugins": "~58.0.9" + "@expo/config-plugins": "~58.0.10" } }, "node_modules/@expo/json-file": { @@ -1618,20 +1618,20 @@ } }, "node_modules/@expo/local-build-cache-provider": { - "version": "58.0.6", - "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.6.tgz", - "integrity": "sha512-AJk3pslFNlwRMbUbfvxhu6CPA9U7A+JPb88VS/uWkG/S/QMJL90Iw4sPVfG4BOKfRUNkB8ipl432Dr4txjSMKw==", + "version": "58.0.7", + "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-58.0.7.tgz", + "integrity": "sha512-RlpFBiduGKpcltNMDVMCEx+YfxsmMVORh5dOuJ1ntdq8igiJv1Qg9nIpRWqFuHL8iY70woRIqG8Ov/txJuHONA==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~58.0.6", + "@expo/config": "~58.0.7", "chalk": "^4.1.2" } }, "node_modules/@expo/log-box": { - "version": "58.0.12", - "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.12.tgz", - "integrity": "sha512-IzDYoFY2iUsmSDvl1V7YUM7UkCPDyMVS4e4a38c2LnFc1A3WGMUiQh+vsHLYTPKjIelu4r7/u4V7Gxtfa0oJgA==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-58.0.13.tgz", + "integrity": "sha512-Cl9qc77nWjQVivUI5/OCPSEP8s20EtbK3Ivy5ayy+uHO0Cf+XatatWfTvKiHO38VOpT2ywlROzZb4XZyxZUZ1Q==", "license": "MIT", "peer": true, "dependencies": { @@ -1683,17 +1683,17 @@ } }, "node_modules/@expo/metro-config": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.14.tgz", - "integrity": "sha512-UDUMAJwYGEzaB26ejMLG/IOVzwKDbHzoODBf3FZeRS94kk9jDf1dWE1VMX6bLBLoiflxXwqrMWiH0Fvz3gZ9YQ==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-58.0.16.tgz", + "integrity": "sha512-njvkkNGe2joPmIwoquGTmlmt24q4zYfQs0AIEh5XAyK7o6oVIB/t5EjS4j3f+P6v+ib9U7vxmo62T5+/Dy2pcg==", "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~58.0.6", - "@expo/env": "~2.5.2", + "@expo/config": "~58.0.7", + "@expo/env": "~2.5.3", "@expo/json-file": "~11.2.1", "@expo/metro": "~58.0.0", "@expo/platforms": "^58.0.1", @@ -1713,7 +1713,7 @@ "hermes-parser": "^0.36.0", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", - "noxcturnal": "^0.1.0", + "noxcturnal": "^0.1.8", "picomatch": "^4.0.4", "postcss": "^8.5.23", "resolve-from": "^5.0.0" @@ -1742,10 +1742,44 @@ "walker": "^1.0.8" } }, + "node_modules/@expo/modules-macros-linux-arm64": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-linux-arm64/-/modules-macros-linux-arm64-0.22.0.tgz", + "integrity": "sha512-FGXyxpZMEJ4pDPCeCBjfBjftCbk03P/1Rf6UkFoL22joqu4XXt+XUsjfTzyKBzP9pAXL39FVdbNClwk529CEEQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@expo/modules-macros-linux-x64": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-linux-x64/-/modules-macros-linux-x64-0.22.0.tgz", + "integrity": "sha512-4yN4cZTCUWkq1Olr0/lA57gFan8+MEo7K3K0cx0bB3TUEqHgL/hyJN79vQKXlp9NWTnOxO7J5uwqMQkQwfh6aw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, "node_modules/@expo/modules-macros-win32-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.20.0.tgz", - "integrity": "sha512-7B57gc7+TeygPcK8fLYlEhJbbvaPh+JBzex11YIYZrSzbFhz7Q+Z37fSdAfp4EsfCswJNcX0S6wpkgSlVNefVw==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-arm64/-/modules-macros-win32-arm64-0.22.0.tgz", + "integrity": "sha512-nLDXRGZWKNERzP4zH9LdfdZ3jvPBQcQE7LX5UnWW4cnDE/GoiVyUKdXQFK+KRnMD6We5gxqhIOU6SLj74h6fHA==", "cpu": [ "arm64" ], @@ -1757,9 +1791,9 @@ "peer": true }, "node_modules/@expo/modules-macros-win32-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.20.0.tgz", - "integrity": "sha512-BM5a2U2tCyHzmtiSEY70KPsts82Mfy1bHSZ7AUbg6z9LcnxuThxJlcH85/SV5eFbhrPfgDBAG/WAncyZCvKvyA==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@expo/modules-macros-win32-x64/-/modules-macros-win32-x64-0.22.0.tgz", + "integrity": "sha512-IT5/YsBTj2gnfNlxDfv3sC51rBudiSHbPFBKoPBbpwmTCMcQg1rmWVdUoiy7LLC48NNzm86wyMxHpSI5lkW1Gg==", "cpu": [ "x64" ], @@ -1818,20 +1852,20 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.14.tgz", - "integrity": "sha512-2wVzVDfXjRB3LzUbW5shOM/A+6eUUCfR+2bpZiWRBBZBtZP2HA5Zq1YgCio1tDqMGAHf2NQQDhvy/Rz1U6aC3A==", + "version": "58.0.15", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-58.0.15.tgz", + "integrity": "sha512-1qvYdhCRO3iu2iPtTNhVTetk5U3Cmby/MMDQmunFQ94jyrbtpLyb9PvU6bvvRdzoaC7PZbHp3Xvlwtx+Webx9A==", "license": "MIT", "peer": true, "dependencies": { - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/config-types": "^58.0.3", "@expo/image-utils": "^0.12.5", "@expo/json-file": "^11.2.1", "@react-native/normalize-colors": "0.88.0", "debug": "^4.3.1", - "expo-modules-autolinking": "~58.0.13", + "expo-modules-autolinking": "~58.0.14", "resolve-from": "^5.0.0", "semver": "^7.7.4" } @@ -1857,19 +1891,19 @@ } }, "node_modules/@expo/router-server": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.14.tgz", - "integrity": "sha512-RSzQYMA+Tv2eTemhjhzpx8+hL+pMC30JTVqAWrk5AZwht+OgaKZar/gHmj4iJf7n3rq+GG6KujrkKF9xAXLz2w==", + "version": "58.0.16", + "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-58.0.16.tgz", + "integrity": "sha512-pBts7H/ntTcmJnn/2T2Wfpm2XNu+yp7FVJbB9iKG+pqEDqH7PEFpts1Ju80OXQHL1sDQKhUVMe0TCNp+tclp1w==", "license": "MIT", "peer": true, "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { - "@expo/metro-runtime": "^58.0.14", + "@expo/metro-runtime": "^58.0.15", "expo": "*", - "expo-constants": "^58.0.12", - "expo-font": "^58.0.8", + "expo-constants": "^58.0.13", + "expo-font": "^58.0.9", "expo-router": "*", "expo-server": "^58.0.5", "react": "*", @@ -2163,9 +2197,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-darwin-arm64": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.5.tgz", - "integrity": "sha512-hQgDaWxKYln83Uk1Hh4Liju9AvGoYh4aLd4A1ou3lGn5hxzhW2uO+z3mERtWk6BMGVazvi/yUXtp9x3IlaWyhA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-arm64/-/noxcturnal-darwin-arm64-0.1.8.tgz", + "integrity": "sha512-IaKvOx7pb7nr+OQ4rm6VKO4z4a7BfqBrvxcDYfvtOHRq9yVylrph0crkWJRgxskGlaBrLMrNiWYHvFqrd0hRSA==", "cpu": [ "arm64" ], @@ -2180,9 +2214,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-darwin-x64": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.5.tgz", - "integrity": "sha512-I57zR8QF7Xam+4nGD5UoIODsw0VjkVyn51iDBL3CMaDR5Lh1OxXwKZMYKtv3CtQl+RSDsMfmXBEqGYLE8lIPHg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-darwin-x64/-/noxcturnal-darwin-x64-0.1.8.tgz", + "integrity": "sha512-Fb6Ak5vvDvrroakL+wqN+YWB4QdrPSkqaZEE2vM2xEacFozsCckzx3cDzSeA1uFOK52LPEzY5n9ylkGDjw5WcQ==", "cpu": [ "x64" ], @@ -2197,9 +2231,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-arm64-gnu": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.5.tgz", - "integrity": "sha512-gVH4XJPh8RdrdjjlU0dKeielQt/FXfvqhr8IEWEf3VeNtQs8l2rPzFPdqS0uwLWQYHLBGgB0LkuOil1KKYx1gQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-gnu/-/noxcturnal-linux-arm64-gnu-0.1.8.tgz", + "integrity": "sha512-P0zDdjt1Y3bhi790BJBLV84CRTFedHouV11VQMu8kiCgc+Y+fxVnmob2D6DBvyk8INdTnfxz4cXUMA7DgG9Qxg==", "cpu": [ "arm64" ], @@ -2217,9 +2251,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-arm64-musl": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.5.tgz", - "integrity": "sha512-rzQ075fcHZ+ebsELussRjnW8WBMy1RuLdS8wSqBGhdVlPR7/NaSyoWkNxnVDT8sEO26xjqGoW/o/08ghBzr/zA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-arm64-musl/-/noxcturnal-linux-arm64-musl-0.1.8.tgz", + "integrity": "sha512-Pd6DMObIX0Brh4Sj/kon9F0766Fw7DKjVLrjptITcmeE44jKJAWNihPC3dTbgkgb/9Q2inp0VGLFRW19+073bQ==", "cpu": [ "arm64" ], @@ -2237,9 +2271,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-x64-gnu": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.5.tgz", - "integrity": "sha512-X5O0lXMrv8HGOGoXDB1PG0Hjt7Rl+MJA+seR2NecQvUAAw2gzDvF/unCV5sqTAVeHfXhBHEFGkLenHZSD44efg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-gnu/-/noxcturnal-linux-x64-gnu-0.1.8.tgz", + "integrity": "sha512-gPAYMhvQmN1BOK5fPII9f3TGtUaR71fCFsKNFoYsiTMs8MidFkkkSvSpawDNubgFMBqYaO38mKtKAW1AuXCnMw==", "cpu": [ "x64" ], @@ -2257,9 +2291,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-linux-x64-musl": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.5.tgz", - "integrity": "sha512-fkQIQHRxqldNXVmjxfeCvGOiLhLU9SLBw1As02pMA2xjyiZfiXcUn4SUrZ92ciGnyCS8/XMbx+nZSxgEc3qDPw==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-linux-x64-musl/-/noxcturnal-linux-x64-musl-0.1.8.tgz", + "integrity": "sha512-dhQuKKN75YTCgjjh/txGBP6Lc2L9/HMqyeBEMLWkyFlq1u2OC0j8HeGQtzKjP5cnLiibrn0JgcuLJqDSklxuMg==", "cpu": [ "x64" ], @@ -2277,9 +2311,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-win32-arm64-msvc": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.5.tgz", - "integrity": "sha512-baeH5m/vM1nf0J2UkW8cfgiVogpM0gRO9b4PZWknXQPbv5+k+0N5sGOYl/UAO2q72qYb3Xbiu7eD8c4A2kR2SA==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-arm64-msvc/-/noxcturnal-win32-arm64-msvc-0.1.8.tgz", + "integrity": "sha512-ltg2UV1I/hdux6rPSF0RTlh2V2F7NXuqp3AdbwAGexEqxbXFdy2tw2hwmsUrCbIgwrXsjlijpgsOl5JEXRc84w==", "cpu": [ "arm64" ], @@ -2294,9 +2328,9 @@ } }, "node_modules/@noxcturnal/noxcturnal-win32-x64-msvc": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.5.tgz", - "integrity": "sha512-2faDMzom8pCG/s/uR4Czh1atz4KohI85AaSmA2vtAuVnCq+nLL4Viys3A5vUlNz9MNBmTNFxzXyF2Z5HtfxXLg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@noxcturnal/noxcturnal-win32-x64-msvc/-/noxcturnal-win32-x64-msvc-0.1.8.tgz", + "integrity": "sha512-A39bKv270jJnC5NN6mAy46E2d3LPywjrbmNJhgckPQNldV9acTYUKZcySCYeLgP/2yAVUh3UFSjo84pFX2npVw==", "cpu": [ "x64" ], @@ -2533,9 +2567,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", - "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.5.1.tgz", + "integrity": "sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug==", "dev": true, "license": "MIT", "dependencies": { @@ -2556,9 +2590,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.2.tgz", - "integrity": "sha512-Xa6RDoWa+hNiX6PgsljlH6W75RaONx3y6PVlbLhkEWW+GaPQ3dP5gwbL/erAzQHWwkvW5UxdD5l87Qx2FAQ/4A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.10.tgz", + "integrity": "sha512-oJ9ZfVIZjSjts0ZIYA48+5T0vurE5fQfX/Liad2U52Y6EN99x/OCdjGGuKMDP6jSk2i2lY6jwwA3X0drEc4PBg==", "cpu": [ "arm" ], @@ -2570,9 +2604,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.2.tgz", - "integrity": "sha512-vNASxsghMfQ5s+v3PrpnJd+ryL/26lxCCaGI+sDJ7VzmHiYXIrrVltsDhaawxLM1WcoMU2oYlbPHLaYQtBzhcg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.10.tgz", + "integrity": "sha512-LylBINgYYwgHNz8OMCy5+Y0w/LEgRYE0PcAIZfEuTuLNMf0S40GSLX6SFwqZsBLplS7RIHHy4zOAbl8Y5cQEvg==", "cpu": [ "arm64" ], @@ -2584,9 +2618,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.2.tgz", - "integrity": "sha512-0dWDjmlrpZAgjPD/aPzUDhBW8APLRjAni5bOrM76wiiZm+E+KTMVKNhAzaTBohz8UyO2fKNAl0+fygbe2HZXOA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.10.tgz", + "integrity": "sha512-vbuT3VT1GBI2fAOoUJUrsHVoOg9nbrFXTM7e3DSnb9PYf4n6jZCN8v4Vo8O6x4u5B67+/c803b8BtCZe2nIeqA==", "cpu": [ "arm64" ], @@ -2598,9 +2632,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.2.tgz", - "integrity": "sha512-N58uktcwzk3+qT4KHEuNdIxX1N01RWrkfVoml69EAbSaNDL+sbNVLx2RMl4Qd23lpA0fgPvyh5hHb4weD5WKmg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.10.tgz", + "integrity": "sha512-qYUp/qYvM3T4cF+VWalPl+przBUESILxi+qZ1m1MVRHpg06vS+jHaxXubjCaRpXjLJPDFdXzOZ0FABDghHOhNQ==", "cpu": [ "x64" ], @@ -2612,9 +2646,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.2.tgz", - "integrity": "sha512-HWF2zH8EAp2scWRpt2PGe6iUGz7zi04waXsdRr3zb4DWCk2ImIo5FZu0jjmD53nP/DGSvnW0e7/1ToCNZs2lZw==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.10.tgz", + "integrity": "sha512-v9NRQG+JztbP4DP/0yuhSyDcEJk047lYbqeNnqIgbXITcVDjGDS7OpkW5nadSY3tJ7MY8W1qIMMqP4Q3Q8BDjQ==", "cpu": [ "arm64" ], @@ -2626,9 +2660,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.2.tgz", - "integrity": "sha512-MkvcwHMnzPSMOQEwB6wHnLzmc+hT8BGc5bW/Mhmjjgx3wbj6VBnlc47XsK74kD0K9MikFfXpQqyz4NUXaUW62A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.10.tgz", + "integrity": "sha512-CHc9LBHdxhn6/NXfb9IegXCWoz5VlvcDOx9QrzZ9q+XYhFlfzwymSWJjOlZcEMMtC1zgMV7qxDe6U18AI1SG0A==", "cpu": [ "x64" ], @@ -2640,9 +2674,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.2.tgz", - "integrity": "sha512-xe1bCKPJaKsD0tfd7Rb6bGfUogJTpKbTEEthsfdb7hTfTRNJVQTdirabQx0o6ERVba/smkM720soMY+0QnrlSQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.10.tgz", + "integrity": "sha512-ble2WR7kWfzZFJUd3ODMGCJn1XDszptfRC0QvWc0h9/EA6MxnrQ1mvbjPZifEdgHyfHhDrwWeKeJONDITcrHSg==", "cpu": [ "arm" ], @@ -2657,9 +2691,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.2.tgz", - "integrity": "sha512-yOM7LdK0p6gk6+Q773OEwtlsikT1TL3yMmYsTtRlDRPha5vV2DC5x7LqRWDr6f3cSYNMKVqxzffXv8ivxNBIFQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.10.tgz", + "integrity": "sha512-DMCYegihxBMKvLpODdk4OsvIgxtHTi+Oddf1Pm3d6wMVNjcBiG2pqyXjMPy55HgG1gCdEFr9VfhB1CmvuKn1lw==", "cpu": [ "arm" ], @@ -2674,9 +2708,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.2.tgz", - "integrity": "sha512-qiWuJJV3DybA2IfzvRimeKXGrGuVPv1zobSY/26KnP3HbV0VcNb3ECzgvtbvF3xjSMkcooou6HASXZuLdjnhpQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.10.tgz", + "integrity": "sha512-HQ6HuVH9TmhvPWIas7MA/KeAROgdwqH3REpUU6hZq47NW7m1b1QCrHgM+M3+N/B8DfMt88x1/z79ppRc9RflCQ==", "cpu": [ "arm64" ], @@ -2691,9 +2725,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.2.tgz", - "integrity": "sha512-akcZquRzCY/KpUoZAMBhGf7oi4LmXq1BzRA5CPAC3rkUf28Y/sAYV3jSL+JKd7cwEyFvR5G0XVZ0gaMedP+60A==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.10.tgz", + "integrity": "sha512-avBhxba1DdctX0kxKkN3JWdTSg72QsxSn6FdfhZ9MkL3TTYDOXqxY1GqbC7VNttlgviK7tCe2No5btfRkFgeIg==", "cpu": [ "arm64" ], @@ -2708,9 +2742,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.2.tgz", - "integrity": "sha512-fNwYHrPyYyxauPzX/cpYw8Z7LQpp+DGA0KCoswA0aVFBpmdMil9XgjB8V3Ny64Ihu797+GKcuJqnsOKEmor7fA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.10.tgz", + "integrity": "sha512-UtQMex7fiXq0W/GqcWRpy6XKqUbXgQeGKB+Bd5rJngmHzpI+3kjwpWFLAhKg02onFsIMSh+Zx0zp9JIMQ7/05A==", "cpu": [ "loong64" ], @@ -2725,9 +2759,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.2.tgz", - "integrity": "sha512-XfvsgzR7DZqREdst7K1Mj3ilSUM5xLAHJcIMDFPKdxTs9q5VHOT8aMA+a683fqBu7DQl8+Sd9HCsQYL8EMY9qA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.10.tgz", + "integrity": "sha512-0Aum2pUsCSuOopi6oka+nR1DTj/nfvc1xjL979lvh6kXUjNa30TCX7sKFjyMsrX7bK3bNVs0FsJwQcE2HCWX1Q==", "cpu": [ "loong64" ], @@ -2742,9 +2776,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.2.tgz", - "integrity": "sha512-Pp7gVZggEFlbcuztay+/U0gVG9S1XAh8i7I1Re/htbAzo43P5wHZHw6pTyzotISqlKohoh9RpIfnOz3RbemK1w==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.10.tgz", + "integrity": "sha512-4dgsouKal3qfMFORgtNigLPt7K3HXiO6jTr7+nFJv1GWu1OkZx0kvQIXbK4sjrIGnaLBk0s80eQCQ9hPIelLrw==", "cpu": [ "ppc64" ], @@ -2759,9 +2793,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.2.tgz", - "integrity": "sha512-zkgL2xff6i7u5hau/m6FGeS8gRkLEdgLw522WGmdWWlLd9btmNl3S80mcEjtGq+kvgUekQ3+BOYLLLcPlS2LIA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.10.tgz", + "integrity": "sha512-d7NE89try3jisYzBD7J9M5iwfgcrXYC4dwHEjQ3HIWBftvwch1U/cy3iZ26SthtUOyClKiu7iqYiFjQEwiOlqQ==", "cpu": [ "ppc64" ], @@ -2776,9 +2810,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.2.tgz", - "integrity": "sha512-qOheJomrkVCbbHFJ7L3J97cnhfogKqguAQphv26+3ZsAQIF1L19b+dArl//s8rjJHJLz9byykyM8NBP4nmSa1g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.10.tgz", + "integrity": "sha512-dqB5ChSBp91JWXxpCKAS5ZVAE38esKQvdfyqANm0lF5JPiQrXnYwgG3oVBQmuNRcQ1WHkA3j5qYLsrl2CtfhCA==", "cpu": [ "riscv64" ], @@ -2793,9 +2827,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.2.tgz", - "integrity": "sha512-XlxLD54wQhH3FciCgMofxBw27NzUe818gJH410qWvc41UT0ZFcgxVjyX5/EK8MPTupjeVWqN5oy+9pCA9mqfCA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.10.tgz", + "integrity": "sha512-7GMf3vbQQslorWLmfsbi5fdt9RVnglk205XpOMFvW6UY5jE5oJc6JLieQJPHtsYlZ2EO0PtC06nY9Hz/IG8guw==", "cpu": [ "riscv64" ], @@ -2810,9 +2844,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.2.tgz", - "integrity": "sha512-vdryWeRb2bLJZf0Fv/W8se6nvsHe2PkTCxV0meheK3nQE+G90VCJcke51Miy1yQRsfm2uqIyjXOu4wmUzbTtkQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.10.tgz", + "integrity": "sha512-tuKbkB23DKc5LG+irPSUnZZztRHqC3CNmyxeWloueBteHB+i+1HkRCMzAE41lseLDlarybeLhqfibFitKOxKMg==", "cpu": [ "s390x" ], @@ -2827,9 +2861,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.2.tgz", - "integrity": "sha512-bcq2h2pkKmH2po4cZV8VWzO4lL40STyu/nLoFpYMQp9C2tCVNTdcVv86MwSsn3D5s1FBe2Ty1atqvVAUTMimNg==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.10.tgz", + "integrity": "sha512-ntHtQOMw7oIshHRF1swV3vyBw+beQt9PeZ04O3D32EeDZUMoHMJuZKp4/fDllH/+xogeK0GUCONVfjjKusqKLg==", "cpu": [ "x64" ], @@ -2844,9 +2878,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.2.tgz", - "integrity": "sha512-EGoo5DMVMRkTId8fuTDaoxVlR5ZTsKULUezRjd9gCw5eeY+DjCvDpZAOlNUvKPGX+7rS1RWx6j+yOpNPx0cUgQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.10.tgz", + "integrity": "sha512-Dlh8q8r145aYgh+N3gNIG1dz35Fz/FCxe5hs/43orDsffjP8S1P4Xz5I4FpSJsDS4LpQw1QmswZkQlUbkCldjQ==", "cpu": [ "x64" ], @@ -2861,9 +2895,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.2.tgz", - "integrity": "sha512-MErl12k7BFHZG1TI9QF/3lSSZARzq9KgNy/FjnqFMCkv+N4RSSzoUCA5h2mqHX4Mox3WaTVKblyzhQ1zRb2ZuQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.10.tgz", + "integrity": "sha512-VBJhHWz/55u45CWFv9OmfSRDgJDVENESgFxSAn13gIKJpTuFJbP4/7ymMZhDfeKFx1zGn1XBsLnNB7Ryy71qww==", "cpu": [ "x64" ], @@ -2875,9 +2909,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.2.tgz", - "integrity": "sha512-ILs8k07Wh4p0PsNY4wYLEaXZKMOpVhrG5QDB0yHhGhuzOfDlnyHN6sflL4El/MpUP1y8uY2lUZrv4oBS6pTT3g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.10.tgz", + "integrity": "sha512-Vjcazg+EEzUfIz+LcaxS6YtbQHo+sv0sCD+5VbwhY504bCKNW4OOreVgKq61pHT2esRQ/+AXYVPStDwxSvAOdw==", "cpu": [ "arm64" ], @@ -2889,9 +2923,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.2.tgz", - "integrity": "sha512-hKgB3nz/TKD3Wv78XEsyXzQsNjvhOHmwKQTvXADGOyU/cIClZDO7DsoggbdmJDPGp5V80tA3Vfv61PaKTLH3LA==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.10.tgz", + "integrity": "sha512-jJAaP4El+HWxYkM0jeJghASaFgfnluY0FRHhyHXxU6STs/nBhKMIxIMDrJEFg2ftKz6orX9WAo4diVan5NugNA==", "cpu": [ "arm64" ], @@ -2903,9 +2937,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.2.tgz", - "integrity": "sha512-T4wf1mudIDxN8Q/CWIBJC1u5gQUc+r5mPvlwoSbIvNkyVTP2TAFeobEmst5AQ4gMyAz4sSByVdoTDfvTmGK/8g==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.10.tgz", + "integrity": "sha512-bXXdRUfRx9PaHCToKt8R/7wjDV6Tbk/hmSHK0uQBKmD3rj4jkuYndct8uGX77ZuZsePrVkQbWUgPR2jJhCTMpQ==", "cpu": [ "ia32" ], @@ -2917,9 +2951,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.2.tgz", - "integrity": "sha512-tC3IY7qoaD9Ll3/8WJQn49j5V2f/NuI9S41NOE2iM5MPs3sPIvOkVToLcz/7Bz4pyF7PSvrtwu8I/pUrGOSecQ==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.10.tgz", + "integrity": "sha512-57Idx+VkEOQeG6Ys6sZOBFT7FfbeyxGv9A3k1m+Lf/z2SwqT40rNWbAINzjPHSMoCCBvY7Fnb9RGZWQin/HHAw==", "cpu": [ "x64" ], @@ -2931,9 +2965,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.2.tgz", - "integrity": "sha512-6NHnk/K3eq2ZFYcU1X8g67s9qIJRCOTT92gwLMVBp08dB2uuuwI1/Q/empzL2Bfr2f2WRLJVwpp90RmacQyFkw==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.10.tgz", + "integrity": "sha512-vrvuasIpm/xf+BpZbzgirku0WnrQZMAc+H2Ai26jzqBxYEmQQE4DdJb7h8erkJMfRRipx0ma2Cty8jJwUm9ocQ==", "cpu": [ "x64" ], @@ -3007,18 +3041,18 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "version": "24.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz", + "integrity": "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/readable-stream": { - "version": "4.0.24", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.24.tgz", - "integrity": "sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==", + "version": "4.0.25", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.25.tgz", + "integrity": "sha512-7GsxL8Wd5X3jh73/qgW7WCnbBvGSdD8U3E4Jiuus3/8I+PN20DtlkJtwFhr/sImXfDDQ2Z03i/9wNiIF3TVSsw==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -3051,17 +3085,17 @@ "peer": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz", - "integrity": "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.2.tgz", + "integrity": "sha512-K72/pvT7qpm8q3k8G5u93NCSN1RcLxX5h7Gw0bQpbMXviBHeY6Nx1WEwmk9wP+eKTSQ8ecxvcgt/ZX/rB938xQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/type-utils": "8.70.0", - "@typescript-eslint/utils": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/type-utils": "8.71.2", + "@typescript-eslint/utils": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3074,15 +3108,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.70.0", + "@typescript-eslint/parser": "^8.71.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz", - "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.13.tgz", + "integrity": "sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==", "dev": true, "license": "MIT", "engines": { @@ -3090,16 +3124,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.0.tgz", - "integrity": "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.2.tgz", + "integrity": "sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3" }, "engines": { @@ -3115,14 +3149,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.0.tgz", - "integrity": "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.2.tgz", + "integrity": "sha512-Pd68GsLVh5ZXlcEccFPdhSOvtHZ/2WU0XsA8zmXOS3F158lVlcTLhfQ6qvtL1RzbMie0Kp8xtbVwAg4nejKPHw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.70.0", - "@typescript-eslint/types": "^8.70.0", + "@typescript-eslint/tsconfig-utils": "^8.71.2", + "@typescript-eslint/types": "^8.71.2", "debug": "^4.4.3" }, "engines": { @@ -3137,14 +3171,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.0.tgz", - "integrity": "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.2.tgz", + "integrity": "sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0" + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3155,9 +3189,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.0.tgz", - "integrity": "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.2.tgz", + "integrity": "sha512-jz49TAWokm/7yWD9/o837nYax9DyALxIPOImdImvVzo6canBCZYzin8zJyqNR5k1j9K1DE0bVvr0XYB+99uAdg==", "dev": true, "license": "MIT", "engines": { @@ -3172,15 +3206,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.0.tgz", - "integrity": "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.2.tgz", + "integrity": "sha512-cC8UaalCViJkb3rH/xLIvidEwoFRtMZMUqDjjJMGEKaTFwYRHYBcoczlEGHuvkHEO8svRDrgZ0yQgOArFmwang==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3197,9 +3231,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.0.tgz", - "integrity": "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.2.tgz", + "integrity": "sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw==", "dev": true, "license": "MIT", "engines": { @@ -3211,16 +3245,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.0.tgz", - "integrity": "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.2.tgz", + "integrity": "sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.70.0", - "@typescript-eslint/tsconfig-utils": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/project-service": "8.71.2", + "@typescript-eslint/tsconfig-utils": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3239,16 +3273,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.0.tgz", - "integrity": "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.2.tgz", + "integrity": "sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0" + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3263,13 +3297,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.0.tgz", - "integrity": "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.2.tgz", + "integrity": "sha512-zozlN0UA32bSG2zkKAgQyRYSbEISVoyU6vvkKYo2aSny74D8Jh4e+POkJ6Lk0dlezZi5x7TtD+88Xb06IB8nhg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/types": "8.71.2", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3576,9 +3610,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "58.0.17", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.17.tgz", - "integrity": "sha512-Rrqc/Z5Idc4bG2/PrEh725t3kvuAc7jUKCJ+wZVU9KXk2bKSdqAniXxQa8aph9aHdv4h5sGKLpMXMaMNz/4+Og==", + "version": "58.0.19", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-58.0.19.tgz", + "integrity": "sha512-vla5Ga5RCH+L+DhrVZCNf1V481iYNxJtlIq/O0OIj9PcZORv0oLu1SIrUO7ZkzCA1fR5wMEtjhqAQUpvRbpWWw==", "license": "MIT", "peer": true, "dependencies": { @@ -3628,7 +3662,7 @@ "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", - "expo-widgets": "^58.0.20", + "expo-widgets": "^58.0.22", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { @@ -3673,9 +3707,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.29.tgz", - "integrity": "sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==", + "version": "2.11.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.30.tgz", + "integrity": "sha512-YJs6Pz17RMNv8HoyKREtCY38E3BV1nPkWVmIb+XN1uHC1Vqt3KZCH/uJH9ZKRoiKb/icZ6tvehyee6RZNbFfRA==", "license": "Apache-2.0", "peer": true, "bin": { @@ -3777,9 +3811,9 @@ } }, "node_modules/browserslist": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", - "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", + "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", "funding": [ { "type": "opencollective", @@ -3797,11 +3831,11 @@ "license": "MIT", "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.11.26", - "caniuse-lite": "^1.0.30001813", - "electron-to-chromium": "^1.5.439", - "node-releases": "^2.0.57", - "update-browserslist-db": "^1.3.3" + "baseline-browser-mapping": "^2.11.29", + "caniuse-lite": "^1.0.30001816", + "electron-to-chromium": "^1.5.459", + "node-releases": "^2.0.59", + "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" @@ -3888,9 +3922,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001816", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz", - "integrity": "sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==", + "version": "1.0.30001819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", + "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", "funding": [ { "type": "opencollective", @@ -4199,13 +4233,13 @@ "peer": true }, "node_modules/core-js-compat": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", - "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", + "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", "license": "MIT", "peer": true, "dependencies": { - "browserslist": "^4.28.7" + "browserslist": "^4.29.3" }, "engines": { "node": ">=6.4.0" @@ -4332,9 +4366,9 @@ "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.459", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.459.tgz", - "integrity": "sha512-4SC9HHSFjO/liAhifpdOL5hG9b4BP7/5G3y3UPZVO8trlAXr1CaUEEJL0gWK3kOcYcZrOA5rkwG45Gra/lTIgg==", + "version": "1.5.463", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.463.tgz", + "integrity": "sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==", "license": "ISC", "peer": true }, @@ -4405,9 +4439,9 @@ } }, "node_modules/eslint": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.10.0.tgz", - "integrity": "sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==", + "version": "10.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.13.0.tgz", + "integrity": "sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==", "dev": true, "license": "MIT", "workspaces": [ @@ -4595,39 +4629,41 @@ } }, "node_modules/expo": { - "version": "58.0.14", - "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.14.tgz", - "integrity": "sha512-M05O++KRgG4NA6kQ9AP60kbN8xqHJ6S8uTXdtkeiwcGVIYzdu2kaUXJyraVturvePO/Mf4PWa0C9+JggrHITwA==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/expo/-/expo-58.0.17.tgz", + "integrity": "sha512-IFH8ExamRC2m7La8q/RiBaZ3dcHga2fuMPQzRXsagS7w2sLDwwExEpZWT9Mr+30A13xEuXAHxZD3zmtgetzvHw==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "^58.1.11", - "@expo/config": "~58.0.6", - "@expo/config-plugins": "~58.0.9", + "@expo/cli": "^58.1.14", + "@expo/config": "~58.0.7", + "@expo/config-plugins": "~58.0.10", "@expo/devtools": "~58.0.2", "@expo/dom-webview": "~58.0.2", - "@expo/fingerprint": "^0.21.5", - "@expo/local-build-cache-provider": "^58.0.6", - "@expo/log-box": "^58.0.12", + "@expo/fingerprint": "^0.21.6", + "@expo/local-build-cache-provider": "^58.0.7", + "@expo/log-box": "^58.0.13", "@expo/log-box-utils": "^58.0.2", "@expo/metro": "~58.0.0", - "@expo/metro-config": "~58.0.14", + "@expo/metro-config": "~58.0.16", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~58.0.17", - "expo-asset": "~58.0.16", - "expo-constants": "~58.0.12", - "expo-file-system": "~58.0.9", - "expo-font": "~58.0.8", + "babel-preset-expo": "~58.0.19", + "expo-asset": "~58.0.18", + "expo-constants": "~58.0.13", + "expo-file-system": "~58.0.10", + "expo-font": "~58.0.9", "expo-keep-awake": "~58.0.3", - "expo-modules-autolinking": "~58.0.13", - "expo-modules-core": "~58.0.22", + "expo-modules-autolinking": "~58.0.14", + "expo-modules-cli": "~0.3.1", + "expo-modules-core": "~58.0.24", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.2.0" }, "bin": { "expo": "bin/cli", + "expo-modules": "bin/modules", "expo-modules-autolinking": "bin/autolinking", "fingerprint": "bin/fingerprint" }, @@ -4662,14 +4698,14 @@ } }, "node_modules/expo-asset": { - "version": "58.0.16", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.16.tgz", - "integrity": "sha512-beR3uusLA+rFo+6Ug0L7FPR4b6y/37VwtYW2Jig/i+3Co+oyYCTnvVuFPWhb05W9TOZRxdHUEI569fVKIgtYAA==", + "version": "58.0.18", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-58.0.18.tgz", + "integrity": "sha512-Cc49mpDd81hIIKw1DVDkL52a/S6MJlHLA+LirUHNR7qJJfopoHrSypg9rRuqvCUVW7/JKvXKqbFX43NynpVzmg==", "license": "MIT", "peer": true, "dependencies": { "@expo/image-utils": "^0.12.5", - "expo-constants": "~58.0.12" + "expo-constants": "~58.0.13" }, "peerDependencies": { "expo": "*", @@ -4678,13 +4714,13 @@ } }, "node_modules/expo-constants": { - "version": "58.0.12", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.12.tgz", - "integrity": "sha512-d3/dsps32nU4m6YJQbXQ1dIfn58GxfmJjTnZ0WtnhdSHTdG/oVsOakLqYRlX/FaLUKkQOSHXMf7hyCx+2a/HSQ==", + "version": "58.0.13", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-58.0.13.tgz", + "integrity": "sha512-zUj1rcnYg0O2wKF9L32ToEtFujc5OkslZJ4lWeg+fEwoPMLVwldn6kdEkX8zx31KgSwF94Ey1mIFdFX8Brp73Q==", "license": "MIT", "peer": true, "dependencies": { - "@expo/env": "~2.5.2", + "@expo/env": "~2.5.3", "@expo/require-utils": "^58.0.4" }, "peerDependencies": { @@ -4696,6 +4732,7 @@ "version": "58.0.9", "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.9.tgz", "integrity": "sha512-JT0km3Wa+wDz/7Rli8ifreoMnmk68ulf/uaWzRA26xm/4K+jGTY+cDhnboRmpmXUCBkED6uqxWmNoXjaVU9VUw==", + "dev": true, "license": "MIT", "peerDependencies": { "expo": "*", @@ -4703,9 +4740,9 @@ } }, "node_modules/expo-font": { - "version": "58.0.8", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.8.tgz", - "integrity": "sha512-i9HKj/ljdmmjLamYQEkI4wXJB9+ap7AG5CpCqK/bgwwy45y5T8+1lpNbYgRXE7aQgmDjPpzd09wX6dOZkHfrxg==", + "version": "58.0.9", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-58.0.9.tgz", + "integrity": "sha512-C8sIeVA2NBb76xqqnQ6eVzfXezAfKJC4qVGU9ukKM4KXdLtkhH5bRCvRSc6qUFUmrcNoM3RjI78SEH3lhigRSg==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4726,9 +4763,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "58.0.13", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.13.tgz", - "integrity": "sha512-uzLFoTnAKabUdITvzRqWTvFkZsOdRPEXj7AEMAuBEhA2kGhqaBDa2EOWqPXVay0QJVoZuIQaEEgPGAXN1dPuYg==", + "version": "58.0.14", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-58.0.14.tgz", + "integrity": "sha512-KlSVwfggAUM7Y+c4msfLr9r73nkrnkKi7iJ3D9fz7ayaqhAiHR7vd7I2hHj+R6hSTyLyJQuCttmjEfs1N2Mp2w==", "license": "MIT", "peer": true, "dependencies": { @@ -4742,15 +4779,31 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, + "node_modules/expo-modules-cli": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/expo-modules-cli/-/expo-modules-cli-0.3.1.tgz", + "integrity": "sha512-dRLz4GMRi6lETbE729xFVforu9VI2hQ+YLMtVXfukHMjm6KposDOlJGCdYoZpB6oLVMK/NShc1q9v/u4yr1dkA==", + "license": "MIT", + "peer": true, + "dependencies": { + "arg": "^5.0.2" + }, + "bin": { + "expo-modules": "bin/expo-modules.js" + }, + "engines": { + "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" + } + }, "node_modules/expo-modules-core": { - "version": "58.0.22", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.22.tgz", - "integrity": "sha512-T3YJYziFkF4JlGDpX4zCl91oIxz1Skq5sp1LFVO+GL/BARSIXk013QWGdRZrvt+wMxoVaql5dpOdPdP5q2+0jQ==", + "version": "58.0.24", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-58.0.24.tgz", + "integrity": "sha512-RrE6FEWHJWpyazngFj2ZtpGrgf0sDWsl0Pa6TxHP9VD+Ns0Fju6E831d9nDary0PnGlGLHY31nJqfurOd2uEbg==", "license": "MIT", "peer": true, "dependencies": { - "expo-modules-jsi": "~58.0.15", - "expo-modules-macros": "0.20.0", + "expo-modules-jsi": "~58.0.17", + "expo-modules-macros": "0.22.0", "invariant": "^2.2.4" }, "peerDependencies": { @@ -4765,9 +4818,9 @@ } }, "node_modules/expo-modules-jsi": { - "version": "58.0.15", - "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.15.tgz", - "integrity": "sha512-PsjYgL4KWtvBqWH242r0wbP99VjgHkHCpkPCekO7nzb+ulkDNyrNnhysxa0TcNpfRTNLetmCUaLs9t4CcoquZQ==", + "version": "58.0.17", + "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-58.0.17.tgz", + "integrity": "sha512-pGIj40nf3roqUvCkRbeEJ40ROouyOAdlP3tLWRTci6julMd+FlmCL8UIb6p7TQMODxb8fV2O5VM+QdUd+MPI9A==", "license": "MIT", "peer": true, "peerDependencies": { @@ -4775,14 +4828,16 @@ } }, "node_modules/expo-modules-macros": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.20.0.tgz", - "integrity": "sha512-Ekgb5c9LQPM9CPnmDZdeWcOa1eBbCDUGrgdN5lIFNH2GWDUf9doeAOK7IqQOOVviamy37eIp5FW+N1zyrIwzoA==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/expo-modules-macros/-/expo-modules-macros-0.22.0.tgz", + "integrity": "sha512-IHY+FkILfG19qsyf9G/z7dcWVgsyqdkWsvvob3n5nWKa2meCCAGeEjp42N68fG8Ta6dn/bsceuma7uh2i6ho9g==", "license": "MIT", "peer": true, "optionalDependencies": { - "@expo/modules-macros-win32-arm64": "0.20.0", - "@expo/modules-macros-win32-x64": "0.20.0" + "@expo/modules-macros-linux-arm64": "0.22.0", + "@expo/modules-macros-linux-x64": "0.22.0", + "@expo/modules-macros-win32-arm64": "0.22.0", + "@expo/modules-macros-win32-x64": "0.22.0" } }, "node_modules/expo-server": { @@ -4795,6 +4850,17 @@ "node": "^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0" } }, + "node_modules/expo/node_modules/expo-file-system": { + "version": "58.0.10", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-58.0.10.tgz", + "integrity": "sha512-n0M7amp/Bv9TAqVfTWq1zGykmQJWiPzDePZIKp8YYKkVvY7N65bo96sMBQlHkhAyW4I1B6MZABnybliy5DXQig==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -5502,16 +5568,6 @@ "license": "MIT", "peer": true }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6583,9 +6639,9 @@ } }, "node_modules/mqtt": { - "version": "5.15.2", - "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.15.2.tgz", - "integrity": "sha512-VWZU2CSUY3U3oN0PSBRDE5SNsFi4zqqNeQ/uv3pZWqY3CrBXD/dhd0ZLjlsk5YnebGlrapi4lRVNJPUNQ5aZ3w==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.16.1.tgz", + "integrity": "sha512-9aEaiR/mLblsMAiynD8quhcGTaINdta2bdyknAtfVzESfoe6Ncdh/uEs5p+3zqcTEtgYErwL4pNk0QkAynXxlg==", "license": "MIT", "dependencies": { "@types/readable-stream": "^4.0.21", @@ -6597,7 +6653,6 @@ "lru-cache": "^10.4.3", "minimist": "^1.2.8", "mqtt-packet": "^9.0.2", - "number-allocator": "^1.0.14", "readable-stream": "^4.7.0", "rfdc": "^1.4.1", "socks": "^2.8.6", @@ -6698,9 +6753,9 @@ "peer": true }, "node_modules/node-releases": { - "version": "2.0.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", - "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", + "version": "2.0.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz", + "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==", "license": "MIT", "peer": true, "engines": { @@ -6708,9 +6763,9 @@ } }, "node_modules/noxcturnal": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.5.tgz", - "integrity": "sha512-X/HQXJP/xn7LVQ4z1E4La0NHSl5UHdtJPG6ky4r2/Xgb7k79nGDJgBXk7I5f1V2vInWjlSCM14oSB0cUxwZS/Q==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/noxcturnal/-/noxcturnal-0.1.8.tgz", + "integrity": "sha512-oeyzgpWW2rnWFEdmXpRRBMLqwEfAhoypOBwaU5/BS3iizvmg8Hld+kxONLxifyHi2NJ1v6de2skIifN5mNzIVw==", "license": "MIT", "peer": true, "dependencies": { @@ -6721,14 +6776,14 @@ "node": ">=18" }, "optionalDependencies": { - "@noxcturnal/noxcturnal-darwin-arm64": "0.1.5", - "@noxcturnal/noxcturnal-darwin-x64": "0.1.5", - "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.5", - "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.5", - "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.5", - "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.5", - "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.5", - "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.5" + "@noxcturnal/noxcturnal-darwin-arm64": "0.1.8", + "@noxcturnal/noxcturnal-darwin-x64": "0.1.8", + "@noxcturnal/noxcturnal-linux-arm64-gnu": "0.1.8", + "@noxcturnal/noxcturnal-linux-arm64-musl": "0.1.8", + "@noxcturnal/noxcturnal-linux-x64-gnu": "0.1.8", + "@noxcturnal/noxcturnal-linux-x64-musl": "0.1.8", + "@noxcturnal/noxcturnal-win32-arm64-msvc": "0.1.8", + "@noxcturnal/noxcturnal-win32-x64-msvc": "0.1.8" } }, "node_modules/npm-package-arg": { @@ -6754,16 +6809,6 @@ "license": "MIT", "peer": true }, - "node_modules/number-allocator": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", - "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "js-sdsl": "4.3.0" - } - }, "node_modules/ob1": { "version": "0.87.1", "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.87.1.tgz", @@ -7182,9 +7227,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", "dev": true, "license": "MIT", "bin": { @@ -7416,9 +7461,9 @@ } }, "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.8.0.tgz", + "integrity": "sha512-2jhTTU3Eilp/2DMT71gbcoqC35eQHasMJH0RHkYxwlxIv3+FR6Y5xAFZIwEGLxKkjZYEFlsiMNIdwUqjK2lLHQ==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -7565,9 +7610,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.63.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.2.tgz", - "integrity": "sha512-l5eyksV4tPBj6lJyEa37YzIOCSOV7lkZzEHUdpjWZbtD7wTcFYmEYXSgm5bT4vV+dZLb9rBG1W9GROOG4NS4Ew==", + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.10.tgz", + "integrity": "sha512-8N52YH1B5JzBP+B1rkcBERG7rfRTGAM0RmUpyd76yyRfTljuG452GCNbVm6MPzs1+gXBha6Rw5/oHRFohOpfDg==", "dev": true, "license": "MIT", "dependencies": { @@ -7582,31 +7627,31 @@ }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.2", - "@rollup/rollup-android-arm64": "4.63.2", - "@rollup/rollup-darwin-arm64": "4.63.2", - "@rollup/rollup-darwin-x64": "4.63.2", - "@rollup/rollup-freebsd-arm64": "4.63.2", - "@rollup/rollup-freebsd-x64": "4.63.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.2", - "@rollup/rollup-linux-arm-musleabihf": "4.63.2", - "@rollup/rollup-linux-arm64-gnu": "4.63.2", - "@rollup/rollup-linux-arm64-musl": "4.63.2", - "@rollup/rollup-linux-loong64-gnu": "4.63.2", - "@rollup/rollup-linux-loong64-musl": "4.63.2", - "@rollup/rollup-linux-ppc64-gnu": "4.63.2", - "@rollup/rollup-linux-ppc64-musl": "4.63.2", - "@rollup/rollup-linux-riscv64-gnu": "4.63.2", - "@rollup/rollup-linux-riscv64-musl": "4.63.2", - "@rollup/rollup-linux-s390x-gnu": "4.63.2", - "@rollup/rollup-linux-x64-gnu": "4.63.2", - "@rollup/rollup-linux-x64-musl": "4.63.2", - "@rollup/rollup-openbsd-x64": "4.63.2", - "@rollup/rollup-openharmony-arm64": "4.63.2", - "@rollup/rollup-win32-arm64-msvc": "4.63.2", - "@rollup/rollup-win32-ia32-msvc": "4.63.2", - "@rollup/rollup-win32-x64-gnu": "4.63.2", - "@rollup/rollup-win32-x64-msvc": "4.63.2", + "@rollup/rollup-android-arm-eabi": "4.64.10", + "@rollup/rollup-android-arm64": "4.64.10", + "@rollup/rollup-darwin-arm64": "4.64.10", + "@rollup/rollup-darwin-x64": "4.64.10", + "@rollup/rollup-freebsd-arm64": "4.64.10", + "@rollup/rollup-freebsd-x64": "4.64.10", + "@rollup/rollup-linux-arm-gnueabihf": "4.64.10", + "@rollup/rollup-linux-arm-musleabihf": "4.64.10", + "@rollup/rollup-linux-arm64-gnu": "4.64.10", + "@rollup/rollup-linux-arm64-musl": "4.64.10", + "@rollup/rollup-linux-loong64-gnu": "4.64.10", + "@rollup/rollup-linux-loong64-musl": "4.64.10", + "@rollup/rollup-linux-ppc64-gnu": "4.64.10", + "@rollup/rollup-linux-ppc64-musl": "4.64.10", + "@rollup/rollup-linux-riscv64-gnu": "4.64.10", + "@rollup/rollup-linux-riscv64-musl": "4.64.10", + "@rollup/rollup-linux-s390x-gnu": "4.64.10", + "@rollup/rollup-linux-x64-gnu": "4.64.10", + "@rollup/rollup-linux-x64-musl": "4.64.10", + "@rollup/rollup-openbsd-x64": "4.64.10", + "@rollup/rollup-openharmony-arm64": "4.64.10", + "@rollup/rollup-win32-arm64-msvc": "4.64.10", + "@rollup/rollup-win32-ia32-msvc": "4.64.10", + "@rollup/rollup-win32-x64-gnu": "4.64.10", + "@rollup/rollup-win32-x64-msvc": "4.64.10", "fsevents": "~2.3.2" } }, @@ -7725,9 +7770,9 @@ } }, "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.2.tgz", + "integrity": "sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==", "license": "MIT", "peer": true, "dependencies": { @@ -7735,6 +7780,10 @@ }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/send/node_modules/statuses": { @@ -8331,16 +8380,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz", - "integrity": "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.2.tgz", + "integrity": "sha512-Rz4effbMy2g9wnvOJZG6SbVavX313Lap1vNEbk1RUochzickvzP8P4HB+bkNg5e50eVz1hQGjh9K1omI1xB4Bw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.70.0", - "@typescript-eslint/parser": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0" + "@typescript-eslint/eslint-plugin": "8.71.2", + "@typescript-eslint/parser": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8355,9 +8404,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -8471,20 +8520,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.3.tgz", - "integrity": "sha512-Sc5u1VVln93y1Xnz4R+CunOZc7R9LUcTmhj7Rc7Eg3HVcf7rVn2FOoa812fe0W8p3jD7xeoGSYbfqCGGH2B6xw==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/validate-npm-package-name": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", @@ -8671,17 +8706,16 @@ } }, "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-4.0.0.tgz", + "integrity": "sha512-dDaoWzc9EP2fp9FS9PVZUkyvFxY4y1TOV9pcKaKLk++Ei/qb97XDFEVP7GnW7Osii/TzVABJ0jq2F+9/lq0TVA==", "license": "Apache-2.0", "peer": true, "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" + "simple-plist": "^1.3.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, "node_modules/xml2js": { diff --git a/package.json b/package.json index ab93bd38..1abe15c0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "react-native-appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API", - "version": "3.0.0", + "version": "3.1.0", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { @@ -43,26 +43,26 @@ }, "devDependencies": { "@eslint/js": "10.0.1", - "eslint": "10.10.0", + "eslint": "10.13.0", "expo-file-system": "58.0.9", "@rollup/plugin-typescript": "12.3.0", "@types/json-bigint": "1.0.4", - "@types/node": "24.9.2", - "@types/readable-stream": "4.0.24", + "@types/node": "24.19.2", + "@types/readable-stream": "4.0.25", "playwright": "1.59.0", - "prettier": "3.9.6", - "rollup": "4.63.2", + "prettier": "3.9.10", + "rollup": "4.64.10", "serve-handler": "6.1.7", "tslib": "2.8.1", "typescript": "5.9.3", - "typescript-eslint": "8.70.0" + "typescript-eslint": "8.71.2" }, "dependencies": { "buffer": "6.0.3", "json-bigint": "1.0.0", - "mqtt": "5.15.2", + "mqtt": "5.16.1", "process": "0.11.10", - "readable-stream": "4.7.0" + "readable-stream": "4.8.0" }, "peerDependencies": { "expo": ">=52.0.0", diff --git a/src/client.ts b/src/client.ts index c5277c40..6a92e72d 100644 --- a/src/client.ts +++ b/src/client.ts @@ -270,6 +270,14 @@ class AppwriteException extends Error { } } +export function encodePath(value: unknown): string { + const segment = String(value); + if (segment === '.' || segment === '..') { + throw new AppwriteException('Path parameter cannot be "." or ".."'); + } + return encodeURIComponent(segment); +} + class Client { config: { [key: string]: string } = { endpoint: 'https://cloud.appwrite.io/v1', @@ -291,8 +299,8 @@ class Client { 'x-sdk-name': 'React Native', 'x-sdk-platform': 'client', 'x-sdk-language': 'reactnative', - 'x-sdk-version': '3.0.0', - 'X-Appwrite-Response-Format': '2.5.0', + 'x-sdk-version': '3.1.0', + 'X-Appwrite-Response-Format': '2.6.2', }; /** diff --git a/src/lib/tcp-stream.ts b/src/lib/tcp-stream.ts index 11d8f53c..2197cbbe 100644 --- a/src/lib/tcp-stream.ts +++ b/src/lib/tcp-stream.ts @@ -78,6 +78,8 @@ export function createTcpStream({ socket.setNoDelay(true); const duplex = new Duplex({ + // A closed native socket ends both halves so MQTT.js sees 'close' and reconnects. + allowHalfOpen: false, read() { socket.resume(); }, diff --git a/src/services/account.ts b/src/services/account.ts index 734b600d..806e9e73 100644 --- a/src/services/account.ts +++ b/src/services/account.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -391,7 +396,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -470,7 +475,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -553,7 +558,7 @@ export class Account extends Service { const apiPath = '/account/consents/{consentId}/tokens'.replace( '{consentId}', - encodeURIComponent(String(consentId)), + encodePath(consentId), ); const apiPayload: Payload = {}; @@ -673,8 +678,8 @@ export class Account extends Service { } const apiPath = '/account/consents/{consentId}/tokens/{tokenId}' - .replace('{consentId}', encodeURIComponent(String(consentId))) - .replace('{tokenId}', encodeURIComponent(String(tokenId))); + .replace('{consentId}', encodePath(consentId)) + .replace('{tokenId}', encodePath(tokenId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -771,8 +776,8 @@ export class Account extends Service { } const apiPath = '/account/consents/{consentId}/tokens/{tokenId}' - .replace('{consentId}', encodeURIComponent(String(consentId))) - .replace('{tokenId}', encodeURIComponent(String(tokenId))); + .replace('{consentId}', encodePath(consentId)) + .replace('{tokenId}', encodePath(tokenId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1073,7 +1078,7 @@ export class Account extends Service { const apiPath = '/account/identities/{identityId}'.replace( '{identityId}', - encodeURIComponent(String(identityId)), + encodePath(identityId), ); const apiPayload: Payload = {}; @@ -1425,7 +1430,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1500,7 +1505,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1596,7 +1601,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1725,7 +1730,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1833,7 +1838,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -1893,7 +1898,7 @@ export class Account extends Service { const apiPath = '/account/mfa/authenticators/{type}'.replace( '{type}', - encodeURIComponent(String(type)), + encodePath(type), ); const apiPayload: Payload = {}; @@ -2953,7 +2958,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3044,7 +3049,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3123,7 +3128,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -3204,7 +3209,7 @@ export class Account extends Service { const apiPath = '/account/passkeys/{passkeyId}/verification'.replace( '{passkeyId}', - encodeURIComponent(String(passkeyId)), + encodePath(passkeyId), ); const apiPayload: Payload = {}; @@ -4894,7 +4899,7 @@ export class Account extends Service { const apiPath = '/account/sessions/oauth2/{provider}'.replace( '{provider}', - encodeURIComponent(String(provider)), + encodePath(provider), ); const apiPayload: Payload = {}; @@ -5208,7 +5213,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5308,7 +5313,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5407,7 +5412,7 @@ export class Account extends Service { const apiPath = '/account/sessions/{sessionId}'.replace( '{sessionId}', - encodeURIComponent(String(sessionId)), + encodePath(sessionId), ); const apiPayload: Payload = {}; @@ -5734,7 +5739,7 @@ export class Account extends Service { const apiPath = '/account/targets/{targetId}/push'.replace( '{targetId}', - encodeURIComponent(String(targetId)), + encodePath(targetId), ); const apiPayload: Payload = {}; @@ -5826,7 +5831,7 @@ export class Account extends Service { const apiPath = '/account/targets/{targetId}/push'.replace( '{targetId}', - encodeURIComponent(String(targetId)), + encodePath(targetId), ); const apiPayload: Payload = {}; @@ -6204,7 +6209,7 @@ export class Account extends Service { const apiPath = '/account/tokens/oauth2/{provider}'.replace( '{provider}', - encodeURIComponent(String(provider)), + encodePath(provider), ); const apiPayload: Payload = {}; diff --git a/src/services/analytics.ts b/src/services/analytics.ts index af61d584..37e44a72 100644 --- a/src/services/analytics.ts +++ b/src/services/analytics.ts @@ -1,5 +1,5 @@ import { Service } from '../service'; -import { AppwriteException, Client } from '../client'; +import { AppwriteException, Client, encodePath } from '../client'; import type { Payload } from '../client'; export class Analytics extends Service { @@ -11,7 +11,7 @@ export class Analytics extends Service { * Send a tracking event from a browser, native app, or server-side SDK. * * @param {string} params.propertyId - Analytics property ID. - * @param {string} params.name - Event name. "pageview" is just a conventional event name; events are not modeled specially. + * @param {string} params.name - Event name. "pageview" and "screen_view" are counted as views, every other name is a custom event. * @param {string} params.url - Full page URL or screen identifier. * @param {string} params.domain - Hostname (e.g. example.com). * @param {string} params.referrer - Referrer URL. @@ -45,7 +45,7 @@ export class Analytics extends Service { * Send a tracking event from a browser, native app, or server-side SDK. * * @param {string} propertyId - Analytics property ID. - * @param {string} name - Event name. "pageview" is just a conventional event name; events are not modeled specially. + * @param {string} name - Event name. "pageview" and "screen_view" are counted as views, every other name is a custom event. * @param {string} url - Full page URL or screen identifier. * @param {string} domain - Hostname (e.g. example.com). * @param {string} referrer - Referrer URL. @@ -193,7 +193,7 @@ export class Analytics extends Service { const apiPath = '/analytics/properties/{propertyId}/events'.replace( '{propertyId}', - encodeURIComponent(String(propertyId)), + encodePath(propertyId), ); const apiPayload: Payload = {}; diff --git a/src/services/apps.ts b/src/services/apps.ts index 896038d7..55edd0be 100644 --- a/src/services/apps.ts +++ b/src/services/apps.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -670,10 +675,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "appId"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -990,10 +992,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "name"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; if (typeof name !== 'undefined') { @@ -1177,10 +1176,7 @@ export class Apps extends Service { throw new AppwriteException('Missing required parameter: "appId"'); } - const apiPath = '/apps/{appId}'.replace( - '{appId}', - encodeURIComponent(String(appId)), - ); + const apiPath = '/apps/{appId}'.replace('{appId}', encodePath(appId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1260,7 +1256,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/installations'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1376,11 +1372,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1473,11 +1466,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1554,11 +1544,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/installations/{installationId}/tokens' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{appId}', encodePath(appId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1654,7 +1641,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/keys'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1750,7 +1737,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/keys'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -1836,8 +1823,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/keys/{keyId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{keyId}', encodeURIComponent(String(keyId))); + .replace('{appId}', encodePath(appId)) + .replace('{keyId}', encodePath(keyId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1921,8 +1908,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/keys/{keyId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{keyId}', encodeURIComponent(String(keyId))); + .replace('{appId}', encodePath(appId)) + .replace('{keyId}', encodePath(keyId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2002,7 +1989,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/secrets'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2098,7 +2085,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/secrets'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2192,8 +2179,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/secrets/{secretId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{secretId}', encodeURIComponent(String(secretId))); + .replace('{appId}', encodePath(appId)) + .replace('{secretId}', encodePath(secretId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2282,8 +2269,8 @@ export class Apps extends Service { } const apiPath = '/apps/{appId}/secrets/{secretId}' - .replace('{appId}', encodeURIComponent(String(appId))) - .replace('{secretId}', encodeURIComponent(String(secretId))); + .replace('{appId}', encodePath(appId)) + .replace('{secretId}', encodePath(secretId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -2350,7 +2337,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/team'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; @@ -2465,7 +2452,7 @@ export class Apps extends Service { const apiPath = '/apps/{appId}/tokens'.replace( '{appId}', - encodeURIComponent(String(appId)), + encodePath(appId), ); const apiPayload: Payload = {}; diff --git a/src/services/avatars.ts b/src/services/avatars.ts index 168ed2e5..0748b5ab 100644 --- a/src/services/avatars.ts +++ b/src/services/avatars.ts @@ -1,5 +1,5 @@ import { Service } from '../service'; -import { AppwriteException, Client } from '../client'; +import { AppwriteException, Client, encodePath } from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; import { fileSystem } from '../lib/file-system'; @@ -107,7 +107,7 @@ export class Avatars extends Service { const apiPath = '/avatars/browsers/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -237,7 +237,7 @@ export class Avatars extends Service { const apiPath = '/avatars/credit-cards/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -433,7 +433,7 @@ export class Avatars extends Service { const apiPath = '/avatars/flags/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1720,7 +1720,7 @@ export class Avatars extends Service { const apiPath = '/avatars/browsers/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1780,7 +1780,7 @@ export class Avatars extends Service { const apiPath = '/avatars/credit-cards/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; @@ -1877,7 +1877,7 @@ export class Avatars extends Service { const apiPath = '/avatars/flags/{code}'.replace( '{code}', - encodeURIComponent(String(code)), + encodePath(code), ); const apiPayload: Payload = {}; diff --git a/src/services/databases.ts b/src/services/databases.ts index 69623d16..8d416971 100644 --- a/src/services/databases.ts +++ b/src/services/databases.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -233,7 +238,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -338,7 +343,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -425,7 +430,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -503,7 +508,7 @@ export class Databases extends Service { const apiPath = '/databases/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -656,11 +661,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -866,11 +868,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1033,11 +1032,8 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1206,15 +1202,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1399,15 +1389,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1597,15 +1581,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1748,15 +1726,9 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -1919,13 +1891,10 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2114,13 +2083,10 @@ export class Databases extends Service { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/documents-db.ts b/src/services/documents-db.ts index 012b8a03..498b1bb2 100644 --- a/src/services/documents-db.ts +++ b/src/services/documents-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -645,11 +650,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -854,11 +856,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1006,11 +1005,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documents !== 'undefined') { @@ -1175,11 +1171,8 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1347,15 +1340,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1539,15 +1526,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1736,15 +1717,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1886,15 +1861,9 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -2049,13 +2018,10 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2236,13 +2202,10 @@ export class DocumentsDB extends Service { const apiPath = '/documentsdb/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace('{documentId}', encodeURIComponent(String(documentId))) - .replace('{attribute}', encodeURIComponent(String(attribute))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)) + .replace('{attribute}', encodePath(attribute)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/functions.ts b/src/services/functions.ts index db74d35c..453d8ccf 100644 --- a/src/services/functions.ts +++ b/src/services/functions.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -76,7 +81,7 @@ export class Functions extends Service { const apiPath = '/functions/{functionId}/executions'.replace( '{functionId}', - encodeURIComponent(String(functionId)), + encodePath(functionId), ); const apiPayload: Payload = {}; @@ -270,7 +275,7 @@ export class Functions extends Service { const apiPath = '/functions/{functionId}/executions'.replace( '{functionId}', - encodeURIComponent(String(functionId)), + encodePath(functionId), ); const apiPayload: Payload = {}; @@ -415,8 +420,8 @@ export class Functions extends Service { } const apiPath = '/functions/{functionId}/executions/{executionId}' - .replace('{functionId}', encodeURIComponent(String(functionId))) - .replace('{executionId}', encodeURIComponent(String(executionId))); + .replace('{functionId}', encodePath(functionId)) + .replace('{executionId}', encodePath(executionId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); diff --git a/src/services/messaging.ts b/src/services/messaging.ts index b1939ddf..7d0e93f6 100644 --- a/src/services/messaging.ts +++ b/src/services/messaging.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -87,7 +92,7 @@ export class Messaging extends Service { const apiPath = '/messaging/topics/{topicId}/subscribers'.replace( '{topicId}', - encodeURIComponent(String(topicId)), + encodePath(topicId), ); const apiPayload: Payload = {}; @@ -191,11 +196,8 @@ export class Messaging extends Service { } const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}' - .replace('{topicId}', encodeURIComponent(String(topicId))) - .replace( - '{subscriberId}', - encodeURIComponent(String(subscriberId)), - ); + .replace('{topicId}', encodePath(topicId)) + .replace('{subscriberId}', encodePath(subscriberId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); diff --git a/src/services/oauth-2.ts b/src/services/oauth-2.ts index 185fad00..9f96bd6a 100644 --- a/src/services/oauth-2.ts +++ b/src/services/oauth-2.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -79,7 +84,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/approve'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -302,7 +307,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/authorize'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -569,7 +574,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/authorize'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -742,7 +747,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/device_authorization'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -839,7 +844,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/grants'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -925,11 +930,8 @@ export class Oauth2 extends Service { } const apiPath = '/oauth2/{project_id}/grants/{grant_id}' - .replace( - '{project_id}', - encodeURIComponent(String(this.client.config.project)), - ) - .replace('{grant_id}', encodeURIComponent(String(grantId))); + .replace('{project_id}', encodePath(this.client.config.project)) + .replace('{grant_id}', encodePath(grantId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1063,7 +1065,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/logout'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1199,7 +1201,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/logout'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1300,7 +1302,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/organizations'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1540,7 +1542,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/par'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1682,7 +1684,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/projects'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1778,7 +1780,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/reject'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -1892,7 +1894,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/revoke'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; @@ -2072,7 +2074,7 @@ export class Oauth2 extends Service { const apiPath = '/oauth2/{project_id}/token'.replace( '{project_id}', - encodeURIComponent(String(this.client.config.project)), + encodePath(this.client.config.project), ); const apiPayload: Payload = {}; diff --git a/src/services/organization.ts b/src/services/organization.ts index 4ec51e57..930dd0bc 100644 --- a/src/services/organization.ts +++ b/src/services/organization.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -258,7 +263,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; @@ -357,7 +362,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; @@ -442,7 +447,7 @@ export class Organization extends Service { const apiPath = '/organization/installations/{installationId}'.replace( '{installationId}', - encodeURIComponent(String(installationId)), + encodePath(installationId), ); const apiPayload: Payload = {}; diff --git a/src/services/presences.ts b/src/services/presences.ts index 4cc36d8b..a3c1de34 100644 --- a/src/services/presences.ts +++ b/src/services/presences.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -170,7 +175,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -302,7 +307,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -456,7 +461,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; @@ -554,7 +559,7 @@ export class Presences extends Service { const apiPath = '/presences/{presenceId}'.replace( '{presenceId}', - encodeURIComponent(String(presenceId)), + encodePath(presenceId), ); const apiPayload: Payload = {}; diff --git a/src/services/push.ts b/src/services/push.ts index 9d7e985e..4bad16a3 100644 --- a/src/services/push.ts +++ b/src/services/push.ts @@ -1415,6 +1415,7 @@ export class Push extends Service { clean: false, // always keep the session so the broker can replay QoS-1 topics keepalive: KEEP_ALIVE_SECONDS, reconnectPeriod: RECONNECT_PERIOD_MS, + reconnectOnConnackError: true, manualConnect: true, // Enhanced auth carried in CONNECT properties. properties: { diff --git a/src/services/storage.ts b/src/services/storage.ts index 738745ca..510d682a 100644 --- a/src/services/storage.ts +++ b/src/services/storage.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { UploadProgress, Payload } from '../client'; import { fileSystem } from '../lib/file-system'; @@ -96,7 +101,7 @@ export class Storage extends Service { const apiPath = '/storage/buckets/{bucketId}/files'.replace( '{bucketId}', - encodeURIComponent(String(bucketId)), + encodePath(bucketId), ); const apiPayload: Payload = {}; @@ -301,7 +306,7 @@ export class Storage extends Service { const apiPath = '/storage/buckets/{bucketId}/files'.replace( '{bucketId}', - encodeURIComponent(String(bucketId)), + encodePath(bucketId), ); const apiPayload: Payload = {}; @@ -615,8 +620,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -745,8 +750,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof name !== 'undefined') { @@ -852,8 +857,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -938,8 +943,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1159,8 +1164,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof width !== 'undefined') { @@ -1302,8 +1307,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1355,8 +1360,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { @@ -1428,8 +1433,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof width !== 'undefined') { @@ -1517,8 +1522,8 @@ export class Storage extends Service { } const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view' - .replace('{bucketId}', encodeURIComponent(String(bucketId))) - .replace('{fileId}', encodeURIComponent(String(fileId))); + .replace('{bucketId}', encodePath(bucketId)) + .replace('{fileId}', encodePath(fileId)); const apiPayload: Payload = {}; if (typeof token !== 'undefined') { diff --git a/src/services/tables-db.ts b/src/services/tables-db.ts index f0ed6e9c..2d11c637 100644 --- a/src/services/tables-db.ts +++ b/src/services/tables-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -646,8 +651,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -842,8 +847,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof rowId !== 'undefined') { @@ -1002,8 +1007,8 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1166,9 +1171,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1343,9 +1348,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1525,9 +1530,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1666,9 +1671,9 @@ export class TablesDB extends Service { } const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') { @@ -1820,10 +1825,10 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/decrement' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))) - .replace('{column}', encodeURIComponent(String(column))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)) + .replace('{column}', encodePath(column)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { @@ -2001,10 +2006,10 @@ export class TablesDB extends Service { const apiPath = '/tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/increment' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace('{tableId}', encodeURIComponent(String(tableId))) - .replace('{rowId}', encodeURIComponent(String(rowId))) - .replace('{column}', encodeURIComponent(String(column))); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{tableId}', encodePath(tableId)) + .replace('{rowId}', encodePath(rowId)) + .replace('{column}', encodePath(column)); const apiPayload: Payload = {}; if (typeof value !== 'undefined') { diff --git a/src/services/teams.ts b/src/services/teams.ts index b5cd1362..791b95c3 100644 --- a/src/services/teams.ts +++ b/src/services/teams.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -281,7 +286,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -373,7 +378,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -450,7 +455,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -531,7 +536,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/installations'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -659,7 +664,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/installations'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -765,11 +770,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -882,11 +884,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; if (typeof authorizationDetails !== 'undefined') { @@ -984,11 +983,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/installations/{installationId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{installationId}', - encodeURIComponent(String(installationId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{installationId}', encodePath(installationId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1086,7 +1082,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/memberships'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1295,7 +1291,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/memberships'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1427,11 +1423,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1547,11 +1540,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; if (typeof roles !== 'undefined') { @@ -1655,11 +1645,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); @@ -1776,11 +1763,8 @@ export class Teams extends Service { } const apiPath = '/teams/{teamId}/memberships/{membershipId}/status' - .replace('{teamId}', encodeURIComponent(String(teamId))) - .replace( - '{membershipId}', - encodeURIComponent(String(membershipId)), - ); + .replace('{teamId}', encodePath(teamId)) + .replace('{membershipId}', encodePath(membershipId)); const apiPayload: Payload = {}; if (typeof userId !== 'undefined') { @@ -1876,7 +1860,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/prefs'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; @@ -1949,7 +1933,7 @@ export class Teams extends Service { const apiPath = '/teams/{teamId}/prefs'.replace( '{teamId}', - encodeURIComponent(String(teamId)), + encodePath(teamId), ); const apiPayload: Payload = {}; diff --git a/src/services/vectors-db.ts b/src/services/vectors-db.ts index 61b4df27..4355e31f 100644 --- a/src/services/vectors-db.ts +++ b/src/services/vectors-db.ts @@ -1,5 +1,10 @@ import { Service } from '../service'; -import { AppwriteException, Client, applyDefaults } from '../client'; +import { + AppwriteException, + Client, + applyDefaults, + encodePath, +} from '../client'; import type { Models } from '../models'; import type { Payload } from '../client'; @@ -230,7 +235,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -334,7 +339,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -420,7 +425,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -497,7 +502,7 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/transactions/{transactionId}/operations'.replace( '{transactionId}', - encodeURIComponent(String(transactionId)), + encodePath(transactionId), ); const apiPayload: Payload = {}; @@ -645,11 +650,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -854,11 +856,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof documentId !== 'undefined') { @@ -1020,11 +1019,8 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/query' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1192,15 +1188,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof queries !== 'undefined') { @@ -1384,15 +1374,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1581,15 +1565,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof data !== 'undefined') { @@ -1731,15 +1709,9 @@ export class VectorsDB extends Service { const apiPath = '/vectorsdb/{databaseId}/collections/{collectionId}/documents/{documentId}' - .replace('{databaseId}', encodeURIComponent(String(databaseId))) - .replace( - '{collectionId}', - encodeURIComponent(String(collectionId)), - ) - .replace( - '{documentId}', - encodeURIComponent(String(documentId)), - ); + .replace('{databaseId}', encodePath(databaseId)) + .replace('{collectionId}', encodePath(collectionId)) + .replace('{documentId}', encodePath(documentId)); const apiPayload: Payload = {}; if (typeof transactionId !== 'undefined') {