@orangecheck/legal 0.7.1 → 0.7.3

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/index.js CHANGED
@@ -477,7 +477,7 @@ var terms = {
477
477
  metaTitle: "Terms of Service \u2014 OrangeCheck",
478
478
  metaDescription: "The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.",
479
479
  effective: "2025-09-30",
480
- updated: "2026-05-15",
480
+ updated: "2026-10-08",
481
481
  preamble: [
482
482
  {
483
483
  kind: "callout",
@@ -556,7 +556,7 @@ var terms = {
556
556
  blocks: [
557
557
  {
558
558
  kind: "para",
559
- text: "Most of the Service works without registration. An optional **Sign in with Bitcoin** flow opens a session keyed to a Bitcoin address you prove control of via BIP-322 \u2014 no password, no email. A session is a server-side row plus an `httpOnly + Secure + SameSite=Lax` cookie, revoked when you sign out or the cookie expires."
559
+ text: "Most of the Service works without registration. Optional sign-in proves one of: a Bitcoin address (a BIP-322 signature), an email inbox (a one-time code), or a Google or GitHub account. No password is ever created. A session is a server-side row plus an `HttpOnly; Secure; SameSite=None` cookie on `.ochk.io`, revoked when you sign out or the cookie expires."
560
560
  },
561
561
  {
562
562
  kind: "para",
@@ -662,7 +662,7 @@ var privacy = {
662
662
  metaTitle: "Privacy Policy \u2014 OrangeCheck",
663
663
  metaDescription: "How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.",
664
664
  effective: "2025-09-30",
665
- updated: "2026-05-15",
665
+ updated: "2026-10-08",
666
666
  preamble: [
667
667
  {
668
668
  kind: "callout",
@@ -688,7 +688,7 @@ var privacy = {
688
688
  },
689
689
  {
690
690
  k: "optional account",
691
- v: "most of the Service needs no sign-in; the optional Sign in with Bitcoin flow is keyed to a public address \u2014 no email, no password"
691
+ v: "most of the Service needs no sign-in; optional sign-in uses a Bitcoin signature, an email code, or Google/GitHub \u2014 never a password"
692
692
  },
693
693
  {
694
694
  k: "transparency",
@@ -722,7 +722,34 @@ var privacy = {
722
722
  { kind: "subhead", text: "information you provide" },
723
723
  {
724
724
  kind: "para",
725
- text: "**Bitcoin addresses and signatures** are processed client-side to generate a cryptographic proof; this data is public by design. **Identity bindings** you add are included in the signed message and are public. **Contact information** is collected only if you email us for support, solely to respond. **Sign-in sessions** store a minimal account row keyed by your verified Bitcoin address plus session rows with a random id, source IP, a user-agent hash, and timestamps \u2014 no password, no email."
725
+ text: "**Bitcoin addresses and signatures** are processed client-side to generate a cryptographic proof; this data is public by design. **Identity bindings** you add are included in the signed message and are public. **Messages you send us** \u2014 through the contact form or by email \u2014 reach our inbox through our email provider (Resend) and are kept only as long as we need them to reply."
726
+ },
727
+ { kind: "subhead", text: "if you sign in" },
728
+ {
729
+ kind: "bullets",
730
+ items: [
731
+ {
732
+ k: "account",
733
+ v: "an opaque `did:oc` identifier, an optional display name and Nostr npub, and when the account was created and last signed in"
734
+ },
735
+ {
736
+ k: "how you sign in",
737
+ v: "a Bitcoin address you prove with a signature (stored as is \u2014 it is public on-chain anyway); or, for an email code, Google or GitHub, the verified email address \u2014 encrypted at rest, plus a one-way hash of it so we can find your account"
738
+ },
739
+ {
740
+ k: "passkeys",
741
+ v: "for each passkey you register: its public key, a label, the transports it reported, and when it was added and last used"
742
+ },
743
+ {
744
+ k: "each session",
745
+ v: "a hash of the session token, the IP address and full user-agent string of the device that opened it, and timestamps"
746
+ },
747
+ {
748
+ k: "sign-in log",
749
+ v: "each sign-in and each identity you link or remove, with the IP address and user-agent at the time \u2014 kept for security"
750
+ },
751
+ { k: "never", v: "a password, a private key, or a seed phrase" }
752
+ ]
726
753
  },
727
754
  { kind: "subhead", text: "automatically collected" },
728
755
  {
@@ -734,9 +761,26 @@ var privacy = {
734
761
  ]
735
762
  },
736
763
  { kind: "subhead", text: "cookies & analytics" },
764
+ {
765
+ kind: "bullets",
766
+ items: [
767
+ {
768
+ k: "oc_session",
769
+ v: "your sign-in, set by ochk.io for every `*.ochk.io` site: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days"
770
+ },
771
+ {
772
+ k: "oc_oauth_state",
773
+ v: "only during a Google or GitHub sign-in: HttpOnly; SameSite=Lax; 10 minutes; deleted when the sign-in completes"
774
+ },
775
+ {
776
+ k: "oc_theme \xB7 oc_skin \xB7 oc_motion",
777
+ v: "your light/dark, appearance and reduced-motion choices (Domain=.ochk.io); not used to identify you"
778
+ }
779
+ ]
780
+ },
737
781
  {
738
782
  kind: "para",
739
- text: "Essential cookies are required for the Service to function; a preference cookie stores your theme. We use [Plausible Analytics](https://plausible.io/privacy) \u2014 cookie-free, no personal data, aggregate statistics only \u2014 alongside our own first-party, cookieless analytics (oc insights): no cookies, no cross-site identity, your IP address is hashed and immediately discarded (never stored), and Do-Not-Track / Global Privacy Control signals are honored. No advertising or tracking cookies."
783
+ text: "A browser tab may also keep its own copy of a sign-in token in session storage, cleared when the tab closes. We use [Plausible Analytics](https://plausible.io/privacy) \u2014 cookie-free, no personal data, aggregate statistics only \u2014 alongside our own first-party, cookieless analytics (oc insights): no cookies, no cross-site identity, your IP address is hashed and immediately discarded (never stored), and Do-Not-Track / Global Privacy Control signals are honored. No advertising or tracking cookies."
740
784
  }
741
785
  ]
742
786
  },
@@ -758,7 +802,7 @@ var privacy = {
758
802
  {
759
803
  id: "retention",
760
804
  heading: "data retention",
761
- hint: "90d logs \xB7 permanent public artifacts",
805
+ hint: "no automatic deletion yet \xB7 permanent public artifacts",
762
806
  blocks: [
763
807
  {
764
808
  kind: "bullets",
@@ -768,12 +812,16 @@ var privacy = {
768
812
  v: "permanent and publicly shareable; data published to Nostr cannot be deleted by OrangeCheck"
769
813
  },
770
814
  {
771
- k: "technical logs",
772
- v: "server logs retained 90 days for security and debugging, then auto-deleted"
815
+ k: "request logs",
816
+ v: "held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy"
773
817
  },
774
818
  {
775
- k: "session rows",
776
- v: "live up to 30 days (cookie max-age) or until revoked; idle accounts with no session activity for 24 months are deleted automatically"
819
+ k: "sessions",
820
+ v: "deleted when you sign out. A session that simply expires after 30 days is not yet deleted automatically."
821
+ },
822
+ {
823
+ k: "account, sign-in identities, passkeys and sign-in log",
824
+ v: "kept until you ask us to delete them at [[PRIVACY_CONTACT]]; there is no automatic deletion yet"
777
825
  },
778
826
  {
779
827
  k: "support emails",
@@ -822,7 +870,7 @@ var terms2 = {
822
870
  metaTitle: "Terms of Service \u2014 me.ochk.io",
823
871
  metaDescription: "Terms of service for me.ochk.io: a Bitcoin-backed identity that pays users in sats. OrangeCheck custody during bring-up, federation custody and self-custody graduation as the destination, no KYC.",
824
872
  effective: "2026-05-15",
825
- updated: "2026-05-15",
873
+ updated: "2026-10-08",
826
874
  preamble: [
827
875
  {
828
876
  kind: "callout",
@@ -877,7 +925,7 @@ var terms2 = {
877
925
  {
878
926
  id: "custody",
879
927
  heading: "custody & graduation",
880
- hint: "federation-custodied \xB7 self-custody exit",
928
+ hint: "orangecheck-held during bring-up \xB7 federation custody and self-custody exit next",
881
929
  blocks: [
882
930
  {
883
931
  kind: "para",
@@ -987,7 +1035,7 @@ var privacy2 = {
987
1035
  metaTitle: "Privacy Policy \u2014 me.ochk.io",
988
1036
  metaDescription: "me.ochk.io privacy policy. No KYC, no PII required, per-integrator scoped identity, and a full account of what OrangeCheck stores.",
989
1037
  effective: "2026-05-15",
990
- updated: "2026-05-15",
1038
+ updated: "2026-10-08",
991
1039
  preamble: [
992
1040
  {
993
1041
  kind: "callout",
@@ -1008,8 +1056,8 @@ var privacy2 = {
1008
1056
  v: "me.ochk.io never collects your legal name, government ID, or physical address"
1009
1057
  },
1010
1058
  {
1011
- k: "no pii at signup",
1012
- v: "you sign up with a Bitcoin signature or an email/phone one-time code \u2014 your choice"
1059
+ k: "little pii at signup",
1060
+ v: "a Bitcoin signature needs no personal data; an email code, Google or GitHub sign-in stores your email address, encrypted"
1013
1061
  },
1014
1062
  {
1015
1063
  k: "scoped identity",
@@ -1045,7 +1093,7 @@ var privacy2 = {
1045
1093
  },
1046
1094
  {
1047
1095
  k: "session record",
1048
- v: "the session JWT id, account id, and issue/revoke timestamps. The session token itself lives only as a cookie in your browser."
1096
+ v: "a hash of the session token, the account id, the IP address and user-agent of the device that opened it, and timestamps. The token itself lives only in your browser."
1049
1097
  },
1050
1098
  {
1051
1099
  k: "event envelopes",
@@ -1094,7 +1142,7 @@ var privacy2 = {
1094
1142
  blocks: [
1095
1143
  {
1096
1144
  kind: "para",
1097
- text: "Two cookies. `oc_session` \u2014 the Ed25519-signed session token issued by ochk.io (HttpOnly, Secure, SameSite=Lax, Domain=.ochk.io). `oc_theme` \u2014 your dark/light preference, not auth-bearing. No tracking cookies, no advertising IDs, no third-party pixels. Page analytics use [Plausible](https://plausible.io/privacy) \u2014 cookie-free, no PII, aggregate only."
1145
+ text: "Four cookies. `oc_session` \u2014 the Ed25519-signed session token issued by ochk.io (HttpOnly, Secure, SameSite=None, Domain=.ochk.io). `oc_theme`, `oc_skin` and `oc_motion` \u2014 your dark/light, appearance and reduced-motion preferences (Domain=.ochk.io), not auth-bearing. No tracking cookies, no advertising IDs, no third-party pixels. Page analytics use [Plausible](https://plausible.io/privacy) \u2014 cookie-free, no PII, aggregate only."
1098
1146
  }
1099
1147
  ]
1100
1148
  },
@@ -1125,8 +1173,8 @@ var privacy2 = {
1125
1173
  v: "retained as the canonical earnings and custody-state record; anchored copies on Bitcoin and Nostr are immutable"
1126
1174
  },
1127
1175
  {
1128
- k: "technical logs",
1129
- v: "retained 90 days for security and debugging, then auto-deleted"
1176
+ k: "request logs",
1177
+ v: "held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy"
1130
1178
  },
1131
1179
  {
1132
1180
  k: "session records",
@@ -1180,7 +1228,7 @@ var terms3 = {
1180
1228
  metaTitle: "Terms of Service \u2014 OC Vault",
1181
1229
  metaDescription: "Terms of service for OC Vault (vault.ochk.io): an end-to-end-encrypted secrets vault. Client-side encryption, on-chain Bitcoin payment, no fund custody.",
1182
1230
  effective: "2026-05-15",
1183
- updated: "2026-05-15",
1231
+ updated: "2026-10-08",
1184
1232
  preamble: [
1185
1233
  {
1186
1234
  kind: "callout",
@@ -1197,7 +1245,7 @@ var terms3 = {
1197
1245
  blocks: [
1198
1246
  {
1199
1247
  kind: "para",
1200
- text: "OC Vault stores passwords, one-time-password seeds, API keys, notes, and small files. Every item is **encrypted client-side** in your browser under a vault key that never leaves your control. When you sync to the cloud, OrangeCheck stores an opaque encrypted blob \u2014 **OrangeCheck cannot read your vault contents, item names, or item types.**"
1248
+ text: "OC Vault stores passwords, one-time-password seeds, API keys, notes, and small files. Every item is **encrypted client-side** in your browser under a vault key that only your passphrase or recovery code unlocks; we store that key only in sealed form. When you sync to the cloud, OrangeCheck stores an opaque encrypted blob \u2014 **OrangeCheck cannot read your vault contents, item names, or item types.**"
1201
1249
  },
1202
1250
  {
1203
1251
  kind: "para",
@@ -1211,7 +1259,7 @@ var terms3 = {
1211
1259
  blocks: [
1212
1260
  {
1213
1261
  kind: "para",
1214
- text: "Your identity is a Bitcoin address you prove control of via BIP-322. No email or password is required. You are responsible for the security of the wallet you sign with and of the vault key that encrypts your data."
1262
+ text: "You sign in with your OrangeCheck account: a Bitcoin address you prove via BIP-322, an email one-time code, or Google/GitHub. Your entries are encrypted under a vault key that your vault passphrase (or recovery code) unlocks; signing in does not decrypt anything. You are responsible for keeping that passphrase and recovery code safe."
1215
1263
  }
1216
1264
  ]
1217
1265
  },
@@ -1283,7 +1331,7 @@ var terms3 = {
1283
1331
  blocks: [
1284
1332
  {
1285
1333
  kind: "para",
1286
- text: "The portable export feature is always free and works offline with [`@orangecheck/vault-core`](https://www.npmjs.com/package/@orangecheck/vault-core) \u2014 even if OC Vault is discontinued, you retain a self-decryptable copy of your data. That guarantee does not depend on any paid tier."
1334
+ text: "The encrypted backup (settings \u2192 encrypted backup) is free on every tier. It writes one file holding your vault key and every entry, sealed under a passphrase you choose (scrypt, then AES-256-GCM), so it restores on any device and stays decryptable with standard, open primitives if OC Vault is discontinued. The plain export holds entries without the key and is readable only where your vault key already is."
1287
1335
  },
1288
1336
  {
1289
1337
  kind: "stub",
@@ -1361,7 +1409,7 @@ var privacy3 = {
1361
1409
  metaTitle: "Privacy Policy \u2014 OC Vault",
1362
1410
  metaDescription: "OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.",
1363
1411
  effective: "2026-05-15",
1364
- updated: "2026-05-15",
1412
+ updated: "2026-10-08",
1365
1413
  sections: [
1366
1414
  {
1367
1415
  id: "principles",
@@ -1382,8 +1430,16 @@ var privacy3 = {
1382
1430
  kind: "bullets",
1383
1431
  items: [
1384
1432
  {
1385
- k: "identity address",
1386
- v: "the Bitcoin address you sign in with \u2014 public on-chain already; no email, no name"
1433
+ k: "account id",
1434
+ v: "the opaque did:oc of the OrangeCheck account you sign in with; your vault is filed under it"
1435
+ },
1436
+ {
1437
+ k: "sealed vault key",
1438
+ v: "your vault key, encrypted under your passphrase and under your recovery code, so a new device can unlock; OrangeCheck cannot open it without one of them"
1439
+ },
1440
+ {
1441
+ k: "team email (optional)",
1442
+ v: "if you choose to show teammates an email address in a team vault, that address"
1387
1443
  },
1388
1444
  {
1389
1445
  k: "payment records",
@@ -1391,7 +1447,7 @@ var privacy3 = {
1391
1447
  },
1392
1448
  {
1393
1449
  k: "encrypted blobs",
1394
- v: "opaque ciphertext keyed to your identity address \u2014 OrangeCheck cannot decrypt it"
1450
+ v: "opaque ciphertext filed under your account id \u2014 OrangeCheck cannot decrypt it"
1395
1451
  },
1396
1452
  {
1397
1453
  k: "per-item metadata",
@@ -1418,9 +1474,8 @@ var privacy3 = {
1418
1474
  items: [
1419
1475
  "The contents of any vault item",
1420
1476
  "The names, titles, or types of your items",
1421
- "Your vault key or any recovery material",
1422
- "Your access tokens (only the SHA-256 hash is stored)",
1423
- "Which sites the browser extension autofilled on \u2014 origin matching happens locally in your browser"
1477
+ "Your vault key in usable form, your passphrase, or your recovery code \u2014 we hold the key only sealed under them",
1478
+ "Your access tokens (only the SHA-256 hash is stored)"
1424
1479
  ]
1425
1480
  }
1426
1481
  ]
@@ -1432,12 +1487,12 @@ var privacy3 = {
1432
1487
  blocks: [
1433
1488
  {
1434
1489
  kind: "para",
1435
- text: "The same encrypted vault is reachable from three surfaces. The zero-knowledge guarantee \u2014 that OrangeCheck only ever holds ciphertext \u2014 applies to all of them."
1490
+ text: "The same encrypted vault is reachable from the web app and from the CLI and SDK; a browser extension is planned. The zero-knowledge guarantee \u2014 that OrangeCheck only ever holds ciphertext \u2014 applies to all of them."
1436
1491
  },
1437
- { kind: "subhead", text: "browser extension (OC Vault for Chromium / Firefox)" },
1492
+ { kind: "subhead", text: "browser extension (not released yet)" },
1438
1493
  {
1439
1494
  kind: "para",
1440
- text: "The extension fetches the same encrypted blobs the web app does, caches them **as ciphertext** in browser-extension storage, and decrypts in the service worker only after you enter your passphrase. The vault key lives in memory and a RAM-only `storage.session` slot \u2014 it is never written to disk. The content script that offers autofill receives **one entry's field values at fill time** and nothing else; it never receives the vault key or the entry index. The extension talks only to your own `vault.ochk.io` account: no analytics, no telemetry, no remote code."
1495
+ text: "There is no OC Vault browser extension yet. When one ships, it is designed to work this way: the extension fetches the same encrypted blobs the web app does, caches them **as ciphertext** in browser-extension storage, and decrypts in the service worker only after you enter your passphrase. The vault key lives in memory and a RAM-only `storage.session` slot \u2014 it is never written to disk. The content script that offers autofill receives **one entry's field values at fill time** and nothing else; it never receives the vault key or the entry index. The extension talks only to your own `vault.ochk.io` account: no analytics, no telemetry, no remote code."
1441
1496
  },
1442
1497
  { kind: "subhead", text: "developer platform \u2014 access tokens, CLI, SDK, GitHub Action" },
1443
1498
  {
@@ -1452,7 +1507,7 @@ var privacy3 = {
1452
1507
  blocks: [
1453
1508
  {
1454
1509
  kind: "para",
1455
- text: "Essential cookies only, plus a theme preference. Page analytics use [Plausible](https://plausible.io/privacy) \u2014 cookie-free, no PII, aggregate only. No advertising or tracking cookies."
1510
+ text: "No cookies of vault.ochk.io's own. The family sign-in cookie `oc_session` (set by ochk.io: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days) and the appearance cookies `oc_theme`, `oc_skin` and `oc_motion` apply here. Your vault data lives in your browser's IndexedDB, under your account. Page analytics use [Plausible](https://plausible.io/privacy) \u2014 cookie-free, no PII, aggregate only. No advertising or tracking cookies."
1456
1511
  }
1457
1512
  ]
1458
1513
  },
@@ -1465,15 +1520,19 @@ var privacy3 = {
1465
1520
  items: [
1466
1521
  {
1467
1522
  k: "encrypted blobs",
1468
- v: "retained while your account is active; deleted on account deletion"
1523
+ v: "kept while your account is active; you can delete the whole cloud copy at any time from settings"
1524
+ },
1525
+ {
1526
+ k: "sealed vault key",
1527
+ v: "kept so a new device can unlock; deleting the cloud copy does not remove it \u2014 ask us at [[PRIVACY_CONTACT]] and we will"
1469
1528
  },
1470
1529
  {
1471
1530
  k: "payment records",
1472
1531
  v: "retained as required for accounting and entitlement verification"
1473
1532
  },
1474
1533
  {
1475
- k: "technical logs",
1476
- v: "retained 90 days, then auto-deleted"
1534
+ k: "request logs",
1535
+ v: "held by our hosting provider (Vercel) for its own short retention window; rate-limit counters keyed by IP expire with their window"
1477
1536
  }
1478
1537
  ]
1479
1538
  }