@miden-sdk/miden-wallet-adapter-base 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/adapter.ts +146 -0
  2. package/dist/adapter.d.ts +69 -0
  3. package/dist/adapter.js +74 -0
  4. package/dist/adapter.js.map +1 -0
  5. package/dist/errors.d.ts +70 -0
  6. package/dist/errors.js +75 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/helpers.d.ts +2 -0
  9. package/dist/helpers.js +32 -0
  10. package/dist/helpers.js.map +1 -0
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.js +7 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/signer.d.ts +34 -0
  15. package/dist/signer.js +6 -0
  16. package/dist/signer.js.map +1 -0
  17. package/dist/transaction.d.ts +67 -0
  18. package/dist/transaction.js +74 -0
  19. package/dist/transaction.js.map +1 -0
  20. package/dist/types.d.ts +47 -0
  21. package/dist/types.js +19 -0
  22. package/dist/types.js.map +1 -0
  23. package/docs/@miden-sdk/namespaces/EventEmitter/README.md +24 -0
  24. package/docs/@miden-sdk/namespaces/EventEmitter/interfaces/EventEmitterStatic.md +17 -0
  25. package/docs/@miden-sdk/namespaces/EventEmitter/interfaces/ListenerFn.md +25 -0
  26. package/docs/@miden-sdk/namespaces/EventEmitter/type-aliases/ArgumentMap.md +15 -0
  27. package/docs/@miden-sdk/namespaces/EventEmitter/type-aliases/EventArgs.md +19 -0
  28. package/docs/@miden-sdk/namespaces/EventEmitter/type-aliases/EventListener.md +19 -0
  29. package/docs/@miden-sdk/namespaces/EventEmitter/type-aliases/EventNames.md +15 -0
  30. package/docs/@miden-sdk/namespaces/EventEmitter/type-aliases/ValidEventTypes.md +17 -0
  31. package/docs/@miden-sdk/namespaces/EventEmitter/variables/EventEmitter.md +9 -0
  32. package/docs/README.md +88 -0
  33. package/docs/classes/BaseMessageSignerWalletAdapter.md +755 -0
  34. package/docs/classes/BaseSignerWalletAdapter.md +579 -0
  35. package/docs/classes/BaseWalletAdapter.md +535 -0
  36. package/docs/classes/ConsumeTransaction.md +93 -0
  37. package/docs/classes/CustomTransaction.md +93 -0
  38. package/docs/classes/EventEmitter.md +305 -0
  39. package/docs/classes/SendTransaction.md +107 -0
  40. package/docs/classes/Transaction.md +151 -0
  41. package/docs/classes/WalletAccountError.md +223 -0
  42. package/docs/classes/WalletAddressError.md +223 -0
  43. package/docs/classes/WalletConfigError.md +223 -0
  44. package/docs/classes/WalletConnectionError.md +223 -0
  45. package/docs/classes/WalletDecryptionError.md +223 -0
  46. package/docs/classes/WalletDecryptionNotAllowedError.md +223 -0
  47. package/docs/classes/WalletDisconnectedError.md +223 -0
  48. package/docs/classes/WalletDisconnectionError.md +223 -0
  49. package/docs/classes/WalletError.md +244 -0
  50. package/docs/classes/WalletKeypairError.md +223 -0
  51. package/docs/classes/WalletLoadError.md +223 -0
  52. package/docs/classes/WalletNotConnectedError.md +223 -0
  53. package/docs/classes/WalletNotReadyError.md +223 -0
  54. package/docs/classes/WalletNotSelectedError.md +223 -0
  55. package/docs/classes/WalletPrivateDataPermissionError.md +223 -0
  56. package/docs/classes/WalletRecordsError.md +223 -0
  57. package/docs/classes/WalletSendTransactionError.md +223 -0
  58. package/docs/classes/WalletSignMessageError.md +223 -0
  59. package/docs/classes/WalletSignTransactionError.md +223 -0
  60. package/docs/classes/WalletTimeoutError.md +223 -0
  61. package/docs/classes/WalletTransactionError.md +223 -0
  62. package/docs/classes/WalletWindowBlockedError.md +223 -0
  63. package/docs/classes/WalletWindowClosedError.md +223 -0
  64. package/docs/enumerations/AllowedPrivateData.md +37 -0
  65. package/docs/enumerations/PrivateDataPermission.md +19 -0
  66. package/docs/enumerations/TransactionType.md +25 -0
  67. package/docs/enumerations/WalletAdapterNetwork.md +19 -0
  68. package/docs/enumerations/WalletReadyState.md +49 -0
  69. package/docs/functions/b64ToU8.md +19 -0
  70. package/docs/functions/scopePollingDetectionStrategy.md +19 -0
  71. package/docs/functions/u8ToB64.md +19 -0
  72. package/docs/interfaces/Asset.md +19 -0
  73. package/docs/interfaces/IFailedTransactionOutput.md +13 -0
  74. package/docs/interfaces/MessageSignerWalletAdapterProps.md +293 -0
  75. package/docs/interfaces/MidenConsumeTransaction.md +37 -0
  76. package/docs/interfaces/MidenCustomTransaction.md +37 -0
  77. package/docs/interfaces/MidenSendTransaction.md +43 -0
  78. package/docs/interfaces/MidenTransaction.md +19 -0
  79. package/docs/interfaces/SignerWalletAdapterProps.md +149 -0
  80. package/docs/interfaces/TransactionOutput.md +19 -0
  81. package/docs/interfaces/WalletAdapterEvents.md +69 -0
  82. package/docs/interfaces/WalletAdapterProps.md +106 -0
  83. package/docs/interfaces/WalletTransactionSuccessOutput.md +19 -0
  84. package/docs/type-aliases/Adapter.md +9 -0
  85. package/docs/type-aliases/FungibleAssetDetails.md +21 -0
  86. package/docs/type-aliases/InputNoteDetails.md +45 -0
  87. package/docs/type-aliases/MessageSignerWalletAdapter.md +15 -0
  88. package/docs/type-aliases/NoteTypeString.md +9 -0
  89. package/docs/type-aliases/SignKind.md +9 -0
  90. package/docs/type-aliases/SignerWalletAdapter.md +15 -0
  91. package/docs/type-aliases/SupportedTransactionVersions.md +9 -0
  92. package/docs/type-aliases/TransactionOrVersionedTransaction.md +15 -0
  93. package/docs/type-aliases/TransactionPayload.md +9 -0
  94. package/docs/type-aliases/WalletAdapter.md +15 -0
  95. package/docs/type-aliases/WalletName.md +21 -0
  96. package/docs/type-aliases/WalletTransactionOutput.md +9 -0
  97. package/errors.ts +97 -0
  98. package/helpers.ts +28 -0
  99. package/index.ts +6 -0
  100. package/package.json +21 -0
  101. package/signer.ts +71 -0
  102. package/transaction.ts +178 -0
  103. package/tsconfig.json +15 -0
  104. package/types.ts +68 -0
package/adapter.ts ADDED
@@ -0,0 +1,146 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import type { WalletError } from './errors';
3
+ import type {
4
+ AllowedPrivateData,
5
+ PrivateDataPermission,
6
+ SupportedTransactionVersions,
7
+ WalletAdapterNetwork,
8
+ } from './types';
9
+
10
+ export { EventEmitter };
11
+
12
+ export interface WalletAdapterEvents {
13
+ connect(address: string, allowedPrivateData?: AllowedPrivateData): void;
14
+ disconnect(): void;
15
+ error(error: WalletError): void;
16
+ readyStateChange(readyState: WalletReadyState): void;
17
+ }
18
+
19
+ // WalletName is a nominal type that wallet adapters should use, e.g. `'MyCryptoWallet' as WalletName<'MyCryptoWallet'>`
20
+ // https://medium.com/@KevinBGreene/surviving-the-typescript-ecosystem-branding-and-type-tagging-6cf6e516523d
21
+ export type WalletName<T extends string = string> = T & {
22
+ __brand__: 'WalletName';
23
+ };
24
+
25
+ export interface WalletAdapterProps<Name extends string = string> {
26
+ name: WalletName<Name>;
27
+ url: string;
28
+ icon: string;
29
+ readyState: WalletReadyState;
30
+ address: string | null;
31
+ publicKey: Uint8Array | null;
32
+ connecting: boolean;
33
+ connected: boolean;
34
+ supportedTransactionVersions: SupportedTransactionVersions;
35
+
36
+ connect(
37
+ privateDataPermission: PrivateDataPermission,
38
+ network: WalletAdapterNetwork,
39
+ allowedPrivateData?: AllowedPrivateData
40
+ ): Promise<void>;
41
+ disconnect(): Promise<void>;
42
+ }
43
+
44
+ export type WalletAdapter<Name extends string = string> =
45
+ WalletAdapterProps<Name> & EventEmitter<WalletAdapterEvents>;
46
+
47
+ /**
48
+ * A wallet's readiness describes a series of states that the wallet can be in,
49
+ * depending on what kind of wallet it is. An installable wallet (eg. a browser
50
+ * extension like Phantom) might be `Installed` if we've found the Phantom API
51
+ * in the global scope, or `NotDetected` otherwise. A loadable, zero-install
52
+ * runtime (eg. Torus Wallet) might simply signal that it's `Loadable`. Use this
53
+ * metadata to personalize the wallet list for each user (eg. to show their
54
+ * installed wallets first).
55
+ */
56
+ export enum WalletReadyState {
57
+ /**
58
+ * User-installable wallets can typically be detected by scanning for an API
59
+ * that they've injected into the global context. If such an API is present,
60
+ * we consider the wallet to have been installed.
61
+ */
62
+ Installed = 'Installed',
63
+ NotDetected = 'NotDetected',
64
+ /**
65
+ * Loadable wallets are always available to you. Since you can load them at
66
+ * any time, it's meaningless to say that they have been detected.
67
+ */
68
+ Loadable = 'Loadable',
69
+ /**
70
+ * If a wallet is not supported on a given platform (eg. server-rendering, or
71
+ * mobile) then it will stay in the `Unsupported` state.
72
+ */
73
+ Unsupported = 'Unsupported',
74
+ }
75
+
76
+ export abstract class BaseWalletAdapter<Name extends string = string>
77
+ extends EventEmitter<WalletAdapterEvents>
78
+ implements WalletAdapter<Name>
79
+ {
80
+ abstract name: WalletName<Name>;
81
+ abstract url: string;
82
+ abstract icon: string;
83
+ abstract readyState: WalletReadyState;
84
+ abstract address: string | null;
85
+ abstract publicKey: Uint8Array | null;
86
+ abstract connecting: boolean;
87
+ abstract supportedTransactionVersions: SupportedTransactionVersions;
88
+
89
+ get connected() {
90
+ return !!this.address;
91
+ }
92
+
93
+ abstract connect(
94
+ privateDataPermission: PrivateDataPermission,
95
+ network: WalletAdapterNetwork,
96
+ allowedPrivateData?: AllowedPrivateData
97
+ ): Promise<void>;
98
+ abstract disconnect(): Promise<void>;
99
+ }
100
+
101
+ export function scopePollingDetectionStrategy(detect: () => boolean): void {
102
+ // Early return when server-side rendering
103
+ if (typeof window === 'undefined' || typeof document === 'undefined') return;
104
+
105
+ const disposers: (() => void)[] = [];
106
+
107
+ function detectAndDispose() {
108
+ const detected = detect();
109
+ if (detected) {
110
+ for (const dispose of disposers) {
111
+ dispose();
112
+ }
113
+ }
114
+ }
115
+
116
+ // Strategy #1: Try detecting every second.
117
+ const interval =
118
+ // TODO: #334 Replace with idle callback strategy.
119
+ setInterval(detectAndDispose, 1000);
120
+ disposers.push(() => clearInterval(interval));
121
+
122
+ // Strategy #2: Detect as soon as the DOM becomes 'ready'/'interactive'.
123
+ if (
124
+ // Implies that `DOMContentLoaded` has not yet fired.
125
+ document.readyState === 'loading'
126
+ ) {
127
+ document.addEventListener('DOMContentLoaded', detectAndDispose, {
128
+ once: true,
129
+ });
130
+ disposers.push(() =>
131
+ document.removeEventListener('DOMContentLoaded', detectAndDispose)
132
+ );
133
+ }
134
+
135
+ // Strategy #3: Detect after the `window` has fully loaded.
136
+ if (
137
+ // If the `complete` state has been reached, we're too late.
138
+ document.readyState !== 'complete'
139
+ ) {
140
+ window.addEventListener('load', detectAndDispose, { once: true });
141
+ disposers.push(() => window.removeEventListener('load', detectAndDispose));
142
+ }
143
+
144
+ // Strategy #4: Detect synchronously, now.
145
+ detectAndDispose();
146
+ }
@@ -0,0 +1,69 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import type { WalletError } from './errors';
3
+ import type { AllowedPrivateData, PrivateDataPermission, SupportedTransactionVersions, WalletAdapterNetwork } from './types';
4
+ export { EventEmitter };
5
+ export interface WalletAdapterEvents {
6
+ connect(address: string, allowedPrivateData?: AllowedPrivateData): void;
7
+ disconnect(): void;
8
+ error(error: WalletError): void;
9
+ readyStateChange(readyState: WalletReadyState): void;
10
+ }
11
+ export type WalletName<T extends string = string> = T & {
12
+ __brand__: 'WalletName';
13
+ };
14
+ export interface WalletAdapterProps<Name extends string = string> {
15
+ name: WalletName<Name>;
16
+ url: string;
17
+ icon: string;
18
+ readyState: WalletReadyState;
19
+ address: string | null;
20
+ publicKey: Uint8Array | null;
21
+ connecting: boolean;
22
+ connected: boolean;
23
+ supportedTransactionVersions: SupportedTransactionVersions;
24
+ connect(privateDataPermission: PrivateDataPermission, network: WalletAdapterNetwork, allowedPrivateData?: AllowedPrivateData): Promise<void>;
25
+ disconnect(): Promise<void>;
26
+ }
27
+ export type WalletAdapter<Name extends string = string> = WalletAdapterProps<Name> & EventEmitter<WalletAdapterEvents>;
28
+ /**
29
+ * A wallet's readiness describes a series of states that the wallet can be in,
30
+ * depending on what kind of wallet it is. An installable wallet (eg. a browser
31
+ * extension like Phantom) might be `Installed` if we've found the Phantom API
32
+ * in the global scope, or `NotDetected` otherwise. A loadable, zero-install
33
+ * runtime (eg. Torus Wallet) might simply signal that it's `Loadable`. Use this
34
+ * metadata to personalize the wallet list for each user (eg. to show their
35
+ * installed wallets first).
36
+ */
37
+ export declare enum WalletReadyState {
38
+ /**
39
+ * User-installable wallets can typically be detected by scanning for an API
40
+ * that they've injected into the global context. If such an API is present,
41
+ * we consider the wallet to have been installed.
42
+ */
43
+ Installed = "Installed",
44
+ NotDetected = "NotDetected",
45
+ /**
46
+ * Loadable wallets are always available to you. Since you can load them at
47
+ * any time, it's meaningless to say that they have been detected.
48
+ */
49
+ Loadable = "Loadable",
50
+ /**
51
+ * If a wallet is not supported on a given platform (eg. server-rendering, or
52
+ * mobile) then it will stay in the `Unsupported` state.
53
+ */
54
+ Unsupported = "Unsupported"
55
+ }
56
+ export declare abstract class BaseWalletAdapter<Name extends string = string> extends EventEmitter<WalletAdapterEvents> implements WalletAdapter<Name> {
57
+ abstract name: WalletName<Name>;
58
+ abstract url: string;
59
+ abstract icon: string;
60
+ abstract readyState: WalletReadyState;
61
+ abstract address: string | null;
62
+ abstract publicKey: Uint8Array | null;
63
+ abstract connecting: boolean;
64
+ abstract supportedTransactionVersions: SupportedTransactionVersions;
65
+ get connected(): boolean;
66
+ abstract connect(privateDataPermission: PrivateDataPermission, network: WalletAdapterNetwork, allowedPrivateData?: AllowedPrivateData): Promise<void>;
67
+ abstract disconnect(): Promise<void>;
68
+ }
69
+ export declare function scopePollingDetectionStrategy(detect: () => boolean): void;
@@ -0,0 +1,74 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ export { EventEmitter };
3
+ /**
4
+ * A wallet's readiness describes a series of states that the wallet can be in,
5
+ * depending on what kind of wallet it is. An installable wallet (eg. a browser
6
+ * extension like Phantom) might be `Installed` if we've found the Phantom API
7
+ * in the global scope, or `NotDetected` otherwise. A loadable, zero-install
8
+ * runtime (eg. Torus Wallet) might simply signal that it's `Loadable`. Use this
9
+ * metadata to personalize the wallet list for each user (eg. to show their
10
+ * installed wallets first).
11
+ */
12
+ export var WalletReadyState;
13
+ (function (WalletReadyState) {
14
+ /**
15
+ * User-installable wallets can typically be detected by scanning for an API
16
+ * that they've injected into the global context. If such an API is present,
17
+ * we consider the wallet to have been installed.
18
+ */
19
+ WalletReadyState["Installed"] = "Installed";
20
+ WalletReadyState["NotDetected"] = "NotDetected";
21
+ /**
22
+ * Loadable wallets are always available to you. Since you can load them at
23
+ * any time, it's meaningless to say that they have been detected.
24
+ */
25
+ WalletReadyState["Loadable"] = "Loadable";
26
+ /**
27
+ * If a wallet is not supported on a given platform (eg. server-rendering, or
28
+ * mobile) then it will stay in the `Unsupported` state.
29
+ */
30
+ WalletReadyState["Unsupported"] = "Unsupported";
31
+ })(WalletReadyState || (WalletReadyState = {}));
32
+ export class BaseWalletAdapter extends EventEmitter {
33
+ get connected() {
34
+ return !!this.address;
35
+ }
36
+ }
37
+ export function scopePollingDetectionStrategy(detect) {
38
+ // Early return when server-side rendering
39
+ if (typeof window === 'undefined' || typeof document === 'undefined')
40
+ return;
41
+ const disposers = [];
42
+ function detectAndDispose() {
43
+ const detected = detect();
44
+ if (detected) {
45
+ for (const dispose of disposers) {
46
+ dispose();
47
+ }
48
+ }
49
+ }
50
+ // Strategy #1: Try detecting every second.
51
+ const interval =
52
+ // TODO: #334 Replace with idle callback strategy.
53
+ setInterval(detectAndDispose, 1000);
54
+ disposers.push(() => clearInterval(interval));
55
+ // Strategy #2: Detect as soon as the DOM becomes 'ready'/'interactive'.
56
+ if (
57
+ // Implies that `DOMContentLoaded` has not yet fired.
58
+ document.readyState === 'loading') {
59
+ document.addEventListener('DOMContentLoaded', detectAndDispose, {
60
+ once: true,
61
+ });
62
+ disposers.push(() => document.removeEventListener('DOMContentLoaded', detectAndDispose));
63
+ }
64
+ // Strategy #3: Detect after the `window` has fully loaded.
65
+ if (
66
+ // If the `complete` state has been reached, we're too late.
67
+ document.readyState !== 'complete') {
68
+ window.addEventListener('load', detectAndDispose, { once: true });
69
+ disposers.push(() => window.removeEventListener('load', detectAndDispose));
70
+ }
71
+ // Strategy #4: Detect synchronously, now.
72
+ detectAndDispose();
73
+ }
74
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../adapter.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AASzC,OAAO,EAAE,YAAY,EAAE,CAAC;AAqCxB;;;;;;;;GAQG;AACH,MAAM,CAAN,IAAY,gBAkBX;AAlBD,WAAY,gBAAgB;IAC1B;;;;OAIG;IACH,2CAAuB,CAAA;IACvB,+CAA2B,CAAA;IAC3B;;;OAGG;IACH,yCAAqB,CAAA;IACrB;;;OAGG;IACH,+CAA2B,CAAA;AAC7B,CAAC,EAlBW,gBAAgB,KAAhB,gBAAgB,QAkB3B;AAED,MAAM,OAAgB,iBACpB,SAAQ,YAAiC;IAYzC,IAAI,SAAS;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CAQF;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAqB;IACjE,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAE7E,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,SAAS,gBAAgB;QACvB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;QAC1B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ;IACZ,kDAAkD;IAClD,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,wEAAwE;IACxE;IACE,qDAAqD;IACrD,QAAQ,CAAC,UAAU,KAAK,SAAS,EACjC,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;YAC9D,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAClB,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D;IACE,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,KAAK,UAAU,EAClC,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,0CAA0C;IAC1C,gBAAgB,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,70 @@
1
+ export declare class WalletError extends Error {
2
+ error: any;
3
+ constructor(message?: string, error?: any);
4
+ }
5
+ export declare class WalletNotReadyError extends WalletError {
6
+ name: string;
7
+ }
8
+ export declare class WalletLoadError extends WalletError {
9
+ name: string;
10
+ }
11
+ export declare class WalletConfigError extends WalletError {
12
+ name: string;
13
+ }
14
+ export declare class WalletConnectionError extends WalletError {
15
+ name: string;
16
+ }
17
+ export declare class WalletNotSelectedError extends WalletError {
18
+ name: string;
19
+ }
20
+ export declare class WalletDisconnectedError extends WalletError {
21
+ name: string;
22
+ }
23
+ export declare class WalletDisconnectionError extends WalletError {
24
+ name: string;
25
+ }
26
+ export declare class WalletAccountError extends WalletError {
27
+ name: string;
28
+ }
29
+ export declare class WalletAddressError extends WalletError {
30
+ name: string;
31
+ }
32
+ export declare class WalletKeypairError extends WalletError {
33
+ name: string;
34
+ }
35
+ export declare class WalletNotConnectedError extends WalletError {
36
+ name: string;
37
+ }
38
+ export declare class WalletSendTransactionError extends WalletError {
39
+ name: string;
40
+ }
41
+ export declare class WalletSignMessageError extends WalletError {
42
+ name: string;
43
+ }
44
+ export declare class WalletSignTransactionError extends WalletError {
45
+ name: string;
46
+ }
47
+ export declare class WalletTimeoutError extends WalletError {
48
+ name: string;
49
+ }
50
+ export declare class WalletWindowBlockedError extends WalletError {
51
+ name: string;
52
+ }
53
+ export declare class WalletWindowClosedError extends WalletError {
54
+ name: string;
55
+ }
56
+ export declare class WalletDecryptionNotAllowedError extends WalletError {
57
+ name: string;
58
+ }
59
+ export declare class WalletPrivateDataPermissionError extends WalletError {
60
+ name: string;
61
+ }
62
+ export declare class WalletDecryptionError extends WalletError {
63
+ name: string;
64
+ }
65
+ export declare class WalletRecordsError extends WalletError {
66
+ name: string;
67
+ }
68
+ export declare class WalletTransactionError extends WalletError {
69
+ name: string;
70
+ }
package/dist/errors.js ADDED
@@ -0,0 +1,75 @@
1
+ export class WalletError extends Error {
2
+ error;
3
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
4
+ constructor(message, error) {
5
+ super(message);
6
+ this.error = error;
7
+ }
8
+ }
9
+ export class WalletNotReadyError extends WalletError {
10
+ name = 'WalletNotReadyError';
11
+ }
12
+ export class WalletLoadError extends WalletError {
13
+ name = 'WalletLoadError';
14
+ }
15
+ export class WalletConfigError extends WalletError {
16
+ name = 'WalletConfigError';
17
+ }
18
+ export class WalletConnectionError extends WalletError {
19
+ name = 'WalletConnectionError';
20
+ }
21
+ export class WalletNotSelectedError extends WalletError {
22
+ name = 'WalletNotSelectedError';
23
+ }
24
+ export class WalletDisconnectedError extends WalletError {
25
+ name = 'WalletDisconnectedError';
26
+ }
27
+ export class WalletDisconnectionError extends WalletError {
28
+ name = 'WalletDisconnectionError';
29
+ }
30
+ export class WalletAccountError extends WalletError {
31
+ name = 'WalletAccountError';
32
+ }
33
+ export class WalletAddressError extends WalletError {
34
+ name = 'WalletAddressError';
35
+ }
36
+ export class WalletKeypairError extends WalletError {
37
+ name = 'WalletKeypairError';
38
+ }
39
+ export class WalletNotConnectedError extends WalletError {
40
+ name = 'WalletNotConnectedError';
41
+ }
42
+ export class WalletSendTransactionError extends WalletError {
43
+ name = 'WalletSendTransactionError';
44
+ }
45
+ export class WalletSignMessageError extends WalletError {
46
+ name = 'WalletSignMessageError';
47
+ }
48
+ export class WalletSignTransactionError extends WalletError {
49
+ name = 'WalletSignTransactionError';
50
+ }
51
+ export class WalletTimeoutError extends WalletError {
52
+ name = 'WalletTimeoutError';
53
+ }
54
+ export class WalletWindowBlockedError extends WalletError {
55
+ name = 'WalletWindowBlockedError';
56
+ }
57
+ export class WalletWindowClosedError extends WalletError {
58
+ name = 'WalletWindowClosedError';
59
+ }
60
+ export class WalletDecryptionNotAllowedError extends WalletError {
61
+ name = 'WalletDecryptionNotAllowedError';
62
+ }
63
+ export class WalletPrivateDataPermissionError extends WalletError {
64
+ name = 'WalletPrivateDataPermissionError';
65
+ }
66
+ export class WalletDecryptionError extends WalletError {
67
+ name = 'WalletDecryptionError';
68
+ }
69
+ export class WalletRecordsError extends WalletError {
70
+ name = 'WalletRecordsError';
71
+ }
72
+ export class WalletTransactionError extends WalletError {
73
+ name = 'WalletTransactionError';
74
+ }
75
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClC,KAAK,CAAM;IAEX,6EAA6E;IAC7E,YAAY,OAAgB,EAAE,KAAW;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;CACJ;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAChD,IAAI,GAAG,qBAAqB,CAAC;CAChC;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC5C,IAAI,GAAG,iBAAiB,CAAC;CAC5B;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAC9C,IAAI,GAAG,mBAAmB,CAAC;CAC9B;AAED,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAClD,IAAI,GAAG,uBAAuB,CAAC;CAClC;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACnD,IAAI,GAAG,wBAAwB,CAAC;CACnC;AAED,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACpD,IAAI,GAAG,yBAAyB,CAAC;CACpC;AAED,MAAM,OAAO,wBAAyB,SAAQ,WAAW;IACrD,IAAI,GAAG,0BAA0B,CAAC;CACrC;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,IAAI,GAAG,oBAAoB,CAAC;CAC/B;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,IAAI,GAAG,oBAAoB,CAAC;CAC/B;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,IAAI,GAAG,oBAAoB,CAAC;CAC/B;AAED,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACpD,IAAI,GAAG,yBAAyB,CAAC;CACpC;AAED,MAAM,OAAO,0BAA2B,SAAQ,WAAW;IACvD,IAAI,GAAG,4BAA4B,CAAC;CACvC;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACnD,IAAI,GAAG,wBAAwB,CAAC;CACnC;AAED,MAAM,OAAO,0BAA2B,SAAQ,WAAW;IACvD,IAAI,GAAG,4BAA4B,CAAC;CACvC;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,IAAI,GAAG,oBAAoB,CAAC;CAC/B;AAED,MAAM,OAAO,wBAAyB,SAAQ,WAAW;IACrD,IAAI,GAAG,0BAA0B,CAAC;CACrC;AAED,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACpD,IAAI,GAAG,yBAAyB,CAAC;CACpC;AAED,MAAM,OAAO,+BAAgC,SAAQ,WAAW;IAC5D,IAAI,GAAG,iCAAiC,CAAC;CAC5C;AAED,MAAM,OAAO,gCAAiC,SAAQ,WAAW;IAC7D,IAAI,GAAG,kCAAkC,CAAC;CAC7C;AAED,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAClD,IAAI,GAAG,uBAAuB,CAAC;CAClC;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C,IAAI,GAAG,oBAAoB,CAAC;CAC/B;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACnD,IAAI,GAAG,wBAAwB,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export declare function u8ToB64(u8: Uint8Array): string;
2
+ export declare function b64ToU8(b64: string): Uint8Array;
@@ -0,0 +1,32 @@
1
+ // Encode a Uint8Array to base64
2
+ export function u8ToB64(u8) {
3
+ // Prefer browser builtins (no polyfills)
4
+ if (typeof globalThis.btoa === 'function') {
5
+ let s = '';
6
+ for (let i = 0; i < u8.length; i++)
7
+ s += String.fromCharCode(u8[i]);
8
+ return globalThis.btoa(s);
9
+ }
10
+ // Node/Buffer fallback (won’t be bundled if never executed in browsers)
11
+ const Buf = globalThis.Buffer;
12
+ if (Buf)
13
+ return Buf.from(u8).toString('base64');
14
+ throw new Error('No base64 encoder available in this environment');
15
+ }
16
+ // Decode base64 to Uint8Array
17
+ export function b64ToU8(b64) {
18
+ // Prefer browser builtins (no polyfills)
19
+ if (typeof globalThis.atob === 'function') {
20
+ const bin = globalThis.atob(b64);
21
+ const out = new Uint8Array(bin.length);
22
+ for (let i = 0; i < bin.length; i++)
23
+ out[i] = bin.charCodeAt(i);
24
+ return out;
25
+ }
26
+ // Node/Buffer fallback (won’t be bundled if never executed in browsers)
27
+ const Buf = globalThis.Buffer;
28
+ if (Buf)
29
+ return new Uint8Array(Buf.from(b64, 'base64'));
30
+ throw new Error('No base64 decoder available in this environment');
31
+ }
32
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../helpers.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,UAAU,OAAO,CAAC,EAAc;IACpC,yCAAyC;IACzC,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,wEAAwE;IACxE,MAAM,GAAG,GAAS,UAAkB,CAAC,MAAM,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,yCAAyC;IACzC,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,wEAAwE;IACxE,MAAM,GAAG,GAAS,UAAkB,CAAC,MAAM,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './adapter';
2
+ export * from './errors';
3
+ export * from './signer';
4
+ export * from './types';
5
+ export * from './transaction';
6
+ export * from './helpers';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './adapter';
2
+ export * from './errors';
3
+ export * from './signer';
4
+ export * from './types';
5
+ export * from './transaction';
6
+ export * from './helpers';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { NoteFilterTypes } from '@miden-sdk/miden-sdk';
2
+ import type { WalletAdapter, WalletAdapterProps } from './adapter';
3
+ import { BaseWalletAdapter } from './adapter';
4
+ import { MidenConsumeTransaction, MidenSendTransaction, MidenTransaction } from './transaction';
5
+ import { Asset, InputNoteDetails, SignKind, TransactionOutput } from './types';
6
+ export type Adapter = WalletAdapter | SignerWalletAdapter | MessageSignerWalletAdapter;
7
+ export interface SignerWalletAdapterProps<Name extends string = string> extends WalletAdapterProps<Name> {
8
+ }
9
+ export type SignerWalletAdapter<Name extends string = string> = WalletAdapter<Name> & SignerWalletAdapterProps<Name>;
10
+ export declare abstract class BaseSignerWalletAdapter<Name extends string = string> extends BaseWalletAdapter<Name> implements SignerWalletAdapter<Name> {
11
+ }
12
+ export interface MessageSignerWalletAdapterProps<Name extends string = string> extends WalletAdapterProps<Name> {
13
+ requestTransaction(transaction: MidenTransaction): Promise<string>;
14
+ requestAssets(): Promise<Asset[]>;
15
+ requestPrivateNotes(noteFilterType: NoteFilterTypes, noteIds?: string[]): Promise<InputNoteDetails[]>;
16
+ signBytes(data: Uint8Array, kind: SignKind): Promise<Uint8Array>;
17
+ importPrivateNote(note: Uint8Array): Promise<string>;
18
+ requestConsumableNotes(): Promise<InputNoteDetails[]>;
19
+ waitForTransaction(txId: string, timeout?: number): Promise<TransactionOutput>;
20
+ requestSend(transaction: MidenSendTransaction): Promise<string>;
21
+ requestConsume(transaction: MidenConsumeTransaction): Promise<string>;
22
+ }
23
+ export type MessageSignerWalletAdapter<Name extends string = string> = WalletAdapter<Name> & MessageSignerWalletAdapterProps<Name>;
24
+ export declare abstract class BaseMessageSignerWalletAdapter<Name extends string = string> extends BaseSignerWalletAdapter<Name> implements MessageSignerWalletAdapter<Name> {
25
+ abstract requestSend(transaction: MidenSendTransaction): Promise<string>;
26
+ abstract requestConsume(transaction: MidenConsumeTransaction): Promise<string>;
27
+ abstract requestTransaction(transaction: MidenTransaction): Promise<string>;
28
+ abstract requestAssets(): Promise<Asset[]>;
29
+ abstract requestPrivateNotes(noteFilterType: NoteFilterTypes, noteIds?: string[]): Promise<InputNoteDetails[]>;
30
+ abstract signBytes(data: Uint8Array, kind: SignKind): Promise<Uint8Array>;
31
+ abstract importPrivateNote(note: Uint8Array): Promise<string>;
32
+ abstract requestConsumableNotes(): Promise<InputNoteDetails[]>;
33
+ abstract waitForTransaction(txId: string, timeout?: number): Promise<TransactionOutput>;
34
+ }
package/dist/signer.js ADDED
@@ -0,0 +1,6 @@
1
+ import { BaseWalletAdapter } from './adapter';
2
+ export class BaseSignerWalletAdapter extends BaseWalletAdapter {
3
+ }
4
+ export class BaseMessageSignerWalletAdapter extends BaseSignerWalletAdapter {
5
+ }
6
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../signer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAmB9C,MAAM,OAAgB,uBACpB,SAAQ,iBAAuB;CACQ;AAwBzC,MAAM,OAAgB,8BAGpB,SAAQ,uBAA6B;CAoBtC"}
@@ -0,0 +1,67 @@
1
+ import type { TransactionRequest } from '@miden-sdk/miden-sdk';
2
+ export type NoteTypeString = 'public' | 'private';
3
+ export interface MidenSendTransaction {
4
+ senderAddress: string;
5
+ recipientAddress: string;
6
+ faucetId: string;
7
+ noteType: NoteTypeString;
8
+ amount: number;
9
+ recallBlocks?: number;
10
+ }
11
+ export declare class SendTransaction implements MidenSendTransaction {
12
+ senderAddress: string;
13
+ recipientAddress: string;
14
+ faucetId: string;
15
+ noteType: NoteTypeString;
16
+ amount: number;
17
+ recallBlocks?: number;
18
+ constructor(sender: string, recipient: string, faucetId: string, noteType: NoteTypeString, amount: number, recallBlocks?: number);
19
+ }
20
+ export interface MidenConsumeTransaction {
21
+ faucetId: string;
22
+ noteId: string;
23
+ noteType: NoteTypeString;
24
+ amount: number;
25
+ noteBytes?: string;
26
+ }
27
+ export declare class ConsumeTransaction implements MidenConsumeTransaction {
28
+ faucetId: string;
29
+ noteId: string;
30
+ noteType: NoteTypeString;
31
+ amount: number;
32
+ noteBytes?: string;
33
+ constructor(faucetId: string, noteId: string, noteType: NoteTypeString, amount: number, noteBytes?: Uint8Array);
34
+ }
35
+ export interface MidenCustomTransaction {
36
+ address: string;
37
+ recipientAddress: string;
38
+ transactionRequest: string;
39
+ inputNoteIds?: string[];
40
+ importNotes?: string[];
41
+ }
42
+ export declare class CustomTransaction implements MidenCustomTransaction {
43
+ address: string;
44
+ recipientAddress: string;
45
+ transactionRequest: string;
46
+ inputNoteIds?: string[];
47
+ importNotes?: string[];
48
+ constructor(address: string, recipientAddress: string, transactionRequest: TransactionRequest, inputNotesIds?: string[], inputNoteBytes?: Uint8Array[]);
49
+ }
50
+ export declare enum TransactionType {
51
+ Send = "send",
52
+ Consume = "consume",
53
+ Custom = "custom"
54
+ }
55
+ export type TransactionPayload = MidenSendTransaction | MidenConsumeTransaction | MidenCustomTransaction;
56
+ export interface MidenTransaction {
57
+ type: TransactionType;
58
+ payload: TransactionPayload;
59
+ }
60
+ export declare class Transaction implements MidenTransaction {
61
+ type: TransactionType;
62
+ payload: TransactionPayload;
63
+ constructor(type: TransactionType, payload: TransactionPayload);
64
+ static createSendTransaction(sender: string, recipient: string, faucetId: string, noteType: NoteTypeString, amount: number, recallBlocks?: number): Transaction;
65
+ static createConsumeTransaction(faucetId: string, noteId: string, noteType: NoteTypeString, amount: number, noteBytes?: Uint8Array): Transaction;
66
+ static createCustomTransaction(address: string, recipientAddress: string, transactionRequest: TransactionRequest, inputNoteIds?: string[], noteBytes?: Uint8Array[]): Transaction;
67
+ }