@openzeppelin/miden-multisig-client 0.16.0 → 0.16.2

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 (123) hide show
  1. package/README.md +58 -2
  2. package/dist/client.d.ts +12 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +12 -2
  5. package/dist/client.js.map +1 -1
  6. package/dist/client.test.js +7 -2
  7. package/dist/client.test.js.map +1 -1
  8. package/dist/index.d.ts +6 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +4 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/multisig.d.ts +65 -2
  13. package/dist/multisig.d.ts.map +1 -1
  14. package/dist/multisig.js +148 -15
  15. package/dist/multisig.js.map +1 -1
  16. package/dist/multisig.test.js +217 -13
  17. package/dist/multisig.test.js.map +1 -1
  18. package/dist/proposal/factory.d.ts.map +1 -1
  19. package/dist/proposal/factory.js +10 -0
  20. package/dist/proposal/factory.js.map +1 -1
  21. package/dist/proposal/factory.test.d.ts +2 -0
  22. package/dist/proposal/factory.test.d.ts.map +1 -0
  23. package/dist/proposal/factory.test.js +32 -0
  24. package/dist/proposal/factory.test.js.map +1 -0
  25. package/dist/prover/config.d.ts +16 -0
  26. package/dist/prover/config.d.ts.map +1 -0
  27. package/dist/prover/config.js +54 -0
  28. package/dist/prover/config.js.map +1 -0
  29. package/dist/prover/config.test.d.ts +2 -0
  30. package/dist/prover/config.test.d.ts.map +1 -0
  31. package/dist/prover/config.test.js +54 -0
  32. package/dist/prover/config.test.js.map +1 -0
  33. package/dist/prover/errors.d.ts +7 -0
  34. package/dist/prover/errors.d.ts.map +1 -0
  35. package/dist/prover/errors.js +10 -0
  36. package/dist/prover/errors.js.map +1 -0
  37. package/dist/prover/errors.test.d.ts +2 -0
  38. package/dist/prover/errors.test.d.ts.map +1 -0
  39. package/dist/prover/errors.test.js +29 -0
  40. package/dist/prover/errors.test.js.map +1 -0
  41. package/dist/prover/retry.d.ts +5 -0
  42. package/dist/prover/retry.d.ts.map +1 -0
  43. package/dist/prover/retry.js +9 -0
  44. package/dist/prover/retry.js.map +1 -0
  45. package/dist/prover/retry.test.d.ts +2 -0
  46. package/dist/prover/retry.test.d.ts.map +1 -0
  47. package/dist/prover/retry.test.js +20 -0
  48. package/dist/prover/retry.test.js.map +1 -0
  49. package/dist/prover/workflow.d.ts +11 -0
  50. package/dist/prover/workflow.d.ts.map +1 -0
  51. package/dist/prover/workflow.js +18 -0
  52. package/dist/prover/workflow.js.map +1 -0
  53. package/dist/prover/workflow.test.d.ts +2 -0
  54. package/dist/prover/workflow.test.d.ts.map +1 -0
  55. package/dist/prover/workflow.test.js +103 -0
  56. package/dist/prover/workflow.test.js.map +1 -0
  57. package/dist/retry/classify.d.ts +16 -0
  58. package/dist/retry/classify.d.ts.map +1 -0
  59. package/dist/retry/classify.js +187 -0
  60. package/dist/retry/classify.js.map +1 -0
  61. package/dist/retry/runtime.d.ts +13 -0
  62. package/dist/retry/runtime.d.ts.map +1 -0
  63. package/dist/retry/runtime.js +33 -0
  64. package/dist/retry/runtime.js.map +1 -0
  65. package/dist/rpc/config.d.ts +11 -0
  66. package/dist/rpc/config.d.ts.map +1 -0
  67. package/dist/rpc/config.js +17 -0
  68. package/dist/rpc/config.js.map +1 -0
  69. package/dist/rpc/config.test.d.ts +2 -0
  70. package/dist/rpc/config.test.d.ts.map +1 -0
  71. package/dist/rpc/config.test.js +24 -0
  72. package/dist/rpc/config.test.js.map +1 -0
  73. package/dist/rpc/errors.d.ts +2 -0
  74. package/dist/rpc/errors.d.ts.map +1 -0
  75. package/dist/rpc/errors.js +11 -0
  76. package/dist/rpc/errors.js.map +1 -0
  77. package/dist/rpc/errors.test.d.ts +2 -0
  78. package/dist/rpc/errors.test.d.ts.map +1 -0
  79. package/dist/rpc/errors.test.js +34 -0
  80. package/dist/rpc/errors.test.js.map +1 -0
  81. package/dist/rpc/retry.d.ts +4 -0
  82. package/dist/rpc/retry.d.ts.map +1 -0
  83. package/dist/rpc/retry.js +6 -0
  84. package/dist/rpc/retry.js.map +1 -0
  85. package/dist/rpc/retry.test.d.ts +2 -0
  86. package/dist/rpc/retry.test.d.ts.map +1 -0
  87. package/dist/rpc/retry.test.js +98 -0
  88. package/dist/rpc/retry.test.js.map +1 -0
  89. package/dist/transaction/p2id.d.ts +8 -1
  90. package/dist/transaction/p2id.d.ts.map +1 -1
  91. package/dist/transaction/p2id.js +12 -3
  92. package/dist/transaction/p2id.js.map +1 -1
  93. package/dist/transaction.d.ts +1 -1
  94. package/dist/transaction.d.ts.map +1 -1
  95. package/dist/transaction.js +1 -1
  96. package/dist/transaction.js.map +1 -1
  97. package/package.json +2 -2
  98. package/src/client.test.ts +8 -2
  99. package/src/client.ts +28 -2
  100. package/src/index.ts +6 -0
  101. package/src/multisig.test.ts +263 -17
  102. package/src/multisig.ts +201 -14
  103. package/src/proposal/factory.test.ts +40 -0
  104. package/src/proposal/factory.ts +11 -1
  105. package/src/prover/config.test.ts +90 -0
  106. package/src/prover/config.ts +78 -0
  107. package/src/prover/errors.test.ts +61 -0
  108. package/src/prover/errors.ts +10 -0
  109. package/src/prover/retry.test.ts +38 -0
  110. package/src/prover/retry.ts +21 -0
  111. package/src/prover/test-node.d.ts +6 -0
  112. package/src/prover/workflow.test.ts +140 -0
  113. package/src/prover/workflow.ts +19 -0
  114. package/src/retry/classify.ts +220 -0
  115. package/src/retry/runtime.ts +45 -0
  116. package/src/rpc/config.test.ts +45 -0
  117. package/src/rpc/config.ts +30 -0
  118. package/src/rpc/errors.test.ts +69 -0
  119. package/src/rpc/errors.ts +12 -0
  120. package/src/rpc/retry.test.ts +144 -0
  121. package/src/rpc/retry.ts +12 -0
  122. package/src/transaction/p2id.ts +29 -10
  123. package/src/transaction.ts +1 -0
@@ -83,6 +83,10 @@ export class ProposalFactory {
83
83
  };
84
84
  }
85
85
  toStatus(status, proposalType, signatures) {
86
+ // The explicit widening keeps this compiling against published
87
+ // @openzeppelin/guardian-client types that predate the `retained`
88
+ // status (issue #345); it becomes redundant — but stays correct —
89
+ // once the lockfile picks up a release that includes it.
86
90
  switch (status.status) {
87
91
  case 'pending': {
88
92
  const signaturesRequired = this.options.resolveRequiredSignatures(proposalType);
@@ -91,6 +95,12 @@ export class ProposalFactory {
91
95
  case 'candidate':
92
96
  return 'ready';
93
97
  case 'canonical':
98
+ // A retained delta left the active candidate path (issue #345):
99
+ // no longer signable or submittable, so it is finalized from the
100
+ // proposal list's point of view. Whether its transaction landed is
101
+ // resolved by background reconciliation, surfaced via the delta
102
+ // status, not here.
103
+ case 'retained':
94
104
  case 'discarded':
95
105
  return 'finalized';
96
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/proposal/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/proposal/factory.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAQrD,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEhE,eAAe,CAAC,SAAiB;QAC/B,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,gCAAgC,CAC9B,UAAkB,EAClB,eAAuB,EACvB,OAAe;QAEf,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,8BAA8B,CAAC,eAAe,CAAC,CAAC,CAAC;QAC7F,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,gBAAgB,KAAK,kBAAkB,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,gBAAgB,gBAAgB,8BAA8B,kBAAkB,EAAE,CAC7F,CAAC;QACJ,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,SAAS,CACP,KAAkB,EAClB,UAAkB,EAClB,QAA2B,EAC3B,qBAA+C,EAAE;QAEjD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,oBAAoB,GAAG,IAAI,CAAC,gCAAgC,CAChE,UAAU,EACV,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EACjC,kBAAkB,CACnB,CAAC;QAEF,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,CACrD,QAAQ,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC5E,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,kBAAkB,CAC5C,kBAAkB,EAClB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAC9B,yCAAyC,oBAAoB,EAAE,CAChE,CAAC,OAAO,EAAE,CAAC;QAEZ,MAAM,gBAAgB,GACpB,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAC/B,CAAC,CAAC,IAAI,kBAAkB,CACpB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;aAC/B,CAAC,CAAC,EACH,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAC9B,0CAA0C,oBAAoB,EAAE,CACjE,CAAC,OAAO,EAAE;YACb,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAExF,OAAO;YACL,EAAE,EAAE,oBAAoB;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC;YAC9E,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI;YAC5C,UAAU;YACV,QAAQ,EAAE,gBAAgB;SAC3B,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,QAA0B;QACrC,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,oBAAoB,GAAG,IAAI,CAAC,gCAAgC,CAChE,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,eAAe,EACxB,kBAAkB,CACnB,CAAC;QAEF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,kBAAkB,CACvC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC;YAC5C,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CACb,6DAA6D,SAAS,CAAC,UAAU,uBAAuB,CACzG,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,UAAU;gBAC9B,SAAS,EACP,MAAM,KAAK,OAAO;oBAChB,CAAC,CAAC;wBACE,MAAM;wBACN,SAAS,EAAE,SAAS,CAAC,YAAY;wBACjC,SAAS,EAAE,SAAS,CAAC,SAAS;qBAC/B;oBACH,CAAC,CAAC;wBACE,MAAM;wBACN,SAAS,EAAE,SAAS,CAAC,YAAY;qBAClC;gBACP,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC3D,CAAC;QACJ,CAAC,CAAC,EACF,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAC9B,sCAAsC,CACvC,CAAC,OAAO,EAAE,CAAC;QAEZ,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEzF,OAAO;YACL,EAAE,EAAE,oBAAoB;YACxB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACrE,SAAS,EAAE,QAAQ,CAAC,eAAe;YACnC,UAAU;YACV,QAAQ;SACT,CAAC;IACJ,CAAC;IAEO,QAAQ,CACd,MAAmB,EACnB,YAA0B,EAC1B,UAAoC;QAEpC,+DAA+D;QAC/D,kEAAkE;QAClE,kEAAkE;QAClE,yDAAyD;QACzD,QAAQ,MAAM,CAAC,MAA4C,EAAE,CAAC;YAC5D,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;gBAChF,OAAO,UAAU,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,CAAC;YACD,KAAK,WAAW;gBACd,OAAO,OAAO,CAAC;YACjB,KAAK,WAAW,CAAC;YACjB,gEAAgE;YAChE,iEAAiE;YACjE,mEAAmE;YACnE,gEAAgE;YAChE,oBAAoB;YACpB,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW;gBACd,OAAO,WAAW,CAAC;QACvB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=factory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.test.d.ts","sourceRoot":"","sources":["../../src/proposal/factory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ProposalFactory } from './factory.js';
3
+ describe('ProposalFactory.toStatus', () => {
4
+ const factory = new ProposalFactory({
5
+ accountId: '0x' + 'a'.repeat(30),
6
+ signerCommitments: [],
7
+ resolveRequiredSignatures: () => 2,
8
+ });
9
+ // TS `private` is compile-time only; the mapping is worth pinning
10
+ // without dragging a full tx summary through `fromDelta`.
11
+ const toStatus = (status) => factory
12
+ .toStatus(status, 'p2id', []);
13
+ it('maps every terminal delta status to finalized (issue #345)', () => {
14
+ // A retained delta left the active candidate path: no longer
15
+ // signable, so finalized here — whether it landed is resolved by
16
+ // background reconciliation via the delta status, not the proposal
17
+ // list.
18
+ expect(toStatus({ status: 'canonical', timestamp: 't' })).toBe('finalized');
19
+ // Cast until the published guardian-client types include `retained`.
20
+ expect(toStatus({
21
+ status: 'retained',
22
+ timestamp: 't',
23
+ reason: 'retry_exhausted',
24
+ })).toBe('finalized');
25
+ expect(toStatus({ status: 'discarded', timestamp: 't' })).toBe('finalized');
26
+ });
27
+ it('maps active statuses to pending/ready', () => {
28
+ expect(toStatus({ status: 'candidate', timestamp: 't' })).toBe('ready');
29
+ expect(toStatus({ status: 'pending', timestamp: 't', proposerId: 'p', cosignerSigs: [] })).toBe('pending');
30
+ });
31
+ });
32
+ //# sourceMappingURL=factory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.test.js","sourceRoot":"","sources":["../../src/proposal/factory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,SAAS,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,iBAAiB,EAAE,EAAE;QACrB,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,kEAAkE;IAClE,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CAAC,MAAmB,EAAE,EAAE,CACtC,OAA2F;SACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAElC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,6DAA6D;QAC7D,iEAAiE;QACjE,mEAAmE;QACnE,QAAQ;QACR,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5E,qEAAqE;QACrE,MAAM,CACJ,QAAQ,CAAC;YACP,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,iBAAiB;SACA,CAAC,CAC7B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,CACJ,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CACnF,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { TransactionProver } from '@miden-sdk/miden-sdk';
2
+ export interface ProverRetryPolicy {
3
+ maxAttempts?: number;
4
+ }
5
+ export interface ProverConfig {
6
+ url?: string;
7
+ retry?: ProverRetryPolicy;
8
+ }
9
+ export interface ResolvedProverConfig {
10
+ readonly kind: 'injected' | 'remote';
11
+ readonly url?: string;
12
+ readonly maxAttempts: number;
13
+ createProver(): TransactionProver | undefined;
14
+ }
15
+ export declare function resolveProverConfig(config: ProverConfig | undefined, defaultProver: TransactionProver | null): ResolvedProverConfig;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/prover/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,YAAY,IAAI,iBAAiB,GAAG,SAAS,CAAC;CAC/C;AA6BD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,aAAa,EAAE,iBAAiB,GAAG,IAAI,GACtC,oBAAoB,CA6BtB"}
@@ -0,0 +1,54 @@
1
+ import { TransactionProver } from '@miden-sdk/miden-sdk';
2
+ const DEFAULT_MAX_ATTEMPTS = 2;
3
+ const MAX_U32 = 4_294_967_295;
4
+ function normalizeMaxAttempts(value) {
5
+ if (value === undefined) {
6
+ return DEFAULT_MAX_ATTEMPTS;
7
+ }
8
+ if (!Number.isFinite(value) || !Number.isInteger(value) || value < 0 || value > MAX_U32) {
9
+ throw new Error('prover.retry.maxAttempts must be an integer between 0 and 4294967295');
10
+ }
11
+ return Math.max(1, value);
12
+ }
13
+ function normalizeUrl(value) {
14
+ const trimmed = value.trim();
15
+ let parsed;
16
+ try {
17
+ parsed = new URL(trimmed);
18
+ }
19
+ catch {
20
+ throw new Error('prover.url must be an absolute HTTP(S) URL with a host');
21
+ }
22
+ if (!['http:', 'https:'].includes(parsed.protocol) || parsed.hostname === '') {
23
+ throw new Error('prover.url must be an absolute HTTP(S) URL with a host');
24
+ }
25
+ return parsed.href;
26
+ }
27
+ export function resolveProverConfig(config, defaultProver) {
28
+ const maxAttempts = normalizeMaxAttempts(config?.retry?.maxAttempts);
29
+ if (config?.url !== undefined) {
30
+ const url = normalizeUrl(config.url);
31
+ return {
32
+ kind: 'remote',
33
+ url,
34
+ maxAttempts,
35
+ createProver: () => TransactionProver.newRemoteProver(url),
36
+ };
37
+ }
38
+ const endpoint = defaultProver?.endpoint();
39
+ if (defaultProver === null || endpoint === undefined) {
40
+ return {
41
+ kind: 'injected',
42
+ maxAttempts: 1,
43
+ createProver: () => undefined,
44
+ };
45
+ }
46
+ const descriptor = defaultProver.serialize();
47
+ return {
48
+ kind: 'remote',
49
+ url: endpoint,
50
+ maxAttempts,
51
+ createProver: () => TransactionProver.deserialize(descriptor),
52
+ };
53
+ }
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/prover/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAkBzD,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAgC,EAChC,aAAuC;IAEvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAErE,IAAI,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,GAAG;YACH,WAAW;YACX,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC3C,IAAI,aAAa,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,QAAQ;QACb,WAAW;QACX,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC;KAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/prover/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { resolveProverConfig } from './config.js';
4
+ function fixtures() {
5
+ return JSON.parse(readFileSync(new URL('../../../../fixtures/miden-multisig-client/prover-policy-fixtures.json', import.meta.url), 'utf8'));
6
+ }
7
+ describe('resolveProverConfig', () => {
8
+ it('matches shared URL vectors', () => {
9
+ for (const fixture of fixtures().endpoints) {
10
+ const resolve = () => resolveProverConfig({ url: fixture.input }, null);
11
+ if (fixture.valid) {
12
+ expect(resolve().url, fixture.input).toBe(fixture.canonical);
13
+ }
14
+ else {
15
+ expect(resolve, fixture.input).toThrow();
16
+ }
17
+ }
18
+ });
19
+ it('matches shared attempt-budget vectors for remote proving', () => {
20
+ for (const fixture of fixtures().attemptBudgets) {
21
+ const retry = fixture.input === null ? undefined : { maxAttempts: fixture.input };
22
+ const resolved = resolveProverConfig({ url: 'https://prover.example', retry }, null);
23
+ expect(resolved.maxAttempts).toBe(fixture.normalized);
24
+ }
25
+ });
26
+ it.each([-1, 1.5, Number.NaN, Number.POSITIVE_INFINITY, 4_294_967_296])('rejects invalid maxAttempts value %s', (maxAttempts) => {
27
+ expect(() => resolveProverConfig({ url: 'https://prover.example', retry: { maxAttempts } }, null)).toThrow('prover.retry.maxAttempts');
28
+ });
29
+ it('keeps an endpoint-less injected prover at one attempt without serializing it', () => {
30
+ const serialize = () => {
31
+ throw new Error('callback provers cannot be serialized');
32
+ };
33
+ const callback = {
34
+ endpoint: () => undefined,
35
+ serialize,
36
+ };
37
+ expect(resolveProverConfig({ retry: { maxAttempts: 5 } }, callback)).toMatchObject({
38
+ kind: 'injected',
39
+ maxAttempts: 1,
40
+ });
41
+ });
42
+ it('lets a custom remote URL override an injected local prover', () => {
43
+ const local = {
44
+ serialize: () => 'local',
45
+ endpoint: () => undefined,
46
+ };
47
+ expect(resolveProverConfig({ url: 'https://prover.example' }, local)).toMatchObject({
48
+ kind: 'remote',
49
+ url: 'https://prover.example/',
50
+ maxAttempts: 2,
51
+ });
52
+ });
53
+ });
54
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/prover/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Prover-policy classification: the shared classifier with no transport-text
3
+ * extras — a bare "connection error" from a prover is treated as its
4
+ * considered answer.
5
+ */
6
+ export declare function isTransientProverError(error: unknown): boolean;
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/prover/errors.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,10 @@
1
+ import { isTransientError } from '../retry/classify.js';
2
+ /**
3
+ * Prover-policy classification: the shared classifier with no transport-text
4
+ * extras — a bare "connection error" from a prover is treated as its
5
+ * considered answer.
6
+ */
7
+ export function isTransientProverError(error) {
8
+ return isTransientError(error);
9
+ }
10
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/prover/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/prover/errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { isTransientProverError } from './errors.js';
4
+ function fixtures() {
5
+ return JSON.parse(readFileSync(new URL('../../../../fixtures/miden-multisig-client/prover-policy-fixtures.json', import.meta.url), 'utf8'));
6
+ }
7
+ describe('isTransientProverError', () => {
8
+ it('matches every shared classification vector', () => {
9
+ for (const fixture of fixtures().classifications) {
10
+ const error = fixture.chain.reduceRight((cause, item) => ({ ...item, cause }), undefined);
11
+ expect(isTransientProverError(error), fixture.name).toBe(fixture.transient);
12
+ }
13
+ });
14
+ it('stops safely on cyclic cause graphs', () => {
15
+ const error = { code: 'Unknown', message: 'not retryable' };
16
+ error.cause = error;
17
+ expect(isTransientProverError(error)).toBe(false);
18
+ });
19
+ it('recognizes numeric gRPC status codes', () => {
20
+ expect(isTransientProverError({ code: 14, message: 'unavailable' })).toBe(true);
21
+ expect(isTransientProverError({ code: 3, message: 'timeout text' })).toBe(false);
22
+ });
23
+ it('reads grpc code wording out of plain message text', () => {
24
+ expect(isTransientProverError(new Error('grpc code: NotFound'))).toBe(false);
25
+ expect(isTransientProverError(new Error('grpc code: Internal; nested timeout'))).toBe(false);
26
+ expect(isTransientProverError(new Error('grpc code: Unavailable'))).toBe(true);
27
+ });
28
+ });
29
+ //# sourceMappingURL=errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/prover/errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAiBrD,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,KAAK,CACf,YAAY,CACV,IAAI,GAAG,CACL,wEAAwE,EACxE,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,MAAM,CACP,CACU,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CACrC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EACrC,SAAS,CACV,CAAC;YACF,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QAC1E,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,MAAM,CACJ,sBAAsB,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CACzE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,MAAM,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TransactionExecution, TransactionProof } from '@miden-sdk/miden-sdk';
2
+ import type { ResolvedProverConfig } from './config.js';
3
+ import type { RetryRuntime } from '../retry/runtime.js';
4
+ export declare function proveWithRetry(execution: TransactionExecution, config: ResolvedProverConfig, runtime?: RetryRuntime): Promise<TransactionProof>;
5
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/prover/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAsB,cAAc,CAClC,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,YAAqC,GAC7C,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
@@ -0,0 +1,9 @@
1
+ import { isTransientProverError } from './errors.js';
2
+ import { productionRetryRuntime, retryTransient } from '../retry/runtime.js';
3
+ export async function proveWithRetry(execution, config, runtime = productionRetryRuntime) {
4
+ return retryTransient(async () => {
5
+ const prover = config.createProver();
6
+ return prover === undefined ? await execution.prove() : await execution.prove({ prover });
7
+ }, config.maxAttempts, isTransientProverError, runtime);
8
+ }
9
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/prover/retry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAA+B,EAC/B,MAA4B,EAC5B,UAAwB,sBAAsB;IAE9C,OAAO,cAAc,CACnB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QACrC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5F,CAAC,EACD,MAAM,CAAC,WAAW,EAClB,sBAAsB,EACtB,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=retry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.test.d.ts","sourceRoot":"","sources":["../../src/prover/retry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { retryDelay } from '../retry/runtime.js';
4
+ function fixtures() {
5
+ return JSON.parse(readFileSync(new URL('../../../../fixtures/miden-multisig-client/prover-policy-fixtures.json', import.meta.url), 'utf8'));
6
+ }
7
+ describe('retryDelay', () => {
8
+ it('matches every shared delay vector', () => {
9
+ for (const fixture of fixtures().delays) {
10
+ expect(retryDelay(fixture.retryIndex, fixture.unitRandom)).toBe(fixture.delayMs);
11
+ }
12
+ });
13
+ it('remains capped after numeric overflow', () => {
14
+ expect(retryDelay(Number.MAX_SAFE_INTEGER, 0.5)).toBe(8_000);
15
+ });
16
+ it.each([Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY])('uses neutral jitter for non-finite randomness', (unitRandom) => {
17
+ expect(retryDelay(0, unitRandom)).toBe(500);
18
+ });
19
+ });
20
+ //# sourceMappingURL=retry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../src/prover/retry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMjD,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,KAAK,CACf,YAAY,CACV,IAAI,GAAG,CACL,wEAAwE,EACxE,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,MAAM,CACP,CACU,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CACvE,+CAA+C,EAC/C,CAAC,UAAU,EAAE,EAAE;QACb,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AccountId, MidenClient, TransactionRequest } from '@miden-sdk/miden-sdk';
2
+ import type { ResolvedProverConfig } from './config.js';
3
+ import type { RetryRuntime } from '../retry/runtime.js';
4
+ export declare class ProverWorkflow {
5
+ private readonly client;
6
+ private readonly config;
7
+ private readonly runtime?;
8
+ constructor(client: MidenClient, config: ResolvedProverConfig, runtime?: RetryRuntime | undefined);
9
+ submit(accountId: AccountId, request: TransactionRequest): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/prover/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,YAAY,YAAA;IAGnC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAM/E"}
@@ -0,0 +1,18 @@
1
+ import { proveWithRetry } from './retry.js';
2
+ export class ProverWorkflow {
3
+ client;
4
+ config;
5
+ runtime;
6
+ constructor(client, config, runtime) {
7
+ this.client = client;
8
+ this.config = config;
9
+ this.runtime = runtime;
10
+ }
11
+ async submit(accountId, request) {
12
+ const execution = await this.client.transactions.executeRequest(accountId, request);
13
+ const proof = await proveWithRetry(execution, this.config, this.runtime);
14
+ const submission = await proof.submit();
15
+ await submission.apply();
16
+ }
17
+ }
18
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/prover/workflow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,OAAO,cAAc;IAEN;IACA;IACA;IAHnB,YACmB,MAAmB,EACnB,MAA4B,EAC5B,OAAsB;QAFtB,WAAM,GAAN,MAAM,CAAa;QACnB,WAAM,GAAN,MAAM,CAAsB;QAC5B,YAAO,GAAP,OAAO,CAAe;IACtC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,OAA2B;QAC5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.d.ts","sourceRoot":"","sources":["../../src/prover/workflow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { ProverWorkflow } from './workflow.js';
3
+ function asType(value) {
4
+ return value;
5
+ }
6
+ describe('ProverWorkflow', () => {
7
+ it('executes once, retries proof with fresh provers, submits once, and applies once', async () => {
8
+ const transient = Object.assign(new Error('temporarily unavailable'), {
9
+ code: 'Unavailable',
10
+ });
11
+ const apply = vi.fn().mockResolvedValue({});
12
+ const submit = vi.fn().mockResolvedValue({ apply });
13
+ const prove = vi.fn().mockRejectedValueOnce(transient).mockResolvedValueOnce({ submit });
14
+ const execution = { marker: 'unchanged', prove };
15
+ const executeRequest = vi.fn().mockResolvedValue(execution);
16
+ const client = {
17
+ transactions: { executeRequest },
18
+ };
19
+ const provers = [];
20
+ const config = {
21
+ kind: 'remote',
22
+ url: 'https://prover.example/',
23
+ maxAttempts: 2,
24
+ createProver: () => {
25
+ const prover = asType({});
26
+ provers.push(prover);
27
+ return prover;
28
+ },
29
+ };
30
+ const runtime = {
31
+ sleep: vi.fn().mockResolvedValue(undefined),
32
+ unitRandom: () => 0.5,
33
+ };
34
+ const workflow = new ProverWorkflow(asType(client), config, runtime);
35
+ await workflow.submit(asType({}), asType({}));
36
+ expect(executeRequest).toHaveBeenCalledTimes(1);
37
+ expect(prove).toHaveBeenCalledTimes(2);
38
+ expect(provers).toHaveLength(2);
39
+ expect(provers[0]).not.toBe(provers[1]);
40
+ expect(submit).toHaveBeenCalledTimes(1);
41
+ expect(apply).toHaveBeenCalledTimes(1);
42
+ expect(runtime.sleep).toHaveBeenCalledTimes(1);
43
+ });
44
+ it('returns the final original error without sleeping after exhaustion', async () => {
45
+ const first = Object.assign(new Error('unavailable'), { code: 'Unavailable' });
46
+ const final = Object.assign(new Error('deadline exceeded'), {
47
+ code: 'DeadlineExceeded',
48
+ });
49
+ const prove = vi.fn().mockRejectedValueOnce(first).mockRejectedValueOnce(final);
50
+ const client = { transactions: { executeRequest: vi.fn().mockResolvedValue({ prove }) } };
51
+ const runtime = {
52
+ sleep: vi.fn().mockResolvedValue(undefined),
53
+ unitRandom: () => 0.5,
54
+ };
55
+ const workflow = new ProverWorkflow(asType(client), {
56
+ kind: 'remote',
57
+ maxAttempts: 2,
58
+ createProver: () => asType({}),
59
+ }, runtime);
60
+ await expect(workflow.submit(asType({}), asType({}))).rejects.toBe(final);
61
+ expect(prove).toHaveBeenCalledTimes(2);
62
+ expect(runtime.sleep).toHaveBeenCalledTimes(1);
63
+ });
64
+ it('never re-submits when submission fails with transient-looking wording', async () => {
65
+ const rateLimited = Object.assign(new Error('Too Many Requests!'), {
66
+ code: 'ResourceExhausted',
67
+ });
68
+ const submit = vi.fn().mockRejectedValue(rateLimited);
69
+ const prove = vi.fn().mockResolvedValue({ submit });
70
+ const client = {
71
+ transactions: { executeRequest: vi.fn().mockResolvedValue({ prove }) },
72
+ };
73
+ const runtime = {
74
+ sleep: vi.fn().mockResolvedValue(undefined),
75
+ unitRandom: () => 0.5,
76
+ };
77
+ const workflow = new ProverWorkflow(asType(client), {
78
+ kind: 'remote',
79
+ maxAttempts: 5,
80
+ createProver: () => asType({}),
81
+ }, runtime);
82
+ await expect(workflow.submit(asType({}), asType({}))).rejects.toBe(rateLimited);
83
+ expect(prove).toHaveBeenCalledTimes(1);
84
+ expect(submit).toHaveBeenCalledTimes(1);
85
+ expect(runtime.sleep).not.toHaveBeenCalled();
86
+ });
87
+ it('uses the injected prover directly when no cloneable remote override exists', async () => {
88
+ const apply = vi.fn().mockResolvedValue({});
89
+ const submit = vi.fn().mockResolvedValue({ apply });
90
+ const prove = vi.fn().mockResolvedValue({ submit });
91
+ const client = {
92
+ transactions: { executeRequest: vi.fn().mockResolvedValue({ prove }) },
93
+ };
94
+ const workflow = new ProverWorkflow(asType(client), {
95
+ kind: 'injected',
96
+ maxAttempts: 1,
97
+ createProver: () => undefined,
98
+ });
99
+ await workflow.submit(asType({}), asType({}));
100
+ expect(prove).toHaveBeenCalledWith();
101
+ });
102
+ });
103
+ //# sourceMappingURL=workflow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.js","sourceRoot":"","sources":["../../src/prover/workflow.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Transient/permanent error classification shared by the prover and node-RPC
3
+ * retry policies, mirroring `is_transient_error_with` in the Rust
4
+ * `guardian-shared` crate: the whole cause chain is walked accumulating
5
+ * evidence, permanent evidence anywhere vetoes transient anywhere, and the
6
+ * transient-wording fallback fires only when no status-level evidence exists
7
+ * in any link. Behavior is pinned by the cross-SDK fixture corpus.
8
+ */
9
+ /**
10
+ * Walks the error's cause chain and reports whether every piece of evidence
11
+ * points at a transient failure. `extraTransientSignals` extends the
12
+ * transient-wording fallback for one policy without leaking into others,
13
+ * under the same permanent-wins rule.
14
+ */
15
+ export declare function isTransientError(error: unknown, extraTransientSignals?: readonly string[]): boolean;
16
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/retry/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsJH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,qBAAqB,GAAE,SAAS,MAAM,EAAO,GAC5C,OAAO,CAqDT"}