fix(web): crypto.randomUUID indisponivel fora de contexto seguro quebrava a transmissao
Acesso pelo IP da rede (http://192.168...) nao e contexto seguro e o navegador nao expoe crypto.randomUUID, derrubando a conclusao do pedido. Helper randomUUID() cai para UUID v4 via crypto.getRandomValues. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -49,6 +49,7 @@ import { useCondicoesComerciais } from '../../lib/condicoes-comerciais';
|
||||
import { CondicaoTag } from '../../components/CondicaoTag';
|
||||
import { apiFetch } from '../../lib/api-client';
|
||||
import { enqueueOrder } from '../../lib/offline/order-queue';
|
||||
import { randomUUID } from '../../lib/uuid';
|
||||
|
||||
const { Title, Text } = Typography;
|
||||
const { useBreakpoint } = Grid;
|
||||
@@ -1418,7 +1419,7 @@ export function NewOrderPage() {
|
||||
descontoPerc: 0,
|
||||
obs: obsCompleta || undefined,
|
||||
endEntrega: endEntregaValue,
|
||||
idempotencyKey: crypto.randomUUID(),
|
||||
idempotencyKey: randomUUID(),
|
||||
itens: cart.map((it, idx) => ({
|
||||
idProduto: it.idProduto,
|
||||
codProduto: it.codProduto,
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
import type { CreatePedido } from '@sar/api-interface';
|
||||
import { idbGetAll, idbPut, idbDelete, STORE_PENDING_ORDERS } from './idb';
|
||||
import { randomUUID } from '../uuid';
|
||||
|
||||
export interface PendingOrder {
|
||||
idempotencyKey: string; // keyPath do IndexedDB
|
||||
@@ -23,7 +24,7 @@ export async function enqueueOrder(
|
||||
payload: CreatePedido,
|
||||
clienteNome: string,
|
||||
): Promise<PendingOrder> {
|
||||
const key = payload.idempotencyKey ?? crypto.randomUUID();
|
||||
const key = payload.idempotencyKey ?? randomUUID();
|
||||
const order: PendingOrder = {
|
||||
idempotencyKey: key,
|
||||
payload: { ...payload, idempotencyKey: key },
|
||||
|
||||
12
apps/web/src/lib/uuid.ts
Normal file
12
apps/web/src/lib/uuid.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
// crypto.randomUUID só existe em contexto seguro (HTTPS/localhost). Acessando o
|
||||
// dev server pelo IP da rede (http://192.168...) ela é undefined — fallback gera
|
||||
// UUID v4 com crypto.getRandomValues, disponível em qualquer contexto.
|
||||
export function randomUUID(): string {
|
||||
if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();
|
||||
|
||||
const bytes = crypto.getRandomValues(new Uint8Array(16));
|
||||
bytes[6] = (bytes[6] & 0x0f) | 0x40; // versão 4
|
||||
bytes[8] = (bytes[8] & 0x3f) | 0x80; // variante RFC 4122
|
||||
const hex = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');
|
||||
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
||||
}
|
||||
Reference in New Issue
Block a user