@shielded-x402/client 0.3.0 → 0.4.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.
Files changed (63) hide show
  1. package/dist/agentPaymentFetch.d.ts +56 -0
  2. package/dist/agentPaymentFetch.d.ts.map +1 -0
  3. package/dist/agentPaymentFetch.js +208 -0
  4. package/dist/agentPaymentFetch.js.map +1 -0
  5. package/dist/client.d.ts +1 -4
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +2 -22
  8. package/dist/client.js.map +1 -1
  9. package/dist/counterpartyPolicy.d.ts +9 -0
  10. package/dist/counterpartyPolicy.d.ts.map +1 -0
  11. package/dist/counterpartyPolicy.js +87 -0
  12. package/dist/counterpartyPolicy.js.map +1 -0
  13. package/dist/creditChannel.d.ts +28 -0
  14. package/dist/creditChannel.d.ts.map +1 -0
  15. package/dist/creditChannel.js +143 -0
  16. package/dist/creditChannel.js.map +1 -0
  17. package/dist/creditClose.d.ts +13 -0
  18. package/dist/creditClose.d.ts.map +1 -0
  19. package/dist/creditClose.js +21 -0
  20. package/dist/creditClose.js.map +1 -0
  21. package/dist/creditFetch.d.ts +18 -0
  22. package/dist/creditFetch.d.ts.map +1 -0
  23. package/dist/creditFetch.js +56 -0
  24. package/dist/creditFetch.js.map +1 -0
  25. package/dist/creditSignatures.d.ts +18 -0
  26. package/dist/creditSignatures.d.ts.map +1 -0
  27. package/dist/creditSignatures.js +18 -0
  28. package/dist/creditSignatures.js.map +1 -0
  29. package/dist/crypto.d.ts +1 -1
  30. package/dist/crypto.d.ts.map +1 -1
  31. package/dist/crypto.js +4 -7
  32. package/dist/crypto.js.map +1 -1
  33. package/dist/http.d.ts +10 -0
  34. package/dist/http.d.ts.map +1 -0
  35. package/dist/http.js +27 -0
  36. package/dist/http.js.map +1 -0
  37. package/dist/index.d.ts +7 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +7 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/proofProvider.d.ts +1 -1
  42. package/dist/proofProvider.d.ts.map +1 -1
  43. package/dist/proofProvider.js +40 -44
  44. package/dist/proofProvider.js.map +1 -1
  45. package/dist/requirementAdapters.d.ts +16 -0
  46. package/dist/requirementAdapters.d.ts.map +1 -0
  47. package/dist/requirementAdapters.js +277 -0
  48. package/dist/requirementAdapters.js.map +1 -0
  49. package/dist/types.d.ts +0 -3
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/walletState.d.ts +15 -1
  52. package/dist/walletState.d.ts.map +1 -1
  53. package/dist/walletState.js +272 -187
  54. package/dist/walletState.js.map +1 -1
  55. package/package.json +3 -2
  56. package/dist/relayerFetch.d.ts +0 -43
  57. package/dist/relayerFetch.d.ts.map +0 -1
  58. package/dist/relayerFetch.js +0 -313
  59. package/dist/relayerFetch.js.map +0 -1
  60. package/dist/shieldedFetch.d.ts +0 -41
  61. package/dist/shieldedFetch.d.ts.map +0 -1
  62. package/dist/shieldedFetch.js +0 -91
  63. package/dist/shieldedFetch.js.map +0 -1
@@ -0,0 +1,143 @@
1
+ import { RELAYER_ROUTES, canonicalMerchantRequestHash, deriveCreditChannelId, hashCreditState, normalizeRequirement } from '@shielded-x402/shared-types';
2
+ import { recoverCreditStateSigner, signAgentCreditState, signDebitIntent } from './creditSignatures.js';
3
+ import { postJson } from './http.js';
4
+ function assertNonEmpty(value, label) {
5
+ const trimmed = value.trim();
6
+ if (trimmed.length === 0)
7
+ throw new Error(`${label} must not be empty`);
8
+ return trimmed;
9
+ }
10
+ function nowSeconds() {
11
+ return BigInt(Math.floor(Date.now() / 1000));
12
+ }
13
+ function normalizeChannelId(channelId) {
14
+ const normalized = channelId.toLowerCase();
15
+ if (!/^0x[0-9a-f]{64}$/.test(normalized)) {
16
+ throw new Error('channelId must be a bytes32 hex string');
17
+ }
18
+ return normalized;
19
+ }
20
+ export function createCreditChannelClient(config) {
21
+ const fetchImpl = config.fetchImpl ?? fetch;
22
+ const endpoint = config.relayerEndpoint.replace(/\/$/, '');
23
+ const agentAddress = config.agentAddress.toLowerCase();
24
+ let domainCache;
25
+ let resolvedChannelId = config.channelId
26
+ ? normalizeChannelId(config.channelId)
27
+ : undefined;
28
+ let payQueue = Promise.resolve();
29
+ const getDomain = async () => {
30
+ if (domainCache)
31
+ return domainCache;
32
+ const parsed = await postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditDomain}`, undefined, { errorPrefix: 'failed to fetch credit domain' });
33
+ domainCache = parsed;
34
+ return parsed;
35
+ };
36
+ const resolveChannelId = async () => {
37
+ if (resolvedChannelId)
38
+ return resolvedChannelId;
39
+ const currentDomain = await getDomain();
40
+ resolvedChannelId = deriveCreditChannelId({
41
+ domain: currentDomain,
42
+ agentAddress
43
+ });
44
+ return resolvedChannelId;
45
+ };
46
+ const getLatestState = () => {
47
+ if (!resolvedChannelId)
48
+ return undefined;
49
+ return config.stateStore?.getCreditState(resolvedChannelId);
50
+ };
51
+ const persistState = async (domain, state, relayerSignature) => {
52
+ const relayerSigner = await recoverCreditStateSigner(domain, state, relayerSignature);
53
+ if (relayerSigner !== domain.relayerAddress.toLowerCase()) {
54
+ throw new Error('relayer signature does not match advertised relayer address');
55
+ }
56
+ const agentSignature = await signAgentCreditState(domain, state, config.signer);
57
+ const signed = {
58
+ state,
59
+ agentSignature,
60
+ relayerSignature
61
+ };
62
+ await config.stateStore?.setCreditState(signed);
63
+ return signed;
64
+ };
65
+ const topup = async (request) => {
66
+ const domain = await getDomain();
67
+ const channelId = await resolveChannelId();
68
+ const latestState = config.stateStore?.getCreditState(channelId);
69
+ const payload = {
70
+ ...request,
71
+ channelId
72
+ };
73
+ if (latestState) {
74
+ payload.latestState = latestState;
75
+ }
76
+ const result = await postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditTopup}`, payload, { allowNonOk: true });
77
+ if (result.status === 'DONE') {
78
+ if (!result.nextState || !result.nextStateRelayerSignature) {
79
+ throw new Error('credit topup succeeded without next state signatures');
80
+ }
81
+ await persistState(domain, result.nextState, result.nextStateRelayerSignature);
82
+ }
83
+ return result;
84
+ };
85
+ const pay = async (args) => {
86
+ const run = async () => {
87
+ const domain = await getDomain();
88
+ const channelId = await resolveChannelId();
89
+ const latestState = config.stateStore?.getCreditState(channelId);
90
+ if (!latestState) {
91
+ throw new Error('missing latest credit state; top up first');
92
+ }
93
+ const normalizedRequirement = normalizeRequirement(args.requirement);
94
+ const amount = BigInt(normalizedRequirement.amount);
95
+ if (BigInt(latestState.state.available) < amount) {
96
+ throw new Error('insufficient credit balance for request amount');
97
+ }
98
+ const requestId = assertNonEmpty(args.requestId, 'requestId');
99
+ const deadline = nowSeconds() + BigInt(args.deadlineSeconds ?? 120);
100
+ const debitIntent = {
101
+ channelId,
102
+ prevStateHash: hashCreditState(latestState.state),
103
+ nextSeq: (BigInt(latestState.state.seq) + 1n).toString(),
104
+ amount: amount.toString(),
105
+ merchantRequestHash: canonicalMerchantRequestHash({
106
+ merchantRequest: args.merchantRequest,
107
+ requirement: normalizedRequirement
108
+ }),
109
+ deadline: deadline.toString(),
110
+ requestId
111
+ };
112
+ const debitIntentSignature = await signDebitIntent(domain, debitIntent, config.signer);
113
+ const request = {
114
+ requestId,
115
+ merchantRequest: args.merchantRequest,
116
+ requirement: normalizedRequirement,
117
+ latestState,
118
+ debitIntent,
119
+ debitIntentSignature
120
+ };
121
+ const result = await postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditPay}`, request, { allowNonOk: true });
122
+ if (result.status === 'DONE') {
123
+ if (!result.nextState || !result.nextStateRelayerSignature) {
124
+ throw new Error('credit pay succeeded without next state signatures');
125
+ }
126
+ await persistState(domain, result.nextState, result.nextStateRelayerSignature);
127
+ }
128
+ return result;
129
+ };
130
+ const resultPromise = payQueue.then(run, run);
131
+ // Sequential queue: enforce one in-flight pay per channel state.
132
+ payQueue = resultPromise.then(() => undefined, () => undefined);
133
+ return resultPromise;
134
+ };
135
+ return {
136
+ getDomain,
137
+ getChannelId: resolveChannelId,
138
+ getLatestState,
139
+ topup,
140
+ pay
141
+ };
142
+ }
143
+ //# sourceMappingURL=creditChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditChannel.js","sourceRoot":"","sources":["../src/creditChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type CreditChannelStatus, type Hex, type RelayerCreditCloseChallengeResponse, type RelayerCreditCloseFinalizeResponse, type RelayerCreditCloseStartResponse, type SignedCreditState } from '@shielded-x402/shared-types';
2
+ export interface CreditCloseClientConfig {
3
+ relayerEndpoint: string;
4
+ fetchImpl?: typeof fetch;
5
+ }
6
+ export interface CreditCloseClient {
7
+ startClose: (latestState: SignedCreditState) => Promise<RelayerCreditCloseStartResponse>;
8
+ challengeClose: (higherState: SignedCreditState) => Promise<RelayerCreditCloseChallengeResponse>;
9
+ finalizeClose: (channelId: Hex) => Promise<RelayerCreditCloseFinalizeResponse>;
10
+ getCloseStatus: (channelId: Hex) => Promise<CreditChannelStatus>;
11
+ }
12
+ export declare function createCreditCloseClient(config: CreditCloseClientConfig): CreditCloseClient;
13
+ //# sourceMappingURL=creditClose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditClose.d.ts","sourceRoot":"","sources":["../src/creditClose.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,GAAG,EACR,KAAK,mCAAmC,EACxC,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACzF,cAAc,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACjG,aAAa,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC/E,cAAc,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAClE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAqC1F"}
@@ -0,0 +1,21 @@
1
+ import { RELAYER_ROUTES } from '@shielded-x402/shared-types';
2
+ import { postJson, requestJson } from './http.js';
3
+ export function createCreditCloseClient(config) {
4
+ const fetchImpl = config.fetchImpl ?? fetch;
5
+ const endpoint = config.relayerEndpoint.replace(/\/$/, '');
6
+ return {
7
+ startClose: async (latestState) => {
8
+ return postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditCloseStart}`, { latestState }, { allowNonOk: true });
9
+ },
10
+ challengeClose: async (higherState) => {
11
+ return postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditCloseChallenge}`, { higherState }, { allowNonOk: true });
12
+ },
13
+ finalizeClose: async (channelId) => {
14
+ return postJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditCloseFinalize}`, { channelId }, { allowNonOk: true });
15
+ },
16
+ getCloseStatus: async (channelId) => {
17
+ return requestJson(fetchImpl, `${endpoint}${RELAYER_ROUTES.creditCloseStatusPrefix}/${channelId}`, { method: 'GET', errorPrefix: 'failed to fetch close status' });
18
+ }
19
+ };
20
+ }
21
+ //# sourceMappingURL=creditClose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditClose.js","sourceRoot":"","sources":["../src/creditClose.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAOf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAclD,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YAChC,OAAO,QAAQ,CACb,SAAS,EACT,GAAG,QAAQ,GAAG,cAAc,CAAC,gBAAgB,EAAE,EAC/C,EAAE,WAAW,EAAE,EACf,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;QACJ,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YACpC,OAAO,QAAQ,CACb,SAAS,EACT,GAAG,QAAQ,GAAG,cAAc,CAAC,oBAAoB,EAAE,EACnD,EAAE,WAAW,EAAE,EACf,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YACjC,OAAO,QAAQ,CACb,SAAS,EACT,GAAG,QAAQ,GAAG,cAAc,CAAC,mBAAmB,EAAE,EAClD,EAAE,SAAS,EAAE,EACb,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;QACJ,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAClC,OAAO,WAAW,CAChB,SAAS,EACT,GAAG,QAAQ,GAAG,cAAc,CAAC,uBAAuB,IAAI,SAAS,EAAE,EACnE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAC/D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { CreditPayArgs } from './creditChannel.js';
2
+ export interface CreditPayClient {
3
+ pay: (args: CreditPayArgs) => Promise<{
4
+ status: 'DONE' | 'FAILED';
5
+ merchantResult?: {
6
+ status: number;
7
+ headers: Record<string, string>;
8
+ bodyBase64: string;
9
+ };
10
+ failureReason?: string;
11
+ }>;
12
+ }
13
+ export interface CreateCreditFetchConfig {
14
+ creditClient: CreditPayClient;
15
+ fetchImpl?: typeof fetch;
16
+ }
17
+ export declare function createCreditShieldedFetch(config: CreateCreditFetchConfig): (input: string | URL, init?: RequestInit) => Promise<Response>;
18
+ //# sourceMappingURL=creditFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditFetch.d.ts","sourceRoot":"","sources":["../src/creditFetch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;QACpC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;QAC1B,cAAc,CAAC,EAAE;YACf,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,eAAe,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AA4BD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,uBAAuB,IAIzD,OAAO,MAAM,GAAG,GAAG,EAAE,OAAO,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAmC1E"}
@@ -0,0 +1,56 @@
1
+ import { headersInitToRecord, normalizeRequestInput } from '@shielded-x402/shared-types';
2
+ import { createGenericX402V2Adapter, parseRequirementFrom402Response } from './requirementAdapters.js';
3
+ async function serializeBody(body) {
4
+ if (body === undefined || body === null)
5
+ return undefined;
6
+ const request = new Request('http://credit.local', {
7
+ method: 'POST',
8
+ body
9
+ });
10
+ const bytes = new Uint8Array(await request.arrayBuffer());
11
+ return Buffer.from(bytes).toString('base64');
12
+ }
13
+ function toResponse(merchantResult) {
14
+ return new Response(Buffer.from(merchantResult.bodyBase64, 'base64'), {
15
+ status: merchantResult.status,
16
+ headers: merchantResult.headers
17
+ });
18
+ }
19
+ function buildRequestId(requirement, url) {
20
+ const now = Date.now().toString(16);
21
+ return `credit-${now}-${requirement.challengeNonce.slice(2, 10)}-${Buffer.from(url).toString('hex').slice(0, 8)}`;
22
+ }
23
+ export function createCreditShieldedFetch(config) {
24
+ const fetchImpl = config.fetchImpl ?? fetch;
25
+ const requirementAdapters = [createGenericX402V2Adapter()];
26
+ return async (input, init) => {
27
+ const normalizedInput = normalizeRequestInput(input);
28
+ const requestInit = init ?? {};
29
+ const first = await fetchImpl(normalizedInput, requestInit);
30
+ if (first.status !== 402)
31
+ return first;
32
+ const { requirement } = await parseRequirementFrom402Response(first, { requestUrl: normalizedInput }, requirementAdapters);
33
+ const method = (requestInit.method ?? 'GET').toUpperCase();
34
+ const bodyBase64 = method !== 'GET' && method !== 'HEAD'
35
+ ? await serializeBody(requestInit.body ?? null)
36
+ : undefined;
37
+ const merchantRequest = {
38
+ url: normalizedInput,
39
+ method,
40
+ headers: headersInitToRecord(requestInit.headers)
41
+ };
42
+ if (bodyBase64 !== undefined) {
43
+ merchantRequest.bodyBase64 = bodyBase64;
44
+ }
45
+ const creditResult = await config.creditClient.pay({
46
+ requestId: buildRequestId(requirement, normalizedInput),
47
+ merchantRequest,
48
+ requirement
49
+ });
50
+ if (creditResult.status !== 'DONE' || !creditResult.merchantResult) {
51
+ throw new Error(creditResult.failureReason ?? 'credit pay failed');
52
+ }
53
+ return toResponse(creditResult.merchantResult);
54
+ };
55
+ }
56
+ //# sourceMappingURL=creditFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditFetch.js","sourceRoot":"","sources":["../src/creditFetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { CREDIT_EIP712_TYPES, buildCreditDebitIntentTypedDataPayload, buildCreditStateTypedDataPayload, type CreditDebitIntent, type CreditDomainResponse, type CreditState, type Hex } from '@shielded-x402/shared-types';
2
+ export interface CreditTypedDataSigner {
3
+ signTypedData: (args: {
4
+ domain: {
5
+ name: string;
6
+ version: string;
7
+ chainId: number;
8
+ verifyingContract: Hex;
9
+ };
10
+ types: typeof CREDIT_EIP712_TYPES;
11
+ primaryType: 'CreditState' | 'CreditDebitIntent';
12
+ message: ReturnType<typeof buildCreditStateTypedDataPayload>['message'] | ReturnType<typeof buildCreditDebitIntentTypedDataPayload>['message'];
13
+ }) => Promise<Hex>;
14
+ }
15
+ export declare function signAgentCreditState(domain: CreditDomainResponse, state: CreditState, signer: CreditTypedDataSigner): Promise<Hex>;
16
+ export declare function signDebitIntent(domain: CreditDomainResponse, intent: CreditDebitIntent, signer: CreditTypedDataSigner): Promise<Hex>;
17
+ export declare function recoverCreditStateSigner(domain: CreditDomainResponse, state: CreditState, signature: Hex): Promise<Hex>;
18
+ //# sourceMappingURL=creditSignatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditSignatures.d.ts","sourceRoot":"","sources":["../src/creditSignatures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sCAAsC,EACtC,gCAAgC,EAChC,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,GAAG,EACT,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,IAAI,EAAE;QACpB,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,iBAAiB,EAAE,GAAG,CAAC;SACxB,CAAC;QACF,KAAK,EAAE,OAAO,mBAAmB,CAAC;QAClC,WAAW,EAAE,aAAa,GAAG,mBAAmB,CAAC;QACjD,OAAO,EACH,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,SAAS,CAAC,GAC9D,UAAU,CAAC,OAAO,sCAAsC,CAAC,CAAC,SAAS,CAAC,CAAC;KAC1E,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,GAAG,CAAC,CAGd;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,GAAG,CAAC,CAKd;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,GAAG,CAAC,CAMd"}
@@ -0,0 +1,18 @@
1
+ import { buildCreditDebitIntentTypedDataPayload, buildCreditStateTypedDataPayload } from '@shielded-x402/shared-types';
2
+ import { recoverTypedDataAddress } from 'viem';
3
+ export async function signAgentCreditState(domain, state, signer) {
4
+ const signature = await signer.signTypedData(buildCreditStateTypedDataPayload(domain, state));
5
+ return signature.toLowerCase();
6
+ }
7
+ export async function signDebitIntent(domain, intent, signer) {
8
+ const signature = await signer.signTypedData(buildCreditDebitIntentTypedDataPayload(domain, intent));
9
+ return signature.toLowerCase();
10
+ }
11
+ export async function recoverCreditStateSigner(domain, state, signature) {
12
+ const recovered = await recoverTypedDataAddress({
13
+ ...buildCreditStateTypedDataPayload(domain, state),
14
+ signature
15
+ });
16
+ return recovered.toLowerCase();
17
+ }
18
+ //# sourceMappingURL=creditSignatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditSignatures.js","sourceRoot":"","sources":["../src/creditSignatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sCAAsC,EACtC,gCAAgC,EAKjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,MAAM,CAAC;AAkB/C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA4B,EAC5B,KAAkB,EAClB,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9F,OAAO,SAAS,CAAC,WAAW,EAAS,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA4B,EAC5B,MAAyB,EACzB,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAC1C,sCAAsC,CAAC,MAAM,EAAE,MAAM,CAAC,CACvD,CAAC;IACF,OAAO,SAAS,CAAC,WAAW,EAAS,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAA4B,EAC5B,KAAkB,EAClB,SAAc;IAEd,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC;QAC9C,GAAG,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC;QAClD,SAAS;KACV,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,WAAW,EAAS,CAAC;AACxC,CAAC"}
package/dist/crypto.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Hex } from 'viem';
1
+ import { type Hex } from '@shielded-x402/shared-types';
2
2
  export declare function deriveCommitment(amount: bigint, rho: Hex, pkHash: Hex): Hex;
3
3
  export declare function deriveNullifier(nullifierSecret: Hex, commitment: Hex): Hex;
4
4
  export declare function deriveChallengeHash(challengeNonce: Hex, amount: bigint, merchant: Hex): Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAG3E;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,GAAG,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAM3F"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACT,MAAM,6BAA6B,CAAC;AAGrC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAE3E;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,GAAG,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAE3F"}
package/dist/crypto.js CHANGED
@@ -1,15 +1,12 @@
1
- import { CRYPTO_SPEC } from '@shielded-x402/shared-types';
2
- import { concatHex, keccak256, pad } from 'viem';
1
+ import { challengeHashPreimage, toHexWord } from '@shielded-x402/shared-types';
2
+ import { concatHex, keccak256 } from 'viem';
3
3
  export function deriveCommitment(amount, rho, pkHash) {
4
- const amountWord = `0x${amount.toString(16).padStart(64, '0')}`;
5
- return keccak256(concatHex([amountWord, rho, pkHash]));
4
+ return keccak256(concatHex([toHexWord(amount), rho, pkHash]));
6
5
  }
7
6
  export function deriveNullifier(nullifierSecret, commitment) {
8
7
  return keccak256(concatHex([nullifierSecret, commitment]));
9
8
  }
10
9
  export function deriveChallengeHash(challengeNonce, amount, merchant) {
11
- const amountWord = `0x${amount.toString(16).padStart(64, '0')}`;
12
- const merchantWord = pad(merchant, { size: 32 });
13
- return keccak256(concatHex([CRYPTO_SPEC.challengeDomainHash, challengeNonce, amountWord, merchantWord]));
10
+ return keccak256(concatHex(challengeHashPreimage(challengeNonce, amount, merchant)));
14
11
  }
15
12
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAY,MAAM,MAAM,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,GAAQ,EAAE,MAAW;IACpE,MAAM,UAAU,GAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAU,CAAC;IACzE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,eAAoB,EAAE,UAAe;IACnE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,cAAmB,EAAE,MAAc,EAAE,QAAa;IACpF,MAAM,UAAU,GAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAU,CAAC;IACzE,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,SAAS,CACd,SAAS,CAAC,CAAC,WAAW,CAAC,mBAA0B,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAEV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAE5C,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,GAAQ,EAAE,MAAW;IACpE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,eAAoB,EAAE,UAAe;IACnE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,cAAmB,EAAE,MAAc,EAAE,QAAa;IACpF,OAAO,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export interface JsonRequestOptions {
2
+ method?: 'GET' | 'POST';
3
+ body?: unknown;
4
+ headers?: HeadersInit;
5
+ allowNonOk?: boolean;
6
+ errorPrefix?: string;
7
+ }
8
+ export declare function requestJson<T>(fetchImpl: typeof fetch, url: string, options?: JsonRequestOptions): Promise<T>;
9
+ export declare function postJson<T>(fetchImpl: typeof fetch, url: string, body: unknown, options?: Omit<JsonRequestOptions, 'method' | 'body'>): Promise<T>;
10
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,SAAS,EAAE,OAAO,KAAK,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,MAAM,CAAM,GACxD,OAAO,CAAC,CAAC,CAAC,CAUZ"}
package/dist/http.js ADDED
@@ -0,0 +1,27 @@
1
+ export async function requestJson(fetchImpl, url, options = {}) {
2
+ const init = {
3
+ method: options.method ?? 'GET',
4
+ ...(options.body !== undefined ? { body: JSON.stringify(options.body) } : {})
5
+ };
6
+ if (options.headers !== undefined) {
7
+ init.headers = options.headers;
8
+ }
9
+ const response = await fetchImpl(url, init);
10
+ if (!response.ok && !options.allowNonOk) {
11
+ const text = await response.text();
12
+ throw new Error(`${options.errorPrefix ?? 'request failed'}: ${response.status} ${text}`);
13
+ }
14
+ return (await response.json());
15
+ }
16
+ export async function postJson(fetchImpl, url, body, options = {}) {
17
+ return requestJson(fetchImpl, url, {
18
+ ...options,
19
+ method: 'POST',
20
+ body,
21
+ headers: {
22
+ 'content-type': 'application/json',
23
+ ...(options.headers ?? {})
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAuB,EACvB,GAAW,EACX,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAgB;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,gBAAgB,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,SAAuB,EACvB,GAAW,EACX,IAAa,EACb,UAAuD,EAAE;IAEzD,OAAO,WAAW,CAAI,SAAS,EAAE,GAAG,EAAE;QACpC,GAAG,OAAO;QACV,MAAM,EAAE,MAAM;QACd,IAAI;QACJ,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B;KACF,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  export * from './client.js';
2
+ export * from './agentPaymentFetch.js';
3
+ export * from './creditChannel.js';
4
+ export * from './creditClose.js';
5
+ export * from './creditFetch.js';
6
+ export * from './creditSignatures.js';
7
+ export * from './counterpartyPolicy.js';
2
8
  export * from './crypto.js';
3
9
  export * from './indexer.js';
4
10
  export * from './merkle.js';
5
11
  export * from './notes.js';
6
12
  export * from './proofProvider.js';
7
- export * from './relayerFetch.js';
8
- export * from './shieldedFetch.js';
13
+ export * from './requirementAdapters.js';
9
14
  export * from './types.js';
10
15
  export * from './walletState.js';
11
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,16 @@
1
1
  export * from './client.js';
2
+ export * from './agentPaymentFetch.js';
3
+ export * from './creditChannel.js';
4
+ export * from './creditClose.js';
5
+ export * from './creditFetch.js';
6
+ export * from './creditSignatures.js';
7
+ export * from './counterpartyPolicy.js';
2
8
  export * from './crypto.js';
3
9
  export * from './indexer.js';
4
10
  export * from './merkle.js';
5
11
  export * from './notes.js';
6
12
  export * from './proofProvider.js';
7
- export * from './relayerFetch.js';
8
- export * from './shieldedFetch.js';
13
+ export * from './requirementAdapters.js';
9
14
  export * from './types.js';
10
15
  export * from './walletState.js';
11
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -39,5 +39,5 @@ export declare function createNoirJsProofProviderFromCircuit(circuit: NoirCircui
39
39
  * Highest-level convenience for agent apps:
40
40
  * loads the bundled spend_change artifact from this package.
41
41
  */
42
- export declare function createNoirJsProofProviderFromDefaultCircuit(config?: NoirJsCircuitProofProviderConfig): Promise<ProofProvider>;
42
+ export declare function createProofProvider(config?: NoirJsCircuitProofProviderConfig): Promise<ProofProvider>;
43
43
  //# sourceMappingURL=proofProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proofProvider.d.ts","sourceRoot":"","sources":["../src/proofProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,YAAY,CAAC;AA2I3F,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EACX,KAAK,GACL,WAAW,GACX,gBAAgB,GAChB,sBAAsB,GACtB,aAAa,GACb,mBAAmB,GACnB,UAAU,GACV,gBAAgB,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA+BD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,aAAa,CAsB1F;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,gCAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CA4FxB;AAED;;;GAGG;AACH,wBAAsB,2CAA2C,CAC/D,MAAM,CAAC,EAAE,gCAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CAGxB"}
1
+ {"version":3,"file":"proofProvider.d.ts","sourceRoot":"","sources":["../src/proofProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,YAAY,CAAC;AAsI3F,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EACX,KAAK,GACL,WAAW,GACX,gBAAgB,GAChB,sBAAsB,GACtB,aAAa,GACb,mBAAmB,GACnB,UAAU,GACV,gBAAgB,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAyED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,aAAa,CAsB1F;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,gCAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,CAAC,EAAE,gCAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CAGxB"}