cosmemilton-acbr-node 0.0.0-stage → 0.1.0
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/LICENSE +502 -0
- package/NOTICE +8 -0
- package/README.md +105 -2
- package/acbr.config.json +16 -0
- package/acbr.lock.json +3475 -0
- package/dist/cli.js +1652 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.cjs +3349 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +3100 -0
- package/dist/index.js.map +7 -0
- package/dist/runtime.cjs +350 -0
- package/dist/runtime.cjs.map +7 -0
- package/dist/runtime.js +312 -0
- package/dist/runtime.js.map +7 -0
- package/dist/types/generated/acbr/index.d.ts +14 -0
- package/dist/types/generated/acbr/models.d.ts +3007 -0
- package/dist/types/src/cli.d.ts +20 -0
- package/dist/types/src/config.d.ts +30 -0
- package/dist/types/src/generator.d.ts +93 -0
- package/dist/types/src/index.d.ts +16 -0
- package/dist/types/src/native-build.d.ts +25 -0
- package/dist/types/src/offline-check.d.ts +10 -0
- package/dist/types/src/offline-fixture.d.ts +104 -0
- package/dist/types/src/runtime.d.ts +26 -0
- package/dist/types/src/source.d.ts +31 -0
- package/dist/types/src/types.d.ts +103 -0
- package/docs/API.md +32 -0
- package/docs/ARQUITETURA.md +15 -0
- package/docs/CI.md +54 -0
- package/docs/CLI.md +32 -0
- package/docs/DEPENDENCIAS-NATIVAS.md +93 -0
- package/docs/VALIDACAO.md +65 -0
- package/docs/licenses/fpc/COPYING.FPC +25 -0
- package/docs/licenses/fpc/COPYING.GPL.txt +340 -0
- package/docs/licenses/fpc/COPYING.LGPL.txt +504 -0
- package/docs/licenses/fpc/ORIGIN.json +21 -0
- package/docs/licenses/lazarus/COPYING.LGPL.txt +481 -0
- package/docs/licenses/lazarus/COPYING.modifiedLGPL.txt +26 -0
- package/docs/licenses/lazarus/COPYING.txt +46 -0
- package/docs/licenses/lazarus/ORIGIN.json +1 -0
- package/native/NativeErrors.pas +14 -0
- package/native/NativeMotor.pas +220 -0
- package/native/NativeParent.pas +61 -0
- package/native/NativeProtocol.pas +64 -0
- package/native/NativeTLS.pas +70 -0
- package/native/acbr-worker.lpr +26 -0
- package/native/generated/AcbrModels.pas +4287 -0
- package/package.json +72 -4
- package/scripts/build-native-deps.mjs +237 -0
- package/tools/extract-model.lpr +119 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
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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",
|
|
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
|
+
}
|