@orangecheck/legal 0.1.0
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/LICENSE +21 -0
- package/README.md +95 -0
- package/dist/index.d.mts +86 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +1980 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1961 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +62 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,1980 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var Link = require('next/link');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
10
|
+
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
11
|
+
|
|
12
|
+
// src/constants.ts
|
|
13
|
+
var LEGAL_ENTITY = "OrangeCheck";
|
|
14
|
+
var LEGAL_ENTITY_LONG = "OrangeCheck (OCHK), an unincorporated project";
|
|
15
|
+
var ENTITY_PENDING = true;
|
|
16
|
+
var CONTACT_GENERAL = "hello@ochk.io";
|
|
17
|
+
var CONTACT_SECURITY = "security@ochk.io";
|
|
18
|
+
var CONTACT_PRIVACY = "hello@ochk.io";
|
|
19
|
+
var GOVERNING_LAW_STATE = "Delaware, United States";
|
|
20
|
+
var ARBITRATION_SEAT = "Wilmington, Delaware, United States";
|
|
21
|
+
var GLOBAL_TOKENS = {
|
|
22
|
+
ENTITY: LEGAL_ENTITY,
|
|
23
|
+
ENTITY_LONG: LEGAL_ENTITY_LONG,
|
|
24
|
+
CONTACT: CONTACT_GENERAL,
|
|
25
|
+
SECURITY_CONTACT: CONTACT_SECURITY,
|
|
26
|
+
PRIVACY_CONTACT: CONTACT_PRIVACY,
|
|
27
|
+
GOVERNING_LAW: GOVERNING_LAW_STATE,
|
|
28
|
+
ARBITRATION_SEAT
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// src/registry.ts
|
|
32
|
+
var LEGAL_SITES = {
|
|
33
|
+
www: {
|
|
34
|
+
slug: "www",
|
|
35
|
+
profile: "protocol",
|
|
36
|
+
host: "ochk.io",
|
|
37
|
+
product: "OrangeCheck",
|
|
38
|
+
productShort: "OrangeCheck",
|
|
39
|
+
contact: CONTACT_GENERAL,
|
|
40
|
+
securityContact: CONTACT_SECURITY,
|
|
41
|
+
selfHosted: true
|
|
42
|
+
},
|
|
43
|
+
me: {
|
|
44
|
+
slug: "me",
|
|
45
|
+
profile: "me",
|
|
46
|
+
host: "me.ochk.io",
|
|
47
|
+
product: "me.ochk.io",
|
|
48
|
+
productShort: "me.ochk.io",
|
|
49
|
+
contact: CONTACT_GENERAL,
|
|
50
|
+
securityContact: CONTACT_SECURITY,
|
|
51
|
+
selfHosted: true
|
|
52
|
+
},
|
|
53
|
+
vault: {
|
|
54
|
+
slug: "vault",
|
|
55
|
+
profile: "vault",
|
|
56
|
+
host: "vault.ochk.io",
|
|
57
|
+
product: "OC Vault",
|
|
58
|
+
productShort: "Vault",
|
|
59
|
+
contact: CONTACT_GENERAL,
|
|
60
|
+
securityContact: CONTACT_SECURITY,
|
|
61
|
+
selfHosted: true
|
|
62
|
+
},
|
|
63
|
+
fleet: {
|
|
64
|
+
slug: "fleet",
|
|
65
|
+
profile: "fleet",
|
|
66
|
+
host: "fleet.ochk.io",
|
|
67
|
+
product: "OrangeCheck Fleet",
|
|
68
|
+
productShort: "Fleet",
|
|
69
|
+
contact: CONTACT_GENERAL,
|
|
70
|
+
securityContact: CONTACT_SECURITY,
|
|
71
|
+
selfHosted: true
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var PROTOCOL_LINKED_SITES = [
|
|
75
|
+
"attest",
|
|
76
|
+
"lock",
|
|
77
|
+
"vote",
|
|
78
|
+
"stamp",
|
|
79
|
+
"agent",
|
|
80
|
+
"pledge",
|
|
81
|
+
"docs",
|
|
82
|
+
"analytics"
|
|
83
|
+
];
|
|
84
|
+
function getSiteContext(slug) {
|
|
85
|
+
const ctx = LEGAL_SITES[slug];
|
|
86
|
+
if (!ctx) {
|
|
87
|
+
throw new Error(
|
|
88
|
+
`@orangecheck/legal: unknown site "${slug}". Known self-hosting sites: ${Object.keys(LEGAL_SITES).join(", ")}.`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return ctx;
|
|
92
|
+
}
|
|
93
|
+
function legalHref(siteSlug, kind) {
|
|
94
|
+
const ctx = LEGAL_SITES[siteSlug];
|
|
95
|
+
if (ctx?.selfHosted) return `/${kind}`;
|
|
96
|
+
return `https://ochk.io/${kind}`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/content/clauses.ts
|
|
100
|
+
var eligibility = {
|
|
101
|
+
id: "eligibility",
|
|
102
|
+
heading: "eligibility",
|
|
103
|
+
blocks: [
|
|
104
|
+
{
|
|
105
|
+
kind: "bullets",
|
|
106
|
+
items: [
|
|
107
|
+
"You must be at least 13 (or the age of digital consent in your jurisdiction)",
|
|
108
|
+
"You must have the legal capacity to enter into a binding contract",
|
|
109
|
+
"You must not be prohibited from using the Service under applicable law",
|
|
110
|
+
"You must comply with all applicable laws and regulations"
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
};
|
|
115
|
+
var acceptableUse = {
|
|
116
|
+
id: "acceptable-use",
|
|
117
|
+
heading: "acceptable use",
|
|
118
|
+
hint: "permitted \xB7 prohibited",
|
|
119
|
+
blocks: [
|
|
120
|
+
{ kind: "subhead", text: "prohibited \u2014 illegal" },
|
|
121
|
+
{
|
|
122
|
+
kind: "bullets",
|
|
123
|
+
items: [
|
|
124
|
+
"Any unlawful purpose",
|
|
125
|
+
"Violating any applicable laws or regulations",
|
|
126
|
+
"Fraud, money laundering, or financial crimes",
|
|
127
|
+
"Infringing intellectual property rights"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
{ kind: "subhead", text: "prohibited \u2014 harmful" },
|
|
131
|
+
{
|
|
132
|
+
kind: "bullets",
|
|
133
|
+
items: [
|
|
134
|
+
"Harass, threaten, or harm others",
|
|
135
|
+
"Impersonate any person or entity",
|
|
136
|
+
"Misrepresent your identity or affiliation",
|
|
137
|
+
"Assert control of a Bitcoin address, identity, or handle you do not control"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{ kind: "subhead", text: "prohibited \u2014 technical abuse" },
|
|
141
|
+
{
|
|
142
|
+
kind: "bullets",
|
|
143
|
+
items: [
|
|
144
|
+
"Interfere with or disrupt the Service or its servers",
|
|
145
|
+
"Attempt unauthorized access to any account, system, or data",
|
|
146
|
+
"Automated scraping or harvesting without permission",
|
|
147
|
+
"Introduce viruses, malware, or malicious code",
|
|
148
|
+
"Circumvent security features or rate limits"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
kind: "para",
|
|
153
|
+
text: "We reserve the right to investigate and act against anyone who violates these prohibitions \u2014 including terminating access and reporting to law enforcement."
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
};
|
|
157
|
+
var intellectualProperty = {
|
|
158
|
+
id: "intellectual-property",
|
|
159
|
+
heading: "intellectual property",
|
|
160
|
+
blocks: [
|
|
161
|
+
{ kind: "subhead", text: "[[ENTITY]]'s rights" },
|
|
162
|
+
{
|
|
163
|
+
kind: "para",
|
|
164
|
+
text: "The Service and its content (excluding user-generated content) are protected by copyright, trademark, patent, and other IP laws \u2014 including the OrangeCheck name, logos, branding, site design, software, code, algorithms, and documentation."
|
|
165
|
+
},
|
|
166
|
+
{ kind: "subhead", text: "your license" },
|
|
167
|
+
{
|
|
168
|
+
kind: "para",
|
|
169
|
+
text: "You receive a limited, non-exclusive, non-transferable, revocable license to access and use the Service subject to these Terms. You may not sell, sublicense, or use the Service to build a competing product."
|
|
170
|
+
},
|
|
171
|
+
{ kind: "subhead", text: "your content" },
|
|
172
|
+
{
|
|
173
|
+
kind: "para",
|
|
174
|
+
text: "You retain ownership of content you submit (feedback, support requests, integration material). You grant us a worldwide, non-exclusive, royalty-free license to operate and improve the Service using that content. You are responsible for your content."
|
|
175
|
+
},
|
|
176
|
+
{ kind: "subhead", text: "open source" },
|
|
177
|
+
{
|
|
178
|
+
kind: "para",
|
|
179
|
+
text: "OrangeCheck protocol specifications and the `@orangecheck/*` packages are released under open-source licenses (MIT unless stated otherwise). Those portions are governed by their own license terms; these Terms govern the hosted service."
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
};
|
|
183
|
+
var limitationOfLiability = {
|
|
184
|
+
id: "liability",
|
|
185
|
+
heading: "limitation of liability",
|
|
186
|
+
hint: "maximum legal cap",
|
|
187
|
+
blocks: [
|
|
188
|
+
{
|
|
189
|
+
kind: "callout",
|
|
190
|
+
emphatic: true,
|
|
191
|
+
text: "TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL [[ENTITY]], ITS AFFILIATES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, LICENSORS, CONTRIBUTORS, OR SUPPLIERS BE LIABLE FOR ANY DAMAGES ARISING OUT OF OR RELATED TO THE SERVICE, THESE TERMS, OR YOUR USE OR INABILITY TO USE THE SERVICE \u2014 WHETHER BASED ON CONTRACT, TORT (INCLUDING NEGLIGENCE), STATUTE, INDEMNITY, OR ANY OTHER LEGAL THEORY \u2014 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES."
|
|
192
|
+
},
|
|
193
|
+
{ kind: "subhead", text: "excluded damages" },
|
|
194
|
+
{
|
|
195
|
+
kind: "para",
|
|
196
|
+
text: "This exclusion covers, without limitation: **direct**, indirect, incidental, special, consequential, exemplary, punitive, reliance, and cover damages; and **loss of Bitcoin, sats, cryptocurrency, tokens, assets, funds, private keys, seed phrases, passwords, data, profits, revenue, goodwill, reputation, business opportunity, anticipated savings, or use**."
|
|
197
|
+
},
|
|
198
|
+
{ kind: "subhead", text: "hard cap" },
|
|
199
|
+
{
|
|
200
|
+
kind: "para",
|
|
201
|
+
text: "If, notwithstanding the above, a court of competent jurisdiction finds [[ENTITY]] liable to you, our **aggregate liability for all claims arising out of or related to the Service or these Terms is capped at the greater of (a) US$100 or (b) the total amount you actually paid [[ENTITY]] in the twelve (12) months immediately preceding the event giving rise to the claim**."
|
|
202
|
+
},
|
|
203
|
+
{ kind: "subhead", text: "essential purpose \xB7 jurisdictional floor" },
|
|
204
|
+
{
|
|
205
|
+
kind: "para",
|
|
206
|
+
text: "These limitations form an essential basis of the bargain and apply even if a limited remedy fails of its essential purpose. Some jurisdictions do not allow certain exclusions; there, the limitations apply to the maximum extent permitted by law and the remainder of these Terms stays in full force."
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
};
|
|
210
|
+
var indemnification = {
|
|
211
|
+
id: "indemnification",
|
|
212
|
+
heading: "indemnification",
|
|
213
|
+
blocks: [
|
|
214
|
+
{
|
|
215
|
+
kind: "para",
|
|
216
|
+
text: "You agree to indemnify, defend, and hold harmless [[ENTITY]] and its affiliates from any claims, liabilities, damages, losses, costs, and expenses (including reasonable attorneys' fees) arising from:"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
kind: "bullets",
|
|
220
|
+
items: [
|
|
221
|
+
"Your use or misuse of the Service",
|
|
222
|
+
"Your violation of these Terms",
|
|
223
|
+
"Your violation of any law or regulation",
|
|
224
|
+
"Your violation of any third-party rights",
|
|
225
|
+
"Content you submit or share",
|
|
226
|
+
"Your negligence or willful misconduct"
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
};
|
|
231
|
+
var changesToTerms = {
|
|
232
|
+
id: "changes",
|
|
233
|
+
heading: "changes",
|
|
234
|
+
blocks: [
|
|
235
|
+
{ kind: "subhead", text: "to the service" },
|
|
236
|
+
{
|
|
237
|
+
kind: "para",
|
|
238
|
+
text: "We may modify, suspend, or discontinue the Service at any time, with or without notice. We are not liable for any modification, suspension, or discontinuation."
|
|
239
|
+
},
|
|
240
|
+
{ kind: "subhead", text: "to these terms" },
|
|
241
|
+
{
|
|
242
|
+
kind: "bullets",
|
|
243
|
+
items: [
|
|
244
|
+
'We will update the "last updated" date',
|
|
245
|
+
"For material changes, we will provide notice on the website (and by email where we hold one)",
|
|
246
|
+
"Changes become effective when posted",
|
|
247
|
+
"Continued use after changes constitutes acceptance"
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
};
|
|
252
|
+
var disputeResolution = {
|
|
253
|
+
id: "disputes",
|
|
254
|
+
heading: "dispute resolution",
|
|
255
|
+
hint: "informal \u2192 arbitration",
|
|
256
|
+
blocks: [
|
|
257
|
+
{ kind: "subhead", text: "informal resolution" },
|
|
258
|
+
{
|
|
259
|
+
kind: "para",
|
|
260
|
+
text: "Before filing a claim, contact us at [[CONTACT]] to attempt to resolve the dispute informally."
|
|
261
|
+
},
|
|
262
|
+
{ kind: "subhead", text: "arbitration \xB7 class-action waiver \xB7 jury waiver" },
|
|
263
|
+
{
|
|
264
|
+
kind: "callout",
|
|
265
|
+
emphatic: true,
|
|
266
|
+
text: "DISPUTES ARISING OUT OF OR RELATED TO THESE TERMS OR THE SERVICE SHALL BE RESOLVED BY FINAL AND BINDING INDIVIDUAL ARBITRATION, EXCEPT AS SPECIFIED BELOW. YOU AND [[ENTITY]] EXPRESSLY WAIVE THE RIGHT TO A TRIAL BY JURY AND THE RIGHT TO PARTICIPATE IN ANY CLASS, COLLECTIVE, CONSOLIDATED, MASS, OR REPRESENTATIVE ACTION. ARBITRATION IS ON AN INDIVIDUAL BASIS ONLY."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
kind: "bullets",
|
|
270
|
+
items: [
|
|
271
|
+
"Administered by the American Arbitration Association under its then-current Commercial or Consumer Arbitration Rules (whichever applies)",
|
|
272
|
+
"Seat of arbitration: [[ARBITRATION_SEAT]] \u2014 or, at either party\u2019s election, conducted remotely by video",
|
|
273
|
+
"Single neutral arbitrator; decision final and binding, enforceable in any court of competent jurisdiction",
|
|
274
|
+
"The arbitrator \u2014 not any court \u2014 decides threshold questions of arbitrability, including the validity and scope of this clause"
|
|
275
|
+
]
|
|
276
|
+
},
|
|
277
|
+
{ kind: "subhead", text: "exceptions to arbitration" },
|
|
278
|
+
{
|
|
279
|
+
kind: "bullets",
|
|
280
|
+
items: [
|
|
281
|
+
"Small-claims court actions (if eligible and filed individually)",
|
|
282
|
+
"Injunctive or equitable relief to protect intellectual property or confidential information",
|
|
283
|
+
"Any claim that cannot lawfully be arbitrated under applicable law"
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{ kind: "subhead", text: "one-year limit to bring claims" },
|
|
287
|
+
{
|
|
288
|
+
kind: "para",
|
|
289
|
+
text: "To the fullest extent permitted by law, any claim arising out of or relating to the Service or these Terms must be commenced **within one (1) year** after it accrues, or it is permanently barred."
|
|
290
|
+
},
|
|
291
|
+
{ kind: "subhead", text: "opt-out of arbitration" },
|
|
292
|
+
{
|
|
293
|
+
kind: "para",
|
|
294
|
+
text: "You may opt out by sending written notice to [[CONTACT]] within 30 days of first using the Service, including your name, the date you first used the Service, and a clear statement that you wish to opt out. Opting out does not affect the class-action or jury-trial waivers."
|
|
295
|
+
},
|
|
296
|
+
{ kind: "subhead", text: "governing law" },
|
|
297
|
+
{
|
|
298
|
+
kind: "para",
|
|
299
|
+
text: "These Terms are governed by the laws of the State of [[GOVERNING_LAW]], without regard to conflict-of-law principles, and, where applicable, the U.S. Federal Arbitration Act (9 U.S.C. \xA7\xA7 1\u201316). For users in the EEA, UK, or Switzerland, mandatory consumer-protection laws of your country of residence may apply and nothing here overrides those rights."
|
|
300
|
+
},
|
|
301
|
+
{ kind: "subhead", text: "entity of record" },
|
|
302
|
+
{
|
|
303
|
+
kind: "callout",
|
|
304
|
+
text: 'OrangeCheck is, at the date of this document, operated as the unincorporated project "[[ENTITY_LONG]]". References to "[[ENTITY]]" mean that project and the operators acting on its behalf; upon formation of a formal legal entity, that entity becomes the party of record and these Terms \u2014 including the arbitration and governing-law provisions \u2014 bind it as successor without further notice.'
|
|
305
|
+
}
|
|
306
|
+
]
|
|
307
|
+
};
|
|
308
|
+
var miscellaneous = {
|
|
309
|
+
id: "miscellaneous",
|
|
310
|
+
heading: "miscellaneous",
|
|
311
|
+
blocks: [
|
|
312
|
+
{
|
|
313
|
+
kind: "bullets",
|
|
314
|
+
items: [
|
|
315
|
+
{
|
|
316
|
+
k: "entire agreement",
|
|
317
|
+
v: "these terms + the privacy policy are the entire agreement and supersede any prior agreement on the same subject"
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
k: "severability",
|
|
321
|
+
v: "if a provision is invalid or unenforceable it is severed and the remainder stays in full force"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
k: "waiver",
|
|
325
|
+
v: "failure to enforce a provision is not a waiver of the right to enforce it later"
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
k: "assignment",
|
|
329
|
+
v: "you may not assign these terms without our consent; we may assign freely in a merger, acquisition, or sale of assets"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
k: "no agency",
|
|
333
|
+
v: "nothing here creates a partnership, joint venture, employment, agency, or fiduciary relationship"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
k: "force majeure",
|
|
337
|
+
v: "we are not liable for delays or failures caused by events beyond our reasonable control \u2014 including network failures, Nostr relay outages, Bitcoin network conditions, government action, or natural disaster"
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
k: "notices",
|
|
341
|
+
v: "to you via email, the Service, or the website; to us at [[CONTACT]]"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
k: "electronic acceptance",
|
|
345
|
+
v: "your use of the Service is electronic acceptance of these terms under applicable e-signature laws"
|
|
346
|
+
}
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
{ kind: "subhead", text: "sanctions, export controls, and prohibited jurisdictions" },
|
|
350
|
+
{
|
|
351
|
+
kind: "para",
|
|
352
|
+
text: "You represent and warrant that you are not, and are not acting on behalf of, any person or entity that is:"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
kind: "bullets",
|
|
356
|
+
items: [
|
|
357
|
+
"Located in, organized under the laws of, or ordinarily resident in any country or territory subject to comprehensive U.S., U.N., E.U., or U.K. sanctions",
|
|
358
|
+
"Identified on the U.S. Treasury OFAC Specially Designated Nationals list, Consolidated Sanctions List, or any other U.S. government restricted-party list",
|
|
359
|
+
"Identified on any U.K. HMT, E.U., U.N., or other applicable consolidated sanctions list",
|
|
360
|
+
"Otherwise subject to a sanctions, export-control, or anti-terrorism restriction that would prohibit your use of the Service"
|
|
361
|
+
]
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
kind: "para",
|
|
365
|
+
text: "You agree to comply with all applicable export-control laws, including the U.S. Export Administration Regulations. A breach of this section is a material breach of these Terms."
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
};
|
|
369
|
+
var privacyRights = {
|
|
370
|
+
id: "your-rights",
|
|
371
|
+
heading: "your rights",
|
|
372
|
+
hint: "access \xB7 correction \xB7 deletion",
|
|
373
|
+
blocks: [
|
|
374
|
+
{
|
|
375
|
+
kind: "bullets",
|
|
376
|
+
items: [
|
|
377
|
+
{
|
|
378
|
+
k: "access & portability",
|
|
379
|
+
v: "request a copy of your personal information in a machine-readable format"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
k: "correction",
|
|
383
|
+
v: "request correction of inaccurate or incomplete information"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
k: "deletion",
|
|
387
|
+
v: "request deletion of personal information we hold (data published to public networks cannot be deleted by us \u2014 see retention)"
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
k: "objection",
|
|
391
|
+
v: "object to or restrict processing in certain circumstances"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
k: "withdraw consent",
|
|
395
|
+
v: "withdraw consent where consent is the legal basis for processing"
|
|
396
|
+
}
|
|
397
|
+
]
|
|
398
|
+
},
|
|
399
|
+
{ kind: "para", text: "To exercise any right, email [[PRIVACY_CONTACT]]. We respond within 30 days." }
|
|
400
|
+
]
|
|
401
|
+
};
|
|
402
|
+
var privacyRegional = {
|
|
403
|
+
id: "regional-rights",
|
|
404
|
+
heading: "regional rights",
|
|
405
|
+
hint: "ccpa \xB7 gdpr \xB7 uk \xB7 other",
|
|
406
|
+
blocks: [
|
|
407
|
+
{ kind: "subhead", text: "california (ccpa / cpra)" },
|
|
408
|
+
{
|
|
409
|
+
kind: "bullets",
|
|
410
|
+
items: [
|
|
411
|
+
"Right to know the categories of personal information collected",
|
|
412
|
+
"Right to delete and to correct your personal information",
|
|
413
|
+
"Right to opt out of sale or sharing \u2014 we do not sell or share personal information",
|
|
414
|
+
"Right to limit use of sensitive personal information \u2014 we do not collect sensitive PI as defined by the CPRA",
|
|
415
|
+
"Right to non-discrimination for exercising your rights"
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
{ kind: "subhead", text: "europe (gdpr) & united kingdom (uk gdpr)" },
|
|
419
|
+
{
|
|
420
|
+
kind: "bullets",
|
|
421
|
+
items: [
|
|
422
|
+
{
|
|
423
|
+
k: "legal basis",
|
|
424
|
+
v: "consent, contract performance, legitimate interests (security, abuse prevention, service improvement), and legal obligations"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
k: "your rights",
|
|
428
|
+
v: "access, rectification, erasure, restriction, portability, objection, and withdrawal of consent"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
k: "supervisory authority",
|
|
432
|
+
v: "right to lodge a complaint with your local EU/EEA data-protection authority, or the UK ICO"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
k: "eu/uk representative",
|
|
436
|
+
v: "if and when required, we will designate an Article 27 representative and publish the details here"
|
|
437
|
+
}
|
|
438
|
+
]
|
|
439
|
+
},
|
|
440
|
+
{ kind: "subhead", text: "other jurisdictions" },
|
|
441
|
+
{
|
|
442
|
+
kind: "para",
|
|
443
|
+
text: "If you reside in a jurisdiction with a comprehensive privacy law \u2014 including Brazil (LGPD), Canada (PIPEDA / Law 25), Australia, Japan (APPI), South Korea (PIPA), Switzerland (FADP), or any U.S. state privacy law \u2014 you have the equivalent rights of access, correction, deletion, portability, and objection. Email [[PRIVACY_CONTACT]] and we will honour applicable rights under the law of your residence."
|
|
444
|
+
}
|
|
445
|
+
]
|
|
446
|
+
};
|
|
447
|
+
var privacyChildren = {
|
|
448
|
+
id: "childrens-privacy",
|
|
449
|
+
heading: "children's privacy",
|
|
450
|
+
blocks: [
|
|
451
|
+
{
|
|
452
|
+
kind: "para",
|
|
453
|
+
text: "[[PRODUCT]] is not intended for children under 13 (or the applicable age of digital consent in your jurisdiction). We do not knowingly collect personal information from children. If you believe we have, email [[PRIVACY_CONTACT]] immediately and we will delete it."
|
|
454
|
+
}
|
|
455
|
+
]
|
|
456
|
+
};
|
|
457
|
+
var privacyTransfers = {
|
|
458
|
+
id: "international-transfers",
|
|
459
|
+
heading: "international transfers",
|
|
460
|
+
blocks: [
|
|
461
|
+
{
|
|
462
|
+
kind: "para",
|
|
463
|
+
text: "OrangeCheck is operated from the United States. If you access [[PRODUCT]] from elsewhere, your information may be transferred to, stored, and processed in the US or other countries where our service providers operate. For users in the EEA, UK, or Switzerland, we rely on appropriate safeguards for international transfers."
|
|
464
|
+
}
|
|
465
|
+
]
|
|
466
|
+
};
|
|
467
|
+
var privacyChanges = {
|
|
468
|
+
id: "policy-changes",
|
|
469
|
+
heading: "changes to this policy",
|
|
470
|
+
blocks: [
|
|
471
|
+
{
|
|
472
|
+
kind: "bullets",
|
|
473
|
+
items: [
|
|
474
|
+
'We will update the "last updated" date above',
|
|
475
|
+
"For material changes, we will provide prominent notice on the website",
|
|
476
|
+
"Continued use after changes constitutes acceptance"
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
]
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
// src/content/protocol.ts
|
|
483
|
+
var COMMERCIAL_SCOPE_NOTE = "These Terms govern the **non-custodial** OrangeCheck family: [ochk.io](https://ochk.io), the verb sites \u2014 OC Attest, OC Lock, OC Vote, OC Stamp, OC Agent, OC Pledge \u2014 and [docs.ochk.io](https://docs.ochk.io). The commercial products **me.ochk.io**, **vault.ochk.io**, and **fleet.ochk.io** each publish their own Terms; these Terms do not govern your use of those products.";
|
|
484
|
+
var terms = {
|
|
485
|
+
kind: "terms",
|
|
486
|
+
eyebrow: "terms",
|
|
487
|
+
title: "Terms of service",
|
|
488
|
+
description: "These Terms govern your access to and use of the OrangeCheck website, protocol reference sites, and documentation. By using OrangeCheck, you agree to be bound by these Terms.",
|
|
489
|
+
metaTitle: "Terms of Service \u2014 OrangeCheck",
|
|
490
|
+
metaDescription: "The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.",
|
|
491
|
+
effective: "2025-09-30",
|
|
492
|
+
updated: "2026-05-15",
|
|
493
|
+
preamble: [
|
|
494
|
+
{
|
|
495
|
+
kind: "callout",
|
|
496
|
+
emphatic: true,
|
|
497
|
+
text: "By accessing or using OrangeCheck, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver, important limitations on liability, and specific acknowledgements about the public, permanent, and irrevocable nature of anything you publish."
|
|
498
|
+
},
|
|
499
|
+
{ kind: "callout", text: COMMERCIAL_SCOPE_NOTE }
|
|
500
|
+
],
|
|
501
|
+
sections: [
|
|
502
|
+
{
|
|
503
|
+
id: "overview",
|
|
504
|
+
heading: "overview",
|
|
505
|
+
hint: "what orangecheck does / does not",
|
|
506
|
+
blocks: [
|
|
507
|
+
{ kind: "subhead", text: "what orangecheck does" },
|
|
508
|
+
{
|
|
509
|
+
kind: "para",
|
|
510
|
+
text: "OrangeCheck is a family of **non-custodial** protocols and reference tools that let you create cryptographic proof-of-stake artifacts using Bitcoin message signatures (BIP-322), bind self-asserted handles to them, optionally publish them to decentralized Nostr relays, and discover and verify artifacts created by others."
|
|
511
|
+
},
|
|
512
|
+
{ kind: "subhead", text: "what orangecheck does not" },
|
|
513
|
+
{
|
|
514
|
+
kind: "bullets",
|
|
515
|
+
items: [
|
|
516
|
+
"Take custody of your Bitcoin, private keys, or wallet credentials",
|
|
517
|
+
"Broadcast Bitcoin transactions on your behalf",
|
|
518
|
+
"Provide financial, investment, or legal advice",
|
|
519
|
+
"Guarantee the accuracy of blockchain data from third-party sources"
|
|
520
|
+
]
|
|
521
|
+
},
|
|
522
|
+
{ kind: "subhead", text: "non-custodial nature" },
|
|
523
|
+
{
|
|
524
|
+
kind: "para",
|
|
525
|
+
text: "**You are solely responsible for** your wallet, keys, device security, and what you sign. We cannot recover lost keys, reverse signatures, or access your funds."
|
|
526
|
+
}
|
|
527
|
+
]
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
id: "publication-risks",
|
|
531
|
+
heading: "publication risks \xB7 your acknowledgement",
|
|
532
|
+
hint: "public, permanent, irrevocable",
|
|
533
|
+
blocks: [
|
|
534
|
+
{
|
|
535
|
+
kind: "callout",
|
|
536
|
+
emphatic: true,
|
|
537
|
+
text: "AN ORANGECHECK ENVELOPE IS A SIGNED, PUBLIC ARTIFACT THAT PERMANENTLY LINKS A BITCOIN ADDRESS TO EVERY HANDLE YOU ASSERT. BY CREATING OR PUBLISHING ONE, YOU EXPRESSLY ACCEPT THE RISKS BELOW. WE ARE NOT RESPONSIBLE FOR THE CONSEQUENCES OF YOUR DECISION TO PUBLISH."
|
|
538
|
+
},
|
|
539
|
+
{ kind: "subhead", text: "specific risks you accept" },
|
|
540
|
+
{
|
|
541
|
+
kind: "bullets",
|
|
542
|
+
items: [
|
|
543
|
+
{
|
|
544
|
+
k: "deanonymization",
|
|
545
|
+
v: "an envelope binds your address to your handles; chain analysis can then link your other addresses, counterparties, and spending patterns. you cannot un-bind once published."
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
k: "wealth advertisement",
|
|
549
|
+
v: "public sat values combined with real-name handles may make you a target for phishing, theft, or coercion. we recommend pseudonymous handles and modest bonds. your personal safety is your responsibility."
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
k: "irrevocability",
|
|
553
|
+
v: "envelopes published to Nostr relays are replicated across independent operators. OrangeCheck cannot delete, edit, or revoke Nostr events."
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
k: "handle spoofing",
|
|
557
|
+
v: "identity bindings are self-asserted; any user can claim any string. relying parties must verify ownership out-of-band."
|
|
558
|
+
}
|
|
559
|
+
]
|
|
560
|
+
}
|
|
561
|
+
]
|
|
562
|
+
},
|
|
563
|
+
eligibility,
|
|
564
|
+
{
|
|
565
|
+
id: "account",
|
|
566
|
+
heading: "account & sign-in",
|
|
567
|
+
hint: "sign-in optional",
|
|
568
|
+
blocks: [
|
|
569
|
+
{
|
|
570
|
+
kind: "para",
|
|
571
|
+
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."
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
kind: "para",
|
|
575
|
+
text: "If you use sign-in, you are responsible for the security of the device and wallet you sign with. Anyone with your keys can open a session in your name."
|
|
576
|
+
}
|
|
577
|
+
]
|
|
578
|
+
},
|
|
579
|
+
acceptableUse,
|
|
580
|
+
intellectualProperty,
|
|
581
|
+
{
|
|
582
|
+
id: "third-parties",
|
|
583
|
+
heading: "third parties",
|
|
584
|
+
hint: "blockchain \xB7 nostr \xB7 wallets \xB7 relying parties",
|
|
585
|
+
blocks: [
|
|
586
|
+
{
|
|
587
|
+
kind: "bullets",
|
|
588
|
+
items: [
|
|
589
|
+
{
|
|
590
|
+
k: "blockchain data",
|
|
591
|
+
v: "verification relies on third-party APIs (mempool.space, Esplora, or your own node). we do not guarantee accuracy or availability."
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
k: "nostr network",
|
|
595
|
+
v: "decentralized relays operated by third parties. published data is replicated outside our control and may persist indefinitely."
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
k: "wallet software",
|
|
599
|
+
v: "browser, mobile, desktop, and hardware wallets are third-party software we do not audit or endorse. a malicious wallet could sign something other than what is displayed."
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
k: "relying parties",
|
|
603
|
+
v: "platforms, relays, and integrators independently decide whether to trust any OrangeCheck artifact. OrangeCheck is not a party to, and accepts no liability for, those decisions."
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
k: "api / sdk consumers",
|
|
607
|
+
v: "calling a hosted endpoint or using an `@orangecheck/*` package is use of the Service and subject to these Terms; the packages are separately MIT-licensed."
|
|
608
|
+
}
|
|
609
|
+
]
|
|
610
|
+
}
|
|
611
|
+
]
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
id: "fees",
|
|
615
|
+
heading: "fees",
|
|
616
|
+
hint: "free",
|
|
617
|
+
blocks: [
|
|
618
|
+
{
|
|
619
|
+
kind: "para",
|
|
620
|
+
text: "The protocol sites and documentation are free to use. You are responsible for Bitcoin network fees on any transactions you initiate and for your own ISP and wallet-provider costs. Paid functionality, if introduced, will be announced with advance notice; the commercial products **me.ochk.io**, **vault.ochk.io**, and **fleet.ochk.io** carry their own pricing and Terms."
|
|
621
|
+
}
|
|
622
|
+
]
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
id: "disclaimers",
|
|
626
|
+
heading: "disclaimers & warranties",
|
|
627
|
+
hint: "as-is \xB7 no warranty of any kind",
|
|
628
|
+
blocks: [
|
|
629
|
+
{
|
|
630
|
+
kind: "callout",
|
|
631
|
+
emphatic: true,
|
|
632
|
+
text: 'THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY \u2014 INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.'
|
|
633
|
+
},
|
|
634
|
+
{ kind: "subhead", text: "not financial, legal, or compliance advice" },
|
|
635
|
+
{
|
|
636
|
+
kind: "para",
|
|
637
|
+
text: "Nothing OrangeCheck provides \u2014 artifacts, metrics, scores, identity bindings, or other output \u2014 is financial, investment, legal, tax, KYC, AML, sanctions, or regulatory-compliance advice. Obtain independent professional advice before relying on the Service for any decision."
|
|
638
|
+
},
|
|
639
|
+
{ kind: "subhead", text: "regulatory status \xB7 not a money services business" },
|
|
640
|
+
{
|
|
641
|
+
kind: "para",
|
|
642
|
+
text: "The protocol sites do not transmit, transfer, exchange, convert, issue, redeem, or custody any virtual currency, fiat currency, security, or other asset. They sign and verify cryptographic messages; they do not move value. Accordingly, with respect to the protocol sites, OrangeCheck does not hold itself out as a Money Services Business or money transmitter under the U.S. Bank Secrecy Act, a Virtual Asset Service Provider under the FATF Recommendations, a Crypto-Asset Service Provider under the EU MiCA Regulation, a broker-dealer, a payment or e-money institution, a bank, or a regulated identity provider."
|
|
643
|
+
},
|
|
644
|
+
{ kind: "subhead", text: "use at your own risk" },
|
|
645
|
+
{
|
|
646
|
+
kind: "para",
|
|
647
|
+
text: 'YOU ASSUME ALL RISK from your use of the Service. Verify anything load-bearing independently. Features labelled "beta", "experimental", or "preview" carry even fewer guarantees and may change or be removed at any time.'
|
|
648
|
+
}
|
|
649
|
+
]
|
|
650
|
+
},
|
|
651
|
+
limitationOfLiability,
|
|
652
|
+
indemnification,
|
|
653
|
+
{
|
|
654
|
+
id: "termination",
|
|
655
|
+
heading: "termination",
|
|
656
|
+
blocks: [
|
|
657
|
+
{
|
|
658
|
+
kind: "para",
|
|
659
|
+
text: "**Your right:** stop using the Service at any time. **Our right:** suspend or terminate access with or without cause or notice. On termination, your right to use the Service ceases; artifacts you created may remain publicly accessible and data published to Nostr cannot be deleted by OrangeCheck. The intellectual-property, disclaimer, liability, indemnification, governing-law, and dispute provisions survive."
|
|
660
|
+
}
|
|
661
|
+
]
|
|
662
|
+
},
|
|
663
|
+
changesToTerms,
|
|
664
|
+
disputeResolution,
|
|
665
|
+
miscellaneous
|
|
666
|
+
],
|
|
667
|
+
summary: "summary: non-custodial service provided as-is. you are responsible for your wallet and private keys. disputes resolved via binding arbitration. commercial products have their own terms."
|
|
668
|
+
};
|
|
669
|
+
var privacy = {
|
|
670
|
+
kind: "privacy",
|
|
671
|
+
eyebrow: "privacy",
|
|
672
|
+
title: "Privacy policy",
|
|
673
|
+
description: "How OrangeCheck handles data and privacy across the non-custodial protocol family. Non-custodial by design, minimal collection, no account required.",
|
|
674
|
+
metaTitle: "Privacy Policy \u2014 OrangeCheck",
|
|
675
|
+
metaDescription: "How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.",
|
|
676
|
+
effective: "2025-09-30",
|
|
677
|
+
updated: "2026-05-15",
|
|
678
|
+
preamble: [
|
|
679
|
+
{
|
|
680
|
+
kind: "callout",
|
|
681
|
+
text: "This policy covers the **non-custodial** OrangeCheck family \u2014 [ochk.io](https://ochk.io), the six verb sites, and [docs.ochk.io](https://docs.ochk.io). The commercial products me.ochk.io, vault.ochk.io, and fleet.ochk.io publish their own privacy policies covering the additional data their products handle."
|
|
682
|
+
}
|
|
683
|
+
],
|
|
684
|
+
sections: [
|
|
685
|
+
{
|
|
686
|
+
id: "principles",
|
|
687
|
+
heading: "our principles",
|
|
688
|
+
hint: "non-custodial, minimal, transparent",
|
|
689
|
+
blocks: [
|
|
690
|
+
{
|
|
691
|
+
kind: "bullets",
|
|
692
|
+
items: [
|
|
693
|
+
{
|
|
694
|
+
k: "non-custodial",
|
|
695
|
+
v: "we never take custody of your Bitcoin or keys; cryptographic operations happen in your wallet or browser"
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
k: "minimal collection",
|
|
699
|
+
v: "only what is necessary to provide the Service; no user profiles, no cross-web tracking"
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
k: "optional account",
|
|
703
|
+
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"
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
k: "transparency",
|
|
707
|
+
v: "plain-language policy; ask us anything at [[PRIVACY_CONTACT]]"
|
|
708
|
+
}
|
|
709
|
+
]
|
|
710
|
+
}
|
|
711
|
+
]
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
id: "what-we-dont-do",
|
|
715
|
+
heading: "what we don't do",
|
|
716
|
+
blocks: [
|
|
717
|
+
{
|
|
718
|
+
kind: "bullets",
|
|
719
|
+
items: [
|
|
720
|
+
"No custody of funds and no access to private keys",
|
|
721
|
+
"No account required for the core service",
|
|
722
|
+
"No selling or renting of personal information, ever",
|
|
723
|
+
"No targeted advertising and no cross-site tracking",
|
|
724
|
+
"No third-party analytics trackers \u2014 privacy-preserving analytics only"
|
|
725
|
+
]
|
|
726
|
+
}
|
|
727
|
+
]
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
id: "information-we-collect",
|
|
731
|
+
heading: "information we collect",
|
|
732
|
+
hint: "scoped, minimal",
|
|
733
|
+
blocks: [
|
|
734
|
+
{ kind: "subhead", text: "information you provide" },
|
|
735
|
+
{
|
|
736
|
+
kind: "para",
|
|
737
|
+
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."
|
|
738
|
+
},
|
|
739
|
+
{ kind: "subhead", text: "automatically collected" },
|
|
740
|
+
{
|
|
741
|
+
kind: "bullets",
|
|
742
|
+
items: [
|
|
743
|
+
{ k: "ip address", v: "security, rate limiting, service delivery" },
|
|
744
|
+
{ k: "browser/device", v: "compatibility and UX optimization" },
|
|
745
|
+
{ k: "pages visited", v: "aggregate, to improve the Service" }
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
{ kind: "subhead", text: "cookies & analytics" },
|
|
749
|
+
{
|
|
750
|
+
kind: "para",
|
|
751
|
+
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. No advertising or tracking cookies."
|
|
752
|
+
}
|
|
753
|
+
]
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
id: "how-we-use",
|
|
757
|
+
heading: "how we use information",
|
|
758
|
+
blocks: [
|
|
759
|
+
{
|
|
760
|
+
kind: "bullets",
|
|
761
|
+
items: [
|
|
762
|
+
"Generate and verify cryptographic proofs and serve verification pages",
|
|
763
|
+
"Detect and prevent abuse, spam, and denial-of-service attacks",
|
|
764
|
+
"Fix bugs, optimize performance, and improve the Service",
|
|
765
|
+
"Provide technical support"
|
|
766
|
+
]
|
|
767
|
+
}
|
|
768
|
+
]
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
id: "retention",
|
|
772
|
+
heading: "data retention",
|
|
773
|
+
hint: "90d logs \xB7 permanent public artifacts",
|
|
774
|
+
blocks: [
|
|
775
|
+
{
|
|
776
|
+
kind: "bullets",
|
|
777
|
+
items: [
|
|
778
|
+
{
|
|
779
|
+
k: "public artifacts",
|
|
780
|
+
v: "permanent and publicly shareable; data published to Nostr cannot be deleted by OrangeCheck"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
k: "technical logs",
|
|
784
|
+
v: "server logs retained 90 days for security and debugging, then auto-deleted"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
k: "session rows",
|
|
788
|
+
v: "live up to 30 days (cookie max-age) or until revoked; idle accounts with no session activity for 24 months are deleted automatically"
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
k: "support emails",
|
|
792
|
+
v: "retained as long as necessary; deleted on request"
|
|
793
|
+
}
|
|
794
|
+
]
|
|
795
|
+
}
|
|
796
|
+
]
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
id: "data-security",
|
|
800
|
+
heading: "data security",
|
|
801
|
+
hint: "reasonable safeguards \xB7 no warranty",
|
|
802
|
+
blocks: [
|
|
803
|
+
{
|
|
804
|
+
kind: "bullets",
|
|
805
|
+
items: [
|
|
806
|
+
"HTTPS encryption for all data in transit",
|
|
807
|
+
"Secure hosting with regular security updates",
|
|
808
|
+
"Rate limiting and abuse monitoring"
|
|
809
|
+
]
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
kind: "para",
|
|
813
|
+
text: "No method of transmission or storage is 100% secure. We use reasonable measures but **do not warrant the security of your data and are not liable for unauthorized access, loss, or theft** \u2014 see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law, including the 72-hour window under Article 33 of the UK & EU GDPR."
|
|
814
|
+
}
|
|
815
|
+
]
|
|
816
|
+
},
|
|
817
|
+
privacyRights,
|
|
818
|
+
privacyTransfers,
|
|
819
|
+
privacyRegional,
|
|
820
|
+
privacyChildren,
|
|
821
|
+
privacyChanges
|
|
822
|
+
],
|
|
823
|
+
summary: "summary: minimal data, privacy-preserving analytics, never custody of funds, user control of information."
|
|
824
|
+
};
|
|
825
|
+
var protocolProfile = { terms, privacy };
|
|
826
|
+
|
|
827
|
+
// src/content/me.ts
|
|
828
|
+
var COMMERCIAL_NOTE = "**me.ochk.io is a commercial product operated by OrangeCheck.** It is distinct from the non-custodial OrangeCheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern me.ochk.io. These Terms do.";
|
|
829
|
+
var terms2 = {
|
|
830
|
+
kind: "terms",
|
|
831
|
+
eyebrow: "terms",
|
|
832
|
+
title: "Terms of service",
|
|
833
|
+
description: "The terms governing your use of me.ochk.io \u2014 a Bitcoin-backed identity that pays you in sats. Federation-custodied by default, self-custody graduation, no KYC.",
|
|
834
|
+
metaTitle: "Terms of Service \u2014 me.ochk.io",
|
|
835
|
+
metaDescription: "Terms of service for me.ochk.io: a Bitcoin-backed identity that pays users in sats. Federation custody, graduation to self-custody, no KYC.",
|
|
836
|
+
effective: "2026-05-15",
|
|
837
|
+
updated: "2026-05-15",
|
|
838
|
+
preamble: [
|
|
839
|
+
{
|
|
840
|
+
kind: "callout",
|
|
841
|
+
emphatic: true,
|
|
842
|
+
text: "By accessing or using me.ochk.io, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability."
|
|
843
|
+
},
|
|
844
|
+
{ kind: "callout", text: COMMERCIAL_NOTE }
|
|
845
|
+
],
|
|
846
|
+
sections: [
|
|
847
|
+
{
|
|
848
|
+
id: "overview",
|
|
849
|
+
heading: "overview",
|
|
850
|
+
hint: "what me.ochk.io is",
|
|
851
|
+
blocks: [
|
|
852
|
+
{
|
|
853
|
+
kind: "para",
|
|
854
|
+
text: 'me.ochk.io is an identity you use to sign in across participating sites ("integrators"). When an integrator records a billable event for an action you authorize, a share of the fee flows back to you in sats. Your identity is anchored in Bitcoin, verifiable offline, and portable across the OrangeCheck family.'
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
kind: "para",
|
|
858
|
+
text: "me.ochk.io is **not a bank, exchange, broker, or wallet provider.** It is an identity and reputation service with an attached cashback mechanism. OrangeCheck does not hold your funds \u2014 see section on custody below."
|
|
859
|
+
}
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
id: "accounts",
|
|
864
|
+
heading: "accounts & identity",
|
|
865
|
+
hint: "two sign-in paths",
|
|
866
|
+
blocks: [
|
|
867
|
+
{
|
|
868
|
+
kind: "para",
|
|
869
|
+
text: "You may create an identity two ways: **BIP-322** (you sign with your own Bitcoin wallet \u2014 full self-custody) or **email-OTP** (a one-time code; a federation-custodied wallet provisions in your browser). Both produce a stable, opaque `did:oc` identifier. No password is ever stored."
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
kind: "para",
|
|
873
|
+
text: "You are responsible for the security of the wallet, device, email account, or recovery mnemonic associated with your identity. Anyone with your keys or recovery factor can act as you. OrangeCheck cannot recover an account, reverse a sign-in, or restore a lost key or mnemonic."
|
|
874
|
+
}
|
|
875
|
+
]
|
|
876
|
+
},
|
|
877
|
+
eligibility,
|
|
878
|
+
{
|
|
879
|
+
id: "earning",
|
|
880
|
+
heading: "earning sats",
|
|
881
|
+
hint: "cashback on billable events",
|
|
882
|
+
blocks: [
|
|
883
|
+
{
|
|
884
|
+
kind: "stub",
|
|
885
|
+
text: "The economics of earning sats on me.ochk.io \u2014 how billable events generate cashback, the fee split between you, the integrating site, federation operators, and OrangeCheck, the timing of credits, and the conditions under which earnings may be withheld, delayed, clawed back, or reversed (including for suspected abuse or wash-trading) \u2014 are being finalized for publication before general availability. Until then, earning behavior is governed by the published abuse limits in the section below and the descriptions on /how and /earn. This section will be completed following review by counsel."
|
|
886
|
+
}
|
|
887
|
+
]
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
id: "custody",
|
|
891
|
+
heading: "custody & graduation",
|
|
892
|
+
hint: "federation-custodied \xB7 self-custody exit",
|
|
893
|
+
blocks: [
|
|
894
|
+
{
|
|
895
|
+
kind: "para",
|
|
896
|
+
text: "me.ochk.io is **non-custodial with respect to OrangeCheck**: OrangeCheck holds no private keys and no federation key shares, and cannot move your funds. BIP-322 users hold their own wallet. For email-OTP users, a Fedimint **federation** \u2014 run by independent guardian operators, never OrangeCheck \u2014 holds funds under a threshold scheme. You may **graduate** to full self-custody at any time."
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
kind: "stub",
|
|
900
|
+
text: "The complete custody disclosure \u2014 the federation threshold model and its failure modes, what each guardian can and cannot do, the durability of your balance if a federation or OrangeCheck ceases operations, the mechanics and timing of graduation, and the allocation of risk between you, the federation, and OrangeCheck \u2014 is being finalized for publication before general availability. The honest current-state engineering account is published at /security. This section will be completed following review by counsel."
|
|
901
|
+
}
|
|
902
|
+
]
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
id: "fees-payouts",
|
|
906
|
+
heading: "fees, payouts & taxes",
|
|
907
|
+
blocks: [
|
|
908
|
+
{
|
|
909
|
+
kind: "stub",
|
|
910
|
+
text: "Platform fees, payout mechanics and minimums, supported payout rails, currency-conversion handling, and the allocation of tax-reporting and tax-payment responsibility for sats you receive are being finalized for publication before general availability. You are advised that cashback received may be taxable income in your jurisdiction and that you are responsible for your own tax compliance. This section will be completed following review by counsel."
|
|
911
|
+
}
|
|
912
|
+
]
|
|
913
|
+
},
|
|
914
|
+
{
|
|
915
|
+
id: "no-kyc",
|
|
916
|
+
heading: "no kyc, no pii",
|
|
917
|
+
blocks: [
|
|
918
|
+
{
|
|
919
|
+
kind: "para",
|
|
920
|
+
text: "me.ochk.io **does not perform Know-Your-Customer checks** and does not require your legal name, government ID, or physical address. Sybil resistance is achieved through protocol composition \u2014 BIP-322 sat-bond attestation, paid-action history, and integrator-defined gates \u2014 not identity verification. You must not use me.ochk.io to evade a KYC, AML, or sanctions obligation that applies to you elsewhere."
|
|
921
|
+
}
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
id: "abuse-limits",
|
|
926
|
+
heading: "abuse, sybil resistance & rate limits",
|
|
927
|
+
blocks: [
|
|
928
|
+
{
|
|
929
|
+
kind: "para",
|
|
930
|
+
text: "me.ochk.io publishes its abuse limits openly so legitimate users can see they are well below them. The canonical, current values are on the [/security](/security) page. Activity that exceeds a review threshold may be held for human review; activity assessed as sybil farming, wash-trading, or collusion between an integrator and a user may have earnings withheld or reversed and the identity suspended."
|
|
931
|
+
},
|
|
932
|
+
{
|
|
933
|
+
kind: "bullets",
|
|
934
|
+
items: [
|
|
935
|
+
"Do not operate multiple identities to multiply new-account bonuses",
|
|
936
|
+
"Do not collude with an integrating site to manufacture billable events",
|
|
937
|
+
"Do not script or automate actions to inflate earnings",
|
|
938
|
+
"Do not misrepresent a real user action as authorized when it was not"
|
|
939
|
+
]
|
|
940
|
+
}
|
|
941
|
+
]
|
|
942
|
+
},
|
|
943
|
+
acceptableUse,
|
|
944
|
+
{
|
|
945
|
+
id: "integrators",
|
|
946
|
+
heading: "integrators & relying parties",
|
|
947
|
+
blocks: [
|
|
948
|
+
{
|
|
949
|
+
kind: "para",
|
|
950
|
+
text: "Sites that integrate me.ochk.io receive a **per-integrator scoped identifier** for you, not your master identity \u2014 they cannot correlate you across sites unless you explicitly grant a scope. Integrators independently decide whether and how to trust your identity, including whether to admit, gate, or reject you. OrangeCheck is not a party to, and accepts no liability for, an integrator\u2019s decisions or an integrator\u2019s own terms, pricing, or conduct."
|
|
951
|
+
}
|
|
952
|
+
]
|
|
953
|
+
},
|
|
954
|
+
intellectualProperty,
|
|
955
|
+
{
|
|
956
|
+
id: "disclaimers",
|
|
957
|
+
heading: "disclaimers & warranties",
|
|
958
|
+
hint: "as-is \xB7 regulatory status",
|
|
959
|
+
blocks: [
|
|
960
|
+
{
|
|
961
|
+
kind: "callout",
|
|
962
|
+
emphatic: true,
|
|
963
|
+
text: 'THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY \u2014 INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.'
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
kind: "para",
|
|
967
|
+
text: "Nothing me.ochk.io provides is financial, investment, legal, or tax advice. me.ochk.io does not guarantee any level of earnings; cashback depends on integrator activity outside OrangeCheck\u2019s control."
|
|
968
|
+
},
|
|
969
|
+
{ kind: "subhead", text: "regulatory status" },
|
|
970
|
+
{
|
|
971
|
+
kind: "stub",
|
|
972
|
+
text: "me.ochk.io facilitates cashback that is custodied and disbursed by independent Fedimint federations; OrangeCheck does not itself custody, transmit, or take possession of user funds. The full regulatory analysis of this arrangement \u2014 including OrangeCheck\u2019s position under the U.S. Bank Secrecy Act money-transmission rules, the FATF Recommendations, the EU MiCA Regulation, and applicable U.S. state money-transmitter regimes, and the corresponding licensing posture \u2014 is being prepared and will be published before general availability. This section will be completed following review by counsel."
|
|
973
|
+
}
|
|
974
|
+
]
|
|
975
|
+
},
|
|
976
|
+
limitationOfLiability,
|
|
977
|
+
indemnification,
|
|
978
|
+
{
|
|
979
|
+
id: "termination",
|
|
980
|
+
heading: "termination",
|
|
981
|
+
blocks: [
|
|
982
|
+
{
|
|
983
|
+
kind: "para",
|
|
984
|
+
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. Before deletion you should sweep any federation-custodied balance to self-custody (the graduate flow) \u2014 anchored events on Bitcoin and Nostr-published envelopes are immutable and cannot be deleted by OrangeCheck. The disclaimer, liability, indemnification, governing-law, and dispute provisions survive."
|
|
985
|
+
}
|
|
986
|
+
]
|
|
987
|
+
},
|
|
988
|
+
changesToTerms,
|
|
989
|
+
disputeResolution,
|
|
990
|
+
miscellaneous
|
|
991
|
+
],
|
|
992
|
+
summary: "summary: an identity that pays you in sats. orangecheck holds no keys and no funds. money, custody, fee, and regulatory terms are being finalized \u2014 see the marked sections."
|
|
993
|
+
};
|
|
994
|
+
var privacy2 = {
|
|
995
|
+
kind: "privacy",
|
|
996
|
+
eyebrow: "privacy",
|
|
997
|
+
title: "Privacy policy",
|
|
998
|
+
description: "How me.ochk.io handles your data: no KYC, no PII required, a per-integrator scoped identity, and a documented, falsifiable account of every record OrangeCheck stores.",
|
|
999
|
+
metaTitle: "Privacy Policy \u2014 me.ochk.io",
|
|
1000
|
+
metaDescription: "me.ochk.io privacy policy. No KYC, no PII required, per-integrator scoped identity, and a full account of what OrangeCheck stores.",
|
|
1001
|
+
effective: "2026-05-15",
|
|
1002
|
+
updated: "2026-05-15",
|
|
1003
|
+
preamble: [
|
|
1004
|
+
{
|
|
1005
|
+
kind: "callout",
|
|
1006
|
+
text: "me.ochk.io\u2019s product is identity that pays you; its privacy posture is what makes it distinct from Sign in with Google. For a side-by-side comparison you can falsify, see [the privacy comparison](/privacy-compare)."
|
|
1007
|
+
}
|
|
1008
|
+
],
|
|
1009
|
+
sections: [
|
|
1010
|
+
{
|
|
1011
|
+
id: "at-a-glance",
|
|
1012
|
+
heading: "at a glance",
|
|
1013
|
+
hint: "no kyc \xB7 no pii \xB7 scoped identity",
|
|
1014
|
+
blocks: [
|
|
1015
|
+
{
|
|
1016
|
+
kind: "bullets",
|
|
1017
|
+
items: [
|
|
1018
|
+
{
|
|
1019
|
+
k: "no kyc",
|
|
1020
|
+
v: "me.ochk.io never collects your legal name, government ID, or physical address"
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
k: "no pii at signup",
|
|
1024
|
+
v: "you sign up with a Bitcoin signature or an email/phone one-time code \u2014 your choice"
|
|
1025
|
+
},
|
|
1026
|
+
{
|
|
1027
|
+
k: "scoped identity",
|
|
1028
|
+
v: "integrating sites receive a per-site identifier, not your master identity; they cannot correlate you across sites"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
k: "no advertising",
|
|
1032
|
+
v: "no third-party ad identity, no behavioural ad targeting, no data sale \u2014 ever"
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
k: "deletable",
|
|
1036
|
+
v: "you can permanently revoke your identity from /me/settings"
|
|
1037
|
+
}
|
|
1038
|
+
]
|
|
1039
|
+
}
|
|
1040
|
+
]
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
id: "what-oc-stores",
|
|
1044
|
+
heading: "what orangecheck stores",
|
|
1045
|
+
hint: "metadata only \xB7 none enables fund movement",
|
|
1046
|
+
blocks: [
|
|
1047
|
+
{
|
|
1048
|
+
kind: "para",
|
|
1049
|
+
text: "The list below is what an auditor would find in OrangeCheck\u2019s production infrastructure. Every item is metadata; none of it lets OrangeCheck sign on your behalf."
|
|
1050
|
+
},
|
|
1051
|
+
{
|
|
1052
|
+
kind: "bullets",
|
|
1053
|
+
items: [
|
|
1054
|
+
{
|
|
1055
|
+
k: "account row",
|
|
1056
|
+
v: "opaque did_oc, optional display name and Nostr npub, timestamps. The underlying email is encrypted at rest; a BIP-322 address is stored plaintext (it is already public on-chain). No password hash, no private key, no mnemonic."
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
k: "session record",
|
|
1060
|
+
v: "the session JWT id, account id, and issue/revoke timestamps. The session token itself lives only as a cookie in your browser."
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
k: "event envelopes",
|
|
1064
|
+
v: "per billable event: a content-addressed, signed record of what was authorized, by whom, and the fee breakdown. Used to route cashback."
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
k: "custody-state envelopes",
|
|
1068
|
+
v: "a record of each federation \u21C4 self-custody transition (graduation), surfaced on your own identity timeline."
|
|
1069
|
+
},
|
|
1070
|
+
{
|
|
1071
|
+
k: "public anchors",
|
|
1072
|
+
v: "OpenTimestamps proofs and Nostr-published event roots \u2014 public by design, verifiable against Bitcoin without OrangeCheck online"
|
|
1073
|
+
}
|
|
1074
|
+
]
|
|
1075
|
+
}
|
|
1076
|
+
]
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
id: "scoped-identity",
|
|
1080
|
+
heading: "per-integrator identity & scopes",
|
|
1081
|
+
blocks: [
|
|
1082
|
+
{
|
|
1083
|
+
kind: "para",
|
|
1084
|
+
text: "Each integrating site receives a deterministic **scoped subject** derived from your master identity and that site\u2019s project key. Scoped subjects are stable per-site (the integrator recognizes a returning user) but unlinkable across sites (two integrators cannot collude to correlate you). An integrator only ever receives your master Bitcoin address, email, or attestation tier if you **explicitly grant that scope** for that site \u2014 each scope is opt-in, per-site, and revocable at any time from `/me/identity`."
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
kind: "para",
|
|
1088
|
+
text: "Integrators never receive your event history with other sites, your wallet balance, your connected-sites list, or any cross-integrator data, regardless of scopes granted."
|
|
1089
|
+
}
|
|
1090
|
+
]
|
|
1091
|
+
},
|
|
1092
|
+
{
|
|
1093
|
+
id: "cross-site-graph",
|
|
1094
|
+
heading: "the cross-site events graph",
|
|
1095
|
+
hint: "honest current state",
|
|
1096
|
+
blocks: [
|
|
1097
|
+
{
|
|
1098
|
+
kind: "para",
|
|
1099
|
+
text: "OrangeCheck\u2019s billing engine necessarily knows which user earned which cashback across integrating sites \u2014 that join is how the right wallet is credited. Today that linkage exists in plain storage on me.ochk.io infrastructure; OrangeCheck commits, as a **policy** matter enforced by access controls and audit logging, not to build cross-site behavioural profiles. A per-integrator blinded-identifier design that removes the linkage architecturally is active research and not yet shipped. We disclose this honestly rather than overclaim."
|
|
1100
|
+
}
|
|
1101
|
+
]
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
id: "cookies",
|
|
1105
|
+
heading: "cookies",
|
|
1106
|
+
blocks: [
|
|
1107
|
+
{
|
|
1108
|
+
kind: "para",
|
|
1109
|
+
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."
|
|
1110
|
+
}
|
|
1111
|
+
]
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
id: "how-we-use",
|
|
1115
|
+
heading: "how we use information",
|
|
1116
|
+
blocks: [
|
|
1117
|
+
{
|
|
1118
|
+
kind: "bullets",
|
|
1119
|
+
items: [
|
|
1120
|
+
"Route cashback to the correct identity and wallet",
|
|
1121
|
+
"Detect and prevent sybil farming, wash-trading, and abuse",
|
|
1122
|
+
"Operate sign-in and verification across the OrangeCheck family",
|
|
1123
|
+
"Fix bugs, improve the Service, and respond to support requests"
|
|
1124
|
+
]
|
|
1125
|
+
}
|
|
1126
|
+
]
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
id: "retention",
|
|
1130
|
+
heading: "data retention",
|
|
1131
|
+
blocks: [
|
|
1132
|
+
{
|
|
1133
|
+
kind: "bullets",
|
|
1134
|
+
items: [
|
|
1135
|
+
{
|
|
1136
|
+
k: "event & rebind envelopes",
|
|
1137
|
+
v: "retained as the canonical earnings and custody-state record; anchored copies on Bitcoin and Nostr are immutable"
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
k: "technical logs",
|
|
1141
|
+
v: "retained 90 days for security and debugging, then auto-deleted"
|
|
1142
|
+
},
|
|
1143
|
+
{
|
|
1144
|
+
k: "session records",
|
|
1145
|
+
v: "retained until the session is revoked or expires"
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
k: "account row",
|
|
1149
|
+
v: "deleted on request via the account-deletion flow, subject to the immutability of anchored data"
|
|
1150
|
+
}
|
|
1151
|
+
]
|
|
1152
|
+
}
|
|
1153
|
+
]
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
id: "data-security",
|
|
1157
|
+
heading: "data security",
|
|
1158
|
+
blocks: [
|
|
1159
|
+
{
|
|
1160
|
+
kind: "para",
|
|
1161
|
+
text: "HTTPS in transit; emails encrypted at rest; access to production data is allowlisted and audit-logged. No method of storage is perfectly secure \u2014 we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law."
|
|
1162
|
+
}
|
|
1163
|
+
]
|
|
1164
|
+
},
|
|
1165
|
+
privacyRights,
|
|
1166
|
+
{
|
|
1167
|
+
id: "deletion",
|
|
1168
|
+
heading: "identity & account deletion",
|
|
1169
|
+
blocks: [
|
|
1170
|
+
{
|
|
1171
|
+
kind: "para",
|
|
1172
|
+
text: "From `/me/settings \u2192 advanced \u2192 delete` you can permanently revoke your OrangeCheck identity. A federation-custodied balance must be swept to your own wallet first (the graduate flow). OrangeCheck deletes the operational records it holds about you; events already anchored to Bitcoin headers or published to Nostr are immutable public records of fee flows and cannot be deleted by anyone."
|
|
1173
|
+
}
|
|
1174
|
+
]
|
|
1175
|
+
},
|
|
1176
|
+
privacyTransfers,
|
|
1177
|
+
privacyRegional,
|
|
1178
|
+
privacyChildren,
|
|
1179
|
+
privacyChanges
|
|
1180
|
+
],
|
|
1181
|
+
summary: "summary: no kyc, no pii required, a per-integrator scoped identity, and a documented account of every record orangecheck stores."
|
|
1182
|
+
};
|
|
1183
|
+
var meProfile = { terms: terms2, privacy: privacy2 };
|
|
1184
|
+
|
|
1185
|
+
// src/content/vault.ts
|
|
1186
|
+
var COMMERCIAL_NOTE2 = "**OC Vault is a commercial product operated by OrangeCheck**, available at vault.ochk.io. It is distinct from the non-custodial OrangeCheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern OC Vault. These Terms do.";
|
|
1187
|
+
var terms3 = {
|
|
1188
|
+
kind: "terms",
|
|
1189
|
+
eyebrow: "terms",
|
|
1190
|
+
title: "Terms of service",
|
|
1191
|
+
description: "The terms governing your use of OC Vault \u2014 an end-to-end-encrypted secrets vault. Client-side encryption; OrangeCheck stores ciphertext only and cannot read your data.",
|
|
1192
|
+
metaTitle: "Terms of Service \u2014 OC Vault",
|
|
1193
|
+
metaDescription: "Terms of service for OC Vault (vault.ochk.io): an end-to-end-encrypted secrets vault. Client-side encryption, Lightning payment, no fund custody.",
|
|
1194
|
+
effective: "2026-05-15",
|
|
1195
|
+
updated: "2026-05-15",
|
|
1196
|
+
preamble: [
|
|
1197
|
+
{
|
|
1198
|
+
kind: "callout",
|
|
1199
|
+
emphatic: true,
|
|
1200
|
+
text: "By accessing or using OC Vault, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability."
|
|
1201
|
+
},
|
|
1202
|
+
{ kind: "callout", text: COMMERCIAL_NOTE2 }
|
|
1203
|
+
],
|
|
1204
|
+
sections: [
|
|
1205
|
+
{
|
|
1206
|
+
id: "overview",
|
|
1207
|
+
heading: "overview",
|
|
1208
|
+
hint: "what oc vault is",
|
|
1209
|
+
blocks: [
|
|
1210
|
+
{
|
|
1211
|
+
kind: "para",
|
|
1212
|
+
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.**"
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
kind: "para",
|
|
1216
|
+
text: "OC Vault is built on the OC Lock protocol. It is **not** a custodial service for funds and does not take possession of any cryptocurrency."
|
|
1217
|
+
}
|
|
1218
|
+
]
|
|
1219
|
+
},
|
|
1220
|
+
{
|
|
1221
|
+
id: "accounts",
|
|
1222
|
+
heading: "accounts",
|
|
1223
|
+
blocks: [
|
|
1224
|
+
{
|
|
1225
|
+
kind: "para",
|
|
1226
|
+
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."
|
|
1227
|
+
}
|
|
1228
|
+
]
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
id: "plans-billing",
|
|
1232
|
+
heading: "plans, payment & billing",
|
|
1233
|
+
hint: "lightning \xB7 inbound only",
|
|
1234
|
+
blocks: [
|
|
1235
|
+
{
|
|
1236
|
+
kind: "para",
|
|
1237
|
+
text: "OC Vault offers a free tier and paid tiers purchased with Bitcoin over the Lightning Network. OrangeCheck **receives** payment and never sends funds to users; OC Vault holds no custodial balance for you."
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
kind: "stub",
|
|
1241
|
+
text: "The full commercial terms for paid tiers \u2014 current pricing, what each tier includes, billing cycle and renewal behavior, the refund and cancellation policy, proration, and the consequences of non-renewal for stored data \u2014 are being finalized for publication. Current pricing is shown on /pricing. This section will be completed following review by counsel."
|
|
1242
|
+
}
|
|
1243
|
+
]
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
id: "lifetime",
|
|
1247
|
+
heading: "lifetime entitlements",
|
|
1248
|
+
blocks: [
|
|
1249
|
+
{
|
|
1250
|
+
kind: "stub",
|
|
1251
|
+
text: 'OC Vault offers a one-time "lifetime" tier. The precise meaning of "lifetime" \u2014 the entitlement\u2019s duration and scope, what happens to it on a change of ownership or discontinuation of the Service, and OrangeCheck\u2019s commitments for data export and continuity if the Service winds down \u2014 is being finalized for publication. This section will be completed following review by counsel.'
|
|
1252
|
+
}
|
|
1253
|
+
]
|
|
1254
|
+
},
|
|
1255
|
+
{
|
|
1256
|
+
id: "your-data",
|
|
1257
|
+
heading: "your data & encryption",
|
|
1258
|
+
hint: "you hold the only key",
|
|
1259
|
+
blocks: [
|
|
1260
|
+
{
|
|
1261
|
+
kind: "callout",
|
|
1262
|
+
emphatic: true,
|
|
1263
|
+
text: "ORANGECHECK CANNOT READ, RECOVER, OR RESET YOUR VAULT. IF YOU LOSE YOUR VAULT KEY AND ALL RECOVERY FACTORS, YOUR ENCRYPTED DATA IS PERMANENTLY UNRECOVERABLE \u2014 BY YOU AND BY US. THIS IS THE INTENDED SECURITY PROPERTY, NOT A DEFECT."
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
kind: "para",
|
|
1267
|
+
text: "You are solely responsible for safeguarding your vault key and any recovery material, for the lawfulness of what you store, and for maintaining your own independent backups of anything critical."
|
|
1268
|
+
}
|
|
1269
|
+
]
|
|
1270
|
+
},
|
|
1271
|
+
acceptableUse,
|
|
1272
|
+
intellectualProperty,
|
|
1273
|
+
{
|
|
1274
|
+
id: "third-parties",
|
|
1275
|
+
heading: "third parties",
|
|
1276
|
+
blocks: [
|
|
1277
|
+
{
|
|
1278
|
+
kind: "bullets",
|
|
1279
|
+
items: [
|
|
1280
|
+
{
|
|
1281
|
+
k: "payment processing",
|
|
1282
|
+
v: "Lightning payments are processed via a self-hosted BTCPay Server; we do not guarantee the availability of the Lightning Network"
|
|
1283
|
+
},
|
|
1284
|
+
{
|
|
1285
|
+
k: "storage / hosting",
|
|
1286
|
+
v: "encrypted blobs are stored with third-party infrastructure providers; they receive ciphertext only"
|
|
1287
|
+
}
|
|
1288
|
+
]
|
|
1289
|
+
}
|
|
1290
|
+
]
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
id: "disclaimers",
|
|
1294
|
+
heading: "disclaimers & warranties",
|
|
1295
|
+
hint: "as-is \xB7 no warranty",
|
|
1296
|
+
blocks: [
|
|
1297
|
+
{
|
|
1298
|
+
kind: "callout",
|
|
1299
|
+
emphatic: true,
|
|
1300
|
+
text: 'THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY \u2014 INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND ACCURACY \u2014 AND DOES NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED OR THAT STORED DATA WILL BE FREE FROM LOSS.'
|
|
1301
|
+
},
|
|
1302
|
+
{
|
|
1303
|
+
kind: "para",
|
|
1304
|
+
text: "Maintain your own backups of anything critical. The encryption design that prevents OrangeCheck from reading your data also prevents OrangeCheck from recovering it."
|
|
1305
|
+
}
|
|
1306
|
+
]
|
|
1307
|
+
},
|
|
1308
|
+
limitationOfLiability,
|
|
1309
|
+
indemnification,
|
|
1310
|
+
eligibility,
|
|
1311
|
+
changesToTerms,
|
|
1312
|
+
disputeResolution,
|
|
1313
|
+
miscellaneous
|
|
1314
|
+
],
|
|
1315
|
+
summary: "summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot recover your vault. pricing, refund, and lifetime-entitlement terms are being finalized \u2014 see the marked sections."
|
|
1316
|
+
};
|
|
1317
|
+
var privacy3 = {
|
|
1318
|
+
kind: "privacy",
|
|
1319
|
+
eyebrow: "privacy",
|
|
1320
|
+
title: "Privacy policy",
|
|
1321
|
+
description: "How OC Vault handles data. End-to-end encrypted by design \u2014 OrangeCheck stores opaque ciphertext and cannot read your vault, item names, or item types.",
|
|
1322
|
+
metaTitle: "Privacy Policy \u2014 OC Vault",
|
|
1323
|
+
metaDescription: "OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.",
|
|
1324
|
+
effective: "2026-05-15",
|
|
1325
|
+
updated: "2026-05-15",
|
|
1326
|
+
sections: [
|
|
1327
|
+
{
|
|
1328
|
+
id: "principles",
|
|
1329
|
+
heading: "our principles",
|
|
1330
|
+
hint: "zero-knowledge by design",
|
|
1331
|
+
blocks: [
|
|
1332
|
+
{
|
|
1333
|
+
kind: "para",
|
|
1334
|
+
text: "OC Vault is designed so that OrangeCheck cannot read your data. Encryption and decryption happen in your browser. What OrangeCheck stores is an opaque, double-encrypted blob with no readable item names, types, or contents."
|
|
1335
|
+
}
|
|
1336
|
+
]
|
|
1337
|
+
},
|
|
1338
|
+
{
|
|
1339
|
+
id: "what-we-collect",
|
|
1340
|
+
heading: "information we collect",
|
|
1341
|
+
blocks: [
|
|
1342
|
+
{
|
|
1343
|
+
kind: "bullets",
|
|
1344
|
+
items: [
|
|
1345
|
+
{
|
|
1346
|
+
k: "identity address",
|
|
1347
|
+
v: "the Bitcoin address you sign in with \u2014 public on-chain already; no email, no name"
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
k: "payment records",
|
|
1351
|
+
v: "for paid tiers: the Lightning invoice id, sats paid, tier, and entitlement expiry. No card number, no billing address"
|
|
1352
|
+
},
|
|
1353
|
+
{
|
|
1354
|
+
k: "encrypted blobs",
|
|
1355
|
+
v: "opaque ciphertext keyed to your identity address \u2014 OrangeCheck cannot decrypt it"
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
k: "technical data",
|
|
1359
|
+
v: "IP address and request metadata, for security and rate limiting"
|
|
1360
|
+
}
|
|
1361
|
+
]
|
|
1362
|
+
}
|
|
1363
|
+
]
|
|
1364
|
+
},
|
|
1365
|
+
{
|
|
1366
|
+
id: "what-we-cannot-see",
|
|
1367
|
+
heading: "what we cannot see",
|
|
1368
|
+
blocks: [
|
|
1369
|
+
{
|
|
1370
|
+
kind: "bullets",
|
|
1371
|
+
items: [
|
|
1372
|
+
"The contents of any vault item",
|
|
1373
|
+
"The names, titles, or types of your items",
|
|
1374
|
+
"How many items you store or how often you use them",
|
|
1375
|
+
"Your vault key or any recovery material"
|
|
1376
|
+
]
|
|
1377
|
+
}
|
|
1378
|
+
]
|
|
1379
|
+
},
|
|
1380
|
+
{
|
|
1381
|
+
id: "cookies",
|
|
1382
|
+
heading: "cookies & analytics",
|
|
1383
|
+
blocks: [
|
|
1384
|
+
{
|
|
1385
|
+
kind: "para",
|
|
1386
|
+
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."
|
|
1387
|
+
}
|
|
1388
|
+
]
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
id: "retention",
|
|
1392
|
+
heading: "data retention",
|
|
1393
|
+
blocks: [
|
|
1394
|
+
{
|
|
1395
|
+
kind: "bullets",
|
|
1396
|
+
items: [
|
|
1397
|
+
{
|
|
1398
|
+
k: "encrypted blobs",
|
|
1399
|
+
v: "retained while your account is active; deleted on account deletion"
|
|
1400
|
+
},
|
|
1401
|
+
{
|
|
1402
|
+
k: "payment records",
|
|
1403
|
+
v: "retained as required for accounting and entitlement verification"
|
|
1404
|
+
},
|
|
1405
|
+
{
|
|
1406
|
+
k: "technical logs",
|
|
1407
|
+
v: "retained 90 days, then auto-deleted"
|
|
1408
|
+
}
|
|
1409
|
+
]
|
|
1410
|
+
}
|
|
1411
|
+
]
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
id: "data-security",
|
|
1415
|
+
heading: "data security",
|
|
1416
|
+
blocks: [
|
|
1417
|
+
{
|
|
1418
|
+
kind: "para",
|
|
1419
|
+
text: "Client-side AES-256-GCM encryption, HTTPS in transit, and a server that only ever holds ciphertext. No method of storage is perfectly secure \u2014 we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). Because of the encryption design, a compromise of OrangeCheck infrastructure exposes ciphertext, not your secrets."
|
|
1420
|
+
}
|
|
1421
|
+
]
|
|
1422
|
+
},
|
|
1423
|
+
privacyRights,
|
|
1424
|
+
privacyTransfers,
|
|
1425
|
+
privacyRegional,
|
|
1426
|
+
privacyChildren,
|
|
1427
|
+
privacyChanges
|
|
1428
|
+
],
|
|
1429
|
+
summary: "summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot read your vault contents."
|
|
1430
|
+
};
|
|
1431
|
+
var vaultProfile = { terms: terms3, privacy: privacy3 };
|
|
1432
|
+
|
|
1433
|
+
// src/content/fleet.ts
|
|
1434
|
+
var COMMERCIAL_NOTE3 = "**OrangeCheck Fleet is a commercial product operated by OrangeCheck**, available at fleet.ochk.io. It is distinct from the non-custodial OrangeCheck protocol sites. Where an Enterprise customer has executed a separate Master Services Agreement, that agreement controls; otherwise these Terms govern.";
|
|
1435
|
+
var terms4 = {
|
|
1436
|
+
kind: "terms",
|
|
1437
|
+
eyebrow: "terms",
|
|
1438
|
+
title: "Terms of service",
|
|
1439
|
+
description: "The terms governing use of OrangeCheck Fleet \u2014 enterprise managed infrastructure for OC Agent and OC Pledge. No custody of customer keys or funds.",
|
|
1440
|
+
metaTitle: "Terms of Service \u2014 OrangeCheck Fleet",
|
|
1441
|
+
metaDescription: "Terms of service for OrangeCheck Fleet (fleet.ochk.io): enterprise managed infrastructure for OC Agent and OC Pledge. No custody of keys or funds.",
|
|
1442
|
+
effective: "2026-05-15",
|
|
1443
|
+
updated: "2026-05-15",
|
|
1444
|
+
preamble: [
|
|
1445
|
+
{
|
|
1446
|
+
kind: "callout",
|
|
1447
|
+
emphatic: true,
|
|
1448
|
+
text: "By accessing or using OrangeCheck Fleet, you agree to be bound by these Terms on behalf of yourself and any organization you represent. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability."
|
|
1449
|
+
},
|
|
1450
|
+
{ kind: "callout", text: COMMERCIAL_NOTE3 }
|
|
1451
|
+
],
|
|
1452
|
+
sections: [
|
|
1453
|
+
{
|
|
1454
|
+
id: "overview",
|
|
1455
|
+
heading: "overview",
|
|
1456
|
+
hint: "what fleet is",
|
|
1457
|
+
blocks: [
|
|
1458
|
+
{
|
|
1459
|
+
kind: "para",
|
|
1460
|
+
text: "OrangeCheck Fleet is managed infrastructure for organizations deploying AI agents under the OC Agent and OC Pledge protocols. Fleet issues, scopes, and revokes agent delegations, records action receipts, and produces auditable evidence bundles."
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
kind: "para",
|
|
1464
|
+
text: "Fleet holds **no customer private keys, no customer funds, and no custodial wallet of any kind.** Signing happens in the customer\u2019s wallet; bonded reputation stake is an attestation of unspent funds, never escrow. Fleet operates no token or points balance."
|
|
1465
|
+
}
|
|
1466
|
+
]
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
id: "accounts",
|
|
1470
|
+
heading: "accounts & operators",
|
|
1471
|
+
blocks: [
|
|
1472
|
+
{
|
|
1473
|
+
kind: "para",
|
|
1474
|
+
text: "A customer account is operated by one or more authorized individuals. You are responsible for the acts and omissions of everyone you authorize, for keeping credentials secure, and for ensuring the individuals you authorize have authority to bind your organization."
|
|
1475
|
+
}
|
|
1476
|
+
]
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
id: "plans-billing",
|
|
1480
|
+
heading: "plans, billing & payment",
|
|
1481
|
+
hint: "stripe + lightning",
|
|
1482
|
+
blocks: [
|
|
1483
|
+
{
|
|
1484
|
+
kind: "para",
|
|
1485
|
+
text: "Fleet offers a free Community tier and paid Pro and Enterprise tiers. Paid tiers are billed in either Bitcoin (Lightning) or US dollars (card / ACH via Stripe, our payment processor)."
|
|
1486
|
+
},
|
|
1487
|
+
{
|
|
1488
|
+
kind: "stub",
|
|
1489
|
+
text: "The full commercial terms \u2014 current pricing, what each tier includes, the billing cycle, overage rates and metering, taxes, renewal and cancellation behavior, and the refund policy \u2014 are being finalized for publication. Current pricing is shown on /pricing. Card and ACH payments are processed by Stripe under Stripe\u2019s own terms. This section will be completed following review by counsel."
|
|
1490
|
+
}
|
|
1491
|
+
]
|
|
1492
|
+
},
|
|
1493
|
+
{
|
|
1494
|
+
id: "service-levels",
|
|
1495
|
+
heading: "service levels",
|
|
1496
|
+
hint: "uptime \xB7 support response",
|
|
1497
|
+
blocks: [
|
|
1498
|
+
{
|
|
1499
|
+
kind: "stub",
|
|
1500
|
+
text: "Fleet\u2019s service-level commitments \u2014 target uptime, the support-response times by tier, the measurement methodology, exclusions, and any service credits \u2014 are being finalized and will be published as a referenced Service Level Agreement. Until then, support-response targets are described on /pricing. This section will be completed following review by counsel."
|
|
1501
|
+
}
|
|
1502
|
+
]
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
id: "customer-data",
|
|
1506
|
+
heading: "customer data",
|
|
1507
|
+
blocks: [
|
|
1508
|
+
{
|
|
1509
|
+
kind: "para",
|
|
1510
|
+
text: "Fleet holds operator account metadata (email, billing address, plan tier), the public Bitcoin addresses you bind agents to, OC Agent action envelopes, OpenTimestamps proofs, and operational logs (90-day retention). Fleet does **not** hold raw action inputs beyond hashes unless you opt in. Processing of personal data is described in the [Privacy Policy](/privacy)."
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
kind: "stub",
|
|
1514
|
+
text: "Enterprise customers that process personal data through Fleet may require a Data Processing Agreement. A standard DPA, including the sub-processor list and the international-transfer mechanism, is being finalized and will be made available to Enterprise customers. This section will be completed following review by counsel."
|
|
1515
|
+
}
|
|
1516
|
+
]
|
|
1517
|
+
},
|
|
1518
|
+
acceptableUse,
|
|
1519
|
+
intellectualProperty,
|
|
1520
|
+
{
|
|
1521
|
+
id: "enterprise-msa",
|
|
1522
|
+
heading: "enterprise agreements",
|
|
1523
|
+
blocks: [
|
|
1524
|
+
{
|
|
1525
|
+
kind: "stub",
|
|
1526
|
+
text: "Enterprise-tier customers may execute a Master Services Agreement that supplements or supersedes these Terms \u2014 covering negotiated SLAs, the DPA, security commitments, self-hosting, indemnities, and liability terms specific to the engagement. The standard MSA template is being finalized. Where an executed MSA exists, it controls over any conflicting provision of these Terms. This section will be completed following review by counsel."
|
|
1527
|
+
}
|
|
1528
|
+
]
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
id: "confidentiality",
|
|
1532
|
+
heading: "confidentiality",
|
|
1533
|
+
blocks: [
|
|
1534
|
+
{
|
|
1535
|
+
kind: "para",
|
|
1536
|
+
text: "Each party may receive non-public information of the other. The receiving party will use it only to perform under these Terms, protect it with at least reasonable care, and not disclose it except to personnel and contractors bound by comparable obligations. This does not apply to information that is public, independently developed, or rightfully received from a third party."
|
|
1537
|
+
}
|
|
1538
|
+
]
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
id: "disclaimers",
|
|
1542
|
+
heading: "disclaimers & warranties",
|
|
1543
|
+
hint: "as-is \xB7 compliance posture",
|
|
1544
|
+
blocks: [
|
|
1545
|
+
{
|
|
1546
|
+
kind: "callout",
|
|
1547
|
+
emphatic: true,
|
|
1548
|
+
text: 'EXCEPT AS EXPRESSLY STATED IN AN EXECUTED MASTER SERVICES AGREEMENT, THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY \u2014 INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.'
|
|
1549
|
+
},
|
|
1550
|
+
{
|
|
1551
|
+
kind: "para",
|
|
1552
|
+
text: 'Any compliance certification described as "in progress" (including SOC 2) is a statement of intent, not a warranty, until completed and the report issued. Fleet does not provide legal, financial, or regulatory-compliance advice.'
|
|
1553
|
+
}
|
|
1554
|
+
]
|
|
1555
|
+
},
|
|
1556
|
+
limitationOfLiability,
|
|
1557
|
+
indemnification,
|
|
1558
|
+
eligibility,
|
|
1559
|
+
{
|
|
1560
|
+
id: "termination",
|
|
1561
|
+
heading: "termination",
|
|
1562
|
+
blocks: [
|
|
1563
|
+
{
|
|
1564
|
+
kind: "para",
|
|
1565
|
+
text: "**Your right:** stop using Fleet and cancel a paid plan as described in the billing terms. **Our right:** suspend or terminate access for non-payment, breach, or legal or security risk. On termination you may export your action envelopes and audit bundles, which verify offline independently of Fleet. The confidentiality, disclaimer, liability, indemnification, governing-law, and dispute provisions survive."
|
|
1566
|
+
}
|
|
1567
|
+
]
|
|
1568
|
+
},
|
|
1569
|
+
changesToTerms,
|
|
1570
|
+
disputeResolution,
|
|
1571
|
+
miscellaneous
|
|
1572
|
+
],
|
|
1573
|
+
summary: "summary: managed agent infrastructure with no custody of customer keys or funds. billing, sla, dpa, and the enterprise msa are being finalized \u2014 see the marked sections."
|
|
1574
|
+
};
|
|
1575
|
+
var privacy4 = {
|
|
1576
|
+
kind: "privacy",
|
|
1577
|
+
eyebrow: "privacy",
|
|
1578
|
+
title: "Privacy policy",
|
|
1579
|
+
description: "How OrangeCheck Fleet handles personal data \u2014 operator account information and the metadata required to run managed agent infrastructure. No customer keys, no customer funds.",
|
|
1580
|
+
metaTitle: "Privacy Policy \u2014 OrangeCheck Fleet",
|
|
1581
|
+
metaDescription: "OrangeCheck Fleet privacy policy. Operator account data and orchestration metadata only; no customer keys, no customer funds, no raw action inputs.",
|
|
1582
|
+
effective: "2026-05-15",
|
|
1583
|
+
updated: "2026-05-15",
|
|
1584
|
+
preamble: [
|
|
1585
|
+
{
|
|
1586
|
+
kind: "callout",
|
|
1587
|
+
text: "This policy covers personal data OrangeCheck processes as a **controller** for the Fleet account relationship \u2014 operator and billing information. Where Fleet processes personal data **on a customer\u2019s behalf** as a processor, the customer\u2019s Data Processing Agreement governs that processing."
|
|
1588
|
+
}
|
|
1589
|
+
],
|
|
1590
|
+
sections: [
|
|
1591
|
+
{
|
|
1592
|
+
id: "what-we-collect",
|
|
1593
|
+
heading: "information we collect",
|
|
1594
|
+
blocks: [
|
|
1595
|
+
{
|
|
1596
|
+
kind: "bullets",
|
|
1597
|
+
items: [
|
|
1598
|
+
{
|
|
1599
|
+
k: "operator account data",
|
|
1600
|
+
v: "the email address and name of authorized operators"
|
|
1601
|
+
},
|
|
1602
|
+
{
|
|
1603
|
+
k: "billing information",
|
|
1604
|
+
v: "billing address and plan tier; card and ACH details are collected and held by Stripe, our payment processor, not by OrangeCheck"
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
k: "orchestration metadata",
|
|
1608
|
+
v: "public Bitcoin addresses you bind agents to, OC Agent action envelopes, and OpenTimestamps proofs"
|
|
1609
|
+
},
|
|
1610
|
+
{
|
|
1611
|
+
k: "operational logs",
|
|
1612
|
+
v: "request and SLA-accounting logs sufficient for abuse response, retained 90 days"
|
|
1613
|
+
}
|
|
1614
|
+
]
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
kind: "para",
|
|
1618
|
+
text: "Fleet does not collect customer private keys, customer funds, or raw action inputs beyond hashes (unless a customer opts in)."
|
|
1619
|
+
}
|
|
1620
|
+
]
|
|
1621
|
+
},
|
|
1622
|
+
{
|
|
1623
|
+
id: "how-we-use",
|
|
1624
|
+
heading: "how we use information",
|
|
1625
|
+
blocks: [
|
|
1626
|
+
{
|
|
1627
|
+
kind: "bullets",
|
|
1628
|
+
items: [
|
|
1629
|
+
"Provision and operate managed agent infrastructure",
|
|
1630
|
+
"Bill paid plans and account for service levels",
|
|
1631
|
+
"Detect and respond to abuse and security incidents",
|
|
1632
|
+
"Provide support and communicate service notices"
|
|
1633
|
+
]
|
|
1634
|
+
}
|
|
1635
|
+
]
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
id: "sub-processors",
|
|
1639
|
+
heading: "sub-processors",
|
|
1640
|
+
blocks: [
|
|
1641
|
+
{
|
|
1642
|
+
kind: "para",
|
|
1643
|
+
text: "Fleet relies on a small set of sub-processors \u2014 including a payment processor (Stripe) and hosting and infrastructure providers."
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
kind: "stub",
|
|
1647
|
+
text: "The complete, current sub-processor list \u2014 each provider, its role, and its processing location \u2014 together with the mechanism for advance notice of changes is being finalized and will be published and referenced from the Data Processing Agreement. This section will be completed following review by counsel."
|
|
1648
|
+
}
|
|
1649
|
+
]
|
|
1650
|
+
},
|
|
1651
|
+
{
|
|
1652
|
+
id: "cookies",
|
|
1653
|
+
heading: "cookies & analytics",
|
|
1654
|
+
blocks: [
|
|
1655
|
+
{
|
|
1656
|
+
kind: "para",
|
|
1657
|
+
text: "Essential cookies for authentication and a theme preference. Page analytics use [Plausible](https://plausible.io/privacy) \u2014 cookie-free, no PII, aggregate only. No advertising or tracking cookies."
|
|
1658
|
+
}
|
|
1659
|
+
]
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
id: "retention",
|
|
1663
|
+
heading: "data retention",
|
|
1664
|
+
blocks: [
|
|
1665
|
+
{
|
|
1666
|
+
kind: "bullets",
|
|
1667
|
+
items: [
|
|
1668
|
+
{
|
|
1669
|
+
k: "operational logs",
|
|
1670
|
+
v: "retained 90 days, then auto-deleted"
|
|
1671
|
+
},
|
|
1672
|
+
{
|
|
1673
|
+
k: "account & billing records",
|
|
1674
|
+
v: "retained for the life of the account and as required for accounting, tax, and audit obligations"
|
|
1675
|
+
},
|
|
1676
|
+
{
|
|
1677
|
+
k: "action envelopes",
|
|
1678
|
+
v: "retained for the life of the account; exportable by the customer at any time"
|
|
1679
|
+
}
|
|
1680
|
+
]
|
|
1681
|
+
}
|
|
1682
|
+
]
|
|
1683
|
+
},
|
|
1684
|
+
{
|
|
1685
|
+
id: "data-security",
|
|
1686
|
+
heading: "data security",
|
|
1687
|
+
blocks: [
|
|
1688
|
+
{
|
|
1689
|
+
kind: "para",
|
|
1690
|
+
text: "HTTPS in transit, access controls on production data, and a bounded blast radius by design \u2014 Fleet structurally cannot hold customer keys or funds. A SOC 2 examination is in progress; until the report is issued it is a statement of intent, not a warranty. We use reasonable measures but do not warrant security; see the [Terms of Service](/terms). We notify affected customers and any competent authority of a personal-data breach as required by applicable law."
|
|
1691
|
+
}
|
|
1692
|
+
]
|
|
1693
|
+
},
|
|
1694
|
+
privacyRights,
|
|
1695
|
+
privacyTransfers,
|
|
1696
|
+
privacyRegional,
|
|
1697
|
+
privacyChildren,
|
|
1698
|
+
privacyChanges
|
|
1699
|
+
],
|
|
1700
|
+
summary: "summary: operator and billing data plus orchestration metadata; no customer keys, no customer funds. card payments are held by stripe. dpa and sub-processor list are being finalized."
|
|
1701
|
+
};
|
|
1702
|
+
var fleetProfile = { terms: terms4, privacy: privacy4 };
|
|
1703
|
+
|
|
1704
|
+
// src/content/index.ts
|
|
1705
|
+
var PROFILES = {
|
|
1706
|
+
protocol: protocolProfile,
|
|
1707
|
+
me: meProfile,
|
|
1708
|
+
vault: vaultProfile,
|
|
1709
|
+
fleet: fleetProfile
|
|
1710
|
+
};
|
|
1711
|
+
|
|
1712
|
+
// src/build.ts
|
|
1713
|
+
var TOKEN_RE = /\[\[([A-Z_]+)\]\]/g;
|
|
1714
|
+
function fill(text, tokens) {
|
|
1715
|
+
return text.replace(TOKEN_RE, (match, key) => tokens[key] ?? match);
|
|
1716
|
+
}
|
|
1717
|
+
function fillBullet(item, tokens) {
|
|
1718
|
+
if (typeof item === "string") return fill(item, tokens);
|
|
1719
|
+
return { k: fill(item.k, tokens), v: fill(item.v, tokens) };
|
|
1720
|
+
}
|
|
1721
|
+
function fillBlock(block, tokens) {
|
|
1722
|
+
switch (block.kind) {
|
|
1723
|
+
case "para":
|
|
1724
|
+
case "subhead":
|
|
1725
|
+
case "stub":
|
|
1726
|
+
return { ...block, text: fill(block.text, tokens) };
|
|
1727
|
+
case "callout":
|
|
1728
|
+
return { ...block, text: fill(block.text, tokens) };
|
|
1729
|
+
case "bullets":
|
|
1730
|
+
return { ...block, items: block.items.map((i) => fillBullet(i, tokens)) };
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
function fillSection(section, tokens, index) {
|
|
1734
|
+
return {
|
|
1735
|
+
...section,
|
|
1736
|
+
num: String(index + 1).padStart(2, "0"),
|
|
1737
|
+
heading: fill(section.heading, tokens),
|
|
1738
|
+
hint: section.hint ? fill(section.hint, tokens) : void 0,
|
|
1739
|
+
blocks: section.blocks.map((b) => fillBlock(b, tokens))
|
|
1740
|
+
};
|
|
1741
|
+
}
|
|
1742
|
+
function fillSpec(spec, tokens) {
|
|
1743
|
+
return {
|
|
1744
|
+
...spec,
|
|
1745
|
+
eyebrow: fill(spec.eyebrow, tokens),
|
|
1746
|
+
title: fill(spec.title, tokens),
|
|
1747
|
+
description: fill(spec.description, tokens),
|
|
1748
|
+
metaTitle: fill(spec.metaTitle, tokens),
|
|
1749
|
+
metaDescription: fill(spec.metaDescription, tokens),
|
|
1750
|
+
preamble: spec.preamble?.map((b) => fillBlock(b, tokens)),
|
|
1751
|
+
sections: spec.sections.map((s, i) => fillSection(s, tokens, i)),
|
|
1752
|
+
summary: spec.summary ? fill(spec.summary, tokens) : void 0
|
|
1753
|
+
};
|
|
1754
|
+
}
|
|
1755
|
+
function buildDoc(siteSlug, kind) {
|
|
1756
|
+
const ctx = getSiteContext(siteSlug);
|
|
1757
|
+
const spec = PROFILES[ctx.profile][kind];
|
|
1758
|
+
const tokens = {
|
|
1759
|
+
...GLOBAL_TOKENS,
|
|
1760
|
+
PRODUCT: ctx.product,
|
|
1761
|
+
PRODUCT_SHORT: ctx.productShort,
|
|
1762
|
+
HOST: ctx.host,
|
|
1763
|
+
CONTACT: ctx.contact,
|
|
1764
|
+
SECURITY_CONTACT: ctx.securityContact
|
|
1765
|
+
};
|
|
1766
|
+
return {
|
|
1767
|
+
...fillSpec(spec, tokens),
|
|
1768
|
+
site: ctx.slug,
|
|
1769
|
+
profile: ctx.profile
|
|
1770
|
+
};
|
|
1771
|
+
}
|
|
1772
|
+
var INLINE_RE = /(\*\*[^*]+\*\*|`[^`]+`|\[[^\]]+\]\([^)]+\))/g;
|
|
1773
|
+
var LINK_RE = /^\[([^\]]+)\]\(([^)]+)\)$/;
|
|
1774
|
+
function renderInline(text) {
|
|
1775
|
+
const parts = text.split(INLINE_RE);
|
|
1776
|
+
return parts.map((part, i) => {
|
|
1777
|
+
if (!part) return null;
|
|
1778
|
+
if (part.startsWith("**") && part.endsWith("**")) {
|
|
1779
|
+
return /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: part.slice(2, -2) }, i);
|
|
1780
|
+
}
|
|
1781
|
+
if (part.startsWith("`") && part.endsWith("`")) {
|
|
1782
|
+
return /* @__PURE__ */ jsxRuntime.jsx("code", { className: "font-mono text-[0.95em]", children: part.slice(1, -1) }, i);
|
|
1783
|
+
}
|
|
1784
|
+
const link = LINK_RE.exec(part);
|
|
1785
|
+
if (link) {
|
|
1786
|
+
const label = link[1] ?? "";
|
|
1787
|
+
const href = link[2] ?? "";
|
|
1788
|
+
if (/^https?:\/\//.test(href)) {
|
|
1789
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1790
|
+
"a",
|
|
1791
|
+
{
|
|
1792
|
+
href,
|
|
1793
|
+
target: "_blank",
|
|
1794
|
+
rel: "noopener noreferrer",
|
|
1795
|
+
className: "text-primary underline",
|
|
1796
|
+
children: label
|
|
1797
|
+
},
|
|
1798
|
+
i
|
|
1799
|
+
);
|
|
1800
|
+
}
|
|
1801
|
+
if (href.startsWith("mailto:")) {
|
|
1802
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: "text-primary underline", children: label }, i);
|
|
1803
|
+
}
|
|
1804
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href, className: "text-primary underline", children: label }, i);
|
|
1805
|
+
}
|
|
1806
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: part }, i);
|
|
1807
|
+
});
|
|
1808
|
+
}
|
|
1809
|
+
function Para({ text }) {
|
|
1810
|
+
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: renderInline(text) });
|
|
1811
|
+
}
|
|
1812
|
+
function SubHead({ text }) {
|
|
1813
|
+
return /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-display text-primary mt-6 mb-2 text-xs font-bold tracking-widest uppercase", children: renderInline(text) });
|
|
1814
|
+
}
|
|
1815
|
+
function Bullets({ items }) {
|
|
1816
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "divide-y border font-mono text-xs", children: items.map((item, i) => {
|
|
1817
|
+
if (typeof item === "string") {
|
|
1818
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-3 px-4 py-2.5", children: [
|
|
1819
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary mt-0.5 flex-shrink-0", children: ">>" }),
|
|
1820
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: renderInline(item) })
|
|
1821
|
+
] }, i);
|
|
1822
|
+
}
|
|
1823
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5", children: [
|
|
1824
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary w-40 flex-shrink-0 font-bold tracking-widest uppercase", children: item.k }),
|
|
1825
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground flex-1", children: renderInline(item.v) })
|
|
1826
|
+
] }, i);
|
|
1827
|
+
}) });
|
|
1828
|
+
}
|
|
1829
|
+
function Callout({ text, emphatic }) {
|
|
1830
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-primary/30 bg-primary/[0.03] border px-4 py-3 font-mono text-xs leading-relaxed", children: [
|
|
1831
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary mr-2", children: emphatic ? "!! " : "\xA7 " }),
|
|
1832
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: emphatic ? "text-foreground font-medium" : "text-foreground", children: renderInline(text) })
|
|
1833
|
+
] });
|
|
1834
|
+
}
|
|
1835
|
+
function Stub({ text }) {
|
|
1836
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-warning/40 bg-warning/[0.05] border px-4 py-3.5 font-mono text-xs leading-relaxed", children: [
|
|
1837
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning mb-1.5 font-bold tracking-widest uppercase", children: "\xA7 pending \xB7 counsel review" }),
|
|
1838
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: renderInline(text) })
|
|
1839
|
+
] });
|
|
1840
|
+
}
|
|
1841
|
+
function BlockView({ block }) {
|
|
1842
|
+
switch (block.kind) {
|
|
1843
|
+
case "para":
|
|
1844
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Para, { text: block.text });
|
|
1845
|
+
case "subhead":
|
|
1846
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SubHead, { text: block.text });
|
|
1847
|
+
case "bullets":
|
|
1848
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Bullets, { items: block.items });
|
|
1849
|
+
case "callout":
|
|
1850
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Callout, { text: block.text, emphatic: block.emphatic });
|
|
1851
|
+
case "stub":
|
|
1852
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Stub, { text: block.text });
|
|
1853
|
+
}
|
|
1854
|
+
}
|
|
1855
|
+
function SectionView({ section }) {
|
|
1856
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "border-t py-10", children: [
|
|
1857
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 flex flex-wrap items-baseline gap-x-3 gap-y-1", children: [
|
|
1858
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-display text-primary text-sm font-bold tabular-nums", children: [
|
|
1859
|
+
"[",
|
|
1860
|
+
section.num,
|
|
1861
|
+
"]"
|
|
1862
|
+
] }),
|
|
1863
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-display text-lg font-bold tracking-wider uppercase", children: section.heading }),
|
|
1864
|
+
section.hint && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground font-mono text-[11px]", children: [
|
|
1865
|
+
"// ",
|
|
1866
|
+
section.hint
|
|
1867
|
+
] })
|
|
1868
|
+
] }),
|
|
1869
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-3xl space-y-4 font-mono text-sm leading-relaxed", children: section.blocks.map((b, i) => /* @__PURE__ */ jsxRuntime.jsx(BlockView, { block: b }, i)) })
|
|
1870
|
+
] });
|
|
1871
|
+
}
|
|
1872
|
+
function LegalDocument({ doc }) {
|
|
1873
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("article", { children: [
|
|
1874
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "pt-2 pb-4", children: [
|
|
1875
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-display text-primary mb-3 text-xs font-bold tracking-widest uppercase", children: [
|
|
1876
|
+
"\xA7 ",
|
|
1877
|
+
doc.eyebrow
|
|
1878
|
+
] }),
|
|
1879
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "font-display text-3xl font-bold tracking-tight sm:text-4xl", children: doc.title }),
|
|
1880
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-4 max-w-3xl text-sm leading-relaxed", children: renderInline(doc.description) })
|
|
1881
|
+
] }),
|
|
1882
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-x-6 gap-y-1 border-b pb-4 font-mono text-[11px]", children: [
|
|
1883
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
1884
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground tracking-widest uppercase", children: [
|
|
1885
|
+
"effective:",
|
|
1886
|
+
" "
|
|
1887
|
+
] }),
|
|
1888
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground tabular-nums", children: doc.effective })
|
|
1889
|
+
] }),
|
|
1890
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
1891
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground tracking-widest uppercase", children: [
|
|
1892
|
+
"last updated:",
|
|
1893
|
+
" "
|
|
1894
|
+
] }),
|
|
1895
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground tabular-nums", children: doc.updated })
|
|
1896
|
+
] })
|
|
1897
|
+
] }),
|
|
1898
|
+
doc.preamble && doc.preamble.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 space-y-3", children: doc.preamble.map((b, i) => /* @__PURE__ */ jsxRuntime.jsx(BlockView, { block: b }, i)) }),
|
|
1899
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: doc.sections.map((s) => /* @__PURE__ */ jsxRuntime.jsx(SectionView, { section: s }, s.id)) }),
|
|
1900
|
+
doc.summary && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground mt-10 border-t pt-6 font-mono text-[11px]", children: [
|
|
1901
|
+
"// ",
|
|
1902
|
+
doc.summary
|
|
1903
|
+
] })
|
|
1904
|
+
] });
|
|
1905
|
+
}
|
|
1906
|
+
function SecurityDisclosure({
|
|
1907
|
+
securityContact = "security@ochk.io",
|
|
1908
|
+
heading = "responsible disclosure"
|
|
1909
|
+
}) {
|
|
1910
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-mono text-sm leading-relaxed", children: [
|
|
1911
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-display text-foreground mb-4 text-lg font-bold tracking-wider uppercase", children: heading }),
|
|
1912
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-primary/30 bg-primary/[0.03] mb-4 border px-4 py-3 text-xs leading-relaxed", children: [
|
|
1913
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary mr-2", children: "!! " }),
|
|
1914
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: "Don't open public GitHub issues for exploitable bugs. Public disclosure before a fix ships puts everyone using the protocol at risk." })
|
|
1915
|
+
] }),
|
|
1916
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground mb-4", children: [
|
|
1917
|
+
"Email",
|
|
1918
|
+
" ",
|
|
1919
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1920
|
+
"a",
|
|
1921
|
+
{
|
|
1922
|
+
href: `mailto:${securityContact}`,
|
|
1923
|
+
className: "text-primary underline decoration-dotted underline-offset-3",
|
|
1924
|
+
children: securityContact
|
|
1925
|
+
}
|
|
1926
|
+
),
|
|
1927
|
+
" ",
|
|
1928
|
+
"\u2014 use PGP for highly sensitive findings; the fingerprint and key are published at",
|
|
1929
|
+
" ",
|
|
1930
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1931
|
+
"a",
|
|
1932
|
+
{
|
|
1933
|
+
href: "https://github.com/orangecheck/.github/blob/main/SECURITY.md",
|
|
1934
|
+
target: "_blank",
|
|
1935
|
+
rel: "noopener noreferrer",
|
|
1936
|
+
className: "text-primary underline",
|
|
1937
|
+
children: "github.com/orangecheck/.github/SECURITY.md"
|
|
1938
|
+
}
|
|
1939
|
+
),
|
|
1940
|
+
". Alternatively, open a private GitHub security advisory on the most relevant",
|
|
1941
|
+
" ",
|
|
1942
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "text-[0.95em]", children: "orangecheck/*" }),
|
|
1943
|
+
" repository."
|
|
1944
|
+
] }),
|
|
1945
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "divide-y border text-xs", children: [
|
|
1946
|
+
["acknowledgement", "within 72 hours of receipt"],
|
|
1947
|
+
[
|
|
1948
|
+
"triage",
|
|
1949
|
+
"within 7 days \u2014 whether we agree it is a vulnerability, the severity assigned, and a target fix date"
|
|
1950
|
+
],
|
|
1951
|
+
[
|
|
1952
|
+
"coordinated disclosure",
|
|
1953
|
+
"we credit you (unless you prefer anonymity) and publish an advisory once the fix ships"
|
|
1954
|
+
],
|
|
1955
|
+
[
|
|
1956
|
+
"bounty",
|
|
1957
|
+
"no paid bounty program yet \u2014 the ecosystem is young; we are grateful for responsible disclosure"
|
|
1958
|
+
]
|
|
1959
|
+
].map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5", children: [
|
|
1960
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary w-44 flex-shrink-0 font-bold tracking-widest uppercase", children: k }),
|
|
1961
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground flex-1", children: v })
|
|
1962
|
+
] }, k)) })
|
|
1963
|
+
] });
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
exports.CONTACT_GENERAL = CONTACT_GENERAL;
|
|
1967
|
+
exports.CONTACT_PRIVACY = CONTACT_PRIVACY;
|
|
1968
|
+
exports.CONTACT_SECURITY = CONTACT_SECURITY;
|
|
1969
|
+
exports.ENTITY_PENDING = ENTITY_PENDING;
|
|
1970
|
+
exports.LEGAL_ENTITY = LEGAL_ENTITY;
|
|
1971
|
+
exports.LEGAL_ENTITY_LONG = LEGAL_ENTITY_LONG;
|
|
1972
|
+
exports.LEGAL_SITES = LEGAL_SITES;
|
|
1973
|
+
exports.LegalDocument = LegalDocument;
|
|
1974
|
+
exports.PROTOCOL_LINKED_SITES = PROTOCOL_LINKED_SITES;
|
|
1975
|
+
exports.SecurityDisclosure = SecurityDisclosure;
|
|
1976
|
+
exports.buildDoc = buildDoc;
|
|
1977
|
+
exports.getSiteContext = getSiteContext;
|
|
1978
|
+
exports.legalHref = legalHref;
|
|
1979
|
+
//# sourceMappingURL=index.js.map
|
|
1980
|
+
//# sourceMappingURL=index.js.map
|