@orangecheck/legal 0.7.2 → 0.7.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/index.js +100 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +100 -41
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.mjs
CHANGED
|
@@ -471,7 +471,7 @@ var terms = {
|
|
|
471
471
|
metaTitle: "Terms of Service \u2014 OrangeCheck",
|
|
472
472
|
metaDescription: "The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.",
|
|
473
473
|
effective: "2025-09-30",
|
|
474
|
-
updated: "2026-
|
|
474
|
+
updated: "2026-10-08",
|
|
475
475
|
preamble: [
|
|
476
476
|
{
|
|
477
477
|
kind: "callout",
|
|
@@ -550,7 +550,7 @@ var terms = {
|
|
|
550
550
|
blocks: [
|
|
551
551
|
{
|
|
552
552
|
kind: "para",
|
|
553
|
-
text: "Most of the Service works without registration.
|
|
553
|
+
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."
|
|
554
554
|
},
|
|
555
555
|
{
|
|
556
556
|
kind: "para",
|
|
@@ -656,7 +656,7 @@ var privacy = {
|
|
|
656
656
|
metaTitle: "Privacy Policy \u2014 OrangeCheck",
|
|
657
657
|
metaDescription: "How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.",
|
|
658
658
|
effective: "2025-09-30",
|
|
659
|
-
updated: "2026-
|
|
659
|
+
updated: "2026-10-08",
|
|
660
660
|
preamble: [
|
|
661
661
|
{
|
|
662
662
|
kind: "callout",
|
|
@@ -682,7 +682,7 @@ var privacy = {
|
|
|
682
682
|
},
|
|
683
683
|
{
|
|
684
684
|
k: "optional account",
|
|
685
|
-
v: "most of the Service needs no sign-in;
|
|
685
|
+
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"
|
|
686
686
|
},
|
|
687
687
|
{
|
|
688
688
|
k: "transparency",
|
|
@@ -716,7 +716,34 @@ var privacy = {
|
|
|
716
716
|
{ kind: "subhead", text: "information you provide" },
|
|
717
717
|
{
|
|
718
718
|
kind: "para",
|
|
719
|
-
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. **
|
|
719
|
+
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."
|
|
720
|
+
},
|
|
721
|
+
{ kind: "subhead", text: "if you sign in" },
|
|
722
|
+
{
|
|
723
|
+
kind: "bullets",
|
|
724
|
+
items: [
|
|
725
|
+
{
|
|
726
|
+
k: "account",
|
|
727
|
+
v: "an opaque `did:oc` identifier, an optional display name and Nostr npub, and when the account was created and last signed in"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
k: "how you sign in",
|
|
731
|
+
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"
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
k: "passkeys",
|
|
735
|
+
v: "for each passkey you register: its public key, a label, the transports it reported, and when it was added and last used"
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
k: "each session",
|
|
739
|
+
v: "a hash of the session token, the IP address and full user-agent string of the device that opened it, and timestamps"
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
k: "sign-in log",
|
|
743
|
+
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"
|
|
744
|
+
},
|
|
745
|
+
{ k: "never", v: "a password, a private key, or a seed phrase" }
|
|
746
|
+
]
|
|
720
747
|
},
|
|
721
748
|
{ kind: "subhead", text: "automatically collected" },
|
|
722
749
|
{
|
|
@@ -728,9 +755,26 @@ var privacy = {
|
|
|
728
755
|
]
|
|
729
756
|
},
|
|
730
757
|
{ kind: "subhead", text: "cookies & analytics" },
|
|
758
|
+
{
|
|
759
|
+
kind: "bullets",
|
|
760
|
+
items: [
|
|
761
|
+
{
|
|
762
|
+
k: "oc_session",
|
|
763
|
+
v: "your sign-in, set by ochk.io for every `*.ochk.io` site: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days"
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
k: "oc_oauth_state",
|
|
767
|
+
v: "only during a Google or GitHub sign-in: HttpOnly; SameSite=Lax; 10 minutes; deleted when the sign-in completes"
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
k: "oc_theme \xB7 oc_skin \xB7 oc_motion",
|
|
771
|
+
v: "your light/dark, appearance and reduced-motion choices (Domain=.ochk.io); not used to identify you"
|
|
772
|
+
}
|
|
773
|
+
]
|
|
774
|
+
},
|
|
731
775
|
{
|
|
732
776
|
kind: "para",
|
|
733
|
-
text: "
|
|
777
|
+
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."
|
|
734
778
|
}
|
|
735
779
|
]
|
|
736
780
|
},
|
|
@@ -752,7 +796,7 @@ var privacy = {
|
|
|
752
796
|
{
|
|
753
797
|
id: "retention",
|
|
754
798
|
heading: "data retention",
|
|
755
|
-
hint: "
|
|
799
|
+
hint: "no automatic deletion yet \xB7 permanent public artifacts",
|
|
756
800
|
blocks: [
|
|
757
801
|
{
|
|
758
802
|
kind: "bullets",
|
|
@@ -762,12 +806,16 @@ var privacy = {
|
|
|
762
806
|
v: "permanent and publicly shareable; data published to Nostr cannot be deleted by OrangeCheck"
|
|
763
807
|
},
|
|
764
808
|
{
|
|
765
|
-
k: "
|
|
766
|
-
v: "
|
|
809
|
+
k: "request logs",
|
|
810
|
+
v: "held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy"
|
|
767
811
|
},
|
|
768
812
|
{
|
|
769
|
-
k: "
|
|
770
|
-
v: "
|
|
813
|
+
k: "sessions",
|
|
814
|
+
v: "deleted when you sign out. A session that simply expires after 30 days is not yet deleted automatically."
|
|
815
|
+
},
|
|
816
|
+
{
|
|
817
|
+
k: "account, sign-in identities, passkeys and sign-in log",
|
|
818
|
+
v: "kept until you ask us to delete them at [[PRIVACY_CONTACT]]; there is no automatic deletion yet"
|
|
771
819
|
},
|
|
772
820
|
{
|
|
773
821
|
k: "support emails",
|
|
@@ -816,7 +864,7 @@ var terms2 = {
|
|
|
816
864
|
metaTitle: "Terms of Service \u2014 me.ochk.io",
|
|
817
865
|
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.",
|
|
818
866
|
effective: "2026-05-15",
|
|
819
|
-
updated: "2026-
|
|
867
|
+
updated: "2026-10-09",
|
|
820
868
|
preamble: [
|
|
821
869
|
{
|
|
822
870
|
kind: "callout",
|
|
@@ -963,7 +1011,7 @@ var terms2 = {
|
|
|
963
1011
|
blocks: [
|
|
964
1012
|
{
|
|
965
1013
|
kind: "para",
|
|
966
|
-
text: "**Your right:** stop using me.ochk.io at any time; you may delete your identity from `/me/settings`. **Our right:** suspend or terminate access with or without cause, including for abuse or legal risk. Deleting your identity does not settle a balance OrangeCheck owes you, and during bring-up there is no sweep to self-custody to run first \u2014 no federation is bound. If your balance is above zero, bind a payout destination and instruct a cash-out before you delete, or contact us.
|
|
1014
|
+
text: "**Your right:** stop using me.ochk.io at any time; you may delete your identity from `/me/settings`. **Our right:** suspend or terminate access with or without cause, including for abuse or legal risk. Deleting your identity does not settle a balance OrangeCheck owes you, and during bring-up there is no sweep to self-custody to run first \u2014 no federation is bound. If your balance is above zero, bind a payout destination and instruct a cash-out before you delete, or contact us. Hashes anchored to Bitcoin and commitments published to Nostr are immutable and cannot be deleted by OrangeCheck; neither names you. The disclaimer, liability, indemnification, governing-law, and dispute provisions survive."
|
|
967
1015
|
}
|
|
968
1016
|
]
|
|
969
1017
|
},
|
|
@@ -981,7 +1029,7 @@ var privacy2 = {
|
|
|
981
1029
|
metaTitle: "Privacy Policy \u2014 me.ochk.io",
|
|
982
1030
|
metaDescription: "me.ochk.io privacy policy. No KYC, no PII required, per-integrator scoped identity, and a full account of what OrangeCheck stores.",
|
|
983
1031
|
effective: "2026-05-15",
|
|
984
|
-
updated: "2026-
|
|
1032
|
+
updated: "2026-10-09",
|
|
985
1033
|
preamble: [
|
|
986
1034
|
{
|
|
987
1035
|
kind: "callout",
|
|
@@ -1002,8 +1050,8 @@ var privacy2 = {
|
|
|
1002
1050
|
v: "me.ochk.io never collects your legal name, government ID, or physical address"
|
|
1003
1051
|
},
|
|
1004
1052
|
{
|
|
1005
|
-
k: "
|
|
1006
|
-
v: "
|
|
1053
|
+
k: "little pii at signup",
|
|
1054
|
+
v: "a Bitcoin signature needs no personal data; an email code, Google or GitHub sign-in stores your email address, encrypted"
|
|
1007
1055
|
},
|
|
1008
1056
|
{
|
|
1009
1057
|
k: "scoped identity",
|
|
@@ -1039,7 +1087,7 @@ var privacy2 = {
|
|
|
1039
1087
|
},
|
|
1040
1088
|
{
|
|
1041
1089
|
k: "session record",
|
|
1042
|
-
v: "the session
|
|
1090
|
+
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."
|
|
1043
1091
|
},
|
|
1044
1092
|
{
|
|
1045
1093
|
k: "event envelopes",
|
|
@@ -1051,7 +1099,7 @@ var privacy2 = {
|
|
|
1051
1099
|
},
|
|
1052
1100
|
{
|
|
1053
1101
|
k: "public anchors",
|
|
1054
|
-
v: "OpenTimestamps
|
|
1102
|
+
v: "an OpenTimestamps proof over each envelope\u2019s hash, and a salted commitment to each envelope on Nostr. Public by design, and neither names you, the site or the amount. The envelope itself is served only to whoever holds its id. Drop manifests, which name no one, are published in full."
|
|
1055
1103
|
}
|
|
1056
1104
|
]
|
|
1057
1105
|
}
|
|
@@ -1088,7 +1136,7 @@ var privacy2 = {
|
|
|
1088
1136
|
blocks: [
|
|
1089
1137
|
{
|
|
1090
1138
|
kind: "para",
|
|
1091
|
-
text: "
|
|
1139
|
+
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."
|
|
1092
1140
|
}
|
|
1093
1141
|
]
|
|
1094
1142
|
},
|
|
@@ -1116,11 +1164,11 @@ var privacy2 = {
|
|
|
1116
1164
|
items: [
|
|
1117
1165
|
{
|
|
1118
1166
|
k: "event & rebind envelopes",
|
|
1119
|
-
v: "retained as the canonical earnings and custody-state record;
|
|
1167
|
+
v: "retained as the canonical earnings and custody-state record; their hashes on Bitcoin and commitments on Nostr are immutable"
|
|
1120
1168
|
},
|
|
1121
1169
|
{
|
|
1122
|
-
k: "
|
|
1123
|
-
v: "
|
|
1170
|
+
k: "request logs",
|
|
1171
|
+
v: "held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy"
|
|
1124
1172
|
},
|
|
1125
1173
|
{
|
|
1126
1174
|
k: "session records",
|
|
@@ -1151,7 +1199,7 @@ var privacy2 = {
|
|
|
1151
1199
|
blocks: [
|
|
1152
1200
|
{
|
|
1153
1201
|
kind: "para",
|
|
1154
|
-
text: "From `/me/settings \u2192 advanced \u2192 delete` you can permanently revoke your OrangeCheck identity. Deleting does not pay out sats OrangeCheck owes you, and there is no sweep to self-custody to run first: no federation is bound during bring-up. Settle a non-zero balance before you delete. OrangeCheck deletes the operational records it holds about you;
|
|
1202
|
+
text: "From `/me/settings \u2192 advanced \u2192 delete` you can permanently revoke your OrangeCheck identity. Deleting does not pay out sats OrangeCheck owes you, and there is no sweep to self-custody to run first: no federation is bound during bring-up. Settle a non-zero balance before you delete. OrangeCheck deletes the operational records it holds about you; hashes already anchored to Bitcoin and commitments published to Nostr are immutable and cannot be deleted by anyone; neither names you."
|
|
1155
1203
|
}
|
|
1156
1204
|
]
|
|
1157
1205
|
},
|
|
@@ -1174,7 +1222,7 @@ var terms3 = {
|
|
|
1174
1222
|
metaTitle: "Terms of Service \u2014 OC Vault",
|
|
1175
1223
|
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.",
|
|
1176
1224
|
effective: "2026-05-15",
|
|
1177
|
-
updated: "2026-
|
|
1225
|
+
updated: "2026-10-08",
|
|
1178
1226
|
preamble: [
|
|
1179
1227
|
{
|
|
1180
1228
|
kind: "callout",
|
|
@@ -1191,7 +1239,7 @@ var terms3 = {
|
|
|
1191
1239
|
blocks: [
|
|
1192
1240
|
{
|
|
1193
1241
|
kind: "para",
|
|
1194
|
-
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
|
|
1242
|
+
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.**"
|
|
1195
1243
|
},
|
|
1196
1244
|
{
|
|
1197
1245
|
kind: "para",
|
|
@@ -1205,7 +1253,7 @@ var terms3 = {
|
|
|
1205
1253
|
blocks: [
|
|
1206
1254
|
{
|
|
1207
1255
|
kind: "para",
|
|
1208
|
-
text: "
|
|
1256
|
+
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."
|
|
1209
1257
|
}
|
|
1210
1258
|
]
|
|
1211
1259
|
},
|
|
@@ -1277,7 +1325,7 @@ var terms3 = {
|
|
|
1277
1325
|
blocks: [
|
|
1278
1326
|
{
|
|
1279
1327
|
kind: "para",
|
|
1280
|
-
text: "The
|
|
1328
|
+
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."
|
|
1281
1329
|
},
|
|
1282
1330
|
{
|
|
1283
1331
|
kind: "stub",
|
|
@@ -1355,7 +1403,7 @@ var privacy3 = {
|
|
|
1355
1403
|
metaTitle: "Privacy Policy \u2014 OC Vault",
|
|
1356
1404
|
metaDescription: "OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.",
|
|
1357
1405
|
effective: "2026-05-15",
|
|
1358
|
-
updated: "2026-
|
|
1406
|
+
updated: "2026-10-08",
|
|
1359
1407
|
sections: [
|
|
1360
1408
|
{
|
|
1361
1409
|
id: "principles",
|
|
@@ -1376,8 +1424,16 @@ var privacy3 = {
|
|
|
1376
1424
|
kind: "bullets",
|
|
1377
1425
|
items: [
|
|
1378
1426
|
{
|
|
1379
|
-
k: "
|
|
1380
|
-
v: "the
|
|
1427
|
+
k: "account id",
|
|
1428
|
+
v: "the opaque did:oc of the OrangeCheck account you sign in with; your vault is filed under it"
|
|
1429
|
+
},
|
|
1430
|
+
{
|
|
1431
|
+
k: "sealed vault key",
|
|
1432
|
+
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"
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
k: "team email (optional)",
|
|
1436
|
+
v: "if you choose to show teammates an email address in a team vault, that address"
|
|
1381
1437
|
},
|
|
1382
1438
|
{
|
|
1383
1439
|
k: "payment records",
|
|
@@ -1385,7 +1441,7 @@ var privacy3 = {
|
|
|
1385
1441
|
},
|
|
1386
1442
|
{
|
|
1387
1443
|
k: "encrypted blobs",
|
|
1388
|
-
v: "opaque ciphertext
|
|
1444
|
+
v: "opaque ciphertext filed under your account id \u2014 OrangeCheck cannot decrypt it"
|
|
1389
1445
|
},
|
|
1390
1446
|
{
|
|
1391
1447
|
k: "per-item metadata",
|
|
@@ -1412,9 +1468,8 @@ var privacy3 = {
|
|
|
1412
1468
|
items: [
|
|
1413
1469
|
"The contents of any vault item",
|
|
1414
1470
|
"The names, titles, or types of your items",
|
|
1415
|
-
"Your vault key or
|
|
1416
|
-
"Your access tokens (only the SHA-256 hash is stored)"
|
|
1417
|
-
"Which sites the browser extension autofilled on \u2014 origin matching happens locally in your browser"
|
|
1471
|
+
"Your vault key in usable form, your passphrase, or your recovery code \u2014 we hold the key only sealed under them",
|
|
1472
|
+
"Your access tokens (only the SHA-256 hash is stored)"
|
|
1418
1473
|
]
|
|
1419
1474
|
}
|
|
1420
1475
|
]
|
|
@@ -1426,12 +1481,12 @@ var privacy3 = {
|
|
|
1426
1481
|
blocks: [
|
|
1427
1482
|
{
|
|
1428
1483
|
kind: "para",
|
|
1429
|
-
text: "The same encrypted vault is reachable from
|
|
1484
|
+
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."
|
|
1430
1485
|
},
|
|
1431
|
-
{ kind: "subhead", text: "browser extension (
|
|
1486
|
+
{ kind: "subhead", text: "browser extension (not released yet)" },
|
|
1432
1487
|
{
|
|
1433
1488
|
kind: "para",
|
|
1434
|
-
text: "
|
|
1489
|
+
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."
|
|
1435
1490
|
},
|
|
1436
1491
|
{ kind: "subhead", text: "developer platform \u2014 access tokens, CLI, SDK, GitHub Action" },
|
|
1437
1492
|
{
|
|
@@ -1446,7 +1501,7 @@ var privacy3 = {
|
|
|
1446
1501
|
blocks: [
|
|
1447
1502
|
{
|
|
1448
1503
|
kind: "para",
|
|
1449
|
-
text: "
|
|
1504
|
+
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."
|
|
1450
1505
|
}
|
|
1451
1506
|
]
|
|
1452
1507
|
},
|
|
@@ -1459,15 +1514,19 @@ var privacy3 = {
|
|
|
1459
1514
|
items: [
|
|
1460
1515
|
{
|
|
1461
1516
|
k: "encrypted blobs",
|
|
1462
|
-
v: "
|
|
1517
|
+
v: "kept while your account is active; you can delete the whole cloud copy at any time from settings"
|
|
1518
|
+
},
|
|
1519
|
+
{
|
|
1520
|
+
k: "sealed vault key",
|
|
1521
|
+
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"
|
|
1463
1522
|
},
|
|
1464
1523
|
{
|
|
1465
1524
|
k: "payment records",
|
|
1466
1525
|
v: "retained as required for accounting and entitlement verification"
|
|
1467
1526
|
},
|
|
1468
1527
|
{
|
|
1469
|
-
k: "
|
|
1470
|
-
v: "
|
|
1528
|
+
k: "request logs",
|
|
1529
|
+
v: "held by our hosting provider (Vercel) for its own short retention window; rate-limit counters keyed by IP expire with their window"
|
|
1471
1530
|
}
|
|
1472
1531
|
]
|
|
1473
1532
|
}
|