From 616b28c91102d74b145aa82208701cd0de99a6b5 Mon Sep 17 00:00:00 2001 From: 3m1n3nc3 Date: Fri, 23 Oct 2026 07:00:31 +0100 Subject: [PATCH 1/2] feat(migration): add attempts column to password_resets table for tracking wrong guesses --- apps/api/package.json | 30 +- .../controllers/auth/NewPasswordController.ts | 74 +++-- .../auth/VerificationController.ts | 4 +- apps/api/src/app/models/PasswordReset.ts | 67 +++- ...3100000_add_attempts_to_password_resets.ts | 16 + apps/api/tests/account.test.ts | 12 +- apps/dashboard/package.json | 4 +- apps/dashboard/src/lib/api/auth.ts | 13 +- .../dashboard/src/pages/ResetPasswordPage.tsx | 37 ++- packages/widget/package.json | 4 +- pnpm-lock.yaml | 300 +++++++++--------- 11 files changed, 337 insertions(+), 224 deletions(-) create mode 100644 apps/api/src/database/migrations/20261023100000_add_attempts_to_password_resets.ts diff --git a/apps/api/package.json b/apps/api/package.json index 56e912a8..e505e05b 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -17,21 +17,21 @@ "postinstall": "prepare" }, "dependencies": { - "@arkstack/auth": "^0.20.1", - "@arkstack/cache": "^0.20.1", - "@arkstack/common": "^0.20.1", - "@arkstack/console": "^0.20.1", - "@arkstack/contract": "^0.20.1", - "@arkstack/database": "^0.20.1", - "@arkstack/driver-express": "^0.20.1", - "@arkstack/filesystem": "^0.20.1", - "@arkstack/foundry": "^0.20.1", - "@arkstack/http": "^0.20.1", - "@arkstack/jobs": "^0.20.1", - "@arkstack/notifications": "^0.20.1", - "@arkstack/queue": "^0.20.1", - "@arkstack/scheduler": "^0.20.1", - "@arkstack/view": "^0.20.1", + "@arkstack/auth": "^0.20.2", + "@arkstack/cache": "^0.20.2", + "@arkstack/common": "^0.20.2", + "@arkstack/console": "^0.20.2", + "@arkstack/contract": "^0.20.2", + "@arkstack/database": "^0.20.2", + "@arkstack/driver-express": "^0.20.2", + "@arkstack/filesystem": "^0.20.2", + "@arkstack/foundry": "^0.20.2", + "@arkstack/http": "^0.20.2", + "@arkstack/jobs": "^0.20.2", + "@arkstack/notifications": "^0.20.2", + "@arkstack/queue": "^0.20.2", + "@arkstack/scheduler": "^0.20.2", + "@arkstack/view": "^0.20.2", "@arkyc/auth": "workspace:^", "@arkyc/core": "workspace:^", "@arkyc/face-match": "workspace:^", diff --git a/apps/api/src/app/http/controllers/auth/NewPasswordController.ts b/apps/api/src/app/http/controllers/auth/NewPasswordController.ts index ce1bdbc0..2d531eda 100644 --- a/apps/api/src/app/http/controllers/auth/NewPasswordController.ts +++ b/apps/api/src/app/http/controllers/auth/NewPasswordController.ts @@ -5,11 +5,13 @@ import EmptyResource from '@app/http/resources/EmptyResource' import { Hash } from '@arkstack/common' import { HttpContext } from 'clear-router/types/express' import { PasswordReset } from '@app/models/PasswordReset' +import { PersonalAccessToken } from '@app/models/PersonalAccessToken' import { User } from '@app/models/User' import { auth } from 'src/core/auth-instance' import { sendMail } from '@app/support/mail' const RESET_TTL_SECONDS = 60 * 15 +const resetKey = (identity: string) => `${identity}:password-reset` /** Forgotten-password flow: request a reset code, verify it, set a new password. */ export default class NewPasswordController extends BaseController { @@ -22,8 +24,15 @@ export default class NewPasswordController extends BaseController { const data = await this.validate({ email: ['required', 'email', 'exists:users,email'] }) const user = await User.where({ email: data.email }).firstOrFail() - const token = Hash.otp(6, user.email, RESET_TTL_SECONDS).generate() - const pr = await PasswordReset.create({ email: user.email, phone: null, token }) + const token = Hash.otp(6, resetKey(user.email), RESET_TTL_SECONDS).generate() + + await PasswordReset.where({ email: user.email }).delete() + const pr = await PasswordReset.create({ + email: user.email, + phone: null, + token, + attempts: 0, + }) const msg = config('messages.password_reset.email') @@ -49,20 +58,16 @@ export default class NewPasswordController extends BaseController { * * @returns An EmptyResource confirming validity (HTTP 202). */ - async show() { - const { token } = await Validator.make(this.params, { - token: ['required', 'string'], - }).validate() + async show({ req }: HttpContext) { + const data = await Validator.make( + { ...this.params, email: req.query.email }, + { + token: ['required', 'string'], + email: ['nullable', 'email'], + }, + ).validate() - const pr = await PasswordReset.fromToken(token).catch(() => null) - const delta = pr ? Hash.otp(6, pr.email ?? pr.phone!, RESET_TTL_SECONDS).validate({ token: pr.token }) : null - - if (delta === null) { - if (pr) await pr.delete() - throw ValidationException.withMessages({ - token: ['Invalid or expired password reset token.'], - }) - } + await this.redeem(data.token, String(data.email)) return new EmptyResource({}) .additional({ @@ -84,25 +89,18 @@ export default class NewPasswordController extends BaseController { { ...this.params, ...this.body }, { token: ['required', 'string'], + email: ['nullable', 'email'], password: ['required', 'string', 'min:8'], }, ).validate() - const pr = await PasswordReset.fromToken(data.token).catch(() => null) - const delta = pr ? Hash.otp(6, pr.email ?? pr.phone!, RESET_TTL_SECONDS).validate({ token: pr.token }) : null - - if (delta === null || pr === null) { - if (pr) await pr.delete() - throw ValidationException.withMessages({ - token: ['Invalid or expired password reset token.'], - }) - } - + const pr = await this.redeem(data.token, data.email) const user = await User.where({ email: pr.email! }).firstOrFail() user.password = await Hash.make(data.password) await user.save() - await pr.delete() + await PasswordReset.where({ email: pr.email! }).delete() + await PersonalAccessToken.where({ userId: user.id }).delete() return new EmptyResource({}) .additional({ @@ -146,4 +144,28 @@ export default class NewPasswordController extends BaseController { code: 200, }) } + + /** The reset matching the submitted code and email, or a validation error. */ + private async redeem(token: string, email?: string | null): Promise { + const submitted = PasswordReset.parse(token, email) + + if (!submitted.email) { + throw ValidationException.withMessages({ + email: ['Enter the email address the reset code was sent to.'], + }) + } + + const pr = await PasswordReset.redeem(submitted.email, submitted.code) + const valid = + pr !== null && Hash.otp(6, resetKey(pr.email!), RESET_TTL_SECONDS).validate({ token: pr.token }) !== null + + if (!valid) { + if (pr) await pr.delete() + throw ValidationException.withMessages({ + token: ['Invalid or expired password reset token.'], + }) + } + + return pr + } } diff --git a/apps/api/src/app/http/controllers/auth/VerificationController.ts b/apps/api/src/app/http/controllers/auth/VerificationController.ts index 6ef430c2..77d4e890 100644 --- a/apps/api/src/app/http/controllers/auth/VerificationController.ts +++ b/apps/api/src/app/http/controllers/auth/VerificationController.ts @@ -20,7 +20,7 @@ export default class VerificationController extends BaseController { const user = req.user! // Stateless time-based OTP keyed by the user's email (no storage needed). - const code = Hash.otp(6, user.email, 60 * 15).generate() + const code = Hash.otp(6, `${user.email}:email-verification`, 60 * 15).generate() const msg = config('messages.verification.email') sendMail(user.email, msg.template, msg.subject, { @@ -51,7 +51,7 @@ export default class VerificationController extends BaseController { const form = await this.validate({ code: ['required', 'string', 'size:6'] }) const user = req.user! - const delta = Hash.otp(6, user.email, 60 * 15).validate({ token: form.code }) + const delta = Hash.otp(6, `${user.email}:email-verification`, 60 * 15).validate({ token: form.code }) if (delta === null) { throw ValidationException.withMessages({ code: ['Invalid or expired verification code.'] }) diff --git a/apps/api/src/app/models/PasswordReset.ts b/apps/api/src/app/models/PasswordReset.ts index a83961a1..4e6d4d61 100644 --- a/apps/api/src/app/models/PasswordReset.ts +++ b/apps/api/src/app/models/PasswordReset.ts @@ -1,31 +1,78 @@ import { Model } from 'arkormx' +import { timingSafeEqual } from 'node:crypto' export class PasswordReset extends Model { declare id: string declare email: string | null declare phone: string | null declare token: string + declare attempts: number declare createdAt: Date declare updatedAt: Date - static fromToken(token: string) { - if (token.length > 6) { - token = Buffer.from(token, 'base64url').toString().split('-')[0] + static readonly MAX_ATTEMPTS = 5 + + /** + * Splits a submitted token into its code and email. + * + * A six-digit code needs the email it was sent to; a link token carries both. + * + * @param token + * @param email + * @returns + */ + static parse(token: string, email?: string | null): { code: string; email: string | null } { + if (token.length <= 6) return { code: token, email: email ?? null } + + const decoded = Buffer.from(token, 'base64url').toString() + const separator = decoded.indexOf('-') + + return separator > 0 + ? { code: decoded.slice(0, separator), email: decoded.slice(separator + 1) } + : { code: '', email: null } + } + + /** + * The open reset for `email` whose code is `code`. + * + * Every check spends one attempt before comparing, and a reset is discarded + * once its attempts run out. + * + * @param email + * @param code + * @returns + */ + static async redeem(email: string, code: string): Promise { + const reset = await this.query().where({ email }).latest().first() + + if (!reset) return null + + if (reset.attempts >= this.MAX_ATTEMPTS) { + await reset.delete() + + return null } - return this.query().where({ token }).firstOrFail() + const spent = await this.query() + .where({ id: reset.id, attempts: reset.attempts }) + .updateFrom({ attempts: reset.attempts + 1 }) + + return spent > 0 && reset.matches(code) ? reset : null + } + + matches(code: string): boolean { + const expected = Buffer.from(this.token) + const actual = Buffer.from(code) + + return expected.length === actual.length && timingSafeEqual(expected, actual) } /** * get the password reset link */ link() { - const b64Token = Buffer.from( - str(this.token) - .append('-' + Math.random()) - .toString(), - ).toString('base64url') + const token = Buffer.from(`${this.token}-${this.email}`).toString('base64url') - return `${config('app.frontend_url')}/auth/reset-password?token=${b64Token}` + return `${config('app.frontend_url')}/auth/reset-password?token=${token}` } } diff --git a/apps/api/src/database/migrations/20261023100000_add_attempts_to_password_resets.ts b/apps/api/src/database/migrations/20261023100000_add_attempts_to_password_resets.ts new file mode 100644 index 00000000..f7233e83 --- /dev/null +++ b/apps/api/src/database/migrations/20261023100000_add_attempts_to_password_resets.ts @@ -0,0 +1,16 @@ +import { Migration, SchemaBuilder } from 'arkormx' + +/** Wrong guesses made against a password reset code. */ +export default class AddAttemptsToPasswordResetsMigration extends Migration { + public async up(schema: SchemaBuilder): Promise { + schema.alterTable('password_resets', (table) => { + table.integer('attempts').default(0) + }) + } + + public async down(schema: SchemaBuilder): Promise { + schema.alterTable('password_resets', (table) => { + table.dropColumn('attempts') + }) + } +} diff --git a/apps/api/tests/account.test.ts b/apps/api/tests/account.test.ts index 01050c60..c029b767 100644 --- a/apps/api/tests/account.test.ts +++ b/apps/api/tests/account.test.ts @@ -26,7 +26,7 @@ describe('email verification', () => { expect(send.status).toBe(201) // The code is a stateless time-based OTP keyed by the email — regenerate it. - const code = Hash.otp(6, email, 60 * 15).generate() + const code = Hash.otp(6, `${email}:email-verification`, 60 * 15).generate() const verify = await request(app) .put('/api/v1/auth/verify/email') .set('Authorization', `Bearer ${token}`) @@ -72,11 +72,15 @@ describe('password reset', () => { const pr = await PasswordReset.where({ email }).firstOrFail() const code = pr.token - const check = await request(app).get(`/api/v1/auth/forgot/${code}`) + const withoutEmail = await request(app).put(`/api/v1/auth/forgot/${code}`).send({ password: 'newpass123' }) + + expect(withoutEmail.status).toBe(422) + + const check = await request(app).get(`/api/v1/auth/forgot/${code}`).query({ email }) expect(check.status).toBe(202) - const reset = await request(app).put(`/api/v1/auth/forgot/${code}`).send({ password: 'newpass123' }) + const reset = await request(app).put(`/api/v1/auth/forgot/${code}`).send({ email, password: 'newpass123' }) expect(reset.status).toBe(202) @@ -91,7 +95,7 @@ describe('password reset', () => { }) it('rejects an unknown reset token', async () => { - const res = await request(app).get('/api/v1/auth/forgot/123456') + const res = await request(app).get('/api/v1/auth/forgot/123456').query({ email: 'nobody@test.dev' }) expect(res.status).toBe(422) }) diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 86d214e6..36f27033 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "@alova/adapter-axios": "^2.0.18", - "@arkstack/realtime": "^0.19.4", + "@arkstack/realtime": "^0.20.2", "@arkyc/types": "workspace:^", "@arkyc/widget": "workspace:^", "@uidotdev/usehooks": "^2.4.1", @@ -52,4 +52,4 @@ "vite": "^8.0.16", "wrangler": "^4.149.0" } -} +} \ No newline at end of file diff --git a/apps/dashboard/src/lib/api/auth.ts b/apps/dashboard/src/lib/api/auth.ts index 9fac55ac..a79ef8aa 100644 --- a/apps/dashboard/src/lib/api/auth.ts +++ b/apps/dashboard/src/lib/api/auth.ts @@ -93,13 +93,16 @@ export class Auth { return alova.Post('/v1/auth/forgot', input, { name: 'auth:forgot' }) } - /** Check that a reset token is still valid (no auth). */ - static verifyResetToken(token: string) { - return alova.Get(`/v1/auth/forgot/${encodeURIComponent(token)}`, { name: 'auth:forgot:verify' }) + /** Check that a reset token is still valid (no auth). A typed code needs the email it was sent to. */ + static verifyResetToken(token: string, email?: string) { + return alova.Get(`/v1/auth/forgot/${encodeURIComponent(token)}`, { + name: 'auth:forgot:verify', + params: email ? { email } : {}, + }) } - /** Consume a reset token and set a new password (no auth). */ - static resetPassword(token: string, input: { password: string }) { + /** Consume a reset token and set a new password (no auth). A typed code needs the email it was sent to. */ + static resetPassword(token: string, input: { password: string; email?: string }) { return alova.Put(`/v1/auth/forgot/${encodeURIComponent(token)}`, input, { name: 'auth:forgot:reset' }) } diff --git a/apps/dashboard/src/pages/ResetPasswordPage.tsx b/apps/dashboard/src/pages/ResetPasswordPage.tsx index 9460383d..7ad1ef91 100644 --- a/apps/dashboard/src/pages/ResetPasswordPage.tsx +++ b/apps/dashboard/src/pages/ResetPasswordPage.tsx @@ -1,7 +1,7 @@ import { Auth, errorMessage } from '@/lib/api' import { Field, FieldError, FieldLabel } from '@/components/ui/field' import { InputGroup, InputGroupAddon, InputGroupInput } from '@/components/ui/input-group' -import { KeyRound, Loader2, Lock } from 'lucide-react' +import { KeyRound, Loader2, Lock, Mail } from 'lucide-react' import { Link, useLocation, useNavigate, useSearchParams } from 'react-router-dom' import { useCallback, useEffect, useRef, useState } from 'react' @@ -18,7 +18,8 @@ export default function ResetPasswordPage() { const navigate = useNavigate() const location = useLocation() // ForgotPasswordPage forwards the email so resend works without re-asking for it. - const email = (location.state as { email?: string } | null)?.email ?? '' + const forwardedEmail = (location.state as { email?: string } | null)?.email ?? '' + const [email, setEmail] = useState(forwardedEmail) const initialToken = params.get('token') ?? '' const [token, setToken] = useState(initialToken) @@ -28,9 +29,10 @@ export default function ResetPasswordPage() { const [resent, setResent] = useState(false) // Step 1 — confirm the reset code is valid before revealing the password fields. - const { loading: verifying, send: verifyToken } = useRequest((tok: string) => Auth.verifyResetToken(tok), { - immediate: false, - }) + const { loading: verifying, send: verifyToken } = useRequest( + (tok: string, addr: string) => Auth.verifyResetToken(tok, addr || undefined), + { immediate: false }, + ) const checkToken = useCallback( async (raw: string) => { @@ -38,7 +40,7 @@ export default function ResetPasswordPage() { if (!value) return setTokenError(null) try { - await verifyToken(value) + await verifyToken(value, email.trim()) setToken(value) setPhase('reset') } catch (err) { @@ -46,7 +48,7 @@ export default function ResetPasswordPage() { setPhase('code') } }, - [verifyToken], + [verifyToken, email], ) // Auto-verify a code that arrived through the emailed link. @@ -59,7 +61,7 @@ export default function ResetPasswordPage() { // Step 2 — set the new password (only reachable once the code is verified). const { form, updateForm, send, loading, error, update, onSuccess } = useForm( - (formData) => Auth.resetPassword(token, { password: formData.password }), + (formData) => Auth.resetPassword(token, { password: formData.password, email: email.trim() || undefined }), { initialForm: { password: '', confirm: '' } }, ) onSuccess(() => navigate('/login', { replace: true })) @@ -146,6 +148,25 @@ export default function ResetPasswordPage() { } >
+ {forwardedEmail ? null : ( + + Email + + + + + setEmail(e.target.value)} + /> + + + )} + Reset code diff --git a/packages/widget/package.json b/packages/widget/package.json index c4cc262c..47641b9d 100644 --- a/packages/widget/package.json +++ b/packages/widget/package.json @@ -46,7 +46,7 @@ "clean": "rm -rf dist" }, "dependencies": { - "@arkstack/realtime": "^0.19.4", + "@arkstack/realtime": "^0.20.2", "@arkyc/types": "workspace:^", "qrcode-generator": "^1.4.4" }, @@ -62,4 +62,4 @@ "optional": true } } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f172cc2..d9774bc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,50 +42,50 @@ importers: apps/api: dependencies: '@arkstack/auth': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) '@arkstack/cache': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) '@arkstack/common': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) '@arkstack/console': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) '@arkstack/contract': - specifier: ^0.20.1 - version: 0.20.1 + specifier: ^0.20.2 + version: 0.20.2 '@arkstack/database': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) '@arkstack/driver-express': - specifier: ^0.20.1 - version: 0.20.1(818ad093d2bdff45ee701be34b340060) + specifier: ^0.20.2 + version: 0.20.2(cf29c066ae1a985fd35131fbc15772ac) '@arkstack/filesystem': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) '@arkstack/foundry': - specifier: ^0.20.1 - version: 0.20.1 + specifier: ^0.20.2 + version: 0.20.2 '@arkstack/http': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) '@arkstack/jobs': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) '@arkstack/notifications': - specifier: ^0.20.1 - version: 0.20.1(29de33a6f3e7bebaffc2700209e84b9a) + specifier: ^0.20.2 + version: 0.20.2(78cecb86633605e2b57333057a5bcf12) '@arkstack/queue': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) '@arkstack/scheduler': - specifier: ^0.20.1 - version: 0.20.1(459a11af1d04dd7e52235fe492f12fa1) + specifier: ^0.20.2 + version: 0.20.2(491f42df4443dc23a860e078f3e02d08) '@arkstack/view': - specifier: ^0.20.1 - version: 0.20.1(@arkstack/common@0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2)) + specifier: ^0.20.2 + version: 0.20.2(@arkstack/common@0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2)) '@arkyc/auth': specifier: workspace:^ version: link:../../packages/auth @@ -235,8 +235,8 @@ importers: specifier: ^2.0.18 version: 2.0.18(alova@3.5.1)(axios@1.18.0) '@arkstack/realtime': - specifier: ^0.19.4 - version: 0.19.4(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3)) + specifier: ^0.20.2 + version: 0.20.2(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3)) '@arkyc/types': specifier: workspace:^ version: link:../../packages/types @@ -513,8 +513,8 @@ importers: packages/widget: dependencies: '@arkstack/realtime': - specifier: ^0.19.4 - version: 0.19.4(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3)) + specifier: ^0.20.2 + version: 0.20.2(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3)) '@arkyc/types': specifier: workspace:^ version: link:../types @@ -547,17 +547,17 @@ packages: peerDependencies: clear-router: ^2.9.2 - '@arkstack/auth@0.20.1': - resolution: {integrity: sha512-FgG+ce2ydyIVnN7YkHvYxxY5rgz7mWiyfohtLuBoxyy8ephlhdxe1wr/hMhZiPQXPE0bFh1NRTn1fXKMrrAPJw==} + '@arkstack/auth@0.20.2': + resolution: {integrity: sha512-xFfXOAqxGbeUDo//7HwTK7UeQw4m/8M0OKx8NutB0fmFY/CZmVlkdmRGt1m21dy30BvPxOWMmKZP++ml9ejEZQ==} peerDependencies: - '@arkstack/database': ^0.20.1 + '@arkstack/database': ^0.20.2 '@h3ravel/support': ^2.2.7 - '@arkstack/cache@0.20.1': - resolution: {integrity: sha512-uqPpbtvLFioZq2JS7CvTmidBQ3ks2IvQJGMtBGrPrcsI/7PUO50ULmDLpfcO9akXjG/rjUWnmqmaFqla8p0JeA==} + '@arkstack/cache@0.20.2': + resolution: {integrity: sha512-iy4X6gkf5cS4+89ltvO/8tf8NdYqBsfZ1QfKrzlijN52/jm5i/NqpsxbVsLnDCUGZ1lYHG7TOc7Tsoc9BzJBuA==} peerDependencies: - '@arkstack/contract': ^0.20.1 - '@arkstack/database': ^0.20.1 + '@arkstack/contract': ^0.20.2 + '@arkstack/database': ^0.20.2 '@h3ravel/musket': ^2.2.13 ioredis: ^5.4.1 peerDependenciesMeta: @@ -566,22 +566,22 @@ packages: ioredis: optional: true - '@arkstack/common@0.20.1': - resolution: {integrity: sha512-8NAONF9lDGygQF2jSHvy/UuJuRjsNGPW+Wcpd4+dB1y6AyJT0L+pG2prenH0016Rsx8GD1so/AHS3byhC9bz5Q==} + '@arkstack/common@0.20.2': + resolution: {integrity: sha512-0EDIpCOQByPTJoCN/NO0nEqDe8ZGxlWT65XKKa9npBFfbcRSEEWeRO7JnRH3e1+DsNzJ5/NcL+FFCxcN31jVbA==} peerDependencies: - '@arkstack/contract': ^0.20.1 - '@arkstack/foundry': ^0.20.1 + '@arkstack/contract': ^0.20.2 + '@arkstack/foundry': ^0.20.2 '@h3ravel/support': ^2.2.7 arkormx: ^2.12.8 peerDependenciesMeta: arkormx: optional: true - '@arkstack/console@0.20.1': - resolution: {integrity: sha512-gti1II6bg+XAqKpIsLATXlvw/6+38ePU4kGGL5yNo5aC1ckVqQi1XJwxezlk/vW+GZqRI6i53ra/ehhDfGAq6A==} + '@arkstack/console@0.20.2': + resolution: {integrity: sha512-O9+MQbGE9doe93gR31Pk3PIiGxSGCLTiE1337GKG5O079zm3V3QQYyzvj7jZRKjOkZR9NmIUt6WC/QAxs/GTTQ==} hasBin: true peerDependencies: - '@arkstack/database': ^0.20.1 + '@arkstack/database': ^0.20.2 arkormx: ^2.12.8 clear-router: ^2.9.3 peerDependenciesMeta: @@ -590,22 +590,22 @@ packages: arkormx: optional: true - '@arkstack/contract@0.20.1': - resolution: {integrity: sha512-p6Eg7kzmTUx4Sjsp23v3mMG3JRBKWWo8WrH2QHWbOymQEoUWl//uIJLRdYqW3FuxTB9KaK0W7YZXmKHOY+ss7Q==} + '@arkstack/contract@0.20.2': + resolution: {integrity: sha512-3uUB1in7dWLRwG17pbiQH2hMf7RGTEWUlW4Q1wot3vyvQDKQbQdMleNzef0E8Nd5e5dT+xm1boI03spY4gBx3w==} - '@arkstack/database@0.20.1': - resolution: {integrity: sha512-ROnPkuTjEM6qNexjWHKtALWRwQoa+wHwtisqCKzrqcLNdFihUd5rBijPXl1Fn9pZxAbgrII5yT9RAThKi7GkeA==} + '@arkstack/database@0.20.2': + resolution: {integrity: sha512-YskrAfL9xzQpeNlFTMGHQnZ672gBdNc3MzK7qoAi2n4WKqTu0QRT0vbXZ64BLFUJ9Yuy/MDAUg291J5uZhlBhg==} peerDependencies: clear-router: ^2.9.3 kanun: ^1.2.0 - '@arkstack/driver-express@0.20.1': - resolution: {integrity: sha512-XwJ4g38dd5PlDwRNx+M4KyzEE8H2WhppziArkNzwvIM5KylwjiCYvF4BolhrgLLEzKVKWetlGravN0GXOXy8aA==} + '@arkstack/driver-express@0.20.2': + resolution: {integrity: sha512-G3CzpXJVhMch48tuIeawcZit2YlpU+l33HeJBjYqrVRc+Tz1/1bAXXHOAaIrwQzeivXwTqnL++LJqLHIrT1V/w==} peerDependencies: - '@arkstack/auth': ^0.20.1 - '@arkstack/common': ^0.20.1 - '@arkstack/foundry': ^0.20.1 - '@arkstack/inertia': ^0.20.1 + '@arkstack/auth': ^0.20.2 + '@arkstack/common': ^0.20.2 + '@arkstack/foundry': ^0.20.2 + '@arkstack/inertia': ^0.20.2 express: ^5.2.1 peerDependenciesMeta: '@arkstack/auth': @@ -613,19 +613,19 @@ packages: '@arkstack/inertia': optional: true - '@arkstack/encryption@0.20.1': - resolution: {integrity: sha512-I643BjxbMVsKfgG/qSuvJAdMBlmddIl0YmQG3PqsP3TSKNuB9eU47leQRGg3cGXOgNwMkENrIQYliUdwIOHLCQ==} + '@arkstack/encryption@0.20.2': + resolution: {integrity: sha512-Xm1nNb8AHti8TKWaFHCEf49HeV0hP601DyPZB7zbAw4ofYoCT6Rk1xHe+My0OAKcaQDjuu8SBpVbx86T+ZjdfA==} - '@arkstack/filesystem@0.20.1': - resolution: {integrity: sha512-pS4CA39vDo4cq9Nw6hzs7FdB2FIksD/aHtPAYeBq3grDhuS1ytkwpMA17+bEzOIZeh7xD3+/BmtaG3vNWOcNyA==} + '@arkstack/filesystem@0.20.2': + resolution: {integrity: sha512-DAvuFulcNmRyS+bOMR8HKDRGMhes/fn5P0wkhNmyJTq8j3s2pn+24+jqgD5mteR3hwo1dCpN94WBq8iruL7kIg==} peerDependencies: '@h3ravel/musket': ^2.2.13 - '@arkstack/foundry@0.20.1': - resolution: {integrity: sha512-8lv8uVG/bjLT90bzo3rEEf870h43QVBzpMuqBp+Lg9m3NWi4tJ1z79ac7+R+MThgqG92WsNsedkpbZelLvnrrQ==} + '@arkstack/foundry@0.20.2': + resolution: {integrity: sha512-31Z5Gc4+n9MPy05C/6frvtpYwm+vEikJlUHe3YqVd9a7mQLLI3DHdkroi/Zoo8AyTi0XTGa8QOJp/CBZwz3JPA==} - '@arkstack/http@0.20.1': - resolution: {integrity: sha512-GCutDlSxvUpEWy1W3nmgf5I0DDtDQ/xpPZ2/H2MeQ4U6nxWwwhQtkksT1s6AZlMnwJDuv8U7P23eAYNihasigA==} + '@arkstack/http@0.20.2': + resolution: {integrity: sha512-LOch2HN474zod8hVvqLmKaLzkGd49le+SQRpkTik9Ysba6ipt1GHPppXM/7rwcb7pN9sVtdZ5WkW0K/pazKAeQ==} peerDependencies: arkormx: ^2.12.8 kanun: ^1.2.0 @@ -633,20 +633,20 @@ packages: arkormx: optional: true - '@arkstack/jobs@0.20.1': - resolution: {integrity: sha512-LMN8/+1OpycGVZ+Z0Lx0f70Fkh4n/IJjBX8rDywUzVP83ZqX1vpXYxe+KBqeUqMk1V6jQXqCo/2R7md6WxtYYg==} + '@arkstack/jobs@0.20.2': + resolution: {integrity: sha512-ouPqmjRDwxx2DX74AqeGSCBfETbP0KifNYmSvBbxh8vENLb6lLitrfn40fORcZ680ffyXeqFHrO9YQGNgLDIJw==} peerDependencies: - '@arkstack/contract': ^0.20.1 + '@arkstack/contract': ^0.20.2 '@h3ravel/musket': ^2.2.13 - '@arkstack/notifications@0.20.1': - resolution: {integrity: sha512-SlycZig3BsFEurUwulqtjzkqexaOQ/k36YNqcqi09I08wxULUXkqX8QSyaXj15wrtWwxkplkhQiwA/Nym+RUVQ==} + '@arkstack/notifications@0.20.2': + resolution: {integrity: sha512-DMWK/ezKrziMjZZ9GncsagT2cwXQVePguuglqYdGP6EeRWrY/D5t3owdUa0/6tah4uo5PgiGdf/6CUnmyhHg7w==} peerDependencies: - '@arkstack/contract': ^0.20.1 - '@arkstack/database': ^0.20.1 - '@arkstack/driver-express': ^0.20.1 - '@arkstack/driver-h3': ^0.20.1 - '@arkstack/jobs': ^0.20.1 + '@arkstack/contract': ^0.20.2 + '@arkstack/database': ^0.20.2 + '@arkstack/driver-express': ^0.20.2 + '@arkstack/driver-h3': ^0.20.2 + '@arkstack/jobs': ^0.20.2 '@kanun-hq/plugin-phone': ^0.1.8 firebase-admin: ^13.0.0 pusher: ^5.2.0 @@ -662,11 +662,11 @@ packages: pusher: optional: true - '@arkstack/queue@0.20.1': - resolution: {integrity: sha512-bwaEITgmLl6GYazuNx2td0nWBc8xeKG3w14Noz6qmtWEcfrva8XvK5M35gAjAWy0Y4Maynj98hHoDNTF38ETIA==} + '@arkstack/queue@0.20.2': + resolution: {integrity: sha512-3tUdMtnXEXJJUO7RyHje7RwGntQLygvZnpm55GguSAmBKM/b0s0BPQIiG//u1a7i8rueIL/sjvCDELq1LDLdSA==} peerDependencies: - '@arkstack/contract': ^0.20.1 - '@arkstack/database': ^0.20.1 + '@arkstack/contract': ^0.20.2 + '@arkstack/database': ^0.20.2 '@h3ravel/musket': ^2.2.13 ioredis: ^5.4.1 peerDependenciesMeta: @@ -675,8 +675,8 @@ packages: ioredis: optional: true - '@arkstack/realtime@0.19.4': - resolution: {integrity: sha512-Eqax5nddiqH0XWqjS29Jja0fs1WpfoaOWL1lbPRXseAGXZo1XzEkj3f0cZ5l0+QPSS26KXP25nAxgsG421k7Ng==} + '@arkstack/realtime@0.20.2': + resolution: {integrity: sha512-eCOaMHKh+rgahE5vlCzGfKK1QYT/ko3CEvThNcOZjAC2Wv5ul4tr0dWttd4F2dbJFLcSO/AqILOKzWFc3DwG+w==} peerDependencies: firebase: ^11.0.0 pusher-js: ^8.4.0 @@ -692,12 +692,12 @@ packages: vue: optional: true - '@arkstack/scheduler@0.20.1': - resolution: {integrity: sha512-HCgU8mXgcnZdBoi+Bkjy4b6Gnvx+Y4Mim6Zv1UDClDNhzFoAaB2B+fnCWYPgOk1j1uNCfbqjY5LCQxUMdTiGHQ==} + '@arkstack/scheduler@0.20.2': + resolution: {integrity: sha512-GLpzvVAqM5sWh9ou+zW/BD+bJZXvR4OrJcsZkLAqOWe72NaE9pvoDcy3L93eFSBl23tjcbX6wUm+c3w5jADpdQ==} peerDependencies: - '@arkstack/cache': ^0.20.1 - '@arkstack/contract': ^0.20.1 - '@arkstack/jobs': ^0.20.1 + '@arkstack/cache': ^0.20.2 + '@arkstack/contract': ^0.20.2 + '@arkstack/jobs': ^0.20.2 '@h3ravel/musket': ^2.2.13 peerDependenciesMeta: '@arkstack/cache': @@ -705,11 +705,11 @@ packages: '@arkstack/jobs': optional: true - '@arkstack/view@0.20.1': - resolution: {integrity: sha512-08nmP4cypUBmaScFAdkSGxM0iWbGXPRaTz18mI6cVn43SoGHA4/pmX3Gnz5iRVYRaQBIb1wwB1vDwSjybPHchQ==} + '@arkstack/view@0.20.2': + resolution: {integrity: sha512-HlXHB3h16Plc4PSwb5dqPgjKcJXIrA9osQNOstVUtml50bzs04BDhXfQ9lzNERizp6fuY+SCcUnm5Lj4Jl/zag==} peerDependencies: - '@arkstack/common': ^0.20.1 - '@arkstack/foundry': ^0.20.1 + '@arkstack/common': ^0.20.2 + '@arkstack/foundry': ^0.20.2 '@h3ravel/musket': ^2.2.13 clear-router: ^2.9.3 peerDependenciesMeta: @@ -7875,11 +7875,11 @@ snapshots: - pg-native - tsdown - '@arkstack/auth@0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2)': + '@arkstack/auth@0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/database': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) - '@arkstack/http': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/database': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + '@arkstack/http': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) '@h3ravel/support': 2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22) jose: 6.2.13 otpauth: 9.5.2 @@ -7897,24 +7897,24 @@ snapshots: - koa - reflect-metadata - '@arkstack/cache@0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': + '@arkstack/cache@0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) optionalDependencies: - '@arkstack/database': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + '@arkstack/database': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) ioredis: 5.11.1 transitivePeerDependencies: - '@arkstack/foundry' - '@h3ravel/support' - arkormx - '@arkstack/common@0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))': + '@arkstack/common@0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))': dependencies: - '@arkstack/contract': 0.20.1 - '@arkstack/encryption': 0.20.1 - '@arkstack/foundry': 0.20.1 + '@arkstack/contract': 0.20.2 + '@arkstack/encryption': 0.20.2 + '@arkstack/foundry': 0.20.2 '@h3ravel/support': 2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22) '@pictwo/faker': 1.2.0 bcryptjs: 3.0.3 @@ -7929,10 +7929,10 @@ snapshots: '@faker-js/faker': 10.5.0 arkormx: 2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) - '@arkstack/console@0.20.1(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))': + '@arkstack/console@0.20.2(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) '@h3ravel/support': 2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22) '@ngrok/ngrok': 1.7.0 @@ -7941,7 +7941,7 @@ snapshots: resora: 1.3.34(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) ts-morph: 28.0.0 optionalDependencies: - '@arkstack/database': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + '@arkstack/database': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) arkormx: 2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) transitivePeerDependencies: - '@arkstack/foundry' @@ -7950,15 +7950,15 @@ snapshots: - h3 - tsdown - '@arkstack/contract@0.20.1': + '@arkstack/contract@0.20.2': dependencies: - '@arkstack/foundry': 0.20.1 + '@arkstack/foundry': 0.20.2 - '@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))': + '@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))': dependencies: '@arkormx/plugin-clear-router': 0.1.59(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 arkormx: 2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) clear-router: 2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2) dotenv: 17.4.2 @@ -7975,12 +7975,12 @@ snapshots: - pg-native - tsdown - '@arkstack/driver-express@0.20.1(818ad093d2bdff45ee701be34b340060)': + '@arkstack/driver-express@0.20.2(cf29c066ae1a985fd35131fbc15772ac)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 - '@arkstack/foundry': 0.20.1 - '@arkstack/http': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 + '@arkstack/foundry': 0.20.2 + '@arkstack/http': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) '@ngrok/ngrok': 1.7.0 '@resora/plugin-clear-router': 1.0.72(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) clear-router: 2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2) @@ -7989,7 +7989,7 @@ snapshots: multer: 2.4.0 resora: 1.3.34(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) optionalDependencies: - '@arkstack/auth': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) + '@arkstack/auth': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2) transitivePeerDependencies: - '@h3ravel/support' - '@koa/router' @@ -8005,12 +8005,12 @@ snapshots: - supports-color - tsdown - '@arkstack/encryption@0.20.1': {} + '@arkstack/encryption@0.20.2': {} - '@arkstack/filesystem@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))': + '@arkstack/filesystem@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 '@aws-sdk/client-s3': 3.1154.0 '@aws-sdk/s3-request-presigner': 3.1154.0 '@google-cloud/storage': 7.22.0 @@ -8027,12 +8027,12 @@ snapshots: - encoding - supports-color - '@arkstack/foundry@0.20.1': {} + '@arkstack/foundry@0.20.2': {} - '@arkstack/http@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2)': + '@arkstack/http@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(express@5.2.1)(h3@2.0.1-rc.22)(kanun@1.2.1)(reflect-metadata@0.2.2)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 clear-router: 2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2) dotenv: 17.4.2 kanun: 1.2.1 @@ -8049,11 +8049,11 @@ snapshots: - koa - reflect-metadata - '@arkstack/jobs@0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': + '@arkstack/jobs@0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 - '@arkstack/queue': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 + '@arkstack/queue': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) transitivePeerDependencies: - '@arkstack/database' @@ -8062,17 +8062,17 @@ snapshots: - arkormx - ioredis - '@arkstack/notifications@0.20.1(29de33a6f3e7bebaffc2700209e84b9a)': + '@arkstack/notifications@0.20.2(78cecb86633605e2b57333057a5bcf12)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 - '@arkstack/database': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) - '@arkstack/jobs': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 + '@arkstack/database': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + '@arkstack/jobs': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) africastalking: 0.8.4 nodemailer: 9.1.1 twilio: 6.2.0 optionalDependencies: - '@arkstack/driver-express': 0.20.1(818ad093d2bdff45ee701be34b340060) + '@arkstack/driver-express': 0.20.2(cf29c066ae1a985fd35131fbc15772ac) firebase-admin: 13.10.0 pusher: 5.3.4 transitivePeerDependencies: @@ -8082,45 +8082,45 @@ snapshots: - debug - supports-color - '@arkstack/queue@0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': + '@arkstack/queue@0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) optionalDependencies: - '@arkstack/database': 0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) + '@arkstack/database': 0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) ioredis: 5.11.1 transitivePeerDependencies: - '@arkstack/foundry' - '@h3ravel/support' - arkormx - '@arkstack/realtime@0.19.4(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3))': + '@arkstack/realtime@0.20.2(firebase@11.10.0)(pusher-js@8.5.0)(react@19.2.7)(vue@3.5.38(typescript@6.0.3))': optionalDependencies: firebase: 11.10.0 pusher-js: 8.5.0 react: 19.2.7 vue: 3.5.38(typescript@6.0.3) - '@arkstack/scheduler@0.20.1(459a11af1d04dd7e52235fe492f12fa1)': + '@arkstack/scheduler@0.20.2(491f42df4443dc23a860e078f3e02d08)': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) croner: 9.1.0 optionalDependencies: - '@arkstack/cache': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) - '@arkstack/jobs': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/database@0.20.1(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + '@arkstack/cache': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) + '@arkstack/jobs': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/database@0.20.2(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(@types/node@26.0.0)(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))(h3@2.0.1-rc.22)(kanun@1.2.1)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(ioredis@5.11.1) transitivePeerDependencies: - '@arkstack/foundry' - '@h3ravel/support' - arkormx - '@arkstack/view@0.20.1(@arkstack/common@0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))))(@arkstack/foundry@0.20.1)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))': + '@arkstack/view@0.20.2(@arkstack/common@0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))))(@arkstack/foundry@0.20.2)(@h3ravel/musket@2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)))(clear-router@2.9.3(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(express@5.2.1)(h3@2.0.1-rc.22)(reflect-metadata@0.2.2))': dependencies: - '@arkstack/common': 0.20.1(@arkstack/contract@0.20.1)(@arkstack/foundry@0.20.1)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) - '@arkstack/contract': 0.20.1 - '@arkstack/foundry': 0.20.1 + '@arkstack/common': 0.20.2(@arkstack/contract@0.20.2)(@arkstack/foundry@0.20.2)(@h3ravel/support@2.2.7(@types/node@26.0.0)(h3@2.0.1-rc.22))(arkormx@2.12.12(@types/node@26.0.0)(h3@2.0.1-rc.22)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1))) + '@arkstack/contract': 0.20.2 + '@arkstack/foundry': 0.20.2 edge.js: 6.5.1 optionalDependencies: '@h3ravel/musket': 2.2.14(@types/node@26.0.0)(tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.3.1)) From dfa23dabc2c2ad30f25dd045873ebdc31f6cafae Mon Sep 17 00:00:00 2001 From: 3m1n3nc3 Date: Fri, 23 Oct 2026 07:03:39 +0100 Subject: [PATCH 2/2] fix: remove unused imports and ensure consistent formatting in migration and widget files --- ...11000000_create_session_client_tokens_table.ts | 2 -- apps/dashboard/package.json | 2 +- .../src/pages/projects/ProjectSettingsPage.tsx | 15 +++++++-------- packages/widget/package.json | 2 +- packages/widget/src/ui.ts | 6 +++--- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/apps/api/src/database/migrations/20261011000000_create_session_client_tokens_table.ts b/apps/api/src/database/migrations/20261011000000_create_session_client_tokens_table.ts index d9ec1de9..af46810a 100644 --- a/apps/api/src/database/migrations/20261011000000_create_session_client_tokens_table.ts +++ b/apps/api/src/database/migrations/20261011000000_create_session_client_tokens_table.ts @@ -1,7 +1,5 @@ import { Migration, SchemaBuilder } from 'arkormx' -import { DB } from '@arkstack/database' - /** * Client tokens for a verification session: the single-use `launch` token handed * to the integrator, single-use `handoff` tokens carried by the cross-device QR, diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 36f27033..e30b8401 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -52,4 +52,4 @@ "vite": "^8.0.16", "wrangler": "^4.149.0" } -} \ No newline at end of file +} diff --git a/apps/dashboard/src/pages/projects/ProjectSettingsPage.tsx b/apps/dashboard/src/pages/projects/ProjectSettingsPage.tsx index b7c925f9..ce4fa8c7 100644 --- a/apps/dashboard/src/pages/projects/ProjectSettingsPage.tsx +++ b/apps/dashboard/src/pages/projects/ProjectSettingsPage.tsx @@ -1,25 +1,24 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' +import { DEFAULT_PRIMARY_COLOR, DEFAULT_VELOCITY_SETTINGS, DEFAULT_VERIFICATION_THRESHOLDS } from '@arkyc/types' import { ErrorState, Loading } from '@/components/States' import { Field, FieldError, FieldGroup, FieldLabel } from '@/components/ui/field' import { InputGroup, InputGroupAddon, InputGroupInput } from '@/components/ui/input-group' import type { Project, ProjectBranding, ProjectSettings, VerificationThresholds } from '@arkyc/types' -import { DEFAULT_PRIMARY_COLOR, DEFAULT_VELOCITY_SETTINGS, DEFAULT_VERIFICATION_THRESHOLDS } from '@arkyc/types' -import { Theme } from '@arkyc/widget' import { Projects, errorMessage } from '@/lib/api' import { useForm, useRequest, useWatcher } from 'alova/client' +import { useNavigate, useParams } from 'react-router-dom' import { useOrganization, useOrganizationId } from '@/contexts/organization-context' -import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' +import { CloneProjectCard } from './CloneProjectCard' +import { DeleteResourceCard } from '@/components/DeleteResourceCard' import { Label } from '@/components/ui/label' +import { PopoverPicker } from '@/components/SpeechBubble' import { Select } from '@/components/ui/select' import { Spinner } from '@/components/ui/spinner' -import { useNavigate, useParams } from 'react-router-dom' -import { DeleteResourceCard } from '@/components/DeleteResourceCard' -import { CloneProjectCard } from './CloneProjectCard' -import { useState } from 'react' +import { Theme } from '@arkyc/widget' import { toast } from 'sonner' -import { PopoverPicker } from '@/components/SpeechBubble' +import { useState } from 'react' interface FormState { name: string diff --git a/packages/widget/package.json b/packages/widget/package.json index 47641b9d..634d9c32 100644 --- a/packages/widget/package.json +++ b/packages/widget/package.json @@ -62,4 +62,4 @@ "optional": true } } -} \ No newline at end of file +} diff --git a/packages/widget/src/ui.ts b/packages/widget/src/ui.ts index a8db2e14..8d2911c5 100644 --- a/packages/widget/src/ui.ts +++ b/packages/widget/src/ui.ts @@ -327,9 +327,9 @@ export class WidgetView { this.brandEl, branded ? [ - this.theme.logoUrl && this.dom.h('img', { class: 'arkyc-logo', src: logoSrc(this.theme.logoUrl) }), - this.theme.name && this.dom.h('span', { class: 'arkyc-brand-name', text: this.theme.name }), - ] + this.theme.logoUrl && this.dom.h('img', { class: 'arkyc-logo', src: logoSrc(this.theme.logoUrl) }), + this.theme.name && this.dom.h('span', { class: 'arkyc-brand-name', text: this.theme.name }), + ] : this.dom.h('p', { class: 'arkyc-title', text: 'Verify your identity' }), ) }