cosmemilton-acbr-node 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/generator.ts", "../src/cli.ts", "../src/config.ts", "../src/native-build.ts", "../src/source.ts", "../src/runtime.ts", "../src/types.ts", "../src/offline-fixture.ts", "../src/offline-check.ts"],
4
- "sourcesContent": ["import { createHash } from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { mkdir, readFile, writeFile, readdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nconst execute = promisify(execFile);\ninterface RawProperty { name:string; type:string; indexed:boolean; readable:boolean; writable:boolean; default:string; line:number }\ninterface RawType { name:string; kind:string; ancestor?:string; properties?:RawProperty[]; methods?:{name:string;result:string;arguments:number}[]; target?:string; values?:{name:string;assigned:string}[]; min?:string; max?:string; declarationKind?:string; line:number }\ninterface RawUnit { name:string; file:string; uses:string[]; types:RawType[] }\nexport interface RawModel { schemaVersion:number; root:string; units:RawUnit[] }\nexport interface ModelProperty { name:string; type:string; kind:'string'|'integer'|'decimal'|'datetime'|'boolean'|'enum'|'object'|'list'; ref?:string; readonly:boolean; declaredDefault?:string; min?:number; max?:number; scale?:number }\nexport interface ModelType { name:string; unit:string; kind:'object'|'list'|'enum'; properties?:ModelProperty[]; item?:string; values?:string[]; factory?:string }\nexport interface ModelIR { schemaVersion:1; root:string; types:ModelType[] }\nexport interface GenerateOptions { acbrRoot:string; outputDir:string; revision:string|number; sourceHash?:string; modelOutputDir?:string; nativeOutputDir?:string; extractorPath?:string; fpcPath?:string }\nconst bases = new Set(['tobject','tpersistent','tacbrobjectlist']);\nconst primitives:Record<string,{kind:ModelProperty['kind'];min?:number;max?:number;scale?:number}>={\n string:{kind:'string'},ansistring:{kind:'string'},unicodestring:{kind:'string'},widestring:{kind:'string'},\n boolean:{kind:'boolean'},byte:{kind:'integer',min:0,max:255},word:{kind:'integer',min:0,max:65535},\n integer:{kind:'integer',min:-2147483648,max:2147483647},longint:{kind:'integer',min:-2147483648,max:2147483647},\n smallint:{kind:'integer',min:-32768,max:32767},shortint:{kind:'integer',min:-128,max:127},\n cardinal:{kind:'integer',min:0,max:4294967295},longword:{kind:'integer',min:0,max:4294967295},\n int64:{kind:'integer',min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER},qword:{kind:'integer',min:0,max:Number.MAX_SAFE_INTEGER},\n double:{kind:'decimal'},extended:{kind:'decimal'},single:{kind:'decimal'},currency:{kind:'decimal',scale:4},\n tdatetime:{kind:'datetime'},tdate:{kind:'datetime'},ttime:{kind:'datetime'}\n};\nconst stable = (value:unknown):string => JSON.stringify(value);\nconst hash = (value:string|Buffer):string => createHash('sha256').update(value).digest('hex');\nexport function buildModelIR(raw:RawModel):ModelIR {\n const declarations=new Map<string,{unit:RawUnit;type:RawType}>();\n for(const unit of raw.units)for(const type of unit.types)declarations.set((unit.name+'.'+type.name).toLowerCase(),{unit,type});\n function find(name:string,unit:RawUnit):{unit:RawUnit;type:RawType}{\n for(const key of [unit.name+'.'+name,...[...unit.uses].reverse().map(u=>u+'.'+name),name]){const item=declarations.get(key.toLowerCase());if(item)return item;}\n throw new Error('Tipo Pascal n\u00E3o resolvido: '+unit.name+'.'+name);\n }\n function resolve(name:string,unit:RawUnit,trail=new Set<string>()):{unit:RawUnit;type:RawType}|{primitive:string}{\n if(primitives[name.toLowerCase()])return {primitive:name.toLowerCase()};\n const found=find(name,unit),key=(found.unit.name+'.'+found.type.name).toLowerCase();\n if(trail.has(key))throw new Error('Alias Pascal c\u00EDclico: '+key);\n if(found.type.kind==='alias'){trail.add(key);return resolve(found.type.target!,found.unit,trail);}\n return found;\n }\n const rootUnit=raw.units.find(u=>u.types.some(t=>t.name===raw.root));\n if(!rootUnit)throw new Error('Modelo raiz ausente: '+raw.root);\n const generated=new Map<string,ModelType>();\n function visit(name:string,unit:RawUnit):{kind:ModelProperty['kind'];ref?:string;min?:number;max?:number;scale?:number}{\n const found=resolve(name,unit);if('primitive'in found)return primitives[found.primitive];\n const {type,unit:declUnit}=found,key=type.name;\n if(generated.has(key)){const node=generated.get(key)!;if(node.unit!==declUnit.name)throw new Error('Tipos hom\u00F4nimos incompat\u00EDveis: '+key);return {kind:node.kind==='object'?'object':node.kind==='list'?'list':'enum',ref:key};}\n if(type.kind==='enum'){\n const values=type.values!.map(v=>v.name);if(!values.length)throw new Error('Enum sem valores: '+key);\n generated.set(key,{name:key,unit:declUnit.name,kind:'enum',values});return {kind:'enum',ref:key};\n }\n if(type.kind!=='class')throw new Error('Declara\u00E7\u00E3o Pascal n\u00E3o suportada: '+declUnit.name+'.'+key+' ('+(type.declarationKind??type.kind)+')');\n const creator=type.methods?.find(m=>m.name.toLowerCase()==='new'&&m.arguments===0);\n const indexed=type.properties?.find(p=>p.indexed&&p.name.toLowerCase()==='items');\n if(creator||indexed){\n if(!creator||!indexed||!indexed.readable)throw new Error('Cole\u00E7\u00E3o sem contrato New/Items tipado: '+key);\n const item=resolve(creator.result,declUnit),itemProperty=resolve(indexed.type,declUnit);\n if('primitive'in item||'primitive'in itemProperty||item.type.name!==itemProperty.type.name)throw new Error('Cole\u00E7\u00E3o com tipos New/Items divergentes: '+key);\n generated.set(key,{name:key,unit:declUnit.name,kind:'list',item:item.type.name,factory:creator.name});\n if(visit(creator.result,declUnit).kind!=='object')throw new Error('Item de cole\u00E7\u00E3o n\u00E3o \u00E9 objeto: '+key);\n return {kind:'list',ref:key};\n }\n const node:ModelType={name:key,unit:declUnit.name,kind:'object',properties:[]};generated.set(key,node);\n let inherited:ModelProperty[]=[];\n if(type.ancestor&&!bases.has(type.ancestor.toLowerCase())){\n const ancestor=visit(type.ancestor,declUnit);if(ancestor.kind!=='object')throw new Error('Heran\u00E7a n\u00E3o suportada: '+key);\n inherited=generated.get(ancestor.ref!)!.properties!;\n }\n const props=new Map(inherited.map(p=>[p.name.toLowerCase(),p]));\n for(const p of type.properties??[]){\n if(p.indexed)throw new Error('Propriedade indexada fora de cole\u00E7\u00E3o: '+key+'.'+p.name);\n if(!p.readable)throw new Error('Propriedade sem leitura: '+key+'.'+p.name);\n const resolved=visit(p.type,declUnit);\n const readonly=(!p.writable&&!['object','list'].includes(resolved.kind))||(key===raw.root&&['signature','procnfe','infnfesupl'].includes(p.name.toLowerCase()));\n props.set(p.name.toLowerCase(),{name:p.name,type:p.type,...resolved,readonly,...(p.default?{declaredDefault:p.default}:{})});\n }\n node.properties=[...props.values()].sort((a,b)=>a.name.localeCompare(b.name,'en'));return {kind:'object',ref:key};\n }\n visit(raw.root,rootUnit);return {schemaVersion:1,root:raw.root,types:[...generated.values()].sort((a,b)=>a.name.localeCompare(b.name,'en'))};\n}\nexport function compareContracts(previous:ModelIR|undefined,current:ModelIR){\n const old=new Map(previous?.types.map(t=>[t.name,t])??[]),now=new Map(current.types.map(t=>[t.name,t]));\n const additions:string[]=[],removals:string[]=[],changes:string[]=[];\n for(const [name,type]of now){\n const before=old.get(name);if(!before){additions.push(name);continue;}\n if(type.kind!==before.kind){changes.push(name+':kind');continue;}\n if(type.kind==='object'){\n const a=new Map(before.properties!.map(p=>[p.name,p])),b=new Map(type.properties!.map(p=>[p.name,p]));\n for(const [field,p]of b){if(!a.has(field))additions.push(name+'.'+field);else if(stable(a.get(field))!==stable(p))changes.push(name+'.'+field);}\n for(const field of a.keys())if(!b.has(field))removals.push(name+'.'+field);\n }else if(type.kind==='enum'){\n for(const v of type.values!)if(!before.values!.includes(v))additions.push(name+'.'+v);\n for(const v of before.values!)if(!type.values!.includes(v))removals.push(name+'.'+v);\n }else if(type.item!==before.item)changes.push(name+':item');\n }\n for(const name of old.keys())if(!now.has(name))removals.push(name);\n return {additions:additions.sort(),removals:removals.sort(),changes:changes.sort(),breaking:removals.length>0||changes.length>0};\n}\nconst tsType=(p:ModelProperty):string=>p.kind==='object'?p.ref+'Input':p.kind==='list'?p.ref+'Input':p.kind==='enum'?p.ref!:p.kind==='integer'?'number':p.kind==='boolean'?'boolean':'string';\nexport function renderTypeScript(ir:ModelIR,revision:number,contractHash:string):string {\n const out=['// Generated from ACBr AST. LGPL-2.1-or-later. Do not edit.','export const ACBR_CONTRACT = '+stable({sourceRevision:revision,contractHash})+' as const;','export const SOURCE_REVISION=ACBR_CONTRACT.sourceRevision;','export const CONTRACT_HASH=ACBR_CONTRACT.contractHash;'];\n for(const t of ir.types){\n if(t.kind==='enum'){\n out.push('export const '+t.name+' = Object.freeze('+stable(Object.fromEntries(t.values!.map(v=>[v,v])))+' as const);','export type '+t.name+' = typeof '+t.name+'[keyof typeof '+t.name+'];');\n }else if(t.kind==='list'){\n out.push('export type '+t.name+'Input = '+t.item+'Input[];','export class '+t.name+' extends Array<'+t.item+'> {',' New(input: '+t.item+'Input = {}): '+t.item+' { const item=new '+t.item+'(input); this.push(item); return item; }','}');\n }else {\n out.push('export interface '+t.name+'Input {');\n for(const p of t.properties!.filter(p=>!p.readonly))out.push(' '+JSON.stringify(p.name)+'?: '+tsType(p)+';');\n out.push('}','export class '+t.name+' {');\n for(const p of t.properties!){\n if(p.readonly){out.push(' readonly '+JSON.stringify(p.name)+'?: '+tsType(p)+';');continue;}\n if(p.declaredDefault)out.push(' /** Pascal streaming default: '+p.declaredDefault.replaceAll('*/','')+'. Omission preserves the native constructor. */');\n if(p.kind==='object'||p.kind==='list')out.push(' '+JSON.stringify(p.name)+' = new '+p.ref+'();');\n else out.push(' '+JSON.stringify(p.name)+'?: '+tsType(p)+';');\n }\n out.push(' constructor(input: '+t.name+'Input = {}) {',' validateModel('+JSON.stringify(t.name)+', input);');\n for(const p of t.properties!.filter(p=>!p.readonly)){\n const access='input['+JSON.stringify(p.name)+']',target='this['+JSON.stringify(p.name)+']';\n out.push(' if ('+access+' !== undefined) '+target+' = '+(p.kind==='object'?'new '+p.ref+'('+access+')':p.kind==='list'?'Object.assign(new '+p.ref+'(), '+access+'.map(v=>new '+ir.types.find(t=>t.name===p.ref)!.item+'(v)))':access)+';');\n }\n out.push(' }','}');\n }\n }\n out.push('const MODEL_SCHEMA: Record<string, any> = '+stable(Object.fromEntries(ir.types.map(t=>[t.name,t])))+';');\n out.push(String.raw`\nexport function validateModel(model: string, value: unknown, at=model): void {\n const schema=MODEL_SCHEMA[model]; if(!schema)throw new TypeError('Modelo desconhecido: '+model);\n if(schema.kind==='enum'){ if(typeof value!=='string'||!schema.values.includes(value))throw new TypeError(at+': enum inv\u00E1lido'); return; }\n if(schema.kind==='list'){ if(!Array.isArray(value))throw new TypeError(at+': esperado array'); value.forEach((item,index)=>validateModel(schema.item,item,at+'['+index+']'));return; }\n if(value===null||typeof value!=='object'||Array.isArray(value))throw new TypeError(at+': esperado objeto');\n const fields=new Map<string,any>(schema.properties.filter((p:any)=>!p.readonly).map((p:any)=>[p.name,p]));\n for(const [name,v] of Object.entries(value)){\n if(v===undefined)continue;\n const p=fields.get(name);if(!p)throw new TypeError(at+'.'+name+': propriedade desconhecida ou somente leitura');\n if(v===undefined)continue;\n const field=at+'.'+name;\n if(p.ref){validateModel(p.ref,v,field);continue;}\n if(p.kind==='integer'){if(typeof v!=='number'||!Number.isSafeInteger(v)||v<p.min||v>p.max)throw new TypeError(field+': inteiro fora do intervalo');}\n else if(p.kind==='boolean'){if(typeof v!=='boolean')throw new TypeError(field+': esperado boolean');}\n else if(p.kind==='decimal'){if(typeof v!=='string'||v.length>64||! /^-?\\d+(?:\\.\\d+)?$/.test(v)||p.scale!==undefined&&(v.split('.')[1]?.length??0)>p.scale)throw new TypeError(field+': esperado decimal em string'+(p.scale!==undefined?' de at\u00E9 '+p.scale+' casas':''));}\n else if(p.kind==='datetime'){\n if(typeof v!=='string'||! /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?)?$/.test(v)||Number.isNaN(Date.parse(v+(v.length===10?'T00:00:00Z':'Z'))))throw new TypeError(field+': esperado data/hora civil ISO (sem timezone)');\n const date=new Date(v+(v.length===10?'T00:00:00Z':'Z'));if(date.toISOString().slice(0,10)!==v.slice(0,10))throw new TypeError(field+': data inv\u00E1lida');\n }else if(typeof v!=='string')throw new TypeError(field+': esperado string');\n }\n}\nexport function validateTNFe(value: unknown): asserts value is TNFeInput { validateModel('TNFe',value); }\n`);\n return out.join('\\n')+'\\n';\n}\n\nexport function renderPascal(ir:ModelIR,revision:number,contractHash:string):string {\n const classes=ir.types.filter(t=>t.kind==='object'),byName=new Map(ir.types.map(t=>[t.name,t]));\n const units=[...new Set(ir.types.map(t=>t.unit))].sort();\n const out=['{ Generated from ACBr AST. LGPL-2.1-or-later. Do not edit. }','unit AcbrModels;','{$mode delphi}{$H+}','interface','uses SysUtils, Classes, fpjson, DateUtils, Math, '+units.join(', ')+';','const SourceRevision = '+revision+';',\" ContractHash = '\"+contractHash+\"';\",'procedure preencherTNFe(documento:TJSONObject; destino:TNFe);','implementation'];\n out.push(String.raw`\nprocedure Bad(const P,M:string); begin raise Exception.Create(P+': '+M) end;\nfunction Obj(D:TJSONData;const P:string):TJSONObject;\nbegin if (D=nil) or (D.JSONType<>jtObject) then Bad(P,'esperado objeto');Result:=TJSONObject(D) end;\nfunction Arr(D:TJSONData;const P:string):TJSONArray;\nbegin if (D=nil) or (D.JSONType<>jtArray) then Bad(P,'esperado array');Result:=TJSONArray(D) end;\nfunction Text(D:TJSONData;const P:string):string;\nbegin if (D=nil) or (D.JSONType<>jtString) then Bad(P,'esperado string');Result:=D.AsString end;\nfunction IntValue(D:TJSONData;const P:string;MinV,MaxV:Int64):Int64;\nvar V:Extended;\nbegin\n if (D=nil) or (D.JSONType<>jtNumber) then Bad(P,'esperado inteiro');\n V:=D.AsFloat;if IsNan(V) or IsInfinite(V) or (Frac(V)<>0) or (V<MinV) or (V>MaxV) then Bad(P,'inteiro fora do intervalo');\n Result:=D.AsInt64;\nend;\nfunction BoolValue(D:TJSONData;const P:string):boolean;\nbegin if (D=nil) or (D.JSONType<>jtBoolean) then Bad(P,'esperado boolean');Result:=D.AsBoolean end;\nfunction DecimalText(D:TJSONData;const P:string;Scale:integer):string;\nvar I,PointPos:integer;\nbegin\n Result:=Text(D,P);PointPos:=0;\n if (Result='') or (Length(Result)>64) then Bad(P,'decimal inv\u00E1lido');\n for I:=1 to Length(Result) do begin\n if Result[I]='.' then begin if (PointPos>0) or (I=1) or ((I=2) and (Result[1]='-')) or (I=Length(Result)) then Bad(P,'decimal inv\u00E1lido');PointPos:=I end\n else if (Result[I]='-') and (I=1) then begin if Length(Result)=1 then Bad(P,'decimal inv\u00E1lido') end\n else if not (Result[I] in ['0'..'9']) then Bad(P,'decimal inv\u00E1lido');\n end;\n if (PointPos>0) and (Scale>=0) and (Length(Result)-PointPos>Scale) then Bad(P,'casas decimais excedidas');\nend;\nfunction FloatValue(D:TJSONData;const P:string):Extended;\nvar F:TFormatSettings;S:string;\nbegin F:=DefaultFormatSettings;F.DecimalSeparator:='.';F.ThousandSeparator:=#0;S:=DecimalText(D,P,-1);\n if not TryStrToFloat(S,Result,F) or IsNan(Result) or IsInfinite(Result) then Bad(P,'decimal fora do intervalo');\nend;\nfunction CurrencyValue(D:TJSONData;const P:string):Currency;\nvar F:TFormatSettings;S:string;\nbegin F:=DefaultFormatSettings;F.DecimalSeparator:='.';F.ThousandSeparator:=#0;S:=DecimalText(D,P,4);\n if not TryStrToCurr(S,Result,F) then Bad(P,'currency fora do intervalo');\nend;\nfunction DateValue(D:TJSONData;const P:string):TDateTime;\nvar S:string;I:integer;\nbegin\n S:=Text(D,P);\n if not (Length(S) in [10,19,21,22,23]) then Bad(P,'esperado data/hora civil ISO sem timezone');\n for I:=1 to Length(S) do if not ((S[I] in ['0'..'9']) or ((I in [5,8]) and (S[I]='-')) or ((I=11) and (S[I]='T')) or ((I in [14,17]) and (S[I]=':')) or ((I=20) and (S[I]='.'))) then Bad(P,'data ISO inv\u00E1lida');\n if not TryISO8601ToDate(S,Result,true) then Bad(P,'data ISO inv\u00E1lida');\nend;\n`);\n const q=(s:string)=>\"'\"+s.replaceAll(\"'\",\"''\")+\"'\";\n for(const t of classes)out.push('procedure Load_'+t.name+'(D:TJSONObject;destino:'+t.unit+'.'+t.name+';const P:string); forward;');\n for(const t of classes){\n out.push('procedure Load_'+t.name+'(D:TJSONObject;destino:'+t.unit+'.'+t.name+';const P:string);','var I,J:integer;V:TJSONData;A:TJSONArray;K,At:string;','begin',\" if destino=nil then Bad(P,'objeto ACBr n\u00E3o inicializado');\",' for I:=0 to D.Count-1 do begin',' K:=D.Names[I];V:=D.Items[I];At:=P+\\'.\\'+K;');\n let index=0;\n for(const p of t.properties!.filter(p=>!p.readonly)){\n out.push(' '+(index++?'else ':'')+'if K='+q(p.name)+' then begin');const target='destino.'+p.name;\n if(p.kind==='object')out.push(' Load_'+p.ref+'(Obj(V,At),'+target+',At);');\n else if(p.kind==='list'){\n const list=byName.get(p.ref!)!;\n out.push(' A:=Arr(V,At);if '+target+'=nil then Bad(At,\\'cole\u00E7\u00E3o n\u00E3o inicializada\\');'+target+'.Clear;',' for J:=0 to A.Count-1 do Load_'+list.item+'(Obj(A.Items[J],At+\\'[\\'+IntToStr(J)+\\']\\'),'+target+'.'+list.factory+',At+\\'[\\'+IntToStr(J)+\\']\\');');\n }else if(p.kind==='enum'){\n const enumeration=byName.get(p.ref!)!;\n out.push(...enumeration.values!.map((v,i)=>' '+(i?'else ':'')+'if Text(V,At)='+q(v)+' then '+target+':='+enumeration.unit+'.'+v),\" else Bad(At,'enum inv\u00E1lido');\");\n }else out.push(' '+target+':='+({string:'Text(V,At)',integer:'IntValue(V,At,'+p.min+','+p.max+')',boolean:'BoolValue(V,At)',datetime:'DateValue(V,At)',decimal:p.scale===4?'CurrencyValue(V,At)':'FloatValue(V,At)'}[p.kind])+';');\n out.push(' end');\n }\n out.push((index?\" else \":\" \")+\"Bad(At,'propriedade desconhecida ou somente leitura');\",' end;','end;');\n }\n out.push('procedure preencherTNFe(documento:TJSONObject;destino:TNFe);',\"begin if documento=nil then Bad('TNFe','esperado objeto');Load_TNFe(documento,destino,'TNFe') end;\",'end.');\n return out.join('\\n')+'\\n';\n}\nexport function renderClientIndex():string{\n return [\n '// Generated client bound to its own ACBr contract. Do not edit.',\n 'import { criarEmissor as criarRuntime, type OpcoesEmissor, type OpcoesOperacao } from '+JSON.stringify('cosmemilton-acbr-node/runtime')+';',\n 'import { ACBR_CONTRACT, validateTNFe, type TNFeInput } from '+JSON.stringify('./models.js')+';',\n 'export * from '+JSON.stringify('./models.js')+';',\n 'export function criarEmissor(options: Omit<OpcoesEmissor, '+JSON.stringify('contrato')+' | '+JSON.stringify('validaDocumento')+'>) {',\n ' const emissor=criarRuntime({...options, contrato:ACBR_CONTRACT, validaDocumento:validateTNFe});',\n ' return {...emissor, gerarXml(documento:TNFeInput, opcoes?:OpcoesOperacao) { return emissor.gerarXml(documento as unknown as Record<string,unknown>, opcoes); }};',\n '}'\n ].join('\\n')+'\\n';\n}\nasync function fingerprint(dir:string):Promise<string>{\n const files:string[]=[];\n async function walk(d:string){for(const entry of await readdir(d,{withFileTypes:true})){const f=path.join(d,entry.name);if(entry.isDirectory())await walk(f);else if(/\\.(pas|pp|inc|xsd)$/i.test(entry.name))files.push(f);}}\n await walk(dir);const digest=createHash('sha256');\n for(const f of files.sort()){digest.update(path.relative(dir,f).replaceAll('\\\\','/'));digest.update(await readFile(f));}return digest.digest('hex');\n}\nexport async function generateModel(options:GenerateOptions){\n const root=path.resolve(options.outputDir),cache=path.join(root,'.acbr/generated'),bin=path.join(root,'.acbr/bin');\n const models=path.resolve(root,options.modelOutputDir??'generated/acbr'),native=path.resolve(root,options.nativeOutputDir??'native/generated');\n await Promise.all([mkdir(cache,{recursive:true}),mkdir(bin,{recursive:true}),mkdir(models,{recursive:true}),mkdir(native,{recursive:true})]);\n const extractor=options.extractorPath??fileURLToPath(new URL('../tools/extract-model.lpr',import.meta.url));\n const executable=path.join(bin,'extract-model'+(process.platform==='win32'?'.exe':''));\n try{\n await execute(options.fpcPath??'fpc',['-Mobjfpc','-Sh','-FU'+bin,'-FE'+bin,extractor],{cwd:root,maxBuffer:8*1024*1024});\n await execute(executable,[path.resolve(options.acbrRoot),path.join(cache,'raw-model.json'),process.platform==='win32'?'win64':'linux'],{cwd:root,maxBuffer:8*1024*1024});\n }catch(error){const e=error as Error&{stdout?:string;stderr?:string};throw new Error('Extra\u00E7\u00E3o FCL-passrc falhou: '+(e.stderr??'')+(e.stdout??'')+e.message);}\n const raw=JSON.parse(await readFile(path.join(cache,'raw-model.json'),'utf8')) as RawModel;\n const ir=buildModelIR(raw),sourceRevision=Number(options.revision);\n if(!Number.isSafeInteger(sourceRevision)||sourceRevision<1)throw new Error('Revis\u00E3o SVN inv\u00E1lida');\n const sourceHash=options.sourceHash??await fingerprint(options.acbrRoot),contractHash=hash(stable({sourceRevision,sourceHash,ir}));\n let previous:ModelIR|undefined;try{previous=JSON.parse(await readFile(path.join(cache,'model.ir.json'),'utf8'));}catch(error){if((error as NodeJS.ErrnoException).code!=='ENOENT')throw error;}\n const report=compareContracts(previous,ir),reportPath=path.join(cache,'changes.json'),manifestPath=path.join(cache,'manifest.json');\n const files=[path.relative(root,path.join(models,'models.ts')),path.relative(root,path.join(models,'index.ts')),path.relative(root,path.join(native,'AcbrModels.pas'))].map(f=>f.replaceAll('\\\\','/'));\n const content=[renderTypeScript(ir,sourceRevision,contractHash),renderClientIndex(),renderPascal(ir,sourceRevision,contractHash)];\n const fileHashes=Object.fromEntries(files.map((file,index)=>[file,hash(content[index])]));\n await Promise.all([\n ...files.map((file,index)=>writeFile(path.resolve(root,file),content[index],'utf8')),\n writeFile(path.join(cache,'model.ir.json'),JSON.stringify(ir,null,2)+'\\n','utf8'),\n writeFile(reportPath,JSON.stringify(report,null,2)+'\\n','utf8'),\n writeFile(manifestPath,JSON.stringify({schemaVersion:1,sourceRevision,sourceHash,contractHash,root:ir.root,models:ir.types.length,files,fileHashes},null,2)+'\\n','utf8')\n ]);return {contractHash,sourceHash,models:ir.types.length,reportPath,manifestPath};\n}\n", "#!/usr/bin/env node\nimport { access } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { initializeConfig, loadConfig } from './config.js';\nimport { checkBuild, buildNative, doctor, runtimeDirectory } from './native-build.js';\nimport { lockExistingSource, updateSource, verifySource } from './source.js';\nimport { checkOffline } from './offline-check.js';\n\nexport const HELP = `acbr-node \u2014 compila\u00E7\u00E3o e contrato Node/ACBr NF-e\n\nUso:\n acbr-node init [--config caminho] [--revision HEAD|n\u00FAmero]\n acbr-node source update [--config caminho] [--revision HEAD|n\u00FAmero]\n acbr-node source lock --revision n\u00FAmero [--config caminho]\n acbr-node generate [--config caminho]\n acbr-node build [--config caminho]\n acbr-node check [--config caminho]\n acbr-node doctor [--config caminho]\n\nsource update consulta o SVN oficial e substitui apenas fontes verificadas pelo lock.\nsource lock registra um export existente cuja origem/revis\u00E3o o operador j\u00E1 conferiu.\ngenerate/build/check nunca atualizam fontes. Nenhum comando transmite NF-e.\n`;\nexport interface CliIO { stdout: { write(text: string): unknown }; stderr: { write(text: string): unknown }; }\nfunction revision(value: string | undefined): 'HEAD' | number | undefined {\n if (value === undefined) return undefined;\n if (value === 'HEAD') return value;\n if (!/^[1-9]\\d*$/.test(value) || !Number.isSafeInteger(Number(value))) throw new Error('--revision deve ser HEAD ou um n\u00FAmero SVN positivo.');\n return Number(value);\n}\ninterface Args { command: string[]; config: string; revision?: 'HEAD' | number; json: boolean; help: boolean; }\nexport function parseArguments(args: string[]): Args {\n const result: Args = { command: [], config: 'acbr.config.json', json: false, help: false };\n const used = new Set<string>();\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]!;\n if (!arg.startsWith('-')) { result.command.push(arg); continue; }\n if (used.has(arg)) throw new Error(`Op\u00E7\u00E3o repetida: ${arg}.`);\n used.add(arg);\n if (arg === '--help' || arg === '-h') result.help = true;\n else if (arg === '--json') result.json = true;\n else if (arg === '--config' || arg === '--revision') {\n const value = args[++i];\n if (value === undefined || value.startsWith('--')) throw new Error(`Valor obrigat\u00F3rio para ${arg}.`);\n if (arg === '--config') result.config = value;\n else result.revision = revision(value);\n } else throw new Error(`Op\u00E7\u00E3o desconhecida: ${arg}.`);\n }\n return result;\n}\nexport async function main(args = process.argv.slice(2), io: CliIO = process): Promise<number> {\n try {\n const options = parseArguments(args);\n const command = options.command.join(' ');\n if (options.help || !command) { io.stdout.write(HELP); return 0; }\n const output = (value: unknown, text: string) => io.stdout.write(options.json ? `${JSON.stringify(value, null, 2)}\\n` : `${text}\\n`);\n if (command === 'init') {\n const config = await initializeConfig(options.config, options.revision, fileURLToPath(new URL('../', import.meta.url)));\n output({ configPath: config.configPath }, `Configura\u00E7\u00E3o criada: ${config.configPath}\\nPr\u00F3ximo passo: acbr-node source update.`);\n return 0;\n }\n if (!['source update', 'source lock', 'generate', 'build', 'check', 'doctor'].includes(command)) throw new Error(`Comando desconhecido: ${command}. Use --help.`);\n if (options.revision !== undefined && !command.startsWith('source ')) throw new Error('--revision \u00E9 aceito somente em init e source.');\n if (command === 'doctor') {\n let config;\n try { await access(resolve(options.config)); config = await loadConfig(options.config); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n const report = await doctor(config);\n output(report, report.map(item => `${item.ok ? 'OK' : 'FALHA'} ${item.name}: ${item.detail}`).join('\\n'));\n return report.every(item => item.ok) ? 0 : 1;\n }\n const config = await loadConfig(options.config);\n if (command === 'source update') {\n const lock = await updateSource(config, options.revision);\n output(lock, `Fontes oficiais registradas na revis\u00E3o ${lock.source.revision}.\\nSHA256 da \u00E1rvore: ${lock.source.treeHash}\\nExecute generate para atualizar o contrato.`);\n } else if (command === 'source lock') {\n if (typeof options.revision !== 'number') throw new Error('source lock exige --revision com o n\u00FAmero verificado do export SVN.');\n if (config.source.revision !== 'HEAD' && config.source.revision !== options.revision) throw new Error('Revis\u00E3o do export diverge da configura\u00E7\u00E3o.');\n const lock = await lockExistingSource(config, options.revision);\n output(lock, `Export existente registrado na revis\u00E3o ${lock.source.revision}; ${Object.keys(lock.source.files).length} arquivos protegidos por SHA256.`);\n } else if (command === 'generate') {\n const lock = await verifySource(config);\n const { generateModel } = await import('./generator.js');\n const result = await generateModel({ acbrRoot: config.source.directory, outputDir: config.generator.outputDir, revision: String(lock.source.revision), sourceHash: lock.source.treeHash, fpcPath: config.native.fpc });\n output(result, `Contrato ${result.contractHash}; ${result.models} modelos gerados.\\nRevise o relat\u00F3rio: ${result.reportPath}`);\n } else if (command === 'build') {\n const result = await buildNative(config);\n output(result, `Runtime compilado: ${runtimeDirectory(config)}\\nACBr revis\u00E3o ${result.sourceRevision}; contrato ${result.contractHash}.`);\n } else {\n const result = await checkBuild(config);\n const offlineChecks = await checkOffline(config, result);\n output({ ...result, offlineChecks }, `Fontes, contrato e ${Object.keys(result.files).length} arquivos do runtime conferidos por SHA256.\\n${offlineChecks.length} verifica\u00E7\u00F5es offline do motor aprovadas; nenhuma transmiss\u00E3o.`);\n }\n return 0;\n } catch (error) {\n io.stderr.write(`Erro: ${(error as Error).message}\\n`);\n return 1;\n }\n}\nif (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {\n main().then(code => { process.exitCode = code; });\n}\n", "import { readFile, writeFile, mkdir, readdir, access, copyFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, resolve } from 'node:path';\n\nexport const OFFICIAL_ACBR_URL = 'https://svn.code.sf.net/p/acbr/code/trunk2';\nexport const SOURCE_PARTS = ['Fontes', 'Exemplos/ACBrDFe/Schemas/NFe', 'Doctos/LICENSE.TXT'] as const;\nexport interface AcbrConfigFile {\n formatVersion: 1;\n source: { url: string; revision: 'HEAD' | number; directory: string };\n generator: { outputDir: string };\n native: { project: string; outputDir: string; fpc: string; lazarusRoot?: string; libraryFiles?: string[]; providerFiles?: string[] };\n}\nexport interface AcbrConfig extends AcbrConfigFile {\n configPath: string;\n projectRoot: string;\n lockPath: string;\n}\nconst DEFAULT: AcbrConfigFile = {\n formatVersion: 1,\n source: { url: OFFICIAL_ACBR_URL, revision: 'HEAD', directory: '.acbr/source' },\n generator: { outputDir: '.' },\n native: { project: 'native/acbr-worker.lpr', outputDir: '.acbr/runtime', fpc: 'fpc' },\n};\nexport function defaultConfig(): AcbrConfigFile { return structuredClone(DEFAULT); }\nfunction record(value: unknown, name: string): Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} deve ser um objeto.`);\n return value as Record<string, unknown>;\n}\nfunction keys(value: Record<string, unknown>, allowed: string[], name: string): void {\n const unexpected = Object.keys(value).filter(key => !allowed.includes(key));\n if (unexpected.length) throw new Error(`Campo desconhecido em ${name}: ${unexpected.join(', ')}.`);\n}\nfunction string(value: unknown, name: string): string {\n if (typeof value !== 'string' || !value.trim() || value.includes('\\0')) throw new Error(`${name} deve ser um texto n\u00E3o vazio.`);\n return value;\n}\nexport function parseConfig(input: unknown, configPath: string): AcbrConfig {\n const root = record(input, 'configura\u00E7\u00E3o');\n keys(root, ['formatVersion', 'source', 'generator', 'native'], 'configura\u00E7\u00E3o');\n if (root.formatVersion !== 1) throw new Error('formatVersion deve ser 1.');\n const source = record(root.source, 'source'); keys(source, ['url', 'revision', 'directory'], 'source');\n const generator = record(root.generator, 'generator'); keys(generator, ['outputDir'], 'generator');\n const native = record(root.native, 'native'); keys(native, ['project', 'outputDir', 'fpc', 'lazarusRoot', 'libraryFiles', 'providerFiles'], 'native');\n const url = string(source.url, 'source.url').replace(/\\/+$/, '');\n if (url !== OFFICIAL_ACBR_URL) throw new Error(`source.url deve apontar ao reposit\u00F3rio oficial ${OFFICIAL_ACBR_URL}.`);\n const revision = source.revision;\n if (revision !== 'HEAD' && (!Number.isSafeInteger(revision) || Number(revision) < 1)) throw new Error('source.revision deve ser HEAD ou uma revis\u00E3o SVN positiva.');\n const absoluteConfig = resolve(configPath);\n const projectRoot = dirname(absoluteConfig);\n const localPath = (value: unknown, label: string) => resolve(projectRoot, string(value, label));\n const fpcInput = string(native.fpc, 'native.fpc');\n const fpc = isAbsolute(fpcInput) || /[\\\\/]/.test(fpcInput) ? resolve(projectRoot, fpcInput) : fpcInput;\n let libraryFiles: string[] | undefined;\n if (native.libraryFiles !== undefined) {\n if (!Array.isArray(native.libraryFiles)) throw new Error('native.libraryFiles deve ser uma lista de caminhos.');\n libraryFiles = native.libraryFiles.map((item, i) => localPath(item, `native.libraryFiles[${i}]`));\n }\n let providerFiles: string[] | undefined;\n if (native.providerFiles !== undefined) {\n if (!Array.isArray(native.providerFiles)) throw new Error('native.providerFiles deve ser uma lista de caminhos.');\n providerFiles = native.providerFiles.map((item, i) => localPath(item, `native.providerFiles[${i}]`));\n }\n return {\n formatVersion: 1, configPath: absoluteConfig, projectRoot, lockPath: resolve(projectRoot, 'acbr.lock.json'),\n source: { url, revision: revision as 'HEAD' | number, directory: localPath(source.directory, 'source.directory') },\n generator: { outputDir: localPath(generator.outputDir, 'generator.outputDir') },\n native: { project: localPath(native.project, 'native.project'), outputDir: localPath(native.outputDir, 'native.outputDir'), fpc,\n ...(native.lazarusRoot !== undefined ? { lazarusRoot: localPath(native.lazarusRoot, 'native.lazarusRoot') } : {}),\n ...(libraryFiles !== undefined ? { libraryFiles } : {}),\n ...(providerFiles !== undefined ? { providerFiles } : {}),\n },\n };\n}\nexport async function loadConfig(path = 'acbr.config.json'): Promise<AcbrConfig> {\n const configPath = resolve(path);\n let contents: string;\n try { contents = await readFile(configPath, 'utf8'); }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel ler ${configPath}. Execute acbr-node init.`, { cause: error }); }\n let value: unknown;\n try { value = JSON.parse(contents); } catch (error) { throw new Error(`JSON inv\u00E1lido em ${configPath}.`, { cause: error }); }\n return parseConfig(value, configPath);\n}\nexport async function initializeConfig(path = 'acbr.config.json', revision: 'HEAD' | number = 'HEAD', assetRoot?: string): Promise<AcbrConfig> {\n const configPath = resolve(path);\n const config = defaultConfig(); config.source.revision = revision;\n parseConfig(config, configPath);\n await mkdir(dirname(configPath), { recursive: true });\n try { await access(configPath); throw Object.assign(new Error(`EEXIST: configura\u00E7\u00E3o j\u00E1 existe: ${configPath}`), { code: 'EEXIST' }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n const resolved = parseConfig(config, configPath);\n if (assetRoot) await copyInitAssets(assetRoot, resolved.projectRoot);\n await writeFile(configPath, `${JSON.stringify(config, null, 2)}\\n`, { flag: 'wx' });\n await mkdir(resolve(resolved.projectRoot, '.acbr/generated'), { recursive: true });\n await mkdir(resolve(resolved.projectRoot, 'generated/acbr'), { recursive: true });\n return resolved;\n}\n\nasync function copyInitAssets(assetRoot: string, targetRoot: string): Promise<void> {\n const entries: { source: string; destination: string; content: Buffer }[] = [];\n async function scan(current: string, target: string): Promise<void> {\n for (const entry of await readdir(current, { withFileTypes: true })) {\n if (entry.name === 'generated' || entry.name.startsWith('.')) continue;\n const source = resolve(current, entry.name); const destination = resolve(target, entry.name);\n if (entry.isDirectory()) await scan(source, destination);\n else if (entry.isFile() && /\\.(pas|lpr|inc|lpi)$/i.test(entry.name)) entries.push({ source, destination, content: await readFile(source) });\n }\n }\n await scan(resolve(assetRoot, 'native'), resolve(targetRoot, 'native'));\n if (!entries.some(entry => entry.source.endsWith('acbr-worker.lpr'))) throw new Error('Assets do pacote n\u00E3o cont\u00EAm native/acbr-worker.lpr.');\n entries.push({ source: resolve(assetRoot, 'tools/extract-model.lpr'), destination: resolve(targetRoot, 'tools/extract-model.lpr'), content: await readFile(resolve(assetRoot, 'tools/extract-model.lpr')) });\n for (const entry of entries) {\n try {\n const existing = await readFile(entry.destination);\n if (!existing.equals(entry.content)) throw new Error(`init preservou arquivo existente divergente: ${entry.destination}.`);\n } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n }\n for (const entry of entries) {\n await mkdir(dirname(entry.destination), { recursive: true });\n try { await writeFile(entry.destination, entry.content, { flag: 'wx' }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error; }\n }\n}\n", "import { copyFile, mkdir, readdir, readFile, rename, rm, stat, chmod, realpath, access, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, relative, resolve, sep } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { fileURLToPath } from 'node:url';\nimport type { AcbrConfig } from './config.js';\nimport { fileHash, runCommand, snapshotSource, verifySource } from './source.js';\n\nexport interface BuiltRuntimeManifest {\n formatVersion: 1; sourceRevision: number; contractHash: string; platform: string; arch: string;\n executable: string; files: Record<string, string>;\n systemDependencies?: string[]; testOnly?: boolean; generatedFileHashes: Record<string, string>;\n}\ninterface GeneratedManifest { sourceRevision: number; sourceHash: string; contractHash: string; fileHashes: Record<string, string>; }\nexport function runtimeDirectory(config: AcbrConfig): string { return join(config.native.outputDir, `${process.platform}-${process.arch}`); }\nasync function exists(path: string): Promise<boolean> { try { await access(path); return true; } catch { return false; } }\nexport async function findLazarus(config: AcbrConfig): Promise<string> {\n const candidates = config.native.lazarusRoot ? [config.native.lazarusRoot] :\n [process.env.LAZARUS_ROOT, '/usr/lib/lazarus/default', '/usr/lib/lazarus/3.0', 'C:\\\\lazarus'].filter((path): path is string => Boolean(path));\n for (const candidate of candidates) if (await exists(join(candidate, 'components/lazutils'))) return realpath(candidate);\n throw new Error('Lazarus n\u00E3o encontrado. Defina native.lazarusRoot em acbr.config.json ou LAZARUS_ROOT.');\n}\nasync function generatedManifest(config: AcbrConfig): Promise<GeneratedManifest> {\n const path = join(config.generator.outputDir, '.acbr/generated/manifest.json');\n let value: GeneratedManifest;\n try { value = JSON.parse(await readFile(path, 'utf8')) as GeneratedManifest; }\n catch (error) { throw new Error('Contrato gerado ausente ou inv\u00E1lido. Execute acbr-node generate.', { cause: error }); }\n if (!Number.isSafeInteger(value.sourceRevision) || !/^[a-f0-9]{64}$/.test(value.contractHash) || !/^[a-f0-9]{64}$/.test(value.sourceHash)) throw new Error('Manifesto gerado inv\u00E1lido. Execute generate.');\n if (!value.fileHashes || typeof value.fileHashes !== 'object' || Array.isArray(value.fileHashes) || Object.keys(value.fileHashes).length !== 3 || ['generated/acbr/models.ts', 'generated/acbr/index.ts', 'native/generated/AcbrModels.pas'].some(name => !Object.hasOwn(value.fileHashes, name))) throw new Error('Manifesto gerado n\u00E3o cont\u00E9m os hashes dos tr\u00EAs arquivos. Execute generate.');\n for (const [name, expected] of Object.entries(value.fileHashes)) {\n const file = resolve(config.generator.outputDir, name);\n const location = relative(config.generator.outputDir, file);\n if (!name || name.startsWith('/') || name.includes('\\\\') || location === '..' || location.startsWith(`..${sep}`) || !/^[a-f0-9]{64}$/.test(expected)) throw new Error('Caminho ou SHA256 inv\u00E1lido no manifesto gerado.');\n if (await fileHash(file) !== expected) throw new Error(`Arquivo gerado diverge do manifesto: ${name}. Execute generate para restaurar o contrato.`);\n }\n return value;\n}\nasync function subdirectories(path: string): Promise<string[]> {\n const result = [path];\n for (const entry of (await readdir(path, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.isDirectory()) result.push(...await subdirectories(join(path, entry.name)));\n }\n return result;\n}\nconst REQUIRED_DYNAMIC = ['libssl.so.3', 'libcrypto.so.3', 'libxml2.so.2'];\nconst CORE_SYSTEM = /^(?:lib(?:c|m|pthread|dl|rt|resolv|anl|util)\\.so(?:\\.|$)|ld-linux|linux-vdso)/;\nasync function copyLinuxLibraries(stage: string): Promise<string[]> {\n const { stdout } = await runCommand('ldconfig', ['-p']);\n const libraries = new Map<string, string>();\n for (const name of REQUIRED_DYNAMIC) {\n const line = stdout.split('\\n').find(value => value.trim().startsWith(`${name} `) && value.includes('x86-64'));\n const path = line?.split('=>')[1]?.trim();\n if (!path) throw new Error(`Depend\u00EAncia din\u00E2mica ausente: ${name}. Instale OpenSSL 3 e libxml2 compat\u00EDveis.`);\n libraries.set(name, await realpath(path));\n }\n const modules = '/usr/lib/x86_64-linux-gnu/ossl-modules';\n if (!(await exists(join(modules, 'legacy.so')))) throw new Error('Provider legacy OpenSSL 3 ausente. Instale o pacote libssl3/libssl3t64 completo.');\n libraries.set('ossl-modules/legacy.so', await realpath(join(modules, 'legacy.so')));\n const systemDependencies = new Set<string>();\n const inspected = new Set<string>();\n while (inspected.size < libraries.size) {\n const [name, path] = [...libraries].find(([name]) => !inspected.has(name))!;\n inspected.add(name);\n const dependencies = await runCommand('ldd', [path]);\n for (const line of dependencies.stdout.split('\\n')) {\n if (line.includes('not found')) throw new Error(`Depend\u00EAncia transitiva ausente: ${line.trim()}.`);\n const match = /^\\s*(\\S+)\\s+=>\\s+(\\S+)/.exec(line);\n if (match) {\n const dependency = match[1]!; const file = match[2]!;\n if (CORE_SYSTEM.test(dependency)) systemDependencies.add(dependency);\n else if (!libraries.has(dependency)) libraries.set(dependency, await realpath(file));\n } else {\n const direct = /^\\s*(\\/\\S+)/.exec(line)?.[1];\n if (direct) systemDependencies.add(basename(direct));\n }\n }\n }\n const licenseDir = join(stage, 'licenses'); await mkdir(licenseDir, { recursive: true });\n const provenance: Record<string, unknown> = {};\n for (const [name, path] of libraries) {\n const destination = name.startsWith('ossl-modules/') ? join(stage, name) : join(stage, 'lib', name);\n await mkdir(dirname(destination), { recursive: true }); await copyFile(path, destination);\n const aliases = name === 'libssl.so.3' ? ['libssl.so'] : name === 'libcrypto.so.3' ? ['libcrypto.so'] : name === 'libxml2.so.2' ? ['libxml2.so'] : [];\n for (const alias of aliases) await copyFile(path, join(stage, 'lib', alias));\n let owner: string;\n try { owner = (await runCommand('dpkg-query', ['-S', path])).stdout.split('\\n')[0]!.split(': ')[0]!; }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel identificar pacote/licen\u00E7a de ${path}. Build requer Debian/Ubuntu com depend\u00EAncias registradas pelo dpkg.`, { cause: error }); }\n const pkg = owner.split(':')[0]!;\n const copyright = `/usr/share/doc/${pkg}/copyright`;\n if (!(await exists(copyright))) throw new Error(`Licen\u00E7a da depend\u00EAncia ${name} n\u00E3o encontrada: ${copyright}.`);\n await copyFile(copyright, join(licenseDir, `${name.replaceAll('/', '-')}.txt`));\n const source = (await runCommand('dpkg-query', ['-W', '-f=${source:Package}|${source:Version}|${Version}', owner])).stdout.trim().split('|');\n provenance[name] = { binaryPackage: owner, binaryVersion: source[2], sourcePackage: source[0], sourceVersion: source[1],\n sourceUrl: `https://launchpad.net/ubuntu/+source/${encodeURIComponent(source[0]!)}/${encodeURIComponent(source[1]!)}`,\n copyright: `licenses/${name.replaceAll('/', '-')}.txt` };\n }\n await mkdir(join(stage, 'sources'), { recursive: true });\n await writeFile(join(stage, 'sources/native-dependencies.json'), `${JSON.stringify(provenance, null, 2)}\\n`);\n await writeFile(join(stage, 'openssl.cnf'), 'openssl_conf = openssl_init\\n[openssl_init]\\nproviders = provider_sect\\n[provider_sect]\\ndefault = default_sect\\nlegacy = legacy_sect\\n[default_sect]\\nactivate = 1\\n[legacy_sect]\\nactivate = 1\\n');\n return [...systemDependencies].sort();\n}\nasync function copyExplicitLibraries(config: AcbrConfig, stage: string): Promise<void> {\n if (!config.native.libraryFiles?.length) throw new Error('Windows exige native.libraryFiles com DLLs OpenSSL 3/libxml2 e arquivos .LICENSE adjacentes.');\n await mkdir(join(stage, 'lib'), { recursive: true }); await mkdir(join(stage, 'licenses'), { recursive: true });\n const sources: Record<string, unknown> = {};\n const dependencyDirectories = new Set([...(config.native.libraryFiles ?? []), ...(config.native.providerFiles ?? [])].map(dirname));\n for (const directory of dependencyDirectories) {\n for (const entry of await readdir(directory)) {\n if (entry.endsWith('.LICENSE')) await copyFile(join(directory, entry), join(stage, 'licenses', entry));\n else if (entry === 'SOURCE.json') {\n await mkdir(join(stage, 'sources'), { recursive: true });\n await copyFile(join(directory, entry), join(stage, 'sources', `${basename(directory)}-SOURCE.json`));\n }\n }\n }\n for (const [directory, files] of [['lib', config.native.libraryFiles], ['ossl-modules', config.native.providerFiles ?? []]] as const) {\n await mkdir(join(stage, directory), { recursive: true });\n for (const source of files) {\n await copyFile(source, join(stage, directory, basename(source)));\n await copyFile(`${source}.LICENSE`, join(stage, 'licenses', `${basename(source)}.txt`));\n if (await exists(`${source}.SOURCE.json`)) sources[`${directory}/${basename(source)}`] = JSON.parse(await readFile(`${source}.SOURCE.json`, 'utf8'));\n }\n }\n if (!config.native.providerFiles?.some(path => basename(path).toLowerCase() === 'legacy.dll')) throw new Error('Windows requer native.providerFiles com o provider legacy.dll de OpenSSL 3 e licen\u00E7a adjacente.');\n await mkdir(join(stage, 'sources'), { recursive: true });\n await writeFile(join(stage, 'sources/native-dependencies.json'), `${JSON.stringify(sources, null, 2)}\\n`);\n await writeFile(join(stage, 'openssl.cnf'), 'openssl_conf = openssl_init\\n[openssl_init]\\nproviders = provider_sect\\n[provider_sect]\\ndefault = default_sect\\nlegacy = legacy_sect\\n[default_sect]\\nactivate = 1\\n[legacy_sect]\\nactivate = 1\\n');\n}\nexport async function buildNative(config: AcbrConfig, options: { testOnly?: boolean } = {}): Promise<BuiltRuntimeManifest> {\n if (!['linux', 'win32'].includes(process.platform) || process.arch !== 'x64') throw new Error('Build inicial suporta Linux x64 e Windows x64.');\n const lock = await verifySource(config);\n const contract = await generatedManifest(config);\n if (contract.sourceRevision !== lock.source.revision || contract.sourceHash !== lock.source.treeHash) throw new Error('Contrato gerado n\u00E3o corresponde \u00E0s fontes travadas. Execute generate.');\n const lazarus = await findLazarus(config);\n const source = config.source.directory;\n const target = options.testOnly ? join(config.projectRoot, '.acbr/test-runtime', `${process.platform}-${process.arch}`) : runtimeDirectory(config);\n const stage = join(dirname(target), `.runtime-stage-${randomUUID()}`);\n const units = join(stage, '.units');\n await mkdir(units, { recursive: true });\n const executable = process.platform === 'win32' ? 'acbr-worker.exe' : 'acbr-worker';\n try {\n const cpu = (await runCommand(config.native.fpc, ['-iTP'])).stdout.trim();\n if (cpu !== 'x86_64') throw new Error(`FPC deve compilar x86_64, encontrado ${cpu}.`);\n const targetOs = process.platform === 'win32' ? 'win64' : 'linux';\n const fontPaths = await subdirectories(join(source, 'Fontes'));\n const lazPaths = [join(lazarus, 'components/lazutils/lib', `x86_64-${targetOs}`), join(lazarus, 'lcl/units', `x86_64-${targetOs}`), join(lazarus, 'lcl/units', `x86_64-${targetOs}`, 'nogui'), join(lazarus, 'packager/units', `x86_64-${targetOs}`)];\n const searchPaths = [dirname(config.native.project), join(config.generator.outputDir, 'native/generated'), ...fontPaths, ...lazPaths];\n const args = ['-vew', '-Mdelphi', '-Scghi', '-O2', '-g-', '-dNOGUI', '-dNOREPORT', ...(options.testOnly ? ['-dACBR_NODE_TEST'] : []), `-FU${units}`, `-FE${stage}`, `-o${executable}`,\n ...searchPaths.map(path => `-Fu${path}`), ...fontPaths.map(path => `-Fi${path}`), config.native.project];\n const responseFile = join(stage, '.compiler.rsp');\n if (args.some(arg => /[\\\"\\r\\n]/.test(arg))) throw new Error('Caminhos do build n\u00E3o podem conter aspas ou quebras de linha.');\n await writeFile(responseFile, args.slice(0, -1).join('\\n') + '\\n');\n const logPath = join(config.projectRoot, '.acbr/build.log');\n try {\n const compilation = await runCommand(config.native.fpc, [`@${responseFile}`, config.native.project], { cwd: config.projectRoot, maxOutputBytes: 32 * 1024 * 1024 });\n await writeFile(logPath, compilation.stdout + compilation.stderr);\n } catch (error) {\n const compilation = error as Error & { stdout?: string; stderr?: string };\n await writeFile(logPath, (compilation.stdout ?? '') + (compilation.stderr ?? compilation.message));\n throw new Error(`${compilation.message}\\nLog completo: ${logPath}`, { cause: compilation });\n }\n const systemDependencies = process.platform === 'linux' ? await copyLinuxLibraries(stage) : (await copyExplicitLibraries(config, stage), []);\n const schemas = join(source, 'Exemplos/ACBrDFe/Schemas/NFe');\n await copyTree(schemas, join(stage, 'schemas'));\n const services = join(source, 'Fontes/ACBrDFe/ACBrNFe/ACBrNFeServicos.ini');\n await copyFile(services, join(stage, 'ACBrNFeServicos.ini'));\n await mkdir(join(stage, 'licenses'), { recursive: true });\n await copyFile(join(source, 'Doctos/LICENSE.TXT'), join(stage, 'licenses/ACBr-LICENSE.TXT'));\n await mkdir(join(stage, 'sources/native'), { recursive: true });\n await copyNativeSources(dirname(config.native.project), join(stage, 'sources/native'));\n await copyFile(join(config.generator.outputDir, 'native/generated/AcbrModels.pas'), join(stage, 'sources/native/AcbrModels.pas'));\n for (const name of ['fp-compiler-3.2.2', 'fp-units-rtl-3.2.2', 'fpc']) {\n const license = `/usr/share/doc/${name}/copyright`;\n if (await exists(license)) { await copyFile(license, join(stage, 'licenses/FPC-copyright.txt')); break; }\n }\n await copyCompilerLicenses(config, stage, lazarus);\n const archive = join(stage, 'sources/acbr-source.tar.gz');\n const tarArgs = process.platform === 'linux' ? ['--sort=name', '--mtime=@0', '--owner=0', '--group=0', '--numeric-owner', '-I', 'gzip -n'] : [];\n await runCommand('tar', [...tarArgs, process.platform === 'linux' ? '-cf' : '-czf', archive, '-C', source, 'Fontes', 'Exemplos/ACBrDFe/Schemas/NFe', 'Doctos/LICENSE.TXT']);\n await writeFile(join(stage, 'sources/build.json'), `${JSON.stringify({ sourceRevision: lock.source.revision, sourceUrl: lock.source.url, sourceTreeHash: lock.source.treeHash,\n compiler: (await runCommand(config.native.fpc, ['-iV'])).stdout.trim(), lazarusRoot: lazarus, lazarusVersion: basename(lazarus),\n compilerSourceUrl: 'https://gitlab.com/freepascal.org/fpc/source/-/tree/release_3_2_2', testOnly: options.testOnly ?? false, platform: process.platform, arch: process.arch,\n flags: ['-Mdelphi', '-Scghi', '-O2', '-dNOGUI', '-dNOREPORT'], sourceParts: lock.source.parts }, null, 2)}\\n`);\n await rm(units, { recursive: true, force: true });\n await rm(responseFile, { force: true });\n if (process.platform !== 'win32') await chmod(join(stage, executable), 0o755);\n const currentGenerated = await generatedManifest(config);\n if (currentGenerated.contractHash !== contract.contractHash || currentGenerated.sourceHash !== contract.sourceHash ||\n Object.entries(contract.fileHashes).some(([name, hash]) => currentGenerated.fileHashes[name] !== hash)) throw new Error('Arquivos gerados mudaram durante a compila\u00E7\u00E3o. Execute build novamente.');\n const currentSource = await verifySource(config);\n if (currentSource.source.revision !== lock.source.revision || currentSource.source.treeHash !== lock.source.treeHash) throw new Error('Fontes ACBr foram atualizadas durante a compila\u00E7\u00E3o. Execute generate e build novamente.');\n const files = (await snapshotSource(stage)).files;\n const manifest: BuiltRuntimeManifest = { formatVersion: 1, sourceRevision: lock.source.revision, contractHash: contract.contractHash,\n platform: process.platform, arch: process.arch, executable, files, generatedFileHashes: contract.fileHashes, systemDependencies, ...(options.testOnly ? { testOnly: true } : {}) };\n await writeFile(join(stage, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n await replaceRuntime(stage, target);\n return manifest;\n } finally { await rm(stage, { recursive: true, force: true }); }\n}\nasync function copyNativeSources(source: string, target: string): Promise<void> {\n await mkdir(target, { recursive: true });\n for (const entry of await readdir(source, { withFileTypes: true })) {\n if (entry.isDirectory() && !entry.name.startsWith('.')) await copyNativeSources(join(source, entry.name), join(target, entry.name));\n else if (entry.isFile() && /\\.(pas|lpr|inc|lpi)$/i.test(entry.name)) await copyFile(join(source, entry.name), join(target, entry.name));\n }\n}\nasync function copyTree(source: string, target: string): Promise<void> {\n await mkdir(target, { recursive: true });\n for (const entry of await readdir(source, { withFileTypes: true })) {\n if (entry.isSymbolicLink()) throw new Error(`Arquivo de distribui\u00E7\u00E3o n\u00E3o pode ser link: ${entry.name}.`);\n if (entry.isDirectory()) await copyTree(join(source, entry.name), join(target, entry.name));\n else if (entry.isFile()) await copyFile(join(source, entry.name), join(target, entry.name));\n }\n}\nasync function replaceRuntime(stage: string, target: string): Promise<void> {\n const backup = `${target}.${randomUUID()}.backup`;\n const hadTarget = await exists(target);\n if (hadTarget) await rename(target, backup);\n try { await rename(stage, target); }\n catch (error) { if (hadTarget) await rename(backup, target); throw error; }\n if (hadTarget) await rm(backup, { recursive: true, force: true });\n}\nexport async function checkBuild(config: AcbrConfig): Promise<BuiltRuntimeManifest> {\n const lock = await verifySource(config);\n const generated = await generatedManifest(config);\n const directory = runtimeDirectory(config);\n const manifest = JSON.parse(await readFile(join(directory, 'manifest.json'), 'utf8')) as BuiltRuntimeManifest;\n if (manifest.formatVersion !== 1 || manifest.platform !== process.platform || manifest.arch !== process.arch ||\n manifest.sourceRevision !== lock.source.revision || generated.sourceHash !== lock.source.treeHash || manifest.contractHash !== generated.contractHash ||\n !manifest.generatedFileHashes || Object.entries(generated.fileHashes).some(([name, hash]) => manifest.generatedFileHashes[name] !== hash) ||\n typeof manifest.executable !== 'string' || !manifest.files || !Object.hasOwn(manifest.files, manifest.executable)) throw new Error('Runtime diverge das fontes ou contrato. Execute build.');\n for (const [path, expected] of Object.entries(manifest.files)) {\n if (path.startsWith('/') || path.includes('\\\\') || path.split('/').includes('..') || !/^[a-f0-9]{64}$/.test(expected)) throw new Error(`Caminho/hash inv\u00E1lido no runtime: ${path}.`);\n if (await fileHash(join(directory, path)) !== expected) throw new Error(`Hash inv\u00E1lido no runtime: ${path}.`);\n }\n return manifest;\n}\nexport interface DoctorItem { name: string; ok: boolean; detail: string; }\nexport async function doctor(config?: AcbrConfig): Promise<DoctorItem[]> {\n const items: DoctorItem[] = [{ name: 'Node.js', ok: (Number(process.versions.node.split('.')[0]) > 22 || (Number(process.versions.node.split('.')[0]) === 22 && Number(process.versions.node.split('.')[1]) >= 12)), detail: process.versions.node }];\n for (const [name, command, args] of [['SVN', 'svn', ['--version', '--quiet']], ['Free Pascal', config?.native.fpc ?? 'fpc', ['-iV']]] as const) {\n try { const result = await runCommand(command, [...args]); items.push({ name, ok: true, detail: result.stdout.trim() }); }\n catch (error) { items.push({ name, ok: false, detail: (error as Error).message }); }\n }\n if (config) {\n try { items.push({ name: 'Lazarus', ok: true, detail: await findLazarus(config) }); }\n catch (error) { items.push({ name: 'Lazarus', ok: false, detail: (error as Error).message }); }\n try { const lock = await verifySource(config); items.push({ name: 'Fontes ACBr', ok: true, detail: `revis\u00E3o ${lock.source.revision}, ${lock.source.treeHash}` }); }\n catch (error) { items.push({ name: 'Fontes ACBr', ok: false, detail: (error as Error).message }); }\n }\n if (process.platform === 'linux') {\n try { const result = await runCommand('ldconfig', ['-p']); const missing = REQUIRED_DYNAMIC.filter(name => !result.stdout.includes(name)); items.push({ name: 'OpenSSL/libxml2 din\u00E2micos', ok: missing.length === 0, detail: missing.length ? `Ausentes: ${missing.join(', ')}` : REQUIRED_DYNAMIC.join(', ') }); }\n catch (error) { items.push({ name: 'OpenSSL/libxml2 din\u00E2micos', ok: false, detail: (error as Error).message }); }\n }\n return items;\n}\n\nasync function copyCompilerLicenses(config: AcbrConfig, stage: string, lazarus: string): Promise<void> {\n const packagedLazarus = fileURLToPath(new URL('../docs/licenses/lazarus/', import.meta.url));\n const packagedFpc = fileURLToPath(new URL('../docs/licenses/fpc/', import.meta.url));\n const notices: Record<string, { source: string; sha256: string }> = {};\n async function copyNotice(name: string, candidates: string[]): Promise<void> {\n for (const source of candidates) if (await exists(source)) {\n await copyFile(source, join(stage, 'licenses', name));\n notices[name] = { source, sha256: await fileHash(source) };\n return;\n }\n throw new Error(`Notice obrigat\u00F3rio ausente: ${name}.`);\n }\n for (const name of ['COPYING.txt', 'COPYING.LGPL.txt', 'COPYING.modifiedLGPL.txt']) {\n await copyNotice(`Lazarus-${name}`, [join(lazarus, name), join(lazarus, 'docs', name), join(packagedLazarus, name)]);\n }\n if (await exists(join(packagedLazarus, 'ORIGIN.json'))) await copyFile(join(packagedLazarus, 'ORIGIN.json'), join(stage, 'licenses/Lazarus-notice-origin.json'));\n const fpcRoot = resolve(dirname(config.native.fpc), '../..');\n const sourceRoots = [join(fpcRoot, 'source'), join(lazarus, 'fpc/3.2.2/source'), '/usr/share/fpcsrc/3.2.2'];\n for (const [name, sourceRelative] of [['COPYING.GPL.txt', 'compiler/COPYING.txt'], ['COPYING.LGPL.txt', 'rtl/COPYING.txt'], ['COPYING.FPC', 'rtl/COPYING.FPC']] as const) {\n await copyNotice(`FPC-${name}`, [...sourceRoots.map(directory => join(directory, sourceRelative)), join(packagedFpc, name)]);\n }\n if (await exists(join(packagedFpc, 'ORIGIN.json'))) await copyFile(join(packagedFpc, 'ORIGIN.json'), join(stage, 'licenses/FPC-notice-origin.json'));\n const candidates = [join(fpcRoot, 'doc'), fpcRoot, join(lazarus, 'fpc'), '/usr/share/doc/fp-compiler-3.2.2', '/usr/share/doc/fp-units-rtl-3.2.2'];\n for (const directory of candidates) {\n if (!(await exists(directory))) continue;\n for (const name of await readdir(directory)) {\n if (/^(?:copying|license|copyright)/i.test(name) && (await stat(join(directory, name))).isFile()) await copyFile(join(directory, name), join(stage, 'licenses', `FPC-${basename(directory)}-${name}`));\n }\n }\n await writeFile(join(stage, 'licenses/toolchain-notices.json'), `${JSON.stringify(notices, null, 2)}\\n`);\n}\n", "import { spawn } from 'node:child_process';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { createReadStream } from 'node:fs';\nimport { access, mkdir, readdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\nimport { SOURCE_PARTS, type AcbrConfig } from './config.js';\n\nexport interface SourceSnapshot { treeHash: string; files: Record<string, string>; }\nexport interface SourceLock {\n formatVersion: 1;\n source: { url: string; revision: number; parts: string[]; treeHash: string; files: Record<string, string> };\n}\nexport interface CommandResult { stdout: string; stderr: string; }\nexport async function runCommand(command: string, args: string[], options: { cwd?: string; env?: NodeJS.ProcessEnv; maxOutputBytes?: number } = {}): Promise<CommandResult> {\n return new Promise((done, fail) => {\n const child = spawn(command, args, { cwd: options.cwd, env: options.env ?? process.env, stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true, shell: false });\n let stdout = ''; let stderr = ''; let overflow = false;\n const maximum = options.maxOutputBytes ?? 16 * 1024 * 1024;\n const append = (kind: 'stdout' | 'stderr', data: Buffer) => {\n if (overflow) return;\n if (kind === 'stdout') stdout += data.toString('utf8'); else stderr += data.toString('utf8');\n if (Buffer.byteLength(stdout) + Buffer.byteLength(stderr) > maximum) { overflow = true; child.kill(); }\n };\n child.stdout.on('data', data => append('stdout', data)); child.stderr.on('data', data => append('stderr', data));\n child.on('error', error => fail(new Error(`N\u00E3o foi poss\u00EDvel executar ${command}: ${error.message}`, { cause: error })));\n child.on('close', code => {\n if (overflow) fail(new Error(`Sa\u00EDda de ${command} excedeu o limite de ${maximum} bytes.`));\n else if (code !== 0) {\n const diagnostic = (stderr || stdout).split('\\n').slice(-80).join('\\n').slice(-16000);\n fail(Object.assign(new Error(`${command} terminou com c\u00F3digo ${code}:\\n${diagnostic}`), { stdout, stderr }));\n }\n else done({ stdout, stderr });\n });\n });\n}\nexport async function fileHash(path: string): Promise<string> {\n const hash = createHash('sha256');\n for await (const chunk of createReadStream(path)) hash.update(chunk);\n return hash.digest('hex');\n}\nexport async function snapshotSource(directory: string): Promise<SourceSnapshot> {\n const files: Record<string, string> = Object.create(null);\n async function scan(current: string): Promise<void> {\n const entries = (await readdir(current, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name, 'en'));\n for (const entry of entries) {\n if (entry.name === '.svn') continue;\n const path = join(current, entry.name);\n if (entry.isSymbolicLink()) throw new Error(`Fonte ACBr cont\u00E9m link simb\u00F3lico: ${path}.`);\n if (entry.isDirectory()) await scan(path);\n else if (entry.isFile()) files[relative(directory, path).split(sep).join('/')] = await fileHash(path);\n else throw new Error(`Fonte ACBr cont\u00E9m arquivo especial: ${path}.`);\n }\n }\n await scan(resolve(directory));\n const sortedFiles = Object.fromEntries(Object.entries(files).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));\n const treeHash = createHash('sha256').update(JSON.stringify(sortedFiles)).digest('hex');\n return { treeHash, files: sortedFiles };\n}\nfunction validateLock(value: unknown): SourceLock {\n if (!value || typeof value !== 'object') throw new Error('Lock ACBr inv\u00E1lido.');\n const lock = value as SourceLock;\n if (lock.formatVersion !== 1 || !lock.source || !Number.isSafeInteger(lock.source.revision) || lock.source.revision < 1 ||\n !Array.isArray(lock.source.parts) || !lock.source.files || typeof lock.source.files !== 'object' || Array.isArray(lock.source.files) ||\n !/^[a-f0-9]{64}$/.test(lock.source.treeHash)) throw new Error('Formato inv\u00E1lido em acbr.lock.json.');\n for (const [path, hash] of Object.entries(lock.source.files)) {\n if (path.startsWith('/') || path.includes('\\\\') || path.split('/').includes('..') || !/^[a-f0-9]{64}$/.test(hash)) throw new Error('Caminho ou hash inv\u00E1lido no lock ACBr.');\n }\n if (lock.source.parts.join('\\n') !== SOURCE_PARTS.join('\\n')) throw new Error('Partes ACBr divergentes no lock.');\n return lock;\n}\nexport async function readSourceLock(config: AcbrConfig): Promise<SourceLock> {\n let lock: SourceLock;\n try { lock = validateLock(JSON.parse(await readFile(config.lockPath, 'utf8'))); }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel ler ${config.lockPath}. Execute acbr-node source update.`, { cause: error }); }\n if (lock.source.url !== config.source.url) throw new Error('URL ACBr do lock diverge da configura\u00E7\u00E3o.');\n if (config.source.revision !== 'HEAD' && lock.source.revision !== config.source.revision) throw new Error('Revis\u00E3o ACBr do lock diverge da configura\u00E7\u00E3o. Execute source update explicitamente.');\n return lock;\n}\nexport async function verifySource(config: AcbrConfig): Promise<SourceLock> {\n try {\n await access(`${config.lockPath}.operation`);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return verifySourceContents(config);\n throw error;\n }\n throw new Error('Atualiza\u00E7\u00E3o de fontes ACBr em andamento. Aguarde o CLI concluir.');\n}\nasync function verifySourceContents(config: AcbrConfig): Promise<SourceLock> {\n const lock = await readSourceLock(config);\n const snapshot = await snapshotSource(config.source.directory);\n if (snapshot.treeHash !== lock.source.treeHash) {\n const names = new Set([...Object.keys(snapshot.files), ...Object.keys(lock.source.files)]);\n const changed = [...names].filter(path => snapshot.files[path] !== lock.source.files[path]);\n throw new Error(`Fontes ACBr divergem do lock (${changed.length} arquivo(s)): ${changed.slice(0, 10).join(', ')}. Preserve as altera\u00E7\u00F5es antes de atualizar.`);\n }\n return lock;\n}\nasync function writeLock(config: AcbrConfig, snapshot: SourceSnapshot, revision: number): Promise<SourceLock> {\n const lock: SourceLock = { formatVersion: 1, source: { url: config.source.url, revision, parts: [...SOURCE_PARTS], ...snapshot } };\n await mkdir(dirname(config.lockPath), { recursive: true });\n const temporary = `${config.lockPath}.${randomUUID()}.tmp`;\n await writeFile(temporary, `${JSON.stringify(lock, null, 2)}\\n`, { flag: 'wx' });\n try { await rename(temporary, config.lockPath); } finally { await rm(temporary, { force: true }); }\n return lock;\n}\nexport async function lockExistingSource(config: AcbrConfig, revision: number): Promise<SourceLock> {\n return withSourceOperation(config, () => performLockExistingSource(config, revision));\n}\nasync function performLockExistingSource(config: AcbrConfig, revision: number): Promise<SourceLock> {\n if (!Number.isSafeInteger(revision) || revision < 1) throw new Error('Uma revis\u00E3o SVN positiva \u00E9 obrigat\u00F3ria para registrar fontes existentes.');\n try { await access(config.lockPath); } catch { return writeLock(config, await snapshotSource(config.source.directory), revision); }\n throw new Error('O lock j\u00E1 existe. Use source update para atualizar fontes e lock em conjunto.');\n}\nexport async function resolveSourceRevision(url: string, revision: 'HEAD' | number, runner: typeof runCommand = runCommand): Promise<number> {\n const { stdout } = await runner('svn', ['info', '--non-interactive', '--show-item', 'revision', '-r', String(revision), url]);\n const resolved = Number(stdout.trim());\n if (!Number.isSafeInteger(resolved) || resolved < 1) throw new Error('SVN n\u00E3o retornou uma revis\u00E3o v\u00E1lida.');\n return resolved;\n}\nasync function withSourceOperation<T>(config: AcbrConfig, operation: () => Promise<T>): Promise<T> {\n const marker = `${config.lockPath}.operation`;\n try { await writeFile(marker, `${JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() })}\\n`, { flag: 'wx' }); }\n catch (error) { throw new Error('Outra opera\u00E7\u00E3o de fontes ACBr est\u00E1 em andamento. Se o processo anterior terminou abruptamente, confira o PID do arquivo acbr.lock.json.operation antes de remov\u00EA-lo.', { cause: error }); }\n try { return await operation(); } finally { await rm(marker, { force: true }); }\n}\nexport async function updateSource(config: AcbrConfig, revision: 'HEAD' | number = 'HEAD', runner: typeof runCommand = runCommand): Promise<SourceLock> {\n return withSourceOperation(config, () => performUpdateSource(config, revision, runner));\n}\nasync function performUpdateSource(config: AcbrConfig, revision: 'HEAD' | number, runner: typeof runCommand): Promise<SourceLock> {\n const source = resolve(config.source.directory);\n if (source === config.projectRoot || source === dirname(source)) throw new Error('O diret\u00F3rio das fontes deve ser exclusivo e n\u00E3o pode ser a raiz do projeto ou do sistema.');\n let exists = false;\n try { const details = await stat(source); exists = true; if (!details.isDirectory()) throw new Error('O caminho das fontes n\u00E3o \u00E9 um diret\u00F3rio.'); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n if (exists && (await readdir(source)).length) await verifySourceContents({ ...config, source: { ...config.source, revision: 'HEAD' } });\n const resolvedRevision = await resolveSourceRevision(config.source.url, revision, runner);\n const stage = join(dirname(source), `.acbr-source-stage-${randomUUID()}`);\n const backup = join(dirname(source), `.acbr-source-backup-${randomUUID()}`);\n await mkdir(stage, { recursive: true });\n let previousLock: string | undefined;\n try { previousLock = await readFile(config.lockPath, 'utf8'); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n let backedUp = false; let replaced = false; let lockWritten = false;\n try {\n for (const part of SOURCE_PARTS) {\n const destination = join(stage, ...part.split('/'));\n await mkdir(dirname(destination), { recursive: true });\n await runner('svn', ['export', '--non-interactive', '-q', '-r', String(resolvedRevision), `${config.source.url}/${part}`, destination], { maxOutputBytes: 4 * 1024 * 1024 });\n }\n const snapshot = await snapshotSource(stage);\n if (exists) { await rename(source, backup); backedUp = true; }\n await rename(stage, source); replaced = true;\n const lock = await writeLock(config, snapshot, resolvedRevision); lockWritten = true;\n await persistRevision(config, resolvedRevision);\n config.source.revision = resolvedRevision;\n if (backedUp) await rm(backup, { recursive: true, force: true }).catch(() => undefined);\n return lock;\n } catch (error) {\n if (lockWritten) {\n if (previousLock === undefined) await rm(config.lockPath, { force: true });\n else await writeFile(config.lockPath, previousLock);\n }\n if (replaced) await rm(source, { recursive: true, force: true });\n if (backedUp) await rename(backup, source);\n throw error;\n } finally { await rm(stage, { recursive: true, force: true }); }\n}\n\nasync function persistRevision(config: AcbrConfig, revision: number): Promise<void> {\n const original = JSON.parse(await readFile(config.configPath, 'utf8')) as { source: { revision: number } };\n original.source.revision = revision;\n const temporary = `${config.configPath}.${randomUUID()}.tmp`;\n await writeFile(temporary, `${JSON.stringify(original, null, 2)}\\n`, { flag: 'wx' });\n try { await rename(temporary, config.configPath); } finally { await rm(temporary, { force: true }); }\n}\n", "import { spawn, type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from 'node:child_process';\nimport { readFile, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { TextDecoder } from 'node:util';\nimport { ErroAcbrNode, type ConfiguracaoEmissor, type Contrato, type ConfiguracaoMotor, type RequisicaoMotor, type ResultadoFiscal, type RuntimeManifest, type OpcoesOperacao, type Consulta, type Cancelamento, type CartaCorrecao, type Inutilizacao } from './types.js';\nexport * from './types.js';\ntype Launch = (exe: string, args: string[], config: SpawnOptionsWithoutStdio) => ChildProcessWithoutNullStreams;\nexport interface OpcoesEmissor extends ConfiguracaoEmissor {\n contrato: Contrato; runtimeDirectory?: string; timeoutMs?: number; limiteFila?: number; limiteBytes?: number;\n validaDocumento?: (documento: unknown) => void;\n /** Inje\u00E7\u00E3o para testes offline. O padr\u00E3o sempre inicia o motor distribu\u00EDdo. */\n criaProcesso?: Launch;\n}\nconst STATES = new Set(['DENEGADO','XML_GERADO','VALIDADO','ASSINADO','AUTORIZADO','REJEITADO','PENDENTE','INDETERMINADO','CONSULTADO','CANCELADO','EVENTO_REGISTRADO','INUTILIZADO','ERRO']);\nconst UFS = new Set('AC AL AP AM BA CE DF ES GO MA MT MS MG PA PB PR PE PI RJ RN RS RO RR SC SP SE TO'.split(' '));\nconst MAX_BYTES = 8 * 1024 * 1024;\nconst plain = (v: unknown): v is Record<string,unknown> => v !== null && typeof v === 'object' && !Array.isArray(v);\nconst validContract = (v: unknown): v is Contrato => plain(v) && Number.isInteger(v.sourceRevision) && Number(v.sourceRevision)>0 && typeof v.contractHash==='string' && /^[a-f0-9]{64}$/.test(v.contractHash);\nconst fail = (code: string, message: string, req?: RequisicaoMotor, unknown=false) => new ErroAcbrNode(code,message,unknown,req?.comando==='transmitir'?req.xmlBase64:undefined);\nfunction confined(root: string, relative: string): string {\n const file=path.resolve(root,relative), part=path.relative(root,file);\n if(!relative || path.isAbsolute(relative) || part==='..' || part.startsWith('..'+path.sep)) throw fail('RUNTIME_INVALIDO','Caminho inv\u00E1lido no runtime.');\n return file;\n}\nasync function resolveRuntime(directory: string | undefined, contract: Contrato): Promise<{directory:string;executable:string}> {\n if(!validContract(contract)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\n let root=directory;\n if(!root) {\n if(!['linux','win32'].includes(process.platform) || process.arch!=='x64') throw fail('PLATAFORMA_NAO_SUPORTADA','Esta vers\u00E3o exige Linux ou Windows x64.');\n try { const require=createRequire(typeof __filename!=='undefined'?__filename:import.meta.url); root=path.join(path.dirname(require.resolve('cosmemilton-acbr-node-'+process.platform+'-x64/package.json')),'runtime'); }\n catch { throw fail('RUNTIME_AUSENTE','Instale o pacote de runtime da plataforma ou informe runtimeDirectory.'); }\n }\n root=path.resolve(root);\n let m: RuntimeManifest;\n try { m=JSON.parse(await readFile(path.join(root,'manifest.json'),'utf8')); } catch { throw fail('RUNTIME_AUSENTE','Manifesto do runtime n\u00E3o encontrado.'); }\n if(!validContract(m) || m.formatVersion!==1 || !plain(m.files) || typeof m.executable!=='string' || m.platform!==process.platform || m.arch!==process.arch) throw fail('RUNTIME_INVALIDO','Manifesto ou plataforma do runtime inv\u00E1lidos.');\n if(m.sourceRevision!==contract.sourceRevision || m.contractHash!==contract.contractHash) throw fail('CONTRATO_DIVERGENTE','Cliente e motor foram gerados de contratos diferentes; regenere e recompile.');\n for(const [name,hash] of Object.entries(m.files)) {\n if(typeof hash!=='string'||!/^[a-f0-9]{64}$/.test(hash)) throw fail('RUNTIME_INVALIDO','Hash inv\u00E1lido no runtime.');\n const file=confined(root,name); let data:Buffer;\n try { if(!(await stat(file)).isFile()) throw Error(); data=await readFile(file); } catch { throw fail('RUNTIME_INCOMPLETO','Arquivo do runtime ausente.'); }\n if(createHash('sha256').update(data).digest('hex')!==hash) throw fail('RUNTIME_ALTERADO','O runtime n\u00E3o corresponde ao manifesto distribu\u00EDdo.');\n }\n if(!m.files[m.executable]) throw fail('RUNTIME_INVALIDO','O execut\u00E1vel n\u00E3o consta no invent\u00E1rio.');\n return {directory:root,executable:confined(root,m.executable)};\n}\ninterface Pending { req:RequisicaoMotor; bytes:Buffer; signal?:AbortSignal; resolve:(v:ResultadoFiscal)=>void; reject:(e:unknown)=>void; abort?:()=>void }\nexport function criarEmissor(options: OpcoesEmissor) {\n if(!/^\\d{14}$/.test(options.cnpj)||!UFS.has(options.uf)||![55,65].includes(options.modelo)||![1,2].includes(options.ambiente)) throw fail('CONFIGURACAO_INVALIDA','Informe CNPJ, UF, modelo e ambiente v\u00E1lidos.');\n if(!validContract(options.contrato)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\n const cert=options.certificado;\n if(cert && (typeof cert.senha!=='string' || !!cert.pfx===!!cert.arquivo || cert.pfx && !(cert.pfx instanceof Uint8Array))) throw fail('CERTIFICADO_INVALIDO','Informe A1 em pfx ou arquivo e sua senha.');\n if(options.csc && (!/^\\d{1,6}$/.test(options.csc.id) || typeof options.csc.valor!=='string' || !options.csc.valor || options.csc.valor.length>256)) throw fail('CSC_INVALIDO','CSC inv\u00E1lido.');\n const cfg:Omit<ConfiguracaoEmissor, 'certificado'>={cnpj:options.cnpj,uf:options.uf,modelo:options.modelo,ambiente:options.ambiente,csc:options.csc?{...options.csc}:undefined};\n const certificate=cert?{...cert,pfx:cert.pfx?Buffer.from(cert.pfx):undefined}:undefined;\n const contract={...options.contrato};\n const timeout=options.timeoutMs??120_000, capacity=options.limiteFila??32, bytesLimit=options.limiteBytes??MAX_BYTES;\n if(!Number.isInteger(timeout)||timeout<1||timeout>120000||!Number.isInteger(capacity)||capacity<0||capacity>1000||!Number.isInteger(bytesLimit)||bytesLimit<256||bytesLimit>MAX_BYTES) throw fail('CONFIGURACAO_INVALIDA','Limites de execu\u00E7\u00E3o inv\u00E1lidos.');\n const launch:Launch=options.criaProcesso??((exe,args,config)=>spawn(exe,args,{...config,stdio:['pipe','pipe','pipe']}));\n let runtimePromise:ReturnType<typeof resolveRuntime>|undefined, closed=false, current:{stop:()=>void;done:Promise<void>}|undefined;\n const queue:Pending[]=[];\n async function execute(item:Pending) {\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n const runtime=await (runtimePromise??=resolveRuntime(options.runtimeDirectory,contract));\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n await new Promise<void>((done)=>{\n let stopError:unknown; let child:ChildProcessWithoutNullStreams|undefined, finished=false, started=false, sending=false, total=0, rest=Buffer.alloc(0), result:ResultadoFiscal|undefined;\n let finishCurrent!:()=>void; const doneCurrent=new Promise<void>(r=>{finishCurrent=r;});\n const uncertain=()=>['transmitir','cancelar','cartaCorrecao','inutilizar'].includes(item.req.comando)&&started || sending;\n const finish=(error?:unknown)=>{\n if(finished)return; finished=true;clearTimeout(timer);item.signal?.removeEventListener('abort',abort);\n item.bytes.fill(0);if(current?.done===doneCurrent)current=undefined;finishCurrent();error?item.reject(error):item.resolve(result!);done();\n };\n const stop=(code:string,message:string)=>{ if(finished||stopError)return; stopError=fail(code,message,item.req,uncertain()); if(child?.pid)child.kill('SIGKILL');else finish(stopError); };\n const abort=()=>stop('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada; confira a situa\u00E7\u00E3o fiscal quando o envio foi iniciado.');\n const timer=setTimeout(()=>stop('TIMEOUT_MOTOR','O motor excedeu o prazo; consulte a situa\u00E7\u00E3o antes de transmitir novamente.'),timeout);\n current={stop:()=>stop('EMISSOR_FECHADO','Emissor encerrado.'),done:doneCurrent};\n const env:NodeJS.ProcessEnv={};\n for(const key of ['PATH','Path','SystemRoot','WINDIR','TEMP','TMP','HOME','LANG','LC_ALL']) if(process.env[key]!==undefined)env[key]=process.env[key];\n if(process.platform==='linux')env.LD_LIBRARY_PATH=path.join(runtime.directory,'lib');\n if(process.platform==='win32'){const inheritedPath=env.Path??env.PATH??'';delete env.Path;env.PATH=path.join(runtime.directory,'lib')+';'+runtime.directory+';'+inheritedPath;}\n const modules=path.join(runtime.directory,'ossl-modules'); env.OPENSSL_MODULES=modules; env.OPENSSL_CONF=path.join(runtime.directory,'openssl.cnf');\n try { child=launch(runtime.executable,['--parent-pid',String(process.pid)],{cwd:runtime.directory,env,windowsHide:true,shell:false,stdio:['pipe','pipe','pipe']}); started=typeof child.pid==='number'; }\n catch { finish(fail('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.',item.req)); return; }\n item.signal?.addEventListener('abort',abort,{once:true});\n child.on('spawn',()=>{started=true;});\n child.on('error',()=>finish(fail('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.',item.req,uncertain())));\n child.stdin.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\n child.stderr.on('data',()=>{}); // stderr bruto nunca \u00E9 exposto: pode conter mensagens de depend\u00EAncias.\n child.stdout.on('data',(chunk:Buffer)=>{\n if(finished||stopError)return;total+=chunk.length;if(total>bytesLimit){stop('RESPOSTA_EXCESSIVA','Resposta do motor excede o limite.');return;}\n rest=Buffer.concat([rest,chunk]);let end:number;\n while((end=rest.indexOf(10))>=0) {\n const line=rest.subarray(0,end);rest=rest.subarray(end+1);if(!line.length)continue;\n try {\n const frame=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(line));\n if(!plain(frame)||frame.id!==item.req.id)throw Error();\n if(frame.tipo==='envioIniciado'){sending=true;continue;}\n if(result||frame.versao!==1||frame.sourceRevision!==contract.sourceRevision||frame.contractHash!==contract.contractHash||typeof frame.sucesso!=='boolean'||!STATES.has(String(frame.estado)))throw Error();\n if(frame.xmlBase64!==undefined&&(typeof frame.xmlBase64!=='string'||!frame.xmlBase64.length||Buffer.from(frame.xmlBase64,'base64').toString('base64')!==frame.xmlBase64))throw Error();\n if(frame.cStat!==undefined&&(!Number.isInteger(frame.cStat)||Number(frame.cStat)<1||Number(frame.cStat)>9999))throw Error();\n result=frame as unknown as ResultadoFiscal;\n }catch{stop('RESPOSTA_INVALIDA','O motor retornou uma resposta inv\u00E1lida.');return;}\n }\n });\n child.on('close',(code)=>{\n if(finished)return;\n if(stopError){finish(stopError);return;}\n if(code!==0||rest.length||!result){finish(fail('FALHA_MOTOR','O motor encerrou sem resposta fiscal v\u00E1lida.',item.req,uncertain()));return;}\n finish();\n });\n child.stdin.end(item.bytes);\n if(item.signal?.aborted)abort();\n });\n }\n let busy=false;\n async function next(){if(busy)return;const item=queue.shift();if(!item)return;busy=true;item.signal?.removeEventListener('abort',item.abort!);try{await execute(item);}catch(e){item.bytes.fill(0);item.reject(e);}finally{busy=false;void next();}}\n async function request(command:RequisicaoMotor['comando'],data:Partial<RequisicaoMotor>,operation:OpcoesOperacao={}):Promise<ResultadoFiscal> {\n if(closed)throw fail('EMISSOR_FECHADO','Emissor encerrado.');\n if(operation.signal?.aborted)throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\n if(['assinar','transmitir','consultar','cancelar','cartaCorrecao','inutilizar'].includes(command)&&!certificate)throw fail('CERTIFICADO_AUSENTE','A opera\u00E7\u00E3o exige um certificado A1.');\n if(command==='gerarXml')options.validaDocumento?.(data.documento);\n const config:ConfiguracaoMotor={...cfg};\n if(certificate){let pfx:Buffer;try{pfx=certificate.pfx??await readFile(certificate.arquivo!);}catch{throw fail('CERTIFICADO_AUSENTE','N\u00E3o foi poss\u00EDvel ler o A1 configurado.');}if(pfx.length>2*1024*1024)throw fail('CERTIFICADO_EXCESSIVO','Certificado excede o limite.');config.certificado={pfxBase64:pfx.toString('base64'),senha:certificate.senha};}\n let bytes:Buffer, req:RequisicaoMotor;\n try{bytes=Buffer.from(JSON.stringify({versao:1,id:randomUUID(),...contract,comando:command,config,...data})+'\\n','utf8');if(bytes.length>bytesLimit)throw Error();req=JSON.parse(bytes.toString('utf8'));}catch{throw fail('REQUISICAO_INVALIDA','Dados da opera\u00E7\u00E3o inv\u00E1lidos ou acima do limite.');}\n return new Promise((resolve,reject)=>{\n if(closed){bytes.fill(0);reject(fail('EMISSOR_FECHADO','Emissor encerrado.'));return;}\n if(busy&&queue.length>=capacity){bytes.fill(0);reject(fail('FILA_CHEIA','A fila fiscal est\u00E1 cheia.'));return;}\n const item:Pending={req,bytes,signal:operation.signal,resolve,reject};\n item.abort=()=>{const i=queue.indexOf(item);if(i>=0){queue.splice(i,1);bytes.fill(0);operation.signal?.removeEventListener('abort',item.abort!);reject(fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.'));}};\n operation.signal?.addEventListener('abort',item.abort,{once:true});queue.push(item);if(operation.signal?.aborted)item.abort();void next();\n });\n }\n const xmlData=(xml:string)=>{if(typeof xml!=='string'||!xml.trim()||Buffer.byteLength(xml,'utf8')>2*1024*1024)throw fail('XML_INVALIDO','XML vazio ou acima do limite.');return {xmlBase64:Buffer.from(xml,'utf8').toString('base64')};};\n const checkKey=(key:string)=>{if(!/^\\d{44}$/.test(key))throw fail('CHAVE_INVALIDA','Chave fiscal inv\u00E1lida.');};\n const reason=(value:string)=>{if(typeof value!=='string'||value.length<15||value.length>255)throw fail('JUSTIFICATIVA_INVALIDA','Justificativa deve ter de 15 a 255 caracteres.');};\n return {\n gerarXml:(documento:object,op?:OpcoesOperacao)=>request('gerarXml',{documento},op),\n validar:(xml:string,op?:OpcoesOperacao)=>request('validar',xmlData(xml),op),\n assinar:(xml:string,op?:OpcoesOperacao)=>request('assinar',xmlData(xml),op),\n transmitir:(xml:string,op?:OpcoesOperacao)=>request('transmitir',xmlData(xml),op),\n consultar:(consulta:Consulta,op?:OpcoesOperacao)=>{checkKey(consulta.chave);if(consulta.recibo&&!/^\\d{15}$/.test(consulta.recibo))throw fail('RECIBO_INVALIDO','Recibo inv\u00E1lido.');return request('consultar',consulta,op);},\n cancelar:(data:Cancelamento,op?:OpcoesOperacao)=>{checkKey(data.chave);reason(data.justificativa);if(!/^\\d{15}$/.test(data.protocolo))throw fail('PROTOCOLO_INVALIDO','Protocolo inv\u00E1lido.');return request('cancelar',data,op);},\n cartaCorrecao:(data:CartaCorrecao,op?:OpcoesOperacao)=>{if(cfg.modelo!==55)throw fail('OPERACAO_NAO_SUPORTADA','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.');checkKey(data.chave);if(typeof data.correcao!=='string'||data.correcao.length<15||data.correcao.length>1000||!Number.isInteger(data.sequenciaEvento??1)||(data.sequenciaEvento??1)<1||(data.sequenciaEvento??1)>20)throw fail('CORRECAO_INVALIDA','Dados da carta de corre\u00E7\u00E3o inv\u00E1lidos.');return request('cartaCorrecao',{...data,sequenciaEvento:data.sequenciaEvento??1},op);},\n inutilizar:(data:Inutilizacao,op?:OpcoesOperacao)=>{reason(data.justificativa);if(!Number.isInteger(data.ano)||data.ano<0||data.ano>99||!Number.isInteger(data.serie)||data.serie<0||data.serie>999||!Number.isInteger(data.numeroInicial)||data.numeroInicial<1||!Number.isInteger(data.numeroFinal)||data.numeroFinal<data.numeroInicial||data.numeroFinal>999999999)throw fail('INUTILIZACAO_INVALIDA','Faixa de inutiliza\u00E7\u00E3o inv\u00E1lida.');return request('inutilizar',{inutilizacao:{ano:data.ano,serie:data.serie,numeroInicial:data.numeroInicial,numeroFinal:data.numeroFinal},justificativa:data.justificativa},op);},\n async fechar(){if(closed)return;closed=true;for(const item of queue.splice(0)){item.signal?.removeEventListener('abort',item.abort!);item.bytes.fill(0);item.reject(fail('EMISSOR_FECHADO','Emissor encerrado.'));}const running=current;running?.stop();if(running)await running.done;certificate?.pfx?.fill(0);}\n };\n}\nexport type Emissor = ReturnType<typeof criarEmissor>;\n", "export const PROTOCOL_VERSION = 1 as const;\nexport type Modelo = 55 | 65;\nexport type Ambiente = 1 | 2;\nexport type Comando = 'gerarXml' | 'validar' | 'assinar' | 'transmitir' | 'consultar' | 'cancelar' | 'cartaCorrecao' | 'inutilizar';\nexport interface Contrato { sourceRevision: number; contractHash: string }\nexport interface CertificadoA1 { pfx?: Uint8Array; arquivo?: string; senha: string }\nexport interface ConfiguracaoEmissor { cnpj: string; uf: string; modelo: Modelo; ambiente: Ambiente; certificado?: CertificadoA1; csc?: { id: string; valor: string } }\nexport interface ConfiguracaoMotor extends Omit<ConfiguracaoEmissor, 'certificado'> { certificado?: { pfxBase64: string; senha: string } }\nexport interface RequisicaoMotor extends Contrato {\n versao: 1; id: string; comando: Comando; config: ConfiguracaoMotor;\n documento?: object; xmlBase64?: string; chave?: string; recibo?: string;\n protocolo?: string; justificativa?: string; correcao?: string; sequenciaEvento?: number;\n inutilizacao?: { ano: number; serie: number; numeroInicial: number; numeroFinal: number };\n}\nexport type Estado = 'DENEGADO' | 'XML_GERADO' | 'VALIDADO' | 'ASSINADO' | 'AUTORIZADO' | 'REJEITADO' | 'PENDENTE' | 'INDETERMINADO' | 'CONSULTADO' | 'CANCELADO' | 'EVENTO_REGISTRADO' | 'INUTILIZADO' | 'ERRO';\nexport interface ResultadoFiscal extends Contrato {\n versao: 1; id: string; sucesso: boolean; estado: Estado; codigo?: string;\n cStat?: number; xMotivo?: string; chave?: string; protocolo?: string; recibo?: string;\n xmlBase64?: string; envioIniciado?: boolean;\n}\nexport interface RuntimeManifest extends Contrato {\n formatVersion: 1; platform: string; arch: string; executable: string; files: Record<string, string>;\n}\nexport interface OpcoesOperacao { signal?: AbortSignal }\nexport interface Consulta { chave: string; recibo?: string }\nexport interface Cancelamento { chave: string; protocolo: string; justificativa: string }\nexport interface CartaCorrecao { chave: string; correcao: string; sequenciaEvento?: number }\nexport interface Inutilizacao { ano: number; serie: number; numeroInicial: number; numeroFinal: number; justificativa: string }\nexport class ErroAcbrNode extends Error {\n readonly name = 'ErroAcbrNode';\n constructor(readonly codigo: string, mensagem: string, readonly resultadoDesconhecido = false, readonly xmlBase64?: string) { super(mensagem); }\n}\n", "// Synthetic signed XML, public X509 certificate only. Never transmit this document.\n// Contains no PFX, private key or password. Generated offline by the test certificate fixture.\nexport const OFFLINE_DOCUMENT = {\n \"infNFe\": {\n \"Versao\": \"4.00\"\n },\n \"Ide\": {\n \"cUF\": 23,\n \"cNF\": 12345678,\n \"natOp\": \"VENDA TESTE OFFLINE\",\n \"modelo\": 55,\n \"serie\": 1,\n \"nNF\": 1,\n \"dEmi\": \"2026-10-08T12:00:00\",\n \"tpNF\": \"tnSaida\",\n \"idDest\": \"doInterna\",\n \"cMunFG\": 2304400,\n \"tpImp\": \"tiRetrato\",\n \"tpEmis\": \"teNormal\",\n \"tpAmb\": \"taHomologacao\",\n \"finNFe\": \"fnNormal\",\n \"indFinal\": \"cfConsumidorFinal\",\n \"indPres\": \"pcPresencial\",\n \"procEmi\": \"peAplicativoContribuinte\",\n \"verProc\": \"ACBR-NODE-OFFLINE\"\n },\n \"Emit\": {\n \"CNPJCPF\": \"11222333000181\",\n \"xNome\": \"Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE SEM VALOR FISCAL\",\n \"IE\": \"123456789\",\n \"CRT\": \"crtSimplesNacional\",\n \"EnderEmit\": {\n \"xLgr\": \"RUA TESTE\",\n \"nro\": \"1\",\n \"xBairro\": \"TESTE\",\n \"cMun\": 2304400,\n \"xMun\": \"FORTALEZA\",\n \"UF\": \"CE\",\n \"CEP\": 60000000,\n \"cPais\": 1058,\n \"xPais\": \"BRASIL\"\n }\n },\n \"Dest\": {\n \"CNPJCPF\": \"12345678909\",\n \"xNome\": \"NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL\",\n \"indIEDest\": \"inNaoContribuinte\",\n \"EnderDest\": {\n \"xLgr\": \"RUA TESTE\",\n \"nro\": \"2\",\n \"xBairro\": \"TESTE\",\n \"cMun\": 2304400,\n \"xMun\": \"FORTALEZA\",\n \"UF\": \"CE\",\n \"CEP\": 60000000,\n \"cPais\": 1058,\n \"xPais\": \"BRASIL\"\n }\n },\n \"Det\": [\n {\n \"Prod\": {\n \"nItem\": 1,\n \"cProd\": \"TESTE\",\n \"cEAN\": \"SEM GTIN\",\n \"xProd\": \"Caf\u00E9 S\u00E3o Jos\u00E9 PRODUTO SINT\u00C9TICO OFFLINE\",\n \"NCM\": \"22021000\",\n \"CFOP\": \"5102\",\n \"uCom\": \"UN\",\n \"qCom\": \"1\",\n \"vUnCom\": \"10\",\n \"vProd\": \"10\",\n \"cEANTrib\": \"SEM GTIN\",\n \"uTrib\": \"UN\",\n \"qTrib\": \"1\",\n \"vUnTrib\": \"10\",\n \"IndTot\": \"itSomaTotalNFe\"\n },\n \"Imposto\": {\n \"ICMS\": {\n \"orig\": \"oeNacional\",\n \"CSOSN\": \"csosn102\"\n },\n \"PIS\": {\n \"CST\": \"pis07\"\n },\n \"COFINS\": {\n \"CST\": \"cof07\"\n }\n }\n }\n ],\n \"Total\": {\n \"ICMSTot\": {\n \"vProd\": \"10\",\n \"vNF\": \"10\"\n }\n },\n \"Transp\": {\n \"modFrete\": \"mfSemFrete\"\n },\n \"pag\": [\n {\n \"tPag\": \"fpDinheiro\",\n \"indPag\": \"ipVista\",\n \"vPag\": \"10\"\n }\n ]\n} as const;\nexport const OFFLINE_SIGNED_XML = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><NFe xmlns=\\\"http://www.portalfiscal.inf.br/nfe\\\"><infNFe Id=\\\"NFe23261011222333000181550010000000011123456780\\\" versao=\\\"4.00\\\"><ide><cUF>23</cUF><cNF>12345678</cNF><natOp>VENDA TESTE OFFLINE</natOp><mod>55</mod><serie>1</serie><nNF>1</nNF><dhEmi>2026-10-08T12:00:00-03:00</dhEmi><tpNF>1</tpNF><idDest>1</idDest><cMunFG>2304400</cMunFG><tpImp>1</tpImp><tpEmis>1</tpEmis><cDV>0</cDV><tpAmb>2</tpAmb><finNFe>1</finNFe><indFinal>1</indFinal><indPres>1</indPres><procEmi>0</procEmi><verProc>ACBR-NODE-OFFLINE</verProc></ide><emit><CNPJ>11222333000181</CNPJ><xNome>Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE SEM VALOR FISCAL</xNome><enderEmit><xLgr>RUA TESTE</xLgr><nro>1</nro><xBairro>TESTE</xBairro><cMun>2304400</cMun><xMun>FORTALEZA</xMun><UF>CE</UF><CEP>60000000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais></enderEmit><IE>123456789</IE><CRT>1</CRT></emit><dest><CPF>12345678909</CPF><xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome><enderDest><xLgr>RUA TESTE</xLgr><nro>2</nro><xBairro>TESTE</xBairro><cMun>2304400</cMun><xMun>FORTALEZA</xMun><UF>CE</UF><CEP>60000000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais></enderDest><indIEDest>9</indIEDest></dest><det nItem=\\\"1\\\"><prod><cProd>TESTE</cProd><cEAN>SEM GTIN</cEAN><xProd>Caf\u00E9 S\u00E3o Jos\u00E9 PRODUTO SINT\u00C9TICO OFFLINE</xProd><NCM>22021000</NCM><CFOP>5102</CFOP><uCom>UN</uCom><qCom>1.0000</qCom><vUnCom>10.0000000000</vUnCom><vProd>10.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UN</uTrib><qTrib>1.0000</qTrib><vUnTrib>10.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>102</CSOSN></ICMSSN102></ICMS><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><total><ICMSTot><vBC>0.00</vBC><vICMS>0.00</vICMS><vICMSDeson>0.00</vICMSDeson><vFCP>0.00</vFCP><vBCST>0.00</vBCST><vST>0.00</vST><vFCPST>0.00</vFCPST><vFCPSTRet>0.00</vFCPSTRet><vProd>10.00</vProd><vFrete>0.00</vFrete><vSeg>0.00</vSeg><vDesc>0.00</vDesc><vII>0.00</vII><vIPI>0.00</vIPI><vIPIDevol>0.00</vIPIDevol><vPIS>0.00</vPIS><vCOFINS>0.00</vCOFINS><vOutro>0.00</vOutro><vNF>10.00</vNF></ICMSTot></total><transp><modFrete>9</modFrete></transp><pag><detPag><indPag>0</indPag><tPag>01</tPag><vPag>10.00</vPag></detPag></pag></infNFe><Signature xmlns=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><SignedInfo><CanonicalizationMethod Algorithm=\\\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\\\"></CanonicalizationMethod><SignatureMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\\\"></SignatureMethod><Reference URI=\\\"#NFe23261011222333000181550010000000011123456780\\\"><Transforms><Transform Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\\\"></Transform><Transform Algorithm=\\\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\\\"></Transform></Transforms><DigestMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#sha1\\\"></DigestMethod><DigestValue>Ya5kXhcEibOVfcyOI0BzqcYzyMM=</DigestValue></Reference></SignedInfo><SignatureValue>mirdDvdV+VId/zsstW/6lVFsSVxdyWkdkY1NPd2ynLHpjtolFoIhaBGlfxxs7IhU/AzcNQmR6ivr9YkH1HXaMAypvvx9M6GR/T4du/Zqab4gx3YInVybjJTeQ7BKEDnLhde2TUKoXrxmfrrmBUw6K4nTNufVjUjFJBfGcwhJ57T72x7ssdoYuPvZCphb0IR8WxHRKhvKAQhjW61qfh33csTabelgVZSLuTC2I2k9+a+ARd88CLTlfhYNCAPItOdUnAjgrhAhtiDi2FjXKjywgRqx0zay8DxF9Y2iyTJd3IAoWOERGdI9whgsuzWiZUr2I0I5QGGBELVabfjXm/Bneg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBbMSswKQYDVQQDEyJBQ0JSIE5PREUgU1lOVEhFVElDOjExMjIyMzMzMDAwMTgxMQswCQYDVQQGEwJCUjEfMB0GA1UEChMWU1lOVEhFVElDIE9GRkxJTkUgVEVTVDAeFw0yNjEwMDYyMjIzMzNaFw0yNzEwMDgyMjIzMzNaMFsxKzApBgNVBAMTIkFDQlIgTk9ERSBTWU5USEVUSUM6MTEyMjIzMzMwMDAxODExCzAJBgNVBAYTAkJSMR8wHQYDVQQKExZTWU5USEVUSUMgT0ZGTElORSBURVNUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsOwRzuW4de7jrv1IkcNgT311292NR5NNIHt6Fncarm2iJX6mYsIjPWriFQmrU88p7bfRI3EsXJrlK0oGCuMafbNf1nBZ6Tu8aV1ixbAIgu9ZIbWoDqDNbYJBucQRuKsI1ytFbY7eI0juhcdAlBHw3TNdgSbuv/8kEGgTTJ803wBcC+emGZHdpb4Bwx6Db0Fio0lWLlBaep9+MFNZZiEYmDA3dwgZF14MAr5MpzcNDUVYh/g95Ks8x+mhErOPdtmL1A6cDg+xtjiApeMJZqjMrdsXP4yQ34h5VRy03ZUJkXVAquOfWhXpQL/qjoSzXfHvij2wB0pVn89FzVZh7GzStQIDAQABo1UwUzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDAjAkBgNVHREEHTAboBkGBWBMAQMDoBAMDjExMjIyMzMzMDAwMTgxMA0GCSqGSIb3DQEBCwUAA4IBAQBDhbpxphiuAUlQWXkcVt22Nc+g2UM6GCZyC3v9o21llLSCyK/nhkrRCQzM75/86kbnYZ1zdulC9N4XQFgATwm16Sf/nDZw8s5EsXqZ8mwbauDs/aQvWrbQnyawB7c+aXvlUDkcfNq+3hLQ5ep8/bmGh4eueiNoPD0fjf/jUVmrS6KyHb6/FyIZGP6fEYAO6XrqJPMSPxpJHnbPXZXKW2vcCh3qaG1vTSeN8PLfN2Q/mp1XUH8VqHgl3jzssx/zwb1NKuKEz9WL+6ilLc1ZfIqUakJyQNMqMz2KIjqGKGp7TtpNHZ7mz+kBX4Xw7D5fFVrXYb7DN6KylyKLmXoEzs1B</X509Certificate></X509Data></KeyInfo></Signature></NFe>\";\n", "import type { AcbrConfig } from './config.js';\nimport { runtimeDirectory, type BuiltRuntimeManifest } from './native-build.js';\nimport { criarEmissor, type ResultadoFiscal } from './runtime.js';\nimport { OFFLINE_DOCUMENT, OFFLINE_SIGNED_XML } from './offline-fixture.js';\nexport interface OfflineCheck { name: string; estado: string; codigo?: string; envioIniciado: false; }\n/** Local synthetic probes only: no certificate credentials, connection or fiscal transmission. */\nexport async function checkOffline(config: AcbrConfig, manifest: BuiltRuntimeManifest): Promise<OfflineCheck[]> {\n const emitter = criarEmissor({ cnpj: '11222333000181', uf: 'CE', modelo: 55, ambiente: 2,\n contrato: { sourceRevision: manifest.sourceRevision, contractHash: manifest.contractHash },\n runtimeDirectory: runtimeDirectory(config), timeoutMs: 30_000 });\n const report: OfflineCheck[] = [];\n function expect(name: string, result: ResultadoFiscal, estado: string, codigo?: string): void {\n if (result.estado !== estado || result.sucesso !== (estado !== 'ERRO') || result.envioIniciado !== false ||\n result.sourceRevision !== manifest.sourceRevision || (codigo !== undefined && result.codigo !== codigo)) {\n throw new Error(`Smoke offline ${name} falhou: ${result.estado}/${result.codigo ?? 'sem c\u00F3digo'}.`);\n }\n report.push({ name, estado: result.estado, codigo: result.codigo, envioIniciado: false });\n }\n try {\n const generated = await emitter.gerarXml(OFFLINE_DOCUMENT);\n expect('gerarXml sint\u00E9tico', generated, 'XML_GERADO');\n const xml = generated.xmlBase64 ? Buffer.from(generated.xmlBase64, 'base64').toString('utf8') : '';\n const generatedKey = /Id=\"NFe(\\d{44})\"/.exec(xml)?.[1];\n if (!generatedKey || !xml.includes('Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE') || !xml.includes('<CNPJ>11222333000181</CNPJ>')) throw new Error('Smoke offline gerarXml perdeu chave, identidade ou UTF-8.');\n const validated = await emitter.validar(OFFLINE_SIGNED_XML);\n expect('validar XML assinado p\u00FAblico', validated, 'VALIDADO');\n const signedKey = /Id=\"NFe(\\d{44})\"/.exec(OFFLINE_SIGNED_XML)?.[1];\n if (validated.chave !== signedKey || generatedKey !== signedKey) throw new Error('Smoke offline validar retornou outra chave fiscal.');\n expect('recusar XML malformado', await emitter.validar('<NFe><infNFe></NFe>'), 'ERRO', 'OPERACAO_FISCAL_FALHOU');\n expect('recusar DTD/entidade externa', await emitter.validar('<!DOCTYPE NFe [<!ENTITY probe SYSTEM \"file:///acbr-node-offline-check-does-not-exist\">]><NFe>&probe;</NFe>'), 'ERRO', 'XML_INVALIDO');\n return report;\n } finally { await emitter.fechar(); }\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/generator.ts", "../src/cli.ts", "../src/config.ts", "../src/native-build.ts", "../src/source.ts", "../src/runtime.ts", "../src/diagnostics.ts", "../src/types.ts", "../src/offline-fixture.ts", "../src/offline-check.ts"],
4
+ "sourcesContent": ["import { createHash } from 'node:crypto';\r\nimport { execFile } from 'node:child_process';\r\nimport { promisify } from 'node:util';\r\nimport { mkdir, readFile, writeFile, readdir } from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { fileURLToPath } from 'node:url';\r\nconst execute = promisify(execFile);\r\ninterface RawProperty { name:string; type:string; indexed:boolean; readable:boolean; writable:boolean; default:string; line:number }\r\ninterface RawType { name:string; kind:string; ancestor?:string; properties?:RawProperty[]; methods?:{name:string;result:string;arguments:number}[]; target?:string; values?:{name:string;assigned:string}[]; min?:string; max?:string; declarationKind?:string; line:number }\r\ninterface RawUnit { name:string; file:string; uses:string[]; types:RawType[] }\r\nexport interface RawModel { schemaVersion:number; root:string; units:RawUnit[] }\r\nexport interface ModelProperty { name:string; type:string; kind:'string'|'integer'|'decimal'|'datetime'|'boolean'|'enum'|'object'|'list'; ref?:string; readonly:boolean; declaredDefault?:string; min?:number; max?:number; scale?:number }\r\nexport interface ModelType { name:string; unit:string; kind:'object'|'list'|'enum'; properties?:ModelProperty[]; item?:string; values?:string[]; factory?:string }\r\nexport interface ModelIR { schemaVersion:1; root:string; types:ModelType[] }\r\nexport interface GenerateOptions { acbrRoot:string; outputDir:string; revision:string|number; sourceHash?:string; modelOutputDir?:string; nativeOutputDir?:string; extractorPath?:string; fpcPath?:string }\r\nconst bases = new Set(['tobject','tpersistent','tacbrobjectlist']);\r\nconst primitives:Record<string,{kind:ModelProperty['kind'];min?:number;max?:number;scale?:number}>={\r\n string:{kind:'string'},ansistring:{kind:'string'},unicodestring:{kind:'string'},widestring:{kind:'string'},\r\n boolean:{kind:'boolean'},byte:{kind:'integer',min:0,max:255},word:{kind:'integer',min:0,max:65535},\r\n integer:{kind:'integer',min:-2147483648,max:2147483647},longint:{kind:'integer',min:-2147483648,max:2147483647},\r\n smallint:{kind:'integer',min:-32768,max:32767},shortint:{kind:'integer',min:-128,max:127},\r\n cardinal:{kind:'integer',min:0,max:4294967295},longword:{kind:'integer',min:0,max:4294967295},\r\n int64:{kind:'integer',min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER},qword:{kind:'integer',min:0,max:Number.MAX_SAFE_INTEGER},\r\n double:{kind:'decimal'},extended:{kind:'decimal'},single:{kind:'decimal'},currency:{kind:'decimal',scale:4},\r\n tdatetime:{kind:'datetime'},tdate:{kind:'datetime'},ttime:{kind:'datetime'}\r\n};\r\nconst stable = (value:unknown):string => JSON.stringify(value);\r\nconst hash = (value:string|Buffer):string => createHash('sha256').update(value).digest('hex');\r\nexport function buildModelIR(raw:RawModel):ModelIR {\r\n const declarations=new Map<string,{unit:RawUnit;type:RawType}>();\r\n for(const unit of raw.units)for(const type of unit.types)declarations.set((unit.name+'.'+type.name).toLowerCase(),{unit,type});\r\n function find(name:string,unit:RawUnit):{unit:RawUnit;type:RawType}{\r\n for(const key of [unit.name+'.'+name,...[...unit.uses].reverse().map(u=>u+'.'+name),name]){const item=declarations.get(key.toLowerCase());if(item)return item;}\r\n throw new Error('Tipo Pascal n\u00E3o resolvido: '+unit.name+'.'+name);\r\n }\r\n function resolve(name:string,unit:RawUnit,trail=new Set<string>()):{unit:RawUnit;type:RawType}|{primitive:string}{\r\n if(primitives[name.toLowerCase()])return {primitive:name.toLowerCase()};\r\n const found=find(name,unit),key=(found.unit.name+'.'+found.type.name).toLowerCase();\r\n if(trail.has(key))throw new Error('Alias Pascal c\u00EDclico: '+key);\r\n if(found.type.kind==='alias'){trail.add(key);return resolve(found.type.target!,found.unit,trail);}\r\n return found;\r\n }\r\n const rootUnit=raw.units.find(u=>u.types.some(t=>t.name===raw.root));\r\n if(!rootUnit)throw new Error('Modelo raiz ausente: '+raw.root);\r\n const generated=new Map<string,ModelType>();\r\n function visit(name:string,unit:RawUnit):{kind:ModelProperty['kind'];ref?:string;min?:number;max?:number;scale?:number}{\r\n const found=resolve(name,unit);if('primitive'in found)return primitives[found.primitive];\r\n const {type,unit:declUnit}=found,key=type.name;\r\n if(generated.has(key)){const node=generated.get(key)!;if(node.unit!==declUnit.name)throw new Error('Tipos hom\u00F4nimos incompat\u00EDveis: '+key);return {kind:node.kind==='object'?'object':node.kind==='list'?'list':'enum',ref:key};}\r\n if(type.kind==='enum'){\r\n const values=type.values!.map(v=>v.name);if(!values.length)throw new Error('Enum sem valores: '+key);\r\n generated.set(key,{name:key,unit:declUnit.name,kind:'enum',values});return {kind:'enum',ref:key};\r\n }\r\n if(type.kind!=='class')throw new Error('Declara\u00E7\u00E3o Pascal n\u00E3o suportada: '+declUnit.name+'.'+key+' ('+(type.declarationKind??type.kind)+')');\r\n const creator=type.methods?.find(m=>m.name.toLowerCase()==='new'&&m.arguments===0);\r\n const indexed=type.properties?.find(p=>p.indexed&&p.name.toLowerCase()==='items');\r\n if(creator||indexed){\r\n if(!creator||!indexed||!indexed.readable)throw new Error('Cole\u00E7\u00E3o sem contrato New/Items tipado: '+key);\r\n const item=resolve(creator.result,declUnit),itemProperty=resolve(indexed.type,declUnit);\r\n if('primitive'in item||'primitive'in itemProperty||item.type.name!==itemProperty.type.name)throw new Error('Cole\u00E7\u00E3o com tipos New/Items divergentes: '+key);\r\n generated.set(key,{name:key,unit:declUnit.name,kind:'list',item:item.type.name,factory:creator.name});\r\n if(visit(creator.result,declUnit).kind!=='object')throw new Error('Item de cole\u00E7\u00E3o n\u00E3o \u00E9 objeto: '+key);\r\n return {kind:'list',ref:key};\r\n }\r\n const node:ModelType={name:key,unit:declUnit.name,kind:'object',properties:[]};generated.set(key,node);\r\n let inherited:ModelProperty[]=[];\r\n if(type.ancestor&&!bases.has(type.ancestor.toLowerCase())){\r\n const ancestor=visit(type.ancestor,declUnit);if(ancestor.kind!=='object')throw new Error('Heran\u00E7a n\u00E3o suportada: '+key);\r\n inherited=generated.get(ancestor.ref!)!.properties!;\r\n }\r\n const props=new Map(inherited.map(p=>[p.name.toLowerCase(),p]));\r\n for(const p of type.properties??[]){\r\n if(p.indexed)throw new Error('Propriedade indexada fora de cole\u00E7\u00E3o: '+key+'.'+p.name);\r\n if(!p.readable)throw new Error('Propriedade sem leitura: '+key+'.'+p.name);\r\n const resolved=visit(p.type,declUnit);\r\n const readonly=(!p.writable&&!['object','list'].includes(resolved.kind))||(key===raw.root&&['signature','procnfe','infnfesupl'].includes(p.name.toLowerCase()));\r\n props.set(p.name.toLowerCase(),{name:p.name,type:p.type,...resolved,readonly,...(p.default?{declaredDefault:p.default}:{})});\r\n }\r\n node.properties=[...props.values()].sort((a,b)=>a.name.localeCompare(b.name,'en'));return {kind:'object',ref:key};\r\n }\r\n visit(raw.root,rootUnit);return {schemaVersion:1,root:raw.root,types:[...generated.values()].sort((a,b)=>a.name.localeCompare(b.name,'en'))};\r\n}\r\nexport function compareContracts(previous:ModelIR|undefined,current:ModelIR){\r\n const old=new Map(previous?.types.map(t=>[t.name,t])??[]),now=new Map(current.types.map(t=>[t.name,t]));\r\n const additions:string[]=[],removals:string[]=[],changes:string[]=[];\r\n for(const [name,type]of now){\r\n const before=old.get(name);if(!before){additions.push(name);continue;}\r\n if(type.kind!==before.kind){changes.push(name+':kind');continue;}\r\n if(type.kind==='object'){\r\n const a=new Map(before.properties!.map(p=>[p.name,p])),b=new Map(type.properties!.map(p=>[p.name,p]));\r\n for(const [field,p]of b){if(!a.has(field))additions.push(name+'.'+field);else if(stable(a.get(field))!==stable(p))changes.push(name+'.'+field);}\r\n for(const field of a.keys())if(!b.has(field))removals.push(name+'.'+field);\r\n }else if(type.kind==='enum'){\r\n for(const v of type.values!)if(!before.values!.includes(v))additions.push(name+'.'+v);\r\n for(const v of before.values!)if(!type.values!.includes(v))removals.push(name+'.'+v);\r\n }else if(type.item!==before.item)changes.push(name+':item');\r\n }\r\n for(const name of old.keys())if(!now.has(name))removals.push(name);\r\n return {additions:additions.sort(),removals:removals.sort(),changes:changes.sort(),breaking:removals.length>0||changes.length>0};\r\n}\r\nconst tsType=(p:ModelProperty):string=>p.kind==='object'?p.ref+'Input':p.kind==='list'?p.ref+'Input':p.kind==='enum'?p.ref!:p.kind==='integer'?'number':p.kind==='boolean'?'boolean':'string';\r\nexport function renderModelValidation():string { return String.raw`\r\nexport type CodigoValidacaoModelo = 'MODELO_DESCONHECIDO'|'ENUM_INVALIDO'|'ARRAY_ESPERADO'|'OBJETO_ESPERADO'|'CAMPO_DESCONHECIDO'|'CAMPO_SOMENTE_LEITURA'|'INTEIRO_INVALIDO'|'BOOLEANO_ESPERADO'|'DECIMAL_INVALIDO'|'DATA_HORA_INVALIDA'|'DATA_INVALIDA'|'TEXTO_ESPERADO';\r\nfunction campoConhecido(at: unknown): string | undefined {\r\n if(typeof at!=='string'||at.length>512||! /^[A-Za-z_]\\w*(?:(?:\\.[A-Za-z_]\\w*)|(?:\\[\\d{1,7}\\]))*$/.test(at))return undefined;\r\n const parts=at.replace(/\\[(\\d+)\\]/g,'.$1').split('.');let schema=Object.hasOwn(MODEL_SCHEMA,parts[0])?MODEL_SCHEMA[parts[0]]:undefined;\r\n if(!schema)return undefined;\r\n for(const part of parts.slice(1)){\r\n if(schema.kind==='list'){if(! /^\\d+$/.test(part))return undefined;schema=MODEL_SCHEMA[schema.item];}\r\n else if(schema.kind==='object'){const p=schema.properties.find((p:any)=>p.name===part);if(!p)return undefined;schema=p.ref?MODEL_SCHEMA[p.ref]:{kind:p.kind};}\r\n else return undefined;\r\n }\r\n return at;\r\n}\r\n/** TypeError compat\u00EDvel, com contexto seguro e sem o valor informado ou chaves desconhecidas. */\r\nexport class ErroValidacaoModelo extends TypeError {\r\n readonly codigo: CodigoValidacaoModelo;\r\n readonly diagnostico: Readonly<{codigo:CodigoValidacaoModelo;etapa:'documento';campo?:string;mensagem:string;acao:string;statusEnvio:'nao_enviado';causa:Readonly<{codigo:CodigoValidacaoModelo;etapa:'documento';campo?:string}>}>;\r\n constructor(codigo: CodigoValidacaoModelo, at?: string) {\r\n const catalogo:Record<CodigoValidacaoModelo,[string,string]>={\r\n MODELO_DESCONHECIDO:['Modelo desconhecido.','Use um modelo exportado pelo cliente gerado.'],\r\n ENUM_INVALIDO:['enum inv\u00E1lido','Use um dos valores textuais do enum exportado pelo cliente.'],\r\n ARRAY_ESPERADO:['esperado array','Informe uma lista JSON entre colchetes.'],\r\n OBJETO_ESPERADO:['esperado objeto','Informe um objeto JSON entre chaves.'],\r\n CAMPO_DESCONHECIDO:['propriedade desconhecida','Confira os nomes permitidos neste grupo; a chave desconhecida n\u00E3o \u00E9 registrada.'],\r\n CAMPO_SOMENTE_LEITURA:['propriedade somente leitura','Remova este campo da entrada; o motor preenche seu resultado.'],\r\n INTEIRO_INVALIDO:['inteiro fora do intervalo','Informe um n\u00FAmero inteiro dentro do intervalo do campo.'],\r\n BOOLEANO_ESPERADO:['esperado boolean','Informe true ou false como valor JSON, sem aspas.'],\r\n DECIMAL_INVALIDO:['esperado decimal em string','Informe o decimal entre aspas, com ponto e a escala permitida pelo campo.'],\r\n DATA_HORA_INVALIDA:['esperado data/hora civil ISO (sem timezone)','Informe a data/hora civil da UF como AAAA-MM-DDTHH:mm:ss, sem Z ou offset. Confira a data antes do envio.'],\r\n DATA_INVALIDA:['data inv\u00E1lida','Confira dia, m\u00EAs, ano e hor\u00E1rio usando uma data civil v\u00E1lida.'],\r\n TEXTO_ESPERADO:['esperado string','Informe texto entre aspas no JSON.']\r\n };\r\n const safeCode=Object.hasOwn(catalogo,codigo)?codigo:'MODELO_DESCONHECIDO';\r\n const campo=campoConhecido(at),[texto,acao]=catalogo[safeCode],mensagem=(campo?campo+': ':'')+texto;\r\n super(mensagem);this.codigo=safeCode;\r\n const causa=Object.freeze({codigo:safeCode,etapa:'documento' as const,...(campo?{campo}:{})});\r\n this.diagnostico=Object.freeze({codigo:safeCode,etapa:'documento' as const,...(campo?{campo}:{}),mensagem,acao,statusEnvio:'nao_enviado' as const,causa});\r\n Object.defineProperty(this,'cause',{value:causa,enumerable:false});\r\n }\r\n toJSON(){return this.diagnostico;}\r\n}\r\nexport function validateModel(model: string, value: unknown, at=model): void {\r\n const schema=Object.hasOwn(MODEL_SCHEMA,model)?MODEL_SCHEMA[model]:undefined;\r\n if(!schema)throw new ErroValidacaoModelo('MODELO_DESCONHECIDO');\r\n at=campoConhecido(at)??model;\r\n if(schema.kind==='enum'){if(typeof value!=='string'||!schema.values.includes(value))throw new ErroValidacaoModelo('ENUM_INVALIDO',at);return;}\r\n if(schema.kind==='list'){if(!Array.isArray(value))throw new ErroValidacaoModelo('ARRAY_ESPERADO',at);value.forEach((item,index)=>validateModel(schema.item,item,at+'['+index+']'));return;}\r\n if(value===null||typeof value!=='object'||Array.isArray(value))throw new ErroValidacaoModelo('OBJETO_ESPERADO',at);\r\n const fields=new Map<string,any>(schema.properties.filter((p:any)=>!p.readonly).map((p:any)=>[p.name,p]));\r\n for(const [name,v] of Object.entries(value)){\r\n if(v===undefined)continue;\r\n const p=fields.get(name);\r\n if(!p){const readonly=schema.properties.some((p:any)=>p.name===name&&p.readonly);throw new ErroValidacaoModelo(readonly?'CAMPO_SOMENTE_LEITURA':'CAMPO_DESCONHECIDO',readonly?at+'.'+name:at);}\r\n const field=at+'.'+name;\r\n if(p.ref){validateModel(p.ref,v,field);continue;}\r\n if(p.kind==='integer'){if(typeof v!=='number'||!Number.isSafeInteger(v)||v<p.min||v>p.max)throw new ErroValidacaoModelo('INTEIRO_INVALIDO',field);}\r\n else if(p.kind==='boolean'){if(typeof v!=='boolean')throw new ErroValidacaoModelo('BOOLEANO_ESPERADO',field);}\r\n else if(p.kind==='decimal'){if(typeof v!=='string'||v.length>64||! /^-?\\d+(?:\\.\\d+)?$/.test(v)||p.scale!==undefined&&(v.split('.')[1]?.length??0)>p.scale)throw new ErroValidacaoModelo('DECIMAL_INVALIDO',field);}\r\n else if(p.kind==='datetime'){\r\n if(typeof v!=='string'||! /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?)?$/.test(v)||Number.isNaN(Date.parse(v+(v.length===10?'T00:00:00Z':'Z'))))throw new ErroValidacaoModelo('DATA_HORA_INVALIDA',field);\r\n const date=new Date(v+(v.length===10?'T00:00:00Z':'Z'));if(date.toISOString().slice(0,10)!==v.slice(0,10))throw new ErroValidacaoModelo('DATA_INVALIDA',field);\r\n }else if(typeof v!=='string')throw new ErroValidacaoModelo('TEXTO_ESPERADO',field);\r\n }\r\n}\r\nexport function validateTNFe(value: unknown): asserts value is TNFeInput { validateModel('TNFe',value); }\r\n`; }\r\nexport function renderTypeScript(ir:ModelIR,revision:number,contractHash:string):string {\r\n const out=['// Generated from ACBr AST. LGPL-2.1-or-later. Do not edit.','export const ACBR_CONTRACT = '+stable({sourceRevision:revision,contractHash})+' as const;','export const SOURCE_REVISION=ACBR_CONTRACT.sourceRevision;','export const CONTRACT_HASH=ACBR_CONTRACT.contractHash;'];\r\n for(const t of ir.types){\r\n if(t.kind==='enum'){\r\n out.push('export const '+t.name+' = Object.freeze('+stable(Object.fromEntries(t.values!.map(v=>[v,v])))+' as const);','export type '+t.name+' = typeof '+t.name+'[keyof typeof '+t.name+'];');\r\n }else if(t.kind==='list'){\r\n out.push('export type '+t.name+'Input = '+t.item+'Input[];','export class '+t.name+' extends Array<'+t.item+'> {',' New(input: '+t.item+'Input = {}): '+t.item+' { const item=new '+t.item+'(input); this.push(item); return item; }','}');\r\n }else {\r\n out.push('export interface '+t.name+'Input {');\r\n for(const p of t.properties!.filter(p=>!p.readonly))out.push(' '+JSON.stringify(p.name)+'?: '+tsType(p)+';');\r\n out.push('}','export class '+t.name+' {');\r\n for(const p of t.properties!){\r\n if(p.readonly){out.push(' readonly '+JSON.stringify(p.name)+'?: '+tsType(p)+';');continue;}\r\n if(p.declaredDefault)out.push(' /** Pascal streaming default: '+p.declaredDefault.replaceAll('*/','')+'. Omission preserves the native constructor. */');\r\n if(p.kind==='object'||p.kind==='list')out.push(' '+JSON.stringify(p.name)+' = new '+p.ref+'();');\r\n else out.push(' '+JSON.stringify(p.name)+'?: '+tsType(p)+';');\r\n }\r\n out.push(' constructor(input: '+t.name+'Input = {}) {',' validateModel('+JSON.stringify(t.name)+', input);');\r\n for(const p of t.properties!.filter(p=>!p.readonly)){\r\n const access='input['+JSON.stringify(p.name)+']',target='this['+JSON.stringify(p.name)+']';\r\n out.push(' if ('+access+' !== undefined) '+target+' = '+(p.kind==='object'?'new '+p.ref+'('+access+')':p.kind==='list'?'Object.assign(new '+p.ref+'(), '+access+'.map(v=>new '+ir.types.find(t=>t.name===p.ref)!.item+'(v)))':access)+';');\r\n }\r\n out.push(' }','}');\r\n }\r\n }\r\n out.push('const MODEL_SCHEMA: Record<string, any> = '+stable(Object.fromEntries(ir.types.map(t=>[t.name,t])))+';');\r\n out.push(renderModelValidation());\r\n return out.join('\\n')+'\\n';\r\n}\r\n\r\nexport function renderPascal(ir:ModelIR,revision:number,contractHash:string):string {\r\n const classes=ir.types.filter(t=>t.kind==='object'),byName=new Map(ir.types.map(t=>[t.name,t]));\r\n const units=[...new Set(ir.types.map(t=>t.unit))].sort();\r\n const out=['{ Generated from ACBr AST. LGPL-2.1-or-later. Do not edit. }','unit AcbrModels;','{$mode delphi}{$H+}','interface','uses SysUtils, Classes, fpjson, DateUtils, Math, '+units.join(', ')+';','const SourceRevision = '+revision+';',\" ContractHash = '\"+contractHash+\"';\",'procedure preencherTNFe(documento:TJSONObject; destino:TNFe);','implementation'];\r\n out.push(String.raw`\r\nprocedure Bad(const P,M:string); begin raise Exception.Create(P+': '+M) end;\r\nfunction Obj(D:TJSONData;const P:string):TJSONObject;\r\nbegin if (D=nil) or (D.JSONType<>jtObject) then Bad(P,'esperado objeto');Result:=TJSONObject(D) end;\r\nfunction Arr(D:TJSONData;const P:string):TJSONArray;\r\nbegin if (D=nil) or (D.JSONType<>jtArray) then Bad(P,'esperado array');Result:=TJSONArray(D) end;\r\nfunction Text(D:TJSONData;const P:string):string;\r\nbegin if (D=nil) or (D.JSONType<>jtString) then Bad(P,'esperado string');Result:=D.AsString end;\r\nfunction IntValue(D:TJSONData;const P:string;MinV,MaxV:Int64):Int64;\r\nvar V:Extended;\r\nbegin\r\n if (D=nil) or (D.JSONType<>jtNumber) then Bad(P,'esperado inteiro');\r\n V:=D.AsFloat;if IsNan(V) or IsInfinite(V) or (Frac(V)<>0) or (V<MinV) or (V>MaxV) then Bad(P,'inteiro fora do intervalo');\r\n Result:=D.AsInt64;\r\nend;\r\nfunction BoolValue(D:TJSONData;const P:string):boolean;\r\nbegin if (D=nil) or (D.JSONType<>jtBoolean) then Bad(P,'esperado boolean');Result:=D.AsBoolean end;\r\nfunction DecimalText(D:TJSONData;const P:string;Scale:integer):string;\r\nvar I,PointPos:integer;\r\nbegin\r\n Result:=Text(D,P);PointPos:=0;\r\n if (Result='') or (Length(Result)>64) then Bad(P,'decimal inv\u00E1lido');\r\n for I:=1 to Length(Result) do begin\r\n if Result[I]='.' then begin if (PointPos>0) or (I=1) or ((I=2) and (Result[1]='-')) or (I=Length(Result)) then Bad(P,'decimal inv\u00E1lido');PointPos:=I end\r\n else if (Result[I]='-') and (I=1) then begin if Length(Result)=1 then Bad(P,'decimal inv\u00E1lido') end\r\n else if not (Result[I] in ['0'..'9']) then Bad(P,'decimal inv\u00E1lido');\r\n end;\r\n if (PointPos>0) and (Scale>=0) and (Length(Result)-PointPos>Scale) then Bad(P,'casas decimais excedidas');\r\nend;\r\nfunction FloatValue(D:TJSONData;const P:string):Extended;\r\nvar F:TFormatSettings;S:string;\r\nbegin F:=DefaultFormatSettings;F.DecimalSeparator:='.';F.ThousandSeparator:=#0;S:=DecimalText(D,P,-1);\r\n if not TryStrToFloat(S,Result,F) or IsNan(Result) or IsInfinite(Result) then Bad(P,'decimal fora do intervalo');\r\nend;\r\nfunction CurrencyValue(D:TJSONData;const P:string):Currency;\r\nvar F:TFormatSettings;S:string;\r\nbegin F:=DefaultFormatSettings;F.DecimalSeparator:='.';F.ThousandSeparator:=#0;S:=DecimalText(D,P,4);\r\n if not TryStrToCurr(S,Result,F) then Bad(P,'currency fora do intervalo');\r\nend;\r\nfunction DateValue(D:TJSONData;const P:string):TDateTime;\r\nvar S:string;I:integer;\r\nbegin\r\n S:=Text(D,P);\r\n if not (Length(S) in [10,19,21,22,23]) then Bad(P,'esperado data/hora civil ISO sem timezone');\r\n for I:=1 to Length(S) do if not ((S[I] in ['0'..'9']) or ((I in [5,8]) and (S[I]='-')) or ((I=11) and (S[I]='T')) or ((I in [14,17]) and (S[I]=':')) or ((I=20) and (S[I]='.'))) then Bad(P,'data ISO inv\u00E1lida');\r\n if not TryISO8601ToDate(S,Result,true) then Bad(P,'data ISO inv\u00E1lida');\r\nend;\r\n`);\r\n const q=(s:string)=>\"'\"+s.replaceAll(\"'\",\"''\")+\"'\";\r\n for(const t of classes)out.push('procedure Load_'+t.name+'(D:TJSONObject;destino:'+t.unit+'.'+t.name+';const P:string); forward;');\r\n for(const t of classes){\r\n out.push('procedure Load_'+t.name+'(D:TJSONObject;destino:'+t.unit+'.'+t.name+';const P:string);','var I,J:integer;V:TJSONData;A:TJSONArray;K,At:string;','begin',\" if destino=nil then Bad(P,'objeto ACBr n\u00E3o inicializado');\",' for I:=0 to D.Count-1 do begin',' K:=D.Names[I];V:=D.Items[I];At:=P+\\'.\\'+K;');\r\n let index=0;\r\n for(const p of t.properties!.filter(p=>!p.readonly)){\r\n out.push(' '+(index++?'else ':'')+'if K='+q(p.name)+' then begin');const target='destino.'+p.name;\r\n if(p.kind==='object')out.push(' Load_'+p.ref+'(Obj(V,At),'+target+',At);');\r\n else if(p.kind==='list'){\r\n const list=byName.get(p.ref!)!;\r\n out.push(' A:=Arr(V,At);if '+target+'=nil then Bad(At,\\'cole\u00E7\u00E3o n\u00E3o inicializada\\');'+target+'.Clear;',' for J:=0 to A.Count-1 do Load_'+list.item+'(Obj(A.Items[J],At+\\'[\\'+IntToStr(J)+\\']\\'),'+target+'.'+list.factory+',At+\\'[\\'+IntToStr(J)+\\']\\');');\r\n }else if(p.kind==='enum'){\r\n const enumeration=byName.get(p.ref!)!;\r\n out.push(...enumeration.values!.map((v,i)=>' '+(i?'else ':'')+'if Text(V,At)='+q(v)+' then '+target+':='+enumeration.unit+'.'+v),\" else Bad(At,'enum inv\u00E1lido');\");\r\n }else out.push(' '+target+':='+({string:'Text(V,At)',integer:'IntValue(V,At,'+p.min+','+p.max+')',boolean:'BoolValue(V,At)',datetime:'DateValue(V,At)',decimal:p.scale===4?'CurrencyValue(V,At)':'FloatValue(V,At)'}[p.kind])+';');\r\n out.push(' end');\r\n }\r\n out.push((index?\" else \":\" \")+\"Bad(At,'propriedade desconhecida ou somente leitura');\",' end;','end;');\r\n }\r\n out.push('procedure preencherTNFe(documento:TJSONObject;destino:TNFe);',\"begin if documento=nil then Bad('TNFe','esperado objeto');Load_TNFe(documento,destino,'TNFe') end;\",'end.');\r\n return out.join('\\n')+'\\n';\r\n}\r\nexport function renderClientIndex():string{\r\n return [\r\n '// Generated client bound to its own ACBr contract. Do not edit.',\r\n 'import { criarEmissor as criarRuntime, diagnosticarErro as diagnosticarErroRuntime, diagnosticarResultado, type OpcoesEmissor, type OpcoesOperacao } from '+JSON.stringify('cosmemilton-acbr-node/runtime')+';',\r\n 'import { ACBR_CONTRACT, validateTNFe, ErroValidacaoModelo, type TNFeInput } from '+JSON.stringify('./models.js')+';',\r\n 'export * from '+JSON.stringify('./models.js')+';',\r\n 'export { diagnosticarResultado };',\r\n 'export function diagnosticarErro(erro:unknown) { return erro instanceof ErroValidacaoModelo ? erro.diagnostico : diagnosticarErroRuntime(erro); }',\r\n 'export function criarEmissor(options: Omit<OpcoesEmissor, '+JSON.stringify('contrato')+' | '+JSON.stringify('validaDocumento')+'>) {',\r\n ' const emissor=criarRuntime({...options, contrato:ACBR_CONTRACT, validaDocumento:validateTNFe});',\r\n ' return {...emissor, gerarXml(documento:TNFeInput, opcoes?:OpcoesOperacao) { return emissor.gerarXml(documento as unknown as Record<string,unknown>, opcoes); }};',\r\n '}'\r\n ].join('\\n')+'\\n';\r\n}\r\nasync function fingerprint(dir:string):Promise<string>{\r\n const files:string[]=[];\r\n async function walk(d:string){for(const entry of await readdir(d,{withFileTypes:true})){const f=path.join(d,entry.name);if(entry.isDirectory())await walk(f);else if(/\\.(pas|pp|inc|xsd)$/i.test(entry.name))files.push(f);}}\r\n await walk(dir);const digest=createHash('sha256');\r\n for(const f of files.sort()){digest.update(path.relative(dir,f).replaceAll('\\\\','/'));digest.update(await readFile(f));}return digest.digest('hex');\r\n}\r\nexport async function generateModel(options:GenerateOptions){\r\n const root=path.resolve(options.outputDir),cache=path.join(root,'.acbr/generated'),bin=path.join(root,'.acbr/bin');\r\n const models=path.resolve(root,options.modelOutputDir??'generated/acbr'),native=path.resolve(root,options.nativeOutputDir??'native/generated');\r\n await Promise.all([mkdir(cache,{recursive:true}),mkdir(bin,{recursive:true}),mkdir(models,{recursive:true}),mkdir(native,{recursive:true})]);\r\n const extractor=options.extractorPath??fileURLToPath(new URL('../tools/extract-model.lpr',import.meta.url));\r\n const executable=path.join(bin,'extract-model'+(process.platform==='win32'?'.exe':''));\r\n try{\r\n await execute(options.fpcPath??'fpc',['-Mobjfpc','-Sh','-FU'+bin,'-FE'+bin,extractor],{cwd:root,maxBuffer:8*1024*1024});\r\n await execute(executable,[path.resolve(options.acbrRoot),path.join(cache,'raw-model.json'),process.platform==='win32'?'win64':'linux'],{cwd:root,maxBuffer:8*1024*1024});\r\n }catch(error){const e=error as Error&{stdout?:string;stderr?:string};throw new Error('Extra\u00E7\u00E3o FCL-passrc falhou: '+(e.stderr??'')+(e.stdout??'')+e.message);}\r\n const raw=JSON.parse(await readFile(path.join(cache,'raw-model.json'),'utf8')) as RawModel;\r\n const ir=buildModelIR(raw),sourceRevision=Number(options.revision);\r\n if(!Number.isSafeInteger(sourceRevision)||sourceRevision<1)throw new Error('Revis\u00E3o SVN inv\u00E1lida');\r\n const sourceHash=options.sourceHash??await fingerprint(options.acbrRoot),contractHash=hash(stable({sourceRevision,sourceHash,ir}));\r\n let previous:ModelIR|undefined;try{previous=JSON.parse(await readFile(path.join(cache,'model.ir.json'),'utf8'));}catch(error){if((error as NodeJS.ErrnoException).code!=='ENOENT')throw error;}\r\n const report=compareContracts(previous,ir),reportPath=path.join(cache,'changes.json'),manifestPath=path.join(cache,'manifest.json');\r\n const files=[path.relative(root,path.join(models,'models.ts')),path.relative(root,path.join(models,'index.ts')),path.relative(root,path.join(native,'AcbrModels.pas'))].map(f=>f.replaceAll('\\\\','/'));\r\n const content=[renderTypeScript(ir,sourceRevision,contractHash),renderClientIndex(),renderPascal(ir,sourceRevision,contractHash)];\r\n const fileHashes=Object.fromEntries(files.map((file,index)=>[file,hash(content[index])]));\r\n await Promise.all([\r\n ...files.map((file,index)=>writeFile(path.resolve(root,file),content[index],'utf8')),\r\n writeFile(path.join(cache,'model.ir.json'),JSON.stringify(ir,null,2)+'\\n','utf8'),\r\n writeFile(reportPath,JSON.stringify(report,null,2)+'\\n','utf8'),\r\n writeFile(manifestPath,JSON.stringify({schemaVersion:1,sourceRevision,sourceHash,contractHash,root:ir.root,models:ir.types.length,files,fileHashes},null,2)+'\\n','utf8')\r\n ]);return {contractHash,sourceHash,models:ir.types.length,reportPath,manifestPath};\r\n}\r\n", "#!/usr/bin/env node\r\nimport { realpathSync } from 'node:fs';\r\nimport { access } from 'node:fs/promises';\r\nimport { resolve } from 'node:path';\r\nimport { fileURLToPath } from 'node:url';\r\nimport { initializeConfig, loadConfig } from './config.js';\r\nimport { checkBuild, buildNative, doctor, runtimeDirectory } from './native-build.js';\r\nimport { lockExistingSource, updateSource, verifySource } from './source.js';\r\nimport { checkOffline } from './offline-check.js';\r\n\r\nexport const HELP = `acbr-node \u2014 compila\u00E7\u00E3o e contrato Node/ACBr NF-e\r\n\r\nUso:\r\n acbr-node init [--config caminho] [--revision HEAD|n\u00FAmero]\r\n acbr-node source update [--config caminho] [--revision HEAD|n\u00FAmero]\r\n acbr-node source lock --revision n\u00FAmero [--config caminho]\r\n acbr-node generate [--config caminho]\r\n acbr-node build [--config caminho]\r\n acbr-node check [--config caminho]\r\n acbr-node doctor [--config caminho]\r\n\r\nsource update consulta o SVN oficial e substitui apenas fontes verificadas pelo lock.\r\nsource lock registra um export existente cuja origem/revis\u00E3o o operador j\u00E1 conferiu.\r\ngenerate/build/check nunca atualizam fontes. Nenhum comando transmite NF-e.\r\n`;\r\nexport interface CliIO { stdout: { write(text: string): unknown }; stderr: { write(text: string): unknown }; }\r\nfunction revision(value: string | undefined): 'HEAD' | number | undefined {\r\n if (value === undefined) return undefined;\r\n if (value === 'HEAD') return value;\r\n if (!/^[1-9]\\d*$/.test(value) || !Number.isSafeInteger(Number(value))) throw new Error('--revision deve ser HEAD ou um n\u00FAmero SVN positivo.');\r\n return Number(value);\r\n}\r\ninterface Args { command: string[]; config: string; revision?: 'HEAD' | number; json: boolean; help: boolean; }\r\nexport function parseArguments(args: string[]): Args {\r\n const result: Args = { command: [], config: 'acbr.config.json', json: false, help: false };\r\n const used = new Set<string>();\r\n for (let i = 0; i < args.length; i++) {\r\n const arg = args[i]!;\r\n if (!arg.startsWith('-')) { result.command.push(arg); continue; }\r\n if (used.has(arg)) throw new Error(`Op\u00E7\u00E3o repetida: ${arg}.`);\r\n used.add(arg);\r\n if (arg === '--help' || arg === '-h') result.help = true;\r\n else if (arg === '--json') result.json = true;\r\n else if (arg === '--config' || arg === '--revision') {\r\n const value = args[++i];\r\n if (value === undefined || value.startsWith('--')) throw new Error(`Valor obrigat\u00F3rio para ${arg}.`);\r\n if (arg === '--config') result.config = value;\r\n else result.revision = revision(value);\r\n } else throw new Error(`Op\u00E7\u00E3o desconhecida: ${arg}.`);\r\n }\r\n return result;\r\n}\r\nexport async function main(args = process.argv.slice(2), io: CliIO = process): Promise<number> {\r\n try {\r\n const options = parseArguments(args);\r\n const command = options.command.join(' ');\r\n if (options.help || !command) { io.stdout.write(HELP); return 0; }\r\n const output = (value: unknown, text: string) => io.stdout.write(options.json ? `${JSON.stringify(value, null, 2)}\\n` : `${text}\\n`);\r\n if (command === 'init') {\r\n const config = await initializeConfig(options.config, options.revision, fileURLToPath(new URL('../', import.meta.url)));\r\n output({ configPath: config.configPath }, `Configura\u00E7\u00E3o criada: ${config.configPath}\\nPr\u00F3ximo passo: acbr-node source update.`);\r\n return 0;\r\n }\r\n if (!['source update', 'source lock', 'generate', 'build', 'check', 'doctor'].includes(command)) throw new Error(`Comando desconhecido: ${command}. Use --help.`);\r\n if (options.revision !== undefined && !command.startsWith('source ')) throw new Error('--revision \u00E9 aceito somente em init e source.');\r\n if (command === 'doctor') {\r\n let config;\r\n try { await access(resolve(options.config)); config = await loadConfig(options.config); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\r\n const report = await doctor(config);\r\n output(report, report.map(item => `${item.ok ? 'OK' : 'FALHA'} ${item.name}: ${item.detail}`).join('\\n'));\r\n return report.every(item => item.ok) ? 0 : 1;\r\n }\r\n const config = await loadConfig(options.config);\r\n if (command === 'source update') {\r\n const lock = await updateSource(config, options.revision);\r\n output(lock, `Fontes oficiais registradas na revis\u00E3o ${lock.source.revision}.\\nSHA256 da \u00E1rvore: ${lock.source.treeHash}\\nExecute generate para atualizar o contrato.`);\r\n } else if (command === 'source lock') {\r\n if (typeof options.revision !== 'number') throw new Error('source lock exige --revision com o n\u00FAmero verificado do export SVN.');\r\n if (config.source.revision !== 'HEAD' && config.source.revision !== options.revision) throw new Error('Revis\u00E3o do export diverge da configura\u00E7\u00E3o.');\r\n const lock = await lockExistingSource(config, options.revision);\r\n output(lock, `Export existente registrado na revis\u00E3o ${lock.source.revision}; ${Object.keys(lock.source.files).length} arquivos protegidos por SHA256.`);\r\n } else if (command === 'generate') {\r\n const lock = await verifySource(config);\r\n const { generateModel } = await import('./generator.js');\r\n const result = await generateModel({ acbrRoot: config.source.directory, outputDir: config.generator.outputDir, revision: String(lock.source.revision), sourceHash: lock.source.treeHash, fpcPath: config.native.fpc });\r\n output(result, `Contrato ${result.contractHash}; ${result.models} modelos gerados.\\nRevise o relat\u00F3rio: ${result.reportPath}`);\r\n } else if (command === 'build') {\r\n const result = await buildNative(config);\r\n output(result, `Runtime compilado: ${runtimeDirectory(config)}\\nACBr revis\u00E3o ${result.sourceRevision}; contrato ${result.contractHash}.`);\r\n } else {\r\n const result = await checkBuild(config);\r\n const offlineChecks = await checkOffline(config, result);\r\n output({ ...result, offlineChecks }, `Fontes, contrato e ${Object.keys(result.files).length} arquivos do runtime conferidos por SHA256.\\n${offlineChecks.length} verifica\u00E7\u00F5es offline do motor aprovadas; nenhuma transmiss\u00E3o.`);\r\n }\r\n return 0;\r\n } catch (error) {\r\n io.stderr.write(`Erro: ${(error as Error).message}\\n`);\r\n return 1;\r\n }\r\n}\r\nfunction isDirectInvocation(): boolean {\r\n const entry = process.argv[1];\r\n if (!entry) return false;\r\n try {\r\n // npm's Unix bin is a symlink; resolve both sides before deciding to run.\r\n return realpathSync(resolve(entry)) === realpathSync(fileURLToPath(import.meta.url));\r\n } catch {\r\n // Importing the CLI must remain inert even if the host's argv path is absent.\r\n return false;\r\n }\r\n}\r\nif (isDirectInvocation()) {\r\n main().then(code => { process.exitCode = code; });\r\n}\r\n", "import { readFile, writeFile, mkdir, readdir, access, copyFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, resolve } from 'node:path';\n\nexport const OFFICIAL_ACBR_URL = 'https://svn.code.sf.net/p/acbr/code/trunk2';\nexport const SOURCE_PARTS = ['Fontes', 'Exemplos/ACBrDFe/Schemas/NFe', 'Doctos/LICENSE.TXT'] as const;\nexport interface AcbrConfigFile {\n formatVersion: 1;\n source: { url: string; revision: 'HEAD' | number; directory: string };\n generator: { outputDir: string };\n native: { project: string; outputDir: string; fpc: string; lazarusRoot?: string; libraryFiles?: string[]; providerFiles?: string[] };\n}\nexport interface AcbrConfig extends AcbrConfigFile {\n configPath: string;\n projectRoot: string;\n lockPath: string;\n}\nconst DEFAULT: AcbrConfigFile = {\n formatVersion: 1,\n source: { url: OFFICIAL_ACBR_URL, revision: 'HEAD', directory: '.acbr/source' },\n generator: { outputDir: '.' },\n native: { project: 'native/acbr-worker.lpr', outputDir: '.acbr/runtime', fpc: 'fpc' },\n};\nexport function defaultConfig(): AcbrConfigFile { return structuredClone(DEFAULT); }\nfunction record(value: unknown, name: string): Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} deve ser um objeto.`);\n return value as Record<string, unknown>;\n}\nfunction keys(value: Record<string, unknown>, allowed: string[], name: string): void {\n const unexpected = Object.keys(value).filter(key => !allowed.includes(key));\n if (unexpected.length) throw new Error(`Campo desconhecido em ${name}: ${unexpected.join(', ')}.`);\n}\nfunction string(value: unknown, name: string): string {\n if (typeof value !== 'string' || !value.trim() || value.includes('\\0')) throw new Error(`${name} deve ser um texto n\u00E3o vazio.`);\n return value;\n}\nexport function parseConfig(input: unknown, configPath: string): AcbrConfig {\n const root = record(input, 'configura\u00E7\u00E3o');\n keys(root, ['formatVersion', 'source', 'generator', 'native'], 'configura\u00E7\u00E3o');\n if (root.formatVersion !== 1) throw new Error('formatVersion deve ser 1.');\n const source = record(root.source, 'source'); keys(source, ['url', 'revision', 'directory'], 'source');\n const generator = record(root.generator, 'generator'); keys(generator, ['outputDir'], 'generator');\n const native = record(root.native, 'native'); keys(native, ['project', 'outputDir', 'fpc', 'lazarusRoot', 'libraryFiles', 'providerFiles'], 'native');\n const url = string(source.url, 'source.url').replace(/\\/+$/, '');\n if (url !== OFFICIAL_ACBR_URL) throw new Error(`source.url deve apontar ao reposit\u00F3rio oficial ${OFFICIAL_ACBR_URL}.`);\n const revision = source.revision;\n if (revision !== 'HEAD' && (!Number.isSafeInteger(revision) || Number(revision) < 1)) throw new Error('source.revision deve ser HEAD ou uma revis\u00E3o SVN positiva.');\n const absoluteConfig = resolve(configPath);\n const projectRoot = dirname(absoluteConfig);\n const localPath = (value: unknown, label: string) => resolve(projectRoot, string(value, label));\n const fpcInput = string(native.fpc, 'native.fpc');\n const fpc = isAbsolute(fpcInput) || /[\\\\/]/.test(fpcInput) ? resolve(projectRoot, fpcInput) : fpcInput;\n let libraryFiles: string[] | undefined;\n if (native.libraryFiles !== undefined) {\n if (!Array.isArray(native.libraryFiles)) throw new Error('native.libraryFiles deve ser uma lista de caminhos.');\n libraryFiles = native.libraryFiles.map((item, i) => localPath(item, `native.libraryFiles[${i}]`));\n }\n let providerFiles: string[] | undefined;\n if (native.providerFiles !== undefined) {\n if (!Array.isArray(native.providerFiles)) throw new Error('native.providerFiles deve ser uma lista de caminhos.');\n providerFiles = native.providerFiles.map((item, i) => localPath(item, `native.providerFiles[${i}]`));\n }\n return {\n formatVersion: 1, configPath: absoluteConfig, projectRoot, lockPath: resolve(projectRoot, 'acbr.lock.json'),\n source: { url, revision: revision as 'HEAD' | number, directory: localPath(source.directory, 'source.directory') },\n generator: { outputDir: localPath(generator.outputDir, 'generator.outputDir') },\n native: { project: localPath(native.project, 'native.project'), outputDir: localPath(native.outputDir, 'native.outputDir'), fpc,\n ...(native.lazarusRoot !== undefined ? { lazarusRoot: localPath(native.lazarusRoot, 'native.lazarusRoot') } : {}),\n ...(libraryFiles !== undefined ? { libraryFiles } : {}),\n ...(providerFiles !== undefined ? { providerFiles } : {}),\n },\n };\n}\nexport async function loadConfig(path = 'acbr.config.json'): Promise<AcbrConfig> {\n const configPath = resolve(path);\n let contents: string;\n try { contents = await readFile(configPath, 'utf8'); }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel ler ${configPath}. Execute acbr-node init.`, { cause: error }); }\n let value: unknown;\n try { value = JSON.parse(contents); } catch (error) { throw new Error(`JSON inv\u00E1lido em ${configPath}.`, { cause: error }); }\n return parseConfig(value, configPath);\n}\nexport async function initializeConfig(path = 'acbr.config.json', revision: 'HEAD' | number = 'HEAD', assetRoot?: string): Promise<AcbrConfig> {\n const configPath = resolve(path);\n const config = defaultConfig(); config.source.revision = revision;\n parseConfig(config, configPath);\n await mkdir(dirname(configPath), { recursive: true });\n try { await access(configPath); throw Object.assign(new Error(`EEXIST: configura\u00E7\u00E3o j\u00E1 existe: ${configPath}`), { code: 'EEXIST' }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n const resolved = parseConfig(config, configPath);\n if (assetRoot) await copyInitAssets(assetRoot, resolved.projectRoot);\n await writeFile(configPath, `${JSON.stringify(config, null, 2)}\\n`, { flag: 'wx' });\n await mkdir(resolve(resolved.projectRoot, '.acbr/generated'), { recursive: true });\n await mkdir(resolve(resolved.projectRoot, 'generated/acbr'), { recursive: true });\n return resolved;\n}\n\nasync function copyInitAssets(assetRoot: string, targetRoot: string): Promise<void> {\n const entries: { source: string; destination: string; content: Buffer }[] = [];\n async function scan(current: string, target: string): Promise<void> {\n for (const entry of await readdir(current, { withFileTypes: true })) {\n if (entry.name === 'generated' || entry.name.startsWith('.')) continue;\n const source = resolve(current, entry.name); const destination = resolve(target, entry.name);\n if (entry.isDirectory()) await scan(source, destination);\n else if (entry.isFile() && /\\.(pas|lpr|inc|lpi)$/i.test(entry.name)) entries.push({ source, destination, content: await readFile(source) });\n }\n }\n await scan(resolve(assetRoot, 'native'), resolve(targetRoot, 'native'));\n if (!entries.some(entry => entry.source.endsWith('acbr-worker.lpr'))) throw new Error('Assets do pacote n\u00E3o cont\u00EAm native/acbr-worker.lpr.');\n entries.push({ source: resolve(assetRoot, 'tools/extract-model.lpr'), destination: resolve(targetRoot, 'tools/extract-model.lpr'), content: await readFile(resolve(assetRoot, 'tools/extract-model.lpr')) });\n for (const entry of entries) {\n try {\n const existing = await readFile(entry.destination);\n if (!existing.equals(entry.content)) throw new Error(`init preservou arquivo existente divergente: ${entry.destination}.`);\n } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n }\n for (const entry of entries) {\n await mkdir(dirname(entry.destination), { recursive: true });\n try { await writeFile(entry.destination, entry.content, { flag: 'wx' }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error; }\n }\n}\n", "import { copyFile, mkdir, readdir, readFile, rename, rm, stat, chmod, realpath, access, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, relative, resolve, sep } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { fileURLToPath } from 'node:url';\nimport type { AcbrConfig } from './config.js';\nimport { fileHash, runCommand, snapshotSource, verifySource } from './source.js';\n\nexport interface BuiltRuntimeManifest {\n formatVersion: 1; sourceRevision: number; contractHash: string; platform: string; arch: string;\n executable: string; files: Record<string, string>;\n systemDependencies?: string[]; testOnly?: boolean; generatedFileHashes: Record<string, string>;\n}\ninterface GeneratedManifest { sourceRevision: number; sourceHash: string; contractHash: string; fileHashes: Record<string, string>; }\nexport function runtimeDirectory(config: AcbrConfig): string { return join(config.native.outputDir, `${process.platform}-${process.arch}`); }\nasync function exists(path: string): Promise<boolean> { try { await access(path); return true; } catch { return false; } }\nexport async function findLazarus(config: AcbrConfig): Promise<string> {\n const candidates = config.native.lazarusRoot ? [config.native.lazarusRoot] :\n [process.env.LAZARUS_ROOT, '/usr/lib/lazarus/default', '/usr/lib/lazarus/3.0', 'C:\\\\lazarus'].filter((path): path is string => Boolean(path));\n for (const candidate of candidates) if (await exists(join(candidate, 'components/lazutils'))) return realpath(candidate);\n throw new Error('Lazarus n\u00E3o encontrado. Defina native.lazarusRoot em acbr.config.json ou LAZARUS_ROOT.');\n}\nasync function generatedManifest(config: AcbrConfig): Promise<GeneratedManifest> {\n const path = join(config.generator.outputDir, '.acbr/generated/manifest.json');\n let value: GeneratedManifest;\n try { value = JSON.parse(await readFile(path, 'utf8')) as GeneratedManifest; }\n catch (error) { throw new Error('Contrato gerado ausente ou inv\u00E1lido. Execute acbr-node generate.', { cause: error }); }\n if (!Number.isSafeInteger(value.sourceRevision) || !/^[a-f0-9]{64}$/.test(value.contractHash) || !/^[a-f0-9]{64}$/.test(value.sourceHash)) throw new Error('Manifesto gerado inv\u00E1lido. Execute generate.');\n if (!value.fileHashes || typeof value.fileHashes !== 'object' || Array.isArray(value.fileHashes) || Object.keys(value.fileHashes).length !== 3 || ['generated/acbr/models.ts', 'generated/acbr/index.ts', 'native/generated/AcbrModels.pas'].some(name => !Object.hasOwn(value.fileHashes, name))) throw new Error('Manifesto gerado n\u00E3o cont\u00E9m os hashes dos tr\u00EAs arquivos. Execute generate.');\n for (const [name, expected] of Object.entries(value.fileHashes)) {\n const file = resolve(config.generator.outputDir, name);\n const location = relative(config.generator.outputDir, file);\n if (!name || name.startsWith('/') || name.includes('\\\\') || location === '..' || location.startsWith(`..${sep}`) || !/^[a-f0-9]{64}$/.test(expected)) throw new Error('Caminho ou SHA256 inv\u00E1lido no manifesto gerado.');\n if (await fileHash(file) !== expected) throw new Error(`Arquivo gerado diverge do manifesto: ${name}. Execute generate para restaurar o contrato.`);\n }\n return value;\n}\nasync function subdirectories(path: string): Promise<string[]> {\n const result = [path];\n for (const entry of (await readdir(path, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.isDirectory()) result.push(...await subdirectories(join(path, entry.name)));\n }\n return result;\n}\nconst REQUIRED_DYNAMIC = ['libssl.so.3', 'libcrypto.so.3', 'libxml2.so.2'];\nconst CORE_SYSTEM = /^(?:lib(?:c|m|pthread|dl|rt|resolv|anl|util)\\.so(?:\\.|$)|ld-linux|linux-vdso)/;\nasync function copyLinuxLibraries(stage: string): Promise<string[]> {\n const { stdout } = await runCommand('ldconfig', ['-p']);\n const libraries = new Map<string, string>();\n for (const name of REQUIRED_DYNAMIC) {\n const line = stdout.split('\\n').find(value => value.trim().startsWith(`${name} `) && value.includes('x86-64'));\n const path = line?.split('=>')[1]?.trim();\n if (!path) throw new Error(`Depend\u00EAncia din\u00E2mica ausente: ${name}. Instale OpenSSL 3 e libxml2 compat\u00EDveis.`);\n libraries.set(name, await realpath(path));\n }\n const modules = '/usr/lib/x86_64-linux-gnu/ossl-modules';\n if (!(await exists(join(modules, 'legacy.so')))) throw new Error('Provider legacy OpenSSL 3 ausente. Instale o pacote libssl3/libssl3t64 completo.');\n libraries.set('ossl-modules/legacy.so', await realpath(join(modules, 'legacy.so')));\n const systemDependencies = new Set<string>();\n const inspected = new Set<string>();\n while (inspected.size < libraries.size) {\n const [name, path] = [...libraries].find(([name]) => !inspected.has(name))!;\n inspected.add(name);\n const dependencies = await runCommand('ldd', [path]);\n for (const line of dependencies.stdout.split('\\n')) {\n if (line.includes('not found')) throw new Error(`Depend\u00EAncia transitiva ausente: ${line.trim()}.`);\n const match = /^\\s*(\\S+)\\s+=>\\s+(\\S+)/.exec(line);\n if (match) {\n const dependency = match[1]!; const file = match[2]!;\n if (CORE_SYSTEM.test(dependency)) systemDependencies.add(dependency);\n else if (!libraries.has(dependency)) libraries.set(dependency, await realpath(file));\n } else {\n const direct = /^\\s*(\\/\\S+)/.exec(line)?.[1];\n if (direct) systemDependencies.add(basename(direct));\n }\n }\n }\n const licenseDir = join(stage, 'licenses'); await mkdir(licenseDir, { recursive: true });\n const provenance: Record<string, unknown> = {};\n for (const [name, path] of libraries) {\n const destination = name.startsWith('ossl-modules/') ? join(stage, name) : join(stage, 'lib', name);\n await mkdir(dirname(destination), { recursive: true }); await copyFile(path, destination);\n const aliases = name === 'libssl.so.3' ? ['libssl.so'] : name === 'libcrypto.so.3' ? ['libcrypto.so'] : name === 'libxml2.so.2' ? ['libxml2.so'] : [];\n for (const alias of aliases) await copyFile(path, join(stage, 'lib', alias));\n let owner: string;\n try { owner = (await runCommand('dpkg-query', ['-S', path])).stdout.split('\\n')[0]!.split(': ')[0]!; }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel identificar pacote/licen\u00E7a de ${path}. Build requer Debian/Ubuntu com depend\u00EAncias registradas pelo dpkg.`, { cause: error }); }\n const pkg = owner.split(':')[0]!;\n const copyright = `/usr/share/doc/${pkg}/copyright`;\n if (!(await exists(copyright))) throw new Error(`Licen\u00E7a da depend\u00EAncia ${name} n\u00E3o encontrada: ${copyright}.`);\n await copyFile(copyright, join(licenseDir, `${name.replaceAll('/', '-')}.txt`));\n const source = (await runCommand('dpkg-query', ['-W', '-f=${source:Package}|${source:Version}|${Version}', owner])).stdout.trim().split('|');\n provenance[name] = { binaryPackage: owner, binaryVersion: source[2], sourcePackage: source[0], sourceVersion: source[1],\n sourceUrl: `https://launchpad.net/ubuntu/+source/${encodeURIComponent(source[0]!)}/${encodeURIComponent(source[1]!)}`,\n copyright: `licenses/${name.replaceAll('/', '-')}.txt` };\n }\n await mkdir(join(stage, 'sources'), { recursive: true });\n await writeFile(join(stage, 'sources/native-dependencies.json'), `${JSON.stringify(provenance, null, 2)}\\n`);\n await writeFile(join(stage, 'openssl.cnf'), 'openssl_conf = openssl_init\\n[openssl_init]\\nproviders = provider_sect\\n[provider_sect]\\ndefault = default_sect\\nlegacy = legacy_sect\\n[default_sect]\\nactivate = 1\\n[legacy_sect]\\nactivate = 1\\n');\n return [...systemDependencies].sort();\n}\nasync function copyExplicitLibraries(config: AcbrConfig, stage: string): Promise<void> {\n if (!config.native.libraryFiles?.length) throw new Error('Windows exige native.libraryFiles com DLLs OpenSSL 3/libxml2 e arquivos .LICENSE adjacentes.');\n await mkdir(join(stage, 'lib'), { recursive: true }); await mkdir(join(stage, 'licenses'), { recursive: true });\n const sources: Record<string, unknown> = {};\n const dependencyDirectories = new Set([...(config.native.libraryFiles ?? []), ...(config.native.providerFiles ?? [])].map(dirname));\n for (const directory of dependencyDirectories) {\n for (const entry of await readdir(directory)) {\n if (entry.endsWith('.LICENSE')) await copyFile(join(directory, entry), join(stage, 'licenses', entry));\n else if (entry === 'SOURCE.json') {\n await mkdir(join(stage, 'sources'), { recursive: true });\n await copyFile(join(directory, entry), join(stage, 'sources', `${basename(directory)}-SOURCE.json`));\n }\n }\n }\n for (const [directory, files] of [['lib', config.native.libraryFiles], ['ossl-modules', config.native.providerFiles ?? []]] as const) {\n await mkdir(join(stage, directory), { recursive: true });\n for (const source of files) {\n await copyFile(source, join(stage, directory, basename(source)));\n await copyFile(`${source}.LICENSE`, join(stage, 'licenses', `${basename(source)}.txt`));\n if (await exists(`${source}.SOURCE.json`)) sources[`${directory}/${basename(source)}`] = JSON.parse(await readFile(`${source}.SOURCE.json`, 'utf8'));\n }\n }\n if (!config.native.providerFiles?.some(path => basename(path).toLowerCase() === 'legacy.dll')) throw new Error('Windows requer native.providerFiles com o provider legacy.dll de OpenSSL 3 e licen\u00E7a adjacente.');\n await mkdir(join(stage, 'sources'), { recursive: true });\n await writeFile(join(stage, 'sources/native-dependencies.json'), `${JSON.stringify(sources, null, 2)}\\n`);\n await writeFile(join(stage, 'openssl.cnf'), 'openssl_conf = openssl_init\\n[openssl_init]\\nproviders = provider_sect\\n[provider_sect]\\ndefault = default_sect\\nlegacy = legacy_sect\\n[default_sect]\\nactivate = 1\\n[legacy_sect]\\nactivate = 1\\n');\n}\nexport async function buildNative(config: AcbrConfig, options: { testOnly?: boolean } = {}): Promise<BuiltRuntimeManifest> {\n if (!['linux', 'win32'].includes(process.platform) || process.arch !== 'x64') throw new Error('Build inicial suporta Linux x64 e Windows x64.');\n const lock = await verifySource(config);\n const contract = await generatedManifest(config);\n if (contract.sourceRevision !== lock.source.revision || contract.sourceHash !== lock.source.treeHash) throw new Error('Contrato gerado n\u00E3o corresponde \u00E0s fontes travadas. Execute generate.');\n const lazarus = await findLazarus(config);\n const source = config.source.directory;\n const target = options.testOnly ? join(config.projectRoot, '.acbr/test-runtime', `${process.platform}-${process.arch}`) : runtimeDirectory(config);\n const stage = join(dirname(target), `.runtime-stage-${randomUUID()}`);\n const units = join(stage, '.units');\n await mkdir(units, { recursive: true });\n const executable = process.platform === 'win32' ? 'acbr-worker.exe' : 'acbr-worker';\n try {\n const cpu = (await runCommand(config.native.fpc, ['-iTP'])).stdout.trim();\n if (cpu !== 'x86_64') throw new Error(`FPC deve compilar x86_64, encontrado ${cpu}.`);\n const targetOs = process.platform === 'win32' ? 'win64' : 'linux';\n const fontPaths = await subdirectories(join(source, 'Fontes'));\n const lazPaths = [join(lazarus, 'components/lazutils/lib', `x86_64-${targetOs}`), join(lazarus, 'lcl/units', `x86_64-${targetOs}`), join(lazarus, 'lcl/units', `x86_64-${targetOs}`, 'nogui'), join(lazarus, 'packager/units', `x86_64-${targetOs}`)];\n const searchPaths = [dirname(config.native.project), join(config.generator.outputDir, 'native/generated'), ...fontPaths, ...lazPaths];\n const args = ['-vew', '-Mdelphi', '-Scghi', '-O2', '-g-', '-dNOGUI', '-dNOREPORT', ...(options.testOnly ? ['-dACBR_NODE_TEST'] : []), `-FU${units}`, `-FE${stage}`, `-o${executable}`,\n ...searchPaths.map(path => `-Fu${path}`), ...fontPaths.map(path => `-Fi${path}`), config.native.project];\n const responseFile = join(stage, '.compiler.rsp');\n if (args.some(arg => /[\\\"\\r\\n]/.test(arg))) throw new Error('Caminhos do build n\u00E3o podem conter aspas ou quebras de linha.');\n await writeFile(responseFile, args.slice(0, -1).join('\\n') + '\\n');\n const logPath = join(config.projectRoot, '.acbr/build.log');\n try {\n const compilation = await runCommand(config.native.fpc, [`@${responseFile}`, config.native.project], { cwd: config.projectRoot, maxOutputBytes: 32 * 1024 * 1024 });\n await writeFile(logPath, compilation.stdout + compilation.stderr);\n } catch (error) {\n const compilation = error as Error & { stdout?: string; stderr?: string };\n await writeFile(logPath, (compilation.stdout ?? '') + (compilation.stderr ?? compilation.message));\n throw new Error(`${compilation.message}\\nLog completo: ${logPath}`, { cause: compilation });\n }\n const systemDependencies = process.platform === 'linux' ? await copyLinuxLibraries(stage) : (await copyExplicitLibraries(config, stage), []);\n const schemas = join(source, 'Exemplos/ACBrDFe/Schemas/NFe');\n await copyTree(schemas, join(stage, 'schemas'));\n const services = join(source, 'Fontes/ACBrDFe/ACBrNFe/ACBrNFeServicos.ini');\n await copyFile(services, join(stage, 'ACBrNFeServicos.ini'));\n await mkdir(join(stage, 'licenses'), { recursive: true });\n await copyFile(join(source, 'Doctos/LICENSE.TXT'), join(stage, 'licenses/ACBr-LICENSE.TXT'));\n await mkdir(join(stage, 'sources/native'), { recursive: true });\n await copyNativeSources(dirname(config.native.project), join(stage, 'sources/native'));\n await copyFile(join(config.generator.outputDir, 'native/generated/AcbrModels.pas'), join(stage, 'sources/native/AcbrModels.pas'));\n for (const name of ['fp-compiler-3.2.2', 'fp-units-rtl-3.2.2', 'fpc']) {\n const license = `/usr/share/doc/${name}/copyright`;\n if (await exists(license)) { await copyFile(license, join(stage, 'licenses/FPC-copyright.txt')); break; }\n }\n await copyCompilerLicenses(config, stage, lazarus);\n const archive = join(stage, 'sources/acbr-source.tar.gz');\n const tarArgs = process.platform === 'linux' ? ['--sort=name', '--mtime=@0', '--owner=0', '--group=0', '--numeric-owner', '-I', 'gzip -n'] : [];\n await runCommand('tar', [...tarArgs, process.platform === 'linux' ? '-cf' : '-czf', archive, '-C', source, 'Fontes', 'Exemplos/ACBrDFe/Schemas/NFe', 'Doctos/LICENSE.TXT']);\n await writeFile(join(stage, 'sources/build.json'), `${JSON.stringify({ sourceRevision: lock.source.revision, sourceUrl: lock.source.url, sourceTreeHash: lock.source.treeHash,\n compiler: (await runCommand(config.native.fpc, ['-iV'])).stdout.trim(), lazarusRoot: lazarus, lazarusVersion: basename(lazarus),\n compilerSourceUrl: 'https://gitlab.com/freepascal.org/fpc/source/-/tree/release_3_2_2', testOnly: options.testOnly ?? false, platform: process.platform, arch: process.arch,\n flags: ['-Mdelphi', '-Scghi', '-O2', '-dNOGUI', '-dNOREPORT'], sourceParts: lock.source.parts }, null, 2)}\\n`);\n await rm(units, { recursive: true, force: true });\n await rm(responseFile, { force: true });\n if (process.platform !== 'win32') await chmod(join(stage, executable), 0o755);\n const currentGenerated = await generatedManifest(config);\n if (currentGenerated.contractHash !== contract.contractHash || currentGenerated.sourceHash !== contract.sourceHash ||\n Object.entries(contract.fileHashes).some(([name, hash]) => currentGenerated.fileHashes[name] !== hash)) throw new Error('Arquivos gerados mudaram durante a compila\u00E7\u00E3o. Execute build novamente.');\n const currentSource = await verifySource(config);\n if (currentSource.source.revision !== lock.source.revision || currentSource.source.treeHash !== lock.source.treeHash) throw new Error('Fontes ACBr foram atualizadas durante a compila\u00E7\u00E3o. Execute generate e build novamente.');\n const files = (await snapshotSource(stage)).files;\n const manifest: BuiltRuntimeManifest = { formatVersion: 1, sourceRevision: lock.source.revision, contractHash: contract.contractHash,\n platform: process.platform, arch: process.arch, executable, files, generatedFileHashes: contract.fileHashes, systemDependencies, ...(options.testOnly ? { testOnly: true } : {}) };\n await writeFile(join(stage, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n await replaceRuntime(stage, target);\n return manifest;\n } finally { await rm(stage, { recursive: true, force: true }); }\n}\nasync function copyNativeSources(source: string, target: string): Promise<void> {\n await mkdir(target, { recursive: true });\n for (const entry of await readdir(source, { withFileTypes: true })) {\n if (entry.isDirectory() && !entry.name.startsWith('.')) await copyNativeSources(join(source, entry.name), join(target, entry.name));\n else if (entry.isFile() && /\\.(pas|lpr|inc|lpi)$/i.test(entry.name)) await copyFile(join(source, entry.name), join(target, entry.name));\n }\n}\nasync function copyTree(source: string, target: string): Promise<void> {\n await mkdir(target, { recursive: true });\n for (const entry of await readdir(source, { withFileTypes: true })) {\n if (entry.isSymbolicLink()) throw new Error(`Arquivo de distribui\u00E7\u00E3o n\u00E3o pode ser link: ${entry.name}.`);\n if (entry.isDirectory()) await copyTree(join(source, entry.name), join(target, entry.name));\n else if (entry.isFile()) await copyFile(join(source, entry.name), join(target, entry.name));\n }\n}\nasync function replaceRuntime(stage: string, target: string): Promise<void> {\n const backup = `${target}.${randomUUID()}.backup`;\n const hadTarget = await exists(target);\n if (hadTarget) await rename(target, backup);\n try { await rename(stage, target); }\n catch (error) { if (hadTarget) await rename(backup, target); throw error; }\n if (hadTarget) await rm(backup, { recursive: true, force: true });\n}\nexport async function checkBuild(config: AcbrConfig): Promise<BuiltRuntimeManifest> {\n const lock = await verifySource(config);\n const generated = await generatedManifest(config);\n const directory = runtimeDirectory(config);\n const manifest = JSON.parse(await readFile(join(directory, 'manifest.json'), 'utf8')) as BuiltRuntimeManifest;\n if (manifest.formatVersion !== 1 || manifest.platform !== process.platform || manifest.arch !== process.arch ||\n manifest.sourceRevision !== lock.source.revision || generated.sourceHash !== lock.source.treeHash || manifest.contractHash !== generated.contractHash ||\n !manifest.generatedFileHashes || Object.entries(generated.fileHashes).some(([name, hash]) => manifest.generatedFileHashes[name] !== hash) ||\n typeof manifest.executable !== 'string' || !manifest.files || !Object.hasOwn(manifest.files, manifest.executable)) throw new Error('Runtime diverge das fontes ou contrato. Execute build.');\n for (const [path, expected] of Object.entries(manifest.files)) {\n if (path.startsWith('/') || path.includes('\\\\') || path.split('/').includes('..') || !/^[a-f0-9]{64}$/.test(expected)) throw new Error(`Caminho/hash inv\u00E1lido no runtime: ${path}.`);\n if (await fileHash(join(directory, path)) !== expected) throw new Error(`Hash inv\u00E1lido no runtime: ${path}.`);\n }\n return manifest;\n}\nexport interface DoctorItem { name: string; ok: boolean; detail: string; }\nexport async function doctor(config?: AcbrConfig): Promise<DoctorItem[]> {\n const items: DoctorItem[] = [{ name: 'Node.js', ok: (Number(process.versions.node.split('.')[0]) > 22 || (Number(process.versions.node.split('.')[0]) === 22 && Number(process.versions.node.split('.')[1]) >= 12)), detail: process.versions.node }];\n for (const [name, command, args] of [['SVN', 'svn', ['--version', '--quiet']], ['Free Pascal', config?.native.fpc ?? 'fpc', ['-iV']]] as const) {\n try { const result = await runCommand(command, [...args]); items.push({ name, ok: true, detail: result.stdout.trim() }); }\n catch (error) { items.push({ name, ok: false, detail: (error as Error).message }); }\n }\n if (config) {\n try { items.push({ name: 'Lazarus', ok: true, detail: await findLazarus(config) }); }\n catch (error) { items.push({ name: 'Lazarus', ok: false, detail: (error as Error).message }); }\n try { const lock = await verifySource(config); items.push({ name: 'Fontes ACBr', ok: true, detail: `revis\u00E3o ${lock.source.revision}, ${lock.source.treeHash}` }); }\n catch (error) { items.push({ name: 'Fontes ACBr', ok: false, detail: (error as Error).message }); }\n }\n if (process.platform === 'linux') {\n try { const result = await runCommand('ldconfig', ['-p']); const missing = REQUIRED_DYNAMIC.filter(name => !result.stdout.includes(name)); items.push({ name: 'OpenSSL/libxml2 din\u00E2micos', ok: missing.length === 0, detail: missing.length ? `Ausentes: ${missing.join(', ')}` : REQUIRED_DYNAMIC.join(', ') }); }\n catch (error) { items.push({ name: 'OpenSSL/libxml2 din\u00E2micos', ok: false, detail: (error as Error).message }); }\n }\n return items;\n}\n\nasync function copyCompilerLicenses(config: AcbrConfig, stage: string, lazarus: string): Promise<void> {\n const packagedLazarus = fileURLToPath(new URL('../docs/licenses/lazarus/', import.meta.url));\n const packagedFpc = fileURLToPath(new URL('../docs/licenses/fpc/', import.meta.url));\n const notices: Record<string, { source: string; sha256: string }> = {};\n async function copyNotice(name: string, candidates: string[]): Promise<void> {\n for (const source of candidates) if (await exists(source)) {\n await copyFile(source, join(stage, 'licenses', name));\n notices[name] = { source, sha256: await fileHash(source) };\n return;\n }\n throw new Error(`Notice obrigat\u00F3rio ausente: ${name}.`);\n }\n for (const name of ['COPYING.txt', 'COPYING.LGPL.txt', 'COPYING.modifiedLGPL.txt']) {\n await copyNotice(`Lazarus-${name}`, [join(lazarus, name), join(lazarus, 'docs', name), join(packagedLazarus, name)]);\n }\n if (await exists(join(packagedLazarus, 'ORIGIN.json'))) await copyFile(join(packagedLazarus, 'ORIGIN.json'), join(stage, 'licenses/Lazarus-notice-origin.json'));\n const fpcRoot = resolve(dirname(config.native.fpc), '../..');\n const sourceRoots = [join(fpcRoot, 'source'), join(lazarus, 'fpc/3.2.2/source'), '/usr/share/fpcsrc/3.2.2'];\n for (const [name, sourceRelative] of [['COPYING.GPL.txt', 'compiler/COPYING.txt'], ['COPYING.LGPL.txt', 'rtl/COPYING.txt'], ['COPYING.FPC', 'rtl/COPYING.FPC']] as const) {\n await copyNotice(`FPC-${name}`, [...sourceRoots.map(directory => join(directory, sourceRelative)), join(packagedFpc, name)]);\n }\n if (await exists(join(packagedFpc, 'ORIGIN.json'))) await copyFile(join(packagedFpc, 'ORIGIN.json'), join(stage, 'licenses/FPC-notice-origin.json'));\n const candidates = [join(fpcRoot, 'doc'), fpcRoot, join(lazarus, 'fpc'), '/usr/share/doc/fp-compiler-3.2.2', '/usr/share/doc/fp-units-rtl-3.2.2'];\n for (const directory of candidates) {\n if (!(await exists(directory))) continue;\n for (const name of await readdir(directory)) {\n if (/^(?:copying|license|copyright)/i.test(name) && (await stat(join(directory, name))).isFile()) await copyFile(join(directory, name), join(stage, 'licenses', `FPC-${basename(directory)}-${name}`));\n }\n }\n await writeFile(join(stage, 'licenses/toolchain-notices.json'), `${JSON.stringify(notices, null, 2)}\\n`);\n}\n", "import { spawn } from 'node:child_process';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { createReadStream } from 'node:fs';\nimport { access, mkdir, readdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\nimport { SOURCE_PARTS, type AcbrConfig } from './config.js';\n\nexport interface SourceSnapshot { treeHash: string; files: Record<string, string>; }\nexport interface SourceLock {\n formatVersion: 1;\n source: { url: string; revision: number; parts: string[]; treeHash: string; files: Record<string, string> };\n}\nexport interface CommandResult { stdout: string; stderr: string; }\nexport async function runCommand(command: string, args: string[], options: { cwd?: string; env?: NodeJS.ProcessEnv; maxOutputBytes?: number } = {}): Promise<CommandResult> {\n return new Promise((done, fail) => {\n const child = spawn(command, args, { cwd: options.cwd, env: options.env ?? process.env, stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true, shell: false });\n let stdout = ''; let stderr = ''; let overflow = false;\n const maximum = options.maxOutputBytes ?? 16 * 1024 * 1024;\n const append = (kind: 'stdout' | 'stderr', data: Buffer) => {\n if (overflow) return;\n if (kind === 'stdout') stdout += data.toString('utf8'); else stderr += data.toString('utf8');\n if (Buffer.byteLength(stdout) + Buffer.byteLength(stderr) > maximum) { overflow = true; child.kill(); }\n };\n child.stdout.on('data', data => append('stdout', data)); child.stderr.on('data', data => append('stderr', data));\n child.on('error', error => fail(new Error(`N\u00E3o foi poss\u00EDvel executar ${command}: ${error.message}`, { cause: error })));\n child.on('close', code => {\n if (overflow) fail(new Error(`Sa\u00EDda de ${command} excedeu o limite de ${maximum} bytes.`));\n else if (code !== 0) {\n const diagnostic = (stderr || stdout).split('\\n').slice(-80).join('\\n').slice(-16000);\n fail(Object.assign(new Error(`${command} terminou com c\u00F3digo ${code}:\\n${diagnostic}`), { stdout, stderr }));\n }\n else done({ stdout, stderr });\n });\n });\n}\nexport async function fileHash(path: string): Promise<string> {\n const hash = createHash('sha256');\n for await (const chunk of createReadStream(path)) hash.update(chunk);\n return hash.digest('hex');\n}\nexport async function snapshotSource(directory: string): Promise<SourceSnapshot> {\n const files: Record<string, string> = Object.create(null);\n async function scan(current: string): Promise<void> {\n const entries = (await readdir(current, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name, 'en'));\n for (const entry of entries) {\n if (entry.name === '.svn') continue;\n const path = join(current, entry.name);\n if (entry.isSymbolicLink()) throw new Error(`Fonte ACBr cont\u00E9m link simb\u00F3lico: ${path}.`);\n if (entry.isDirectory()) await scan(path);\n else if (entry.isFile()) files[relative(directory, path).split(sep).join('/')] = await fileHash(path);\n else throw new Error(`Fonte ACBr cont\u00E9m arquivo especial: ${path}.`);\n }\n }\n await scan(resolve(directory));\n const sortedFiles = Object.fromEntries(Object.entries(files).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));\n const treeHash = createHash('sha256').update(JSON.stringify(sortedFiles)).digest('hex');\n return { treeHash, files: sortedFiles };\n}\nfunction validateLock(value: unknown): SourceLock {\n if (!value || typeof value !== 'object') throw new Error('Lock ACBr inv\u00E1lido.');\n const lock = value as SourceLock;\n if (lock.formatVersion !== 1 || !lock.source || !Number.isSafeInteger(lock.source.revision) || lock.source.revision < 1 ||\n !Array.isArray(lock.source.parts) || !lock.source.files || typeof lock.source.files !== 'object' || Array.isArray(lock.source.files) ||\n !/^[a-f0-9]{64}$/.test(lock.source.treeHash)) throw new Error('Formato inv\u00E1lido em acbr.lock.json.');\n for (const [path, hash] of Object.entries(lock.source.files)) {\n if (path.startsWith('/') || path.includes('\\\\') || path.split('/').includes('..') || !/^[a-f0-9]{64}$/.test(hash)) throw new Error('Caminho ou hash inv\u00E1lido no lock ACBr.');\n }\n if (lock.source.parts.join('\\n') !== SOURCE_PARTS.join('\\n')) throw new Error('Partes ACBr divergentes no lock.');\n return lock;\n}\nexport async function readSourceLock(config: AcbrConfig): Promise<SourceLock> {\n let lock: SourceLock;\n try { lock = validateLock(JSON.parse(await readFile(config.lockPath, 'utf8'))); }\n catch (error) { throw new Error(`N\u00E3o foi poss\u00EDvel ler ${config.lockPath}. Execute acbr-node source update.`, { cause: error }); }\n if (lock.source.url !== config.source.url) throw new Error('URL ACBr do lock diverge da configura\u00E7\u00E3o.');\n if (config.source.revision !== 'HEAD' && lock.source.revision !== config.source.revision) throw new Error('Revis\u00E3o ACBr do lock diverge da configura\u00E7\u00E3o. Execute source update explicitamente.');\n return lock;\n}\nexport async function verifySource(config: AcbrConfig): Promise<SourceLock> {\n try {\n await access(`${config.lockPath}.operation`);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return verifySourceContents(config);\n throw error;\n }\n throw new Error('Atualiza\u00E7\u00E3o de fontes ACBr em andamento. Aguarde o CLI concluir.');\n}\nasync function verifySourceContents(config: AcbrConfig): Promise<SourceLock> {\n const lock = await readSourceLock(config);\n const snapshot = await snapshotSource(config.source.directory);\n if (snapshot.treeHash !== lock.source.treeHash) {\n const names = new Set([...Object.keys(snapshot.files), ...Object.keys(lock.source.files)]);\n const changed = [...names].filter(path => snapshot.files[path] !== lock.source.files[path]);\n throw new Error(`Fontes ACBr divergem do lock (${changed.length} arquivo(s)): ${changed.slice(0, 10).join(', ')}. Preserve as altera\u00E7\u00F5es antes de atualizar.`);\n }\n return lock;\n}\nasync function writeLock(config: AcbrConfig, snapshot: SourceSnapshot, revision: number): Promise<SourceLock> {\n const lock: SourceLock = { formatVersion: 1, source: { url: config.source.url, revision, parts: [...SOURCE_PARTS], ...snapshot } };\n await mkdir(dirname(config.lockPath), { recursive: true });\n const temporary = `${config.lockPath}.${randomUUID()}.tmp`;\n await writeFile(temporary, `${JSON.stringify(lock, null, 2)}\\n`, { flag: 'wx' });\n try { await rename(temporary, config.lockPath); } finally { await rm(temporary, { force: true }); }\n return lock;\n}\nexport async function lockExistingSource(config: AcbrConfig, revision: number): Promise<SourceLock> {\n return withSourceOperation(config, () => performLockExistingSource(config, revision));\n}\nasync function performLockExistingSource(config: AcbrConfig, revision: number): Promise<SourceLock> {\n if (!Number.isSafeInteger(revision) || revision < 1) throw new Error('Uma revis\u00E3o SVN positiva \u00E9 obrigat\u00F3ria para registrar fontes existentes.');\n try { await access(config.lockPath); } catch { return writeLock(config, await snapshotSource(config.source.directory), revision); }\n throw new Error('O lock j\u00E1 existe. Use source update para atualizar fontes e lock em conjunto.');\n}\nexport async function resolveSourceRevision(url: string, revision: 'HEAD' | number, runner: typeof runCommand = runCommand): Promise<number> {\n const { stdout } = await runner('svn', ['info', '--non-interactive', '--show-item', 'revision', '-r', String(revision), url]);\n const resolved = Number(stdout.trim());\n if (!Number.isSafeInteger(resolved) || resolved < 1) throw new Error('SVN n\u00E3o retornou uma revis\u00E3o v\u00E1lida.');\n return resolved;\n}\nasync function withSourceOperation<T>(config: AcbrConfig, operation: () => Promise<T>): Promise<T> {\n const marker = `${config.lockPath}.operation`;\n try { await writeFile(marker, `${JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() })}\\n`, { flag: 'wx' }); }\n catch (error) { throw new Error('Outra opera\u00E7\u00E3o de fontes ACBr est\u00E1 em andamento. Se o processo anterior terminou abruptamente, confira o PID do arquivo acbr.lock.json.operation antes de remov\u00EA-lo.', { cause: error }); }\n try { return await operation(); } finally { await rm(marker, { force: true }); }\n}\nexport async function updateSource(config: AcbrConfig, revision: 'HEAD' | number = 'HEAD', runner: typeof runCommand = runCommand): Promise<SourceLock> {\n return withSourceOperation(config, () => performUpdateSource(config, revision, runner));\n}\nasync function performUpdateSource(config: AcbrConfig, revision: 'HEAD' | number, runner: typeof runCommand): Promise<SourceLock> {\n const source = resolve(config.source.directory);\n if (source === config.projectRoot || source === dirname(source)) throw new Error('O diret\u00F3rio das fontes deve ser exclusivo e n\u00E3o pode ser a raiz do projeto ou do sistema.');\n let exists = false;\n try { const details = await stat(source); exists = true; if (!details.isDirectory()) throw new Error('O caminho das fontes n\u00E3o \u00E9 um diret\u00F3rio.'); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n if (exists && (await readdir(source)).length) await verifySourceContents({ ...config, source: { ...config.source, revision: 'HEAD' } });\n const resolvedRevision = await resolveSourceRevision(config.source.url, revision, runner);\n const stage = join(dirname(source), `.acbr-source-stage-${randomUUID()}`);\n const backup = join(dirname(source), `.acbr-source-backup-${randomUUID()}`);\n await mkdir(stage, { recursive: true });\n let previousLock: string | undefined;\n try { previousLock = await readFile(config.lockPath, 'utf8'); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; }\n let backedUp = false; let replaced = false; let lockWritten = false;\n try {\n for (const part of SOURCE_PARTS) {\n const destination = join(stage, ...part.split('/'));\n await mkdir(dirname(destination), { recursive: true });\n await runner('svn', ['export', '--non-interactive', '-q', '-r', String(resolvedRevision), `${config.source.url}/${part}`, destination], { maxOutputBytes: 4 * 1024 * 1024 });\n }\n const snapshot = await snapshotSource(stage);\n if (exists) { await rename(source, backup); backedUp = true; }\n await rename(stage, source); replaced = true;\n const lock = await writeLock(config, snapshot, resolvedRevision); lockWritten = true;\n await persistRevision(config, resolvedRevision);\n config.source.revision = resolvedRevision;\n if (backedUp) await rm(backup, { recursive: true, force: true }).catch(() => undefined);\n return lock;\n } catch (error) {\n if (lockWritten) {\n if (previousLock === undefined) await rm(config.lockPath, { force: true });\n else await writeFile(config.lockPath, previousLock);\n }\n if (replaced) await rm(source, { recursive: true, force: true });\n if (backedUp) await rename(backup, source);\n throw error;\n } finally { await rm(stage, { recursive: true, force: true }); }\n}\n\nasync function persistRevision(config: AcbrConfig, revision: number): Promise<void> {\n const original = JSON.parse(await readFile(config.configPath, 'utf8')) as { source: { revision: number } };\n original.source.revision = revision;\n const temporary = `${config.configPath}.${randomUUID()}.tmp`;\n await writeFile(temporary, `${JSON.stringify(original, null, 2)}\\n`, { flag: 'wx' });\n try { await rename(temporary, config.configPath); } finally { await rm(temporary, { force: true }); }\n}\n", "import { spawn, type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from 'node:child_process';\r\nimport { readFile, stat } from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { createRequire } from 'node:module';\r\nimport { createHash, randomUUID } from 'node:crypto';\r\nimport { TextDecoder } from 'node:util';\r\nimport { ErroAcbrNode, type DetalhesErroAcbr, type ConfiguracaoEmissor, type Contrato, type ConfiguracaoMotor, type RequisicaoMotor, type ResultadoFiscal, type RuntimeManifest, type OpcoesOperacao, type Consulta, type Cancelamento, type CartaCorrecao, type Inutilizacao } from './types.js';\r\nimport { diagnosticarResultado, etapaDaOperacao } from './diagnostics.js';\r\nexport * from './types.js';\r\nexport { diagnosticarErro, diagnosticarResultado } from './diagnostics.js';\r\ntype Launch = (exe: string, args: string[], config: SpawnOptionsWithoutStdio) => ChildProcessWithoutNullStreams;\r\nexport interface OpcoesEmissor extends ConfiguracaoEmissor {\r\n contrato: Contrato; runtimeDirectory?: string; timeoutMs?: number; limiteFila?: number; limiteBytes?: number;\r\n validaDocumento?: (documento: unknown) => void;\r\n /** Inje\u00E7\u00E3o para testes offline. O padr\u00E3o sempre inicia o motor distribu\u00EDdo. */\r\n criaProcesso?: Launch;\r\n}\r\nconst STATES = new Set(['DENEGADO','XML_GERADO','VALIDADO','ASSINADO','AUTORIZADO','REJEITADO','PENDENTE','INDETERMINADO','CONSULTADO','CANCELADO','EVENTO_REGISTRADO','INUTILIZADO','ERRO']);\r\nconst UFS = new Set('AC AL AP AM BA CE DF ES GO MA MT MS MG PA PB PR PE PI RJ RN RS RO RR SC SP SE TO'.split(' '));\r\nconst MAX_BYTES = 8 * 1024 * 1024;\r\nconst MAX_TEARDOWN_MS = 1000;\r\nconst plain = (v: unknown): v is Record<string,unknown> => v !== null && typeof v === 'object' && !Array.isArray(v);\r\nconst validContract = (v: unknown): v is Contrato => plain(v) && Number.isInteger(v.sourceRevision) && Number(v.sourceRevision)>0 && typeof v.contractHash==='string' && /^[a-f0-9]{64}$/.test(v.contractHash);\r\nconst fail = (code: string, message: string, req?: RequisicaoMotor, unknown=false, detalhes?:DetalhesErroAcbr) => new ErroAcbrNode(code,message,unknown,req?.comando==='transmitir'?req.xmlBase64:undefined,{...(req?{etapa:etapaDaOperacao(req.comando)}:{}),...detalhes});\r\nfunction confined(root: string, relative: string): string {\r\n const file=path.resolve(root,relative), part=path.relative(root,file);\r\n if(!relative || path.isAbsolute(relative) || part==='..' || part.startsWith('..'+path.sep)) throw fail('RUNTIME_INVALIDO','Caminho inv\u00E1lido no runtime.');\r\n return file;\r\n}\r\nasync function resolveRuntime(directory: string | undefined, contract: Contrato): Promise<{directory:string;executable:string}> {\r\n if(!validContract(contract)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\r\n let root=directory;\r\n if(!root) {\r\n if(!['linux','win32'].includes(process.platform) || process.arch!=='x64') throw fail('PLATAFORMA_NAO_SUPORTADA','Esta vers\u00E3o exige Linux ou Windows x64.');\r\n try { const require=createRequire(typeof __filename!=='undefined'?__filename:import.meta.url); root=path.join(path.dirname(require.resolve('cosmemilton-acbr-node-'+process.platform+'-x64/package.json')),'runtime'); }\r\n catch { throw fail('RUNTIME_AUSENTE','Instale o pacote de runtime da plataforma ou informe runtimeDirectory.'); }\r\n }\r\n root=path.resolve(root);\r\n let m: RuntimeManifest;\r\n try { m=JSON.parse(await readFile(path.join(root,'manifest.json'),'utf8')); } catch { throw fail('RUNTIME_AUSENTE','Manifesto do runtime n\u00E3o encontrado.'); }\r\n if(!validContract(m) || m.formatVersion!==1 || !plain(m.files) || typeof m.executable!=='string' || m.platform!==process.platform || m.arch!==process.arch) throw fail('RUNTIME_INVALIDO','Manifesto ou plataforma do runtime inv\u00E1lidos.');\r\n if(m.sourceRevision!==contract.sourceRevision || m.contractHash!==contract.contractHash) throw fail('CONTRATO_DIVERGENTE','Cliente e motor foram gerados de contratos diferentes; regenere e recompile.');\r\n for(const [name,hash] of Object.entries(m.files)) {\r\n if(typeof hash!=='string'||!/^[a-f0-9]{64}$/.test(hash)) throw fail('RUNTIME_INVALIDO','Hash inv\u00E1lido no runtime.');\r\n const file=confined(root,name); let data:Buffer;\r\n try { if(!(await stat(file)).isFile()) throw Error(); data=await readFile(file); } catch { throw fail('RUNTIME_INCOMPLETO','Arquivo do runtime ausente.'); }\r\n if(createHash('sha256').update(data).digest('hex')!==hash) throw fail('RUNTIME_ALTERADO','O runtime n\u00E3o corresponde ao manifesto distribu\u00EDdo.');\r\n }\r\n if(!m.files[m.executable]) throw fail('RUNTIME_INVALIDO','O execut\u00E1vel n\u00E3o consta no invent\u00E1rio.');\r\n return {directory:root,executable:confined(root,m.executable)};\r\n}\r\ninterface Pending { req:RequisicaoMotor; bytes:Buffer; signal?:AbortSignal; resolve:(v:ResultadoFiscal)=>void; reject:(e:unknown)=>void; abort?:()=>void }\r\nexport function criarEmissor(options: OpcoesEmissor) {\r\n const configFail=(campo?:string)=>fail('CONFIGURACAO_INVALIDA','Informe campos e tipos v\u00E1lidos na configura\u00E7\u00E3o.',undefined,false,{etapa:'configuracao',campo});\r\n if(!plain(options))throw configFail();\r\n if(typeof options.cnpj!=='string'||!/^\\d{14}$/.test(options.cnpj))throw configFail('cnpj');\r\n if(typeof options.uf!=='string'||!UFS.has(options.uf))throw configFail('uf');\r\n if(![55,65].includes(options.modelo))throw configFail('modelo');\r\n if(![1,2].includes(options.ambiente))throw configFail('ambiente');\r\n if(!validContract(options.contrato)) throw fail('CONTRATO_INVALIDO','Contrato gerado inv\u00E1lido.');\r\n const cert=options.certificado;\r\n if(cert!==undefined && (!plain(cert)||typeof cert.senha!=='string'||!!cert.pfx===!!cert.arquivo||cert.pfx!==undefined&&!(cert.pfx instanceof Uint8Array)||cert.arquivo!==undefined&&(typeof cert.arquivo!=='string'||!cert.arquivo))) throw fail('CERTIFICADO_INVALIDO','Informe A1 em pfx ou arquivo e sua senha.',undefined,false,{campo:'certificado'});\r\n if(options.csc!==undefined && (!plain(options.csc)||typeof options.csc.id!=='string'||!/^\\d{1,6}$/.test(options.csc.id)||typeof options.csc.valor!=='string'||!options.csc.valor||options.csc.valor.length>256)) throw fail('CSC_INVALIDO','CSC inv\u00E1lido.',undefined,false,{campo:'csc'});\r\n if(options.runtimeDirectory!==undefined&&(typeof options.runtimeDirectory!=='string'||!options.runtimeDirectory))throw configFail('runtimeDirectory');\r\n if(options.validaDocumento!==undefined&&typeof options.validaDocumento!=='function'||options.criaProcesso!==undefined&&typeof options.criaProcesso!=='function')throw configFail();\r\n const cfg:Omit<ConfiguracaoEmissor, 'certificado'>={cnpj:options.cnpj,uf:options.uf,modelo:options.modelo,ambiente:options.ambiente,csc:options.csc?{...options.csc}:undefined};\r\n const certificate=cert?{...cert,pfx:cert.pfx?Buffer.from(cert.pfx):undefined}:undefined;\r\n const contract={...options.contrato};\r\n const timeout=options.timeoutMs??120_000, capacity=options.limiteFila??32, bytesLimit=options.limiteBytes??MAX_BYTES;\r\n if(!Number.isInteger(timeout)||timeout<1||timeout>120000)throw configFail('timeoutMs');\r\n if(!Number.isInteger(capacity)||capacity<0||capacity>1000)throw configFail('limiteFila');\r\n if(!Number.isInteger(bytesLimit)||bytesLimit<256||bytesLimit>MAX_BYTES)throw configFail('limiteBytes');\r\n const launch:Launch=options.criaProcesso??((exe,args,config)=>spawn(exe,args,{...config,stdio:['pipe','pipe','pipe']}));\r\n let runtimePromise:ReturnType<typeof resolveRuntime>|undefined, closed=false, teardownFailed=false, current:{stop:()=>void;done:Promise<void>}|undefined;\r\n const queue:Pending[]=[];\r\n const closedError=()=>{const error=fail('EMISSOR_FECHADO','Emissor encerrado.');if(teardownFailed)error.anotarFalhaLimpeza();return error;};\r\n const rejectQueue=()=>{for(const item of queue.splice(0)){item.signal?.removeEventListener('abort',item.abort!);item.bytes.fill(0);item.reject(closedError());}};\r\n async function execute(item:Pending):Promise<ResultadoFiscal> {\r\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n const runtime=await (runtimePromise??=resolveRuntime(options.runtimeDirectory,contract));\r\n if(closed||item.signal?.aborted) throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n return await new Promise<ResultadoFiscal>((done,rejectExecution)=>{\r\n let stopError:ErroAcbrNode|undefined; let child:ChildProcessWithoutNullStreams|undefined, finished=false, started=false, sending=false, total=0, rest=Buffer.alloc(0), result:ResultadoFiscal|undefined;\r\n let teardownTimer:ReturnType<typeof setTimeout>|undefined;\r\n let finishCurrent!:()=>void; const doneCurrent=new Promise<void>(r=>{finishCurrent=r;});\r\n const uncertain=()=>['transmitir','cancelar','cartaCorrecao','inutilizar'].includes(item.req.comando)&&started || sending;\r\n const finish=(error?:unknown)=>{\r\n if(finished)return; finished=true;clearTimeout(timer);clearTimeout(teardownTimer);item.signal?.removeEventListener('abort',abort);\r\n item.bytes.fill(0);if(current?.done===doneCurrent)current=undefined;finishCurrent();error?rejectExecution(error):done(result!);\r\n };\r\n const detachOwnedChild=()=>{\r\n // Somente os handles retornados por este launch; nunca enumera ou encerra processos alheios.\r\n for(const pipe of [child?.stdin,child?.stdout,child?.stderr]){\r\n try{pipe?.destroy();}catch{}\r\n try{(pipe as {unref?:()=>void}|undefined)?.unref?.();}catch{}\r\n }\r\n try{child?.unref();}catch{}\r\n };\r\n const teardownFallback=()=>{\r\n if(finished)return;\r\n stopError??=fail('FALHA_MOTOR','O motor n\u00E3o foi encerrado.',item.req,uncertain());\r\n stopError.anotarFalhaLimpeza();teardownFailed=true;closed=true;\r\n rejectQueue();certificate?.pfx?.fill(0);\r\n // Finaliza antes de destroy/unref: esses m\u00E9todos podem disparar eventos s\u00EDncronos.\r\n finish(stopError);detachOwnedChild();\r\n };\r\n const stop=(code:string,message:string)=>{\r\n if(finished||stopError)return;\r\n stopError=fail(code,message,item.req,uncertain());\r\n if(!child?.pid){finish(stopError);detachOwnedChild();return;}\r\n teardownTimer=setTimeout(teardownFallback,MAX_TEARDOWN_MS);\r\n try{if(child.kill('SIGKILL')!==true)teardownFallback();}catch{teardownFallback();}\r\n };\r\n const abort=()=>stop('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada; confira a situa\u00E7\u00E3o fiscal quando o envio foi iniciado.');\r\n const timer=setTimeout(()=>stop('TIMEOUT_MOTOR','O motor excedeu o prazo; consulte a situa\u00E7\u00E3o antes de transmitir novamente.'),timeout);\r\n current={stop:()=>stop('EMISSOR_FECHADO','Emissor encerrado.'),done:doneCurrent};\r\n const env:NodeJS.ProcessEnv={};\r\n for(const key of ['PATH','Path','SystemRoot','WINDIR','TEMP','TMP','HOME','LANG','LC_ALL']) if(process.env[key]!==undefined)env[key]=process.env[key];\r\n if(process.platform==='linux')env.LD_LIBRARY_PATH=path.join(runtime.directory,'lib');\r\n if(process.platform==='win32'){const inheritedPath=env.Path??env.PATH??'';delete env.Path;env.PATH=path.join(runtime.directory,'lib')+';'+runtime.directory+';'+inheritedPath;}\r\n const modules=path.join(runtime.directory,'ossl-modules'); env.OPENSSL_MODULES=modules; env.OPENSSL_CONF=path.join(runtime.directory,'openssl.cnf');\r\n try { child=launch(runtime.executable,['--parent-pid',String(process.pid)],{cwd:runtime.directory,env,windowsHide:true,shell:false,stdio:['pipe','pipe','pipe']}); started=typeof child.pid==='number'; }\r\n catch { finish(fail('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.',item.req)); return; }\r\n item.signal?.addEventListener('abort',abort,{once:true});\r\n child.on('spawn',()=>{started=true;});\r\n child.on('error',()=>{if(finished)return;if(stopError){teardownFallback();return;}stop('FALHA_INICIAR_MOTOR','N\u00E3o foi poss\u00EDvel iniciar o motor.');});\r\n child.stdin.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stdout.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stderr.on('error',()=>stop('FALHA_PIPE','N\u00E3o foi poss\u00EDvel comunicar com o motor.'));\r\n child.stderr.on('data',()=>{}); // stderr bruto nunca \u00E9 exposto: pode conter mensagens de depend\u00EAncias.\r\n child.stdout.on('data',(chunk:Buffer)=>{\r\n if(finished||stopError)return;total+=chunk.length;if(total>bytesLimit){stop('RESPOSTA_EXCESSIVA','Resposta do motor excede o limite.');return;}\r\n rest=Buffer.concat([rest,chunk]);let end:number;\r\n while((end=rest.indexOf(10))>=0) {\r\n const line=rest.subarray(0,end);rest=rest.subarray(end+1);if(!line.length)continue;\r\n try {\r\n const frame=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(line));\r\n if(!plain(frame)||frame.id!==item.req.id)throw Error();\r\n if(frame.tipo==='envioIniciado'){sending=true;continue;}\r\n if(result||frame.versao!==1||frame.sourceRevision!==contract.sourceRevision||frame.contractHash!==contract.contractHash||typeof frame.sucesso!=='boolean'||!STATES.has(String(frame.estado)))throw Error();\r\n if(frame.xmlBase64!==undefined&&(typeof frame.xmlBase64!=='string'||!frame.xmlBase64.length||Buffer.from(frame.xmlBase64,'base64').toString('base64')!==frame.xmlBase64))throw Error();\r\n if(frame.cStat!==undefined&&(!Number.isInteger(frame.cStat)||Number(frame.cStat)<1||Number(frame.cStat)>9999))throw Error();\r\n if(frame.envioIniciado!==undefined&&typeof frame.envioIniciado!=='boolean'||sending&&frame.envioIniciado===false)throw Error();\r\n const fiscal=frame as unknown as ResultadoFiscal;\r\n result={...fiscal,diagnostico:diagnosticarResultado(sending?{...fiscal,envioIniciado:true}:fiscal,item.req.comando)};\r\n }catch{stop('RESPOSTA_INVALIDA','O motor retornou uma resposta inv\u00E1lida.');return;}\r\n }\r\n });\r\n child.on('close',(code)=>{\r\n if(finished)return;\r\n if(stopError){finish(stopError);return;}\r\n if(code!==0||rest.length||!result){finish(fail('FALHA_MOTOR','O motor encerrou sem resposta fiscal v\u00E1lida.',item.req,uncertain()));return;}\r\n finish();\r\n });\r\n child.stdin.end(item.bytes);\r\n if(item.signal?.aborted)abort();\r\n });\r\n }\r\n let busy=false;\r\n async function next(){if(busy)return;const item=queue.shift();if(!item)return;busy=true;item.signal?.removeEventListener('abort',item.abort!);try{const result=await execute(item);item.resolve(result);}catch(e){item.bytes.fill(0);item.reject(e);}finally{busy=false;void next();}}\r\n async function request(command:RequisicaoMotor['comando'],data:Partial<RequisicaoMotor>,operation:OpcoesOperacao={}):Promise<ResultadoFiscal> {\r\n const rawOperation:unknown=operation;\r\n if(!plain(rawOperation))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'operacao'});\r\n const signal:unknown=operation.signal;\r\n if(signal!==undefined&&(!plain(signal)||typeof signal.aborted!=='boolean'||typeof signal.addEventListener!=='function'||typeof signal.removeEventListener!=='function'))throw fail('OPERACAO_INVALIDA','Informe op\u00E7\u00F5es v\u00E1lidas para a opera\u00E7\u00E3o.',undefined,false,{etapa:etapaDaOperacao(command),campo:'signal'});\r\n if(closed)throw closedError();\r\n if(operation.signal?.aborted)throw fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.');\r\n if(['assinar','transmitir','consultar','cancelar','cartaCorrecao','inutilizar'].includes(command)&&!certificate)throw fail('CERTIFICADO_AUSENTE','A opera\u00E7\u00E3o exige um certificado A1.');\r\n if(command==='gerarXml')options.validaDocumento?.(data.documento);\r\n const config:ConfiguracaoMotor={...cfg};\r\n if(certificate){let pfx:Buffer;try{pfx=certificate.pfx??await readFile(certificate.arquivo!);}catch{throw fail('CERTIFICADO_AUSENTE','N\u00E3o foi poss\u00EDvel ler o A1 configurado.');}if(pfx.length>2*1024*1024)throw fail('CERTIFICADO_EXCESSIVO','Certificado excede o limite.');config.certificado={pfxBase64:pfx.toString('base64'),senha:certificate.senha};}\r\n let bytes:Buffer, req:RequisicaoMotor;\r\n try{bytes=Buffer.from(JSON.stringify({versao:1,id:randomUUID(),...contract,comando:command,config,...data})+'\\n','utf8');if(bytes.length>bytesLimit)throw Error();req=JSON.parse(bytes.toString('utf8'));}catch{throw fail('REQUISICAO_INVALIDA','Dados da opera\u00E7\u00E3o inv\u00E1lidos ou acima do limite.');}\r\n return new Promise((resolve,reject)=>{\r\n if(closed){bytes.fill(0);reject(closedError());return;}\r\n if(busy&&queue.length>=capacity){bytes.fill(0);reject(fail('FILA_CHEIA','A fila fiscal est\u00E1 cheia.'));return;}\r\n const item:Pending={req,bytes,signal:operation.signal,resolve,reject};\r\n item.abort=()=>{const i=queue.indexOf(item);if(i>=0){queue.splice(i,1);bytes.fill(0);operation.signal?.removeEventListener('abort',item.abort!);reject(fail('OPERACAO_CANCELADA','Opera\u00E7\u00E3o cancelada antes da execu\u00E7\u00E3o.'));}};\r\n operation.signal?.addEventListener('abort',item.abort,{once:true});queue.push(item);if(operation.signal?.aborted)item.abort();void next();\r\n });\r\n }\r\n const xmlData=(xml:string)=>{if(typeof xml!=='string'||!xml.trim()||Buffer.byteLength(xml,'utf8')>2*1024*1024)throw fail('XML_INVALIDO','XML vazio ou acima do limite.',undefined,false,{campo:'xml'});return {xmlBase64:Buffer.from(xml,'utf8').toString('base64')};};\r\n const checkKey=(key:string)=>{if(typeof key!=='string'||!/^\\d{44}$/.test(key))throw fail('CHAVE_INVALIDA','Chave fiscal inv\u00E1lida.',undefined,false,{campo:'chave'});};\r\n const reason=(value:string)=>{if(typeof value!=='string'||value.length<15||value.length>255)throw fail('JUSTIFICATIVA_INVALIDA','Justificativa deve ter de 15 a 255 caracteres.',undefined,false,{campo:'justificativa'});};\r\n const checkObject=(data:unknown,campo:string)=>{if(!plain(data))throw fail('OPERACAO_INVALIDA','Informe os par\u00E2metros da opera\u00E7\u00E3o como objeto.',undefined,false,{campo});};\r\n return {\r\n gerarXml:(documento:object,op?:OpcoesOperacao)=>request('gerarXml',{documento},op),\r\n validar:(xml:string,op?:OpcoesOperacao)=>request('validar',xmlData(xml),op),\r\n assinar:(xml:string,op?:OpcoesOperacao)=>request('assinar',xmlData(xml),op),\r\n transmitir:(xml:string,op?:OpcoesOperacao)=>request('transmitir',xmlData(xml),op),\r\n consultar:(consulta:Consulta,op?:OpcoesOperacao)=>{checkObject(consulta,'consulta');checkKey(consulta.chave);if(consulta.recibo!==undefined&&(typeof consulta.recibo!=='string'||!/^\\d{15}$/.test(consulta.recibo)))throw fail('RECIBO_INVALIDO','Recibo inv\u00E1lido.',undefined,false,{campo:'recibo'});return request('consultar',consulta,op);},\r\n cancelar:(data:Cancelamento,op?:OpcoesOperacao)=>{checkObject(data,'cancelamento');checkKey(data.chave);reason(data.justificativa);if(typeof data.protocolo!=='string'||!/^\\d{15}$/.test(data.protocolo))throw fail('PROTOCOLO_INVALIDO','Protocolo inv\u00E1lido.',undefined,false,{campo:'protocolo'});return request('cancelar',data,op);},\r\n cartaCorrecao:(data:CartaCorrecao,op?:OpcoesOperacao)=>{checkObject(data,'cartaCorrecao');if(cfg.modelo!==55)throw fail('OPERACAO_NAO_SUPORTADA','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.');checkKey(data.chave);if(typeof data.correcao!=='string'||data.correcao.length<15||data.correcao.length>1000||!Number.isInteger(data.sequenciaEvento??1)||(data.sequenciaEvento??1)<1||(data.sequenciaEvento??1)>20)throw fail('CORRECAO_INVALIDA','Dados da carta de corre\u00E7\u00E3o inv\u00E1lidos.',undefined,false,{campo:'cartaCorrecao'});return request('cartaCorrecao',{...data,sequenciaEvento:data.sequenciaEvento??1},op);},\r\n inutilizar:(data:Inutilizacao,op?:OpcoesOperacao)=>{checkObject(data,'inutilizacao');reason(data.justificativa);if(!Number.isInteger(data.ano)||data.ano<0||data.ano>99||!Number.isInteger(data.serie)||data.serie<0||data.serie>999||!Number.isInteger(data.numeroInicial)||data.numeroInicial<1||!Number.isInteger(data.numeroFinal)||data.numeroFinal<data.numeroInicial||data.numeroFinal>999999999)throw fail('INUTILIZACAO_INVALIDA','Faixa de inutiliza\u00E7\u00E3o inv\u00E1lida.',undefined,false,{campo:'inutilizacao'});return request('inutilizar',{inutilizacao:{ano:data.ano,serie:data.serie,numeroInicial:data.numeroInicial,numeroFinal:data.numeroFinal},justificativa:data.justificativa},op);},\r\n async fechar(){if(!closed){closed=true;rejectQueue();}const running=current;try{running?.stop();if(running)await running.done;}finally{certificate?.pfx?.fill(0);}}\r\n };\r\n}\r\nexport type Emissor = ReturnType<typeof criarEmissor>;\r\n", "import { ErroAcbrNode, type Comando, type DetalhesErroAcbr, type DiagnosticoAcbr, type EtapaAcbr, type ResultadoFiscal, type StatusEnvio } from './types.js';\r\n\r\nconst ETAPAS = new Set<EtapaAcbr>(['configuracao','documento','runtime','geracao','validacao','assinatura','transmissao','consulta','cancelamento','carta_correcao','inutilizacao','operacao','limpeza']);\r\nconst CAMPOS = new Set(['cnpj','uf','modelo','ambiente','contrato','certificado','certificado.senha','certificado.pfx','certificado.arquivo','csc','csc.id','csc.valor','timeoutMs','limiteFila','limiteBytes','runtimeDirectory','documento','xml','consulta','chave','recibo','cancelamento','protocolo','justificativa','cartaCorrecao','correcao','sequenciaEvento','inutilizacao','ano','serie','numeroInicial','numeroFinal','operacao','signal']);\r\nconst CATALOGO: Record<string, [EtapaAcbr, string, string]> = {\r\n CONFIGURACAO_INVALIDA: ['configuracao','A configura\u00E7\u00E3o cont\u00E9m um campo inv\u00E1lido.','Confira o campo indicado e seu tipo antes de continuar.'],\r\n CONTRATO_INVALIDO: ['configuracao','O contrato do cliente \u00E9 inv\u00E1lido.','Use o contrato gerado junto com o cliente.'],\r\n CERTIFICADO_INVALIDO: ['configuracao','O certificado A1 ou sua configura\u00E7\u00E3o \u00E9 inv\u00E1lido.','Confira formato e validade do A1, pfx ou arquivo e a senha digitada, sem registrar esses dados.'],\r\n CERTIFICADO_DIVERGENTE: ['assinatura','O certificado n\u00E3o corresponde \u00E0 raiz CNPJ do emitente.','Confira o CNPJ configurado e selecione o A1 correspondente ao emitente.'],\r\n DEPENDENCIA_AUSENTE: ['runtime','Uma depend\u00EAncia do motor fiscal n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma; confira a disponibilidade do OpenSSL distribu\u00EDdo.'],\r\n SCHEMAS_AUSENTES: ['runtime','Os schemas fiscais n\u00E3o est\u00E3o dispon\u00EDveis.','Reinstale o runtime completo da plataforma.'],\r\n SERVICOS_AUSENTES: ['runtime','A configura\u00E7\u00E3o dos servi\u00E7os fiscais n\u00E3o est\u00E1 dispon\u00EDvel.','Reinstale o runtime completo da plataforma.'],\r\n CSC_AUSENTE: ['configuracao','A opera\u00E7\u00E3o de NFC-e exige CSC.','Informe id e valor do CSC na configura\u00E7\u00E3o sem registrar seu conte\u00FAdo.'],\r\n IDENTIDADE_DIVERGENTE: ['documento','A identidade fiscal n\u00E3o corresponde \u00E0 configura\u00E7\u00E3o ou ao retorno.','Confira emitente, UF, modelo, ambiente e chave do documento antes de continuar.'],\r\n XML_SCHEMA_INVALIDO: ['validacao','O XML n\u00E3o atende aos schemas fiscais.','Confira os campos obrigat\u00F3rios e os tributos; a valida\u00E7\u00E3o de XML assinado deve ocorrer ap\u00F3s a assinatura.'],\r\n ASSINATURA_INVALIDA: ['assinatura','A assinatura do XML n\u00E3o foi validada.','Confira o A1 correspondente e use o XML assinado sem altera\u00E7\u00F5es.'],\r\n XML_NAO_ASSINADO: ['assinatura','A opera\u00E7\u00E3o exige XML previamente assinado.','Conclua a assinatura e a valida\u00E7\u00E3o antes de transmitir.'],\r\n XML_ALTERADO: ['assinatura','O XML assinado foi alterado.','Use exatamente o XML assinado e persistido; n\u00E3o edite seu conte\u00FAdo.'],\r\n RETORNO_INVALIDO: ['transmissao','A identidade ou o protocolo do retorno fiscal \u00E9 inv\u00E1lido.','Consulte a situa\u00E7\u00E3o fiscal antes de decidir repetir a opera\u00E7\u00E3o.'],\r\n OPERACAO_FISCAL_FALHOU: ['operacao','O motor n\u00E3o conseguiu concluir a etapa fiscal.','Confira a configura\u00E7\u00E3o da etapa, os dados do XML e as depend\u00EAncias do runtime.'],\r\n TLS_SERVIDOR_INVALIDO: ['transmissao','A verifica\u00E7\u00E3o TLS do servi\u00E7o fiscal falhou.','Confira o servi\u00E7o e a cadeia de confian\u00E7a; mantenha a verifica\u00E7\u00E3o TLS habilitada.'],\r\n CSC_INVALIDO: ['configuracao','A configura\u00E7\u00E3o do CSC \u00E9 inv\u00E1lida.','Confira id e valor do CSC sem registrar seu conte\u00FAdo.'],\r\n PLATAFORMA_NAO_SUPORTADA: ['runtime','A plataforma n\u00E3o \u00E9 suportada.','Execute em Windows ou Linux x64 com Node.js 22.12 ou superior.'],\r\n RUNTIME_AUSENTE: ['runtime','O motor fiscal n\u00E3o foi encontrado.','Instale o runtime da plataforma incluindo depend\u00EAncias opcionais.'],\r\n RUNTIME_INVALIDO: ['runtime','O runtime fiscal \u00E9 inv\u00E1lido.','Use um runtime distribu\u00EDdo e compat\u00EDvel com a plataforma.'],\r\n RUNTIME_INCOMPLETO: ['runtime','Falta um arquivo do runtime fiscal.','Reinstale o runtime da plataforma.'],\r\n RUNTIME_ALTERADO: ['runtime','A integridade do runtime fiscal n\u00E3o foi confirmada.','Reinstale o runtime; n\u00E3o desative a verifica\u00E7\u00E3o dos hashes.'],\r\n CONTRATO_DIVERGENTE: ['runtime','Cliente e motor usam contratos diferentes.','Use vers\u00F5es compat\u00EDveis ou regenere e recompile ambos.'],\r\n DOCUMENTO_INVALIDO: ['documento','O documento cont\u00E9m dados incompat\u00EDveis com o modelo.','Valide os campos e tipos do documento antes de gerar o XML.'],\r\n OPERACAO_INVALIDA: ['operacao','Os par\u00E2metros da opera\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Informe um objeto com os campos exigidos pela opera\u00E7\u00E3o.'],\r\n OPERACAO_CANCELADA: ['operacao','A opera\u00E7\u00E3o foi cancelada.','Confira o estado do envio antes de decidir continuar.'],\r\n TIMEOUT_MOTOR: ['runtime','O motor excedeu o tempo de espera.','Confira o estado do envio antes de repetir a opera\u00E7\u00E3o.'],\r\n EMISSOR_FECHADO: ['operacao','O emissor foi encerrado.','Crie um novo emissor para continuar.'],\r\n FALHA_INICIAR_MOTOR: ['runtime','N\u00E3o foi poss\u00EDvel iniciar o motor fiscal.','Confira a instala\u00E7\u00E3o e as permiss\u00F5es de execu\u00E7\u00E3o do runtime.'],\r\n FALHA_PIPE: ['runtime','A comunica\u00E7\u00E3o com o motor foi interrompida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\r\n RESPOSTA_EXCESSIVA: ['runtime','A resposta do motor excedeu o limite.','Confira o tamanho da opera\u00E7\u00E3o e a vers\u00E3o do runtime.'],\r\n RESPOSTA_INVALIDA: ['runtime','O motor devolveu uma resposta inv\u00E1lida.','Confira a compatibilidade do runtime e o estado do envio.'],\r\n FALHA_MOTOR: ['runtime','O motor encerrou sem uma resposta fiscal v\u00E1lida.','Confira a instala\u00E7\u00E3o e o estado do envio antes de continuar.'],\r\n CERTIFICADO_AUSENTE: ['configuracao','O certificado A1 n\u00E3o est\u00E1 dispon\u00EDvel para esta opera\u00E7\u00E3o.','Configure um A1 acess\u00EDvel e sua senha sem registrar esses dados.'],\r\n CERTIFICADO_EXCESSIVO: ['configuracao','O certificado excede o limite de tamanho.','Use um arquivo A1 de at\u00E9 2 MiB.'],\r\n REQUISICAO_INVALIDA: ['operacao','Os dados n\u00E3o puderam ser serializados ou excedem o limite.','Use dados JSON e reduza o tamanho da opera\u00E7\u00E3o.'],\r\n FILA_CHEIA: ['operacao','A fila fiscal est\u00E1 cheia.','Aguarde a opera\u00E7\u00E3o atual terminar antes de iniciar outra.'],\r\n XML_INVALIDO: ['documento','O XML est\u00E1 vazio, tem tipo inv\u00E1lido ou excede o limite.','Informe o XML como texto UTF-8 de at\u00E9 2 MiB.'],\r\n CHAVE_INVALIDA: ['documento','A chave fiscal tem formato inv\u00E1lido.','Informe a chave como texto com 44 d\u00EDgitos.'],\r\n RECIBO_INVALIDO: ['documento','O recibo tem formato inv\u00E1lido.','Informe o recibo como texto com 15 d\u00EDgitos.'],\r\n JUSTIFICATIVA_INVALIDA: ['documento','A justificativa tem tamanho inv\u00E1lido.','Informe uma justificativa com 15 a 255 caracteres.'],\r\n PROTOCOLO_INVALIDO: ['documento','O protocolo tem formato inv\u00E1lido.','Informe o protocolo como texto com 15 d\u00EDgitos.'],\r\n OPERACAO_NAO_SUPORTADA: ['operacao','A opera\u00E7\u00E3o n\u00E3o \u00E9 suportada para este modelo.','Carta de corre\u00E7\u00E3o exige NF-e modelo 55.'],\r\n CORRECAO_INVALIDA: ['documento','Os dados da carta de corre\u00E7\u00E3o s\u00E3o inv\u00E1lidos.','Confira a corre\u00E7\u00E3o de 15 a 1000 caracteres e a sequ\u00EAncia de 1 a 20.'],\r\n INUTILIZACAO_INVALIDA: ['documento','A faixa de inutiliza\u00E7\u00E3o \u00E9 inv\u00E1lida.','Confira ano, s\u00E9rie e n\u00FAmeros inicial e final.'],\r\n FALHA_LOCAL: ['operacao','N\u00E3o foi poss\u00EDvel concluir a opera\u00E7\u00E3o local.','Confira a etapa e os tipos dos dados; n\u00E3o registre o erro bruto.']\r\n};\r\n\r\nexport function etapaDaOperacao(comando: Comando): EtapaAcbr {\r\n return ({gerarXml:'geracao',validar:'validacao',assinar:'assinatura',transmitir:'transmissao',consultar:'consulta',cancelar:'cancelamento',cartaCorrecao:'carta_correcao',inutilizar:'inutilizacao'} as const)[comando]??'operacao';\r\n}\r\n\r\n/** Apenas cat\u00E1logo e metadados conhecidos; nunca copia message, stack, stderr ou causa bruta. */\r\nexport function criarDiagnosticoErro(codigo: string, desconhecido = false, detalhes: DetalhesErroAcbr = {}): DiagnosticoAcbr {\r\n const safeCode = Object.hasOwn(CATALOGO, codigo) ? codigo : 'FALHA_LOCAL';\r\n const [defaultStage, mensagem, defaultAction] = CATALOGO[safeCode];\r\n const etapa = detalhes.etapa && ETAPAS.has(detalhes.etapa) ? detalhes.etapa : defaultStage;\r\n const campo = detalhes.campo && CAMPOS.has(detalhes.campo) ? detalhes.campo : undefined;\r\n const acoesConfig:Record<string,string>={cnpj:'Informe o CNPJ como texto com 14 d\u00EDgitos.',uf:'Informe a sigla da UF em letras mai\u00FAsculas, por exemplo PE.',modelo:'Informe o n\u00FAmero 55 para NF-e ou 65 para NFC-e, sem aspas.',ambiente:'Informe o n\u00FAmero 2 para homologa\u00E7\u00E3o ou 1 para produ\u00E7\u00E3o, sem aspas.',timeoutMs:'Informe um n\u00FAmero inteiro de 1 a 120000 milissegundos.',limiteFila:'Informe um n\u00FAmero inteiro de 0 a 1000.',limiteBytes:'Informe um n\u00FAmero inteiro de 256 a 8388608 bytes.',runtimeDirectory:'Informe o diret\u00F3rio do runtime como texto n\u00E3o vazio.'};\r\n const acao=safeCode==='CONFIGURACAO_INVALIDA'&&campo&&Object.hasOwn(acoesConfig,campo)?acoesConfig[campo]:defaultAction;\r\n const causa = Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {})});\r\n return Object.freeze({codigo:safeCode,etapa,...(campo ? {campo} : {}),mensagem,\r\n acao:desconhecido ? 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. O envio pode ter ocorrido; n\u00E3o retransmita automaticamente.' : acao,\r\n statusEnvio:desconhecido ? 'resultado_incerto' : 'nao_enviado',causa});\r\n}\r\n\r\nexport function diagnosticarErro(erro: unknown): DiagnosticoAcbr {\r\n return erro instanceof ErroAcbrNode ? erro.diagnostico : criarDiagnosticoErro('FALHA_LOCAL',true);\r\n}\r\n\r\nexport function adicionarDiagnosticoLimpeza(diagnostico: DiagnosticoAcbr): DiagnosticoAcbr {\r\n const acao=diagnostico.statusEnvio==='resultado_incerto'\r\n ? 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor e consulte a situa\u00E7\u00E3o fiscal antes de repetir qualquer envio.'\r\n : 'Encerre esta aplica\u00E7\u00E3o antes de iniciar outro motor. As pr\u00F3ximas opera\u00E7\u00F5es deste emissor foram bloqueadas.';\r\n const limpeza=Object.freeze({codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO' as const,etapa:'limpeza' as const,mensagem:'N\u00E3o foi poss\u00EDvel confirmar o encerramento do motor fiscal.',acao});\r\n return Object.freeze({...diagnostico,acao,limpeza});\r\n}\r\n\r\n/** Status refere-se \u00E0 opera\u00E7\u00E3o atual; uma etapa local n\u00E3o prova aus\u00EAncia de envios anteriores. */\r\nexport function diagnosticarResultado(resultado: ResultadoFiscal, comando: Comando): DiagnosticoAcbr {\r\n const etapa = etapaDaOperacao(comando);\r\n if(!resultado||typeof resultado!=='object')return criarDiagnosticoErro('FALHA_LOCAL',true,{etapa});\r\n if(resultado.envioIniciado!==undefined&&typeof resultado.envioIniciado!=='boolean')return criarDiagnosticoErro('RESPOSTA_INVALIDA',true,{etapa});\r\n let statusEnvio: StatusEnvio = 'resultado_incerto', codigo = 'RESULTADO_INCERTO';\r\n let mensagem = 'A situa\u00E7\u00E3o fiscal ainda n\u00E3o foi confirmada.';\r\n let acao = 'Consulte a situa\u00E7\u00E3o fiscal antes de repetir. N\u00E3o retransmita automaticamente.';\r\n const local=(comando==='gerarXml'&&resultado.estado==='XML_GERADO')||(comando==='validar'&&resultado.estado==='VALIDADO')||(comando==='assinar'&&resultado.estado==='ASSINADO');\r\n const semEvento=resultado.envioIniciado===false||resultado.envioIniciado===undefined;\r\n const protocolo=typeof resultado.protocolo==='string'&&/^\\d{15}$/.test(resultado.protocolo);\r\n const chave=typeof resultado.chave==='string'&&/^\\d{44}$/.test(resultado.chave);\r\n const autorizacao=(comando==='transmitir'||comando==='consultar')&&resultado.estado==='AUTORIZADO'&&[100,150].includes(resultado.cStat!)&&protocolo&&chave&&(comando==='consultar'||resultado.envioIniciado!==false);\r\n const evento=(comando==='cancelar'&&resultado.estado==='CANCELADO'&&[135,136].includes(resultado.cStat!)&&chave)||(comando==='cartaCorrecao'&&resultado.estado==='EVENTO_REGISTRADO'&&resultado.cStat===135&&chave)||(comando==='inutilizar'&&resultado.estado==='INUTILIZADO'&&resultado.cStat===102);\r\n if (local && resultado.sucesso===true && semEvento) {\r\n statusEnvio='nao_enviado';codigo='ETAPA_LOCAL_CONCLUIDA';mensagem='A etapa local foi conclu\u00EDda; esta opera\u00E7\u00E3o n\u00E3o transmitiu a nota.';acao='Confira o resultado antes de seguir para a pr\u00F3xima etapa.';\r\n } else if (resultado.sucesso===true && (autorizacao||evento&&protocolo&&resultado.envioIniciado!==false)) {\r\n statusEnvio='autorizado';codigo='OPERACAO_CONFIRMADA';\r\n mensagem=({AUTORIZADO:'A nota foi autorizada.',CANCELADO:'O cancelamento foi confirmado.',EVENTO_REGISTRADO:'O evento foi registrado.',INUTILIZADO:'A faixa foi inutilizada.'} as Record<string,string>)[resultado.estado];\r\n acao='Guarde o resultado fiscal. N\u00E3o repita esta opera\u00E7\u00E3o.';\r\n } else if (resultado.sucesso===false && (comando==='consultar'||resultado.envioIniciado!==false) && ['transmitir','consultar','cancelar','cartaCorrecao','inutilizar'].includes(comando) && Number.isInteger(resultado.cStat) && Number(resultado.cStat)>0 && Number(resultado.cStat)<=9999 && (resultado.estado==='DENEGADO'&&[110,301,302].includes(resultado.cStat!)||resultado.estado==='REJEITADO'&&![100,150,110,301,302,101,151,155,103,104,105,108,109,204,539,573,135,136,102,217].includes(resultado.cStat!))) {\r\n statusEnvio='rejeitado';codigo=resultado.estado==='DENEGADO'?'NOTA_DENEGADA':'OPERACAO_REJEITADA';\r\n mensagem=resultado.estado==='DENEGADO'?'A nota foi denegada.':'A opera\u00E7\u00E3o foi rejeitada.';\r\n acao=resultado.estado==='DENEGADO'?'Consulte a situa\u00E7\u00E3o fiscal e a orienta\u00E7\u00E3o respons\u00E1vel antes de usar a numera\u00E7\u00E3o.':'Confira o cStat e revise os dados antes de decidir uma nova tentativa.';\r\n } else if (resultado.estado==='ERRO' && resultado.envioIniciado===false) {\r\n if(typeof resultado.codigo==='string'&&Object.hasOwn(CATALOGO,resultado.codigo))return criarDiagnosticoErro(resultado.codigo,false,{etapa});\r\n statusEnvio='nao_enviado';codigo='FALHA_ANTES_ENVIO';mensagem='O motor informou falha antes de iniciar o envio desta opera\u00E7\u00E3o.';acao='Revise a configura\u00E7\u00E3o e os dados antes de continuar.';\r\n }\r\n const cStat=Number.isInteger(resultado.cStat)&&Number(resultado.cStat)>0&&Number(resultado.cStat)<=9999 ? resultado.cStat : undefined;\r\n return Object.freeze({codigo,etapa,mensagem,acao,statusEnvio,...(cStat!==undefined?{cStat}:{})});\r\n}\r\n", "export const PROTOCOL_VERSION = 1 as const;\r\nexport type Modelo = 55 | 65;\r\nexport type Ambiente = 1 | 2;\r\nexport type Comando = 'gerarXml' | 'validar' | 'assinar' | 'transmitir' | 'consultar' | 'cancelar' | 'cartaCorrecao' | 'inutilizar';\r\nexport interface Contrato { sourceRevision: number; contractHash: string }\r\nexport interface CertificadoA1 { pfx?: Uint8Array; arquivo?: string; senha: string }\r\nexport interface ConfiguracaoEmissor { cnpj: string; uf: string; modelo: Modelo; ambiente: Ambiente; certificado?: CertificadoA1; csc?: { id: string; valor: string } }\r\nexport interface ConfiguracaoMotor extends Omit<ConfiguracaoEmissor, 'certificado'> { certificado?: { pfxBase64: string; senha: string } }\r\nexport interface RequisicaoMotor extends Contrato {\r\n versao: 1; id: string; comando: Comando; config: ConfiguracaoMotor;\r\n documento?: object; xmlBase64?: string; chave?: string; recibo?: string;\r\n protocolo?: string; justificativa?: string; correcao?: string; sequenciaEvento?: number;\r\n inutilizacao?: { ano: number; serie: number; numeroInicial: number; numeroFinal: number };\r\n}\r\nexport type Estado = 'DENEGADO' | 'XML_GERADO' | 'VALIDADO' | 'ASSINADO' | 'AUTORIZADO' | 'REJEITADO' | 'PENDENTE' | 'INDETERMINADO' | 'CONSULTADO' | 'CANCELADO' | 'EVENTO_REGISTRADO' | 'INUTILIZADO' | 'ERRO';\r\nexport interface ResultadoFiscal extends Contrato {\r\n versao: 1; id: string; sucesso: boolean; estado: Estado; codigo?: string;\r\n cStat?: number; xMotivo?: string; chave?: string; protocolo?: string; recibo?: string;\r\n xmlBase64?: string; envioIniciado?: boolean;\r\n /** Resumo seguro para interfaces e logs; n\u00E3o cont\u00E9m XML, identidade fiscal ou xMotivo bruto. */\r\n diagnostico?: DiagnosticoAcbr;\r\n}\r\nexport interface RuntimeManifest extends Contrato {\r\n formatVersion: 1; platform: string; arch: string; executable: string; files: Record<string, string>;\r\n}\r\nexport interface OpcoesOperacao { signal?: AbortSignal }\r\nexport interface Consulta { chave: string; recibo?: string }\r\nexport interface Cancelamento { chave: string; protocolo: string; justificativa: string }\r\nexport interface CartaCorrecao { chave: string; correcao: string; sequenciaEvento?: number }\r\nexport interface Inutilizacao { ano: number; serie: number; numeroInicial: number; numeroFinal: number; justificativa: string }\r\nexport type StatusEnvio = 'nao_enviado' | 'rejeitado' | 'autorizado' | 'resultado_incerto';\r\nexport type EtapaAcbr = 'configuracao' | 'documento' | 'runtime' | 'geracao' | 'validacao' | 'assinatura' | 'transmissao' | 'consulta' | 'cancelamento' | 'carta_correcao' | 'inutilizacao' | 'operacao' | 'limpeza';\r\nexport interface DiagnosticoAcbr {\r\n readonly codigo: string; readonly etapa: EtapaAcbr; readonly campo?: string;\r\n readonly mensagem: string; readonly acao: string; readonly statusEnvio: StatusEnvio;\r\n readonly cStat?: number;\r\n readonly causa?: Readonly<{ codigo: string; etapa: EtapaAcbr; campo?: string }>;\r\n readonly limpeza?: Readonly<{codigo:'ENCERRAMENTO_MOTOR_NAO_CONFIRMADO';etapa:'limpeza';mensagem:string;acao:string}>;\r\n}\r\nexport interface DetalhesErroAcbr { etapa?: EtapaAcbr; campo?: string }\r\nexport class ErroAcbrNode extends Error {\r\n readonly name = 'ErroAcbrNode';\r\n #diagnostico: DiagnosticoAcbr;\r\n get diagnostico(): DiagnosticoAcbr { return this.#diagnostico; }\r\n constructor(readonly codigo: string, mensagem: string, readonly resultadoDesconhecido = false, readonly xmlBase64?: string, detalhes?: DetalhesErroAcbr) {\r\n super(mensagem);\r\n this.#diagnostico = criarDiagnosticoErro(codigo, resultadoDesconhecido, detalhes);\r\n // Recupera\u00E7\u00E3o permanece dispon\u00EDvel por acesso expl\u00EDcito, sem vazar XML em console/JSON.\r\n Object.defineProperty(this, 'xmlBase64', { value: xmlBase64, enumerable: false });\r\n Object.defineProperty(this, 'cause', { value: this.diagnostico.causa, enumerable: false });\r\n }\r\n /** Acrescenta apenas o aviso est\u00E1tico de limpeza, preservando o erro da opera\u00E7\u00E3o. */\r\n anotarFalhaLimpeza(): void { this.#diagnostico = adicionarDiagnosticoLimpeza(this.#diagnostico); }\r\n toJSON(): DiagnosticoAcbr { return this.diagnostico; }\r\n}\r\nimport { criarDiagnosticoErro, adicionarDiagnosticoLimpeza } from './diagnostics.js';\r\n", "// Synthetic signed XML, public X509 certificate only. Never transmit this document.\n// Contains no PFX, private key or password. Generated offline by the test certificate fixture.\nexport const OFFLINE_DOCUMENT = {\n \"infNFe\": {\n \"Versao\": \"4.00\"\n },\n \"Ide\": {\n \"cUF\": 23,\n \"cNF\": 12345678,\n \"natOp\": \"VENDA TESTE OFFLINE\",\n \"modelo\": 55,\n \"serie\": 1,\n \"nNF\": 1,\n \"dEmi\": \"2026-10-08T12:00:00\",\n \"tpNF\": \"tnSaida\",\n \"idDest\": \"doInterna\",\n \"cMunFG\": 2304400,\n \"tpImp\": \"tiRetrato\",\n \"tpEmis\": \"teNormal\",\n \"tpAmb\": \"taHomologacao\",\n \"finNFe\": \"fnNormal\",\n \"indFinal\": \"cfConsumidorFinal\",\n \"indPres\": \"pcPresencial\",\n \"procEmi\": \"peAplicativoContribuinte\",\n \"verProc\": \"ACBR-NODE-OFFLINE\"\n },\n \"Emit\": {\n \"CNPJCPF\": \"11222333000181\",\n \"xNome\": \"Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE SEM VALOR FISCAL\",\n \"IE\": \"123456789\",\n \"CRT\": \"crtSimplesNacional\",\n \"EnderEmit\": {\n \"xLgr\": \"RUA TESTE\",\n \"nro\": \"1\",\n \"xBairro\": \"TESTE\",\n \"cMun\": 2304400,\n \"xMun\": \"FORTALEZA\",\n \"UF\": \"CE\",\n \"CEP\": 60000000,\n \"cPais\": 1058,\n \"xPais\": \"BRASIL\"\n }\n },\n \"Dest\": {\n \"CNPJCPF\": \"12345678909\",\n \"xNome\": \"NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL\",\n \"indIEDest\": \"inNaoContribuinte\",\n \"EnderDest\": {\n \"xLgr\": \"RUA TESTE\",\n \"nro\": \"2\",\n \"xBairro\": \"TESTE\",\n \"cMun\": 2304400,\n \"xMun\": \"FORTALEZA\",\n \"UF\": \"CE\",\n \"CEP\": 60000000,\n \"cPais\": 1058,\n \"xPais\": \"BRASIL\"\n }\n },\n \"Det\": [\n {\n \"Prod\": {\n \"nItem\": 1,\n \"cProd\": \"TESTE\",\n \"cEAN\": \"SEM GTIN\",\n \"xProd\": \"Caf\u00E9 S\u00E3o Jos\u00E9 PRODUTO SINT\u00C9TICO OFFLINE\",\n \"NCM\": \"22021000\",\n \"CFOP\": \"5102\",\n \"uCom\": \"UN\",\n \"qCom\": \"1\",\n \"vUnCom\": \"10\",\n \"vProd\": \"10\",\n \"cEANTrib\": \"SEM GTIN\",\n \"uTrib\": \"UN\",\n \"qTrib\": \"1\",\n \"vUnTrib\": \"10\",\n \"IndTot\": \"itSomaTotalNFe\"\n },\n \"Imposto\": {\n \"ICMS\": {\n \"orig\": \"oeNacional\",\n \"CSOSN\": \"csosn102\"\n },\n \"PIS\": {\n \"CST\": \"pis07\"\n },\n \"COFINS\": {\n \"CST\": \"cof07\"\n }\n }\n }\n ],\n \"Total\": {\n \"ICMSTot\": {\n \"vProd\": \"10\",\n \"vNF\": \"10\"\n }\n },\n \"Transp\": {\n \"modFrete\": \"mfSemFrete\"\n },\n \"pag\": [\n {\n \"tPag\": \"fpDinheiro\",\n \"indPag\": \"ipVista\",\n \"vPag\": \"10\"\n }\n ]\n} as const;\nexport const OFFLINE_SIGNED_XML = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><NFe xmlns=\\\"http://www.portalfiscal.inf.br/nfe\\\"><infNFe Id=\\\"NFe23261011222333000181550010000000011123456780\\\" versao=\\\"4.00\\\"><ide><cUF>23</cUF><cNF>12345678</cNF><natOp>VENDA TESTE OFFLINE</natOp><mod>55</mod><serie>1</serie><nNF>1</nNF><dhEmi>2026-10-08T12:00:00-03:00</dhEmi><tpNF>1</tpNF><idDest>1</idDest><cMunFG>2304400</cMunFG><tpImp>1</tpImp><tpEmis>1</tpEmis><cDV>0</cDV><tpAmb>2</tpAmb><finNFe>1</finNFe><indFinal>1</indFinal><indPres>1</indPres><procEmi>0</procEmi><verProc>ACBR-NODE-OFFLINE</verProc></ide><emit><CNPJ>11222333000181</CNPJ><xNome>Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE SEM VALOR FISCAL</xNome><enderEmit><xLgr>RUA TESTE</xLgr><nro>1</nro><xBairro>TESTE</xBairro><cMun>2304400</cMun><xMun>FORTALEZA</xMun><UF>CE</UF><CEP>60000000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais></enderEmit><IE>123456789</IE><CRT>1</CRT></emit><dest><CPF>12345678909</CPF><xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome><enderDest><xLgr>RUA TESTE</xLgr><nro>2</nro><xBairro>TESTE</xBairro><cMun>2304400</cMun><xMun>FORTALEZA</xMun><UF>CE</UF><CEP>60000000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais></enderDest><indIEDest>9</indIEDest></dest><det nItem=\\\"1\\\"><prod><cProd>TESTE</cProd><cEAN>SEM GTIN</cEAN><xProd>Caf\u00E9 S\u00E3o Jos\u00E9 PRODUTO SINT\u00C9TICO OFFLINE</xProd><NCM>22021000</NCM><CFOP>5102</CFOP><uCom>UN</uCom><qCom>1.0000</qCom><vUnCom>10.0000000000</vUnCom><vProd>10.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UN</uTrib><qTrib>1.0000</qTrib><vUnTrib>10.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>102</CSOSN></ICMSSN102></ICMS><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><total><ICMSTot><vBC>0.00</vBC><vICMS>0.00</vICMS><vICMSDeson>0.00</vICMSDeson><vFCP>0.00</vFCP><vBCST>0.00</vBCST><vST>0.00</vST><vFCPST>0.00</vFCPST><vFCPSTRet>0.00</vFCPSTRet><vProd>10.00</vProd><vFrete>0.00</vFrete><vSeg>0.00</vSeg><vDesc>0.00</vDesc><vII>0.00</vII><vIPI>0.00</vIPI><vIPIDevol>0.00</vIPIDevol><vPIS>0.00</vPIS><vCOFINS>0.00</vCOFINS><vOutro>0.00</vOutro><vNF>10.00</vNF></ICMSTot></total><transp><modFrete>9</modFrete></transp><pag><detPag><indPag>0</indPag><tPag>01</tPag><vPag>10.00</vPag></detPag></pag></infNFe><Signature xmlns=\\\"http://www.w3.org/2000/09/xmldsig#\\\"><SignedInfo><CanonicalizationMethod Algorithm=\\\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\\\"></CanonicalizationMethod><SignatureMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\\\"></SignatureMethod><Reference URI=\\\"#NFe23261011222333000181550010000000011123456780\\\"><Transforms><Transform Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\\\"></Transform><Transform Algorithm=\\\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\\\"></Transform></Transforms><DigestMethod Algorithm=\\\"http://www.w3.org/2000/09/xmldsig#sha1\\\"></DigestMethod><DigestValue>Ya5kXhcEibOVfcyOI0BzqcYzyMM=</DigestValue></Reference></SignedInfo><SignatureValue>mirdDvdV+VId/zsstW/6lVFsSVxdyWkdkY1NPd2ynLHpjtolFoIhaBGlfxxs7IhU/AzcNQmR6ivr9YkH1HXaMAypvvx9M6GR/T4du/Zqab4gx3YInVybjJTeQ7BKEDnLhde2TUKoXrxmfrrmBUw6K4nTNufVjUjFJBfGcwhJ57T72x7ssdoYuPvZCphb0IR8WxHRKhvKAQhjW61qfh33csTabelgVZSLuTC2I2k9+a+ARd88CLTlfhYNCAPItOdUnAjgrhAhtiDi2FjXKjywgRqx0zay8DxF9Y2iyTJd3IAoWOERGdI9whgsuzWiZUr2I0I5QGGBELVabfjXm/Bneg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBbMSswKQYDVQQDEyJBQ0JSIE5PREUgU1lOVEhFVElDOjExMjIyMzMzMDAwMTgxMQswCQYDVQQGEwJCUjEfMB0GA1UEChMWU1lOVEhFVElDIE9GRkxJTkUgVEVTVDAeFw0yNjEwMDYyMjIzMzNaFw0yNzEwMDgyMjIzMzNaMFsxKzApBgNVBAMTIkFDQlIgTk9ERSBTWU5USEVUSUM6MTEyMjIzMzMwMDAxODExCzAJBgNVBAYTAkJSMR8wHQYDVQQKExZTWU5USEVUSUMgT0ZGTElORSBURVNUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsOwRzuW4de7jrv1IkcNgT311292NR5NNIHt6Fncarm2iJX6mYsIjPWriFQmrU88p7bfRI3EsXJrlK0oGCuMafbNf1nBZ6Tu8aV1ixbAIgu9ZIbWoDqDNbYJBucQRuKsI1ytFbY7eI0juhcdAlBHw3TNdgSbuv/8kEGgTTJ803wBcC+emGZHdpb4Bwx6Db0Fio0lWLlBaep9+MFNZZiEYmDA3dwgZF14MAr5MpzcNDUVYh/g95Ks8x+mhErOPdtmL1A6cDg+xtjiApeMJZqjMrdsXP4yQ34h5VRy03ZUJkXVAquOfWhXpQL/qjoSzXfHvij2wB0pVn89FzVZh7GzStQIDAQABo1UwUzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDAjAkBgNVHREEHTAboBkGBWBMAQMDoBAMDjExMjIyMzMzMDAwMTgxMA0GCSqGSIb3DQEBCwUAA4IBAQBDhbpxphiuAUlQWXkcVt22Nc+g2UM6GCZyC3v9o21llLSCyK/nhkrRCQzM75/86kbnYZ1zdulC9N4XQFgATwm16Sf/nDZw8s5EsXqZ8mwbauDs/aQvWrbQnyawB7c+aXvlUDkcfNq+3hLQ5ep8/bmGh4eueiNoPD0fjf/jUVmrS6KyHb6/FyIZGP6fEYAO6XrqJPMSPxpJHnbPXZXKW2vcCh3qaG1vTSeN8PLfN2Q/mp1XUH8VqHgl3jzssx/zwb1NKuKEz9WL+6ilLc1ZfIqUakJyQNMqMz2KIjqGKGp7TtpNHZ7mz+kBX4Xw7D5fFVrXYb7DN6KylyKLmXoEzs1B</X509Certificate></X509Data></KeyInfo></Signature></NFe>\";\n", "import type { AcbrConfig } from './config.js';\nimport { runtimeDirectory, type BuiltRuntimeManifest } from './native-build.js';\nimport { criarEmissor, type ResultadoFiscal } from './runtime.js';\nimport { OFFLINE_DOCUMENT, OFFLINE_SIGNED_XML } from './offline-fixture.js';\nexport interface OfflineCheck { name: string; estado: string; codigo?: string; envioIniciado: false; }\n/** Local synthetic probes only: no certificate credentials, connection or fiscal transmission. */\nexport async function checkOffline(config: AcbrConfig, manifest: BuiltRuntimeManifest): Promise<OfflineCheck[]> {\n const emitter = criarEmissor({ cnpj: '11222333000181', uf: 'CE', modelo: 55, ambiente: 2,\n contrato: { sourceRevision: manifest.sourceRevision, contractHash: manifest.contractHash },\n runtimeDirectory: runtimeDirectory(config), timeoutMs: 30_000 });\n const report: OfflineCheck[] = [];\n function expect(name: string, result: ResultadoFiscal, estado: string, codigo?: string): void {\n if (result.estado !== estado || result.sucesso !== (estado !== 'ERRO') || result.envioIniciado !== false ||\n result.sourceRevision !== manifest.sourceRevision || (codigo !== undefined && result.codigo !== codigo)) {\n throw new Error(`Smoke offline ${name} falhou: ${result.estado}/${result.codigo ?? 'sem c\u00F3digo'}.`);\n }\n report.push({ name, estado: result.estado, codigo: result.codigo, envioIniciado: false });\n }\n try {\n const generated = await emitter.gerarXml(OFFLINE_DOCUMENT);\n expect('gerarXml sint\u00E9tico', generated, 'XML_GERADO');\n const xml = generated.xmlBase64 ? Buffer.from(generated.xmlBase64, 'base64').toString('utf8') : '';\n const generatedKey = /Id=\"NFe(\\d{44})\"/.exec(xml)?.[1];\n if (!generatedKey || !xml.includes('Caf\u00E9 S\u00E3o Jos\u00E9 TESTE OFFLINE') || !xml.includes('<CNPJ>11222333000181</CNPJ>')) throw new Error('Smoke offline gerarXml perdeu chave, identidade ou UTF-8.');\n const validated = await emitter.validar(OFFLINE_SIGNED_XML);\n expect('validar XML assinado p\u00FAblico', validated, 'VALIDADO');\n const signedKey = /Id=\"NFe(\\d{44})\"/.exec(OFFLINE_SIGNED_XML)?.[1];\n if (validated.chave !== signedKey || generatedKey !== signedKey) throw new Error('Smoke offline validar retornou outra chave fiscal.');\n expect('recusar XML malformado', await emitter.validar('<NFe><infNFe></NFe>'), 'ERRO', 'OPERACAO_FISCAL_FALHOU');\n expect('recusar DTD/entidade externa', await emitter.validar('<!DOCTYPE NFe [<!ENTITY probe SYSTEM \"file:///acbr-node-offline-check-does-not-exist\">]><NFe>&probe;</NFe>'), 'ERRO', 'XML_INVALIDO');\n return report;\n } finally { await emitter.fechar(); }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["createHash", "mkdir", "readFile", "writeFile", "readdir", "path", "fileURLToPath", "resolve", "node", "revision", "p", "access", "t", "access", "resolve", "fileURLToPath", "revision", "path", "copyFile", "mkdir", "readdir", "readFile", "rename", "rm", "stat", "access", "writeFile", "dirname", "join", "relative", "resolve", "sep", "randomUUID", "access", "mkdir", "readdir", "readFile", "writeFile", "dirname", "resolve", "fail", "path", "hash", "readdir", "resolve", "readFile", "access", "revision", "mkdir", "dirname", "writeFile", "exists", "join", "path", "access", "readFile", "resolve", "relative", "sep", "readdir", "name", "mkdir", "dirname", "copyFile", "writeFile", "randomUUID", "rm", "hash", "rename", "candidates", "stat", "spawn", "readFile", "stat", "createHash", "randomUUID", "relative", "require", "readFile", "hash", "stat", "createHash", "spawn", "execute", "randomUUID", "resolve", "config", "fileURLToPath", "access", "resolve", "generateModel"]
7
7
  }