zklicensing 0.1.0-beta.2 → 0.1.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +335 -97
- package/build/appsLookup.d.ts +14 -0
- package/build/appsLookup.d.ts.map +1 -0
- package/build/appsLookup.js +12 -0
- package/build/appsLookup.js.map +1 -0
- package/build/archiveBootstrap.d.ts +15 -1
- package/build/archiveBootstrap.d.ts.map +1 -0
- package/build/archiveBootstrap.js +62 -9
- package/build/archiveBootstrap.js.map +1 -0
- package/build/bindClient.d.ts +51 -0
- package/build/bindClient.d.ts.map +1 -0
- package/build/bindClient.js +115 -0
- package/build/bindClient.js.map +1 -0
- package/build/buyClient.d.ts +10 -3
- package/build/buyClient.d.ts.map +1 -0
- package/build/buyClient.js +33 -15
- package/build/buyClient.js.map +1 -0
- package/build/contractInterface.d.ts +11 -5
- package/build/contractInterface.d.ts.map +1 -0
- package/build/contractInterface.js +82 -17
- package/build/contractInterface.js.map +1 -0
- package/build/countryStats.d.ts +6 -1
- package/build/countryStats.d.ts.map +1 -0
- package/build/countryStats.js +33 -9
- package/build/countryStats.js.map +1 -0
- package/build/deployClient.d.ts.map +1 -0
- package/build/deployClient.js +1 -1
- package/build/deployClient.js.map +1 -0
- package/build/deviceIdentity.d.ts +68 -0
- package/build/deviceIdentity.d.ts.map +1 -0
- package/build/deviceIdentity.js +209 -0
- package/build/deviceIdentity.js.map +1 -0
- package/build/freezeClient.d.ts.map +1 -0
- package/build/freezeClient.js +1 -1
- package/build/freezeClient.js.map +1 -0
- package/build/generationClient.d.ts +1 -0
- package/build/generationClient.d.ts.map +1 -0
- package/build/generationClient.js +2 -2
- package/build/generationClient.js.map +1 -0
- package/build/index.d.ts +27 -37
- package/build/index.d.ts.map +1 -0
- package/build/index.js +85 -116
- package/build/index.js.map +1 -0
- package/build/licenseLeaf.d.ts +76 -0
- package/build/licenseLeaf.d.ts.map +1 -0
- package/build/licenseLeaf.js +189 -0
- package/build/licenseLeaf.js.map +1 -0
- package/build/licenseRecord.d.ts +20 -1
- package/build/licenseRecord.d.ts.map +1 -0
- package/build/licenseRecord.js +1 -1
- package/build/licenseRecord.js.map +1 -0
- package/build/licenseStore.d.ts +17 -2
- package/build/licenseStore.d.ts.map +1 -0
- package/build/licenseStore.js +167 -7
- package/build/licenseStore.js.map +1 -0
- package/build/manifestVerify.d.ts.map +1 -0
- package/build/manifestVerify.js +8 -3
- package/build/manifestVerify.js.map +1 -0
- package/build/migrateClient.d.ts +6 -21
- package/build/migrateClient.d.ts.map +1 -0
- package/build/migrateClient.js +30 -17
- package/build/migrateClient.js.map +1 -0
- package/build/onChainRoot.d.ts +67 -0
- package/build/onChainRoot.d.ts.map +1 -0
- package/build/onChainRoot.js +87 -0
- package/build/onChainRoot.js.map +1 -0
- package/build/ownershipLicenseHash.d.ts +25 -0
- package/build/ownershipLicenseHash.d.ts.map +1 -0
- package/build/ownershipLicenseHash.js +29 -0
- package/build/ownershipLicenseHash.js.map +1 -0
- package/build/ownershipSignature.d.ts +122 -0
- package/build/ownershipSignature.d.ts.map +1 -0
- package/build/ownershipSignature.js +244 -0
- package/build/ownershipSignature.js.map +1 -0
- package/build/proveErrors.d.ts +35 -0
- package/build/proveErrors.d.ts.map +1 -0
- package/build/proveErrors.js +49 -0
- package/build/proveErrors.js.map +1 -0
- package/build/refundClient.d.ts +2 -11
- package/build/refundClient.d.ts.map +1 -0
- package/build/refundClient.js +35 -17
- package/build/refundClient.js.map +1 -0
- package/build/renewClient.d.ts +4 -1
- package/build/renewClient.d.ts.map +1 -0
- package/build/renewClient.js +11 -4
- package/build/renewClient.js.map +1 -0
- package/build/seatName.d.ts +8 -0
- package/build/seatName.d.ts.map +1 -0
- package/build/seatName.js +136 -0
- package/build/seatName.js.map +1 -0
- package/build/statsClient.d.ts +47 -4
- package/build/statsClient.d.ts.map +1 -0
- package/build/statsClient.js +44 -5
- package/build/statsClient.js.map +1 -0
- package/build/trustAnchorVerify.d.ts +48 -0
- package/build/trustAnchorVerify.d.ts.map +1 -0
- package/build/trustAnchorVerify.js +431 -0
- package/build/trustAnchorVerify.js.map +1 -0
- package/build/trustAnchorVerifyCli.d.ts +35 -0
- package/build/trustAnchorVerifyCli.d.ts.map +1 -0
- package/build/trustAnchorVerifyCli.js +177 -0
- package/build/trustAnchorVerifyCli.js.map +1 -0
- package/build/txBroadcastClient.d.ts +26 -0
- package/build/txBroadcastClient.d.ts.map +1 -0
- package/build/txBroadcastClient.js +20 -0
- package/build/txBroadcastClient.js.map +1 -0
- package/build/unbindClient.d.ts +56 -0
- package/build/unbindClient.d.ts.map +1 -0
- package/build/unbindClient.js +113 -0
- package/build/unbindClient.js.map +1 -0
- package/build/vendorAccountClient.d.ts +56 -0
- package/build/vendorAccountClient.d.ts.map +1 -0
- package/build/vendorAccountClient.js +47 -0
- package/build/vendorAccountClient.js.map +1 -0
- package/build/verifyCore.d.ts +1 -1
- package/build/verifyCore.d.ts.map +1 -0
- package/build/verifyCore.js +11 -4
- package/build/verifyCore.js.map +1 -0
- package/build/verifyOffline.d.ts +85 -0
- package/build/verifyOffline.d.ts.map +1 -0
- package/build/verifyOffline.js +139 -0
- package/build/verifyOffline.js.map +1 -0
- package/build/verifyService.d.ts.map +1 -0
- package/build/verifyService.js +582 -455
- package/build/verifyService.js.map +1 -0
- package/build/verifyWithAncestors.d.ts +18 -0
- package/build/verifyWithAncestors.d.ts.map +1 -0
- package/build/verifyWithAncestors.js +119 -0
- package/build/verifyWithAncestors.js.map +1 -0
- package/build/zipToState.d.ts +2 -0
- package/build/zipToState.d.ts.map +1 -0
- package/build/zipToState.js +94 -0
- package/build/zipToState.js.map +1 -0
- package/package.json +57 -13
- package/src/appsLookup.ts +48 -0
- package/src/archiveBootstrap.ts +342 -0
- package/src/bindClient.ts +175 -0
- package/src/buyClient.ts +304 -0
- package/src/contractInterface.d.ts +61 -0
- package/src/contractInterface.ts +313 -0
- package/src/countryStats.ts +171 -0
- package/src/deployClient.ts +388 -0
- package/src/deviceIdentity.ts +249 -0
- package/src/freezeClient.ts +117 -0
- package/src/generationClient.ts +165 -0
- package/src/index.ts +329 -0
- package/src/licenseLeaf.ts +221 -0
- package/src/licenseRecord.ts +108 -0
- package/src/licenseStore.ts +538 -0
- package/src/manifestVerify.ts +111 -0
- package/src/migrateClient.ts +84 -0
- package/src/onChainRoot.ts +107 -0
- package/src/ownershipLicenseHash.ts +31 -0
- package/src/ownershipSignature.ts +354 -0
- package/src/proveErrors.ts +70 -0
- package/src/refundClient.ts +158 -0
- package/src/renewClient.ts +214 -0
- package/src/seatName.ts +165 -0
- package/src/statsClient.ts +235 -0
- package/src/trustAnchorVerify.ts +548 -0
- package/src/trustAnchorVerifyCli.ts +179 -0
- package/src/txBroadcastClient.ts +48 -0
- package/src/unbindClient.ts +149 -0
- package/src/vendorAccountClient.ts +110 -0
- package/src/verifyCore.ts +92 -0
- package/src/verifyOffline.ts +212 -0
- package/src/verifyService.ts +969 -0
- package/src/verifyWithAncestors.ts +153 -0
- package/src/zipToState.ts +94 -0
- package/build/licenseProof.d.ts +0 -26
- package/build/licenseProof.js +0 -41
- package/build/ownership.d.ts +0 -34
- package/build/ownership.js +0 -147
package/build/refundClient.d.ts
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* refundClient.ts
|
|
3
|
-
*
|
|
4
|
-
* Browser-safe client for the refund flow. Mirrors `buyClient.ts` in shape:
|
|
5
|
-
* the caller drives the wallet step between `proveRefund` and
|
|
6
|
-
* `confirmRefund` so the SDK stays wallet-agnostic.
|
|
7
|
-
*
|
|
8
|
-
* The 14-day refund window is enforced on the keeper side (returns HTTP 409
|
|
9
|
-
* when closed) and cross-checked in the circuit; the SDK doesn't second-guess
|
|
10
|
-
* it locally so a single source of truth stays authoritative.
|
|
11
|
-
*/
|
|
12
1
|
export type ProveRefundRequest = {
|
|
13
2
|
keeperUrl: string;
|
|
14
3
|
licenseHash: string;
|
|
15
4
|
buyerAddress: string;
|
|
16
5
|
zkAppAddress: string;
|
|
6
|
+
network: 'devnet' | 'mainnet';
|
|
17
7
|
fetcher?: typeof fetch;
|
|
18
8
|
signal?: AbortSignal;
|
|
19
9
|
};
|
|
@@ -40,6 +30,7 @@ export type RefundStatus = {
|
|
|
40
30
|
};
|
|
41
31
|
export type PollRefundStatusOptions = {
|
|
42
32
|
keeperUrl: string;
|
|
33
|
+
network: 'devnet' | 'mainnet';
|
|
43
34
|
zkAppAddress: string;
|
|
44
35
|
licenseHash: string;
|
|
45
36
|
fetcher?: typeof fetch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refundClient.d.ts","sourceRoot":"","sources":["../src/refundClient.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAK,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAO,QAAQ,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAO,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAK,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,MAAM,EAAQ,MAAM,CAAC;IACrB,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAO,WAAW,CAAC;CAC3B,CAAC;AAWF,wBAAsB,WAAW,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoBvF;AAMD,wBAAsB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAiBpF;AAED,MAAM,MAAM,YAAY,GAAG;IAIzB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,MAAM,CAAC,EAAK,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAK,MAAM,CAAC;IACrB,OAAO,EAAO,QAAQ,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,SAAS,CAAC,EAAI,MAAM,CAAC;IACrB,MAAM,CAAC,EAAO,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAO,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC9C,CAAC;AAKF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+B3F"}
|
package/build/refundClient.js
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
|
+
/**
|
|
4
|
+
* refundClient.ts
|
|
5
|
+
*
|
|
6
|
+
* Browser-safe client for the refund flow. Mirrors `buyClient.ts` in shape:
|
|
7
|
+
* the caller drives the wallet step between `proveRefund` and
|
|
8
|
+
* `confirmRefund` so the SDK stays wallet-agnostic.
|
|
9
|
+
*
|
|
10
|
+
* The 14-day refund window is enforced on the keeper side (returns HTTP 409
|
|
11
|
+
* when closed) and cross-checked in the circuit; the SDK doesn't second-guess
|
|
12
|
+
* it locally so a single source of truth stays authoritative.
|
|
13
|
+
*
|
|
14
|
+
* `/prove/refund` shares the per-app in-flight slot with buy/renew/migrate:
|
|
15
|
+
* a concurrent request for the same app receives 409 { error: "proving queue
|
|
16
|
+
* busy", retryAfterMs, queueDepth }, which this client classifies into a
|
|
17
|
+
* `ProveQueueBusyError` so callers can wait+retry without opening a wallet.
|
|
18
|
+
*/
|
|
19
|
+
import { readErrorBody, tryQueueBusyFromBody } from './proveErrors.js';
|
|
3
20
|
function baseUrl(url) {
|
|
4
21
|
return url.replace(/\/+$/, '');
|
|
5
22
|
}
|
|
6
|
-
async function readJsonError(resp) {
|
|
7
|
-
try {
|
|
8
|
-
const body = await resp.json();
|
|
9
|
-
if (typeof body.error === 'string')
|
|
10
|
-
return body.error;
|
|
11
|
-
}
|
|
12
|
-
catch { /* body wasn't JSON */ }
|
|
13
|
-
return `HTTP ${resp.status}`;
|
|
14
|
-
}
|
|
15
23
|
// POST /prove/refund — keeper compiles + proves the refund tx.
|
|
16
|
-
// The keeper 409s when the 14-day window has closed
|
|
17
|
-
//
|
|
24
|
+
// The keeper 409s when the 14-day window has closed (surfaces through the
|
|
25
|
+
// thrown `Error` message) and also when the shared per-app in-flight slot
|
|
26
|
+
// is held by a concurrent buy/renew/migrate/refund (surfaces as a typed
|
|
27
|
+
// `ProveQueueBusyError` — caller waits `retryAfterMs` and retries).
|
|
18
28
|
export async function proveRefund(req) {
|
|
19
29
|
const fetcher = req.fetcher ?? fetch;
|
|
20
30
|
const resp = await fetcher(`${baseUrl(req.keeperUrl)}/prove/refund`, {
|
|
@@ -25,10 +35,16 @@ export async function proveRefund(req) {
|
|
|
25
35
|
licenseHash: req.licenseHash,
|
|
26
36
|
buyerAddress: req.buyerAddress,
|
|
27
37
|
zkAppAddress: req.zkAppAddress,
|
|
38
|
+
network: req.network,
|
|
28
39
|
}),
|
|
29
40
|
});
|
|
30
|
-
if (!resp.ok)
|
|
31
|
-
|
|
41
|
+
if (!resp.ok) {
|
|
42
|
+
const parsed = await readErrorBody(resp);
|
|
43
|
+
const queueBusy = tryQueueBusyFromBody(parsed);
|
|
44
|
+
if (queueBusy)
|
|
45
|
+
throw queueBusy;
|
|
46
|
+
throw new Error(parsed.message);
|
|
47
|
+
}
|
|
32
48
|
return await resp.json();
|
|
33
49
|
}
|
|
34
50
|
// POST /confirm/refund — promotes the in-memory refund intent to a
|
|
@@ -47,8 +63,10 @@ export async function confirmRefund(req) {
|
|
|
47
63
|
txHash: req.txHash,
|
|
48
64
|
}),
|
|
49
65
|
});
|
|
50
|
-
if (!resp.ok)
|
|
51
|
-
|
|
66
|
+
if (!resp.ok) {
|
|
67
|
+
const parsed = await readErrorBody(resp);
|
|
68
|
+
throw new Error(parsed.message);
|
|
69
|
+
}
|
|
52
70
|
return { ok: true };
|
|
53
71
|
}
|
|
54
72
|
// Polls GET /license/:zkAppAddress/:licenseHash until the refund has landed
|
|
@@ -60,7 +78,7 @@ export async function pollRefundStatus(opts) {
|
|
|
60
78
|
const timeout = opts.timeoutMs ?? 20 * 60 * 1000;
|
|
61
79
|
const startedAt = Date.now();
|
|
62
80
|
const deadline = startedAt + timeout;
|
|
63
|
-
const url = `${baseUrl(opts.keeperUrl)}/license/${encodeURIComponent(opts.zkAppAddress)}/${encodeURIComponent(opts.licenseHash)}`;
|
|
81
|
+
const url = `${baseUrl(opts.keeperUrl)}/license/${encodeURIComponent(opts.zkAppAddress)}/${encodeURIComponent(opts.licenseHash)}?network=${opts.network}`;
|
|
64
82
|
while (true) {
|
|
65
83
|
if (opts.signal?.aborted)
|
|
66
84
|
throw new Error('pollRefundStatus aborted');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refundClient.js","sourceRoot":"","sources":["../src/refundClient.ts"],"names":[],"mappings":"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"}
|
package/build/renewClient.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export type ProveRenewRequest = {
|
|
|
3
3
|
licenseHash: string;
|
|
4
4
|
buyerAddress: string;
|
|
5
5
|
zkAppAddress: string;
|
|
6
|
-
|
|
6
|
+
network: 'devnet' | 'mainnet';
|
|
7
|
+
duration: 0 | 1 | 2 | 3;
|
|
7
8
|
waiverAccepted: boolean;
|
|
8
9
|
freezeAfterSlot?: number | null;
|
|
9
10
|
fetcher?: typeof fetch;
|
|
@@ -15,6 +16,7 @@ export type ProveRenewResponse = {
|
|
|
15
16
|
licenseHash: string;
|
|
16
17
|
renewAmount: string;
|
|
17
18
|
generation: number;
|
|
19
|
+
appKey: string;
|
|
18
20
|
};
|
|
19
21
|
export type ConfirmRenewRequest = {
|
|
20
22
|
keeperUrl: string;
|
|
@@ -36,6 +38,7 @@ export type RenewStatus = {
|
|
|
36
38
|
};
|
|
37
39
|
export type PollRenewStatusOptions = {
|
|
38
40
|
keeperUrl: string;
|
|
41
|
+
network: 'devnet' | 'mainnet';
|
|
39
42
|
zkAppAddress: string;
|
|
40
43
|
licenseHash: string;
|
|
41
44
|
newExpirySlot: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renewClient.d.ts","sourceRoot":"","sources":["../src/renewClient.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAQ,MAAM,CAAC;IACxB,WAAW,EAAM,MAAM,CAAC;IACxB,YAAY,EAAK,MAAM,CAAC;IACxB,YAAY,EAAK,MAAM,CAAC;IAGxB,OAAO,EAAU,QAAQ,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAG/B,cAAc,EAAG,OAAO,CAAC;IAGzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAS,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,EAAU,WAAW,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAG,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAI,MAAM,CAAC;IACtB,WAAW,EAAI,MAAM,CAAC;IAItB,UAAU,EAAK,MAAM,CAAC;IAGtB,MAAM,EAAS,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAK,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,MAAM,EAAQ,MAAM,CAAC;IACrB,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAO,WAAW,CAAC;CAC3B,CAAC;AAmBF,wBAAsB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiCpF;AAID,wBAAsB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAclF;AAED,MAAM,MAAM,WAAW,GAAG;IAKxB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAG,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAM,MAAM,CAAC;IACtB,OAAO,EAAQ,QAAQ,GAAG,SAAS,CAAC;IACpC,YAAY,EAAG,MAAM,CAAC;IACtB,WAAW,EAAI,MAAM,CAAC;IAMtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAO,OAAO,KAAK,CAAC;IAG5B,UAAU,CAAC,EAAI,MAAM,CAAC;IACtB,SAAS,CAAC,EAAK,MAAM,CAAC;IACtB,MAAM,CAAC,EAAQ,WAAW,CAAC;IAC3B,MAAM,CAAC,EAAQ,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C,CAAC;AAMF,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAyCxF"}
|
package/build/renewClient.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
3
|
/**
|
|
4
4
|
* renewClient.ts
|
|
5
5
|
*
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* so surfacing the specific message client-side avoids a wasted round-trip.
|
|
20
20
|
*/
|
|
21
21
|
import { resolveFreezeState } from './freezeClient.js';
|
|
22
|
+
import { readErrorBody, tryQueueBusyFromBody } from './proveErrors.js';
|
|
22
23
|
function baseUrl(url) {
|
|
23
24
|
return url.replace(/\/+$/, '');
|
|
24
25
|
}
|
|
@@ -58,11 +59,17 @@ export async function proveRenew(req) {
|
|
|
58
59
|
licenseHash: req.licenseHash,
|
|
59
60
|
buyerAddress: req.buyerAddress,
|
|
60
61
|
zkAppAddress: req.zkAppAddress,
|
|
62
|
+
network: req.network,
|
|
61
63
|
duration: req.duration,
|
|
62
64
|
}),
|
|
63
65
|
});
|
|
64
|
-
if (!resp.ok)
|
|
65
|
-
|
|
66
|
+
if (!resp.ok) {
|
|
67
|
+
const parsed = await readErrorBody(resp);
|
|
68
|
+
const queueBusy = tryQueueBusyFromBody(parsed);
|
|
69
|
+
if (queueBusy)
|
|
70
|
+
throw queueBusy;
|
|
71
|
+
throw new Error(parsed.message);
|
|
72
|
+
}
|
|
66
73
|
return await resp.json();
|
|
67
74
|
}
|
|
68
75
|
// POST /confirm/renew — promotes the in-memory renew intent to a pending
|
|
@@ -93,7 +100,7 @@ export async function pollRenewStatus(opts) {
|
|
|
93
100
|
const timeout = opts.timeoutMs ?? 20 * 60 * 1000;
|
|
94
101
|
const startedAt = Date.now();
|
|
95
102
|
const deadline = startedAt + timeout;
|
|
96
|
-
const url = `${baseUrl(opts.keeperUrl)}/license/${encodeURIComponent(opts.zkAppAddress)}/${encodeURIComponent(opts.licenseHash)}`;
|
|
103
|
+
const url = `${baseUrl(opts.keeperUrl)}/license/${encodeURIComponent(opts.zkAppAddress)}/${encodeURIComponent(opts.licenseHash)}?network=${opts.network}`;
|
|
97
104
|
while (true) {
|
|
98
105
|
if (opts.signal?.aborted)
|
|
99
106
|
throw new Error('pollRenewStatus aborted');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renewClient.js","sourceRoot":"","sources":["../src/renewClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const SEAT_NAME_COMBINATIONS: number;
|
|
2
|
+
export type SeatNameInput = {
|
|
3
|
+
licenseHash: string;
|
|
4
|
+
slotIndex: number;
|
|
5
|
+
boundAtSlot: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function seatNameFor(input: SeatNameInput): string;
|
|
8
|
+
//# sourceMappingURL=seatName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatName.d.ts","sourceRoot":"","sources":["../src/seatName.ts"],"names":[],"mappings":"AAwHA,eAAO,MAAM,sBAAsB,EAAE,MAA2C,CAAC;AAiCjF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAI,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAKxD"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
|
+
/**
|
|
4
|
+
* seatName.ts
|
|
5
|
+
*
|
|
6
|
+
* Human-readable device names for the device-binding slot list
|
|
7
|
+
* ("Silent Otter", "Curious Panda"). Meant for the SDK UI so a buyer
|
|
8
|
+
* looking at their bound-devices panel sees "the laptop I left in the
|
|
9
|
+
* office" instead of an opaque device commitment.
|
|
10
|
+
*
|
|
11
|
+
* The name is purely cosmetic — the on-chain circuit never gates on it,
|
|
12
|
+
* verifyOffline never inspects it, and unbind targets `slotIndex`, not
|
|
13
|
+
* name. It exists solely so the SDK's device-manager UI has something
|
|
14
|
+
* readable to render next to each slot.
|
|
15
|
+
*
|
|
16
|
+
* Names are NOT persisted on-chain and NOT persisted off-chain either —
|
|
17
|
+
* `seatNameFor` derives the label deterministically from three on-chain
|
|
18
|
+
* fields (`licenseHash`, `slotIndex`, `boundAtSlot`), so every viewer of
|
|
19
|
+
* the same license computes the same name for a given occupied slot with
|
|
20
|
+
* no naming sidecar and no stored state.
|
|
21
|
+
*
|
|
22
|
+
* The wordlists are intentionally boring: no scary animals, no negative
|
|
23
|
+
* adjectives, no cultural landmines, no words with awkward secondary
|
|
24
|
+
* meanings. Order and word choice are stable — changing them shifts every
|
|
25
|
+
* slot's name on the next mint, which would be jarring for users looking
|
|
26
|
+
* at their device list.
|
|
27
|
+
*/
|
|
28
|
+
// 250 friendly adjectives. Short, common, unambiguously positive or
|
|
29
|
+
// neutral. Ordering is alphabetical for maintainability — the derivation
|
|
30
|
+
// is index-based so order does not affect behavior.
|
|
31
|
+
const ADJECTIVES = [
|
|
32
|
+
'Agile', 'Alert', 'Amber', 'Ample', 'Ancient', 'Apricot', 'Arctic', 'Ashen',
|
|
33
|
+
'Aspen', 'Autumn', 'Azure', 'Balmy', 'Bashful', 'Beaming', 'Beige', 'Bold',
|
|
34
|
+
'Bouncy', 'Brave', 'Breezy', 'Bright', 'Brisk', 'Bronze', 'Bubbly', 'Busy',
|
|
35
|
+
'Calm', 'Candid', 'Cedar', 'Cheery', 'Chic', 'Chipper', 'Chunky', 'Classic',
|
|
36
|
+
'Clean', 'Clever', 'Cloudy', 'Clumsy', 'Coastal', 'Comet', 'Cool', 'Copper',
|
|
37
|
+
'Coral', 'Cosmic', 'Cosy', 'Crafty', 'Creamy', 'Crimson', 'Crisp', 'Cuddly',
|
|
38
|
+
'Curious', 'Daisy', 'Dandy', 'Dapper', 'Daring', 'Dawn', 'Deft', 'Delta',
|
|
39
|
+
'Devout', 'Dewy', 'Diamond', 'Doughty', 'Dreamy', 'Dusky', 'Dusty', 'Eager',
|
|
40
|
+
'Earnest', 'Earthy', 'Easy', 'Ebony', 'Elder', 'Elm', 'Ember', 'Emerald',
|
|
41
|
+
'Epic', 'Fabled', 'Faint', 'Fair', 'Fancy', 'Fearless', 'Feisty', 'Fern',
|
|
42
|
+
'Fiery', 'Fine', 'Firm', 'Flaxen', 'Fleet', 'Floral', 'Fluffy', 'Foggy',
|
|
43
|
+
'Fond', 'Forest', 'Frank', 'Freckled', 'Friendly', 'Frosty', 'Frugal', 'Furry',
|
|
44
|
+
'Fuzzy', 'Gallant', 'Genial', 'Gentle', 'Gilded', 'Ginger', 'Glad', 'Glassy',
|
|
45
|
+
'Gleaming', 'Glossy', 'Glowing', 'Golden', 'Graceful', 'Grand', 'Grassy',
|
|
46
|
+
'Green', 'Handy', 'Happy', 'Hardy', 'Hazel', 'Hearty', 'Helpful', 'Honest',
|
|
47
|
+
'Humble', 'Icy', 'Indigo', 'Inky', 'Iron', 'Ivory', 'Jade', 'Jaunty', 'Jazzy',
|
|
48
|
+
'Jolly', 'Jovial', 'Joyful', 'Juniper', 'Keen', 'Kind', 'Lanky', 'Lark',
|
|
49
|
+
'Lavender', 'Lazy', 'Leaf', 'Lilac', 'Limber', 'Lively', 'Lofty', 'Loyal',
|
|
50
|
+
'Lucky', 'Lush', 'Marble', 'Matte', 'Meadow', 'Mellow', 'Merry', 'Mighty',
|
|
51
|
+
'Milky', 'Mindful', 'Minty', 'Misty', 'Modest', 'Mossy', 'Nautical', 'Nectar',
|
|
52
|
+
'Nifty', 'Nimble', 'Noble', 'Nutmeg', 'Oaken', 'Ochre', 'Olive', 'Onyx',
|
|
53
|
+
'Opal', 'Orange', 'Orchid', 'Pale', 'Patient', 'Peachy', 'Pearl', 'Pebble',
|
|
54
|
+
'Perky', 'Piney', 'Placid', 'Playful', 'Plucky', 'Plum', 'Plush', 'Polar',
|
|
55
|
+
'Polite', 'Prairie', 'Proud', 'Prudent', 'Punchy', 'Purple', 'Quaint', 'Quick',
|
|
56
|
+
'Quiet', 'Radiant', 'Rainy', 'Rapid', 'Rare', 'Ready', 'Ripe', 'River',
|
|
57
|
+
'Rocky', 'Rosy', 'Royal', 'Ruby', 'Rugged', 'Rustic', 'Saffron', 'Sage',
|
|
58
|
+
'Sandy', 'Sapphire', 'Scarlet', 'Serene', 'Shady', 'Sharp', 'Shy', 'Silent',
|
|
59
|
+
'Silken', 'Silky', 'Silver', 'Sincere', 'Sleek', 'Sleepy', 'Slender', 'Small',
|
|
60
|
+
'Smart', 'Smiling', 'Snowy', 'Solar', 'Solid', 'Sonic', 'Soulful', 'Speedy',
|
|
61
|
+
'Spirited', 'Splendid', 'Sprightly', 'Spry', 'Starry', 'Steady', 'Stellar',
|
|
62
|
+
'Sterling', 'Stormy', 'Stout', 'Sunny', 'Sunset', 'Swift', 'Tangy', 'Teal',
|
|
63
|
+
'Tender', 'Thankful', 'Thoughtful', 'Thrifty', 'Tidy', 'Timber', 'Tiny',
|
|
64
|
+
'Topaz', 'Tranquil', 'Trusty', 'Turquoise', 'Twilight', 'Upright', 'Valiant',
|
|
65
|
+
'Velvet', 'Verdant', 'Violet', 'Vivid', 'Warm', 'Whimsical', 'Willow',
|
|
66
|
+
'Windy', 'Winsome', 'Wise', 'Witty', 'Woodland', 'Woolly', 'Zealous', 'Zesty',
|
|
67
|
+
];
|
|
68
|
+
// 250 friendly animals. Common, recognisable, unambiguously non-threatening
|
|
69
|
+
// (no predators-of-humans, no venomous ones, no polarising taxidermy). Two-
|
|
70
|
+
// word species (mountain goat, sea otter) are collapsed to the base name so
|
|
71
|
+
// the final "Adjective Animal" reads cleanly. Ordering is alphabetical.
|
|
72
|
+
const ANIMALS = [
|
|
73
|
+
'Alpaca', 'Anteater', 'Antelope', 'Ape', 'Armadillo', 'Auk', 'Aurochs',
|
|
74
|
+
'Axolotl', 'Baboon', 'Badger', 'Barnacle', 'Bat', 'Beagle', 'Bear', 'Beaver',
|
|
75
|
+
'Bee', 'Beetle', 'Bison', 'Blackbird', 'Bluebird', 'Boar', 'Bobcat', 'Bonobo',
|
|
76
|
+
'Booby', 'Buffalo', 'Bulldog', 'Bullfinch', 'Bumblebee', 'Butterfly', 'Camel',
|
|
77
|
+
'Capybara', 'Cardinal', 'Caribou', 'Cassowary', 'Cat', 'Caterpillar',
|
|
78
|
+
'Catfish', 'Chameleon', 'Chamois', 'Cheetah', 'Chickadee', 'Chinchilla',
|
|
79
|
+
'Chipmunk', 'Clam', 'Clownfish', 'Coati', 'Cobra', 'Cockatoo', 'Codfish',
|
|
80
|
+
'Colt', 'Condor', 'Coot', 'Cormorant', 'Corgi', 'Cougar', 'Cow', 'Coyote',
|
|
81
|
+
'Crab', 'Crane', 'Cricket', 'Crow', 'Cub', 'Cuckoo', 'Curlew', 'Deer',
|
|
82
|
+
'Dingo', 'Dolphin', 'Donkey', 'Dormouse', 'Dove', 'Dragonfly', 'Drake',
|
|
83
|
+
'Duck', 'Duckling', 'Eagle', 'Echidna', 'Eel', 'Egret', 'Elephant', 'Elk',
|
|
84
|
+
'Emu', 'Falcon', 'Fawn', 'Ferret', 'Finch', 'Firefly', 'Fish', 'Flamingo',
|
|
85
|
+
'Fox', 'Frog', 'Gecko', 'Gerbil', 'Gibbon', 'Giraffe', 'Gnu', 'Goat',
|
|
86
|
+
'Godwit', 'Goldfinch', 'Goldfish', 'Goose', 'Gorilla', 'Grebe', 'Griffon',
|
|
87
|
+
'Grouse', 'Guanaco', 'Guineafowl', 'Gull', 'Guppy', 'Hamster', 'Hare',
|
|
88
|
+
'Harrier', 'Hawk', 'Hedgehog', 'Heron', 'Herring', 'Hippo', 'Hoatzin',
|
|
89
|
+
'Hoopoe', 'Hornbill', 'Horse', 'Hound', 'Hummingbird', 'Ibex', 'Ibis',
|
|
90
|
+
'Iguana', 'Impala', 'Jackal', 'Jackrabbit', 'Jaguar', 'Jay', 'Jellyfish',
|
|
91
|
+
'Kakapo', 'Kangaroo', 'Kestrel', 'Kingfisher', 'Kinkajou', 'Kite', 'Kitten',
|
|
92
|
+
'Kiwi', 'Koala', 'Kookaburra', 'Ladybug', 'Lamb', 'Lapwing', 'Lark',
|
|
93
|
+
'Lemming', 'Lemur', 'Leopard', 'Lion', 'Lizard', 'Llama', 'Lobster',
|
|
94
|
+
'Lorikeet', 'Loris', 'Lynx', 'Macaque', 'Macaw', 'Magpie', 'Mallard',
|
|
95
|
+
'Manatee', 'Mandrill', 'Mantis', 'Marmoset', 'Marmot', 'Marten', 'Meerkat',
|
|
96
|
+
'Mink', 'Minnow', 'Mole', 'Mongoose', 'Monkey', 'Moose', 'Moth', 'Mouse',
|
|
97
|
+
'Mule', 'Muntjac', 'Muskrat', 'Narwhal', 'Newt', 'Nightingale', 'Numbat',
|
|
98
|
+
'Nuthatch', 'Ocelot', 'Octopus', 'Okapi', 'Opossum', 'Orangutan', 'Oriole',
|
|
99
|
+
'Ostrich', 'Otter', 'Owl', 'Ox', 'Oyster', 'Panda', 'Pangolin', 'Panther',
|
|
100
|
+
'Parakeet', 'Parrot', 'Partridge', 'Peacock', 'Pelican', 'Penguin', 'Perch',
|
|
101
|
+
'Pheasant', 'Pig', 'Pigeon', 'Piglet', 'Pika', 'Pipit', 'Platypus', 'Plover',
|
|
102
|
+
'Pointer', 'Polecat', 'Pony', 'Porcupine', 'Porpoise', 'Possum', 'Prawn',
|
|
103
|
+
'Ptarmigan', 'Puffin', 'Puma', 'Pup', 'Puppy', 'Quail', 'Quokka', 'Rabbit',
|
|
104
|
+
'Raccoon', 'Ram', 'Rat', 'Raven', 'Reindeer', 'Rhino', 'Roadrunner', 'Robin',
|
|
105
|
+
'Rook', 'Salamander', 'Salmon', 'Sandpiper', 'Sardine', 'Scallop', 'Seahorse',
|
|
106
|
+
'Seal', 'Serval', 'Shrew', 'Shrimp', 'Skunk', 'Sloth', 'Snail', 'Snake',
|
|
107
|
+
'Snipe', 'Sparrow', 'Spider', 'Squid', 'Squirrel', 'Starling', 'Stoat',
|
|
108
|
+
'Stork', 'Sturgeon', 'Swallow', 'Swan', 'Tamarin', 'Tanager', 'Tapir',
|
|
109
|
+
'Tarsier', 'Teal', 'Tern', 'Terrier', 'Thrush', 'Tiger', 'Toad', 'Toucan',
|
|
110
|
+
'Trout', 'Tuna', 'Turkey', 'Turtle', 'Vole', 'Wagtail', 'Walrus', 'Wapiti',
|
|
111
|
+
'Warbler', 'Wasp', 'Weasel', 'Whale', 'Whippet', 'Wolf', 'Wolverine',
|
|
112
|
+
'Wombat', 'Woodchuck', 'Woodpecker', 'Wren', 'Yak', 'Zebra',
|
|
113
|
+
];
|
|
114
|
+
// Total combinations = ADJECTIVES.length * ANIMALS.length. Exposed for
|
|
115
|
+
// diagnostics and for tests that want to assert the name space is large
|
|
116
|
+
// enough to cover the expected ceiling of licenses × cap.
|
|
117
|
+
export const SEAT_NAME_COMBINATIONS = ADJECTIVES.length * ANIMALS.length;
|
|
118
|
+
// FNV-1a — a fast, non-cryptographic 32-bit hash. Uniform enough over 250
|
|
119
|
+
// buckets that the modulo bias (~1 in 17M) is invisible in practice. Not
|
|
120
|
+
// used for security; just to derive a stable pair of small indices from
|
|
121
|
+
// the seat's on-chain identity fields.
|
|
122
|
+
function fnv1a(s, seed) {
|
|
123
|
+
let h = seed >>> 0;
|
|
124
|
+
for (let i = 0; i < s.length; i++) {
|
|
125
|
+
h ^= s.charCodeAt(i);
|
|
126
|
+
h = Math.imul(h, 0x01000193);
|
|
127
|
+
}
|
|
128
|
+
return h >>> 0;
|
|
129
|
+
}
|
|
130
|
+
export function seatNameFor(input) {
|
|
131
|
+
const key = `${input.licenseHash}|${input.slotIndex}|${input.boundAtSlot}`;
|
|
132
|
+
const adj = ADJECTIVES[fnv1a(key, 0x811c9dc5) % ADJECTIVES.length];
|
|
133
|
+
const animal = ANIMALS[fnv1a(key, 0xdeadbeef) % ANIMALS.length];
|
|
134
|
+
return `${adj} ${animal}`;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=seatName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatName.js","sourceRoot":"","sources":["../src/seatName.ts"],"names":[],"mappings":"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"}
|
package/build/statsClient.d.ts
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* as `?:` so older clients still typecheck against a newer keeper.
|
|
11
11
|
*/
|
|
12
12
|
import type { CountryBreakdown } from './countryStats.js';
|
|
13
|
-
|
|
13
|
+
import type { FiatRateSnapshot } from './licenseRecord.js';
|
|
14
|
+
export type Tier = 'monthly' | 'yearly' | 'fiveYear' | 'perpetual';
|
|
14
15
|
export type AppRecord = {
|
|
15
16
|
appId: string;
|
|
16
17
|
name: string;
|
|
@@ -18,12 +19,13 @@ export type AppRecord = {
|
|
|
18
19
|
longDescription?: string;
|
|
19
20
|
category: string;
|
|
20
21
|
website: string;
|
|
21
|
-
zkAppAddress
|
|
22
|
+
zkAppAddress?: string;
|
|
22
23
|
vendorAddress: string;
|
|
23
24
|
priceMonthlyMina: number;
|
|
24
25
|
priceYearlyMina: number;
|
|
25
26
|
priceFiveYearMina: number;
|
|
26
|
-
|
|
27
|
+
pricePerpetualMina: number;
|
|
28
|
+
txHash?: string;
|
|
27
29
|
verificationKeyHash?: string;
|
|
28
30
|
logo?: string;
|
|
29
31
|
iconUrl?: string;
|
|
@@ -31,13 +33,37 @@ export type AppRecord = {
|
|
|
31
33
|
contactEmail?: string;
|
|
32
34
|
supportEmail?: string;
|
|
33
35
|
country?: string;
|
|
34
|
-
status?: 'pending' | 'active' | 'inactive' | 'rejected';
|
|
36
|
+
status?: 'pending' | 'active' | 'inactive' | 'rejected' | 'not-deployed';
|
|
35
37
|
rejectionReason?: string;
|
|
36
38
|
createdAt: string;
|
|
37
39
|
approvedAt?: string;
|
|
40
|
+
network?: 'devnet' | 'mainnet';
|
|
41
|
+
alsoOnNetworks?: ('devnet' | 'mainnet')[];
|
|
42
|
+
firstEventSlot?: number;
|
|
43
|
+
lastSyncedSlot?: number;
|
|
44
|
+
onChainVersion?: number;
|
|
45
|
+
deploymentHistory?: unknown[];
|
|
38
46
|
pendingEdit?: Partial<AppRecord> & {
|
|
39
47
|
editedAt: string;
|
|
40
48
|
};
|
|
49
|
+
statusHistory?: {
|
|
50
|
+
status: string;
|
|
51
|
+
at: string;
|
|
52
|
+
actor: string;
|
|
53
|
+
note?: string;
|
|
54
|
+
}[];
|
|
55
|
+
legalName?: string;
|
|
56
|
+
billingAddress?: {
|
|
57
|
+
line1: string;
|
|
58
|
+
line2?: string;
|
|
59
|
+
city: string;
|
|
60
|
+
postalCode: string;
|
|
61
|
+
};
|
|
62
|
+
invoiceEmail?: string;
|
|
63
|
+
vatId?: string;
|
|
64
|
+
companyRegistrationRegistry?: string;
|
|
65
|
+
companyRegistrationNumber?: string;
|
|
66
|
+
registrationFeeMina?: number;
|
|
41
67
|
};
|
|
42
68
|
export type VendorStatsResponse = {
|
|
43
69
|
apps: AppRecord[];
|
|
@@ -45,6 +71,7 @@ export type VendorStatsResponse = {
|
|
|
45
71
|
totalLicenses: number;
|
|
46
72
|
totalRevenueMina: number;
|
|
47
73
|
pendingRevenueMina?: number;
|
|
74
|
+
refundedRevenueMina?: number;
|
|
48
75
|
renewalRate: number | null;
|
|
49
76
|
monthlyRevenueMina: {
|
|
50
77
|
month: string;
|
|
@@ -54,6 +81,7 @@ export type VendorStatsResponse = {
|
|
|
54
81
|
monthly: number;
|
|
55
82
|
yearly: number;
|
|
56
83
|
fiveYear: number;
|
|
84
|
+
perpetual: number;
|
|
57
85
|
};
|
|
58
86
|
deltas: {
|
|
59
87
|
revenuePct: number | null;
|
|
@@ -64,10 +92,13 @@ export type Transaction = {
|
|
|
64
92
|
type: 'purchase' | 'renewal' | 'release' | 'refund';
|
|
65
93
|
appId: string;
|
|
66
94
|
appName: string;
|
|
95
|
+
vendorAddress?: string;
|
|
67
96
|
tier: Tier | null;
|
|
68
97
|
amountMina: number;
|
|
69
98
|
txHash: string;
|
|
70
99
|
date: string;
|
|
100
|
+
buyerCountry?: string;
|
|
101
|
+
fiatSnapshot?: FiatRateSnapshot;
|
|
71
102
|
};
|
|
72
103
|
export type TransactionsResponse = {
|
|
73
104
|
transactions: Transaction[];
|
|
@@ -78,19 +109,31 @@ export type VendorAppsResponse = {
|
|
|
78
109
|
export declare function fetchVendorStats(opts: {
|
|
79
110
|
keeperUrl: string;
|
|
80
111
|
vendorAddress: string;
|
|
112
|
+
network: 'devnet' | 'mainnet';
|
|
113
|
+
adminToken?: string;
|
|
114
|
+
vendorSessionToken?: string;
|
|
115
|
+
tzOffsetMinutes?: number;
|
|
81
116
|
fetcher?: typeof fetch;
|
|
82
117
|
signal?: AbortSignal;
|
|
83
118
|
}): Promise<VendorStatsResponse | null>;
|
|
84
119
|
export declare function fetchTransactions(opts: {
|
|
85
120
|
keeperUrl: string;
|
|
86
121
|
vendorAddress: string;
|
|
122
|
+
network: 'devnet' | 'mainnet';
|
|
123
|
+
adminToken?: string;
|
|
124
|
+
vendorSessionToken?: string;
|
|
87
125
|
days?: number;
|
|
126
|
+
from?: string;
|
|
127
|
+
to?: string;
|
|
88
128
|
fetcher?: typeof fetch;
|
|
89
129
|
signal?: AbortSignal;
|
|
90
130
|
}): Promise<TransactionsResponse | null>;
|
|
91
131
|
export declare function fetchVendorApps(opts: {
|
|
92
132
|
keeperUrl: string;
|
|
93
133
|
vendorAddress: string;
|
|
134
|
+
adminToken?: string;
|
|
135
|
+
vendorSessionToken?: string;
|
|
136
|
+
network?: 'devnet' | 'mainnet';
|
|
94
137
|
fetcher?: typeof fetch;
|
|
95
138
|
signal?: AbortSignal;
|
|
96
139
|
}): Promise<VendorAppsResponse | null>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statsClient.d.ts","sourceRoot":"","sources":["../src/statsClient.ts"],"names":[],"mappings":"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"}
|
package/build/statsClient.js
CHANGED
|
@@ -1,26 +1,65 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
3
|
function baseUrl(url) {
|
|
4
4
|
return url.replace(/\/+$/, '');
|
|
5
5
|
}
|
|
6
|
+
// Admin __all mode: pass `adminToken` and omit `vendorAddress` (or pass '__all').
|
|
7
|
+
// Fetches aggregate over every registered app. Server gates with Bearer auth.
|
|
8
|
+
// tzOffsetMinutes: signed minutes east of UTC — shifts tax-year cutovers on the
|
|
9
|
+
// countryBreakdown so a UK vendor's 2026 doesn't include a Dec 31 23:30 PST
|
|
10
|
+
// purchase. Default omitted → UTC bucketing preserved for existing callers.
|
|
6
11
|
export async function fetchVendorStats(opts) {
|
|
7
12
|
const fetcher = opts.fetcher ?? fetch;
|
|
8
|
-
const
|
|
13
|
+
const headers = {};
|
|
14
|
+
if (opts.adminToken)
|
|
15
|
+
headers.Authorization = `Bearer ${opts.adminToken}`;
|
|
16
|
+
else if (opts.vendorSessionToken)
|
|
17
|
+
headers.Authorization = `VendorSession ${opts.vendorSessionToken}`;
|
|
18
|
+
const tzQ = typeof opts.tzOffsetMinutes === 'number' ? `&tz=${opts.tzOffsetMinutes}` : '';
|
|
19
|
+
const resp = await fetcher(`${baseUrl(opts.keeperUrl)}/stats?vendor=${encodeURIComponent(opts.vendorAddress)}&network=${opts.network}${tzQ}`, { signal: opts.signal, headers });
|
|
9
20
|
if (!resp.ok)
|
|
10
21
|
return null;
|
|
11
22
|
return await resp.json();
|
|
12
23
|
}
|
|
13
24
|
export async function fetchTransactions(opts) {
|
|
14
25
|
const fetcher = opts.fetcher ?? fetch;
|
|
15
|
-
const
|
|
16
|
-
|
|
26
|
+
const headers = {};
|
|
27
|
+
if (opts.adminToken)
|
|
28
|
+
headers.Authorization = `Bearer ${opts.adminToken}`;
|
|
29
|
+
else if (opts.vendorSessionToken)
|
|
30
|
+
headers.Authorization = `VendorSession ${opts.vendorSessionToken}`;
|
|
31
|
+
const qs = new URLSearchParams({ vendor: opts.vendorAddress, network: opts.network });
|
|
32
|
+
if (opts.from && opts.to) {
|
|
33
|
+
qs.set('from', opts.from);
|
|
34
|
+
qs.set('to', opts.to);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
qs.set('days', String(opts.days ?? 30));
|
|
38
|
+
}
|
|
39
|
+
const resp = await fetcher(`${baseUrl(opts.keeperUrl)}/transactions?${qs.toString()}`, { signal: opts.signal, headers });
|
|
17
40
|
if (!resp.ok)
|
|
18
41
|
return null;
|
|
19
42
|
return await resp.json();
|
|
20
43
|
}
|
|
44
|
+
// Admin all-apps mode: pass `adminToken` and set `vendorAddress` to '__all'.
|
|
45
|
+
// Hits GET /apps (no auth needed today; the admin overload just uses a
|
|
46
|
+
// different URL) so vendors visiting their own dashboard still hit the same
|
|
47
|
+
// per-vendor endpoint.
|
|
21
48
|
export async function fetchVendorApps(opts) {
|
|
22
49
|
const fetcher = opts.fetcher ?? fetch;
|
|
23
|
-
const
|
|
50
|
+
const headers = {};
|
|
51
|
+
if (opts.adminToken)
|
|
52
|
+
headers.Authorization = `Bearer ${opts.adminToken}`;
|
|
53
|
+
else if (opts.vendorSessionToken)
|
|
54
|
+
headers.Authorization = `VendorSession ${opts.vendorSessionToken}`;
|
|
55
|
+
const isAdminAll = opts.adminToken && opts.vendorAddress === '__all';
|
|
56
|
+
if (!isAdminAll && !opts.network) {
|
|
57
|
+
throw new Error("fetchVendorApps: `network` is required for the per-vendor path");
|
|
58
|
+
}
|
|
59
|
+
const url = isAdminAll
|
|
60
|
+
? `${baseUrl(opts.keeperUrl)}/apps?all=1`
|
|
61
|
+
: `${baseUrl(opts.keeperUrl)}/apps/vendor/${encodeURIComponent(opts.vendorAddress)}?network=${opts.network}`;
|
|
62
|
+
const resp = await fetcher(url, { signal: opts.signal, headers });
|
|
24
63
|
if (!resp.ok)
|
|
25
64
|
return null;
|
|
26
65
|
return await resp.json();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statsClient.js","sourceRoot":"","sources":["../src/statsClient.ts"],"names":[],"mappings":"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"}
|