@credithub/harlan-components 1.130.0 → 1.131.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { useGlobalData } from '../../contexts/globalDataContext';
3
3
  import PostHogContext from '../../contexts/PostHogContext';
4
4
  import { Client } from '@credithub/webservice';
5
5
  import { useCallback, useContext } from 'react';
6
- import { WebService } from '../webservice';
6
+ import { HARLAN_WS_MARKER, WebService } from '../webservice';
7
7
  /**
8
8
  * Hook que identifica indícios de liminar de sustação de protesto.
9
9
  *
@@ -23,9 +23,7 @@ var useLiminarProtestosDoPassado = function (_a) {
23
23
  var data, parsedData, _a, _b, normalizedData, protestosDoPassado, instrumentosParaEvento, idsSomenteComChave;
24
24
  return __generator(this, function (_c) {
25
25
  switch (_c.label) {
26
- case 0: return [4 /*yield*/, client.request("SELECT FROM 'Protestos'.'History'", {
27
- documento: documento
28
- })];
26
+ case 0: return [4 /*yield*/, client.request("SELECT FROM 'Protestos'.'History'", __assign({ documento: documento }, HARLAN_WS_MARKER))];
29
27
  case 1:
30
28
  data = _c.sent();
31
29
  _b = (_a = Object).values;
@@ -1,4 +1,5 @@
1
- import { __awaiter, __generator } from "tslib";
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { HARLAN_WS_MARKER } from '../../../components/webservice';
2
3
  import { parseBpqlResponse } from '../../../utils/bpqlResponse';
3
4
  import { Client } from '@credithub/webservice';
4
5
  export function sendInstrumentoManualEmail(client, payload) {
@@ -6,12 +7,7 @@ export function sendInstrumentoManualEmail(client, payload) {
6
7
  var response, parsed;
7
8
  return __generator(this, function (_a) {
8
9
  switch (_a.label) {
9
- case 0: return [4 /*yield*/, client.request("INSERT INTO 'IEPTB'.'InstrumentoManualSendmail'", {
10
- documento: payload.documento,
11
- nm_chave: payload.nm_chave,
12
- livro: payload.livro,
13
- folha: payload.folha
14
- })];
10
+ case 0: return [4 /*yield*/, client.request("INSERT INTO 'IEPTB'.'InstrumentoManualSendmail'", __assign({ documento: payload.documento, nm_chave: payload.nm_chave, livro: payload.livro, folha: payload.folha }, HARLAN_WS_MARKER))];
15
11
  case 1:
16
12
  response = _a.sent();
17
13
  return [4 /*yield*/, parseBpqlResponse(response)];
@@ -31,10 +27,7 @@ export function sendInstrumentoDiscoveryEmail(client, payload) {
31
27
  var response, parsed;
32
28
  return __generator(this, function (_a) {
33
29
  switch (_a.label) {
34
- case 0: return [4 /*yield*/, client.request("INSERT INTO 'IEPTB'.'InstrumentoDiscoverySendmail'", {
35
- documento: payload.documento,
36
- nm_chave: payload.nm_chave
37
- })];
30
+ case 0: return [4 /*yield*/, client.request("INSERT INTO 'IEPTB'.'InstrumentoDiscoverySendmail'", __assign({ documento: payload.documento, nm_chave: payload.nm_chave }, HARLAN_WS_MARKER))];
38
31
  case 1:
39
32
  response = _a.sent();
40
33
  return [4 /*yield*/, parseBpqlResponse(response)];
@@ -63,9 +56,7 @@ export function discoverPDFProtesto(client, payload) {
63
56
  var response, parsed;
64
57
  return __generator(this, function (_a) {
65
58
  switch (_a.label) {
66
- case 0: return [4 /*yield*/, client.request("SELECT FROM 'PDFPROTESTO'.'DOWNLOADPDF'", {
67
- nm_chave: payload.nm_chave
68
- })];
59
+ case 0: return [4 /*yield*/, client.request("SELECT FROM 'PDFPROTESTO'.'DOWNLOADPDF'", __assign({ nm_chave: payload.nm_chave }, HARLAN_WS_MARKER))];
69
60
  case 1:
70
61
  response = _a.sent();
71
62
  return [4 /*yield*/, Client.WebService.parse(response)];
@@ -4,6 +4,10 @@ import React, { Context, FC, PropsWithChildren } from 'react';
4
4
  import { type ParsedResponse, type PushNotice, type RequestContext } from './requestContextTypes';
5
5
  export * from './requestContextTypes';
6
6
  export declare const WebService: React.Context<Client.WebService>;
7
+ /** Marcador enviado em todas as consultas do shell Harlan (`harlan` como boolean). */
8
+ export declare const HARLAN_WS_MARKER: {
9
+ harlan: true;
10
+ };
7
11
  type RequestDefaults = {
8
12
  data?: Client.Form;
9
13
  urlData?: Client.Form;
@@ -6,11 +6,16 @@ import { RequestStatus } from './requestContextTypes';
6
6
  import { classifyRequestError, isErrorWithPushFlag } from '../utils/classifyRequestError';
7
7
  export * from './requestContextTypes';
8
8
  export var WebService = createContext(new Client.WebService());
9
+ /** Marcador enviado em todas as consultas do shell Harlan (`harlan` como boolean). */
10
+ export var HARLAN_WS_MARKER = { harlan: true };
9
11
  export var RequestDefaultsContext = createContext({});
10
12
  export var WebServiceProvider = function (_a) {
11
13
  var credential = _a.credential, defaultData = _a.defaultData, defaultUrlData = _a.defaultUrlData, webserviceOptions = _a.webserviceOptions, children = _a.children;
12
14
  return (React.createElement(WebService.Provider, { value: new Client.WebService(credential, {}, 5, webserviceOptions !== null && webserviceOptions !== void 0 ? webserviceOptions : {}) },
13
- React.createElement(RequestDefaultsContext.Provider, { value: { data: defaultData, urlData: defaultUrlData } }, children)));
15
+ React.createElement(RequestDefaultsContext.Provider, { value: {
16
+ data: __assign(__assign({}, (defaultData !== null && defaultData !== void 0 ? defaultData : {})), HARLAN_WS_MARKER),
17
+ urlData: defaultUrlData
18
+ } }, children)));
14
19
  };
15
20
  var isDocument = function (value) {
16
21
  return typeof Document !== 'undefined' && value instanceof Document;
@@ -40,7 +40,10 @@ import GlobalStyle from './styles/globalStyle';
40
40
  import theme from './styles/theme';
41
41
  import { hasOneOfTags } from './utils/tags';
42
42
  Chart.register.apply(Chart, registerables);
43
- var Wrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-family: 'Open Sans Condensed';\n display: flex;\n flex-direction: column;\n gap: 20px;\n margin-bottom: 20px;\n\n * {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n\n @media print {\n @page {\n size: auto;\n margin: 5mm;\n }\n }\n"], ["\n font-family: 'Open Sans Condensed';\n display: flex;\n flex-direction: column;\n gap: 20px;\n margin-bottom: 20px;\n\n * {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n\n @media print {\n @page {\n size: auto;\n margin: 5mm;\n }\n }\n"])));
43
+ // `data-credithub-skip` opta a subárvore inteira fora do `replaceElement` da
44
+ // extensão `credithub-components`, que de outra forma muta os Text nodes
45
+ // renderizados pelo React e provoca `NotFoundError` em removeChild/insertBefore.
46
+ var Wrapper = styled.div.attrs({ 'data-credithub-skip': '' })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-family: 'Open Sans Condensed';\n display: flex;\n flex-direction: column;\n gap: 20px;\n margin-bottom: 20px;\n\n * {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n\n @media print {\n @page {\n size: auto;\n margin: 5mm;\n }\n }\n"], ["\n font-family: 'Open Sans Condensed';\n display: flex;\n flex-direction: column;\n gap: 20px;\n margin-bottom: 20px;\n\n * {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n\n @media print {\n @page {\n size: auto;\n margin: 5mm;\n }\n }\n"])));
44
47
  // Componente de dependência de Protestos estabilizado em escopo de módulo
45
48
  var ProtestosWithCCFDependency = React.memo(function (_a) {
46
49
  var children = _a.children, documento = _a.documento;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import './utils/domResilience';
1
2
  export { default as Addresses } from './components/adresses/addresses';
2
3
  export { default as BankAccounts } from './components/bank-accounts/bank-accounts';
3
4
  export { default as CCF } from './components/ccf/ccf';
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import './utils/domResilience';
1
2
  export { default as Addresses } from './components/adresses/addresses';
2
3
  export { default as BankAccounts } from './components/bank-accounts/bank-accounts';
3
4
  export { default as CCF } from './components/ccf/ccf';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Torna o React resiliente a mutações de DOM feitas por código externo
3
+ * (extensões do navegador, Google Translate, content scripts como o
4
+ * `replaceElement` do `credithub-components` que envolve CPF/CNPJ em
5
+ * `<x-credithub-extension>` por baixo dos panos).
6
+ *
7
+ * Sem este patch, quando o reconciler do React 18 tenta remover ou inserir
8
+ * um nó que já foi movido por terceiros, o navegador lança
9
+ * `NotFoundError: Failed to execute 'removeChild' on 'Node'` e o React
10
+ * derruba a árvore inteira via error boundary.
11
+ *
12
+ * O patch é idempotente: se outra cópia da lib já o aplicou na mesma
13
+ * página, esta chamada vira no-op.
14
+ *
15
+ * Referência: https://github.com/facebook/react/issues/11538
16
+ */
17
+ export declare function installDomResilience(): void;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Torna o React resiliente a mutações de DOM feitas por código externo
3
+ * (extensões do navegador, Google Translate, content scripts como o
4
+ * `replaceElement` do `credithub-components` que envolve CPF/CNPJ em
5
+ * `<x-credithub-extension>` por baixo dos panos).
6
+ *
7
+ * Sem este patch, quando o reconciler do React 18 tenta remover ou inserir
8
+ * um nó que já foi movido por terceiros, o navegador lança
9
+ * `NotFoundError: Failed to execute 'removeChild' on 'Node'` e o React
10
+ * derruba a árvore inteira via error boundary.
11
+ *
12
+ * O patch é idempotente: se outra cópia da lib já o aplicou na mesma
13
+ * página, esta chamada vira no-op.
14
+ *
15
+ * Referência: https://github.com/facebook/react/issues/11538
16
+ */
17
+ var FLAG = '__credithubDomResilienceInstalled__';
18
+ export function installDomResilience() {
19
+ if (typeof window === 'undefined' || typeof Node === 'undefined') {
20
+ return;
21
+ }
22
+ var flagged = window;
23
+ if (flagged[FLAG])
24
+ return;
25
+ flagged[FLAG] = true;
26
+ var originalRemoveChild = Node.prototype.removeChild;
27
+ Node.prototype.removeChild = function patchedRemoveChild(child) {
28
+ if (child.parentNode !== this) {
29
+ if (typeof console !== 'undefined' && typeof console.warn === 'function') {
30
+ console.warn('[harlan-components] removeChild ignorado: nó não é mais filho do esperado. Provável interferência de extensão de navegador.', { child: child, expectedParent: this });
31
+ }
32
+ return child;
33
+ }
34
+ return originalRemoveChild.call(this, child);
35
+ };
36
+ var originalInsertBefore = Node.prototype.insertBefore;
37
+ Node.prototype.insertBefore = function patchedInsertBefore(newNode, referenceNode) {
38
+ if (referenceNode != null && referenceNode.parentNode !== this) {
39
+ if (typeof console !== 'undefined' && typeof console.warn === 'function') {
40
+ console.warn('[harlan-components] insertBefore ajustado: nó de referência não é mais filho do esperado. Anexando ao final.', { newNode: newNode, referenceNode: referenceNode, expectedParent: this });
41
+ }
42
+ return originalInsertBefore.call(this, newNode, null);
43
+ }
44
+ return originalInsertBefore.call(this, newNode, referenceNode);
45
+ };
46
+ }
47
+ installDomResilience();