@4mica/sdk 1.2.17 → 1.3.1

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 (74) hide show
  1. package/README.md +59 -25
  2. package/dist/index.cjs +5513 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +2730 -0
  5. package/dist/{src/abi/core4mica.d.ts → index.d.ts} +1032 -1
  6. package/dist/index.js +5439 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/models-B15ouNYG.d.cts +386 -0
  9. package/dist/models-B15ouNYG.d.ts +386 -0
  10. package/dist/server.cjs +172 -0
  11. package/dist/server.cjs.map +1 -0
  12. package/dist/server.d.cts +119 -0
  13. package/dist/server.d.ts +119 -0
  14. package/dist/server.js +165 -0
  15. package/dist/server.js.map +1 -0
  16. package/package.json +52 -43
  17. package/dist/package.json +0 -80
  18. package/dist/src/abi/core4mica.js +0 -2200
  19. package/dist/src/abi/erc20.d.ts +0 -151
  20. package/dist/src/abi/erc20.js +0 -201
  21. package/dist/src/auth.d.ts +0 -62
  22. package/dist/src/auth.js +0 -218
  23. package/dist/src/bls.d.ts +0 -6
  24. package/dist/src/bls.js +0 -247
  25. package/dist/src/chain.d.ts +0 -2
  26. package/dist/src/chain.js +0 -26
  27. package/dist/src/client/index.d.ts +0 -71
  28. package/dist/src/client/index.js +0 -120
  29. package/dist/src/client/recipient.d.ts +0 -129
  30. package/dist/src/client/recipient.js +0 -257
  31. package/dist/src/client/shared.d.ts +0 -11
  32. package/dist/src/client/shared.js +0 -17
  33. package/dist/src/client/user.d.ts +0 -109
  34. package/dist/src/client/user.js +0 -151
  35. package/dist/src/config.d.ts +0 -103
  36. package/dist/src/config.js +0 -197
  37. package/dist/src/constants.d.ts +0 -4
  38. package/dist/src/constants.js +0 -7
  39. package/dist/src/contract.d.ts +0 -55
  40. package/dist/src/contract.js +0 -312
  41. package/dist/src/debug.d.ts +0 -2
  42. package/dist/src/debug.js +0 -5
  43. package/dist/src/errors.d.ts +0 -58
  44. package/dist/src/errors.js +0 -81
  45. package/dist/src/guarantee.d.ts +0 -25
  46. package/dist/src/guarantee.js +0 -272
  47. package/dist/src/http.d.ts +0 -11
  48. package/dist/src/http.js +0 -57
  49. package/dist/src/index.d.ts +0 -17
  50. package/dist/src/index.js +0 -33
  51. package/dist/src/models.d.ts +0 -261
  52. package/dist/src/models.js +0 -360
  53. package/dist/src/networks.d.ts +0 -40
  54. package/dist/src/networks.js +0 -57
  55. package/dist/src/payment.d.ts +0 -82
  56. package/dist/src/payment.js +0 -67
  57. package/dist/src/rpc.d.ts +0 -38
  58. package/dist/src/rpc.js +0 -161
  59. package/dist/src/serde.d.ts +0 -5
  60. package/dist/src/serde.js +0 -33
  61. package/dist/src/signing.d.ts +0 -170
  62. package/dist/src/signing.js +0 -311
  63. package/dist/src/utils.d.ts +0 -11
  64. package/dist/src/utils.js +0 -90
  65. package/dist/src/validation.d.ts +0 -32
  66. package/dist/src/validation.js +0 -84
  67. package/dist/src/wallet/cdp.d.ts +0 -13
  68. package/dist/src/wallet/cdp.js +0 -78
  69. package/dist/src/wallet/index.d.ts +0 -2
  70. package/dist/src/wallet/index.js +0 -5
  71. package/dist/src/x402/index.d.ts +0 -90
  72. package/dist/src/x402/index.js +0 -243
  73. package/dist/src/x402/models.d.ts +0 -75
  74. package/dist/src/x402/models.js +0 -2
@@ -0,0 +1,119 @@
1
+ import { o as X402PaymentRequired, v as PaymentRequirementsExtra, r as X402ResourceInfo, x as X402PaymentEnvelopeV1, y as X402PaymentEnvelopeV2 } from './models-B15ouNYG.cjs';
2
+ export { p as PaymentRequirementsV2 } from './models-B15ouNYG.cjs';
3
+
4
+ /**
5
+ * Edge-safe base64 helpers.
6
+ *
7
+ * Uses only Web-standard `atob`/`btoa` + `TextEncoder`/`TextDecoder`, which are
8
+ * available on Node (>=16), Bun, Deno, browsers, and edge/worker runtimes — so
9
+ * the server paywall path never depends on Node's `Buffer`.
10
+ */
11
+ declare function base64ToBytes(b64: string): Uint8Array;
12
+ declare function bytesToBase64(bytes: Uint8Array): string;
13
+ declare function base64ToUtf8(b64: string): string;
14
+ declare function utf8ToBase64(text: string): string;
15
+
16
+ /** Decoded `X-PAYMENT` envelope: either the V1 or V2 wire shape. */
17
+ type X402PaymentEnvelope = X402PaymentEnvelopeV1 | X402PaymentEnvelopeV2;
18
+ /**
19
+ * Minimal verification surface the paywall needs: issue a payment guarantee for
20
+ * an already-serialized wire payload. The SDK `Client`'s `rpc` proxy and its
21
+ * `RpcProxy` both satisfy this structurally, so callers can pass `client.rpc`.
22
+ */
23
+ interface GuaranteeVerifier {
24
+ issueGuarantee(payload: unknown): Promise<Record<string, unknown>>;
25
+ }
26
+ /** A bare verifier, or anything exposing one at `.rpc` (e.g. the SDK `Client`). */
27
+ type PaywallVerifier = GuaranteeVerifier | {
28
+ rpc: GuaranteeVerifier;
29
+ };
30
+ /** What the framework adapter hands the paywall: method, url, and a header reader. */
31
+ interface PaywallInput {
32
+ method: string;
33
+ url: string;
34
+ /** Case-insensitive header lookup, returning `null` when absent. */
35
+ header: (name: string) => string | null;
36
+ }
37
+ /** Advertised payment requirements + how to describe the protected resource. */
38
+ interface PaywallConfig {
39
+ /** Recipient address that collateral is claimed against. */
40
+ payTo: string;
41
+ /** Asset (token) address, or the zero address for native ETH. */
42
+ asset: string;
43
+ /** Network id (shorthand or CAIP-2) advertised to the payer. */
44
+ network: string;
45
+ /** Amount required, as an integer string in the asset's base units. */
46
+ amount: string;
47
+ /** Endpoint the payer calls to open/resolve a tab (advertised via `extra.tabEndpoint`). */
48
+ tabEndpoint: string;
49
+ scheme?: string;
50
+ x402Version?: number;
51
+ description?: string;
52
+ mimeType?: string;
53
+ maxTimeoutSeconds?: number;
54
+ /** Extra requirements (e.g. a V2 validation policy); merged over `tabEndpoint`. */
55
+ extra?: PaymentRequirementsExtra;
56
+ /** Override the described resource in the 402 body. */
57
+ resource?: Partial<X402ResourceInfo>;
58
+ /** Fully override the advertised 402 body. Takes precedence over every field above. */
59
+ buildRequirements?: (input: PaywallInput) => X402PaymentRequired;
60
+ }
61
+ interface PaywallGuarantee {
62
+ /** ABI-encoded guarantee claims (hex). */
63
+ claims: string;
64
+ /** BLS12-381 G2 signature (hex). */
65
+ signature: string;
66
+ /** Raw guarantee record returned by the core RPC. */
67
+ raw: Record<string, unknown>;
68
+ }
69
+ type PaywallDecision = {
70
+ ok: true;
71
+ guarantee: PaywallGuarantee;
72
+ responseHeaders: Record<string, string>;
73
+ } | {
74
+ ok: false;
75
+ status: 402;
76
+ headers: Record<string, string>;
77
+ body: X402PaymentRequired;
78
+ };
79
+ interface Paywall {
80
+ /** Low-level primitive: decide from a headers-in / decision-out request. */
81
+ protect(input: PaywallInput): Promise<PaywallDecision>;
82
+ /**
83
+ * Web-Fetch convenience wrapper. Returns a 402 `Response` when payment is
84
+ * required/invalid, or `{ ok: true, headers, guarantee }` for the adapter to
85
+ * merge onto the downstream response (the headers include `X-PAYMENT-RESPONSE`).
86
+ */
87
+ handle(request: Request): Promise<Response | {
88
+ ok: true;
89
+ headers: Headers;
90
+ guarantee: PaywallGuarantee;
91
+ }>;
92
+ }
93
+
94
+ /**
95
+ * Decode a base64 `X-PAYMENT` header into its x402 payment envelope.
96
+ *
97
+ * Runtime-neutral and edge-safe (no `Buffer`). Shared by the payer-side
98
+ * {@link X402Flow} and the server-side paywall so both agree on the wire format.
99
+ *
100
+ * @throws {@link X402Error} if the header is missing or not valid base64 JSON.
101
+ */
102
+ declare function parsePaymentHeader(header: string): X402PaymentEnvelope;
103
+
104
+ /**
105
+ * Create a runtime-neutral x402 paywall.
106
+ *
107
+ * The paywall advertises {@link X402PaymentRequired} when no valid `X-PAYMENT`
108
+ * header is present, and otherwise decodes the header and forwards the payment
109
+ * payload to the verifier's `issueGuarantee`. A successful guarantee means the
110
+ * payment is cryptographically covered → allow the request. On-chain settlement
111
+ * (the cycle-clearing `claimNetCredit` flow) is intentionally left as an
112
+ * out-of-band recipient operation.
113
+ *
114
+ * @param verifier - `client.rpc`, the SDK `Client`, or any {@link GuaranteeVerifier}.
115
+ * @param config - Advertised requirements for the protected resource.
116
+ */
117
+ declare function createPaywall(verifier: PaywallVerifier, config: PaywallConfig): Paywall;
118
+
119
+ export { type GuaranteeVerifier, PaymentRequirementsExtra, type Paywall, type PaywallConfig, type PaywallDecision, type PaywallGuarantee, type PaywallInput, type PaywallVerifier, type X402PaymentEnvelope, X402PaymentRequired, X402ResourceInfo, base64ToBytes, base64ToUtf8, bytesToBase64, createPaywall, parsePaymentHeader, utf8ToBase64 };
@@ -0,0 +1,119 @@
1
+ import { o as X402PaymentRequired, v as PaymentRequirementsExtra, r as X402ResourceInfo, x as X402PaymentEnvelopeV1, y as X402PaymentEnvelopeV2 } from './models-B15ouNYG.js';
2
+ export { p as PaymentRequirementsV2 } from './models-B15ouNYG.js';
3
+
4
+ /**
5
+ * Edge-safe base64 helpers.
6
+ *
7
+ * Uses only Web-standard `atob`/`btoa` + `TextEncoder`/`TextDecoder`, which are
8
+ * available on Node (>=16), Bun, Deno, browsers, and edge/worker runtimes — so
9
+ * the server paywall path never depends on Node's `Buffer`.
10
+ */
11
+ declare function base64ToBytes(b64: string): Uint8Array;
12
+ declare function bytesToBase64(bytes: Uint8Array): string;
13
+ declare function base64ToUtf8(b64: string): string;
14
+ declare function utf8ToBase64(text: string): string;
15
+
16
+ /** Decoded `X-PAYMENT` envelope: either the V1 or V2 wire shape. */
17
+ type X402PaymentEnvelope = X402PaymentEnvelopeV1 | X402PaymentEnvelopeV2;
18
+ /**
19
+ * Minimal verification surface the paywall needs: issue a payment guarantee for
20
+ * an already-serialized wire payload. The SDK `Client`'s `rpc` proxy and its
21
+ * `RpcProxy` both satisfy this structurally, so callers can pass `client.rpc`.
22
+ */
23
+ interface GuaranteeVerifier {
24
+ issueGuarantee(payload: unknown): Promise<Record<string, unknown>>;
25
+ }
26
+ /** A bare verifier, or anything exposing one at `.rpc` (e.g. the SDK `Client`). */
27
+ type PaywallVerifier = GuaranteeVerifier | {
28
+ rpc: GuaranteeVerifier;
29
+ };
30
+ /** What the framework adapter hands the paywall: method, url, and a header reader. */
31
+ interface PaywallInput {
32
+ method: string;
33
+ url: string;
34
+ /** Case-insensitive header lookup, returning `null` when absent. */
35
+ header: (name: string) => string | null;
36
+ }
37
+ /** Advertised payment requirements + how to describe the protected resource. */
38
+ interface PaywallConfig {
39
+ /** Recipient address that collateral is claimed against. */
40
+ payTo: string;
41
+ /** Asset (token) address, or the zero address for native ETH. */
42
+ asset: string;
43
+ /** Network id (shorthand or CAIP-2) advertised to the payer. */
44
+ network: string;
45
+ /** Amount required, as an integer string in the asset's base units. */
46
+ amount: string;
47
+ /** Endpoint the payer calls to open/resolve a tab (advertised via `extra.tabEndpoint`). */
48
+ tabEndpoint: string;
49
+ scheme?: string;
50
+ x402Version?: number;
51
+ description?: string;
52
+ mimeType?: string;
53
+ maxTimeoutSeconds?: number;
54
+ /** Extra requirements (e.g. a V2 validation policy); merged over `tabEndpoint`. */
55
+ extra?: PaymentRequirementsExtra;
56
+ /** Override the described resource in the 402 body. */
57
+ resource?: Partial<X402ResourceInfo>;
58
+ /** Fully override the advertised 402 body. Takes precedence over every field above. */
59
+ buildRequirements?: (input: PaywallInput) => X402PaymentRequired;
60
+ }
61
+ interface PaywallGuarantee {
62
+ /** ABI-encoded guarantee claims (hex). */
63
+ claims: string;
64
+ /** BLS12-381 G2 signature (hex). */
65
+ signature: string;
66
+ /** Raw guarantee record returned by the core RPC. */
67
+ raw: Record<string, unknown>;
68
+ }
69
+ type PaywallDecision = {
70
+ ok: true;
71
+ guarantee: PaywallGuarantee;
72
+ responseHeaders: Record<string, string>;
73
+ } | {
74
+ ok: false;
75
+ status: 402;
76
+ headers: Record<string, string>;
77
+ body: X402PaymentRequired;
78
+ };
79
+ interface Paywall {
80
+ /** Low-level primitive: decide from a headers-in / decision-out request. */
81
+ protect(input: PaywallInput): Promise<PaywallDecision>;
82
+ /**
83
+ * Web-Fetch convenience wrapper. Returns a 402 `Response` when payment is
84
+ * required/invalid, or `{ ok: true, headers, guarantee }` for the adapter to
85
+ * merge onto the downstream response (the headers include `X-PAYMENT-RESPONSE`).
86
+ */
87
+ handle(request: Request): Promise<Response | {
88
+ ok: true;
89
+ headers: Headers;
90
+ guarantee: PaywallGuarantee;
91
+ }>;
92
+ }
93
+
94
+ /**
95
+ * Decode a base64 `X-PAYMENT` header into its x402 payment envelope.
96
+ *
97
+ * Runtime-neutral and edge-safe (no `Buffer`). Shared by the payer-side
98
+ * {@link X402Flow} and the server-side paywall so both agree on the wire format.
99
+ *
100
+ * @throws {@link X402Error} if the header is missing or not valid base64 JSON.
101
+ */
102
+ declare function parsePaymentHeader(header: string): X402PaymentEnvelope;
103
+
104
+ /**
105
+ * Create a runtime-neutral x402 paywall.
106
+ *
107
+ * The paywall advertises {@link X402PaymentRequired} when no valid `X-PAYMENT`
108
+ * header is present, and otherwise decodes the header and forwards the payment
109
+ * payload to the verifier's `issueGuarantee`. A successful guarantee means the
110
+ * payment is cryptographically covered → allow the request. On-chain settlement
111
+ * (the cycle-clearing `claimNetCredit` flow) is intentionally left as an
112
+ * out-of-band recipient operation.
113
+ *
114
+ * @param verifier - `client.rpc`, the SDK `Client`, or any {@link GuaranteeVerifier}.
115
+ * @param config - Advertised requirements for the protected resource.
116
+ */
117
+ declare function createPaywall(verifier: PaywallVerifier, config: PaywallConfig): Paywall;
118
+
119
+ export { type GuaranteeVerifier, PaymentRequirementsExtra, type Paywall, type PaywallConfig, type PaywallDecision, type PaywallGuarantee, type PaywallInput, type PaywallVerifier, type X402PaymentEnvelope, X402PaymentRequired, X402ResourceInfo, base64ToBytes, base64ToUtf8, bytesToBase64, createPaywall, parsePaymentHeader, utf8ToBase64 };
package/dist/server.js ADDED
@@ -0,0 +1,165 @@
1
+ // src/server/base64.ts
2
+ function base64ToBytes(b64) {
3
+ const binary = atob(b64);
4
+ const bytes = new Uint8Array(binary.length);
5
+ for (let i = 0; i < binary.length; i += 1) {
6
+ bytes[i] = binary.charCodeAt(i);
7
+ }
8
+ return bytes;
9
+ }
10
+ function bytesToBase64(bytes) {
11
+ let binary = "";
12
+ for (let i = 0; i < bytes.length; i += 1) {
13
+ binary += String.fromCharCode(bytes[i]);
14
+ }
15
+ return btoa(binary);
16
+ }
17
+ function base64ToUtf8(b64) {
18
+ return new TextDecoder().decode(base64ToBytes(b64));
19
+ }
20
+ function utf8ToBase64(text) {
21
+ return bytesToBase64(new TextEncoder().encode(text));
22
+ }
23
+
24
+ // src/errors/index.ts
25
+ var FourMicaError = class extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = this.constructor.name;
29
+ }
30
+ };
31
+ var X402Error = class extends FourMicaError {
32
+ };
33
+
34
+ // src/server/envelope.ts
35
+ function parsePaymentHeader(header) {
36
+ if (!header || typeof header !== "string") {
37
+ throw new X402Error("missing payment header");
38
+ }
39
+ try {
40
+ const decoded = base64ToUtf8(header);
41
+ return JSON.parse(decoded);
42
+ } catch (err) {
43
+ throw new X402Error(`invalid payment header: ${String(err)}`);
44
+ }
45
+ }
46
+
47
+ // src/server/paywall.ts
48
+ var X402_VERSION = 1;
49
+ var DEFAULT_SCHEME = "4mica";
50
+ var PAYMENT_HEADER = "x-payment";
51
+ var PAYMENT_RESPONSE_HEADER = "X-PAYMENT-RESPONSE";
52
+ var JSON_HEADERS = {
53
+ "content-type": "application/json"
54
+ };
55
+ function resolveVerifier(verifier) {
56
+ if ("issueGuarantee" in verifier && typeof verifier.issueGuarantee === "function") {
57
+ return verifier;
58
+ }
59
+ const withRpc = verifier;
60
+ if (withRpc.rpc && typeof withRpc.rpc.issueGuarantee === "function") {
61
+ return withRpc.rpc;
62
+ }
63
+ throw new TypeError(
64
+ "paywall verifier must expose issueGuarantee() or a .rpc that does"
65
+ );
66
+ }
67
+ function buildResource(input, config) {
68
+ return {
69
+ url: config.resource?.url ?? input.url,
70
+ description: config.resource?.description ?? config.description ?? "",
71
+ mimeType: config.resource?.mimeType ?? config.mimeType ?? ""
72
+ };
73
+ }
74
+ function buildRequirements(input, config, error) {
75
+ if (config.buildRequirements) {
76
+ const custom = config.buildRequirements(input);
77
+ return error ? { ...custom, error } : custom;
78
+ }
79
+ const accepts = {
80
+ scheme: config.scheme ?? DEFAULT_SCHEME,
81
+ network: config.network,
82
+ asset: config.asset,
83
+ amount: config.amount,
84
+ payTo: config.payTo,
85
+ maxTimeoutSeconds: config.maxTimeoutSeconds,
86
+ extra: { tabEndpoint: config.tabEndpoint, ...config.extra }
87
+ };
88
+ return {
89
+ x402Version: config.x402Version ?? X402_VERSION,
90
+ ...error ? { error } : {},
91
+ resource: buildResource(input, config),
92
+ accepts: [accepts]
93
+ };
94
+ }
95
+ function requireResponse(input, config, error) {
96
+ return {
97
+ ok: false,
98
+ status: 402,
99
+ headers: { ...JSON_HEADERS },
100
+ body: buildRequirements(input, config, error)
101
+ };
102
+ }
103
+ function createPaywall(verifier, config) {
104
+ const guarantor = resolveVerifier(verifier);
105
+ async function protect(input) {
106
+ const paymentHeader = input.header(PAYMENT_HEADER);
107
+ if (!paymentHeader) {
108
+ return requireResponse(input, config);
109
+ }
110
+ let payload;
111
+ try {
112
+ payload = parsePaymentHeader(paymentHeader).payload;
113
+ } catch (err) {
114
+ return requireResponse(
115
+ input,
116
+ config,
117
+ err instanceof Error ? err.message : String(err)
118
+ );
119
+ }
120
+ try {
121
+ const raw = await guarantor.issueGuarantee(payload);
122
+ const claims = typeof raw.claims === "string" ? raw.claims : "";
123
+ const signature = typeof raw.signature === "string" ? raw.signature : "";
124
+ const guarantee = { claims, signature, raw };
125
+ return {
126
+ ok: true,
127
+ guarantee,
128
+ responseHeaders: {
129
+ [PAYMENT_RESPONSE_HEADER]: utf8ToBase64(
130
+ JSON.stringify({ success: true, guarantee: { claims, signature } })
131
+ )
132
+ }
133
+ };
134
+ } catch (err) {
135
+ return requireResponse(
136
+ input,
137
+ config,
138
+ err instanceof Error ? err.message : String(err)
139
+ );
140
+ }
141
+ }
142
+ async function handle(request) {
143
+ const decision = await protect({
144
+ method: request.method,
145
+ url: request.url,
146
+ header: (name) => request.headers.get(name)
147
+ });
148
+ if (!decision.ok) {
149
+ return new Response(JSON.stringify(decision.body), {
150
+ status: decision.status,
151
+ headers: decision.headers
152
+ });
153
+ }
154
+ return {
155
+ ok: true,
156
+ headers: new Headers(decision.responseHeaders),
157
+ guarantee: decision.guarantee
158
+ };
159
+ }
160
+ return { protect, handle };
161
+ }
162
+
163
+ export { base64ToBytes, base64ToUtf8, bytesToBase64, createPaywall, parsePaymentHeader, utf8ToBase64 };
164
+ //# sourceMappingURL=server.js.map
165
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/base64.ts","../src/errors/index.ts","../src/server/envelope.ts","../src/server/paywall.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["/**\n * Edge-safe base64 helpers.\n *\n * Uses only Web-standard `atob`/`btoa` + `TextEncoder`/`TextDecoder`, which are\n * available on Node (>=16), Bun, Deno, browsers, and edge/worker runtimes — so\n * the server paywall path never depends on Node's `Buffer`.\n */\n\nexport function base64ToBytes(b64: string): Uint8Array {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i] as number);\n }\n return btoa(binary);\n}\n\nexport function base64ToUtf8(b64: string): string {\n return new TextDecoder().decode(base64ToBytes(b64));\n}\n\nexport function utf8ToBase64(text: string): string {\n return bytesToBase64(new TextEncoder().encode(text));\n}\n","/** Base class for all 4Mica SDK errors. Sets `error.name` to the subclass name. */\nexport class FourMicaError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n/** Thrown when the SDK configuration is invalid (e.g. missing required fields or bad URL). */\nexport class ConfigError extends FourMicaError {}\n\n/** Thrown when a 4Mica core RPC call fails. Includes the HTTP status and raw response body. */\nexport class RpcError extends FourMicaError {\n readonly status?: number;\n readonly body?: unknown;\n\n constructor(message: string, options?: { status?: number; body?: unknown }) {\n super(message);\n this.status = options?.status;\n this.body = options?.body;\n }\n}\n\n/** Thrown when the SDK client fails to initialise (e.g. chain ID mismatch). */\nexport class ClientInitializationError extends FourMicaError {}\n\n/** Thrown when signing a payment claim fails (e.g. unsupported scheme, address mismatch). */\nexport class SigningError extends FourMicaError {}\n\n/** Thrown when an on-chain contract call fails or returns an unexpected result. */\nexport class ContractError extends FourMicaError {}\n\n/** Thrown when BLS certificate verification fails (e.g. domain mismatch, invalid encoding). */\nexport class VerificationError extends FourMicaError {}\n\n/** Thrown when an x402 HTTP payment flow encounters an error. */\nexport class X402Error extends FourMicaError {}\n\n/** Base class for authentication-related errors. */\nexport class AuthError extends FourMicaError {}\n\n/** Thrown when the auth URL is invalid or unreachable. */\nexport class AuthUrlError extends AuthError {}\n\n/** Thrown when a network-level error occurs during authentication. */\nexport class AuthTransportError extends AuthError {}\n\n/** Thrown when the auth server response cannot be decoded. */\nexport class AuthDecodeError extends AuthError {}\n\n/** Thrown when the auth server returns an error response. Includes HTTP status and body. */\nexport class AuthApiError extends AuthError {\n readonly status?: number;\n readonly body?: unknown;\n\n constructor(message: string, options?: { status?: number; body?: unknown }) {\n super(message);\n this.status = options?.status;\n this.body = options?.body;\n }\n}\n\n/** Thrown when auth configuration is invalid. */\nexport class AuthConfigError extends AuthError {}\n\n/** Thrown when an authenticated operation is attempted without auth being configured. */\nexport class AuthMissingConfigError extends AuthConfigError {}\n","import { X402Error } from \"@/errors\";\nimport { base64ToUtf8 } from \"@/server/base64\";\nimport type { X402PaymentEnvelope } from \"@/server/models\";\n\n/**\n * Decode a base64 `X-PAYMENT` header into its x402 payment envelope.\n *\n * Runtime-neutral and edge-safe (no `Buffer`). Shared by the payer-side\n * {@link X402Flow} and the server-side paywall so both agree on the wire format.\n *\n * @throws {@link X402Error} if the header is missing or not valid base64 JSON.\n */\nexport function parsePaymentHeader(header: string): X402PaymentEnvelope {\n if (!header || typeof header !== \"string\") {\n throw new X402Error(\"missing payment header\");\n }\n try {\n const decoded = base64ToUtf8(header);\n return JSON.parse(decoded) as X402PaymentEnvelope;\n } catch (err) {\n throw new X402Error(`invalid payment header: ${String(err)}`);\n }\n}\n","import { utf8ToBase64 } from \"@/server/base64\";\nimport { parsePaymentHeader } from \"@/server/envelope\";\nimport type {\n GuaranteeVerifier,\n Paywall,\n PaywallConfig,\n PaywallDecision,\n PaywallGuarantee,\n PaywallInput,\n PaywallVerifier,\n} from \"@/server/models\";\nimport type {\n PaymentRequirementsV2,\n X402PaymentRequired,\n X402ResourceInfo,\n} from \"@/x402/models\";\n\nconst X402_VERSION = 1;\nconst DEFAULT_SCHEME = \"4mica\";\nconst PAYMENT_HEADER = \"x-payment\";\nconst PAYMENT_RESPONSE_HEADER = \"X-PAYMENT-RESPONSE\";\nconst JSON_HEADERS: Record<string, string> = {\n \"content-type\": \"application/json\",\n};\n\nfunction resolveVerifier(verifier: PaywallVerifier): GuaranteeVerifier {\n if (\n \"issueGuarantee\" in verifier &&\n typeof (verifier as GuaranteeVerifier).issueGuarantee === \"function\"\n ) {\n return verifier as GuaranteeVerifier;\n }\n const withRpc = verifier as { rpc?: GuaranteeVerifier };\n if (withRpc.rpc && typeof withRpc.rpc.issueGuarantee === \"function\") {\n return withRpc.rpc;\n }\n throw new TypeError(\n \"paywall verifier must expose issueGuarantee() or a .rpc that does\",\n );\n}\n\nfunction buildResource(\n input: PaywallInput,\n config: PaywallConfig,\n): X402ResourceInfo {\n return {\n url: config.resource?.url ?? input.url,\n description: config.resource?.description ?? config.description ?? \"\",\n mimeType: config.resource?.mimeType ?? config.mimeType ?? \"\",\n };\n}\n\nfunction buildRequirements(\n input: PaywallInput,\n config: PaywallConfig,\n error?: string,\n): X402PaymentRequired {\n if (config.buildRequirements) {\n const custom = config.buildRequirements(input);\n return error ? { ...custom, error } : custom;\n }\n const accepts: PaymentRequirementsV2 = {\n scheme: config.scheme ?? DEFAULT_SCHEME,\n network: config.network,\n asset: config.asset,\n amount: config.amount,\n payTo: config.payTo,\n maxTimeoutSeconds: config.maxTimeoutSeconds,\n extra: { tabEndpoint: config.tabEndpoint, ...config.extra },\n };\n return {\n x402Version: config.x402Version ?? X402_VERSION,\n ...(error ? { error } : {}),\n resource: buildResource(input, config),\n accepts: [accepts],\n };\n}\n\nfunction requireResponse(\n input: PaywallInput,\n config: PaywallConfig,\n error?: string,\n): Extract<PaywallDecision, { ok: false }> {\n return {\n ok: false,\n status: 402,\n headers: { ...JSON_HEADERS },\n body: buildRequirements(input, config, error),\n };\n}\n\n/**\n * Create a runtime-neutral x402 paywall.\n *\n * The paywall advertises {@link X402PaymentRequired} when no valid `X-PAYMENT`\n * header is present, and otherwise decodes the header and forwards the payment\n * payload to the verifier's `issueGuarantee`. A successful guarantee means the\n * payment is cryptographically covered → allow the request. On-chain settlement\n * (the cycle-clearing `claimNetCredit` flow) is intentionally left as an\n * out-of-band recipient operation.\n *\n * @param verifier - `client.rpc`, the SDK `Client`, or any {@link GuaranteeVerifier}.\n * @param config - Advertised requirements for the protected resource.\n */\nexport function createPaywall(\n verifier: PaywallVerifier,\n config: PaywallConfig,\n): Paywall {\n const guarantor = resolveVerifier(verifier);\n\n async function protect(input: PaywallInput): Promise<PaywallDecision> {\n const paymentHeader = input.header(PAYMENT_HEADER);\n if (!paymentHeader) {\n return requireResponse(input, config);\n }\n\n let payload: unknown;\n try {\n payload = parsePaymentHeader(paymentHeader).payload;\n } catch (err) {\n return requireResponse(\n input,\n config,\n err instanceof Error ? err.message : String(err),\n );\n }\n\n try {\n const raw = await guarantor.issueGuarantee(payload);\n const claims = typeof raw.claims === \"string\" ? raw.claims : \"\";\n const signature = typeof raw.signature === \"string\" ? raw.signature : \"\";\n const guarantee: PaywallGuarantee = { claims, signature, raw };\n return {\n ok: true,\n guarantee,\n responseHeaders: {\n [PAYMENT_RESPONSE_HEADER]: utf8ToBase64(\n JSON.stringify({ success: true, guarantee: { claims, signature } }),\n ),\n },\n };\n } catch (err) {\n return requireResponse(\n input,\n config,\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n async function handle(request: Request) {\n const decision = await protect({\n method: request.method,\n url: request.url,\n header: (name) => request.headers.get(name),\n });\n if (!decision.ok) {\n return new Response(JSON.stringify(decision.body), {\n status: decision.status,\n headers: decision.headers,\n });\n }\n return {\n ok: true as const,\n headers: new Headers(decision.responseHeaders),\n guarantee: decision.guarantee,\n };\n }\n\n return { protect, handle };\n}\n"]}
package/package.json CHANGED
@@ -1,28 +1,48 @@
1
1
  {
2
2
  "name": "@4mica/sdk",
3
- "version": "1.2.17",
4
- "description": "TypeScript SDK for interacting with the 4Mica payment network",
3
+ "version": "1.3.1",
4
+ "description": "Universal, runtime-neutral TypeScript SDK for the 4Mica payment network",
5
5
  "license": "MIT",
6
+ "type": "module",
6
7
  "repository": {
7
8
  "type": "git",
8
- "url": "https://github.com/4mica-Network/ts-sdk-4mica.git"
9
+ "url": "https://github.com/4mica-Network/homepage.git",
10
+ "directory": "packages/sdk"
9
11
  },
10
- "homepage": "https://github.com/4mica-Network/ts-sdk-4mica#readme",
12
+ "homepage": "https://github.com/4mica-Network/homepage/tree/main/packages/sdk#readme",
11
13
  "bugs": {
12
- "url": "https://github.com/4mica-Network/ts-sdk-4mica/issues"
14
+ "url": "https://github.com/4mica-Network/homepage/issues"
13
15
  },
14
- "main": "dist/src/index.js",
15
- "types": "dist/src/index.d.ts",
16
+ "sideEffects": false,
17
+ "main": "./dist/index.cjs",
18
+ "module": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
16
20
  "exports": {
17
21
  ".": {
18
- "types": "./dist/src/index.d.ts",
19
- "default": "./dist/src/index.js"
20
- }
22
+ "import": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "require": {
27
+ "types": "./dist/index.d.cts",
28
+ "default": "./dist/index.cjs"
29
+ }
30
+ },
31
+ "./server": {
32
+ "import": {
33
+ "types": "./dist/server.d.ts",
34
+ "default": "./dist/server.js"
35
+ },
36
+ "require": {
37
+ "types": "./dist/server.d.cts",
38
+ "default": "./dist/server.cjs"
39
+ }
40
+ },
41
+ "./package.json": "./package.json"
21
42
  },
22
43
  "files": [
23
44
  "dist"
24
45
  ],
25
- "sideEffects": false,
26
46
  "engines": {
27
47
  "node": ">=18"
28
48
  },
@@ -33,48 +53,37 @@
33
53
  "4mica",
34
54
  "payments",
35
55
  "payment-network",
56
+ "x402",
36
57
  "blockchain",
37
58
  "sdk",
38
59
  "typescript",
39
- "ethers"
60
+ "viem"
40
61
  ],
41
- "scripts": {
42
- "clean": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\"",
43
- "build": "npm run clean && tsc -p tsconfig.build.json",
44
- "test": "vitest run",
45
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
46
- "example:base-sepolia:x402-v2": "node_modules/.bin/tsx examples/base-sepolia-x402-facilitator-e2e.ts",
47
- "example:manual:agents": "node_modules/.bin/tsx examples/manual-agents/demo.ts",
48
- "example:wachai:v2": "node_modules/.bin/tsx examples/wachai-v2-demo/demo.ts",
49
- "example:deposit": "node_modules/.bin/tsx examples/deposit.ts",
50
- "example:yield": "node_modules/.bin/tsx examples/yield.ts",
51
- "lint": "eslint . --ext .ts",
52
- "fmt": "prettier --check \"{src,tests}/**/*.{ts,js,json}\""
53
- },
54
62
  "dependencies": {
55
63
  "@noble/curves": "^2.2.0",
56
64
  "@quillai-network/wachai-validation-sdk": "^0.1.0",
57
- "viem": "^2.45.1"
65
+ "viem": "2.x"
58
66
  },
59
67
  "optionalDependencies": {
60
68
  "@coinbase/cdp-sdk": "^1.49.2"
61
69
  },
62
70
  "devDependencies": {
63
- "@4mica/x402": "^1.2.5",
64
- "@coinbase/cdp-sdk": "^1.49.2",
65
- "@eslint/js": "^9.39.2",
66
- "@types/node": "^25.2.0",
67
- "@typescript-eslint/eslint-plugin": "^8.54.0",
68
- "@typescript-eslint/parser": "^8.54.0",
69
- "dotenv-cli": "^11.0.0",
70
- "eslint": "^9.39.2",
71
- "eslint-config-prettier": "^10.1.8",
72
- "eslint-plugin-react": "^7.37.5",
73
- "globals": "^17.3.0",
74
- "prettier": "^3.8.1",
75
- "tsx": "^4.21.0",
76
- "typescript": "^5.3.3",
77
- "typescript-eslint": "^8.54.0",
78
- "vitest": "^4.0.17"
71
+ "@arethetypeswrong/cli": "^0.18.2",
72
+ "@types/node": "^24.10.1",
73
+ "publint": "^0.3.14",
74
+ "tsup": "^8.5.1",
75
+ "typescript": "^5.9.0",
76
+ "vitest": "^4.1.8",
77
+ "@4mica/tsconfig": "0.0.0"
78
+ },
79
+ "scripts": {
80
+ "build": "tsup",
81
+ "dev": "tsup --watch",
82
+ "clean": "rm -rf dist",
83
+ "typecheck": "tsc --noEmit",
84
+ "test": "vitest run",
85
+ "test:watch": "vitest",
86
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
87
+ "check:exports": "attw --pack . --profile node16 && publint --strict"
79
88
  }
80
- }
89
+ }
package/dist/package.json DELETED
@@ -1,80 +0,0 @@
1
- {
2
- "name": "@4mica/sdk",
3
- "version": "1.2.16",
4
- "description": "TypeScript SDK for interacting with the 4Mica payment network",
5
- "license": "MIT",
6
- "repository": {
7
- "type": "git",
8
- "url": "https://github.com/4mica-Network/ts-sdk-4mica.git"
9
- },
10
- "homepage": "https://github.com/4mica-Network/ts-sdk-4mica#readme",
11
- "bugs": {
12
- "url": "https://github.com/4mica-Network/ts-sdk-4mica/issues"
13
- },
14
- "main": "dist/src/index.js",
15
- "types": "dist/src/index.d.ts",
16
- "exports": {
17
- ".": {
18
- "types": "./dist/src/index.d.ts",
19
- "default": "./dist/src/index.js"
20
- }
21
- },
22
- "files": [
23
- "dist"
24
- ],
25
- "sideEffects": false,
26
- "engines": {
27
- "node": ">=18"
28
- },
29
- "publishConfig": {
30
- "access": "public"
31
- },
32
- "keywords": [
33
- "4mica",
34
- "payments",
35
- "payment-network",
36
- "blockchain",
37
- "sdk",
38
- "typescript",
39
- "ethers"
40
- ],
41
- "scripts": {
42
- "clean": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\"",
43
- "build": "npm run clean && tsc -p tsconfig.build.json",
44
- "test": "vitest run",
45
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
46
- "example:base-sepolia:x402-v2": "node_modules/.bin/tsx examples/base-sepolia-x402-facilitator-e2e.ts",
47
- "example:manual:agents": "node_modules/.bin/tsx examples/manual-agents/demo.ts",
48
- "example:wachai:v2": "node_modules/.bin/tsx examples/wachai-v2-demo/demo.ts",
49
- "example:deposit": "node_modules/.bin/tsx examples/deposit.ts",
50
- "example:yield": "node_modules/.bin/tsx examples/yield.ts",
51
- "lint": "eslint . --ext .ts",
52
- "fmt": "prettier --check \"{src,tests}/**/*.{ts,js,json}\""
53
- },
54
- "dependencies": {
55
- "@noble/curves": "^2.2.0",
56
- "@quillai-network/wachai-validation-sdk": "^0.1.0",
57
- "viem": "^2.45.1"
58
- },
59
- "optionalDependencies": {
60
- "@coinbase/cdp-sdk": "^1.49.2"
61
- },
62
- "devDependencies": {
63
- "@4mica/x402": "^1.2.5",
64
- "@coinbase/cdp-sdk": "^1.49.2",
65
- "@eslint/js": "^9.39.2",
66
- "@types/node": "^25.2.0",
67
- "@typescript-eslint/eslint-plugin": "^8.54.0",
68
- "@typescript-eslint/parser": "^8.54.0",
69
- "dotenv-cli": "^11.0.0",
70
- "eslint": "^9.39.2",
71
- "eslint-config-prettier": "^10.1.8",
72
- "eslint-plugin-react": "^7.37.5",
73
- "globals": "^17.3.0",
74
- "prettier": "^3.8.1",
75
- "tsx": "^4.21.0",
76
- "typescript": "^5.3.3",
77
- "typescript-eslint": "^8.54.0",
78
- "vitest": "^4.0.17"
79
- }
80
- }