@polyester/sdk 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +63 -17
- package/dist/account-signer/types.d.ts.map +1 -1
- package/dist/account-signer/types.js +6 -3
- package/dist/account-signer/types.js.map +1 -1
- package/dist/browser-client.d.ts +4 -2
- package/dist/browser-client.d.ts.map +1 -1
- package/dist/browser-client.js +3 -4
- package/dist/browser-client.js.map +1 -1
- package/dist/catalogs/client-catalog.d.ts.map +1 -1
- package/dist/catalogs/client-catalog.js +11 -4
- package/dist/catalogs/client-catalog.js.map +1 -1
- package/dist/catalogs/index.js +1 -1
- package/dist/catalogs/readers.d.ts.map +1 -1
- package/dist/catalogs/readers.js +3 -1
- package/dist/catalogs/readers.js.map +1 -1
- package/dist/catalogs/snapshot-validation.js +132 -0
- package/dist/catalogs/snapshot-validation.js.map +1 -0
- package/dist/catalogs/snapshot.d.ts.map +1 -1
- package/dist/catalogs/snapshot.js +16 -7
- package/dist/catalogs/snapshot.js.map +1 -1
- package/dist/catalogs/zipper-supply.d.ts.map +1 -1
- package/dist/catalogs/zipper-supply.js +10 -7
- package/dist/catalogs/zipper-supply.js.map +1 -1
- package/dist/core-client.d.ts +24 -17
- package/dist/core-client.d.ts.map +1 -1
- package/dist/core-client.js +21 -3
- package/dist/core-client.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +32 -1
- package/dist/environment.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/realtime/client.js +13 -2
- package/dist/realtime/client.js.map +1 -1
- package/dist/realtime/snapshot-then-stream.js +1 -1
- package/dist/realtime/snapshot-then-stream.js.map +1 -1
- package/dist/realtime/types.d.ts +2 -0
- package/dist/realtime/types.d.ts.map +1 -1
- package/dist/server-client.d.ts +17 -8
- package/dist/server-client.d.ts.map +1 -1
- package/dist/server-client.js +8 -11
- package/dist/server-client.js.map +1 -1
- package/dist/services/accounts/accounts.js +3 -3
- package/dist/services/accounts/accounts.js.map +1 -1
- package/dist/services/address-book/address-book.js +28 -28
- package/dist/services/address-book/address-book.js.map +1 -1
- package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
- package/dist/services/address-book/address-book.schemas.js +2 -1
- package/dist/services/address-book/address-book.schemas.js.map +1 -1
- package/dist/services/api-keys/api-keys.d.ts.map +1 -1
- package/dist/services/api-keys/api-keys.js +12 -12
- package/dist/services/api-keys/api-keys.js.map +1 -1
- package/dist/services/auth/auth.d.ts +9 -3
- package/dist/services/auth/auth.d.ts.map +1 -1
- package/dist/services/auth/auth.js +11 -7
- package/dist/services/auth/auth.js.map +1 -1
- package/dist/services/auth/profile/profile.d.ts.map +1 -1
- package/dist/services/auth/profile/profile.js +7 -6
- package/dist/services/auth/profile/profile.js.map +1 -1
- package/dist/services/auth/session.d.ts +1 -1
- package/dist/services/auth/session.d.ts.map +1 -1
- package/dist/services/auth/session.js +6 -2
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/auth/session.types.d.ts +3 -2
- package/dist/services/auth/session.types.d.ts.map +1 -1
- package/dist/services/balances/balances.d.ts +1 -1
- package/dist/services/balances/balances.d.ts.map +1 -1
- package/dist/services/balances/balances.js +9 -8
- package/dist/services/balances/balances.js.map +1 -1
- package/dist/services/balances/balances.schemas.d.ts +1 -1
- package/dist/services/balances/balances.schemas.d.ts.map +1 -1
- package/dist/services/balances/balances.schemas.js +1 -1
- package/dist/services/balances/balances.schemas.js.map +1 -1
- package/dist/services/candles/candles.d.ts.map +1 -1
- package/dist/services/candles/candles.js +10 -9
- package/dist/services/candles/candles.js.map +1 -1
- package/dist/services/candles/candles.schemas.d.ts +11 -11
- package/dist/services/candles/candles.schemas.d.ts.map +1 -1
- package/dist/services/candles/candles.schemas.js +1 -2
- package/dist/services/candles/candles.schemas.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.js +7 -7
- package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
- package/dist/services/deposit/deposit.js +5 -5
- package/dist/services/deposit/deposit.js.map +1 -1
- package/dist/services/guard-signer/guard-signer.js +13 -13
- package/dist/services/guard-signer/guard-signer.js.map +1 -1
- package/dist/services/heatmap/heatmap.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.js +6 -5
- package/dist/services/heatmap/heatmap.js.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.d.ts +17 -17
- package/dist/services/heatmap/heatmap.schemas.js +1 -1
- package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.js +3 -3
- package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.d.ts.map +1 -1
- package/dist/services/lifecycle/lifecycle.js +9 -8
- package/dist/services/lifecycle/lifecycle.js.map +1 -1
- package/dist/services/market-data/market-data.d.ts.map +1 -1
- package/dist/services/market-data/market-data.js +6 -5
- package/dist/services/market-data/market-data.js.map +1 -1
- package/dist/services/market-data/market-data.schemas.d.ts +2 -2
- package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
- package/dist/services/market-data/market-data.schemas.js +2 -6
- package/dist/services/market-data/market-data.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.js +4 -3
- package/dist/services/market-overview/market-overview.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +3 -3
- package/dist/services/mfa/mfa.js +27 -27
- package/dist/services/mfa/mfa.js.map +1 -1
- package/dist/services/orderbook/orderbook.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.js +5 -4
- package/dist/services/orderbook/orderbook.js.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.d.ts +1 -1
- package/dist/services/orders/orders-batch.schemas.d.ts +14 -14
- package/dist/services/orders/orders-batch.schemas.js +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +13 -4
- package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-input.schemas.js +8 -4
- package/dist/services/orders/orders-input.schemas.js.map +1 -1
- package/dist/services/orders/orders-modify.schemas.d.ts +22 -3
- package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-modify.schemas.js +7 -3
- package/dist/services/orders/orders-modify.schemas.js.map +1 -1
- package/dist/services/orders/orders-output.schemas.d.ts +12 -12
- package/dist/services/orders/orders.d.ts +2 -2
- package/dist/services/orders/orders.d.ts.map +1 -1
- package/dist/services/orders/orders.js +44 -31
- package/dist/services/orders/orders.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.js +11 -11
- package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.js +13 -12
- package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
- package/dist/services/social-verification/social-verification.d.ts.map +1 -1
- package/dist/services/social-verification/social-verification.js +7 -7
- package/dist/services/social-verification/social-verification.js.map +1 -1
- package/dist/services/subaccount-resolver.js +5 -3
- package/dist/services/subaccount-resolver.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.d.ts +1 -1
- package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
- package/dist/services/subaccounts/subaccounts.js +34 -33
- package/dist/services/subaccounts/subaccounts.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +2 -2
- package/dist/services/subaccounts/subaccounts.schemas.js +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
- package/dist/services/trades/trades.d.ts.map +1 -1
- package/dist/services/trades/trades.js +5 -4
- package/dist/services/trades/trades.js.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.js +8 -8
- package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
- package/dist/services/transfers/transfers.d.ts +1 -1
- package/dist/services/transfers/transfers.d.ts.map +1 -1
- package/dist/services/transfers/transfers.js +5 -4
- package/dist/services/transfers/transfers.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +1 -1
- package/dist/services/triggers/triggers-output.schemas.d.ts +1 -1
- package/dist/services/triggers/triggers.d.ts.map +1 -1
- package/dist/services/triggers/triggers.js +21 -20
- package/dist/services/triggers/triggers.js.map +1 -1
- package/dist/services/whiteboard/whiteboard.js +15 -15
- package/dist/services/whiteboard/whiteboard.js.map +1 -1
- package/dist/services/zipper/zipper.js +3 -3
- package/dist/services/zipper/zipper.js.map +1 -1
- package/dist/shared/connect-error-mapping.d.ts +1 -1
- package/dist/shared/connect-error-mapping.js +27 -1
- package/dist/shared/connect-error-mapping.js.map +1 -1
- package/dist/shared/transports.js +7 -12
- package/dist/shared/transports.js.map +1 -1
- package/dist/shared/types.d.ts +12 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/validation.js +19 -0
- package/dist/shared/validation.js.map +1 -0
- package/dist/utils/cookies.d.ts +8 -3
- package/dist/utils/cookies.d.ts.map +1 -1
- package/dist/utils/cookies.js +7 -1
- package/dist/utils/cookies.js.map +1 -1
- package/dist/utils/event-emitter.d.ts +1 -1
- package/dist/utils/event-emitter.d.ts.map +1 -1
- package/dist/utils/event-emitter.js +4 -2
- package/dist/utils/event-emitter.js.map +1 -1
- package/dist/utils/evm.js +2 -2
- package/dist/utils/evm.js.map +1 -1
- package/dist/utils/jwt.d.ts +2 -2
- package/dist/utils/jwt.d.ts.map +1 -1
- package/dist/utils/jwt.js +2 -2
- package/dist/utils/jwt.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { parse } from "../../shared/validation.js";
|
|
1
2
|
import { toConnectCallOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { removeUndefined } from "../../utils/remove-undefined.js";
|
|
3
4
|
import { resolveAccountScopedInput } from "../subaccount-resolver.js";
|
|
4
5
|
import { AddressBookService as AddressBookService$1, AddressBookViewInvalidatedSchema } from "../../gen/auth/v1/address_book_pb.js";
|
|
5
6
|
import { AddressBookEntriesSchema, AddressBookEntrySchema, AddressBookSchema, AddressBookTagSchema, AddressBookViewInvalidatedSchema as AddressBookViewInvalidatedSchema$1, AddressBookViewSchema, CopyAddressBookEntryInputSchema, CreateAddressBookEntryInputSchema, CreateAddressBookTagInputSchema, DeleteAddressBookEntryInputSchema, DeleteAddressBookTagInputSchema, GetAddressBookViewInputSchema, InternalTransferWhitelistEntriesSchema, ListAddressBookEntriesInputSchema, ListInternalTransferWhitelistEntriesInputSchema, ListTransferCounterpartiesInputSchema, ListTransferDestinationsInputSchema, SubaccountScopedInputSchema, TransferCounterpartiesSchema, TransferDestinationsSchema, UpdateAddressBookEntryInputSchema, UpdateAddressBookTagInputSchema, WithdrawWhitelistViewSchema } from "./address-book.schemas.js";
|
|
6
7
|
import { createClient } from "@connectrpc/connect";
|
|
7
|
-
import * as v from "valibot";
|
|
8
8
|
//#region src/services/address-book/address-book.ts
|
|
9
9
|
/**
|
|
10
10
|
* Manages saved transfer destinations, tags, whitelist views, and recent counterparties for root or subaccount-scoped address books.
|
|
@@ -22,16 +22,16 @@ var AddressBookService = class {
|
|
|
22
22
|
* Returns the root and subaccount address books visible to the caller, including caller role and display metadata.
|
|
23
23
|
*/
|
|
24
24
|
async listBooks(options) {
|
|
25
|
-
return (await this.#client.listAddressBooks({}, toConnectCallOptions(options))).books.map((book) =>
|
|
25
|
+
return (await this.#client.listAddressBooks({}, toConnectCallOptions(options))).books.map((book) => parse(AddressBookSchema, book));
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Returns saved address-book entries for the resolved subaccount scope, optionally filtered by external-chain or internal-account destination kind.
|
|
29
29
|
*/
|
|
30
30
|
async listEntries(input = {}, options) {
|
|
31
|
-
const request =
|
|
31
|
+
const request = parse(ListAddressBookEntriesInputSchema, this.resolveInput(input));
|
|
32
32
|
const response = await this.#client.listAddressBookEntries(removeUndefined(request), toConnectCallOptions(options));
|
|
33
33
|
return {
|
|
34
|
-
entries:
|
|
34
|
+
entries: parse(AddressBookEntriesSchema, response.entries),
|
|
35
35
|
nextPageToken: response.nextPageToken
|
|
36
36
|
};
|
|
37
37
|
}
|
|
@@ -39,64 +39,64 @@ var AddressBookService = class {
|
|
|
39
39
|
* Creates a saved external withdrawal or internal transfer destination in the resolved address book, optionally attaching existing tags and creating new tags in the same request.
|
|
40
40
|
*/
|
|
41
41
|
async createEntry(input, options) {
|
|
42
|
-
const request =
|
|
42
|
+
const request = parse(CreateAddressBookEntryInputSchema, this.resolveInput(input));
|
|
43
43
|
const response = await this.#client.createAddressBookEntry(removeUndefined(request), toConnectCallOptions(options));
|
|
44
|
-
return response.entry ?
|
|
44
|
+
return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* Updates selected saved-destination metadata using optimistic concurrency.
|
|
48
48
|
*/
|
|
49
49
|
async updateEntry(input, options) {
|
|
50
|
-
const request =
|
|
50
|
+
const request = parse(UpdateAddressBookEntryInputSchema, input);
|
|
51
51
|
const response = await this.#client.updateAddressBookEntry(removeUndefined(request), toConnectCallOptions(options));
|
|
52
|
-
return response.entry ?
|
|
52
|
+
return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* Deletes one saved destination from the selected address book.
|
|
56
56
|
*/
|
|
57
57
|
async deleteEntry(input, options) {
|
|
58
|
-
const request =
|
|
58
|
+
const request = parse(DeleteAddressBookEntryInputSchema, input);
|
|
59
59
|
await this.#client.deleteAddressBookEntry(request, toConnectCallOptions(options));
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Copies a saved destination into another visible root or subaccount address book.
|
|
63
63
|
*/
|
|
64
64
|
async copyEntry(input, options) {
|
|
65
|
-
const request =
|
|
65
|
+
const request = parse(CopyAddressBookEntryInputSchema, input);
|
|
66
66
|
const response = await this.#client.copyAddressBookEntry(removeUndefined(request), toConnectCallOptions(options));
|
|
67
|
-
return response.entry ?
|
|
67
|
+
return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* Creates a tag in the resolved address book scope for organizing saved destinations.
|
|
71
71
|
*/
|
|
72
72
|
async createTag(input, options) {
|
|
73
|
-
const request =
|
|
73
|
+
const request = parse(CreateAddressBookTagInputSchema, this.resolveInput(input));
|
|
74
74
|
const response = await this.#client.createAddressBookTag(removeUndefined(request), toConnectCallOptions(options));
|
|
75
|
-
return response.tag ?
|
|
75
|
+
return response.tag ? parse(AddressBookTagSchema, response.tag) : null;
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
78
|
* Updates a tag's name and optional color token.
|
|
79
79
|
*/
|
|
80
80
|
async updateTag(input, options) {
|
|
81
|
-
const request =
|
|
81
|
+
const request = parse(UpdateAddressBookTagInputSchema, input);
|
|
82
82
|
const response = await this.#client.updateAddressBookTag(removeUndefined(request), toConnectCallOptions(options));
|
|
83
|
-
return response.tag ?
|
|
83
|
+
return response.tag ? parse(AddressBookTagSchema, response.tag) : null;
|
|
84
84
|
}
|
|
85
85
|
/**
|
|
86
86
|
* Deletes a tag and detaches it from any address-book entries.
|
|
87
87
|
*/
|
|
88
88
|
async deleteTag(input, options) {
|
|
89
|
-
const request =
|
|
89
|
+
const request = parse(DeleteAddressBookTagInputSchema, input);
|
|
90
90
|
await this.#client.deleteAddressBookTag(request, toConnectCallOptions(options));
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
93
|
* Returns recent transfer counterparties, including unsaved destinations, with direction, kind, use count, and first/last seen timestamps.
|
|
94
94
|
*/
|
|
95
95
|
async listTransferCounterparties(input = {}, options) {
|
|
96
|
-
const request =
|
|
96
|
+
const request = parse(ListTransferCounterpartiesInputSchema, this.resolveInput(input));
|
|
97
97
|
const response = await this.#client.listTransferCounterparties(removeUndefined(request), toConnectCallOptions(options));
|
|
98
98
|
return {
|
|
99
|
-
counterparties:
|
|
99
|
+
counterparties: parse(TransferCounterpartiesSchema, response.counterparties),
|
|
100
100
|
truncated: response.truncated
|
|
101
101
|
};
|
|
102
102
|
}
|
|
@@ -104,10 +104,10 @@ var AddressBookService = class {
|
|
|
104
104
|
* Returns saved and whitelisted destinations available for transfer flows in the resolved address book scope.
|
|
105
105
|
*/
|
|
106
106
|
async listTransferDestinations(input = {}, options) {
|
|
107
|
-
const request =
|
|
107
|
+
const request = parse(ListTransferDestinationsInputSchema, this.resolveInput(input));
|
|
108
108
|
const response = await this.#client.listTransferDestinations(removeUndefined(request), toConnectCallOptions(options));
|
|
109
109
|
return {
|
|
110
|
-
destinations:
|
|
110
|
+
destinations: parse(TransferDestinationsSchema, response.destinations),
|
|
111
111
|
nextPageToken: response.nextPageToken
|
|
112
112
|
};
|
|
113
113
|
}
|
|
@@ -115,10 +115,10 @@ var AddressBookService = class {
|
|
|
115
115
|
* Returns internal-transfer whitelist entries for the resolved scope, including target account metadata and resolution status.
|
|
116
116
|
*/
|
|
117
117
|
async listInternalTransferWhitelistEntries(input = {}, options) {
|
|
118
|
-
const request =
|
|
118
|
+
const request = parse(ListInternalTransferWhitelistEntriesInputSchema, this.resolveInput(input));
|
|
119
119
|
const response = await this.#client.listInternalTransferWhitelistEntries(removeUndefined(request), toConnectCallOptions(options));
|
|
120
120
|
return {
|
|
121
|
-
entries:
|
|
121
|
+
entries: parse(InternalTransferWhitelistEntriesSchema, response.entries),
|
|
122
122
|
nextPageToken: response.nextPageToken
|
|
123
123
|
};
|
|
124
124
|
}
|
|
@@ -126,17 +126,17 @@ var AddressBookService = class {
|
|
|
126
126
|
* Returns external and internal withdrawal whitelist requirements plus active mirrored external whitelist entries for the resolved scope.
|
|
127
127
|
*/
|
|
128
128
|
async getWithdrawWhitelistView(input = {}, options) {
|
|
129
|
-
const request =
|
|
129
|
+
const request = parse(SubaccountScopedInputSchema, this.resolveInput(input));
|
|
130
130
|
const response = await this.#client.getWithdrawWhitelistView(removeUndefined(request), toConnectCallOptions(options));
|
|
131
|
-
return response.view ?
|
|
131
|
+
return response.view ? parse(WithdrawWhitelistViewSchema, response.view) : null;
|
|
132
132
|
}
|
|
133
133
|
/**
|
|
134
134
|
* Fetches the combined address-book view used by dashboards: books, saved entries, recent destinations, tags, and withdrawal whitelist status.
|
|
135
135
|
*/
|
|
136
136
|
async getView(input = {}, options) {
|
|
137
|
-
const request =
|
|
137
|
+
const request = parse(GetAddressBookViewInputSchema, this.resolveInput(input));
|
|
138
138
|
const response = await this.#client.getAddressBookView(removeUndefined(request), toConnectCallOptions(options));
|
|
139
|
-
return
|
|
139
|
+
return parse(AddressBookViewSchema, response);
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
142
|
* Subscribes to scoped address-book view invalidation signals for a root account.
|
|
@@ -149,11 +149,11 @@ var AddressBookService = class {
|
|
|
149
149
|
channel,
|
|
150
150
|
schema: AddressBookViewInvalidatedSchema,
|
|
151
151
|
onPublication: (data) => {
|
|
152
|
-
input.onEvent(
|
|
152
|
+
input.onEvent(parse(AddressBookViewInvalidatedSchema$1, data));
|
|
153
153
|
},
|
|
154
154
|
onConnected: () => input.onOpen?.(),
|
|
155
155
|
onDisconnected: () => input.onClose?.(),
|
|
156
|
-
onError:
|
|
156
|
+
onError: input.onError
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
159
|
resolveInput(input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-book.js","names":["#client","Proto.AddressBookService","#realtime","#resolver","Proto.AddressBookViewInvalidatedSchema","AddressBookViewInvalidatedSchema"],"sources":["../../../src/services/address-book/address-book.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { AccountScopedInput } from \"../../shared/account-scope.js\";\nimport * as v from \"valibot\";\nimport {\n AddressBookEntriesSchema,\n AddressBookEntrySchema,\n AddressBookSchema,\n AddressBookTagSchema,\n AddressBookViewSchema,\n AddressBookViewInvalidatedSchema,\n CopyAddressBookEntryInputSchema,\n CreateAddressBookEntryInputSchema,\n CreateAddressBookTagInputSchema,\n DeleteAddressBookEntryInputSchema,\n DeleteAddressBookTagInputSchema,\n GetAddressBookViewInputSchema,\n InternalTransferWhitelistEntriesSchema,\n ListAddressBookEntriesInputSchema,\n ListInternalTransferWhitelistEntriesInputSchema,\n ListTransferCounterpartiesInputSchema,\n ListTransferDestinationsInputSchema,\n SubaccountScopedInputSchema,\n TransferCounterpartiesSchema,\n TransferDestinationsSchema,\n UpdateAddressBookEntryInputSchema,\n UpdateAddressBookTagInputSchema,\n WithdrawWhitelistViewSchema,\n type AddressBook,\n type AddressBookEntries,\n type AddressBookEntry,\n type AddressBookTag,\n type AddressBookView,\n type AddressBookViewInvalidated,\n type CopyAddressBookEntryInput,\n type CreateAddressBookEntryInput,\n type CreateAddressBookTagInput,\n type DeleteAddressBookEntryInput,\n type DeleteAddressBookTagInput,\n type GetAddressBookViewInput,\n type InternalTransferWhitelistEntries,\n type ListAddressBookEntriesInput,\n type ListInternalTransferWhitelistEntriesInput,\n type ListTransferCounterpartiesInput,\n type ListTransferDestinationsInput,\n type SubaccountScopedInput,\n type TransferCounterparties,\n type TransferDestinations,\n type UpdateAddressBookEntryInput,\n type UpdateAddressBookTagInput,\n type WithdrawWhitelistView,\n} from \"./address-book.schemas.js\";\n\ninterface SubscribeViewInvalidationsInput extends BaseSubscribeInput<AddressBookViewInvalidated> {\n rootAccountPublicId: string;\n}\n\n/**\n * Manages saved transfer destinations, tags, whitelist views, and recent counterparties for root or subaccount-scoped address books.\n */\nexport class AddressBookService {\n #client: Client<typeof Proto.AddressBookService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.#client = createClient(Proto.AddressBookService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns the root and subaccount address books visible to the caller, including caller role and display metadata.\n */\n async listBooks(options?: PolyesterRequestOptions): Promise<AddressBook[]> {\n const response = await this.#client.listAddressBooks({}, toConnectCallOptions(options));\n return response.books.map((book) => v.parse(AddressBookSchema, book));\n }\n\n /**\n * Returns saved address-book entries for the resolved subaccount scope, optionally filtered by external-chain or internal-account destination kind.\n */\n async listEntries(\n input: ListAddressBookEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: AddressBookEntries; nextPageToken: string }> {\n const request = v.parse(ListAddressBookEntriesInputSchema, this.resolveInput(input));\n const response = await this.#client.listAddressBookEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: v.parse(AddressBookEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Creates a saved external withdrawal or internal transfer destination in the resolved address book, optionally attaching existing tags and creating new tags in the same request.\n */\n async createEntry(\n input: CreateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(CreateAddressBookEntryInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Updates selected saved-destination metadata using optimistic concurrency.\n */\n async updateEntry(\n input: UpdateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(UpdateAddressBookEntryInputSchema, input);\n const response = await this.#client.updateAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Deletes one saved destination from the selected address book.\n */\n async deleteEntry(\n input: DeleteAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = v.parse(DeleteAddressBookEntryInputSchema, input);\n await this.#client.deleteAddressBookEntry(request, toConnectCallOptions(options));\n }\n\n /**\n * Copies a saved destination into another visible root or subaccount address book.\n */\n async copyEntry(\n input: CopyAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(CopyAddressBookEntryInputSchema, input);\n const response = await this.#client.copyAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Creates a tag in the resolved address book scope for organizing saved destinations.\n */\n async createTag(\n input: CreateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = v.parse(CreateAddressBookTagInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? v.parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Updates a tag's name and optional color token.\n */\n async updateTag(\n input: UpdateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = v.parse(UpdateAddressBookTagInputSchema, input);\n const response = await this.#client.updateAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? v.parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Deletes a tag and detaches it from any address-book entries.\n */\n async deleteTag(\n input: DeleteAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = v.parse(DeleteAddressBookTagInputSchema, input);\n await this.#client.deleteAddressBookTag(request, toConnectCallOptions(options));\n }\n\n /**\n * Returns recent transfer counterparties, including unsaved destinations, with direction, kind, use count, and first/last seen timestamps.\n */\n async listTransferCounterparties(\n input: ListTransferCounterpartiesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ counterparties: TransferCounterparties; truncated: boolean }> {\n const request = v.parse(ListTransferCounterpartiesInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferCounterparties(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n counterparties: v.parse(TransferCounterpartiesSchema, response.counterparties),\n truncated: response.truncated,\n };\n }\n\n /**\n * Returns saved and whitelisted destinations available for transfer flows in the resolved address book scope.\n */\n async listTransferDestinations(\n input: ListTransferDestinationsInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ destinations: TransferDestinations; nextPageToken: string }> {\n const request = v.parse(ListTransferDestinationsInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferDestinations(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n destinations: v.parse(TransferDestinationsSchema, response.destinations),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns internal-transfer whitelist entries for the resolved scope, including target account metadata and resolution status.\n */\n async listInternalTransferWhitelistEntries(\n input: ListInternalTransferWhitelistEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: InternalTransferWhitelistEntries; nextPageToken: string }> {\n const request = v.parse(\n ListInternalTransferWhitelistEntriesInputSchema,\n this.resolveInput(input),\n );\n const response = await this.#client.listInternalTransferWhitelistEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: v.parse(InternalTransferWhitelistEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns external and internal withdrawal whitelist requirements plus active mirrored external whitelist entries for the resolved scope.\n */\n async getWithdrawWhitelistView(\n input: SubaccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<WithdrawWhitelistView | null> {\n const request = v.parse(SubaccountScopedInputSchema, this.resolveInput(input));\n const response = await this.#client.getWithdrawWhitelistView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.view ? v.parse(WithdrawWhitelistViewSchema, response.view) : null;\n }\n\n /**\n * Fetches the combined address-book view used by dashboards: books, saved entries, recent destinations, tags, and withdrawal whitelist status.\n */\n async getView(\n input: GetAddressBookViewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<AddressBookView> {\n const request = v.parse(GetAddressBookViewInputSchema, this.resolveInput(input));\n const response = await this.#client.getAddressBookView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return v.parse(AddressBookViewSchema, response);\n }\n\n /**\n * Subscribes to scoped address-book view invalidation signals for a root account.\n *\n * Use `scope` and `invalidatedAt` for diagnostics and ordering, then refetch `getView` for the canonical aggregate (entries, tags, recent destinations, whitelist). Do not patch individual rows from these events.\n */\n subscribeViewInvalidations(input: SubscribeViewInvalidationsInput): () => void {\n const channel = `private:auth:address-books:${input.rootAccountPublicId}:proto`;\n\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AddressBookViewInvalidatedSchema,\n onPublication: (data) => {\n input.onEvent(v.parse(AddressBookViewInvalidatedSchema, data));\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: (ctx) => input.onError?.(ctx),\n });\n }\n\n private resolveInput<TInput extends AccountScopedInput>(input: TInput): TInput {\n return resolveAccountScopedInput(input, this.#resolver);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"address-book.js","names":["#client","Proto.AddressBookService","#realtime","#resolver","Proto.AddressBookViewInvalidatedSchema","AddressBookViewInvalidatedSchema"],"sources":["../../../src/services/address-book/address-book.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { AccountScopedInput } from \"../../shared/account-scope.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n AddressBookEntriesSchema,\n AddressBookEntrySchema,\n AddressBookSchema,\n AddressBookTagSchema,\n AddressBookViewSchema,\n AddressBookViewInvalidatedSchema,\n CopyAddressBookEntryInputSchema,\n CreateAddressBookEntryInputSchema,\n CreateAddressBookTagInputSchema,\n DeleteAddressBookEntryInputSchema,\n DeleteAddressBookTagInputSchema,\n GetAddressBookViewInputSchema,\n InternalTransferWhitelistEntriesSchema,\n ListAddressBookEntriesInputSchema,\n ListInternalTransferWhitelistEntriesInputSchema,\n ListTransferCounterpartiesInputSchema,\n ListTransferDestinationsInputSchema,\n SubaccountScopedInputSchema,\n TransferCounterpartiesSchema,\n TransferDestinationsSchema,\n UpdateAddressBookEntryInputSchema,\n UpdateAddressBookTagInputSchema,\n WithdrawWhitelistViewSchema,\n type AddressBook,\n type AddressBookEntries,\n type AddressBookEntry,\n type AddressBookTag,\n type AddressBookView,\n type AddressBookViewInvalidated,\n type CopyAddressBookEntryInput,\n type CreateAddressBookEntryInput,\n type CreateAddressBookTagInput,\n type DeleteAddressBookEntryInput,\n type DeleteAddressBookTagInput,\n type GetAddressBookViewInput,\n type InternalTransferWhitelistEntries,\n type ListAddressBookEntriesInput,\n type ListInternalTransferWhitelistEntriesInput,\n type ListTransferCounterpartiesInput,\n type ListTransferDestinationsInput,\n type SubaccountScopedInput,\n type TransferCounterparties,\n type TransferDestinations,\n type UpdateAddressBookEntryInput,\n type UpdateAddressBookTagInput,\n type WithdrawWhitelistView,\n} from \"./address-book.schemas.js\";\n\ninterface SubscribeViewInvalidationsInput extends BaseSubscribeInput<AddressBookViewInvalidated> {\n rootAccountPublicId: string;\n}\n\n/**\n * Manages saved transfer destinations, tags, whitelist views, and recent counterparties for root or subaccount-scoped address books.\n */\nexport class AddressBookService {\n #client: Client<typeof Proto.AddressBookService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.#client = createClient(Proto.AddressBookService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns the root and subaccount address books visible to the caller, including caller role and display metadata.\n */\n async listBooks(options?: PolyesterRequestOptions): Promise<AddressBook[]> {\n const response = await this.#client.listAddressBooks({}, toConnectCallOptions(options));\n return response.books.map((book) => parse(AddressBookSchema, book));\n }\n\n /**\n * Returns saved address-book entries for the resolved subaccount scope, optionally filtered by external-chain or internal-account destination kind.\n */\n async listEntries(\n input: ListAddressBookEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: AddressBookEntries; nextPageToken: string }> {\n const request = parse(ListAddressBookEntriesInputSchema, this.resolveInput(input));\n const response = await this.#client.listAddressBookEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: parse(AddressBookEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Creates a saved external withdrawal or internal transfer destination in the resolved address book, optionally attaching existing tags and creating new tags in the same request.\n */\n async createEntry(\n input: CreateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(CreateAddressBookEntryInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Updates selected saved-destination metadata using optimistic concurrency.\n */\n async updateEntry(\n input: UpdateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(UpdateAddressBookEntryInputSchema, input);\n const response = await this.#client.updateAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Deletes one saved destination from the selected address book.\n */\n async deleteEntry(\n input: DeleteAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = parse(DeleteAddressBookEntryInputSchema, input);\n await this.#client.deleteAddressBookEntry(request, toConnectCallOptions(options));\n }\n\n /**\n * Copies a saved destination into another visible root or subaccount address book.\n */\n async copyEntry(\n input: CopyAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(CopyAddressBookEntryInputSchema, input);\n const response = await this.#client.copyAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Creates a tag in the resolved address book scope for organizing saved destinations.\n */\n async createTag(\n input: CreateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = parse(CreateAddressBookTagInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Updates a tag's name and optional color token.\n */\n async updateTag(\n input: UpdateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = parse(UpdateAddressBookTagInputSchema, input);\n const response = await this.#client.updateAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Deletes a tag and detaches it from any address-book entries.\n */\n async deleteTag(\n input: DeleteAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = parse(DeleteAddressBookTagInputSchema, input);\n await this.#client.deleteAddressBookTag(request, toConnectCallOptions(options));\n }\n\n /**\n * Returns recent transfer counterparties, including unsaved destinations, with direction, kind, use count, and first/last seen timestamps.\n */\n async listTransferCounterparties(\n input: ListTransferCounterpartiesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ counterparties: TransferCounterparties; truncated: boolean }> {\n const request = parse(ListTransferCounterpartiesInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferCounterparties(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n counterparties: parse(TransferCounterpartiesSchema, response.counterparties),\n truncated: response.truncated,\n };\n }\n\n /**\n * Returns saved and whitelisted destinations available for transfer flows in the resolved address book scope.\n */\n async listTransferDestinations(\n input: ListTransferDestinationsInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ destinations: TransferDestinations; nextPageToken: string }> {\n const request = parse(ListTransferDestinationsInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferDestinations(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n destinations: parse(TransferDestinationsSchema, response.destinations),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns internal-transfer whitelist entries for the resolved scope, including target account metadata and resolution status.\n */\n async listInternalTransferWhitelistEntries(\n input: ListInternalTransferWhitelistEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: InternalTransferWhitelistEntries; nextPageToken: string }> {\n const request = parse(\n ListInternalTransferWhitelistEntriesInputSchema,\n this.resolveInput(input),\n );\n const response = await this.#client.listInternalTransferWhitelistEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: parse(InternalTransferWhitelistEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns external and internal withdrawal whitelist requirements plus active mirrored external whitelist entries for the resolved scope.\n */\n async getWithdrawWhitelistView(\n input: SubaccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<WithdrawWhitelistView | null> {\n const request = parse(SubaccountScopedInputSchema, this.resolveInput(input));\n const response = await this.#client.getWithdrawWhitelistView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.view ? parse(WithdrawWhitelistViewSchema, response.view) : null;\n }\n\n /**\n * Fetches the combined address-book view used by dashboards: books, saved entries, recent destinations, tags, and withdrawal whitelist status.\n */\n async getView(\n input: GetAddressBookViewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<AddressBookView> {\n const request = parse(GetAddressBookViewInputSchema, this.resolveInput(input));\n const response = await this.#client.getAddressBookView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(AddressBookViewSchema, response);\n }\n\n /**\n * Subscribes to scoped address-book view invalidation signals for a root account.\n *\n * Use `scope` and `invalidatedAt` for diagnostics and ordering, then refetch `getView` for the canonical aggregate (entries, tags, recent destinations, whitelist). Do not patch individual rows from these events.\n */\n subscribeViewInvalidations(input: SubscribeViewInvalidationsInput): () => void {\n const channel = `private:auth:address-books:${input.rootAccountPublicId}:proto`;\n\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AddressBookViewInvalidatedSchema,\n onPublication: (data) => {\n input.onEvent(parse(AddressBookViewInvalidatedSchema, data));\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n\n private resolveInput<TInput extends AccountScopedInput>(input: TInput): TInput {\n return resolveAccountScopedInput(input, this.#resolver);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-book.schemas.d.ts","names":[],"sources":["../../../src/services/address-book/address-book.schemas.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"address-book.schemas.d.ts","names":[],"sources":["../../../src/services/address-book/address-book.schemas.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { requiredEnumLabel } from "../../shared/proto-enum-codec.js";
|
|
2
2
|
import { BigIntStringSchema, OptionalTimestampMsSchema, PublicIdSchema, TimestampMsSchema as TimestampMsSchema$1, idInputSchema, optionalSubaccountIdInputSchema, positiveBigintStringInputSchema } from "../../shared/schemas.js";
|
|
3
|
+
import { parse } from "../../shared/validation.js";
|
|
3
4
|
import { buildProtoPatch, defineProtoPatchFields } from "../../utils/proto-patch.js";
|
|
4
5
|
import { AccountScopeInputEntries, accountScopeToSubaccountId } from "../../shared/account-scope.js";
|
|
5
6
|
import { SubaccountRole } from "../../gen/auth/v1/subaccounts_pb.js";
|
|
@@ -59,7 +60,7 @@ const CreateAddressBookEntryInputSchema = v.pipe(v.strictObject({
|
|
|
59
60
|
}
|
|
60
61
|
})));
|
|
61
62
|
function validateCreateAddressBookEntryInput(input) {
|
|
62
|
-
|
|
63
|
+
parse(CreateAddressBookEntryInputSchema, input);
|
|
63
64
|
}
|
|
64
65
|
const ADDRESS_BOOK_ENTRY_PATCH_FIELDS = defineProtoPatchFields()({
|
|
65
66
|
label: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-book.schemas.js","names":["Proto.AccountScopeType","Proto.DestinationWhitelistStatus","Proto.AddressBookEntryKind","Proto.TransferCounterpartyDirection","Proto.InternalWhitelistResolutionStatus","RequiredTimestampMsSchema"],"sources":["../../../src/services/address-book/address-book.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport { SubaccountRole } from \"../../gen/auth/v1/subaccounts_pb.js\";\nimport {\n OptionalTimestampMsSchema,\n BigIntStringSchema,\n PublicIdSchema,\n TimestampMsSchema as RequiredTimestampMsSchema,\n idInputSchema,\n optionalSubaccountIdInputSchema,\n positiveBigintStringInputSchema,\n} from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n ADDRESS_BOOK_ENTRY_KIND_VALUES,\n AccountScopeTypeCodec,\n AddressBookEntryKindCodec,\n DestinationWhitelistStatusCodec,\n InternalWhitelistResolutionStatusCodec,\n TRANSFER_COUNTERPARTY_DIRECTION_VALUES,\n TransferCounterpartyDirectionCodec,\n} from \"./address-book.codecs.js\";\nimport { SubaccountRoleCodec } from \"../subaccounts/subaccounts.codecs.js\";\nimport { buildProtoPatch, defineProtoPatchFields } from \"../../utils/proto-patch.js\";\n\nconst OptionalSubaccountIdSchema = optionalSubaccountIdInputSchema();\nconst IdSchema = idInputSchema;\n\nconst AddressBookLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(500)),\n);\nconst AddressBookCounterpartyLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(200)),\n);\nconst AddressBookViewLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(200)),\n);\nconst PageTokenSchema = v.optional(v.pipe(v.string(), v.trim()), \"\");\n\nconst TimestampMsSchema = OptionalTimestampMsSchema;\n\nconst AddressBookTagInputSchema = v.strictObject({\n name: v.pipe(v.string(), v.trim(), v.minLength(1)),\n color: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n});\n\nexport const ListAddressBookEntriesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, kind, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n pageToken,\n })),\n);\n\nexport type ListAddressBookEntriesInput = v.InferInput<typeof ListAddressBookEntriesInputSchema>;\n\nexport const CreateAddressBookEntryInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n note: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n entry: v.variant(\"kind\", [\n v.strictObject({\n kind: v.literal(\"external\"),\n polychainChainId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n address: v.pipe(v.string(), v.trim(), v.minLength(1)),\n }),\n v.strictObject({\n kind: v.literal(\"internal\"),\n smartAccountAddress: v.pipe(v.string(), v.trim(), v.minLength(1)),\n }),\n ]),\n tagIds: v.optional(v.array(IdSchema(\"tagId\")), []),\n newTags: v.optional(v.array(AddressBookTagInputSchema), []),\n }),\n v.transform(({ account, entry, ...rest }) => ({\n ...rest,\n subaccountId: accountScopeToSubaccountId(account),\n entry:\n entry.kind === \"external\"\n ? {\n case: \"external\" as const,\n value: {\n polychainChainId: entry.polychainChainId,\n address: entry.address,\n },\n }\n : {\n case: \"internal\" as const,\n value: {\n smartAccountAddress: entry.smartAccountAddress,\n },\n },\n })),\n);\n\nexport type CreateAddressBookEntryInput = v.InferInput<typeof CreateAddressBookEntryInputSchema>;\n\nexport function validateCreateAddressBookEntryInput(input: CreateAddressBookEntryInput): void {\n v.parse(CreateAddressBookEntryInputSchema, input);\n}\n\ntype AddressBookEntryPatch = {\n label?: string;\n note?: string;\n tagIds?: bigint[];\n};\n\nconst ADDRESS_BOOK_ENTRY_PATCH_FIELDS = defineProtoPatchFields<AddressBookEntryPatch>()({\n label: { path: \"label\", encode: (label) => ({ label }) },\n note: { path: \"note\", encode: (note) => ({ note }) },\n tagIds: { path: \"tag_ids\", encode: (tagIds) => ({ tagIds }) },\n});\n\nexport const UpdateAddressBookEntryInputSchema = v.pipe(\n v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n expectedRevision: positiveBigintStringInputSchema(\"expectedRevision\"),\n label: v.optional(v.pipe(v.string(), v.trim())),\n note: v.optional(v.pipe(v.string(), v.trim())),\n tagIds: v.optional(v.array(IdSchema(\"tagId\"))),\n }),\n v.check(\n ({ label, note, tagIds }) =>\n label !== undefined || note !== undefined || tagIds !== undefined,\n \"At least one address-book entry field must be provided\",\n ),\n v.transform(({ addressBookEntryId, expectedRevision, ...input }) => {\n const { patch: entry, updateMask } = buildProtoPatch(\n input,\n ADDRESS_BOOK_ENTRY_PATCH_FIELDS,\n );\n return { addressBookEntryId, entry, updateMask, expectedRevision };\n }),\n);\n\nexport type UpdateAddressBookEntryInput = v.InferInput<typeof UpdateAddressBookEntryInputSchema>;\n\nexport const DeleteAddressBookEntryInputSchema = v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n});\n\nexport type DeleteAddressBookEntryInput = v.InferInput<typeof DeleteAddressBookEntryInputSchema>;\n\nexport const CopyAddressBookEntryInputSchema = v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n targetSubaccountId: OptionalSubaccountIdSchema,\n});\n\nexport type CopyAddressBookEntryInput = v.InferInput<typeof CopyAddressBookEntryInputSchema>;\n\nexport const CreateAddressBookTagInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n name: v.pipe(v.string(), v.trim(), v.minLength(1)),\n color: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform(({ account, ...input }) => ({\n ...input,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type CreateAddressBookTagInput = v.InferInput<typeof CreateAddressBookTagInputSchema>;\n\nexport const UpdateAddressBookTagInputSchema = v.pipe(\n v.strictObject({\n tagId: IdSchema(\"tagId\"),\n name: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1))),\n color: v.optional(v.pipe(v.string(), v.trim())),\n }),\n v.check(\n ({ name, color }) => name !== undefined || color !== undefined,\n \"At least one address-book tag field must be provided\",\n ),\n);\n\nexport type UpdateAddressBookTagInput = v.InferInput<typeof UpdateAddressBookTagInputSchema>;\n\nexport const DeleteAddressBookTagInputSchema = v.strictObject({\n tagId: IdSchema(\"tagId\"),\n});\n\nexport type DeleteAddressBookTagInput = v.InferInput<typeof DeleteAddressBookTagInputSchema>;\n\nexport const ListTransferCounterpartiesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n direction: v.optional(v.picklist(TRANSFER_COUNTERPARTY_DIRECTION_VALUES)),\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookCounterpartyLimitSchema,\n }),\n v.transform(({ account, direction, kind, limit }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n direction: direction\n ? TransferCounterpartyDirectionCodec.inputToProto[direction]\n : undefined,\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n })),\n);\n\nexport type ListTransferCounterpartiesInput = v.InferInput<\n typeof ListTransferCounterpartiesInputSchema\n>;\n\nexport const ListTransferDestinationsInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, kind, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n pageToken,\n })),\n);\n\nexport type ListTransferDestinationsInput = v.InferInput<\n typeof ListTransferDestinationsInputSchema\n>;\n\nexport const SubaccountScopedInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n }),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type SubaccountScopedInput = v.InferInput<typeof SubaccountScopedInputSchema>;\n\nexport const ListInternalTransferWhitelistEntriesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n limit,\n pageToken,\n })),\n);\n\nexport type ListInternalTransferWhitelistEntriesInput = v.InferInput<\n typeof ListInternalTransferWhitelistEntriesInputSchema\n>;\n\nexport const GetAddressBookViewInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n limit: AddressBookViewLimitSchema,\n }),\n v.transform(({ account, limit }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n limit,\n })),\n);\n\nexport type GetAddressBookViewInput = v.InferInput<typeof GetAddressBookViewInputSchema>;\n\nconst CountSchema = v.pipe(\n v.bigint(),\n v.transform((value) => Number(value)),\n);\n\nconst AccountScopeSchema = v.object({\n scopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AccountScopeSchema\",\n \"scope type\",\n ),\n ),\n ),\n rootAccountId: PublicIdSchema,\n subaccountId: PublicIdSchema,\n});\n\nconst ExternalWithdrawAddressSchema = v.object({\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n});\n\nconst InternalTransferAccountSchema = v.object({\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferAccountSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n});\n\nconst AddressBookEntryValueSchema = v.variant(\"case\", [\n v.object({ case: v.literal(\"external\"), value: ExternalWithdrawAddressSchema }),\n v.object({ case: v.literal(\"internal\"), value: InternalTransferAccountSchema }),\n v.object({ case: v.undefined(), value: v.optional(v.undefined()) }),\n]);\n\nconst DestinationWhitelistStatusSchema = v.pipe(\n v.enum(Proto.DestinationWhitelistStatus),\n v.transform((value) =>\n requiredEnumLabel(\n DestinationWhitelistStatusCodec.protoToOutput,\n value,\n \"PolyesterClient.DestinationWhitelistStatusSchema\",\n \"whitelist status\",\n ),\n ),\n);\n\nconst AddressBookEntryKindSchema = v.pipe(\n v.enum(Proto.AddressBookEntryKind),\n v.transform((value) =>\n requiredEnumLabel(\n AddressBookEntryKindCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookEntryKindSchema\",\n \"entry kind\",\n ),\n ),\n);\n\nconst TransferCounterpartyDirectionSchema = v.pipe(\n v.enum(Proto.TransferCounterpartyDirection),\n v.transform((value) =>\n requiredEnumLabel(\n TransferCounterpartyDirectionCodec.protoToOutput,\n value,\n \"PolyesterClient.TransferCounterpartyDirectionSchema\",\n \"direction\",\n ),\n ),\n);\n\nexport const AddressBookSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n callerRole: v.pipe(\n v.enum(SubaccountRole),\n v.transform((role) =>\n requiredEnumLabel(\n SubaccountRoleCodec.protoToOutput,\n role,\n \"AddressBookEntrySchema\",\n \"caller role\",\n ),\n ),\n ),\n label: v.string(),\n ownerUsername: v.string(),\n smartAccountAddress: v.string(),\n});\n\nexport type AddressBook = v.InferOutput<typeof AddressBookSchema>;\n\nexport const AddressBookTagSummarySchema = v.object({\n tagId: PublicIdSchema,\n name: v.string(),\n color: v.string(),\n});\n\nexport type AddressBookTagSummary = v.InferOutput<typeof AddressBookTagSummarySchema>;\n\nexport const AddressBookTagSchema = v.object({\n tagId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n name: v.string(),\n color: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n});\n\nexport type AddressBookTag = v.InferOutput<typeof AddressBookTagSchema>;\n\nexport const AddressBookEntrySchema = v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n kind: AddressBookEntryKindSchema,\n label: v.string(),\n note: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n entry: AddressBookEntryValueSchema,\n tags: v.array(AddressBookTagSchema),\n revision: BigIntStringSchema,\n});\n\nexport type AddressBookEntry = v.InferOutput<typeof AddressBookEntrySchema>;\n\nexport const AddressBookEntriesSchema = v.array(AddressBookEntrySchema);\nexport type AddressBookEntries = v.InferOutput<typeof AddressBookEntriesSchema>;\n\nexport const TransferCounterpartySchema = v.object({\n counterpartyId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n direction: TransferCounterpartyDirectionSchema,\n kind: AddressBookEntryKindSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n firstSeenAt: TimestampMsSchema,\n lastSeenAt: TimestampMsSchema,\n counterparty: AddressBookEntryValueSchema,\n});\n\nexport type TransferCounterparty = v.InferOutput<typeof TransferCounterpartySchema>;\n\nexport const TransferCounterpartiesSchema = v.array(TransferCounterpartySchema);\nexport type TransferCounterparties = v.InferOutput<typeof TransferCounterpartiesSchema>;\n\nexport const TransferDestinationSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n kind: AddressBookEntryKindSchema,\n saved: v.boolean(),\n whitelisted: v.boolean(),\n whitelistStatus: DestinationWhitelistStatusSchema,\n addressBookEntry: v.optional(AddressBookEntrySchema),\n destination: AddressBookEntryValueSchema,\n whitelistEffectiveAt: TimestampMsSchema,\n whitelistUpdatedAt: TimestampMsSchema,\n});\n\nexport type TransferDestination = v.InferOutput<typeof TransferDestinationSchema>;\n\nexport const TransferDestinationsSchema = v.array(TransferDestinationSchema);\nexport type TransferDestinations = v.InferOutput<typeof TransferDestinationsSchema>;\n\nexport const InternalTransferWhitelistEntrySchema = v.object({\n entryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferWhitelistEntrySchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n resolutionStatus: v.pipe(\n v.enum(Proto.InternalWhitelistResolutionStatus),\n v.transform((value) =>\n requiredEnumLabel(\n InternalWhitelistResolutionStatusCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferWhitelistEntrySchema\",\n \"resolution status\",\n ),\n ),\n ),\n});\n\nexport type InternalTransferWhitelistEntry = v.InferOutput<\n typeof InternalTransferWhitelistEntrySchema\n>;\n\nexport const InternalTransferWhitelistEntriesSchema = v.array(InternalTransferWhitelistEntrySchema);\n\nexport type InternalTransferWhitelistEntries = v.InferOutput<\n typeof InternalTransferWhitelistEntriesSchema\n>;\n\nexport const MirroredWithdrawWhitelistEntrySchema = v.object({\n canonicalAddress: v.string(),\n rawAddressHex: v.string(),\n updatedAt: TimestampMsSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n});\n\nexport type MirroredWithdrawWhitelistEntry = v.InferOutput<\n typeof MirroredWithdrawWhitelistEntrySchema\n>;\n\nexport const WithdrawWhitelistViewSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n externalWhitelistRequired: v.boolean(),\n internalWhitelistRequired: v.boolean(),\n activeEntries: v.optional(v.array(MirroredWithdrawWhitelistEntrySchema), []),\n});\n\nexport type WithdrawWhitelistView = v.InferOutput<typeof WithdrawWhitelistViewSchema>;\n\nexport const AddressBookEntriesViewSchema = v.object({\n external: v.optional(\n v.array(\n v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n label: v.string(),\n note: v.string(),\n tagIds: v.optional(v.array(PublicIdSchema), []),\n whitelistStatus: DestinationWhitelistStatusSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n revision: BigIntStringSchema,\n }),\n ),\n [],\n ),\n internal: v.optional(\n v.array(\n v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n label: v.string(),\n note: v.string(),\n tagIds: v.optional(v.array(PublicIdSchema), []),\n whitelistStatus: DestinationWhitelistStatusSchema,\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookEntriesViewSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n revision: BigIntStringSchema,\n }),\n ),\n [],\n ),\n});\n\nexport type AddressBookEntriesView = v.InferOutput<typeof AddressBookEntriesViewSchema>;\n\nexport const AddressBookRecentDestinationsViewSchema = v.object({\n external: v.optional(\n v.array(\n v.object({\n scope: v.optional(AccountScopeSchema),\n lastDirection: TransferCounterpartyDirectionSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n lastSeenAt: TimestampMsSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n }),\n ),\n [],\n ),\n internal: v.optional(\n v.array(\n v.object({\n scope: v.optional(AccountScopeSchema),\n lastDirection: TransferCounterpartyDirectionSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n lastSeenAt: TimestampMsSchema,\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookRecentDestinationsViewSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n }),\n ),\n [],\n ),\n});\n\nexport type AddressBookRecentDestinationsView = v.InferOutput<\n typeof AddressBookRecentDestinationsViewSchema\n>;\n\nexport const AddressBookViewSchema = v.object({\n books: v.optional(v.array(AddressBookSchema), []),\n entries: v.optional(AddressBookEntriesViewSchema),\n recentDestinations: v.optional(AddressBookRecentDestinationsViewSchema),\n tags: v.optional(v.array(AddressBookTagSummarySchema), []),\n withdrawWhitelist: v.optional(WithdrawWhitelistViewSchema),\n recentDestinationsTruncated: v.optional(v.boolean(), false),\n});\n\nexport type AddressBookView = v.InferOutput<typeof AddressBookViewSchema>;\n\nexport const AddressBookViewInvalidatedSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n invalidatedAt: RequiredTimestampMsSchema,\n});\n\nexport type AddressBookViewInvalidated = v.InferOutput<typeof AddressBookViewInvalidatedSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"address-book.schemas.js","names":["Proto.AccountScopeType","Proto.DestinationWhitelistStatus","Proto.AddressBookEntryKind","Proto.TransferCounterpartyDirection","Proto.InternalWhitelistResolutionStatus","RequiredTimestampMsSchema"],"sources":["../../../src/services/address-book/address-book.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport { SubaccountRole } from \"../../gen/auth/v1/subaccounts_pb.js\";\nimport {\n OptionalTimestampMsSchema,\n BigIntStringSchema,\n PublicIdSchema,\n TimestampMsSchema as RequiredTimestampMsSchema,\n idInputSchema,\n optionalSubaccountIdInputSchema,\n positiveBigintStringInputSchema,\n} from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n ADDRESS_BOOK_ENTRY_KIND_VALUES,\n AccountScopeTypeCodec,\n AddressBookEntryKindCodec,\n DestinationWhitelistStatusCodec,\n InternalWhitelistResolutionStatusCodec,\n TRANSFER_COUNTERPARTY_DIRECTION_VALUES,\n TransferCounterpartyDirectionCodec,\n} from \"./address-book.codecs.js\";\nimport { SubaccountRoleCodec } from \"../subaccounts/subaccounts.codecs.js\";\nimport { buildProtoPatch, defineProtoPatchFields } from \"../../utils/proto-patch.js\";\n\nconst OptionalSubaccountIdSchema = optionalSubaccountIdInputSchema();\nconst IdSchema = idInputSchema;\n\nconst AddressBookLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(500)),\n);\nconst AddressBookCounterpartyLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(200)),\n);\nconst AddressBookViewLimitSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(200)),\n);\nconst PageTokenSchema = v.optional(v.pipe(v.string(), v.trim()), \"\");\n\nconst TimestampMsSchema = OptionalTimestampMsSchema;\n\nconst AddressBookTagInputSchema = v.strictObject({\n name: v.pipe(v.string(), v.trim(), v.minLength(1)),\n color: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n});\n\nexport const ListAddressBookEntriesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, kind, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n pageToken,\n })),\n);\n\nexport type ListAddressBookEntriesInput = v.InferInput<typeof ListAddressBookEntriesInputSchema>;\n\nexport const CreateAddressBookEntryInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n note: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n entry: v.variant(\"kind\", [\n v.strictObject({\n kind: v.literal(\"external\"),\n polychainChainId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n address: v.pipe(v.string(), v.trim(), v.minLength(1)),\n }),\n v.strictObject({\n kind: v.literal(\"internal\"),\n smartAccountAddress: v.pipe(v.string(), v.trim(), v.minLength(1)),\n }),\n ]),\n tagIds: v.optional(v.array(IdSchema(\"tagId\")), []),\n newTags: v.optional(v.array(AddressBookTagInputSchema), []),\n }),\n v.transform(({ account, entry, ...rest }) => ({\n ...rest,\n subaccountId: accountScopeToSubaccountId(account),\n entry:\n entry.kind === \"external\"\n ? {\n case: \"external\" as const,\n value: {\n polychainChainId: entry.polychainChainId,\n address: entry.address,\n },\n }\n : {\n case: \"internal\" as const,\n value: {\n smartAccountAddress: entry.smartAccountAddress,\n },\n },\n })),\n);\n\nexport type CreateAddressBookEntryInput = v.InferInput<typeof CreateAddressBookEntryInputSchema>;\n\nexport function validateCreateAddressBookEntryInput(input: CreateAddressBookEntryInput): void {\n parse(CreateAddressBookEntryInputSchema, input);\n}\n\ntype AddressBookEntryPatch = {\n label?: string;\n note?: string;\n tagIds?: bigint[];\n};\n\nconst ADDRESS_BOOK_ENTRY_PATCH_FIELDS = defineProtoPatchFields<AddressBookEntryPatch>()({\n label: { path: \"label\", encode: (label) => ({ label }) },\n note: { path: \"note\", encode: (note) => ({ note }) },\n tagIds: { path: \"tag_ids\", encode: (tagIds) => ({ tagIds }) },\n});\n\nexport const UpdateAddressBookEntryInputSchema = v.pipe(\n v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n expectedRevision: positiveBigintStringInputSchema(\"expectedRevision\"),\n label: v.optional(v.pipe(v.string(), v.trim())),\n note: v.optional(v.pipe(v.string(), v.trim())),\n tagIds: v.optional(v.array(IdSchema(\"tagId\"))),\n }),\n v.check(\n ({ label, note, tagIds }) =>\n label !== undefined || note !== undefined || tagIds !== undefined,\n \"At least one address-book entry field must be provided\",\n ),\n v.transform(({ addressBookEntryId, expectedRevision, ...input }) => {\n const { patch: entry, updateMask } = buildProtoPatch(\n input,\n ADDRESS_BOOK_ENTRY_PATCH_FIELDS,\n );\n return { addressBookEntryId, entry, updateMask, expectedRevision };\n }),\n);\n\nexport type UpdateAddressBookEntryInput = v.InferInput<typeof UpdateAddressBookEntryInputSchema>;\n\nexport const DeleteAddressBookEntryInputSchema = v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n});\n\nexport type DeleteAddressBookEntryInput = v.InferInput<typeof DeleteAddressBookEntryInputSchema>;\n\nexport const CopyAddressBookEntryInputSchema = v.strictObject({\n addressBookEntryId: IdSchema(\"addressBookEntryId\"),\n targetSubaccountId: OptionalSubaccountIdSchema,\n});\n\nexport type CopyAddressBookEntryInput = v.InferInput<typeof CopyAddressBookEntryInputSchema>;\n\nexport const CreateAddressBookTagInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n name: v.pipe(v.string(), v.trim(), v.minLength(1)),\n color: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform(({ account, ...input }) => ({\n ...input,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type CreateAddressBookTagInput = v.InferInput<typeof CreateAddressBookTagInputSchema>;\n\nexport const UpdateAddressBookTagInputSchema = v.pipe(\n v.strictObject({\n tagId: IdSchema(\"tagId\"),\n name: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1))),\n color: v.optional(v.pipe(v.string(), v.trim())),\n }),\n v.check(\n ({ name, color }) => name !== undefined || color !== undefined,\n \"At least one address-book tag field must be provided\",\n ),\n);\n\nexport type UpdateAddressBookTagInput = v.InferInput<typeof UpdateAddressBookTagInputSchema>;\n\nexport const DeleteAddressBookTagInputSchema = v.strictObject({\n tagId: IdSchema(\"tagId\"),\n});\n\nexport type DeleteAddressBookTagInput = v.InferInput<typeof DeleteAddressBookTagInputSchema>;\n\nexport const ListTransferCounterpartiesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n direction: v.optional(v.picklist(TRANSFER_COUNTERPARTY_DIRECTION_VALUES)),\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookCounterpartyLimitSchema,\n }),\n v.transform(({ account, direction, kind, limit }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n direction: direction\n ? TransferCounterpartyDirectionCodec.inputToProto[direction]\n : undefined,\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n })),\n);\n\nexport type ListTransferCounterpartiesInput = v.InferInput<\n typeof ListTransferCounterpartiesInputSchema\n>;\n\nexport const ListTransferDestinationsInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n kind: v.optional(v.picklist(ADDRESS_BOOK_ENTRY_KIND_VALUES)),\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, kind, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n kind: kind ? AddressBookEntryKindCodec.inputToProto[kind] : undefined,\n limit,\n pageToken,\n })),\n);\n\nexport type ListTransferDestinationsInput = v.InferInput<\n typeof ListTransferDestinationsInputSchema\n>;\n\nexport const SubaccountScopedInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n }),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type SubaccountScopedInput = v.InferInput<typeof SubaccountScopedInputSchema>;\n\nexport const ListInternalTransferWhitelistEntriesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n limit: AddressBookLimitSchema,\n pageToken: PageTokenSchema,\n }),\n v.transform(({ account, limit, pageToken }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n limit,\n pageToken,\n })),\n);\n\nexport type ListInternalTransferWhitelistEntriesInput = v.InferInput<\n typeof ListInternalTransferWhitelistEntriesInputSchema\n>;\n\nexport const GetAddressBookViewInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n limit: AddressBookViewLimitSchema,\n }),\n v.transform(({ account, limit }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n limit,\n })),\n);\n\nexport type GetAddressBookViewInput = v.InferInput<typeof GetAddressBookViewInputSchema>;\n\nconst CountSchema = v.pipe(\n v.bigint(),\n v.transform((value) => Number(value)),\n);\n\nconst AccountScopeSchema = v.object({\n scopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AccountScopeSchema\",\n \"scope type\",\n ),\n ),\n ),\n rootAccountId: PublicIdSchema,\n subaccountId: PublicIdSchema,\n});\n\nconst ExternalWithdrawAddressSchema = v.object({\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n});\n\nconst InternalTransferAccountSchema = v.object({\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferAccountSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n});\n\nconst AddressBookEntryValueSchema = v.variant(\"case\", [\n v.object({ case: v.literal(\"external\"), value: ExternalWithdrawAddressSchema }),\n v.object({ case: v.literal(\"internal\"), value: InternalTransferAccountSchema }),\n v.object({ case: v.undefined(), value: v.optional(v.undefined()) }),\n]);\n\nconst DestinationWhitelistStatusSchema = v.pipe(\n v.enum(Proto.DestinationWhitelistStatus),\n v.transform((value) =>\n requiredEnumLabel(\n DestinationWhitelistStatusCodec.protoToOutput,\n value,\n \"PolyesterClient.DestinationWhitelistStatusSchema\",\n \"whitelist status\",\n ),\n ),\n);\n\nconst AddressBookEntryKindSchema = v.pipe(\n v.enum(Proto.AddressBookEntryKind),\n v.transform((value) =>\n requiredEnumLabel(\n AddressBookEntryKindCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookEntryKindSchema\",\n \"entry kind\",\n ),\n ),\n);\n\nconst TransferCounterpartyDirectionSchema = v.pipe(\n v.enum(Proto.TransferCounterpartyDirection),\n v.transform((value) =>\n requiredEnumLabel(\n TransferCounterpartyDirectionCodec.protoToOutput,\n value,\n \"PolyesterClient.TransferCounterpartyDirectionSchema\",\n \"direction\",\n ),\n ),\n);\n\nexport const AddressBookSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n callerRole: v.pipe(\n v.enum(SubaccountRole),\n v.transform((role) =>\n requiredEnumLabel(\n SubaccountRoleCodec.protoToOutput,\n role,\n \"AddressBookEntrySchema\",\n \"caller role\",\n ),\n ),\n ),\n label: v.string(),\n ownerUsername: v.string(),\n smartAccountAddress: v.string(),\n});\n\nexport type AddressBook = v.InferOutput<typeof AddressBookSchema>;\n\nexport const AddressBookTagSummarySchema = v.object({\n tagId: PublicIdSchema,\n name: v.string(),\n color: v.string(),\n});\n\nexport type AddressBookTagSummary = v.InferOutput<typeof AddressBookTagSummarySchema>;\n\nexport const AddressBookTagSchema = v.object({\n tagId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n name: v.string(),\n color: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n});\n\nexport type AddressBookTag = v.InferOutput<typeof AddressBookTagSchema>;\n\nexport const AddressBookEntrySchema = v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n kind: AddressBookEntryKindSchema,\n label: v.string(),\n note: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n entry: AddressBookEntryValueSchema,\n tags: v.array(AddressBookTagSchema),\n revision: BigIntStringSchema,\n});\n\nexport type AddressBookEntry = v.InferOutput<typeof AddressBookEntrySchema>;\n\nexport const AddressBookEntriesSchema = v.array(AddressBookEntrySchema);\nexport type AddressBookEntries = v.InferOutput<typeof AddressBookEntriesSchema>;\n\nexport const TransferCounterpartySchema = v.object({\n counterpartyId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n direction: TransferCounterpartyDirectionSchema,\n kind: AddressBookEntryKindSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n firstSeenAt: TimestampMsSchema,\n lastSeenAt: TimestampMsSchema,\n counterparty: AddressBookEntryValueSchema,\n});\n\nexport type TransferCounterparty = v.InferOutput<typeof TransferCounterpartySchema>;\n\nexport const TransferCounterpartiesSchema = v.array(TransferCounterpartySchema);\nexport type TransferCounterparties = v.InferOutput<typeof TransferCounterpartiesSchema>;\n\nexport const TransferDestinationSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n kind: AddressBookEntryKindSchema,\n saved: v.boolean(),\n whitelisted: v.boolean(),\n whitelistStatus: DestinationWhitelistStatusSchema,\n addressBookEntry: v.optional(AddressBookEntrySchema),\n destination: AddressBookEntryValueSchema,\n whitelistEffectiveAt: TimestampMsSchema,\n whitelistUpdatedAt: TimestampMsSchema,\n});\n\nexport type TransferDestination = v.InferOutput<typeof TransferDestinationSchema>;\n\nexport const TransferDestinationsSchema = v.array(TransferDestinationSchema);\nexport type TransferDestinations = v.InferOutput<typeof TransferDestinationsSchema>;\n\nexport const InternalTransferWhitelistEntrySchema = v.object({\n entryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferWhitelistEntrySchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n resolutionStatus: v.pipe(\n v.enum(Proto.InternalWhitelistResolutionStatus),\n v.transform((value) =>\n requiredEnumLabel(\n InternalWhitelistResolutionStatusCodec.protoToOutput,\n value,\n \"PolyesterClient.InternalTransferWhitelistEntrySchema\",\n \"resolution status\",\n ),\n ),\n ),\n});\n\nexport type InternalTransferWhitelistEntry = v.InferOutput<\n typeof InternalTransferWhitelistEntrySchema\n>;\n\nexport const InternalTransferWhitelistEntriesSchema = v.array(InternalTransferWhitelistEntrySchema);\n\nexport type InternalTransferWhitelistEntries = v.InferOutput<\n typeof InternalTransferWhitelistEntriesSchema\n>;\n\nexport const MirroredWithdrawWhitelistEntrySchema = v.object({\n canonicalAddress: v.string(),\n rawAddressHex: v.string(),\n updatedAt: TimestampMsSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n});\n\nexport type MirroredWithdrawWhitelistEntry = v.InferOutput<\n typeof MirroredWithdrawWhitelistEntrySchema\n>;\n\nexport const WithdrawWhitelistViewSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n externalWhitelistRequired: v.boolean(),\n internalWhitelistRequired: v.boolean(),\n activeEntries: v.optional(v.array(MirroredWithdrawWhitelistEntrySchema), []),\n});\n\nexport type WithdrawWhitelistView = v.InferOutput<typeof WithdrawWhitelistViewSchema>;\n\nexport const AddressBookEntriesViewSchema = v.object({\n external: v.optional(\n v.array(\n v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n label: v.string(),\n note: v.string(),\n tagIds: v.optional(v.array(PublicIdSchema), []),\n whitelistStatus: DestinationWhitelistStatusSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n revision: BigIntStringSchema,\n }),\n ),\n [],\n ),\n internal: v.optional(\n v.array(\n v.object({\n addressBookEntryId: PublicIdSchema,\n scope: v.optional(AccountScopeSchema),\n label: v.string(),\n note: v.string(),\n tagIds: v.optional(v.array(PublicIdSchema), []),\n whitelistStatus: DestinationWhitelistStatusSchema,\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookEntriesViewSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n createdAt: TimestampMsSchema,\n updatedAt: TimestampMsSchema,\n revision: BigIntStringSchema,\n }),\n ),\n [],\n ),\n});\n\nexport type AddressBookEntriesView = v.InferOutput<typeof AddressBookEntriesViewSchema>;\n\nexport const AddressBookRecentDestinationsViewSchema = v.object({\n external: v.optional(\n v.array(\n v.object({\n scope: v.optional(AccountScopeSchema),\n lastDirection: TransferCounterpartyDirectionSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n lastSeenAt: TimestampMsSchema,\n polychainChainId: v.pipe(v.number(), v.integer()),\n address: v.string(),\n }),\n ),\n [],\n ),\n internal: v.optional(\n v.array(\n v.object({\n scope: v.optional(AccountScopeSchema),\n lastDirection: TransferCounterpartyDirectionSchema,\n saved: v.boolean(),\n addressBookEntryId: PublicIdSchema,\n useCount: CountSchema,\n lastSeenAt: TimestampMsSchema,\n rootAccountId: PublicIdSchema,\n targetAccountId: PublicIdSchema,\n targetScopeType: v.pipe(\n v.enum(Proto.AccountScopeType),\n v.transform((value) =>\n requiredEnumLabel(\n AccountScopeTypeCodec.protoToOutput,\n value,\n \"PolyesterClient.AddressBookRecentDestinationsViewSchema\",\n \"target scope type\",\n ),\n ),\n ),\n smartAccountAddress: v.string(),\n rootUsername: v.string(),\n subaccountLabel: v.string(),\n }),\n ),\n [],\n ),\n});\n\nexport type AddressBookRecentDestinationsView = v.InferOutput<\n typeof AddressBookRecentDestinationsViewSchema\n>;\n\nexport const AddressBookViewSchema = v.object({\n books: v.optional(v.array(AddressBookSchema), []),\n entries: v.optional(AddressBookEntriesViewSchema),\n recentDestinations: v.optional(AddressBookRecentDestinationsViewSchema),\n tags: v.optional(v.array(AddressBookTagSummarySchema), []),\n withdrawWhitelist: v.optional(WithdrawWhitelistViewSchema),\n recentDestinationsTruncated: v.optional(v.boolean(), false),\n});\n\nexport type AddressBookView = v.InferOutput<typeof AddressBookViewSchema>;\n\nexport const AddressBookViewInvalidatedSchema = v.object({\n scope: v.optional(AccountScopeSchema),\n invalidatedAt: RequiredTimestampMsSchema,\n});\n\nexport type AddressBookViewInvalidated = v.InferOutput<typeof AddressBookViewInvalidatedSchema>;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.d.ts","names":[],"sources":["../../../src/services/api-keys/api-keys.ts"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","names":[],"sources":["../../../src/services/api-keys/api-keys.ts"],"mappings":";;;;;;;;;;;UA0BU,8BAA8B,mBAAmB;EACvD;;;;;cAMS;;WACA,UAAU;EAMP,YAAA,WAAW,WAAW,UAAU,mBAAmB,WAAW;;;;EAUpE,KACF,SAAQ,EAAE,kBAAkB,yBAC5B,UAAU,0BACX,QAAQ;;;;EAcL,IACF,OAAO,EAAE,kBAAkB,sBAC3B,UAAU,0BACX,QAAQ;;;;EASL,OACF,SAAS,EAAE,kBAAkB,2BAC7B,UAAU,2BACX,QAAQ;;;;EAaL,OACF,OAAO,EAAE,kBAAkB,sBAC3B,UAAU,2BACX;;;;EAQG,OACF,SAAS,EAAE,kBAAkB,2BAC7B,UAAU,2BACX,QAAQ;;;;EAYL,mBAAmB;IACrB;MAAa;MAAa,OAAO;;IACjC;MAAa;MAAa,OAAO;;;;;;EAkBrC,UAAU,OAAO"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parse } from "../../shared/validation.js";
|
|
1
2
|
import { toConnectCallOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { ApiKeySchema, ApiKeyService } from "../../gen/auth/v1/api_keys_pb.js";
|
|
3
4
|
import { removeUndefined } from "../../utils/remove-undefined.js";
|
|
@@ -6,7 +7,6 @@ import { ApiKeyPoliciesService } from "../policies/api-key-policies/api-key-poli
|
|
|
6
7
|
import { ApiKeyIdInputSchema, ApiKeySchema as ApiKeySchema$1, ApiKeysCreateInputSchema, ApiKeysListInputSchema, ApiKeysSchema, ApiKeysUpdateInputSchema } from "./api-keys.schemas.js";
|
|
7
8
|
import { keygenAsync } from "@noble/ed25519";
|
|
8
9
|
import { createClient } from "@connectrpc/connect";
|
|
9
|
-
import * as v from "valibot";
|
|
10
10
|
import { bytesToHex } from "@noble/hashes/utils.js";
|
|
11
11
|
//#region src/services/api-keys/api-keys.ts
|
|
12
12
|
/**
|
|
@@ -28,41 +28,41 @@ var ApiKeysService = class {
|
|
|
28
28
|
*/
|
|
29
29
|
async list(params = {}, options) {
|
|
30
30
|
const resolved = resolveAccountScopedInput(params, this.#resolver);
|
|
31
|
-
const validatedParams =
|
|
31
|
+
const validatedParams = parse(ApiKeysListInputSchema, resolved);
|
|
32
32
|
const res = await this.#client.listApiKeys(removeUndefined(validatedParams), toConnectCallOptions(options));
|
|
33
|
-
return
|
|
33
|
+
return parse(ApiKeysSchema, res.apiKeys);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Fetches one caller-owned API key by ak_... key ID and returns null when no matching key is returned.
|
|
37
37
|
*/
|
|
38
38
|
async get(input, options) {
|
|
39
|
-
const validatedInput =
|
|
39
|
+
const validatedInput = parse(ApiKeyIdInputSchema, input);
|
|
40
40
|
const res = await this.#client.getApiKey(validatedInput, toConnectCallOptions(options));
|
|
41
|
-
return res.apiKey ?
|
|
41
|
+
return res.apiKey ? parse(ApiKeySchema$1, res.apiKey) : null;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Creates API key metadata using a client-generated Ed25519 public key; security settings may require MFA fresh step-up and retrying with stepUpToken.
|
|
45
45
|
*/
|
|
46
46
|
async create(payload, options) {
|
|
47
47
|
const resolved = resolveAccountScopedInput(payload, this.#resolver);
|
|
48
|
-
const validatedPayload =
|
|
48
|
+
const validatedPayload = parse(ApiKeysCreateInputSchema, resolved);
|
|
49
49
|
const res = await this.#client.createApiKey(removeUndefined(validatedPayload), toConnectCallOptions(options));
|
|
50
|
-
return res.apiKey ?
|
|
50
|
+
return res.apiKey ? parse(ApiKeySchema$1, res.apiKey) : null;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
53
|
* Permanently revokes the specified API key; revoked keys cannot authenticate again.
|
|
54
54
|
*/
|
|
55
55
|
async delete(input, options) {
|
|
56
|
-
const validatedInput =
|
|
56
|
+
const validatedInput = parse(ApiKeyIdInputSchema, input);
|
|
57
57
|
await this.#client.deleteApiKey(validatedInput, toConnectCallOptions(options));
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
60
|
* Updates mutable key metadata, ACTIVE/DISABLED status, IP whitelist replacement/clearing, and optional expiry; revocation must use delete.
|
|
61
61
|
*/
|
|
62
62
|
async update(payload, options) {
|
|
63
|
-
const validatedPayload =
|
|
63
|
+
const validatedPayload = parse(ApiKeysUpdateInputSchema, payload);
|
|
64
64
|
const res = await this.#client.updateApiKey(removeUndefined(validatedPayload), toConnectCallOptions(options));
|
|
65
|
-
return res.apiKey ?
|
|
65
|
+
return res.apiKey ? parse(ApiKeySchema$1, res.apiKey) : null;
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
68
|
* Generates an Ed25519 keypair locally and returns public and secret key material as both hex strings and byte arrays; only the public key should be sent to the API.
|
|
@@ -89,12 +89,12 @@ var ApiKeysService = class {
|
|
|
89
89
|
channel,
|
|
90
90
|
schema: ApiKeySchema,
|
|
91
91
|
onPublication: (data) => {
|
|
92
|
-
const apiKey =
|
|
92
|
+
const apiKey = parse(ApiKeySchema$1, data);
|
|
93
93
|
input.onEvent(apiKey);
|
|
94
94
|
},
|
|
95
95
|
onConnected: () => input.onOpen?.(),
|
|
96
96
|
onDisconnected: () => input.onClose?.(),
|
|
97
|
-
onError:
|
|
97
|
+
onError: input.onError
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.js","names":["#client","Proto.ApiKeyService","#realtime","#resolver","ApiKeySchema","Proto.ApiKeySchema"],"sources":["../../../src/services/api-keys/api-keys.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/api_keys_pb.js\";\nimport * as v from \"valibot\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { keygenAsync } from \"@noble/ed25519\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { ApiKeyPoliciesService } from \"../policies/api-key-policies/index.js\";\nimport {\n ApiKeyIdInputSchema,\n ApiKeysListInputSchema,\n ApiKeysCreateInputSchema,\n ApiKeysUpdateInputSchema,\n ApiKeySchema,\n ApiKeysSchema,\n type ApiKey,\n} from \"./api-keys.schemas.js\";\n\ninterface SubscribeApiKeysInput extends BaseSubscribeInput<ApiKey> {\n accountId: string;\n}\n\n/**\n * Manages API key metadata, client-generated Ed25519 keypairs, policies, and realtime API key updates.\n */\nexport class ApiKeysService {\n readonly policies: ApiKeyPoliciesService;\n\n #client: Client<typeof Proto.ApiKeyService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.policies = new ApiKeyPoliciesService(transport);\n this.#client = createClient(Proto.ApiKeyService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns non-revoked API keys owned by the caller, newest first, optionally scoped through an explicit or resolver-provided subaccount ID.\n */\n async list(\n params: v.InferInput<typeof ApiKeysListInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<ApiKey[]> {\n const resolved = resolveAccountScopedInput(params, this.#resolver);\n const validatedParams =
|
|
1
|
+
{"version":3,"file":"api-keys.js","names":["#client","Proto.ApiKeyService","#realtime","#resolver","ApiKeySchema","Proto.ApiKeySchema"],"sources":["../../../src/services/api-keys/api-keys.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/api_keys_pb.js\";\nimport type * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { keygenAsync } from \"@noble/ed25519\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { ApiKeyPoliciesService } from \"../policies/api-key-policies/index.js\";\nimport {\n ApiKeyIdInputSchema,\n ApiKeysListInputSchema,\n ApiKeysCreateInputSchema,\n ApiKeysUpdateInputSchema,\n ApiKeySchema,\n ApiKeysSchema,\n type ApiKey,\n} from \"./api-keys.schemas.js\";\n\ninterface SubscribeApiKeysInput extends BaseSubscribeInput<ApiKey> {\n accountId: string;\n}\n\n/**\n * Manages API key metadata, client-generated Ed25519 keypairs, policies, and realtime API key updates.\n */\nexport class ApiKeysService {\n readonly policies: ApiKeyPoliciesService;\n\n #client: Client<typeof Proto.ApiKeyService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.policies = new ApiKeyPoliciesService(transport);\n this.#client = createClient(Proto.ApiKeyService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns non-revoked API keys owned by the caller, newest first, optionally scoped through an explicit or resolver-provided subaccount ID.\n */\n async list(\n params: v.InferInput<typeof ApiKeysListInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<ApiKey[]> {\n const resolved = resolveAccountScopedInput(params, this.#resolver);\n const validatedParams = parse(ApiKeysListInputSchema, resolved);\n const res = await this.#client.listApiKeys(\n removeUndefined(validatedParams),\n toConnectCallOptions(options),\n );\n\n return parse(ApiKeysSchema, res.apiKeys);\n }\n\n /**\n * Fetches one caller-owned API key by ak_... key ID and returns null when no matching key is returned.\n */\n async get(\n input: v.InferInput<typeof ApiKeyIdInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<ApiKey | null> {\n const validatedInput = parse(ApiKeyIdInputSchema, input);\n const res = await this.#client.getApiKey(validatedInput, toConnectCallOptions(options));\n return res.apiKey ? parse(ApiKeySchema, res.apiKey) : null;\n }\n\n /**\n * Creates API key metadata using a client-generated Ed25519 public key; security settings may require MFA fresh step-up and retrying with stepUpToken.\n */\n async create(\n payload: v.InferInput<typeof ApiKeysCreateInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<ApiKey | null> {\n const resolved = resolveAccountScopedInput(payload, this.#resolver);\n const validatedPayload = parse(ApiKeysCreateInputSchema, resolved);\n const res = await this.#client.createApiKey(\n removeUndefined(validatedPayload),\n toConnectCallOptions(options),\n );\n return res.apiKey ? parse(ApiKeySchema, res.apiKey) : null;\n }\n\n /**\n * Permanently revokes the specified API key; revoked keys cannot authenticate again.\n */\n async delete(\n input: v.InferInput<typeof ApiKeyIdInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const validatedInput = parse(ApiKeyIdInputSchema, input);\n await this.#client.deleteApiKey(validatedInput, toConnectCallOptions(options));\n }\n\n /**\n * Updates mutable key metadata, ACTIVE/DISABLED status, IP whitelist replacement/clearing, and optional expiry; revocation must use delete.\n */\n async update(\n payload: v.InferInput<typeof ApiKeysUpdateInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<ApiKey | null> {\n const validatedPayload = parse(ApiKeysUpdateInputSchema, payload);\n const res = await this.#client.updateApiKey(\n removeUndefined(validatedPayload),\n toConnectCallOptions(options),\n );\n return res.apiKey ? parse(ApiKeySchema, res.apiKey) : null;\n }\n\n /**\n * Generates an Ed25519 keypair locally and returns public and secret key material as both hex strings and byte arrays; only the public key should be sent to the API.\n */\n async generateKeypair(): Promise<{\n publicKey: { hex: string; bytes: Uint8Array };\n secretKey: { hex: string; bytes: Uint8Array };\n }> {\n const { secretKey, publicKey } = await keygenAsync();\n return {\n publicKey: {\n hex: bytesToHex(publicKey),\n bytes: publicKey,\n },\n secretKey: {\n hex: bytesToHex(secretKey),\n bytes: secretKey,\n },\n };\n }\n\n /**\n * Subscribes to private API key updates for an account and emits normalized API key metadata from realtime protobuf publications.\n */\n subscribe(input: SubscribeApiKeysInput) {\n const channel = `private:auth:api-keys:${input.accountId}:proto`;\n\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.ApiKeySchema,\n onPublication: (data) => {\n const apiKey = parse(ApiKeySchema, data);\n input.onEvent(apiKey);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAiCA,IAAa,iBAAb,MAA4B;CACxB;CAEA;CACA;CACA;CAEA,YAAY,WAAsB,UAA6B,UAA+B;EAC1F,KAAK,WAAW,IAAI,sBAAsB,SAAS;EACnD,KAAKA,UAAU,aAAaC,eAAqB,SAAS;EAC1D,KAAKC,YAAY;EACjB,KAAKC,YAAY;CACrB;;;;CAKA,MAAM,KACF,SAAsD,CAAC,GACvD,SACiB;EACjB,MAAM,WAAW,0BAA0B,QAAQ,KAAKA,SAAS;EACjE,MAAM,kBAAkB,MAAM,wBAAwB,QAAQ;EAC9D,MAAM,MAAM,MAAM,KAAKH,QAAQ,YAC3B,gBAAgB,eAAe,GAC/B,qBAAqB,OAAO,CAChC;EAEA,OAAO,MAAM,eAAe,IAAI,OAAO;CAC3C;;;;CAKA,MAAM,IACF,OACA,SACsB;EACtB,MAAM,iBAAiB,MAAM,qBAAqB,KAAK;EACvD,MAAM,MAAM,MAAM,KAAKA,QAAQ,UAAU,gBAAgB,qBAAqB,OAAO,CAAC;EACtF,OAAO,IAAI,SAAS,MAAMI,gBAAc,IAAI,MAAM,IAAI;CAC1D;;;;CAKA,MAAM,OACF,SACA,SACsB;EACtB,MAAM,WAAW,0BAA0B,SAAS,KAAKD,SAAS;EAClE,MAAM,mBAAmB,MAAM,0BAA0B,QAAQ;EACjE,MAAM,MAAM,MAAM,KAAKH,QAAQ,aAC3B,gBAAgB,gBAAgB,GAChC,qBAAqB,OAAO,CAChC;EACA,OAAO,IAAI,SAAS,MAAMI,gBAAc,IAAI,MAAM,IAAI;CAC1D;;;;CAKA,MAAM,OACF,OACA,SACa;EACb,MAAM,iBAAiB,MAAM,qBAAqB,KAAK;EACvD,MAAM,KAAKJ,QAAQ,aAAa,gBAAgB,qBAAqB,OAAO,CAAC;CACjF;;;;CAKA,MAAM,OACF,SACA,SACsB;EACtB,MAAM,mBAAmB,MAAM,0BAA0B,OAAO;EAChE,MAAM,MAAM,MAAM,KAAKA,QAAQ,aAC3B,gBAAgB,gBAAgB,GAChC,qBAAqB,OAAO,CAChC;EACA,OAAO,IAAI,SAAS,MAAMI,gBAAc,IAAI,MAAM,IAAI;CAC1D;;;;CAKA,MAAM,kBAGH;EACC,MAAM,EAAE,WAAW,cAAc,MAAM,YAAY;EACnD,OAAO;GACH,WAAW;IACP,KAAK,WAAW,SAAS;IACzB,OAAO;GACX;GACA,WAAW;IACP,KAAK,WAAW,SAAS;IACzB,OAAO;GACX;EACJ;CACJ;;;;CAKA,UAAU,OAA8B;EACpC,MAAM,UAAU,yBAAyB,MAAM,UAAU;EAEzD,OAAO,KAAKF,UAAU,oBAAoB;GACtC;GACA,QAAQG;GACR,gBAAgB,SAAS;IACrB,MAAM,SAAS,MAAMD,gBAAc,IAAI;IACvC,MAAM,QAAQ,MAAM;GACxB;GACA,mBAAmB,MAAM,SAAS;GAClC,sBAAsB,MAAM,UAAU;GACtC,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
|
|
@@ -60,10 +60,13 @@ declare const LoginWithWalletResponseSchema: v.ObjectSchema<{
|
|
|
60
60
|
type LoginWithWalletResponse = v.InferOutput<typeof LoginWithWalletResponseSchema>;
|
|
61
61
|
declare const NonceSchema: v.ObjectSchema<{
|
|
62
62
|
readonly nonce: v.StringSchema<undefined>;
|
|
63
|
-
readonly expiresAt: v.OptionalSchema<v.ObjectSchema<{
|
|
63
|
+
readonly expiresAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
|
|
64
64
|
readonly seconds: v.BigintSchema<undefined>;
|
|
65
65
|
readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
|
|
66
|
-
}, undefined>, undefined
|
|
66
|
+
}, undefined>, undefined>, v.TransformAction<{
|
|
67
|
+
seconds: bigint;
|
|
68
|
+
nanos: number;
|
|
69
|
+
} | undefined, number | undefined>]>;
|
|
67
70
|
}, undefined>;
|
|
68
71
|
type Nonce = v.InferOutput<typeof NonceSchema>;
|
|
69
72
|
/**
|
|
@@ -78,7 +81,10 @@ declare class AuthService {
|
|
|
78
81
|
*/
|
|
79
82
|
me(options?: PolyesterRequestOptions): Promise<Me>;
|
|
80
83
|
/**
|
|
81
|
-
* Requests a short-lived nonce for the given smart-account EVM address
|
|
84
|
+
* Requests a short-lived nonce for the given smart-account EVM address.
|
|
85
|
+
* The nonce is single-purpose, replaced by subsequent requests, and expires
|
|
86
|
+
* after about five minutes. The optional expiry is milliseconds since the
|
|
87
|
+
* Unix epoch.
|
|
82
88
|
*/
|
|
83
89
|
requestLoginNonce(smartAccountAddress: string, options?: PolyesterRequestOptions): Promise<Nonce>;
|
|
84
90
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","names":[],"sources":["../../../src/services/auth/auth.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","names":[],"sources":["../../../src/services/auth/auth.ts"],"mappings":";;;;;;;;cAmBa,4BAA0B,EAAA;;;;;;;;;KAU3B,uBAAuB,EAAE,kBAAkB;UAEtC;EACb,WAAW;EACX,SAAS;;cAGP,UAAQ,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOF,KAAK,EAAE,mBAAmB;cAEhC,+BAA6B,EAAA;;;;;;;;;KAOvB,0BAA0B,EAAE,mBAAmB;cAErD,aAAW,EAAA;;;;;;;;;;KAKL,QAAQ,EAAE,mBAAmB;;;;cAK5B;;EAGT,SAAS;EAEG,YAAA,YAAY,uBAAuB,UAAU;;;;EASnD,GAAG,UAAU,0BAA0B,QAAQ;;;;;;;EAW/C,kBACF,6BACA,UAAU,0BACX,QAAQ;;;;YAaK,gBACZ,OAAO,sBACP,UAAU,2BACX,QAAQ"}
|