@tollwyn/baukasten 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/product.d.ts CHANGED
@@ -128,8 +128,8 @@ export interface Product<E extends ProductEnv = ProductEnv> {
128
128
  };
129
129
  };
130
130
  /**
131
- * The day the product's part of its legal texts (`legal`) last changed, as YYYY-MM-DD. The terms
132
- * an account accepts are named by the later of this day and that of the baukasten's part.
131
+ * The day the product's part of its terms (from `legal`) last changed, as YYYY-MM-DD. The terms an
132
+ * account accepts are named by the later of this day and that of the baukasten's part.
133
133
  */
134
134
  termsDate: string;
135
135
  legal: ProductLegal;
@@ -67,7 +67,6 @@ export const de = {
67
67
  return {
68
68
  title: 'Datenschutzerklärung',
69
69
  blocks: [
70
- version(f),
71
70
  paragraph(`Diese Erklärung beschreibt, welche Personendaten ${f.name} bearbeitet, wozu, wo und wie lange. Verantwortlich ist ${who(f)}, erreichbar unter `, mail(FLEET.mailbox), '. Sie folgt dem Bundesgesetz über den Datenschutz (DSG) und, wo sie anwendbar ist, der Datenschutz-Grundverordnung der EU (DSGVO).'),
72
71
  heading('Was wir bearbeiten, wozu und gestützt worauf'),
73
72
  list([
@@ -67,7 +67,6 @@ export const en = {
67
67
  return {
68
68
  title: 'Privacy policy',
69
69
  blocks: [
70
- version(f),
71
70
  paragraph(`This policy explains which personal data ${f.name} processes, why, where and for how long. The controller is ${who(f)}, reachable at `, mail(FLEET.mailbox), '. It follows the Swiss Federal Act on Data Protection (FADP) and, where it applies, the EU General Data Protection Regulation (GDPR).'),
72
71
  heading('What we process, why, and on what basis'),
73
72
  list([
@@ -110,5 +110,9 @@ export declare const FLEET: {
110
110
  /** The mail relay logs each recipient and the state of each delivery; journald keeps it this long. */
111
111
  readonly relayLogDays: 30;
112
112
  };
113
- /** The providers of the fleet that process data for the operator, which the terms name. */
113
+ /**
114
+ * The providers of the fleet that process data for the operator, which the terms of a web app and
115
+ * the privacy text of a Shopify app name as sub-processors: every fact above with that role, so a new
116
+ * one changes both texts, which promise 30 days of notice of it.
117
+ */
114
118
  export declare const FLEET_PROCESSORS: ("Cloudflare, Inc." | "Hetzner Online GmbH" | "Neon, LLC" | "Infomaniak Network SA")[];
@@ -77,13 +77,9 @@ export const FLEET = {
77
77
  /** The mail relay logs each recipient and the state of each delivery; journald keeps it this long. */
78
78
  relayLogDays: 30
79
79
  };
80
- /** The providers of the fleet that process data for the operator, which the terms name. */
81
- export const FLEET_PROCESSORS = [
82
- FLEET.cloudflare,
83
- FLEET.hoster,
84
- FLEET.neon,
85
- FLEET.stripe,
86
- FLEET.mail
87
- ]
88
- .filter((provider) => provider.role === 'processor')
89
- .map((provider) => provider.name);
80
+ /**
81
+ * The providers of the fleet that process data for the operator, which the terms of a web app and
82
+ * the privacy text of a Shopify app name as sub-processors: every fact above with that role, so a new
83
+ * one changes both texts, which promise 30 days of notice of it.
84
+ */
85
+ export const FLEET_PROCESSORS = Object.values(FLEET).flatMap((fact) => typeof fact === 'object' && 'role' in fact && fact.role === 'processor' ? [fact.name] : []);
@@ -1,6 +1,6 @@
1
1
  /**
2
- * The day the baukasten's part of the legal texts last changed (legal/, legal.test.ts holds their
3
- * checksum with it); a change to that part sets it anew.
2
+ * The day the baukasten's part of the terms last changed (legal/, legal.test.ts holds their checksum
3
+ * with it); a change to that part sets it anew.
4
4
  */
5
5
  export declare const BAUKASTEN_TERMS_DATE = "2026-10-08";
6
6
  /** The name of the terms from the two days, each YYYY-MM-DD, which sort like their dates. */
@@ -1,6 +1,6 @@
1
1
  /**
2
- * The day the baukasten's part of the legal texts last changed (legal/, legal.test.ts holds their
3
- * checksum with it); a change to that part sets it anew.
2
+ * The day the baukasten's part of the terms last changed (legal/, legal.test.ts holds their checksum
3
+ * with it); a change to that part sets it anew.
4
4
  */
5
5
  export const BAUKASTEN_TERMS_DATE = '2026-10-08';
6
6
  /** The name of the terms from the two days, each YYYY-MM-DD, which sort like their dates. */
@@ -1,6 +1,6 @@
1
1
  import { heading, lettered, link, list, longDate, mail, note, paragraph, strong } from '../../server/legal/document.js';
2
- import { FLEET } from '../../server/legal/fleet.js';
3
- import { APP_PROCESSORS, SHOPIFY } from './shopify.js';
2
+ import { FLEET, FLEET_PROCESSORS } from '../../server/legal/fleet.js';
3
+ import { SHOPIFY } from './shopify.js';
4
4
  const { cloudflare, hoster, neon, webServer } = FLEET;
5
5
  const CONTRACT = 'Erfüllung des Vertrags, Art. 6 Abs. 1 lit. b DSGVO';
6
6
  const TRANSFER = {
@@ -31,7 +31,7 @@ const who = (f) => `${f.operator.name}, ${f.operator.address}`;
31
31
  export function de(f) {
32
32
  const { data, recipients } = f.privacy;
33
33
  const processors = [
34
- ...APP_PROCESSORS,
34
+ ...FLEET_PROCESSORS,
35
35
  ...recipients
36
36
  .filter((recipient) => recipient.role === 'processor')
37
37
  .map((recipient) => recipient.name)
@@ -1,6 +1,6 @@
1
1
  import { heading, lettered, link, list, longDate, mail, note, paragraph, strong } from '../../server/legal/document.js';
2
- import { FLEET } from '../../server/legal/fleet.js';
3
- import { APP_PROCESSORS, SHOPIFY } from './shopify.js';
2
+ import { FLEET, FLEET_PROCESSORS } from '../../server/legal/fleet.js';
3
+ import { SHOPIFY } from './shopify.js';
4
4
  const { cloudflare, hoster, neon, webServer } = FLEET;
5
5
  const CONTRACT = 'performance of the contract, Art. 6(1)(b) GDPR';
6
6
  const TRANSFER = {
@@ -31,7 +31,7 @@ const who = (f) => `${f.operator.name}, ${f.operator.address}`;
31
31
  export function en(f) {
32
32
  const { data, recipients } = f.privacy;
33
33
  const processors = [
34
- ...APP_PROCESSORS,
34
+ ...FLEET_PROCESSORS,
35
35
  ...recipients
36
36
  .filter((recipient) => recipient.role === 'processor')
37
37
  .map((recipient) => recipient.name)
@@ -8,9 +8,3 @@ export declare const SHOPIFY: {
8
8
  /** Shopify sends shop/redact this long after a store removed the app. */
9
9
  readonly redactHours: 48;
10
10
  };
11
- /**
12
- * The providers of the fleet that process data for an app, which the merchant approves as
13
- * sub-processors: not Stripe, since Shopify bills the app. Should one stop being a processor of the
14
- * operator, this does not compile until the text follows.
15
- */
16
- export declare const APP_PROCESSORS: ("Cloudflare, Inc." | "Hetzner Online GmbH" | "Neon, LLC" | "Infomaniak Network SA")[];
@@ -2,7 +2,6 @@
2
2
  // fleet (server/legal/fleet.ts), and the only place of them. They come from Shopify: its privacy
3
3
  // policy (SHOPIFY.privacy) and its documentation of the privacy webhooks; a change there is a change
4
4
  // here.
5
- import { FLEET } from '../../server/legal/fleet.js';
6
5
  export const SHOPIFY = {
7
6
  /**
8
7
  * Where Shopify says what it processes, under the agreement of each merchant with Shopify and by
@@ -13,9 +12,3 @@ export const SHOPIFY = {
13
12
  /** Shopify sends shop/redact this long after a store removed the app. */
14
13
  redactHours: 48
15
14
  };
16
- /**
17
- * The providers of the fleet that process data for an app, which the merchant approves as
18
- * sub-processors: not Stripe, since Shopify bills the app. Should one stop being a processor of the
19
- * operator, this does not compile until the text follows.
20
- */
21
- export const APP_PROCESSORS = [FLEET.cloudflare, FLEET.hoster, FLEET.neon, FLEET.mail].map((provider) => provider.name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tollwyn/baukasten",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "description": "What every product built on this kit shares: configuration, log and server, database with two-layer migrations, health, accounts with sessions and API keys, limits, mail, payment through Stripe, the numbers for sales, the frame and pages, the stubs that hang them into a product and the check of a product, the ESLint config and knip preset of its gate, and the tools to test one, its connection test among them; and for a Shopify app its installation with tokens, the frame of the admin, its webhooks, its plan through the Partner API and its privacy text.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",