@certivu/sdk 1.1.0 → 2.0.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/README.md CHANGED
@@ -22,15 +22,14 @@ import { CertivuClient } from '@certivu/sdk'
22
22
  const certivu = new CertivuClient({
23
23
  apiKey: 'ctv_key_abc123',
24
24
  generatorId: 'gen_xyz',
25
- privateKey: '<base64-encoded ML-DSA private key>',
26
25
  })
27
26
 
28
- // Sign AI-generated content
29
- const { token } = await certivu.sign({
30
- content: imageBuffer, // Buffer, Uint8Array, or string
27
+ // Sign AI-generated content — returns the watermarked image + token
28
+ const { token, record_id, watermarkedContent } = await certivu.sign({
29
+ content: imageBuffer, // Buffer or Uint8Array
31
30
  model: 'stable-diffusion-xl',
32
31
  })
33
- // Embed `token` in XMP metadata or pass alongside content for verification
32
+ // watermarkedContent is a Uint8Array store and serve this, not the original
34
33
 
35
34
  // Verify — token optional, extracted automatically from XMP or watermark
36
35
  const result = await certivu.verify({ content: imageBuffer })
@@ -52,36 +51,33 @@ Get your API key and generator credentials at [dashboard.certivu.ai](https://das
52
51
  |---|---|---|---|
53
52
  | `apiKey` | `string` | Yes | API key from the dashboard (`ctv_key_...`) |
54
53
  | `generatorId` | `string` | No | Default generator ID for sign calls |
55
- | `privateKey` | `string` | No | Base64-encoded ML-DSA private key for sign calls |
56
54
  | `baseUrl` | `string` | No | Override API base URL (default: `https://api.certivu.ai`) |
57
55
 
58
56
  ---
59
57
 
60
58
  ### `certivu.sign(input)`
61
59
 
62
- Signs AI-generated content and stores a provenance record.
60
+ Signs AI-generated content server-side — watermarking, hashing, and ML-DSA signing all happen in the API. Returns the signed, watermarked image.
63
61
 
64
62
  ```typescript
65
- const { token, record_id } = await certivu.sign({
66
- content: imageBuffer, // Uint8Array | string
63
+ const { token, record_id, watermarkedContent } = await certivu.sign({
64
+ content: imageBuffer, // Uint8Array | Buffer
67
65
  model: 'stable-diffusion-xl', // model identifier
68
66
  generatorId: 'gen_xyz', // overrides config.generatorId
69
- privateKey: '...', // overrides config.privateKey
70
67
  })
68
+ // watermarkedContent — Uint8Array with ctv_ token in XMP + DCT watermark embedded
71
69
  ```
72
70
 
73
- Returns `{ token: string, record_id: string }`. Embed the `token` in XMP metadata or store it alongside the content.
74
-
75
71
  ---
76
72
 
77
73
  ### `certivu.verify(input)`
78
74
 
79
- Verifies content authenticity. Token is optional — Certivu extracts it automatically from XMP metadata or the frequency-domain watermark.
75
+ Verifies content authenticity. Token is optional — extracted automatically from XMP metadata or the frequency-domain watermark.
80
76
 
81
77
  ```typescript
82
78
  const result = await certivu.verify({
83
- content: imageBuffer, // Uint8Array | string
84
- token: 'ctv_...', // optional — skip to let Certivu extract it
79
+ content: imageBuffer, // Uint8Array | Buffer
80
+ token: 'ctv_...', // optional
85
81
  })
86
82
  ```
87
83
 
@@ -103,20 +99,18 @@ const result = await certivu.verify({
103
99
  model: string,
104
100
  signed_at: string,
105
101
  } | null,
106
- reason?: string, // present when authentic: false
102
+ reason?: string,
107
103
  }
108
104
  ```
109
105
 
110
- **Confidence levels:**
111
-
112
106
  | Confidence | Meaning |
113
107
  |---|---|
114
108
  | `high` | Watermark + record + signature all valid |
115
- | `medium` | Record + signature valid, no watermark (e.g. re-uploaded without it) |
116
- | `low` | Partial signals — something is off |
117
- | `none` | No provenance data found — no claim either way |
109
+ | `medium` | Record + signature valid, no watermark |
110
+ | `low` | Partial signals |
111
+ | `none` | No provenance found — no claim either way |
118
112
 
119
- > Absence of provenance does **not** imply human origin. Certivu verifies declared provenance; it does not detect all AI content.
113
+ > Absence of provenance does **not** imply human origin.
120
114
 
121
115
  ---
122
116
 
@@ -127,51 +121,102 @@ Verify up to 50 items in a single request.
127
121
  ```typescript
128
122
  const { results } = await certivu.verifyBatch([
129
123
  { content: image1, token: token1 },
130
- { content: image2 }, // token optional per item
124
+ { content: image2 },
131
125
  ])
132
-
133
- for (const result of results) {
134
- console.log(result.authentic, result.confidence)
135
- }
136
126
  ```
137
127
 
138
128
  ---
139
129
 
140
130
  ### `certivu.getAuditLog(options?)`
141
131
 
142
- Fetch a paginated audit log of sign, verify, and key events for your org.
132
+ ```typescript
133
+ const { events, total } = await certivu.getAuditLog({ page: 1, limit: 50 })
134
+ ```
135
+
136
+ ---
137
+
138
+ ### `certivu.getTokenStatus(token)`
139
+
140
+ Lightweight CDN-cacheable status lookup — no image upload needed.
143
141
 
144
142
  ```typescript
145
- const { events, total, page, limit } = await certivu.getAuditLog({
146
- page: 1,
147
- limit: 50,
143
+ const status = await certivu.getTokenStatus('ctv_7f3kx9mq2...')
144
+ // { generator_status: 'active' | 'revoked', model, signed_at, org_id }
145
+ ```
146
+
147
+ ---
148
+
149
+ ### `certivu.getAnalyticsOverview(days?)`
150
+
151
+ Verification analytics summary. Plan-gated: Free = 7-day, Starter = 30-day, Growth+ = 90-day.
152
+
153
+ ```typescript
154
+ const overview = await certivu.getAnalyticsOverview(30)
155
+ // { total_verifications, tamper_count, authentic_count, daily_trend, top_records, period_days }
156
+ ```
157
+
158
+ ---
159
+
160
+ ### `certivu.getRecordAnalytics(recordId)`
161
+
162
+ Per-record verification drill-down. Growth+ required.
163
+
164
+ ```typescript
165
+ const record = await certivu.getRecordAnalytics('rec-uuid')
166
+ // { confidence_breakdown: { high, medium, low, none }, recent_events, ... }
167
+ ```
168
+
169
+ ---
170
+
171
+ ### `certivu.listWebhooks()`
172
+
173
+ ```typescript
174
+ const { endpoints, webhooks_enabled } = await certivu.listWebhooks()
175
+ ```
176
+
177
+ ---
178
+
179
+ ### `certivu.createWebhook(input)`
180
+
181
+ Register a new HTTPS endpoint. Growth+ required. The `secret` in the response is shown **once**.
182
+
183
+ ```typescript
184
+ const endpoint = await certivu.createWebhook({
185
+ url: 'https://your-app.example.com/certivu',
186
+ events: ['record.created', 'verify.tamper_detected', 'quota.warning'],
148
187
  })
149
188
  ```
150
189
 
151
190
  ---
152
191
 
153
- ## Error handling
192
+ ### `certivu.deleteWebhook(webhookId)`
154
193
 
155
- All methods throw an `Error` with a descriptive message on API or network failure.
194
+ ```typescript
195
+ await certivu.deleteWebhook('webhook-uuid')
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Error handling
156
201
 
157
202
  ```typescript
158
203
  try {
159
204
  await certivu.sign({ content, model: 'sdxl' })
160
205
  } catch (e) {
161
206
  if (e instanceof Error) {
162
- console.error(e.message) // e.g. "signature_limit_reached"
207
+ console.error(e.message)
163
208
  }
164
209
  }
165
210
  ```
166
211
 
167
- Common error codes:
168
-
169
- | Code | Meaning |
212
+ | Status | Meaning |
170
213
  |---|---|
171
- | `signature_limit_reached` | Free plan 500/mo limit hit — upgrade at certivu.ai/pricing |
172
- | `generator_not_found` | `generatorId` doesn't exist or belongs to another org |
173
- | `generator_revoked` | Generator has been revoked — all its signatures are invalid |
174
- | `invalid_api_key` | API key is missing, malformed, or revoked |
214
+ | `400` | Validation error |
215
+ | `401` | Bad API key |
216
+ | `402` | Quota exhausted (free tier) |
217
+ | `403` | Generator doesn't belong to your org |
218
+ | `404` | Generator not found or revoked |
219
+ | `413` | Upload exceeds 20 MB limit |
175
220
 
176
221
  ---
177
222
 
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { VerificationResult } from "@certivu/types";
2
- import type { AuditOptions, AuditPage, BatchItem, BatchVerifyResponse, ClientConfig, SignInput, SignResponse, TokenStatus, VerifyInput } from "./types/options";
2
+ import type { AnalyticsOverview, AuditOptions, AuditPage, BatchItem, BatchVerifyResponse, ClientConfig, CreateWebhookInput, RecordAnalytics, SignInput, SignResponse, TokenStatus, VerifyInput, WebhookEndpoint, WebhookListResponse } from "./types/options";
3
3
  export declare class CertivuClient {
4
4
  private readonly apiKey;
5
5
  private readonly baseUrl;
@@ -10,5 +10,12 @@ export declare class CertivuClient {
10
10
  verifyBatch(items: BatchItem[]): Promise<BatchVerifyResponse>;
11
11
  getAuditLog(options?: AuditOptions): Promise<AuditPage>;
12
12
  getTokenStatus(token: string): Promise<TokenStatus>;
13
+ getAnalyticsOverview(days?: number): Promise<AnalyticsOverview>;
14
+ getRecordAnalytics(recordId: string): Promise<RecordAnalytics>;
15
+ listWebhooks(): Promise<WebhookListResponse>;
16
+ createWebhook(input: CreateWebhookInput): Promise<WebhookEndpoint & {
17
+ secret: string;
18
+ }>;
19
+ deleteWebhook(webhookId: string): Promise<void>;
13
20
  }
14
21
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAErC,MAAM,EAAE,YAAY;IAM1B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAM7C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvD,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI7D,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAIvD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAQ1D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAErC,MAAM,EAAE,YAAY;IAM1B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAM7C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvD,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI7D,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAIvD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IASnD,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAW/D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAW5C,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAavF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUtD"}
package/dist/index.js CHANGED
@@ -21,9 +21,11 @@ function toUint8Array(content) {
21
21
  async function signContent(baseUrl, apiKey, input) {
22
22
  const bytes = toUint8Array(input.content);
23
23
  const form = new FormData;
24
- form.append("image", new Blob([bytes]), "image");
24
+ form.append("image", new Blob([bytes]), "content");
25
25
  form.append("model", input.model);
26
26
  form.append("generator_id", input.generatorId);
27
+ if (input.format)
28
+ form.append("format", input.format);
27
29
  const res = await fetch(`${baseUrl}/v1/sign`, {
28
30
  method: "POST",
29
31
  headers: { Authorization: `Bearer ${apiKey}` },
@@ -35,8 +37,15 @@ async function signContent(baseUrl, apiKey, input) {
35
37
  }
36
38
  const token = res.headers.get("X-Certivu-Token") ?? "";
37
39
  const record_id = res.headers.get("X-Certivu-Record-Id") ?? "";
38
- const watermarkedContent = new Uint8Array(await res.arrayBuffer());
39
- return { token, record_id, watermarkedContent };
40
+ const formatHeader = res.headers.get("X-Certivu-Format");
41
+ const signedContent = new Uint8Array(await res.arrayBuffer());
42
+ return {
43
+ token,
44
+ record_id,
45
+ signedContent,
46
+ watermarkedContent: signedContent,
47
+ ...formatHeader ? { format: formatHeader } : {}
48
+ };
40
49
  }
41
50
 
42
51
  // src/methods/verify.ts
@@ -124,6 +133,59 @@ class CertivuClient {
124
133
  }
125
134
  return res.json();
126
135
  }
136
+ async getAnalyticsOverview(days) {
137
+ const url = new URL(`${this.baseUrl}/v1/analytics/overview`);
138
+ if (days !== undefined)
139
+ url.searchParams.set("days", String(days));
140
+ const res = await fetch(url.toString(), { headers: { Authorization: `Bearer ${this.apiKey}` } });
141
+ if (!res.ok) {
142
+ const err = await res.json().catch(() => ({}));
143
+ throw new Error(err.error ?? `HTTP ${res.status}`);
144
+ }
145
+ return res.json();
146
+ }
147
+ async getRecordAnalytics(recordId) {
148
+ const res = await fetch(`${this.baseUrl}/v1/analytics/records/${encodeURIComponent(recordId)}`, {
149
+ headers: { Authorization: `Bearer ${this.apiKey}` }
150
+ });
151
+ if (!res.ok) {
152
+ const err = await res.json().catch(() => ({}));
153
+ throw new Error(err.error ?? `HTTP ${res.status}`);
154
+ }
155
+ return res.json();
156
+ }
157
+ async listWebhooks() {
158
+ const res = await fetch(`${this.baseUrl}/v1/webhooks`, {
159
+ headers: { Authorization: `Bearer ${this.apiKey}` }
160
+ });
161
+ if (!res.ok) {
162
+ const err = await res.json().catch(() => ({}));
163
+ throw new Error(err.error ?? `HTTP ${res.status}`);
164
+ }
165
+ return res.json();
166
+ }
167
+ async createWebhook(input) {
168
+ const res = await fetch(`${this.baseUrl}/v1/webhooks`, {
169
+ method: "POST",
170
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${this.apiKey}` },
171
+ body: JSON.stringify(input)
172
+ });
173
+ if (!res.ok) {
174
+ const err = await res.json().catch(() => ({}));
175
+ throw new Error(err.error ?? `HTTP ${res.status}`);
176
+ }
177
+ return res.json();
178
+ }
179
+ async deleteWebhook(webhookId) {
180
+ const res = await fetch(`${this.baseUrl}/v1/webhooks/${encodeURIComponent(webhookId)}`, {
181
+ method: "DELETE",
182
+ headers: { Authorization: `Bearer ${this.apiKey}` }
183
+ });
184
+ if (!res.ok) {
185
+ const err = await res.json().catch(() => ({}));
186
+ throw new Error(err.error ?? `HTTP ${res.status}`);
187
+ }
188
+ }
127
189
  }
128
190
  export {
129
191
  CertivuClient
@@ -1 +1 @@
1
- {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/methods/sign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOhE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,CAwBvB"}
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/methods/sign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOhE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
@@ -8,6 +8,8 @@ export interface SignInput {
8
8
  content: Uint8Array | string;
9
9
  model: string;
10
10
  generatorId?: string;
11
+ /** Content format. Auto-detected from magic bytes if omitted. */
12
+ format?: "image" | "audio" | "text";
11
13
  }
12
14
  export interface VerifyInput {
13
15
  content: Uint8Array | string;
@@ -25,8 +27,12 @@ export interface SignResponse {
25
27
  token: string;
26
28
  record_id: string;
27
29
  deduplicated?: boolean;
28
- /** Watermarked image bytes with ctv_ token in XMP metadata — store and deliver this instead of the original */
30
+ /** Signed content bytes with ctv_ token embedded — store and deliver this instead of the original */
31
+ signedContent: Uint8Array;
32
+ /** @deprecated Use signedContent */
29
33
  watermarkedContent: Uint8Array;
34
+ /** Detected or declared content format */
35
+ format?: "image" | "audio" | "text";
30
36
  }
31
37
  export interface BatchVerifyResponse {
32
38
  results: VerificationResult[];
@@ -44,4 +50,59 @@ export interface TokenStatus {
44
50
  signed_at: string;
45
51
  generator_status: "active" | "revoked";
46
52
  }
53
+ export interface AnalyticsOverview {
54
+ total_verifications: number;
55
+ tamper_count: number;
56
+ authentic_count: number;
57
+ top_records: Array<{
58
+ record_id: string;
59
+ model: string;
60
+ count: number;
61
+ tamper_count: number;
62
+ }>;
63
+ daily_trend: Array<{
64
+ date: string;
65
+ count: number;
66
+ tamper_count: number;
67
+ }>;
68
+ period_days: number;
69
+ plan_limit: number | null;
70
+ }
71
+ export interface RecordAnalytics {
72
+ record_id: string;
73
+ model: string;
74
+ total_verifications: number;
75
+ tamper_count: number;
76
+ authentic_count: number;
77
+ confidence_breakdown: {
78
+ high: number;
79
+ medium: number;
80
+ low: number;
81
+ none: number;
82
+ };
83
+ recent_events: Array<{
84
+ timestamp: string;
85
+ authentic: boolean;
86
+ tampered: boolean;
87
+ confidence: string;
88
+ token_source: string | null;
89
+ }>;
90
+ }
91
+ export interface WebhookEndpoint {
92
+ webhook_id: string;
93
+ url: string;
94
+ events: string[];
95
+ status: "active" | "disabled";
96
+ failure_count: number;
97
+ created_at: string;
98
+ }
99
+ export interface CreateWebhookInput {
100
+ url: string;
101
+ events: string[];
102
+ }
103
+ export interface WebhookListResponse {
104
+ endpoints: WebhookEndpoint[];
105
+ plan: string;
106
+ webhooks_enabled: boolean;
107
+ }
47
108
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+GAA+G;IAC/G,kBAAkB,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC;CACxC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export type { AuditPage, BatchVerifyResponse, SignResponse } from "./options";
1
+ export type { AnalyticsOverview, AuditPage, BatchVerifyResponse, CreateWebhookInput, RecordAnalytics, SignResponse, WebhookEndpoint, WebhookListResponse, } from "./options";
2
2
  export type { AuditEvent, VerificationResult } from "@certivu/types";
3
3
  //# sourceMappingURL=responses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/types/responses.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9E,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/types/responses.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@certivu/sdk",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "Official SDK for Certivu — quantum-resistant AI content provenance",
5
5
  "keywords": ["certivu", "ai", "provenance", "post-quantum", "ml-dsa", "watermark"],
6
6
  "homepage": "https://certivu.ai",
@@ -32,8 +32,8 @@
32
32
  },
33
33
  "devDependencies": {
34
34
  "@biomejs/biome": "^1.9.4",
35
- "@certivu/crypto": "0.0.1",
36
- "@certivu/types": "0.0.1",
35
+ "@certivu/crypto": "workspace:*",
36
+ "@certivu/types": "workspace:*",
37
37
  "@types/bun": "latest",
38
38
  "typescript": "^5.7.3"
39
39
  }