mppx 0.4.12 → 0.5.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 (56) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/Expires.d.ts +7 -0
  3. package/dist/Expires.d.ts.map +1 -1
  4. package/dist/Expires.js +21 -0
  5. package/dist/Expires.js.map +1 -1
  6. package/dist/cli/account.d.ts.map +1 -1
  7. package/dist/cli/account.js +12 -2
  8. package/dist/cli/account.js.map +1 -1
  9. package/dist/server/Mppx.js +6 -5
  10. package/dist/server/Mppx.js.map +1 -1
  11. package/dist/stripe/server/Charge.d.ts.map +1 -1
  12. package/dist/stripe/server/Charge.js +3 -3
  13. package/dist/stripe/server/Charge.js.map +1 -1
  14. package/dist/tempo/Methods.d.ts +3 -0
  15. package/dist/tempo/Methods.d.ts.map +1 -1
  16. package/dist/tempo/Methods.js +1 -0
  17. package/dist/tempo/Methods.js.map +1 -1
  18. package/dist/tempo/client/Charge.d.ts +3 -0
  19. package/dist/tempo/client/Charge.d.ts.map +1 -1
  20. package/dist/tempo/client/Charge.js +18 -2
  21. package/dist/tempo/client/Charge.js.map +1 -1
  22. package/dist/tempo/client/Methods.d.ts +3 -0
  23. package/dist/tempo/client/Methods.d.ts.map +1 -1
  24. package/dist/tempo/internal/proof.d.ts +29 -0
  25. package/dist/tempo/internal/proof.d.ts.map +1 -0
  26. package/dist/tempo/internal/proof.js +32 -0
  27. package/dist/tempo/internal/proof.js.map +1 -0
  28. package/dist/tempo/server/Charge.d.ts +11 -3
  29. package/dist/tempo/server/Charge.d.ts.map +1 -1
  30. package/dist/tempo/server/Charge.js +54 -4
  31. package/dist/tempo/server/Charge.js.map +1 -1
  32. package/dist/tempo/server/Methods.d.ts +3 -0
  33. package/dist/tempo/server/Methods.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/src/Expires.ts +25 -0
  36. package/src/cli/account.ts +13 -2
  37. package/src/cli/cli.test.ts +230 -1
  38. package/src/middlewares/elysia.test.ts +130 -9
  39. package/src/middlewares/express.test.ts +123 -59
  40. package/src/middlewares/hono.test.ts +81 -39
  41. package/src/middlewares/nextjs.test.ts +162 -41
  42. package/src/server/Mppx.test.ts +86 -0
  43. package/src/server/Mppx.ts +5 -5
  44. package/src/stripe/server/Charge.ts +3 -7
  45. package/src/tempo/Methods.test.ts +26 -0
  46. package/src/tempo/Methods.ts +1 -0
  47. package/src/tempo/client/Charge.ts +26 -3
  48. package/src/tempo/internal/charge.test.ts +66 -0
  49. package/src/tempo/internal/proof.test.ts +83 -0
  50. package/src/tempo/internal/proof.ts +35 -0
  51. package/src/tempo/server/Charge.test.ts +660 -1
  52. package/src/tempo/server/Charge.ts +80 -5
  53. package/src/tempo/server/Session.test.ts +1123 -53
  54. package/src/tempo/server/internal/transport.test.ts +32 -0
  55. package/src/tempo/session/Chain.test.ts +35 -0
  56. package/src/tempo/session/Sse.test.ts +31 -0
@@ -1,8 +1,8 @@
1
1
  import { decodeFunctionData, keccak256, parseEventLogs } from 'viem';
2
- import { getTransactionReceipt, sendRawTransaction, sendRawTransactionSync, signTransaction, call as viem_call, } from 'viem/actions';
2
+ import { getTransactionReceipt, sendRawTransaction, sendRawTransactionSync, signTransaction, verifyTypedData, call as viem_call, } from 'viem/actions';
3
3
  import { tempo as tempo_chain } from 'viem/chains';
4
4
  import { Abis, Transaction } from 'viem/tempo';
5
- import { PaymentExpiredError } from '../../Errors.js';
5
+ import * as Expires from '../../Expires.js';
6
6
  import * as Method from '../../Method.js';
7
7
  import * as Store from '../../Store.js';
8
8
  import * as Client from '../../viem/Client.js';
@@ -11,6 +11,7 @@ import * as TempoAddress from '../internal/address.js';
11
11
  import * as Charge_internal from '../internal/charge.js';
12
12
  import * as defaults from '../internal/defaults.js';
13
13
  import * as FeePayer from '../internal/fee-payer.js';
14
+ import * as Proof from '../internal/proof.js';
14
15
  import * as Selectors from '../internal/selectors.js';
15
16
  import * as Methods from '../Methods.js';
16
17
  /**
@@ -26,6 +27,7 @@ import * as Methods from '../Methods.js';
26
27
  export function charge(parameters = {}) {
27
28
  const { amount, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, description, externalId, memo, waitForConfirmation = true, } = parameters;
28
29
  const store = (parameters.store ?? Store.memory());
30
+ const proofStore = parameters.store;
29
31
  const { recipient, feePayer, feePayerUrl } = Account.resolve(parameters);
30
32
  const getClient = Client.getResolver({
31
33
  chain: { ...tempo_chain, experimental_preconfirmationTime: 500 },
@@ -87,10 +89,12 @@ export function charge(parameters = {}) {
87
89
  const expires = challenge.expires;
88
90
  const currency = challengeRequest.currency;
89
91
  const recipient = challengeRequest.recipient;
90
- if (expires && new Date(expires) < new Date())
91
- throw new PaymentExpiredError({ expires });
92
+ Expires.assert(expires, challenge.id);
92
93
  const memo = methodDetails?.memo;
93
94
  const payload = credential.payload;
95
+ const isZeroAmount = BigInt(amount) === 0n;
96
+ if (isZeroAmount && payload.type !== 'proof')
97
+ throw new MismatchError('Zero-amount challenges require a proof credential.', {});
94
98
  switch (payload.type) {
95
99
  case 'hash': {
96
100
  const hash = payload.hash;
@@ -105,6 +109,38 @@ export function charge(parameters = {}) {
105
109
  await markHashUsed(store, hash);
106
110
  return toReceipt(receipt);
107
111
  }
112
+ case 'proof': {
113
+ if (!isZeroAmount)
114
+ throw new MismatchError('Proof credentials are only valid for zero-amount challenges.', {});
115
+ const expectedSource = credential.source;
116
+ if (!expectedSource)
117
+ throw new MismatchError('Proof credential must include a source.', {});
118
+ const resolvedChainId = challenge.request.methodDetails?.chainId ?? chainId;
119
+ const source = Proof.parseProofSource(expectedSource);
120
+ if (!source || source.chainId !== resolvedChainId) {
121
+ throw new MismatchError('Proof credential source is invalid.', {});
122
+ }
123
+ const valid = await verifyTypedData(client, {
124
+ address: source.address,
125
+ domain: Proof.domain(resolvedChainId),
126
+ types: Proof.types,
127
+ primaryType: 'Proof',
128
+ message: Proof.message(challenge.id),
129
+ signature: payload.signature,
130
+ });
131
+ if (!valid)
132
+ throw new MismatchError('Proof signature does not match source.', {});
133
+ if (proofStore) {
134
+ await assertProofUnused(proofStore, challenge.id);
135
+ await markProofUsed(proofStore, challenge.id);
136
+ }
137
+ return {
138
+ method: 'tempo',
139
+ status: 'success',
140
+ timestamp: new Date().toISOString(),
141
+ reference: challenge.id,
142
+ };
143
+ }
108
144
  case 'transaction': {
109
145
  const serializedTransaction = payload.signature;
110
146
  // Pre-broadcast dedup: catch exact byte-for-byte replays early.
@@ -332,6 +368,10 @@ function getHashStoreKey(hash) {
332
368
  return `mppx:charge:${hash.toLowerCase()}`;
333
369
  }
334
370
  /** @internal */
371
+ function getProofStoreKey(challengeId) {
372
+ return `mppx:charge:proof:${challengeId}`;
373
+ }
374
+ /** @internal */
335
375
  async function assertHashUnused(store, hash) {
336
376
  const seen = await store.get(getHashStoreKey(hash));
337
377
  if (seen !== null)
@@ -342,6 +382,16 @@ async function markHashUsed(store, hash) {
342
382
  await store.put(getHashStoreKey(hash), Date.now());
343
383
  }
344
384
  /** @internal */
385
+ async function assertProofUnused(store, challengeId) {
386
+ const seen = await store.get(getProofStoreKey(challengeId));
387
+ if (seen !== null)
388
+ throw new Error('Proof credential has already been used.');
389
+ }
390
+ /** @internal */
391
+ async function markProofUsed(store, challengeId) {
392
+ await store.put(getProofStoreKey(challengeId), Date.now());
393
+ }
394
+ /** @internal */
345
395
  function toReceipt(receipt) {
346
396
  const { status, transactionHash } = receipt;
347
397
  if (status !== 'success') {
@@ -1 +1 @@
1
- {"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,9 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
23
23
  }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
24
24
  signature: import("zod/mini").ZodMiniString<string>;
25
25
  type: import("zod/mini").ZodMiniLiteral<"transaction">;
26
+ }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
27
+ signature: import("zod/mini").ZodMiniString<string>;
28
+ type: import("zod/mini").ZodMiniLiteral<"proof">;
26
29
  }, import("zod/v4/core").$strip>], "type">;
27
30
  };
28
31
  readonly request: import("zod/mini").ZodMiniPipe<import("zod/mini").ZodMiniObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"Methods.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAKvF;AAED,yBAAiB,KAAK,CAAC;IACrB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;IAEjE,2EAA2E;IACpE,MAAM,MAAM,gBAAU,CAAA;IAC7B,gFAAgF;IACzE,MAAM,OAAO,iBAAW,CAAA;IAC/B,gFAAgF;IACzE,MAAM,MAAM,gBAAU,CAAA;CAC9B"}
1
+ {"version":3,"file":"Methods.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAKvF;AAED,yBAAiB,KAAK,CAAC;IACrB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;IAEjE,2EAA2E;IACpE,MAAM,MAAM,gBAAU,CAAA;IAC7B,gFAAgF;IACzE,MAAM,OAAO,iBAAW,CAAA;IAC/B,gFAAgF;IACzE,MAAM,MAAM,gBAAU,CAAA;CAC9B"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mppx",
3
3
  "type": "module",
4
- "version": "0.4.12",
4
+ "version": "0.5.1",
5
5
  "main": "./dist/index.js",
6
6
  "license": "MIT",
7
7
  "files": [
package/src/Expires.ts CHANGED
@@ -1,3 +1,28 @@
1
+ import { InvalidChallengeError, PaymentExpiredError } from './Errors.js'
2
+
3
+ /**
4
+ * Asserts that `expires` is present, well-formed, and not in the past.
5
+ *
6
+ * Throws `InvalidChallengeError` when missing or malformed,
7
+ * and `PaymentExpiredError` when the timestamp is in the past.
8
+ */
9
+ export function assert(
10
+ expires: string | undefined,
11
+ challengeId?: string,
12
+ ): asserts expires is string {
13
+ if (!expires)
14
+ throw new InvalidChallengeError({
15
+ ...(challengeId && { id: challengeId }),
16
+ reason: 'missing required expires field',
17
+ })
18
+ if (Number.isNaN(new Date(expires).getTime()))
19
+ throw new InvalidChallengeError({
20
+ ...(challengeId && { id: challengeId }),
21
+ reason: 'malformed expires timestamp',
22
+ })
23
+ if (new Date(expires) < new Date()) throw new PaymentExpiredError({ expires })
24
+ }
25
+
1
26
  /** Returns an ISO 8601 datetime string `n` days from now. */
2
27
  export function days(n: number) {
3
28
  return new Date(Date.now() + n * 24 * 60 * 60 * 1000).toISOString()
@@ -4,13 +4,19 @@ import * as os from 'node:os'
4
4
  import * as path from 'node:path'
5
5
 
6
6
  const SERVICE_NAME = 'mppx'
7
+ const defaultCommandTimeoutMs = 10_000
8
+
9
+ function commandTimeoutMs() {
10
+ const value = Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS ?? '', 10)
11
+ return Number.isFinite(value) && value > 0 ? value : defaultCommandTimeoutMs
12
+ }
7
13
 
8
14
  export function execCommand(
9
15
  command: string,
10
16
  args: string[],
11
17
  ): Promise<{ stdout: string; stderr: string; error: Error | null }> {
12
18
  return new Promise((resolve) => {
13
- child.execFile(command, args, (error, stdout, stderr) => {
19
+ child.execFile(command, args, { timeout: commandTimeoutMs() }, (error, stdout, stderr) => {
14
20
  resolve({ stdout: stdout.trim(), stderr: stderr.trim(), error })
15
21
  })
16
22
  })
@@ -134,14 +140,19 @@ export function createKeychain(account = 'main') {
134
140
  'account',
135
141
  account,
136
142
  ])
143
+ const timeout = setTimeout(() => proc.kill(), commandTimeoutMs())
137
144
  proc.stdin?.write(value)
138
145
  proc.stdin?.end()
139
146
  return new Promise((resolve, reject) => {
140
147
  proc.on('close', (code) => {
148
+ clearTimeout(timeout)
141
149
  if (code === 0) resolve()
142
150
  else reject(new Error(`secret-tool exited with code ${code}`))
143
151
  })
144
- proc.on('error', reject)
152
+ proc.on('error', (error) => {
153
+ clearTimeout(timeout)
154
+ reject(error)
155
+ })
145
156
  })
146
157
  }
147
158
  throw new Error(`Unsupported platform: ${platform}`)
@@ -10,9 +10,11 @@ import { afterAll, describe, expect, test } from 'vp/test'
10
10
  import * as Http from '~test/Http.js'
11
11
  import { rpcUrl } from '~test/tempo/prool.js'
12
12
  import { deployEscrow } from '~test/tempo/session.js'
13
- import { accounts, asset, client, fundAccount } from '~test/tempo/viem.js'
13
+ import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
14
14
 
15
+ import * as Challenge from '../Challenge.js'
15
16
  import * as Credential from '../Credential.js'
17
+ import * as Receipt from '../Receipt.js'
16
18
  import * as Mppx_server from '../server/Mppx.js'
17
19
  import { toNodeListener } from '../server/Mppx.js'
18
20
  import * as Store from '../Store.js'
@@ -327,6 +329,107 @@ describe('basic charge (examples/basic)', () => {
327
329
  }
328
330
  })
329
331
 
332
+ test(
333
+ 'zero-amount charge uses a proof credential and receives response',
334
+ { timeout: 120_000 },
335
+ async () => {
336
+ const server = Mppx_server.create({
337
+ methods: [tempo.charge({ getClient: () => client })],
338
+ realm: 'localhost',
339
+ secretKey: 'cli-test-secret',
340
+ })
341
+ let authorization: string | undefined
342
+
343
+ const httpServer = await Http.createServer(async (req, res) => {
344
+ authorization = req.headers.authorization
345
+ const result = await toNodeListener(
346
+ server.charge({
347
+ amount: '0',
348
+ currency: asset,
349
+ expires: new Date(Date.now() + 60_000).toISOString(),
350
+ recipient: accounts[0].address,
351
+ }),
352
+ )(req, res)
353
+ if (result.status === 402) return
354
+ res.end('zero-dollar-paid')
355
+ })
356
+
357
+ try {
358
+ const { output, exitCode } = await serve([httpServer.url, '--rpc-url', rpcUrl, '-s'], {
359
+ env: { MPPX_PRIVATE_KEY: testPrivateKey },
360
+ })
361
+ expect(exitCode).toBeUndefined()
362
+ expect(output).toContain('zero-dollar-paid')
363
+
364
+ const credential = Credential.deserialize<{ signature: string; type: 'proof' }>(
365
+ authorization!,
366
+ )
367
+ expect(credential.challenge.request.amount).toBe('0')
368
+ expect(credential.payload.type).toBe('proof')
369
+ expect(credential.payload.signature).toMatch(/^0x/)
370
+ expect(credential.source).toBe(`did:pkh:eip155:${chain.id}:${testAccount.address}`)
371
+ } finally {
372
+ httpServer.close()
373
+ }
374
+ },
375
+ )
376
+
377
+ test(
378
+ 'zero-amount charge with testnet currency omission uses a proof credential',
379
+ { timeout: 120_000 },
380
+ async () => {
381
+ const isTestnet = true
382
+ const mainnetCurrency = '0x20C00000000000000000000b9537d11c60E8b50' as `0x${string}`
383
+
384
+ const server = Mppx_server.create({
385
+ methods: [
386
+ tempo.charge({
387
+ getClient: () => client,
388
+ ...(isTestnet ? {} : { currency: mainnetCurrency }),
389
+ testnet: isTestnet,
390
+ }),
391
+ ],
392
+ realm: 'localhost',
393
+ secretKey: 'cli-test-secret',
394
+ })
395
+ let authorization: string | undefined
396
+
397
+ const httpServer = await Http.createServer(async (req, res) => {
398
+ authorization = req.headers.authorization
399
+ const result = await toNodeListener(
400
+ server.charge({
401
+ amount: '0',
402
+ chainId: chain.id,
403
+ expires: new Date(Date.now() + 60_000).toISOString(),
404
+ recipient: accounts[0].address,
405
+ }),
406
+ )(req, res)
407
+ if (result.status === 402) return
408
+ res.end('zero-dollar-testnet-paid')
409
+ })
410
+
411
+ try {
412
+ const { output, exitCode } = await serve([httpServer.url, '--rpc-url', rpcUrl, '-s'], {
413
+ env: { MPPX_PRIVATE_KEY: testPrivateKey },
414
+ })
415
+ expect(exitCode).toBeUndefined()
416
+ expect(output).toContain('zero-dollar-testnet-paid')
417
+
418
+ const credential = Credential.deserialize<{ signature: string; type: 'proof' }>(
419
+ authorization!,
420
+ )
421
+ expect(credential.challenge.request.amount).toBe('0')
422
+ expect(credential.challenge.request.currency).toBe(
423
+ '0x20c0000000000000000000000000000000000000',
424
+ )
425
+ expect(credential.payload.type).toBe('proof')
426
+ expect(credential.source).toBe(`did:pkh:eip155:${chain.id}:${testAccount.address}`)
427
+ } finally {
428
+ httpServer.close()
429
+ }
430
+ },
431
+ )
432
+
330
433
  test('error: no account found', { timeout: 60_000 }, async () => {
331
434
  const server = Mppx_server.create({
332
435
  methods: [tempo.charge({ getClient: () => client })],
@@ -1046,4 +1149,130 @@ describe('sign', () => {
1046
1149
  const parsed = JSON.parse(output.trim())
1047
1150
  expect(parsed.authorization).toMatch(/^Payment\s+\S+/)
1048
1151
  })
1152
+
1153
+ test(
1154
+ 'happy path: zero-amount challenge returns proof authorization accepted by live server',
1155
+ { timeout: 120_000 },
1156
+ async () => {
1157
+ const server = Mppx_server.create({
1158
+ methods: [tempo.charge({ getClient: () => client })],
1159
+ realm: 'cli-sign-zero',
1160
+ secretKey: 'cli-test-secret',
1161
+ })
1162
+
1163
+ const httpServer = await Http.createServer(async (req, res) => {
1164
+ const result = await toNodeListener(
1165
+ server.charge({
1166
+ amount: '0',
1167
+ currency: asset,
1168
+ expires: new Date(Date.now() + 60_000).toISOString(),
1169
+ recipient: accounts[0].address,
1170
+ }),
1171
+ )(req, res)
1172
+ if (result.status === 402) return
1173
+ res.end('zero-dollar-live-sign')
1174
+ })
1175
+
1176
+ try {
1177
+ const challengeResponse = await fetch(httpServer.url)
1178
+ expect(challengeResponse.status).toBe(402)
1179
+ const challenge = Challenge.fromResponse(challengeResponse)
1180
+
1181
+ const { output, exitCode } = await serve(
1182
+ ['sign', '--challenge', Challenge.serialize(challenge), '--rpc-url', rpcUrl],
1183
+ { env: { MPPX_PRIVATE_KEY: testPrivateKey } },
1184
+ )
1185
+
1186
+ expect(exitCode).toBeUndefined()
1187
+
1188
+ const authorization = output.trim()
1189
+ const credential = Credential.deserialize<{ signature: string; type: 'proof' }>(
1190
+ authorization,
1191
+ )
1192
+ expect(credential.challenge.request.amount).toBe('0')
1193
+ expect(credential.payload.type).toBe('proof')
1194
+ expect(credential.source).toBe(`did:pkh:eip155:${chain.id}:${testAccount.address}`)
1195
+
1196
+ const response = await fetch(httpServer.url, {
1197
+ headers: { Authorization: authorization },
1198
+ })
1199
+ expect(response.status).toBe(200)
1200
+ expect(await response.text()).toBe('zero-dollar-live-sign')
1201
+
1202
+ const receipt = Receipt.fromResponse(response)
1203
+ expect(receipt.reference).toBe(credential.challenge.id)
1204
+ } finally {
1205
+ httpServer.close()
1206
+ }
1207
+ },
1208
+ )
1209
+
1210
+ test(
1211
+ 'happy path: zero-amount testnet challenge without explicit currency is accepted by live server',
1212
+ { timeout: 120_000 },
1213
+ async () => {
1214
+ const isTestnet = true
1215
+ const mainnetCurrency = '0x20C00000000000000000000b9537d11c60E8b50' as `0x${string}`
1216
+
1217
+ const server = Mppx_server.create({
1218
+ methods: [
1219
+ tempo.charge({
1220
+ getClient: () => client,
1221
+ ...(isTestnet ? {} : { currency: mainnetCurrency }),
1222
+ testnet: isTestnet,
1223
+ }),
1224
+ ],
1225
+ realm: 'cli-sign-zero-testnet',
1226
+ secretKey: 'cli-test-secret',
1227
+ })
1228
+
1229
+ const httpServer = await Http.createServer(async (req, res) => {
1230
+ const result = await toNodeListener(
1231
+ server.charge({
1232
+ amount: '0',
1233
+ chainId: chain.id,
1234
+ expires: new Date(Date.now() + 60_000).toISOString(),
1235
+ recipient: accounts[0].address,
1236
+ }),
1237
+ )(req, res)
1238
+ if (result.status === 402) return
1239
+ res.end('zero-dollar-live-sign-testnet')
1240
+ })
1241
+
1242
+ try {
1243
+ const challengeResponse = await fetch(httpServer.url)
1244
+ expect(challengeResponse.status).toBe(402)
1245
+ const challenge = Challenge.fromResponse(challengeResponse)
1246
+
1247
+ const { output, exitCode } = await serve(
1248
+ ['sign', '--challenge', Challenge.serialize(challenge), '--rpc-url', rpcUrl],
1249
+ { env: { MPPX_PRIVATE_KEY: testPrivateKey } },
1250
+ )
1251
+
1252
+ expect(exitCode).toBeUndefined()
1253
+
1254
+ const authorization = output.trim()
1255
+ const credential = Credential.deserialize<{ signature: string; type: 'proof' }>(
1256
+ authorization,
1257
+ )
1258
+ expect(credential.challenge.request.amount).toBe('0')
1259
+ expect(credential.challenge.request.currency).toBe(
1260
+ '0x20c0000000000000000000000000000000000000',
1261
+ )
1262
+ expect(credential.payload.type).toBe('proof')
1263
+ expect(credential.source).toBe(`did:pkh:eip155:${chain.id}:${testAccount.address}`)
1264
+
1265
+ const response = await fetch(httpServer.url, {
1266
+ headers: { Authorization: authorization },
1267
+ })
1268
+ expect(response.status).toBe(200)
1269
+ expect(await response.text()).toBe('zero-dollar-live-sign-testnet')
1270
+
1271
+ const receipt = Receipt.fromResponse(response)
1272
+ expect(receipt.reference).toBe(credential.challenge.id)
1273
+ } finally {
1274
+ httpServer.close()
1275
+ }
1276
+ },
1277
+ )
1049
1278
  })