update version

This commit is contained in:
2025-12-06 14:55:57 -03:00
parent f3cd5663bd
commit a56e051a18
23 changed files with 8766 additions and 1942 deletions

View File

@@ -25,5 +25,7 @@ def get_enrollment(enrollment_id: str):
+ SortKey('0') + SortKey('0')
+ SortKey('ORG', rename_key='org') + SortKey('ORG', rename_key='org')
+ SortKey('CANCEL_POLICY', rename_key='cancel_policy') + SortKey('CANCEL_POLICY', rename_key='cancel_policy')
+ SortKey('CREATED_BY', rename_key='created_by')
+ SortKey('CANCELED_BY', rename_key='canceled_by')
+ SortKey('LOCK', rename_key='lock') + SortKey('LOCK', rename_key='lock')
) )

View File

@@ -37,7 +37,7 @@ def cancel(
with dyn.transact_writer() as transact: with dyn.transact_writer() as transact:
transact.update( transact.update(
key=KeyPair(enrollment_id, '0'), key=KeyPair(enrollment_id, '0'),
cond_expr='#status = pending', cond_expr='#status = :pending',
update_expr='SET #status = :canceled, \ update_expr='SET #status = :canceled, \
canceled_at = :now, \ canceled_at = :now, \
updated_at = :now', updated_at = :now',

View File

@@ -119,6 +119,14 @@ def add_org(
'created_at': now_, 'created_at': now_,
} }
) )
transact.put(
item={
'id': user.id,
'sk': f'SCOPE#{org_id}',
'scope': {'apps:admin'},
'created_at': now_,
}
)
transact.put( transact.put(
item={ item={
# Post-migration (users): rename `orgmembers#` to `MEMBER#ORG#` # Post-migration (users): rename `orgmembers#` to `MEMBER#ORG#`

View File

@@ -1,7 +1,13 @@
from http import HTTPStatus from http import HTTPStatus
from typing import Annotated
from aws_lambda_powertools.event_handler.api_gateway import Router from aws_lambda_powertools.event_handler.api_gateway import Router
from aws_lambda_powertools.event_handler.exceptions import NotFoundError
from aws_lambda_powertools.event_handler.openapi.params import Body
from layercake.dateutils import now
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from layercake.extra_types import NameStr
from pydantic import UUID4, BaseModel, EmailStr
from api_gateway import JSONResponse from api_gateway import JSONResponse
from boto3clients import dynamodb_client from boto3clients import dynamodb_client
@@ -11,6 +17,12 @@ router = Router()
dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)
class OrgNotFoundError(NotFoundError): ...
class MemberNotFoundError(NotFoundError): ...
@router.get('/<org_id>/admins') @router.get('/<org_id>/admins')
def get_admins(org_id: str): def get_admins(org_id: str):
return dyn.collection.query( return dyn.collection.query(
@@ -20,9 +32,60 @@ def get_admins(org_id: str):
) )
class User(BaseModel):
id: str | UUID4
name: NameStr
email: EmailStr
@router.post('/<org_id>/admins') @router.post('/<org_id>/admins')
def add(org_id: str): def add(org_id: str, user: Annotated[User, Body(embed=True)]):
return JSONResponse(HTTPStatus.CREATED) now_ = now()
org = dyn.collection.get_item(
KeyPair(pk=org_id, sk='0'),
exc_cls=OrgNotFoundError,
)
with dyn.transact_writer() as transact:
transact.condition(
key=KeyPair(
# Post-migration (users): rename `orgmemebers#` to `MEMBER#ORG#`
pk=f'orgmembers#{org_id}',
sk=str(user.id),
),
cond_expr='attribute_exists(sk)',
exc_cls=MemberNotFoundError,
)
transact.put(
item={
'id': user.id,
# Post-migration (users): rename `orgs#` to `ORG#`
'sk': f'orgs#{org_id}',
'name': org['name'],
'cnpj': org['cnpj'],
'created_at': now_,
}
)
transact.put(
item={
'id': user.id,
'sk': f'SCOPE#{org_id}',
'scope': {'apps:admin'},
'created_at': now_,
}
)
transact.put(
item={
'id': org_id,
# Post-migrations (users): rename `admins#` to `ADMIN#`
'sk': f'admins#{user.id}',
'name': user.name,
'email': user.email,
'created_at': now_,
},
)
return JSONResponse(HTTPStatus.NO_CONTENT)
@router.delete('/<org_id>/admins/<user_id>') @router.delete('/<org_id>/admins/<user_id>')
@@ -32,5 +95,8 @@ def revoke(org_id: str, user_id: str):
# Post-migration: rename `admins` to `ADMIN` # Post-migration: rename `admins` to `ADMIN`
key=KeyPair(org_id, f'admins#{user_id}'), key=KeyPair(org_id, f'admins#{user_id}'),
) )
transact.delete(
key=KeyPair(user_id, f'SCOPE#{org_id}'),
)
return JSONResponse(HTTPStatus.NO_CONTENT) return JSONResponse(HTTPStatus.NO_CONTENT)

View File

@@ -79,6 +79,9 @@ def unlink(org_id: str, user_id: str):
# Post-migration: uncomment the following line # Post-migration: uncomment the following line
# key=KeyPair(org_id, f'ADMIN#{user_id}'), # key=KeyPair(org_id, f'ADMIN#{user_id}'),
) )
transact.delete(
key=KeyPair(user_id, f'SCOPE#{org_id}'),
)
transact.delete( transact.delete(
key=KeyPair( key=KeyPair(
pk=user_id, pk=user_id,
@@ -90,6 +93,8 @@ def unlink(org_id: str, user_id: str):
transact.update( transact.update(
key=KeyPair(user_id, '0'), key=KeyPair(user_id, '0'),
update_expr='DELETE tenant_id :org_id', update_expr='DELETE tenant_id :org_id',
# Post-migration: uncomment the following line
# update_expr='DELETE org_id :org_id',
expr_attr_values={':org_id': {org_id}}, expr_attr_values={':org_id': {org_id}},
) )

View File

@@ -10,5 +10,5 @@ router = Router()
dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)
@router.post('/<org_id>/users/batch-jobs') @router.post('/<org_id>/users/batch')
def batch_jobs(org_id: str): ... def batch_jobs(org_id: str): ...

View File

@@ -195,7 +195,7 @@ def primary(
with dyn.transact_writer() as transact: with dyn.transact_writer() as transact:
# Set the old email as non-primary # Set the old email as non-primary
transact.update( transact.update(
# Post-migration (users): rename `emails` to `EMAIL` # Post-migration (users): rename `emails#` to `EMAIL#`
key=KeyPair(user_id, f'emails#{old_email}'), key=KeyPair(user_id, f'emails#{old_email}'),
update_expr=expr, update_expr=expr,
expr_attr_values={ expr_attr_values={
@@ -206,7 +206,7 @@ def primary(
) )
# Set the new email as primary # Set the new email as primary
transact.update( transact.update(
# Post-migration (users): rename `emails` to `EMAIL` # Post-migration (users): rename `emails#` to `EMAIL#`
key=KeyPair(user_id, f'emails#{new_email}'), key=KeyPair(user_id, f'emails#{new_email}'),
update_expr=expr, update_expr=expr,
expr_attr_values={ expr_attr_values={
@@ -243,7 +243,7 @@ def remove(
key=KeyPair('email', email), key=KeyPair('email', email),
) )
transact.delete( transact.delete(
# Post-migration (users): rename `emails` to `EMAIL` # Post-migration (users): rename `emails#` to `EMAIL#`
key=KeyPair(user_id, f'emails#{email}'), key=KeyPair(user_id, f'emails#{email}'),
# Delete any email except the primary email # Delete any email except the primary email
cond_expr='email_primary <> :email_primary', cond_expr='email_primary <> :email_primary',

View File

@@ -18,7 +18,7 @@ def get_orgs(
limit: Annotated[int, Query(ge=25)] = 25, limit: Annotated[int, Query(ge=25)] = 25,
): ):
return dyn.collection.query( return dyn.collection.query(
# Post-migration (users): rename `orgs` to `ORG` # Post-migration (users): rename `orgs#` to `ORG#`
key=KeyPair(user_id, 'orgs#'), key=KeyPair(user_id, 'orgs#'),
start_key=start_key, start_key=start_key,
limit=limit, limit=limit,

View File

@@ -12,40 +12,40 @@
"typecheck": "npm run cf-typegen && react-router typegen && tsc -b" "typecheck": "npm run cf-typegen && react-router typegen && tsc -b"
}, },
"dependencies": { "dependencies": {
"@react-router/fs-routes": "^7.9.5", "@react-router/fs-routes": "^7.10.1",
"@repo/auth": "*", "@repo/auth": "*",
"@repo/ui": "*", "@repo/ui": "*",
"@repo/util": "^0.0.0", "@repo/util": "^0.0.0",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"cookie": "^1.0.2", "cookie": "^1.1.1",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"flat": "^6.0.1", "flat": "^6.0.1",
"fuse.js": "^7.1.0", "fuse.js": "^7.1.0",
"isbot": "^5.1.31", "isbot": "^5.1.32",
"luxon": "^3.7.2", "luxon": "^3.7.2",
"meilisearch": "^0.54.0", "meilisearch": "^0.54.0",
"meilisearch-helper": "github:sergiors/meilisearch-helper", "meilisearch-helper": "github:sergiors/meilisearch-helper",
"react": "^19.2.0", "react": "^19.2.1",
"react-dom": "^19.2.0", "react-dom": "^19.2.1",
"react-router": "^7.9.5", "react-router": "^7.10.1",
"unique-names-generator": "^4.7.1", "unique-names-generator": "^4.7.1",
"zod": "^4.1.12" "zod": "^4.1.13"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/vite-plugin": "^1.13.18", "@cloudflare/vite-plugin": "^1.17.0",
"@tailwindcss/vite": "^4.1.16", "@tailwindcss/vite": "^4.1.17",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/luxon": "^3.7.1", "@types/luxon": "^3.7.1",
"@types/node": "^24.9.2", "@types/node": "^24.10.1",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"prettier": "^3.6.2", "prettier": "^3.7.4",
"remix-flat-routes": "^0.8.5", "remix-flat-routes": "^0.8.5",
"tailwindcss": "^4.1.16", "tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.1.12", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.45.3" "wrangler": "^4.53.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -14,25 +14,25 @@
"dependencies": { "dependencies": {
"@repo/ui": "*", "@repo/ui": "*",
"@repo/util": "*", "@repo/util": "*",
"cookie": "^1.0.2", "cookie": "^1.1.1",
"isbot": "^5.1.31", "isbot": "^5.1.32",
"react": "^19.2.0", "react": "^19.2.1",
"react-dom": "^19.2.0", "react-dom": "^19.2.1",
"react-router": "^7.9.5" "react-router": "^7.10.1"
}, },
"devDependencies": { "devDependencies": {
"@react-router/dev": "^7.9.5", "@react-router/dev": "^7.10.1",
"@cloudflare/vite-plugin": "^1.13.17", "@cloudflare/vite-plugin": "^1.17.0",
"@tailwindcss/vite": "^4.1.16", "@tailwindcss/vite": "^4.1.17",
"@types/node": "^24", "@types/node": "^24",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"@types/statuses": "^2.0.6", "@types/statuses": "^2.0.6",
"tailwindcss": "^4.1.16", "tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.1.12", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.45.2" "wrangler": "^4.53.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -12,33 +12,33 @@
"typecheck": "npm run cf-typegen && react-router typegen && tsc --noEmit" "typecheck": "npm run cf-typegen && react-router typegen && tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@react-router/fs-routes": "^7.9.6", "@react-router/fs-routes": "^7.10.1",
"@repo/auth": "*", "@repo/auth": "*",
"@repo/ui": "*", "@repo/ui": "*",
"@repo/util": "*", "@repo/util": "*",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"cookie": "^1.0.2", "cookie": "^1.1.1",
"flat": "^6.0.1", "flat": "^6.0.1",
"isbot": "^5.1.31", "isbot": "^5.1.32",
"lucide-react": "^0.548.0", "lucide-react": "^0.556.0",
"react": "^19.1.1", "react": "^19.2.1",
"react-dom": "^19.1.1", "react-dom": "^19.2.1",
"react-router": "^7.9.2", "react-router": "^7.10.1",
"meilisearch": "^0.54.0", "meilisearch": "^0.54.0",
"meilisearch-helper": "github:sergiors/meilisearch-helper", "meilisearch-helper": "github:sergiors/meilisearch-helper",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/vite-plugin": "^1.13.5", "@cloudflare/vite-plugin": "^1.17.0",
"@react-router/dev": "^7.9.2", "@react-router/dev": "^7.10.1",
"@tailwindcss/vite": "^4.1.13", "@tailwindcss/vite": "^4.1.17",
"@types/node": "^22", "@types/node": "^24",
"@types/react": "^19.1.13", "@types/react": "^19.2.7",
"@types/react-dom": "^19.1.9", "@types/react-dom": "^19.2.3",
"tailwindcss": "^4.1.13", "tailwindcss": "^4.1.17",
"typescript": "^5.9.2", "typescript": "^5.9.3",
"vite": "^7.1.7", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.40.0" "wrangler": "^4.53.0"
} }
} }

View File

@@ -18,33 +18,33 @@
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"fuse.js": "^7.1.0", "fuse.js": "^7.1.0",
"isbot": "^5.1.31", "isbot": "^5.1.32",
"lzwcompress": "^1.1.0", "lzwcompress": "^1.1.0",
"meilisearch": "^0.54.0", "meilisearch": "^0.54.0",
"meilisearch-helper": "github:sergiors/meilisearch-helper", "meilisearch-helper": "github:sergiors/meilisearch-helper",
"ramda": "^0.32.0", "ramda": "^0.32.0",
"react": "^19.2.0", "react": "^19.2.1",
"react-dom": "^19.2.0", "react-dom": "^19.2.1",
"react-router": "^7.9.5", "react-router": "^7.10.1",
"rrweb": "^2.0.0-alpha.4", "rrweb": "^2.0.0-alpha.4",
"scorm-again": "^2.6.7", "scorm-again": "^2.6.7",
"zod": "^4.1.12" "zod": "^4.1.13"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/vite-plugin": "^1.13.17", "@cloudflare/vite-plugin": "^1.17.0",
"@react-router/dev": "^7.9.5", "@react-router/dev": "^7.10.1",
"@tailwindcss/vite": "^4.1.16", "@tailwindcss/vite": "^4.1.17",
"@types/crypto-js": "^4.2.2", "@types/crypto-js": "^4.2.2",
"@types/node": "^24", "@types/node": "^24",
"@types/ramda": "^0.31.1", "@types/ramda": "^0.31.1",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"prettier": "^3.6.2", "prettier": "^3.7.4",
"tailwindcss": "^4.1.16", "tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.1.12", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.45.2" "wrangler": "^4.53.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -16,26 +16,26 @@
"@repo/auth": "*", "@repo/auth": "*",
"@repo/ui": "*", "@repo/ui": "*",
"fuse.js": "^7.1.0", "fuse.js": "^7.1.0",
"isbot": "^5.1.31", "isbot": "^5.1.32",
"jose": "^6.1.0", "jose": "^6.1.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lucide-react": "^0.548.0", "lucide-react": "^0.556.0",
"meilisearch": "^0.54.0", "meilisearch": "^0.54.0",
"react": "^19.2.0", "react": "^19.2.1",
"react-dom": "^19.2.0" "react-dom": "^19.2.1"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/vite-plugin": "^1.13.17", "@cloudflare/vite-plugin": "^1.17.0",
"@react-router/dev": "^7.9.5", "@react-router/dev": "^7.10.1",
"@tailwindcss/vite": "^4.1.16", "@tailwindcss/vite": "^4.1.17",
"@types/node": "^24", "@types/node": "^24",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"tailwindcss": "^4.1.16", "tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.1.12", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.45.2" "wrangler": "^4.53.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -16,14 +16,14 @@
// Post-migrations (users): rename `emails#` to `EMAIL#` // Post-migrations (users): rename `emails#` to `EMAIL#`
{"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "emails#sergio@somosbeta.com.br", "email_verified": true} {"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "emails#sergio@somosbeta.com.br", "email_verified": true}
{"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "PASSWORD", "hash": "$pbkdf2-sha256$29000$IuTcm7M2BiAEgPB.b.3dGw$d8xVCbx8zxg7MeQBrOvCOgniiilsIHEMHzoH/OXftLQ"} {"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "PASSWORD", "hash": "$pbkdf2-sha256$29000$IuTcm7M2BiAEgPB.b.3dGw$d8xVCbx8zxg7MeQBrOvCOgniiilsIHEMHzoH/OXftLQ"}
{"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "SCOPE", "scope": ["openid", "profile", "email", "offline_access", "apps:admin"]} {"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "SCOPE#*", "scope": ["openid", "profile", "email", "offline_access", "apps:admin"]}
{"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "SESSION#36af142e-9f6d-49d3-bfe9-6a6bd6ab2712", "created_at": "2025-09-17T13:44:34.544491-03:00", "ttl": 1760719474} {"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "SESSION#36af142e-9f6d-49d3-bfe9-6a6bd6ab2712", "created_at": "2025-09-17T13:44:34.544491-03:00", "ttl": 1760719474}
{"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "NEVER_LOGGED"} {"id": "357db1c5-7442-4075-98a3-fbe5c938a419", "sk": "NEVER_LOGGED"}
{"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "0", "name": "Johnny Cash", "email": "johnny@johnnycash.com"} {"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "0", "name": "Johnny Cash", "email": "johnny@johnnycash.com"}
{"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "PASSWORD", "hash": "$pbkdf2-sha256$29000$IuTcm7M2BiAEgPB.b.3dGw$d8xVCbx8zxg7MeQBrOvCOgniiilsIHEMHzoH/OXftLQ"} {"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "PASSWORD", "hash": "$pbkdf2-sha256$29000$IuTcm7M2BiAEgPB.b.3dGw$d8xVCbx8zxg7MeQBrOvCOgniiilsIHEMHzoH/OXftLQ"}
{"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "SCOPE", "scope": ["openid"]} {"id": "fd5914ec-fd37-458b-b6b9-8aeab38b666b", "sk": "SCOPE#*", "scope": ["openid"]}
{"id": "email", "sk": "sergio@somosbeta.com.br", "user_id": "357db1c5-7442-4075-98a3-fbe5c938a419"} {"id": "email", "sk": "sergio@somosbeta.com.br", "user_id": "357db1c5-7442-4075-98a3-fbe5c938a419"}
{"id": "email", "sk": "osergiosiqueira@gmail.com", "user_id": "357db1c5-7442-4075-98a3-fbe5c938a419"} {"id": "email", "sk": "osergiosiqueira@gmail.com", "user_id": "357db1c5-7442-4075-98a3-fbe5c938a419"}

2225
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,19 +8,19 @@
"check-types": "turbo run check-types" "check-types": "turbo run check-types"
}, },
"devDependencies": { "devDependencies": {
"prettier": "^3.6.2", "prettier": "^3.7.4",
"turbo": "^2.6.2", "turbo": "^2.6.3",
"typescript": "5.9.2" "typescript": "5.9.3"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "^4.52.5", "@rollup/rollup-linux-x64-gnu": "^4.53.3",
"@tailwindcss/oxide-linux-x64-gnu": "^4.1.16", "@tailwindcss/oxide-linux-x64-gnu": "^4.1.17",
"lightningcss-linux-x64-gnu": "^1.30.2" "lightningcss-linux-x64-gnu": "^1.30.2"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=18"
}, },
"packageManager": "npm@11.5.2", "packageManager": "npm@11.6.4",
"workspaces": [ "workspaces": [
"apps/*", "apps/*",
"packages/*" "packages/*"

View File

@@ -9,14 +9,14 @@
"./middleware/*": "./src/middleware/*.ts" "./middleware/*": "./src/middleware/*.ts"
}, },
"dependencies": { "dependencies": {
"jose": "^6.1.0", "jose": "^6.1.3",
"remix-auth-oauth2": "^3.4.1" "remix-auth-oauth2": "^3.4.1"
}, },
"devDependencies": { "devDependencies": {
"react-router": "^7.9.5", "react-router": "^7.10.1",
"@types/node": "^24.9.2", "@types/node": "^24.10.1",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"typescript": "^5.9.3" "typescript": "^5.9.3"
} }
} }

View File

@@ -15,14 +15,14 @@
"./components/data-table": "./src/components/data-table/index.ts" "./components/data-table": "./src/components/data-table/index.ts"
}, },
"dependencies": { "dependencies": {
"@brazilian-utils/brazilian-utils": "^1.0.0-rc.12", "@brazilian-utils/brazilian-utils": "^1.1.0",
"@hookform/resolvers": "^5.2.2", "@hookform/resolvers": "^5.2.2",
"@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-avatar": "^1.1.11",
"@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.7", "@radix-ui/react-label": "^2.1.8",
"@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-navigation-menu": "^1.2.14",
"@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-progress": "^1.1.8", "@radix-ui/react-progress": "^1.1.8",
@@ -32,31 +32,31 @@
"@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-tooltip": "^1.2.8",
"@tailwindcss/postcss": "^4.1.16", "@tailwindcss/postcss": "^4.1.17",
"@tailwindcss/vite": "^4.1.16", "@tailwindcss/vite": "^4.1.17",
"ahooks": "^3.9.6", "ahooks": "^3.9.6",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lucide-react": "^0.548.0", "lucide-react": "^0.556.0",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"react-day-picker": "^9.11.1", "react-day-picker": "^9.11.3",
"react-hook-form": "^7.66.0", "react-hook-form": "^7.68.0",
"react-number-format": "^5.4.4", "react-number-format": "^5.4.4",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tailwind-merge": "^3.3.1", "tailwind-merge": "^3.4.0",
"tailwindcss": "^4.1.16", "tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
"zod": "^4.1.12" "zod": "^4.1.13"
}, },
"devDependencies": { "devDependencies": {
"@types/lodash": "^4.17.20", "@types/lodash": "^4.17.21",
"typescript": "^5.9.2", "typescript": "^5.9.3",
"vite": "^7.2.0", "vite": "^7.2.6",
"vite-tsconfig-paths": "^5.1.4" "vite-tsconfig-paths": "^5.1.4"
} }
} }

View File

@@ -7,9 +7,9 @@
}, },
"devDependencies": { "devDependencies": {
"@repo/auth": "*", "@repo/auth": "*",
"@types/node": "^24.9.2", "@types/node": "^24.10.1",
"@types/react": "^19.2.2", "@types/react": "^19.2.7",
"@types/react-dom": "^19.2.2", "@types/react-dom": "^19.2.3",
"typescript": "^5.9.3" "typescript": "^5.9.3"
} }
} }