diff --git a/api/package.json b/api/package.json index aad0189a6..e6fc07398 100644 --- a/api/package.json +++ b/api/package.json @@ -28,6 +28,7 @@ "car-info": "0.2.2", "drizzle-orm": "^0.45.1", "ioredis": "^5.8.2", + "jose": "^6.1.3", "nodemailer": "^7.0.12", "pg": "^8.16.3", "redlock-universal": "^0.8.0", diff --git a/api/src/routers/rider.ts b/api/src/routers/rider.ts index f458ff86f..9a253bcbf 100644 --- a/api/src/routers/rider.ts +++ b/api/src/routers/rider.ts @@ -23,6 +23,7 @@ import { inProgressBeep, rideResponseSchema, } from "../logic/beep"; +import { startLiveActivity } from "../utils/apns"; export const riderRouter = router({ beepers: verifiedProcedure @@ -178,6 +179,10 @@ export const riderRouter = router({ beeper, }); + startLiveActivity( + "40d8c7eca3535311fce9a4854394e9e463ef0014b612e3b8773e2f88155f2578cebedb455469a2dff5db3db86d38c0d70be97312d5d6c7308b5ac3495f95c6cafa4e7eb27dd986d6dd513baec37b2e38", + ); + pubSub.publish("queue", beeper.id, { queue }); if (beeper.pushToken) { diff --git a/api/src/utils/apns.ts b/api/src/utils/apns.ts new file mode 100644 index 000000000..dfedfb796 --- /dev/null +++ b/api/src/utils/apns.ts @@ -0,0 +1,81 @@ +import http2 from "http2"; +import { importPKCS8, SignJWT } from "jose"; + +export async function startLiveActivity(deviceToken: string) { + const privateKey = process.env.APNS_KEY; + + const key = await importPKCS8(privateKey!, "ES256"); + + const token = await new SignJWT({ iss: process.env.APNS_TEAM_ID }) + .setProtectedHeader({ alg: "ES256", kid: process.env.APNS_KEY_ID }) + .setIssuedAt() + .sign(key); + + const client = http2.connect("https://api.push.apple.com"); + + const headers = { + ":method": "POST", + ":scheme": "https", + "apns-topic": "app.ridebeep.App.push-type.liveactivity", + "apns-push-type": "liveactivity", + ":path": "/3/device/" + deviceToken, + authorization: `bearer ${token}`, + }; + + const request = client.request(headers); + + request.setEncoding("utf8"); + + request.write( + JSON.stringify({ + aps: { + event: "start", + "content-state": { + title: "Beep with Banks Nussman", + subtitle: "Your driver is arriving soon", + progress: 0.5, + imageName: "taxi", + dynamicIslandImageName: "taxi", + }, + timestamp: Date.now(), + "attributes-type": "LiveActivityAttributes", + attributes: { + name: "Test", + backgroundColor: "19191a", + titleColor: "FFF", + subtitleColor: "FFFFFF75", + progressViewTint: "38ACDD", + progressViewLabelColor: "FFFFFF", + timerType: "digital", + padding: 24, + imageSize: { width: 32, height: 32 }, + imagePosition: "right", + contentFit: "contain", + }, + alert: { + title: "", + body: "", + sound: "default", + }, + }, + }), + ); + + request.on("response", (headers, flags) => { + for (const name in headers) { + console.log(`${name}: ${headers[name]}`); + } + }); + + let data = ""; + request.on("data", (chunk) => { + data += chunk; + }); + + request.on("end", () => { + console.log(`\n${data}`); + client.close(); + }); + + request.end(); +} diff --git a/app/app.config.ts b/app/app.config.ts index fd6d35dca..63da19248 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -60,6 +60,12 @@ const config: ExpoConfig = { organization: "ian-banks-llc", }, ], + [ + "expo-live-activity", + { + enablePushNotifications: true, + }, + ], ], ios: { supportsTablet: true, diff --git a/app/assets/liveActivity/taxi.png b/app/assets/liveActivity/taxi.png new file mode 100644 index 000000000..9ecfc4008 Binary files /dev/null and b/app/assets/liveActivity/taxi.png differ diff --git a/app/package.json b/app/package.json index 421de018c..9d3863a7c 100644 --- a/app/package.json +++ b/app/package.json @@ -29,6 +29,7 @@ "expo-image-picker": "~17.0.8", "expo-linear-gradient": "~15.0.7", "expo-linking": "~8.0.8", + "expo-live-activity": "^0.4.2", "expo-location": "~19.0.7", "expo-notifications": "~0.32.12", "expo-splash-screen": "~31.0.10", @@ -55,6 +56,7 @@ "devDependencies": { "@babel/core": "^7.24.4", "@expo/metro-runtime": "~6.1.2", + "@sentry/cli": "^2.58.2", "@trpc/server": "^11.8.1", "@types/react": "19.1.12", "@types/react-dom": "~19.1.9", diff --git a/app/utils/notifications.ts b/app/utils/notifications.ts index f76148335..c75b9186f 100644 --- a/app/utils/notifications.ts +++ b/app/utils/notifications.ts @@ -1,4 +1,5 @@ import * as Notifications from "expo-notifications"; +import * as LiveActivity from "expo-live-activity"; import { isMobile, isSimulator, isWeb } from "./constants"; import { captureException } from "@sentry/react-native"; import { trpcClient } from "./trpc"; @@ -87,6 +88,11 @@ export async function updatePushToken( } } +LiveActivity.addActivityPushToStartTokenListener((event) => { + console.log(event); + alert(event.activityPushToStartToken); +}); + export function setupNotifications() { if (!isWeb) { Notifications.setNotificationCategoryAsync( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23367565c..f3818c7b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,10 +44,13 @@ importers: version: 0.2.2 drizzle-orm: specifier: ^0.45.1 - version: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(bun-types@1.3.5)(gel@2.0.1)(knex@3.1.0(pg@8.16.3))(pg@8.16.3)(postgres@3.4.4) + version: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(bun-types@1.3.5)(gel@2.0.1)(pg@8.16.3)(postgres@3.4.4) ioredis: specifier: ^5.8.2 version: 5.8.2 + jose: + specifier: ^6.1.3 + version: 6.1.3 nodemailer: specifier: ^7.0.12 version: 7.0.12 @@ -139,6 +142,9 @@ importers: expo-linking: specifier: ~8.0.8 version: 8.0.8(expo@54.0.20)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + expo-live-activity: + specifier: ^0.4.2 + version: 0.4.2(expo@54.0.20)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) expo-location: specifier: ~19.0.7 version: 19.0.7(expo@54.0.20) @@ -212,6 +218,9 @@ importers: '@expo/metro-runtime': specifier: ~6.1.2 version: 6.1.2(expo@54.0.20)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + '@sentry/cli': + specifier: ^2.58.2 + version: 2.58.4(encoding@0.1.13) '@trpc/server': specifier: ^11.8.1 version: 11.8.1(typescript@5.9.2) @@ -2799,53 +2808,105 @@ packages: engines: {node: '>=10'} os: [darwin] + '@sentry/cli-darwin@2.58.4': + resolution: {integrity: sha512-kbTD+P4X8O+nsNwPxCywtj3q22ecyRHWff98rdcmtRrvwz8CKi/T4Jxn/fnn2i4VEchy08OWBuZAqaA5Kh2hRQ==} + engines: {node: '>=10'} + os: [darwin] + '@sentry/cli-linux-arm64@2.55.0': resolution: {integrity: sha512-jNB/0/gFcOuDCaY/TqeuEpsy/k52dwyk1SOV3s1ku4DUsln6govTppeAGRewY3T1Rj9B2vgIWTrnB8KVh9+Rgg==} engines: {node: '>=10'} cpu: [arm64] os: [linux, freebsd, android] + '@sentry/cli-linux-arm64@2.58.4': + resolution: {integrity: sha512-0g0KwsOozkLtzN8/0+oMZoOuQ0o7W6O+hx+ydVU1bktaMGKEJLMAWxOQNjsh1TcBbNIXVOKM/I8l0ROhaAb8Ig==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd, android] + '@sentry/cli-linux-arm@2.55.0': resolution: {integrity: sha512-ATjU0PsiWADSPLF/kZroLZ7FPKd5W9TDWHVkKNwIUNTei702LFgTjNeRwOIzTgSvG3yTmVEqtwFQfFN/7hnVXQ==} engines: {node: '>=10'} cpu: [arm] os: [linux, freebsd, android] + '@sentry/cli-linux-arm@2.58.4': + resolution: {integrity: sha512-rdQ8beTwnN48hv7iV7e7ZKucPec5NJkRdrrycMJMZlzGBPi56LqnclgsHySJ6Kfq506A2MNuQnKGaf/sBC9REA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd, android] + '@sentry/cli-linux-i686@2.55.0': resolution: {integrity: sha512-8LZjo6PncTM6bWdaggscNOi5r7F/fqRREsCwvd51dcjGj7Kp1plqo9feEzYQ+jq+KUzVCiWfHrUjddFmYyZJrg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [linux, freebsd, android] + '@sentry/cli-linux-i686@2.58.4': + resolution: {integrity: sha512-NseoIQAFtkziHyjZNPTu1Gm1opeQHt7Wm1LbLrGWVIRvUOzlslO9/8i6wETUZ6TjlQxBVRgd3Q0lRBG2A8rFYA==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd, android] + '@sentry/cli-linux-x64@2.55.0': resolution: {integrity: sha512-5LUVvq74Yj2cZZy5g5o/54dcWEaX4rf3myTHy73AKhRj1PABtOkfexOLbF9xSrZy95WXWaXyeH+k5n5z/vtHfA==} engines: {node: '>=10'} cpu: [x64] os: [linux, freebsd, android] + '@sentry/cli-linux-x64@2.58.4': + resolution: {integrity: sha512-d3Arz+OO/wJYTqCYlSN3Ktm+W8rynQ/IMtSZLK8nu0ryh5mJOh+9XlXY6oDXw4YlsM8qCRrNquR8iEI1Y/IH+Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd, android] + '@sentry/cli-win32-arm64@2.55.0': resolution: {integrity: sha512-cWIQdzm1pfLwPARsV6dUb8TVd6Y3V1A2VWxjTons3Ift6GvtVmiAe0OWL8t2Yt95i8v61kTD/6Tq21OAaogqzA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] + '@sentry/cli-win32-arm64@2.58.4': + resolution: {integrity: sha512-bqYrF43+jXdDBh0f8HIJU3tbvlOFtGyRjHB8AoRuMQv9TEDUfENZyCelhdjA+KwDKYl48R1Yasb4EHNzsoO83w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + '@sentry/cli-win32-i686@2.55.0': resolution: {integrity: sha512-ldepCn2t9r4I0wvgk7NRaA7coJyy4rTQAzM66u9j5nTEsUldf66xym6esd5ZZRAaJUjffqvHqUIr/lrieTIrVg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [win32] + '@sentry/cli-win32-i686@2.58.4': + resolution: {integrity: sha512-3triFD6jyvhVcXOmGyttf+deKZcC1tURdhnmDUIBkiDPJKGT/N5xa4qAtHJlAB/h8L9jgYih9bvJnvvFVM7yug==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + '@sentry/cli-win32-x64@2.55.0': resolution: {integrity: sha512-4hPc/I/9tXx+HLTdTGwlagtAfDSIa2AoTUP30tl32NAYQhx9a6niUbPAemK2qfxesiufJ7D2djX83rCw6WnJVA==} engines: {node: '>=10'} cpu: [x64] os: [win32] + '@sentry/cli-win32-x64@2.58.4': + resolution: {integrity: sha512-cSzN4PjM1RsCZ4pxMjI0VI7yNCkxiJ5jmWncyiwHXGiXrV1eXYdQ3n1LhUYLZ91CafyprR0OhDcE+RVZ26Qb5w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + '@sentry/cli@2.55.0': resolution: {integrity: sha512-cynvcIM2xL8ddwELyFRSpZQw4UtFZzoM2rId2l9vg7+wDREPDocMJB9lEQpBIo3eqhp9JswqUT037yjO6iJ5Sw==} engines: {node: '>= 10'} hasBin: true + '@sentry/cli@2.58.4': + resolution: {integrity: sha512-ArDrpuS8JtDYEvwGleVE+FgR+qHaOp77IgdGSacz6SZy6Lv90uX0Nu4UrHCQJz8/xwIcNxSqnN22lq0dH4IqTg==} + engines: {node: '>= 10'} + hasBin: true + '@sentry/core@10.12.0': resolution: {integrity: sha512-Jrf0Yo7DvmI/ZQcvBnA0xKNAFkJlVC/fMlvcin+5IrFNRcqOToZ2vtF+XqTgjRZymXQNE8s1QTD7IomPHk0TAw==} engines: {node: '>=18'} @@ -3873,13 +3934,6 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -3984,15 +4038,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -4265,10 +4310,6 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -4384,6 +4425,13 @@ packages: react: 19.1.0 react-native: '*' + expo-live-activity@0.4.2: + resolution: {integrity: sha512-b3QdsXAg8dPr6p8w4U4eBYdndArSprCPOJC9U8wovAsOOrCA3eSv4vwfn41XNDmaPTc6gweCABaIIxPaTg2oZQ==} + peerDependencies: + expo: '*' + react: 19.1.0 + react-native: '*' + expo-location@19.0.7: resolution: {integrity: sha512-YNkh4r9E6ECbPkBCAMG5A5yHDgS0pw+Rzyd0l2ZQlCtjkhlODB55nMCKr5CZnUI0mXTkaSm8CwfoCO8n2MpYfg==} peerDependencies: @@ -4640,9 +4688,6 @@ packages: resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==} engines: {node: '>=6'} - getopts@2.3.0: - resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} - gl-matrix@3.4.4: resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} @@ -4825,10 +4870,6 @@ packages: inline-style-prefixer@7.0.1: resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -5001,6 +5042,9 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + jose@6.1.3: + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5069,34 +5113,6 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knex@3.1.0: - resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==} - engines: {node: '>=16'} - hasBin: true - peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: - optional: true - pg-native: - optional: true - sqlite3: - optional: true - tedious: - optional: true - lan-network@0.1.6: resolution: {integrity: sha512-0qPYjNoD89v+bfhkIqFBYGBAof1xhxLqjX8bkNN1kQdP81UHpZw5TDXgEjwB+X2iCFGQmzF8TRmvg4vQcykyDA==} hasBin: true @@ -5204,9 +5220,6 @@ packages: lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} engines: {node: '>=4'} @@ -5433,9 +5446,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -5707,9 +5717,6 @@ packages: pg-cloudflare@1.2.7: resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} - pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} - pg-connection-string@2.9.1: resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} @@ -6130,10 +6137,6 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -6623,10 +6626,6 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -6654,10 +6653,6 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - tildify@2.0.0: - resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} - engines: {node: '>=8'} - tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -10251,27 +10246,51 @@ snapshots: '@sentry/cli-darwin@2.55.0': optional: true + '@sentry/cli-darwin@2.58.4': + optional: true + '@sentry/cli-linux-arm64@2.55.0': optional: true + '@sentry/cli-linux-arm64@2.58.4': + optional: true + '@sentry/cli-linux-arm@2.55.0': optional: true + '@sentry/cli-linux-arm@2.58.4': + optional: true + '@sentry/cli-linux-i686@2.55.0': optional: true + '@sentry/cli-linux-i686@2.58.4': + optional: true + '@sentry/cli-linux-x64@2.55.0': optional: true + '@sentry/cli-linux-x64@2.58.4': + optional: true + '@sentry/cli-win32-arm64@2.55.0': optional: true + '@sentry/cli-win32-arm64@2.58.4': + optional: true + '@sentry/cli-win32-i686@2.55.0': optional: true + '@sentry/cli-win32-i686@2.58.4': + optional: true + '@sentry/cli-win32-x64@2.55.0': optional: true + '@sentry/cli-win32-x64@2.58.4': + optional: true + '@sentry/cli@2.55.0(encoding@0.1.13)': dependencies: https-proxy-agent: 5.0.1 @@ -10292,6 +10311,26 @@ snapshots: - encoding - supports-color + '@sentry/cli@2.58.4(encoding@0.1.13)': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.58.4 + '@sentry/cli-linux-arm': 2.58.4 + '@sentry/cli-linux-arm64': 2.58.4 + '@sentry/cli-linux-i686': 2.58.4 + '@sentry/cli-linux-x64': 2.58.4 + '@sentry/cli-win32-arm64': 2.58.4 + '@sentry/cli-win32-i686': 2.58.4 + '@sentry/cli-win32-x64': 2.58.4 + transitivePeerDependencies: + - encoding + - supports-color + '@sentry/core@10.12.0': {} '@sentry/core@10.32.1': {} @@ -11592,12 +11631,6 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 - colorette@2.0.19: - optional: true - - commander@10.0.1: - optional: true - commander@12.1.0: {} commander@2.20.3: {} @@ -11702,11 +11735,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - optional: true - debug@4.4.3: dependencies: ms: 2.1.3 @@ -11774,13 +11802,12 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(bun-types@1.3.5)(gel@2.0.1)(knex@3.1.0(pg@8.16.3))(pg@8.16.3)(postgres@3.4.4): + drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(bun-types@1.3.5)(gel@2.0.1)(pg@8.16.3)(postgres@3.4.4): optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/pg': 8.16.0 bun-types: 1.3.5 gel: 2.0.1 - knex: 3.1.0(pg@8.16.3) pg: 8.16.3 postgres: 3.4.4 @@ -11905,9 +11932,6 @@ snapshots: escape-string-regexp@4.0.0: {} - esm@3.2.25: - optional: true - esprima@4.0.1: {} etag@1.8.1: {} @@ -12042,6 +12066,12 @@ snapshots: - expo - supports-color + expo-live-activity@0.4.2(expo@54.0.20)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0): + dependencies: + expo: 54.0.20(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(graphql@15.8.0)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0) + expo-location@19.0.7(expo@54.0.20): dependencies: expo: 54.0.20(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(graphql@15.8.0)(react-native@0.81.5(@babel/core@7.28.4)(@types/react@19.1.12)(react@19.1.0))(react@19.1.0) @@ -12338,9 +12368,6 @@ snapshots: getenv@2.0.0: {} - getopts@2.3.0: - optional: true - gl-matrix@3.4.4: {} glob@10.4.5: @@ -12543,9 +12570,6 @@ snapshots: dependencies: css-in-js-utils: 3.1.0 - interpret@2.2.0: - optional: true - invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -12739,6 +12763,8 @@ snapshots: jiti@1.21.6: optional: true + jose@6.1.3: {} + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -12784,28 +12810,6 @@ snapshots: kleur@3.0.3: {} - knex@3.1.0(pg@8.16.3): - dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4 - escalade: 3.2.0 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.17.21 - pg-connection-string: 2.6.2 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 - optionalDependencies: - pg: 8.16.3 - transitivePeerDependencies: - - supports-color - optional: true - lan-network@0.1.6: {} leven@3.1.0: {} @@ -12886,9 +12890,6 @@ snapshots: lodash.throttle@4.1.1: {} - lodash@4.17.21: - optional: true - log-symbols@2.2.0: dependencies: chalk: 2.4.2 @@ -13268,9 +13269,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: - optional: true - ms@2.1.3: {} murmurhash-js@1.0.0: {} @@ -13554,9 +13552,6 @@ snapshots: pg-cloudflare@1.2.7: optional: true - pg-connection-string@2.6.2: - optional: true - pg-connection-string@2.9.1: {} pg-int8@1.0.1: {} @@ -14000,11 +13995,6 @@ snapshots: json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 - rechoir@0.8.0: - dependencies: - resolve: 1.22.11 - optional: true - redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -14483,9 +14473,6 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - tarn@3.0.2: - optional: true - temp-dir@2.0.0: {} terminal-link@2.1.1: @@ -14516,9 +14503,6 @@ snapshots: throat@5.0.0: {} - tildify@2.0.0: - optional: true - tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {}