@flowselections/twinfield-authenticatie-module-15-06-2026 1.3.9 → 1.3.10

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.
@@ -0,0 +1,2 @@
1
+ export declare function TwinfieldKoppelingPage(): import("react").JSX.Element;
2
+ //# sourceMappingURL=TwinfieldKoppelingPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwinfieldKoppelingPage.d.ts","sourceRoot":"","sources":["../../src/components/TwinfieldKoppelingPage.tsx"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,gCAMrC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TwinfieldAuthSettingsCard } from "./settings/TwinfieldAuthSettingsCard";
3
+ export function TwinfieldKoppelingPage() {
4
+ return (_jsx("div", { className: "p-6 max-w-4xl mx-auto", children: _jsx(TwinfieldAuthSettingsCard, { defaultExpanded: true }) }));
5
+ }
@@ -3,6 +3,7 @@ export * from './_core-safelist';
3
3
  export * from './components/TemplatePage';
4
4
  export * from './components/TemplateModulePage';
5
5
  export { TemplateModuleLogo } from './components/TemplateModuleLogo';
6
+ export { TwinfieldKoppelingPage } from './components/TwinfieldKoppelingPage';
6
7
  export { TemplateModulePage } from "./components/TemplateModulePage";
7
8
  export { downloadTwinfieldInvoicePdf, downloadTwinfieldInvoicePdfsBulk, resendTwinfieldInvoice, sendPaymentReminder, duplicateTwinfieldInvoice, } from "./lib/accounting/twinfield/actions.functions";
8
9
  export { getTwinfieldConformance } from "./lib/accounting/twinfield/conformance.functions";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAKrE,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,eAAO,MAAM,4BAA4B,EAAE,UAY1C,CAAC;AAEF,eAAO,MAAM,QAAQ,YAA+B,CAAC;AACrD,eAAO,MAAM,4BAA4B,YAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAKrE,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,eAAO,MAAM,4BAA4B,EAAE,UAY1C,CAAC;AAEF,eAAO,MAAM,QAAQ,YAA+B,CAAC;AACrD,eAAO,MAAM,4BAA4B,YAA+B,CAAC"}
package/dist-lib/index.js CHANGED
@@ -18,6 +18,7 @@ export * from './_core-safelist';
18
18
  export * from './components/TemplatePage';
19
19
  export * from './components/TemplateModulePage';
20
20
  export { TemplateModuleLogo } from './components/TemplateModuleLogo';
21
+ export { TwinfieldKoppelingPage } from './components/TwinfieldKoppelingPage';
21
22
  export { TemplateModulePage } from "./components/TemplateModulePage";
22
23
  import { TwinfieldAuthSettingsCard } from "./components/settings/TwinfieldAuthSettingsCard";
23
24
  // Twinfield acties-server-fns — geëxporteerd voor de facturatie-module.
@@ -1 +1 @@
1
- {"version":3,"file":"central-accounts.server.d.ts","sourceRoot":"","sources":["../../../src/lib/central/central-accounts.server.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAoED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB/D;AAGD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA6D1B;AAGD;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkCjF;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBxF"}
1
+ {"version":3,"file":"central-accounts.server.d.ts","sourceRoot":"","sources":["../../../src/lib/central/central-accounts.server.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAoED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB/D;AAGD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAoE1B;AAGD;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkCjF;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBxF"}
@@ -101,7 +101,7 @@ export function assertTwinfieldAuthorizeUrl(value) {
101
101
  export async function startTwinfieldAuthorize(returnUrl) {
102
102
  const returnDetails = describeReturnUrl(returnUrl);
103
103
  if (!returnDetails.valid || !returnUrl.startsWith("https://")) {
104
- throw new Error(`Ongeldige return_url voor Central Auth (${returnUrl}). Verwacht een absolute https-URL naar de shell, bijv. https://mijn-shell.nl/mijn-module. Controleer PUBLIC_BASE_URL en of de host als return-host in Central Auth staat.`);
104
+ throw new Error(`Ongeldige return_url voor Central Auth (${returnUrl}). Verwacht een absolute https-URL naar de module, bijv. https://mijn-shell.nl/twinfield-authenticatie.`);
105
105
  }
106
106
  const { baseUrl, secret } = getCentralConfig();
107
107
  const endpoint = `${baseUrl}/api/authorize/twinfield`;
@@ -118,6 +118,10 @@ export async function startTwinfieldAuthorize(returnUrl) {
118
118
  body: snippet,
119
119
  returnUrl: describeReturnUrl(returnUrl),
120
120
  });
121
+ const returnHostRejected = res.status === 400 && /return[_ -]?url|return[_ -]?host|allowed host|toegestaan/i.test(snippet);
122
+ if (returnHostRejected) {
123
+ throw new Error(`Central Auth staat de return-host ${returnDetails.host ?? "van deze shell"} niet toe. Registreer deze host in Central Auth en probeer opnieuw.`);
124
+ }
121
125
  throw new Error(`Central Auth authorize faalde (${res.status}): ${snippet}`);
122
126
  }
123
127
  let json = null;
@@ -2,4 +2,9 @@ export declare function normalizePublicBaseUrl(value: string | null | undefined)
2
2
  /** Alleen relatieve paden toestaan (geen schema, geen protocol-relative). */
3
3
  export declare function normalizeReturnPath(value: string | null | undefined, fallback?: string): string;
4
4
  export declare function baseUrlFromRequest(request: Request | null | undefined): string | null;
5
+ export declare function buildReturnUrl(requestBase: string | null, envBase: string | null, returnPathValue: string | null | undefined): {
6
+ returnUrl: string;
7
+ returnPath: string;
8
+ source: "request" | "env";
9
+ };
5
10
  //# sourceMappingURL=return-url.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"return-url.server.d.ts","sourceRoot":"","sources":["../../../src/lib/central/return-url.server.ts"],"names":[],"mappings":"AAIA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAatF;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,SAAiB,GAAG,MAAM,CAMvG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAiBrF"}
1
+ {"version":3,"file":"return-url.server.d.ts","sourceRoot":"","sources":["../../../src/lib/central/return-url.server.ts"],"names":[],"mappings":"AAIA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAatF;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,SAA6B,GAAG,MAAM,CAMnH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAiBrF;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACzC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,KAAK,CAAA;CAAE,CAsBtE"}
@@ -22,7 +22,7 @@ export function normalizePublicBaseUrl(value) {
22
22
  }
23
23
  }
24
24
  /** Alleen relatieve paden toestaan (geen schema, geen protocol-relative). */
25
- export function normalizeReturnPath(value, fallback = "/mijn-module") {
25
+ export function normalizeReturnPath(value, fallback = "/twinfield-authenticatie") {
26
26
  const raw = (value ?? "").trim();
27
27
  if (!raw.startsWith("/") || raw.startsWith("//"))
28
28
  return fallback;
@@ -52,3 +52,20 @@ export function baseUrlFromRequest(request) {
52
52
  return null;
53
53
  }
54
54
  }
55
+ export function buildReturnUrl(requestBase, envBase, returnPathValue) {
56
+ const base = requestBase ?? envBase;
57
+ if (!base) {
58
+ throw new Error("Kon de basis-URL van deze app niet bepalen. Stel PUBLIC_BASE_URL in als absolute https-URL (bijv. https://jouw-shell.nl).");
59
+ }
60
+ const returnPath = normalizeReturnPath(returnPathValue);
61
+ const returnUrl = new URL(returnPath, `${base}/`);
62
+ const expectedOrigin = new URL(base).origin;
63
+ if (returnUrl.protocol !== "https:" || returnUrl.origin !== expectedOrigin) {
64
+ throw new Error("De return-URL kon niet veilig worden opgebouwd uit de HTTPS-origin van deze shell.");
65
+ }
66
+ return {
67
+ returnUrl: returnUrl.toString(),
68
+ returnPath,
69
+ source: requestBase ? "request" : "env",
70
+ };
71
+ }