@midnightntwrk/faucet-internal-api 1.0.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.
package/dist/api.d.ts ADDED
@@ -0,0 +1,216 @@
1
+ import * as t from "io-ts";
2
+ import { Observable } from "rxjs";
3
+ import { Duration } from "luxon";
4
+ import { ShieldedAddress, UnshieldedAddress } from "@midnightntwrk/wallet-sdk-address-format";
5
+ export declare const walletAddressCodec: t.StringC;
6
+ export declare const captchaTokenCodec: t.StringC;
7
+ export type CaptchaToken = t.TypeOf<typeof captchaTokenCodec>;
8
+ export type WalletAddress = t.TypeOf<typeof walletAddressCodec>;
9
+ export declare const tokenRequestCodec: t.TypeC<{
10
+ address: t.StringC;
11
+ captchaToken: t.StringC;
12
+ }>;
13
+ export type TokenRequest = t.TypeOf<typeof tokenRequestCodec>;
14
+ export declare const backgroundTaskResponseCodec: t.StringC;
15
+ export type BackgroundTaskId = t.TypeOf<typeof backgroundTaskResponseCodec>;
16
+ export declare const durationCodec: t.Type<Duration<boolean>, string, unknown>;
17
+ export declare const tokenResponseCodec: t.TypeC<{
18
+ transactionIdentifier: t.StringC;
19
+ timeToNextRequest: t.Type<Duration<boolean>, string, unknown>;
20
+ }>;
21
+ export type TokenResponse = t.TypeOf<typeof tokenResponseCodec>;
22
+ export type TokenResponseOutput = t.OutputOf<typeof tokenResponseCodec>;
23
+ export declare const statusResponseCodec: t.UnionC<[t.TypeC<{
24
+ status: t.LiteralC<"scheduled">;
25
+ }>, t.TypeC<{
26
+ status: t.LiteralC<"in_progress">;
27
+ }>, t.TypeC<{
28
+ status: t.LiteralC<"success">;
29
+ value: t.TypeC<{
30
+ transactionIdentifier: t.StringC;
31
+ timeToNextRequest: t.Type<Duration<boolean>, string, unknown>;
32
+ }>;
33
+ }>, t.TypeC<{
34
+ status: t.LiteralC<"failure">;
35
+ error: t.StringC;
36
+ }>]>;
37
+ export type StatusResponse = t.TypeOf<typeof statusResponseCodec>;
38
+ export declare const jwtResponseCodec: t.StringC;
39
+ export type JWTResponse = t.TypeOf<typeof jwtResponseCodec>;
40
+ export declare const errorResponseCodec: t.TypeC<{
41
+ status: t.UnionC<[t.LiteralC<"decoding_error">, t.LiteralC<"error">, t.LiteralC<"auth_error">, t.LiteralC<"rate_limit_error">]>;
42
+ message: t.StringC;
43
+ }>;
44
+ export type ErrorResponse = t.TypeOf<typeof errorResponseCodec>;
45
+ export declare const dripRequestCodec: t.TypeC<{
46
+ recipientAddress: t.StringC;
47
+ amount: t.Type<bigint, string, unknown>;
48
+ }>;
49
+ export type DripRequest = t.TypeOf<typeof dripRequestCodec>;
50
+ export declare const dripStatusCodec: t.UnionC<[t.LiteralC<"PENDING">, t.LiteralC<"CONFIRMED">, t.LiteralC<"FAILED">]>;
51
+ export type DripStatus = t.TypeOf<typeof dripStatusCodec>;
52
+ export declare const dripResponseCodec: t.TypeC<{
53
+ dripId: t.StringC;
54
+ status: t.UnionC<[t.LiteralC<"PENDING">, t.LiteralC<"CONFIRMED">, t.LiteralC<"FAILED">]>;
55
+ taskStatus: t.UnionC<[t.StringC, t.NullC]>;
56
+ transactionHash: t.UnionC<[t.StringC, t.NullC]>;
57
+ error: t.UnionC<[t.StringC, t.NullC]>;
58
+ }>;
59
+ export type DripResponse = t.TypeOf<typeof dripResponseCodec>;
60
+ export declare const dripHealthStatusCodec: t.UnionC<[t.LiteralC<"SERVING">, t.LiteralC<"NOT_SERVING">]>;
61
+ export type DripHealthStatus = t.TypeOf<typeof dripHealthStatusCodec>;
62
+ export declare const dripHealthResponseCodec: t.TypeC<{
63
+ status: t.UnionC<[t.LiteralC<"SERVING">, t.LiteralC<"NOT_SERVING">]>;
64
+ reason: t.UnionC<[t.StringC, t.NullC]>;
65
+ needsRestart: t.BooleanC;
66
+ }>;
67
+ export type DripHealthResponse = t.TypeOf<typeof dripHealthResponseCodec>;
68
+ /**
69
+ * Error codes the third-party API reports. All but the last are the canonical
70
+ * literals the spec defines; `INVALID_REQUEST` covers a malformed body or an
71
+ * out-of-range amount, which the spec has no literal for. Unrecognised literals
72
+ * are defaulted to `INTERNAL_ERROR` by the caller, so it degrades safely while
73
+ * staying legible in our own logs.
74
+ */
75
+ export declare const dripErrorCodeCodec: t.UnionC<[t.LiteralC<"INVALID_ADDRESS">, t.LiteralC<"UNSUPPORTED_NETWORK">, t.LiteralC<"UNSUPPORTED_TOKEN">, t.LiteralC<"INVALID_API_KEY">, t.LiteralC<"VERIFICATION_REJECTED">, t.LiteralC<"DUPLICATE_CLAIM">, t.LiteralC<"RATE_LIMIT_EXCEEDED">, t.LiteralC<"INSUFFICIENT_FUNDS">, t.LiteralC<"SERVICE_UNAVAILABLE">, t.LiteralC<"INTERNAL_ERROR">, t.LiteralC<"INVALID_REQUEST">]>;
76
+ export type DripErrorCode = t.TypeOf<typeof dripErrorCodeCodec>;
77
+ export declare const dripErrorCodec: t.TypeC<{
78
+ code: t.UnionC<[t.LiteralC<"INVALID_ADDRESS">, t.LiteralC<"UNSUPPORTED_NETWORK">, t.LiteralC<"UNSUPPORTED_TOKEN">, t.LiteralC<"INVALID_API_KEY">, t.LiteralC<"VERIFICATION_REJECTED">, t.LiteralC<"DUPLICATE_CLAIM">, t.LiteralC<"RATE_LIMIT_EXCEEDED">, t.LiteralC<"INSUFFICIENT_FUNDS">, t.LiteralC<"SERVICE_UNAVAILABLE">, t.LiteralC<"INTERNAL_ERROR">, t.LiteralC<"INVALID_REQUEST">]>;
79
+ message: t.UnionC<[t.StringC, t.NullC]>;
80
+ }>;
81
+ export type DripError = t.TypeOf<typeof dripErrorCodec>;
82
+ export declare const thirdPartyErrorResponseCodec: t.TypeC<{
83
+ error: t.TypeC<{
84
+ code: t.UnionC<[t.LiteralC<"INVALID_ADDRESS">, t.LiteralC<"UNSUPPORTED_NETWORK">, t.LiteralC<"UNSUPPORTED_TOKEN">, t.LiteralC<"INVALID_API_KEY">, t.LiteralC<"VERIFICATION_REJECTED">, t.LiteralC<"DUPLICATE_CLAIM">, t.LiteralC<"RATE_LIMIT_EXCEEDED">, t.LiteralC<"INSUFFICIENT_FUNDS">, t.LiteralC<"SERVICE_UNAVAILABLE">, t.LiteralC<"INTERNAL_ERROR">, t.LiteralC<"INVALID_REQUEST">]>;
85
+ message: t.UnionC<[t.StringC, t.NullC]>;
86
+ }>;
87
+ }>;
88
+ export type ThirdPartyErrorResponse = t.TypeOf<typeof thirdPartyErrorResponseCodec>;
89
+ /**
90
+ * `amount` stays a raw string here rather than decoding straight to `bigint`:
91
+ * parsing it separately is what lets a bad amount answer with its own error code
92
+ * instead of a generic decode failure. It is denominated in the token's smallest
93
+ * unit, and is optional — an omitted amount falls back to the configured default.
94
+ */
95
+ export declare const thirdPartyDripRequestCodec: t.IntersectionC<[t.TypeC<{
96
+ recipientAddress: t.StringC;
97
+ network: t.StringC;
98
+ token: t.StringC;
99
+ }>, t.PartialC<{
100
+ amount: t.UnionC<[t.StringC, t.NullC]>;
101
+ fulfillmentContext: t.UnionC<[t.UnknownRecordC, t.NullC]>;
102
+ }>]>;
103
+ export type ThirdPartyDripRequest = t.TypeOf<typeof thirdPartyDripRequestCodec>;
104
+ export declare const thirdPartyCreateDripResponseCodec: t.TypeC<{
105
+ dripId: t.StringC;
106
+ }>;
107
+ export type ThirdPartyCreateDripResponse = t.TypeOf<typeof thirdPartyCreateDripResponseCodec>;
108
+ export declare const thirdPartyDripStatusResponseCodec: t.TypeC<{
109
+ dripId: t.StringC;
110
+ status: t.UnionC<[t.LiteralC<"PENDING">, t.LiteralC<"CONFIRMED">, t.LiteralC<"FAILED">]>;
111
+ transactionHash: t.UnionC<[t.StringC, t.NullC]>;
112
+ error: t.UnionC<[t.TypeC<{
113
+ code: t.UnionC<[t.LiteralC<"INVALID_ADDRESS">, t.LiteralC<"UNSUPPORTED_NETWORK">, t.LiteralC<"UNSUPPORTED_TOKEN">, t.LiteralC<"INVALID_API_KEY">, t.LiteralC<"VERIFICATION_REJECTED">, t.LiteralC<"DUPLICATE_CLAIM">, t.LiteralC<"RATE_LIMIT_EXCEEDED">, t.LiteralC<"INSUFFICIENT_FUNDS">, t.LiteralC<"SERVICE_UNAVAILABLE">, t.LiteralC<"INTERNAL_ERROR">, t.LiteralC<"INVALID_REQUEST">]>;
114
+ message: t.UnionC<[t.StringC, t.NullC]>;
115
+ }>, t.NullC]>;
116
+ }>;
117
+ export type ThirdPartyDripStatusResponse = t.TypeOf<typeof thirdPartyDripStatusResponseCodec>;
118
+ export declare const thirdPartyDripInfoResponseCodec: t.TypeC<{
119
+ dripAmount: t.StringC;
120
+ }>;
121
+ export type ThirdPartyDripInfoResponse = t.TypeOf<typeof thirdPartyDripInfoResponseCodec>;
122
+ export declare const thirdPartyHealthResponseCodec: t.TypeC<{
123
+ status: t.UnionC<[t.LiteralC<"SERVING">, t.LiteralC<"NOT_SERVING">]>;
124
+ reason: t.UnionC<[t.StringC, t.NullC]>;
125
+ }>;
126
+ export type ThirdPartyHealthResponse = t.TypeOf<typeof thirdPartyHealthResponseCodec>;
127
+ export declare const loginCodec: t.TypeC<{
128
+ username: t.StringC;
129
+ password: t.StringC;
130
+ }>;
131
+ export declare const newTokenPayloadCodec: t.TypeC<{
132
+ validDays: t.RefinementC<t.NumberC, number>;
133
+ }>;
134
+ export interface FaucetAuth {
135
+ /**
136
+ * Allows to log in with provided username and password. Its response is a short-lived JWT token
137
+ */
138
+ login(username: string, password: string): Promise<JWTResponse>;
139
+ /**
140
+ * Allows to obtain a new, long-lived JWT token
141
+ */
142
+ getNewToken(currentToken: string, validDays: number): Promise<JWTResponse>;
143
+ }
144
+ export declare const faucetStateCodec: t.ReadonlyC<t.TypeC<{
145
+ shielded: t.TypeC<{
146
+ address: t.Type<ShieldedAddress, ShieldedAddress, unknown>;
147
+ availableCoins: t.ArrayC<t.BigIntC>;
148
+ totalCoins: t.ArrayC<t.BigIntC>;
149
+ pendingCoins: t.ArrayC<t.BigIntC>;
150
+ availableBalance: t.BigIntC;
151
+ syncProgress: t.TypeC<{
152
+ appliedIndex: t.BigIntC;
153
+ highestRelevantWalletIndex: t.BigIntC;
154
+ highestIndex: t.BigIntC;
155
+ highestRelevantIndex: t.BigIntC;
156
+ isConnected: t.BooleanC;
157
+ }>;
158
+ isSynced: t.BooleanC;
159
+ }>;
160
+ unshielded: t.TypeC<{
161
+ address: t.Type<UnshieldedAddress, UnshieldedAddress, unknown>;
162
+ availableCoins: t.ArrayC<t.BigIntC>;
163
+ totalCoins: t.ArrayC<t.BigIntC>;
164
+ pendingCoins: t.ArrayC<t.BigIntC>;
165
+ availableBalance: t.BigIntC;
166
+ syncProgress: t.TypeC<{
167
+ appliedId: t.BigIntC;
168
+ highestTransactionId: t.BigIntC;
169
+ isConnected: t.BooleanC;
170
+ }>;
171
+ isSynced: t.BooleanC;
172
+ }>;
173
+ dust: t.TypeC<{
174
+ availableCoins: t.ArrayC<t.BigIntC>;
175
+ totalCoins: t.ArrayC<t.BigIntC>;
176
+ pendingCoins: t.ArrayC<t.BigIntC>;
177
+ availableBalance: t.BigIntC;
178
+ syncProgress: t.TypeC<{
179
+ appliedIndex: t.BigIntC;
180
+ highestRelevantWalletIndex: t.BigIntC;
181
+ highestIndex: t.BigIntC;
182
+ highestRelevantIndex: t.BigIntC;
183
+ isConnected: t.BooleanC;
184
+ }>;
185
+ isSynced: t.BooleanC;
186
+ }>;
187
+ }>>;
188
+ export type FaucetState = t.TypeOf<typeof faucetStateCodec> & {
189
+ shielded: {
190
+ address: ShieldedAddress;
191
+ };
192
+ };
193
+ export interface FaucetRequests {
194
+ requestTokens: <T extends object = object>(address: WalletAddress, loggingContext?: T, amount?: bigint) => Promise<TokenResponse>;
195
+ }
196
+ export interface HealthStatus {
197
+ status: "ok" | "not_ok";
198
+ }
199
+ export interface FaucetClientRequests {
200
+ requestTokens: (address: WalletAddress, captchaToken: CaptchaToken, amount: string) => Promise<DripResponse>;
201
+ healthStatus$: Observable<HealthStatus>;
202
+ }
203
+ type SerializedCompositeWalletState = {
204
+ shielded: Promise<string>;
205
+ unshielded: Promise<string>;
206
+ dust: Promise<string>;
207
+ };
208
+ export interface Faucet extends FaucetRequests {
209
+ dropAmount: string;
210
+ address: WalletAddress;
211
+ state$: Observable<FaucetState>;
212
+ syncErrors$: Observable<unknown>;
213
+ serializeWalletState: () => SerializedCompositeWalletState;
214
+ }
215
+ export {};
216
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,212 @@
1
+ import * as t from "io-ts";
2
+ import { Duration } from "luxon";
3
+ import { ShieldedAddress, UnshieldedAddress } from "@midnightntwrk/wallet-sdk-address-format";
4
+ const ShieldedAddressCodec = new t.Type("ShieldedAddress", (u) => u instanceof ShieldedAddress, (u, c) => (u instanceof ShieldedAddress ? t.success(u) : t.failure(u, c)), (a) => a);
5
+ const UnshieldedAddressCodec = new t.Type("UnshieldedAddress", (u) => u instanceof UnshieldedAddress, (u, c) => (u instanceof UnshieldedAddress ? t.success(u) : t.failure(u, c)), (a) => a);
6
+ export const walletAddressCodec = t.string;
7
+ export const captchaTokenCodec = t.string;
8
+ export const tokenRequestCodec = t.type({
9
+ address: walletAddressCodec,
10
+ captchaToken: captchaTokenCodec,
11
+ });
12
+ export const backgroundTaskResponseCodec = t.string;
13
+ export const durationCodec = t.string.pipe(new t.Type("duration", (x) => x instanceof Duration && x.isValid === true, (input, context) => {
14
+ try {
15
+ const res = Duration.fromISO(input);
16
+ if (res.isValid) {
17
+ return t.success(res);
18
+ }
19
+ else {
20
+ return t.failure(input, context, `Reason:
21
+ ${res.invalidReason},
22
+ Explanation:
23
+ ${res.invalidExplanation}`);
24
+ }
25
+ }
26
+ catch (e) {
27
+ return t.failure(input, context, e instanceof Error ? e.message : JSON.stringify(e));
28
+ }
29
+ }, (duration) => {
30
+ return duration.toISO();
31
+ }));
32
+ export const tokenResponseCodec = t.type({
33
+ transactionIdentifier: t.string,
34
+ // It's a bit unfortunate this has to be here, probably it makes sense to decouple faucet and faucet client types
35
+ // and let this API to be only definition for the JSON API
36
+ timeToNextRequest: durationCodec,
37
+ });
38
+ export const statusResponseCodec = t.union([
39
+ t.type({
40
+ status: t.literal("scheduled"),
41
+ }),
42
+ t.type({
43
+ status: t.literal("in_progress"),
44
+ }),
45
+ t.type({
46
+ status: t.literal("success"),
47
+ value: tokenResponseCodec,
48
+ }),
49
+ t.type({
50
+ status: t.literal("failure"),
51
+ error: t.string,
52
+ }),
53
+ ]);
54
+ export const jwtResponseCodec = t.string;
55
+ export const errorResponseCodec = t.type({
56
+ status: t.union([
57
+ t.literal("decoding_error"),
58
+ t.literal("error"),
59
+ t.literal("auth_error"),
60
+ t.literal("rate_limit_error"),
61
+ ]),
62
+ message: t.string,
63
+ });
64
+ // Third-party Drip API types
65
+ const bigintFromString = new t.Type("bigintFromString", (u) => typeof u === "bigint", (u, c) => {
66
+ if (typeof u === "string") {
67
+ try {
68
+ return t.success(BigInt(u));
69
+ }
70
+ catch {
71
+ return t.failure(u, c, "Expected an integer number");
72
+ }
73
+ }
74
+ return t.failure(u, c, "Expected a non-negative integer string");
75
+ }, (a) => a.toString());
76
+ export const dripRequestCodec = t.type({
77
+ recipientAddress: walletAddressCodec,
78
+ amount: bigintFromString,
79
+ });
80
+ export const dripStatusCodec = t.union([
81
+ t.literal("PENDING"),
82
+ t.literal("CONFIRMED"),
83
+ t.literal("FAILED"),
84
+ ]);
85
+ export const dripResponseCodec = t.type({
86
+ dripId: t.string,
87
+ status: dripStatusCodec,
88
+ taskStatus: t.union([t.string, t.null]),
89
+ transactionHash: t.union([t.string, t.null]),
90
+ error: t.union([t.string, t.null]),
91
+ });
92
+ export const dripHealthStatusCodec = t.union([t.literal("SERVING"), t.literal("NOT_SERVING")]);
93
+ export const dripHealthResponseCodec = t.type({
94
+ status: dripHealthStatusCodec,
95
+ reason: t.union([t.string, t.null]),
96
+ needsRestart: t.boolean,
97
+ });
98
+ // Third-party Drip API (the `/v1` surface, per the Google Drip API spec).
99
+ // The `drip*` codecs above stay the public `/api` contract the UI client speaks.
100
+ /**
101
+ * Error codes the third-party API reports. All but the last are the canonical
102
+ * literals the spec defines; `INVALID_REQUEST` covers a malformed body or an
103
+ * out-of-range amount, which the spec has no literal for. Unrecognised literals
104
+ * are defaulted to `INTERNAL_ERROR` by the caller, so it degrades safely while
105
+ * staying legible in our own logs.
106
+ */
107
+ export const dripErrorCodeCodec = t.union([
108
+ t.literal("INVALID_ADDRESS"),
109
+ t.literal("UNSUPPORTED_NETWORK"),
110
+ t.literal("UNSUPPORTED_TOKEN"),
111
+ t.literal("INVALID_API_KEY"),
112
+ t.literal("VERIFICATION_REJECTED"),
113
+ t.literal("DUPLICATE_CLAIM"),
114
+ t.literal("RATE_LIMIT_EXCEEDED"),
115
+ t.literal("INSUFFICIENT_FUNDS"),
116
+ t.literal("SERVICE_UNAVAILABLE"),
117
+ t.literal("INTERNAL_ERROR"),
118
+ t.literal("INVALID_REQUEST"),
119
+ ]);
120
+ export const dripErrorCodec = t.type({
121
+ code: dripErrorCodeCodec,
122
+ message: t.union([t.string, t.null]),
123
+ });
124
+ export const thirdPartyErrorResponseCodec = t.type({
125
+ error: dripErrorCodec,
126
+ });
127
+ /**
128
+ * `amount` stays a raw string here rather than decoding straight to `bigint`:
129
+ * parsing it separately is what lets a bad amount answer with its own error code
130
+ * instead of a generic decode failure. It is denominated in the token's smallest
131
+ * unit, and is optional — an omitted amount falls back to the configured default.
132
+ */
133
+ export const thirdPartyDripRequestCodec = t.intersection([
134
+ t.type({
135
+ recipientAddress: walletAddressCodec,
136
+ network: t.string,
137
+ token: t.string,
138
+ }),
139
+ t.partial({
140
+ amount: t.union([t.string, t.null]),
141
+ fulfillmentContext: t.union([t.UnknownRecord, t.null]),
142
+ }),
143
+ ]);
144
+ export const thirdPartyCreateDripResponseCodec = t.type({
145
+ dripId: t.string,
146
+ });
147
+ export const thirdPartyDripStatusResponseCodec = t.type({
148
+ dripId: t.string,
149
+ status: dripStatusCodec,
150
+ transactionHash: t.union([t.string, t.null]),
151
+ error: t.union([dripErrorCodec, t.null]),
152
+ });
153
+ export const thirdPartyDripInfoResponseCodec = t.type({
154
+ dripAmount: t.string,
155
+ });
156
+ export const thirdPartyHealthResponseCodec = t.type({
157
+ status: dripHealthStatusCodec,
158
+ reason: t.union([t.string, t.null]),
159
+ });
160
+ export const loginCodec = t.type({
161
+ username: t.string,
162
+ password: t.string,
163
+ });
164
+ export const newTokenPayloadCodec = t.type({
165
+ validDays: t.refinement(t.number, (number) => Number.isInteger(number) && number > 0, "positive integer"),
166
+ });
167
+ // This is the mapped state we use when we get state changes from the wallets
168
+ export const faucetStateCodec = t.readonly(t.type({
169
+ shielded: t.type({
170
+ address: ShieldedAddressCodec,
171
+ availableCoins: t.array(t.bigint),
172
+ totalCoins: t.array(t.bigint),
173
+ pendingCoins: t.array(t.bigint),
174
+ availableBalance: t.bigint,
175
+ syncProgress: t.type({
176
+ appliedIndex: t.bigint,
177
+ highestRelevantWalletIndex: t.bigint,
178
+ highestIndex: t.bigint,
179
+ highestRelevantIndex: t.bigint,
180
+ isConnected: t.boolean,
181
+ }),
182
+ isSynced: t.boolean,
183
+ }),
184
+ unshielded: t.type({
185
+ address: UnshieldedAddressCodec,
186
+ availableCoins: t.array(t.bigint),
187
+ totalCoins: t.array(t.bigint),
188
+ pendingCoins: t.array(t.bigint),
189
+ availableBalance: t.bigint,
190
+ syncProgress: t.type({
191
+ appliedId: t.bigint,
192
+ highestTransactionId: t.bigint,
193
+ isConnected: t.boolean,
194
+ }),
195
+ isSynced: t.boolean,
196
+ }),
197
+ dust: t.type({
198
+ availableCoins: t.array(t.bigint),
199
+ totalCoins: t.array(t.bigint),
200
+ pendingCoins: t.array(t.bigint),
201
+ availableBalance: t.bigint,
202
+ syncProgress: t.type({
203
+ appliedIndex: t.bigint,
204
+ highestRelevantWalletIndex: t.bigint,
205
+ highestIndex: t.bigint,
206
+ highestRelevantIndex: t.bigint,
207
+ isConnected: t.boolean,
208
+ }),
209
+ isSynced: t.boolean,
210
+ }),
211
+ }));
212
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./api.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./api.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as t from "io-ts";
2
+ export declare const ObjectToMap: t.Type<Map<string, number>, Record<string, number>, unknown>;
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAG3B,eAAO,MAAM,WAAW,8DAYvB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,12 @@
1
+ import { either } from "fp-ts/lib/Either.js";
2
+ import * as t from "io-ts";
3
+ // Generic map
4
+ export const ObjectToMap = new t.Type("ObjectToMap", (u) => u instanceof Map, (u, c) => either.chain(t.record(t.string, t.number).validate(u, c), (s) => {
5
+ try {
6
+ return t.success(new Map(Object.entries(s)));
7
+ }
8
+ catch {
9
+ return t.failure(u, c);
10
+ }
11
+ }), (map) => Object.fromEntries(map.entries()));
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,IAAI,CACnC,aAAa,EACb,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,YAAY,GAAG,EACjD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9D,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,EACJ,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@midnightntwrk/faucet-internal-api",
3
+ "version": "1.0.0",
4
+ "description": "Midnight faucet library",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/midnightntwrk/midnight-faucet-api.git"
18
+ },
19
+ "author": "IOHK",
20
+ "license": "Apache-2.0",
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "scripts": {
25
+ "lint": "eslint --max-warnings=0",
26
+ "build": "tsc -b ./tsconfig.build.json",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit",
28
+ "prepack": "yarn build",
29
+ "do-publish": "yarn npm publish"
30
+ },
31
+ "files": [
32
+ "dist/"
33
+ ],
34
+ "devDependencies": {
35
+ "@types/luxon": "3.7.5",
36
+ "eslint": "10.10.0",
37
+ "fast-check": "4.9.0",
38
+ "testcontainers": "12.1.0",
39
+ "typescript": "6.0.3"
40
+ },
41
+ "peerDependencies": {
42
+ "@midnightntwrk/wallet-sdk-address-format": "^4.0.0-canary.20260702133504-1f7aaca",
43
+ "fp-ts": "^2.16.0",
44
+ "io-ts": "^2.2.20",
45
+ "luxon": "^3.4.3",
46
+ "rxjs": "^7.5.5"
47
+ }
48
+ }