codequill 0.8.1-beta.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 +121 -0
- package/dist/commands/attest.js +442 -0
- package/dist/commands/attest.js.map +1 -0
- package/dist/commands/backup.js +370 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/claim.js +104 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/log.js +188 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/login.js +147 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/prove.js +244 -0
- package/dist/commands/prove.js.map +1 -0
- package/dist/commands/publish.js +243 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/pull.js +174 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/quota.js +94 -0
- package/dist/commands/quota.js.map +1 -0
- package/dist/commands/revoke.js +97 -0
- package/dist/commands/revoke.js.map +1 -0
- package/dist/commands/snapshot.js +128 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/status.js +234 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/verifyAttestation.js +212 -0
- package/dist/commands/verifyAttestation.js.map +1 -0
- package/dist/commands/verifyProof.js +145 -0
- package/dist/commands/verifyProof.js.map +1 -0
- package/dist/commands/wait.js +36 -0
- package/dist/commands/wait.js.map +1 -0
- package/dist/commands/who.js +55 -0
- package/dist/commands/who.js.map +1 -0
- package/dist/commands/why.js +412 -0
- package/dist/commands/why.js.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/launcher.js +69 -0
- package/dist/launcher.js.map +1 -0
- package/dist/services/api.js +51 -0
- package/dist/services/api.js.map +1 -0
- package/dist/services/apiClient.js +166 -0
- package/dist/services/apiClient.js.map +1 -0
- package/dist/services/authStore.js +84 -0
- package/dist/services/authStore.js.map +1 -0
- package/dist/services/config.js +19 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/confirm.js +58 -0
- package/dist/services/confirm.js.map +1 -0
- package/dist/services/crypto.js +38 -0
- package/dist/services/crypto.js.map +1 -0
- package/dist/services/errors.js +17 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/fs.js +25 -0
- package/dist/services/fs.js.map +1 -0
- package/dist/services/git.js +121 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/manifests/attestationManifest.js +35 -0
- package/dist/services/manifests/attestationManifest.js.map +1 -0
- package/dist/services/manifests/proofManifest.js +151 -0
- package/dist/services/manifests/proofManifest.js.map +1 -0
- package/dist/services/manifests/snapshotManifest.js +214 -0
- package/dist/services/manifests/snapshotManifest.js.map +1 -0
- package/dist/services/merkle.js +92 -0
- package/dist/services/merkle.js.map +1 -0
- package/dist/services/paths.js +16 -0
- package/dist/services/paths.js.map +1 -0
- package/dist/services/snapshotIndex.js +401 -0
- package/dist/services/snapshotIndex.js.map +1 -0
- package/dist/services/txWaiter.js +84 -0
- package/dist/services/txWaiter.js.map +1 -0
- package/dist/services/ui.js +98 -0
- package/dist/services/ui.js.map +1 -0
- package/dist/services/utilities.js +45 -0
- package/dist/services/utilities.js.map +1 -0
- package/dist/services/zip.js +24 -0
- package/dist/services/zip.js.map +1 -0
- package/dist/types/api.js +2 -0
- package/dist/types/api.js.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { colors } from '../services/ui.js';
|
|
2
|
+
function hr() {
|
|
3
|
+
console.log(colors.dim('────────────────────────────────────────'));
|
|
4
|
+
}
|
|
5
|
+
function indent(s, n = 2) {
|
|
6
|
+
const pad = ' '.repeat(n);
|
|
7
|
+
return s
|
|
8
|
+
.split('\n')
|
|
9
|
+
.map((l) => (l ? pad + l : l))
|
|
10
|
+
.join('\n');
|
|
11
|
+
}
|
|
12
|
+
function printWhyAttest(opts) {
|
|
13
|
+
if (opts.short) {
|
|
14
|
+
console.log(colors.bold('Why CodeQuill attest?'));
|
|
15
|
+
console.log('');
|
|
16
|
+
console.log('A SHA256 hash proves integrity of an artifact.');
|
|
17
|
+
console.log('A CodeQuill attestation preserves a verifiable *claim* about it:');
|
|
18
|
+
console.log(' • who asserted it (authority wallet)');
|
|
19
|
+
console.log(' • which snapshot it references (source state)');
|
|
20
|
+
console.log(' • when it was recorded (timestamped anchor)');
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log('Use it to make releases easier to audit over time.');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (opts.ci) {
|
|
26
|
+
console.log('This workflow uses CodeQuill attestations to:');
|
|
27
|
+
console.log('- record a lineage claim from an artifact digest to a published snapshot');
|
|
28
|
+
console.log('- preserve who made the claim and when it was recorded');
|
|
29
|
+
console.log('- enable downstream checks to require attestations as evidence');
|
|
30
|
+
console.log('');
|
|
31
|
+
console.log('Attestations are claims about lineage, not proof of build causality.');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(colors.bold('Why attest artifacts with CodeQuill?'));
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log('Publishing a SHA256 hash proves file integrity.');
|
|
38
|
+
console.log('Attesting with CodeQuill preserves a verifiable claim about lineage and authority.');
|
|
39
|
+
console.log('');
|
|
40
|
+
hr();
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log('1) Authority — Who is making the claim?');
|
|
43
|
+
console.log(indent('A raw hash can be copied anywhere.\n' +
|
|
44
|
+
'A CodeQuill attestation is issued under a repository’s recorded authority\n' +
|
|
45
|
+
'and anchored so the claim is inspectable later.\n\n' +
|
|
46
|
+
'→ You can verify who asserted it.'));
|
|
47
|
+
console.log('');
|
|
48
|
+
console.log('2) Reference — What source state is it pointing to?');
|
|
49
|
+
console.log(indent('An attestation references a specific published snapshot.\n' +
|
|
50
|
+
'Others can verify that the referenced snapshot exists, is anchored,\n' +
|
|
51
|
+
'and is associated with the same repository authority.\n\n' +
|
|
52
|
+
'→ You can verify what source state the claim refers to.'));
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log('3) Durability — Can the record be quietly rewritten later?');
|
|
55
|
+
console.log(indent('Release notes, websites, and registries can change.\n' +
|
|
56
|
+
'Anchored records are append-only.\n\n' +
|
|
57
|
+
'→ You can verify when the claim was recorded.'));
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('4) Automation — Can tools require evidence?');
|
|
60
|
+
console.log(indent('Attestations are machine-readable and queryable.\n' +
|
|
61
|
+
'Pipelines and security tooling can require attestations before promotion\n' +
|
|
62
|
+
'or distribution.\n\n' +
|
|
63
|
+
'→ You reduce ambiguity with enforceable evidence checks.'));
|
|
64
|
+
console.log('');
|
|
65
|
+
hr();
|
|
66
|
+
console.log('');
|
|
67
|
+
console.log('Example:');
|
|
68
|
+
console.log(indent('codequill snapshot\ncodequill publish\ncodequill attest dist/myapp.tar.gz --type file'));
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log('Others can later verify:');
|
|
71
|
+
console.log(indent('- the artifact digest referenced by the attestation\n' +
|
|
72
|
+
'- the published snapshot it points to\n' +
|
|
73
|
+
'- the repository authority that made the claim\n' +
|
|
74
|
+
'- the on-chain timestamp of the record'));
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log('This helps with:');
|
|
77
|
+
console.log(indent('• incident response and audits\n' +
|
|
78
|
+
'• provenance transparency for releases\n' +
|
|
79
|
+
'• reducing “trust me” distribution\n\n' +
|
|
80
|
+
'Note: attestations do not prove how a build occurred.'));
|
|
81
|
+
}
|
|
82
|
+
function printWhyProve(opts) {
|
|
83
|
+
if (opts.short) {
|
|
84
|
+
console.log(colors.bold('Why CodeQuill prove?'));
|
|
85
|
+
console.log('');
|
|
86
|
+
console.log('A proof demonstrates that specific *content* was included in a published snapshot,\n' +
|
|
87
|
+
'without revealing repository structure.');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (opts.ci) {
|
|
91
|
+
console.log('This workflow uses CodeQuill proofs to:');
|
|
92
|
+
console.log('- validate inclusion of specific content against a published snapshot');
|
|
93
|
+
console.log('- produce portable evidence that third parties can verify');
|
|
94
|
+
console.log('- avoid exposing file paths or repository structure');
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log('Proofs answer inclusion questions. They do not prove intent or correctness.');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log('');
|
|
100
|
+
console.log(colors.bold('Why generate a proof of inclusion?'));
|
|
101
|
+
console.log('');
|
|
102
|
+
console.log('A snapshot preserves a source state as evidence.');
|
|
103
|
+
console.log('A proof lets you demonstrate that a specific piece of content was included in it.');
|
|
104
|
+
console.log('');
|
|
105
|
+
hr();
|
|
106
|
+
console.log('');
|
|
107
|
+
console.log('What a CodeQuill proof gives you:');
|
|
108
|
+
console.log(indent('• Cryptographic inclusion proof\n' +
|
|
109
|
+
'• No file paths or repository structure revealed\n' +
|
|
110
|
+
'• Independently verifiable evidence (portable)\n' +
|
|
111
|
+
'• Useful for audits, incident response, and disputes'));
|
|
112
|
+
console.log('');
|
|
113
|
+
console.log('What it answers:');
|
|
114
|
+
console.log(indent('“Was this exact content included in that preserved source state?”\n' +
|
|
115
|
+
'→ Yes, and here is verifiable evidence.'));
|
|
116
|
+
console.log('');
|
|
117
|
+
hr();
|
|
118
|
+
console.log('');
|
|
119
|
+
console.log('Example:');
|
|
120
|
+
console.log(indent('codequill prove path/to/file'));
|
|
121
|
+
console.log('');
|
|
122
|
+
console.log('Others can later verify:');
|
|
123
|
+
console.log(indent('• the content hash referenced in the proof\n' +
|
|
124
|
+
'• the proof steps\n' +
|
|
125
|
+
'• the snapshot root it targets\n' +
|
|
126
|
+
'• the on-chain anchor for that snapshot'));
|
|
127
|
+
console.log('');
|
|
128
|
+
console.log('Why this matters:');
|
|
129
|
+
console.log(indent('It lets you share narrow evidence without sharing a repository.\n' +
|
|
130
|
+
'It moves discussions from arguments to inspectable facts.'));
|
|
131
|
+
}
|
|
132
|
+
function printWhyOverview() {
|
|
133
|
+
console.log('');
|
|
134
|
+
console.log(colors.bold('Why CodeQuill?'));
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log('CodeQuill preserves verifiable evidence of what source code existed at a given point in time.\n' +
|
|
137
|
+
'It provides a stable reference for artifact attestations — without relying on CI logs or registries\n' +
|
|
138
|
+
'as the sole sources of truth.');
|
|
139
|
+
hr();
|
|
140
|
+
console.log('');
|
|
141
|
+
console.log(colors.bold('The gap CodeQuill addresses'));
|
|
142
|
+
console.log(indent('The ecosystem evolved faster than its ability to preserve evidence.\n\n' +
|
|
143
|
+
'Modern distribution relies on layers of platforms and automation.\n' +
|
|
144
|
+
'Over time, durable answers to simple questions became harder:\n' +
|
|
145
|
+
'• What source state existed?\n' +
|
|
146
|
+
'• When was it recorded?\n' +
|
|
147
|
+
'• Under whose authority?\n' +
|
|
148
|
+
'• What artifact claims lineage from it?'));
|
|
149
|
+
console.log('');
|
|
150
|
+
hr();
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log(colors.bold('The evidence chain'));
|
|
153
|
+
console.log(indent('0) Claim → record repository authority\n' +
|
|
154
|
+
'1) Snapshot → derive a reproducible source reference\n' +
|
|
155
|
+
'2) Publish → anchor that reference on-chain\n' +
|
|
156
|
+
'3) Prove → prove specific content was included\n' +
|
|
157
|
+
'4) Attest → record artifact lineage claims\n' +
|
|
158
|
+
'5) Backup → preserve encrypted source bound to a snapshot'));
|
|
159
|
+
console.log('');
|
|
160
|
+
console.log('Each step preserves evidence. None of them prove build causality.');
|
|
161
|
+
console.log('');
|
|
162
|
+
hr();
|
|
163
|
+
console.log('');
|
|
164
|
+
console.log(colors.bold('Why commands'));
|
|
165
|
+
console.log(indent('Learn why each step exists:\n\n' +
|
|
166
|
+
'• codequill why claim – why authority matters\n' +
|
|
167
|
+
'• codequill why snapshot – why source references matter\n' +
|
|
168
|
+
'• codequill why publish – why anchoring matters\n' +
|
|
169
|
+
'• codequill why prove – why inclusion proofs matter\n' +
|
|
170
|
+
'• codequill why attest – why attestations are useful\n' +
|
|
171
|
+
'• codequill why backup – why encrypted backups exist'));
|
|
172
|
+
console.log('');
|
|
173
|
+
hr();
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(colors.bold('What CodeQuill enables'));
|
|
176
|
+
console.log(indent('• incident response and audit evidence\n' +
|
|
177
|
+
'• provenance transparency for releases\n' +
|
|
178
|
+
'• long-lived, inspectable records under hostile assumptions\n' +
|
|
179
|
+
'• privacy-preserving proof sharing (no structure disclosure)\n' +
|
|
180
|
+
'• long-term source preservation without custody'));
|
|
181
|
+
console.log('');
|
|
182
|
+
console.log(colors.dim('Start with:'));
|
|
183
|
+
console.log(indent('codequill why claim'));
|
|
184
|
+
}
|
|
185
|
+
function printWhyBackup(opts) {
|
|
186
|
+
if (opts.short) {
|
|
187
|
+
console.log(colors.bold('Why CodeQuill backup?'));
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log('Backups preserve an encrypted copy of source code,\n' +
|
|
190
|
+
'cryptographically bound to a snapshot, without giving CodeQuill custody.');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (opts.ci) {
|
|
194
|
+
console.log('This workflow uses CodeQuill backups to:');
|
|
195
|
+
console.log('- preserve source code for a published snapshot');
|
|
196
|
+
console.log('- ensure backups are cryptographically bound to preserved evidence');
|
|
197
|
+
console.log('- store only encrypted data in external storage');
|
|
198
|
+
console.log('');
|
|
199
|
+
console.log('Backups are optional and do not prove build outputs.');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
console.log('');
|
|
203
|
+
console.log(colors.bold('Why create an encrypted backup?'));
|
|
204
|
+
console.log('');
|
|
205
|
+
console.log('Publishing a snapshot preserves evidence *about* source code.\n' +
|
|
206
|
+
'Sometimes, preserving the source itself is also required.');
|
|
207
|
+
hr();
|
|
208
|
+
console.log('');
|
|
209
|
+
console.log('What CodeQuill backups are for:');
|
|
210
|
+
console.log(indent('• long-term source preservation\n' +
|
|
211
|
+
'• disaster recovery\n' +
|
|
212
|
+
'• private audit records\n' +
|
|
213
|
+
'• compliance or legal archiving'));
|
|
214
|
+
console.log('');
|
|
215
|
+
console.log('How backups work (at a high level):');
|
|
216
|
+
console.log(indent('• Source is reconstructed and verified locally\n' +
|
|
217
|
+
'• Snapshot integrity is checked before backup\n' +
|
|
218
|
+
'• The archive is encrypted client-side\n' +
|
|
219
|
+
'• Only encrypted bytes are uploaded\n' +
|
|
220
|
+
'• Decryption requires the workspace authority'));
|
|
221
|
+
console.log('');
|
|
222
|
+
console.log('What backups do *not* do:');
|
|
223
|
+
console.log(indent('• They do not prove how software was built\n' +
|
|
224
|
+
'• They do not assert artifact correctness\n' +
|
|
225
|
+
'• They do not expose source code publicly'));
|
|
226
|
+
console.log('');
|
|
227
|
+
console.log('Why this matters:');
|
|
228
|
+
console.log(indent('Many systems either store plaintext source\n' +
|
|
229
|
+
'or rely on internal storage that may not survive over time.\n\n' +
|
|
230
|
+
'CodeQuill backups preserve source without expanding trust,\n' +
|
|
231
|
+
'custody, or liability.'));
|
|
232
|
+
console.log('');
|
|
233
|
+
hr();
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log('Example:');
|
|
236
|
+
console.log(indent('codequill backup'));
|
|
237
|
+
console.log('');
|
|
238
|
+
console.log('Later, you can verify:');
|
|
239
|
+
console.log(indent('• the backup is bound to a specific snapshot\n' +
|
|
240
|
+
'• the snapshot was published and anchored\n' +
|
|
241
|
+
'• the encrypted archive has not been tampered with'));
|
|
242
|
+
console.log('');
|
|
243
|
+
console.log(colors.dim('Note: losing access to the authority means losing access to the backup.'));
|
|
244
|
+
}
|
|
245
|
+
function printWhySnapshot(opts) {
|
|
246
|
+
if (opts.short) {
|
|
247
|
+
console.log(colors.bold('Why CodeQuill snapshot?'));
|
|
248
|
+
console.log('');
|
|
249
|
+
console.log('A snapshot derives a deterministic source reference from a repository state.');
|
|
250
|
+
console.log('It is reproducible and created locally, without sending source code to CodeQuill.');
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (opts.ci) {
|
|
254
|
+
console.log('This workflow creates a CodeQuill snapshot to:');
|
|
255
|
+
console.log('- derive a reproducible reference for the current source state');
|
|
256
|
+
console.log('- support later publish / prove / attest steps');
|
|
257
|
+
console.log('');
|
|
258
|
+
console.log('Snapshots are created locally and do not require server-side computation.');
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
console.log('');
|
|
262
|
+
console.log(colors.bold('Why create a snapshot?'));
|
|
263
|
+
console.log('');
|
|
264
|
+
console.log('A snapshot preserves a specific source state as evidence.');
|
|
265
|
+
console.log('It produces a deterministic reference that can be reproduced from the same source state.');
|
|
266
|
+
console.log('');
|
|
267
|
+
hr();
|
|
268
|
+
console.log('');
|
|
269
|
+
console.log('Privacy note:');
|
|
270
|
+
console.log(indent('CodeQuill is designed to preserve evidence without revealing repository structure.\n' +
|
|
271
|
+
'Path information is encrypted/obfuscated in the snapshot model, while public verification\n' +
|
|
272
|
+
'focuses on content inclusion and anchored identifiers.'));
|
|
273
|
+
console.log('');
|
|
274
|
+
console.log('What you get:');
|
|
275
|
+
console.log(indent('• A local manifest representing the source state\n' +
|
|
276
|
+
'• A snapshot identifier/root that can be anchored\n' +
|
|
277
|
+
'• The basis for inclusion proofs and attestations'));
|
|
278
|
+
console.log('');
|
|
279
|
+
hr();
|
|
280
|
+
console.log('');
|
|
281
|
+
console.log('Example:');
|
|
282
|
+
console.log(indent('codequill snapshot'));
|
|
283
|
+
console.log('');
|
|
284
|
+
console.log('Next:');
|
|
285
|
+
console.log(indent('codequill publish # anchor this snapshot on-chain'));
|
|
286
|
+
}
|
|
287
|
+
function printWhyClaim(opts) {
|
|
288
|
+
if (opts.short) {
|
|
289
|
+
console.log('Claim associates a repository with a workspace authority wallet.\n' +
|
|
290
|
+
'It makes publishes and attestations attributable and harder to impersonate.');
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (opts.ci) {
|
|
294
|
+
console.log('This workflow relies on claim to:');
|
|
295
|
+
console.log('- establish which workspace authority is allowed to publish for a repository');
|
|
296
|
+
console.log('- enable delegated automation under that authority');
|
|
297
|
+
console.log('');
|
|
298
|
+
console.log('Claim anchors authorship/authority as evidence, not correctness.');
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
console.log('');
|
|
302
|
+
console.log(colors.bold('Why claim?'));
|
|
303
|
+
console.log('');
|
|
304
|
+
console.log('Claiming a repository records which authority it is authored/maintained under.\n' +
|
|
305
|
+
'It answers: “Under which authority were snapshots and attestations published?”');
|
|
306
|
+
hr();
|
|
307
|
+
console.log('');
|
|
308
|
+
console.log(colors.bold('What claim gives you'));
|
|
309
|
+
console.log(indent('• Attribution: evidence is tied to a recorded authority\n' +
|
|
310
|
+
'• Anti-impersonation: harder to publish convincing evidence under the wrong authority\n' +
|
|
311
|
+
'• Delegation support: collaborators/CI can operate under a workspace authority model\n' +
|
|
312
|
+
'• Auditability: authority changes can be made visible and inspectable'));
|
|
313
|
+
console.log('');
|
|
314
|
+
console.log(colors.bold('Why it matters'));
|
|
315
|
+
console.log(indent('Without claim, “who is speaking?” is ambiguous.\n' +
|
|
316
|
+
'With claim, provenance records have a clear authority context.'));
|
|
317
|
+
console.log('');
|
|
318
|
+
console.log(colors.dim('Next:'));
|
|
319
|
+
console.log(indent('codequill why snapshot'));
|
|
320
|
+
}
|
|
321
|
+
function printWhyPublish(opts) {
|
|
322
|
+
if (opts.short) {
|
|
323
|
+
console.log(colors.bold('Why CodeQuill publish?'));
|
|
324
|
+
console.log('');
|
|
325
|
+
console.log('Publishing anchors a snapshot reference on-chain and makes it durable over time.');
|
|
326
|
+
console.log('It turns a local reference into an inspectable record others can verify.');
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (opts.ci) {
|
|
330
|
+
console.log('This workflow publishes a snapshot to:');
|
|
331
|
+
console.log('- anchor the snapshot identifier/root on-chain');
|
|
332
|
+
console.log('- persist the snapshot manifest off-chain (IPFS-compatible storage)');
|
|
333
|
+
console.log('- enable later proofs and attestations to reference a stable record');
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log('Publishing preserves evidence; it does not prove how builds occurred.');
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
console.log('');
|
|
339
|
+
console.log(colors.bold('Why publish a snapshot?'));
|
|
340
|
+
console.log('');
|
|
341
|
+
console.log('A local snapshot is useful, but it is still just local state.');
|
|
342
|
+
console.log('Publishing turns it into a durable, timestamped record by anchoring it on-chain.');
|
|
343
|
+
console.log('');
|
|
344
|
+
hr();
|
|
345
|
+
console.log('');
|
|
346
|
+
console.log('Publishing gives you:');
|
|
347
|
+
console.log(indent('• Public timestamp (when)\n' +
|
|
348
|
+
'• Recorded authority context (who)\n' +
|
|
349
|
+
'• Immutable reference to a specific source state (what)\n' +
|
|
350
|
+
'• A stable target for proofs and attestations'));
|
|
351
|
+
console.log('');
|
|
352
|
+
console.log('What happens to the data:');
|
|
353
|
+
console.log(indent('• On-chain: minimal identifiers and metadata (claims, snapshot anchors, attestations)\n' +
|
|
354
|
+
'• Off-chain: manifests and optional encrypted backups (IPFS-compatible; e.g., Lighthouse/Filecoin)'));
|
|
355
|
+
console.log('');
|
|
356
|
+
hr();
|
|
357
|
+
console.log('');
|
|
358
|
+
console.log('Example:');
|
|
359
|
+
console.log(indent('codequill snapshot\ncodequill publish'));
|
|
360
|
+
console.log('');
|
|
361
|
+
console.log('Then:');
|
|
362
|
+
console.log(indent('codequill prove <file>\ncodequill attest <artifact> --type file'));
|
|
363
|
+
}
|
|
364
|
+
export async function handleWhy(topic, opts = {}) {
|
|
365
|
+
const options = {
|
|
366
|
+
short: !!opts.short,
|
|
367
|
+
ci: !!opts.ci,
|
|
368
|
+
};
|
|
369
|
+
// If both are set, prefer --short (more deterministic)
|
|
370
|
+
if (options.short && options.ci) {
|
|
371
|
+
options.ci = false;
|
|
372
|
+
}
|
|
373
|
+
if (!topic) {
|
|
374
|
+
printWhyOverview();
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
switch (topic) {
|
|
378
|
+
case 'claim':
|
|
379
|
+
return printWhyClaim(options);
|
|
380
|
+
case 'attest':
|
|
381
|
+
printWhyAttest(options);
|
|
382
|
+
return;
|
|
383
|
+
case 'snapshot':
|
|
384
|
+
printWhySnapshot(options);
|
|
385
|
+
return;
|
|
386
|
+
case 'publish':
|
|
387
|
+
printWhyPublish(options);
|
|
388
|
+
return;
|
|
389
|
+
case 'prove':
|
|
390
|
+
printWhyProve(options);
|
|
391
|
+
return;
|
|
392
|
+
case 'backup':
|
|
393
|
+
printWhyBackup(options);
|
|
394
|
+
return;
|
|
395
|
+
default:
|
|
396
|
+
throw new Error(`Unknown topic: ${topic}`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
export function registerWhyCommand(program) {
|
|
400
|
+
program
|
|
401
|
+
.command('why [topic]')
|
|
402
|
+
.description('Explain why CodeQuill works the way it does')
|
|
403
|
+
.option('--short', 'Short explanation')
|
|
404
|
+
.option('--ci', 'CI-friendly explanation')
|
|
405
|
+
.action(async (topic, options) => {
|
|
406
|
+
await handleWhy(topic, {
|
|
407
|
+
short: !!options.short,
|
|
408
|
+
ci: !!options.ci,
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=why.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAS3C,SAAS,EAAE;IACP,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,MAAM,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC;SACH,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,sCAAsC;QACtC,6EAA6E;QAC7E,qDAAqD;QACrD,mCAAmC,CACtC,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CACP,MAAM,CACF,4DAA4D;QAC5D,uEAAuE;QACvE,2DAA2D;QAC3D,yDAAyD,CAC5D,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CACP,MAAM,CACF,uDAAuD;QACvD,uCAAuC;QACvC,+CAA+C,CAClD,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CACP,MAAM,CACF,oDAAoD;QACpD,4EAA4E;QAC5E,sBAAsB;QACtB,0DAA0D,CAC7D,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC,CAAC;IAC7G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,uDAAuD;QACvD,yCAAyC;QACzC,kDAAkD;QAClD,wCAAwC,CAC3C,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,kCAAkC;QAClC,0CAA0C;QAC1C,wCAAwC;QACxC,uDAAuD,CAC1D,CACJ,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,IAAgB;IACnC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACP,sFAAsF;YACtF,yCAAyC,CAC5C,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,mCAAmC;QACnC,oDAAoD;QACpD,kDAAkD;QAClD,sDAAsD,CACzD,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,qEAAqE;QACrE,yCAAyC,CAC5C,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,8CAA8C;QAC9C,qBAAqB;QACrB,kCAAkC;QAClC,yCAAyC,CAC5C,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,mEAAmE;QACnE,2DAA2D,CAC9D,CACJ,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACP,iGAAiG;QACjG,uGAAuG;QACvG,+BAA+B,CAClC,CAAC;IAEF,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,yEAAyE;QACzE,qEAAqE;QACrE,iEAAiE;QACjE,gCAAgC;QAChC,2BAA2B;QAC3B,4BAA4B;QAC5B,yCAAyC,CAC5C,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CACP,MAAM,CACF,8CAA8C;QAC9C,yDAAyD;QACzD,iDAAiD;QACjD,sDAAsD;QACtD,iDAAiD;QACjD,8DAA8D,CACjE,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,iCAAiC;QACjC,qDAAqD;QACrD,4DAA4D;QAC5D,qDAAqD;QACrD,2DAA2D;QAC3D,2DAA2D;QAC3D,yDAAyD,CAC5D,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,0CAA0C;QAC1C,0CAA0C;QAC1C,+DAA+D;QAC/D,gEAAgE;QAChE,iDAAiD,CACpD,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACP,sDAAsD;YACtD,0EAA0E,CAC7E,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACP,iEAAiE;QACjE,2DAA2D,CAC9D,CAAC;IAEF,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CACP,MAAM,CACF,mCAAmC;QACnC,uBAAuB;QACvB,2BAA2B;QAC3B,iCAAiC,CACpC,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,kDAAkD;QAClD,iDAAiD;QACjD,0CAA0C;QAC1C,uCAAuC;QACvC,+CAA+C,CAClD,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,8CAA8C;QAC9C,6CAA6C;QAC7C,2CAA2C,CAC9C,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,8CAA8C;QAC9C,iEAAiE;QACjE,8DAA8D;QAC9D,wBAAwB,CAC3B,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,gDAAgD;QAChD,6CAA6C;QAC7C,oDAAoD,CACvD,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAgB;IACtC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;QACjG,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CACP,MAAM,CACF,sFAAsF;QACtF,6FAA6F;QAC7F,wDAAwD,CAC3D,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CACP,MAAM,CACF,oDAAoD;QACpD,qDAAqD;QACrD,mDAAmD,CACtD,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,IAAgB;IACnC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACP,oEAAoE;YACpE,6EAA6E,CAChF,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACP,kFAAkF;QAClF,gFAAgF,CACnF,CAAC;IAEF,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CACP,MAAM,CACF,2DAA2D;QAC3D,yFAAyF;QACzF,wFAAwF;QACxF,uEAAuE,CAC1E,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CACP,MAAM,CACF,mDAAmD;QACnD,gEAAgE,CACnE,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB;IACrC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,6BAA6B;QAC7B,sCAAsC;QACtC,2DAA2D;QAC3D,+CAA+C,CAClD,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACP,MAAM,CACF,yFAAyF;QACzF,oGAAoG,CACvG,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAgB,EAAE,OAAmB,EAAE;IACnE,MAAM,OAAO,GAAe;QACxB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;QACnB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;KAChB,CAAC;IAEF,uDAAuD;IACvD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,gBAAgB,EAAE,CAAC;QACnB,OAAO;IACX,CAAC;IAED,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,OAAO;YACR,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,QAAQ;YACT,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACX,KAAK,UAAU;YACX,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO;QACX,KAAK,SAAS;YACV,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO;QACX,KAAK,OAAO;YACR,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO;QACX,KAAK,QAAQ;YACT,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACX;YACI,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAe,EAAE,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAC/C,OAAO;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACtC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,OAAY,EAAE,EAAE;QACtD,MAAM,SAAS,CAAC,KAA6B,EAAE;YAC3C,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;YACtB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;SACnB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACX,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { CLI_VERSION } from './version.js';
|
|
4
|
+
import { registerLoginCommand } from './commands/login.js';
|
|
5
|
+
import { registerWhoCommand } from './commands/who.js';
|
|
6
|
+
import { registerClaimCommand } from './commands/claim.js';
|
|
7
|
+
import { registerSnapshotCommand } from './commands/snapshot.js';
|
|
8
|
+
import { registerQuotaCommand } from './commands/quota.js';
|
|
9
|
+
import { registerProveCommand } from './commands/prove.js';
|
|
10
|
+
import { registerVerifyProofCommand } from './commands/verifyProof.js';
|
|
11
|
+
import { registerPublishCommand } from './commands/publish.js';
|
|
12
|
+
import { registerStatusCommand } from './commands/status.js';
|
|
13
|
+
import { registerLogCommand } from './commands/log.js';
|
|
14
|
+
import { registerPullCommand } from './commands/pull.js';
|
|
15
|
+
import { registerAttestCommand } from './commands/attest.js';
|
|
16
|
+
import { registerWhyCommand } from './commands/why.js';
|
|
17
|
+
import { registerBackupCommand } from './commands/backup.js';
|
|
18
|
+
import { registerWaitCommand } from './commands/wait.js';
|
|
19
|
+
import { colors } from './services/ui.js';
|
|
20
|
+
async function main(argv) {
|
|
21
|
+
const program = new Command();
|
|
22
|
+
program
|
|
23
|
+
.name('codequill')
|
|
24
|
+
.description('CodeQuill CLI — claim authorship, create snapshots, attest, and push backups via the CodeQuill backend')
|
|
25
|
+
.version(CLI_VERSION, '-v, --version', 'Show CLI version');
|
|
26
|
+
// Register commands
|
|
27
|
+
registerLoginCommand(program);
|
|
28
|
+
registerWhoCommand(program);
|
|
29
|
+
registerQuotaCommand(program);
|
|
30
|
+
registerStatusCommand(program);
|
|
31
|
+
registerLogCommand(program);
|
|
32
|
+
registerClaimCommand(program);
|
|
33
|
+
registerSnapshotCommand(program);
|
|
34
|
+
registerPublishCommand(program);
|
|
35
|
+
registerAttestCommand(program);
|
|
36
|
+
registerPullCommand(program);
|
|
37
|
+
registerProveCommand(program);
|
|
38
|
+
registerVerifyProofCommand(program);
|
|
39
|
+
registerWhyCommand(program);
|
|
40
|
+
registerBackupCommand(program);
|
|
41
|
+
registerWaitCommand(program);
|
|
42
|
+
program.showHelpAfterError();
|
|
43
|
+
await program.parseAsync(argv);
|
|
44
|
+
}
|
|
45
|
+
process.on('unhandledRejection', (err) => {
|
|
46
|
+
console.error(colors.error(`Unhandled error: ${String(err?.message || err)}`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
});
|
|
49
|
+
main(process.argv);
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,KAAK,UAAU,IAAI,CAAC,IAAc;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACF,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,wGAAwG,CAAC;SACrH,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAE/D,oBAAoB;IACpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC7B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/launcher.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
function readJsonIfExists(filePath) {
|
|
7
|
+
try {
|
|
8
|
+
if (!fs.existsSync(filePath))
|
|
9
|
+
return null;
|
|
10
|
+
const raw = fs.readFileSync(filePath, 'utf8');
|
|
11
|
+
return JSON.parse(raw);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function readConfig() {
|
|
18
|
+
// 1) Explicit override
|
|
19
|
+
const cfgDirEnv = process.env.CODEQUILL_CONFIG_DIR;
|
|
20
|
+
if (cfgDirEnv) {
|
|
21
|
+
const p = path.join(cfgDirEnv, 'config.json');
|
|
22
|
+
const obj = readJsonIfExists(p);
|
|
23
|
+
if (obj)
|
|
24
|
+
return obj;
|
|
25
|
+
}
|
|
26
|
+
// 2) Repo-local (current working directory)
|
|
27
|
+
const local = path.join(process.cwd(), '.codequill', 'config.json');
|
|
28
|
+
const localObj = readJsonIfExists(local);
|
|
29
|
+
if (localObj)
|
|
30
|
+
return localObj;
|
|
31
|
+
// 3) Global (~/.codequill/config.json)
|
|
32
|
+
const global = path.join(homedir(), '.codequill', 'config.json');
|
|
33
|
+
const globalObj = readJsonIfExists(global);
|
|
34
|
+
if (globalObj)
|
|
35
|
+
return globalObj;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function hasFlag(haystack, flag) {
|
|
39
|
+
return new RegExp(`\\B${flag.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\$&')}\\b`).test(String(haystack ?? ''));
|
|
40
|
+
}
|
|
41
|
+
const cfg = readConfig();
|
|
42
|
+
const wantNoDeprecation = cfg?.node_no_deprecation === true;
|
|
43
|
+
const baseUrl = typeof cfg?.codequill_base_url === 'string' ? cfg.codequill_base_url.trim() : '';
|
|
44
|
+
const apiBaseUrl = typeof cfg?.codequill_api_base_url === 'string' ? cfg.codequill_api_base_url.trim() : '';
|
|
45
|
+
const allowInsecureTls = cfg?.node_tls_reject_unauthorized === 0 || cfg?.node_tls_reject_unauthorized === '0';
|
|
46
|
+
const env = { ...process.env };
|
|
47
|
+
// Runtime envs
|
|
48
|
+
if (baseUrl && !env.CODEQUILL_BASE_URL)
|
|
49
|
+
env.CODEQUILL_BASE_URL = baseUrl;
|
|
50
|
+
if (apiBaseUrl && !env.CODEQUILL_API_BASE_URL)
|
|
51
|
+
env.CODEQUILL_API_BASE_URL = apiBaseUrl;
|
|
52
|
+
if (allowInsecureTls && !env.NODE_TLS_REJECT_UNAUTHORIZED)
|
|
53
|
+
env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
54
|
+
// Node flags (must be present before child Node starts)
|
|
55
|
+
if (wantNoDeprecation && !hasFlag(env.NODE_OPTIONS, '--no-deprecation')) {
|
|
56
|
+
env.NODE_OPTIONS = [env.NODE_OPTIONS, '--no-deprecation'].filter(Boolean).join(' ').trim();
|
|
57
|
+
}
|
|
58
|
+
if (allowInsecureTls && !hasFlag(env.NODE_OPTIONS, '--no-warnings')) {
|
|
59
|
+
env.NODE_OPTIONS = [env.NODE_OPTIONS, '--no-warnings'].filter(Boolean).join(' ').trim();
|
|
60
|
+
}
|
|
61
|
+
// Run the real CLI entrypoint (dist/index.js)
|
|
62
|
+
const entry = new URL('./index.js', import.meta.url);
|
|
63
|
+
const args = process.argv.slice(2);
|
|
64
|
+
const res = spawnSync(process.execPath, [entry.pathname, ...args], {
|
|
65
|
+
stdio: 'inherit',
|
|
66
|
+
env,
|
|
67
|
+
});
|
|
68
|
+
process.exit(typeof res.status === 'number' ? res.status : 1);
|
|
69
|
+
//# sourceMappingURL=launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { apiClient } from "./apiClient.js";
|
|
2
|
+
export async function fetchSnapshot(snapshotId) {
|
|
3
|
+
const meta = await apiClient.get(`/v1/cli/snapshots/${encodeURIComponent(snapshotId)}`);
|
|
4
|
+
return buildSnapshotMeta(meta);
|
|
5
|
+
}
|
|
6
|
+
export async function fetchSnapshotBundle(snapshotId) {
|
|
7
|
+
const bundle = await apiClient.get(`/v1/cli/snapshots/${encodeURIComponent(snapshotId)}/bundle`);
|
|
8
|
+
if (!bundle.meta)
|
|
9
|
+
throw new Error('Snapshot bundle is missing meta data.');
|
|
10
|
+
if (!bundle.manifest)
|
|
11
|
+
throw new Error('Snapshot bundle is missing manifest.');
|
|
12
|
+
return {
|
|
13
|
+
meta: buildSnapshotMeta(bundle.meta),
|
|
14
|
+
manifest: bundle.manifest
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function buildSnapshotMeta(meta) {
|
|
18
|
+
if (!meta || typeof meta !== 'object')
|
|
19
|
+
throw new Error('Invalid backend response for snapshot.');
|
|
20
|
+
const required = [
|
|
21
|
+
'snapshot_id', 'repository_name', 'repository_id', 'commit_hash', 'merkle_root', 'published_at',
|
|
22
|
+
'manifest_cid', 'manifest_encoding', 'tx_hash', 'chain_id', 'wallet_address', 'contract_address',
|
|
23
|
+
'explorer_url', 'file_count'
|
|
24
|
+
];
|
|
25
|
+
for (const k of required) {
|
|
26
|
+
const v = meta[k];
|
|
27
|
+
if (v === null || v === undefined || v === '' || (k === 'chain_id' && !Number(v))) {
|
|
28
|
+
throw new Error(`Snapshot is missing required published field: ${k}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (meta.manifest_encoding !== 'gzip')
|
|
32
|
+
throw new Error('Snapshot manifest_encoding is not gzip.');
|
|
33
|
+
return {
|
|
34
|
+
snapshot_id: String(meta.snapshot_id),
|
|
35
|
+
repository_name: String(meta.repository_name),
|
|
36
|
+
repository_id: String(meta.repository_id),
|
|
37
|
+
workspace_id: String(meta.workspace_id),
|
|
38
|
+
commit_hash: String(meta.commit_hash),
|
|
39
|
+
merkle_root: String(meta.merkle_root),
|
|
40
|
+
published_at: typeof meta.published_at === 'number' ? meta.published_at : 0,
|
|
41
|
+
manifest_cid: meta.manifest_cid,
|
|
42
|
+
manifest_encoding: meta.manifest_encoding,
|
|
43
|
+
tx_hash: meta.tx_hash,
|
|
44
|
+
chain_id: meta.chain_id,
|
|
45
|
+
wallet_address: meta.wallet_address,
|
|
46
|
+
contract_address: meta.contract_address,
|
|
47
|
+
explorer_url: meta.explorer_url,
|
|
48
|
+
file_count: meta.file_count
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IAClD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAc,qBAAqB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IACxD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAoB,qBAAqB,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACpH,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9E,OAAO;QACH,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC5B,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB;IACxC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG;QACb,aAAa,EAAC,iBAAiB,EAAC,eAAe,EAAC,aAAa,EAAC,aAAa,EAAC,cAAc;QAC1F,cAAc,EAAC,mBAAmB,EAAC,SAAS,EAAC,UAAU,EAAC,gBAAgB,EAAC,kBAAkB;QAC3F,cAAc,EAAE,YAAY;KACtB,CAAC;IACX,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,GAAS,IAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;IAED,IAAK,IAAY,CAAC,iBAAiB,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC3G,OAAO;QACH,WAAW,EAAE,MAAM,CAAE,IAAY,CAAC,WAAW,CAAC;QAC9C,eAAe,EAAE,MAAM,CAAE,IAAY,CAAC,eAAe,CAAC;QACtD,aAAa,EAAE,MAAM,CAAE,IAAY,CAAC,aAAa,CAAC;QAClD,YAAY,EAAE,MAAM,CAAE,IAAY,CAAC,YAAY,CAAC;QAChD,WAAW,EAAE,MAAM,CAAE,IAAY,CAAC,WAAW,CAAC;QAC9C,WAAW,EAAE,MAAM,CAAE,IAAY,CAAC,WAAW,CAAC;QAC9C,YAAY,EAAE,OAAQ,IAAY,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7F,YAAY,EAAG,IAAY,CAAC,YAAY;QACxC,iBAAiB,EAAG,IAAY,CAAC,iBAAiB;QAClD,OAAO,EAAG,IAAY,CAAC,OAAO;QAC9B,QAAQ,EAAG,IAAY,CAAC,QAAQ;QAChC,cAAc,EAAG,IAAY,CAAC,cAAc;QAC5C,gBAAgB,EAAG,IAAY,CAAC,gBAAgB;QAChD,YAAY,EAAG,IAAY,CAAC,YAAY;QACxC,UAAU,EAAG,IAAY,CAAC,UAAU;KACvC,CAAC;AACN,CAAC"}
|