@moovio/sdk 25.12.0 → 25.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/README.md +84 -80
  2. package/bin/mcp-server.js +566 -326
  3. package/bin/mcp-server.js.map +67 -68
  4. package/funcs/accountsCreate.d.ts +8 -10
  5. package/funcs/accountsCreate.d.ts.map +1 -1
  6. package/funcs/accountsCreate.js +8 -10
  7. package/funcs/accountsCreate.js.map +1 -1
  8. package/funcs/bankAccountsLink.d.ts +1 -1
  9. package/funcs/bankAccountsLink.js +1 -1
  10. package/funcs/capabilitiesDisable.d.ts +1 -1
  11. package/funcs/capabilitiesDisable.js +1 -1
  12. package/funcs/capabilitiesGet.d.ts +1 -1
  13. package/funcs/capabilitiesGet.js +1 -1
  14. package/funcs/capabilitiesList.d.ts +1 -1
  15. package/funcs/capabilitiesList.js +1 -1
  16. package/funcs/capabilitiesRequest.d.ts +1 -1
  17. package/funcs/capabilitiesRequest.js +1 -1
  18. package/funcs/cardIssuingGet.js +1 -1
  19. package/funcs/cardIssuingGet.js.map +1 -1
  20. package/funcs/cardIssuingGetFull.js +1 -1
  21. package/funcs/cardIssuingGetFull.js.map +1 -1
  22. package/funcs/cardIssuingList.js +1 -1
  23. package/funcs/cardIssuingList.js.map +1 -1
  24. package/funcs/cardIssuingRequest.js +1 -1
  25. package/funcs/cardIssuingRequest.js.map +1 -1
  26. package/funcs/cardIssuingUpdate.js +1 -1
  27. package/funcs/cardIssuingUpdate.js.map +1 -1
  28. package/funcs/transfersListCancellations.d.ts +17 -0
  29. package/funcs/transfersListCancellations.d.ts.map +1 -0
  30. package/funcs/transfersListCancellations.js +129 -0
  31. package/funcs/transfersListCancellations.js.map +1 -0
  32. package/hooks/types.d.ts +1 -0
  33. package/hooks/types.d.ts.map +1 -1
  34. package/jsr.json +1 -1
  35. package/lib/config.d.ts +3 -3
  36. package/lib/config.js +3 -3
  37. package/lib/encodings.js +12 -12
  38. package/lib/encodings.js.map +1 -1
  39. package/lib/http.d.ts +1 -1
  40. package/lib/http.d.ts.map +1 -1
  41. package/lib/http.js +1 -1
  42. package/lib/http.js.map +1 -1
  43. package/lib/matchers.js +3 -3
  44. package/lib/matchers.js.map +1 -1
  45. package/lib/primitives.d.ts +1 -0
  46. package/lib/primitives.d.ts.map +1 -1
  47. package/lib/primitives.js +18 -0
  48. package/lib/primitives.js.map +1 -1
  49. package/lib/retries.js +7 -0
  50. package/lib/retries.js.map +1 -1
  51. package/lib/sdks.d.ts.map +1 -1
  52. package/lib/sdks.js +50 -16
  53. package/lib/sdks.js.map +1 -1
  54. package/lib/security.d.ts +5 -4
  55. package/lib/security.d.ts.map +1 -1
  56. package/lib/security.js +6 -7
  57. package/lib/security.js.map +1 -1
  58. package/mcp-server/mcp-server.js +1 -1
  59. package/mcp-server/server.d.ts.map +1 -1
  60. package/mcp-server/server.js +3 -1
  61. package/mcp-server/server.js.map +1 -1
  62. package/mcp-server/tools/accountsCreate.d.ts.map +1 -1
  63. package/mcp-server/tools/accountsCreate.js +8 -10
  64. package/mcp-server/tools/accountsCreate.js.map +1 -1
  65. package/mcp-server/tools/bankAccountsLink.js +1 -1
  66. package/mcp-server/tools/capabilitiesDisable.js +1 -1
  67. package/mcp-server/tools/capabilitiesGet.js +1 -1
  68. package/mcp-server/tools/capabilitiesList.js +1 -1
  69. package/mcp-server/tools/capabilitiesRequest.js +1 -1
  70. package/mcp-server/tools/transfersListCancellations.d.ts +8 -0
  71. package/mcp-server/tools/transfersListCancellations.d.ts.map +1 -0
  72. package/{models/components/authorizeduser.js → mcp-server/tools/transfersListCancellations.js} +27 -22
  73. package/mcp-server/tools/transfersListCancellations.js.map +1 -0
  74. package/models/components/addcapabilities.d.ts +9 -0
  75. package/models/components/addcapabilities.d.ts.map +1 -1
  76. package/models/components/addcapabilities.js.map +1 -1
  77. package/models/components/capability.d.ts +7 -1
  78. package/models/components/capability.d.ts.map +1 -1
  79. package/models/components/capability.js.map +1 -1
  80. package/models/components/capabilityid.d.ts +15 -2
  81. package/models/components/capabilityid.d.ts.map +1 -1
  82. package/models/components/capabilityid.js +8 -1
  83. package/models/components/capabilityid.js.map +1 -1
  84. package/models/components/cardbrandfees.d.ts +5 -0
  85. package/models/components/cardbrandfees.d.ts.map +1 -1
  86. package/models/components/cardbrandfees.js +2 -0
  87. package/models/components/cardbrandfees.js.map +1 -1
  88. package/models/components/createaccount.d.ts +9 -0
  89. package/models/components/createaccount.d.ts.map +1 -1
  90. package/models/components/createaccount.js.map +1 -1
  91. package/models/components/createpaymentlink.d.ts +3 -3
  92. package/models/components/fullissuedcard.d.ts +26 -12
  93. package/models/components/fullissuedcard.d.ts.map +1 -1
  94. package/models/components/fullissuedcard.js +11 -5
  95. package/models/components/fullissuedcard.js.map +1 -1
  96. package/models/components/index.d.ts +1 -4
  97. package/models/components/index.d.ts.map +1 -1
  98. package/models/components/index.js +1 -4
  99. package/models/components/index.js.map +1 -1
  100. package/models/components/issuedcard.d.ts +26 -12
  101. package/models/components/issuedcard.d.ts.map +1 -1
  102. package/models/components/issuedcard.js +11 -5
  103. package/models/components/issuedcard.js.map +1 -1
  104. package/models/components/issuedcardstate.d.ts +2 -8
  105. package/models/components/issuedcardstate.d.ts.map +1 -1
  106. package/models/components/issuedcardstate.js +1 -5
  107. package/models/components/issuedcardstate.js.map +1 -1
  108. package/models/components/manualtermsofservice.d.ts +1 -1
  109. package/models/components/manualtermsofserviceupdate.d.ts +1 -1
  110. package/models/components/onboardinginvite.d.ts +1 -1
  111. package/models/components/onboardinginviterequest.d.ts +1 -1
  112. package/models/components/patchtransfer.d.ts +3 -0
  113. package/models/components/patchtransfer.d.ts.map +1 -1
  114. package/models/components/patchtransfer.js.map +1 -1
  115. package/models/components/paymentlink.d.ts +2 -2
  116. package/models/components/requestcard.d.ts +14 -17
  117. package/models/components/requestcard.d.ts.map +1 -1
  118. package/models/components/requestcard.js +9 -10
  119. package/models/components/requestcard.js.map +1 -1
  120. package/models/components/termsofservice.d.ts +1 -1
  121. package/models/components/updateissuedcard.d.ts +33 -8
  122. package/models/components/updateissuedcard.d.ts.map +1 -1
  123. package/models/components/updateissuedcard.js +35 -6
  124. package/models/components/updateissuedcard.js.map +1 -1
  125. package/models/components/webhookdata.d.ts +3 -2
  126. package/models/components/webhookdata.d.ts.map +1 -1
  127. package/models/components/webhookdata.js +7 -4
  128. package/models/components/webhookdata.js.map +1 -1
  129. package/models/components/webhookdataauthorizationexpiring.d.ts +23 -0
  130. package/models/components/webhookdataauthorizationexpiring.d.ts.map +1 -0
  131. package/models/components/{createauthorizedusererror.js → webhookdataauthorizationexpiring.js} +18 -17
  132. package/models/components/webhookdataauthorizationexpiring.js.map +1 -0
  133. package/models/components/webhookdatacapabilityrequested.d.ts +7 -1
  134. package/models/components/webhookdatacapabilityrequested.d.ts.map +1 -1
  135. package/models/components/webhookdatacapabilityrequested.js.map +1 -1
  136. package/models/components/webhookdatacapabilityupdated.d.ts +7 -1
  137. package/models/components/webhookdatacapabilityupdated.d.ts.map +1 -1
  138. package/models/components/webhookdatacapabilityupdated.js.map +1 -1
  139. package/models/components/webhookdatasweepcreated.d.ts +5 -0
  140. package/models/components/webhookdatasweepcreated.d.ts.map +1 -1
  141. package/models/components/webhookdatasweepcreated.js +2 -0
  142. package/models/components/webhookdatasweepcreated.js.map +1 -1
  143. package/models/components/webhookdatasweepupdated.d.ts +5 -0
  144. package/models/components/webhookdatasweepupdated.d.ts.map +1 -1
  145. package/models/components/webhookdatasweepupdated.js +2 -0
  146. package/models/components/webhookdatasweepupdated.js.map +1 -1
  147. package/models/components/webhookeventtype.d.ts +1 -0
  148. package/models/components/webhookeventtype.d.ts.map +1 -1
  149. package/models/components/webhookeventtype.js +1 -0
  150. package/models/components/webhookeventtype.js.map +1 -1
  151. package/models/errors/requestcarderror.d.ts +12 -12
  152. package/models/errors/requestcarderror.d.ts.map +1 -1
  153. package/models/errors/requestcarderror.js +17 -17
  154. package/models/errors/requestcarderror.js.map +1 -1
  155. package/models/errors/updateissuedcarderror.d.ts +9 -6
  156. package/models/errors/updateissuedcarderror.d.ts.map +1 -1
  157. package/models/errors/updateissuedcarderror.js +12 -9
  158. package/models/errors/updateissuedcarderror.js.map +1 -1
  159. package/models/operations/disablecapability.d.ts +7 -1
  160. package/models/operations/disablecapability.d.ts.map +1 -1
  161. package/models/operations/disablecapability.js.map +1 -1
  162. package/models/operations/getcapability.d.ts +7 -1
  163. package/models/operations/getcapability.d.ts.map +1 -1
  164. package/models/operations/getcapability.js.map +1 -1
  165. package/models/operations/index.d.ts +1 -0
  166. package/models/operations/index.d.ts.map +1 -1
  167. package/models/operations/index.js +1 -0
  168. package/models/operations/index.js.map +1 -1
  169. package/models/operations/linkbankaccount.d.ts +1 -1
  170. package/models/operations/listcancellations.d.ts +45 -0
  171. package/models/operations/listcancellations.d.ts.map +1 -0
  172. package/models/operations/listcancellations.js +90 -0
  173. package/models/operations/listcancellations.js.map +1 -0
  174. package/models/operations/listissuedcards.d.ts +1 -1
  175. package/package.json +1 -1
  176. package/sdk/accounts.d.ts +8 -10
  177. package/sdk/accounts.d.ts.map +1 -1
  178. package/sdk/accounts.js +8 -10
  179. package/sdk/accounts.js.map +1 -1
  180. package/sdk/bankaccounts.d.ts +1 -1
  181. package/sdk/bankaccounts.js +1 -1
  182. package/sdk/capabilities.d.ts +4 -4
  183. package/sdk/capabilities.js +4 -4
  184. package/sdk/transfers.d.ts +7 -0
  185. package/sdk/transfers.d.ts.map +1 -1
  186. package/sdk/transfers.js +10 -0
  187. package/sdk/transfers.js.map +1 -1
  188. package/src/funcs/accountsCreate.ts +8 -10
  189. package/src/funcs/bankAccountsLink.ts +1 -1
  190. package/src/funcs/capabilitiesDisable.ts +1 -1
  191. package/src/funcs/capabilitiesGet.ts +1 -1
  192. package/src/funcs/capabilitiesList.ts +1 -1
  193. package/src/funcs/capabilitiesRequest.ts +1 -1
  194. package/src/funcs/cardIssuingGet.ts +1 -1
  195. package/src/funcs/cardIssuingGetFull.ts +3 -3
  196. package/src/funcs/cardIssuingList.ts +1 -1
  197. package/src/funcs/cardIssuingRequest.ts +1 -1
  198. package/src/funcs/cardIssuingUpdate.ts +1 -1
  199. package/src/funcs/transfersListCancellations.ts +181 -0
  200. package/src/hooks/types.ts +1 -0
  201. package/src/lib/config.ts +3 -3
  202. package/src/lib/encodings.ts +1 -1
  203. package/src/lib/http.ts +3 -1
  204. package/src/lib/matchers.ts +1 -1
  205. package/src/lib/primitives.ts +16 -0
  206. package/src/lib/retries.ts +8 -0
  207. package/src/lib/sdks.ts +54 -17
  208. package/src/lib/security.ts +10 -5
  209. package/src/mcp-server/mcp-server.ts +1 -1
  210. package/src/mcp-server/server.ts +3 -1
  211. package/src/mcp-server/tools/accountsCreate.ts +8 -10
  212. package/src/mcp-server/tools/bankAccountsLink.ts +1 -1
  213. package/src/mcp-server/tools/capabilitiesDisable.ts +1 -1
  214. package/src/mcp-server/tools/capabilitiesGet.ts +1 -1
  215. package/src/mcp-server/tools/capabilitiesList.ts +1 -1
  216. package/src/mcp-server/tools/capabilitiesRequest.ts +1 -1
  217. package/src/mcp-server/tools/transfersListCancellations.ts +38 -0
  218. package/src/models/components/addcapabilities.ts +9 -0
  219. package/src/models/components/capability.ts +7 -1
  220. package/src/models/components/capabilityid.ts +15 -2
  221. package/src/models/components/cardbrandfees.ts +7 -0
  222. package/src/models/components/createaccount.ts +9 -0
  223. package/src/models/components/createpaymentlink.ts +3 -3
  224. package/src/models/components/fullissuedcard.ts +36 -20
  225. package/src/models/components/index.ts +1 -4
  226. package/src/models/components/issuedcard.ts +36 -20
  227. package/src/models/components/issuedcardstate.ts +2 -8
  228. package/src/models/components/manualtermsofservice.ts +1 -1
  229. package/src/models/components/manualtermsofserviceupdate.ts +1 -1
  230. package/src/models/components/onboardinginvite.ts +1 -1
  231. package/src/models/components/onboardinginviterequest.ts +1 -1
  232. package/src/models/components/patchtransfer.ts +3 -0
  233. package/src/models/components/paymentlink.ts +2 -2
  234. package/src/models/components/requestcard.ts +23 -34
  235. package/src/models/components/termsofservice.ts +1 -1
  236. package/src/models/components/updateissuedcard.ts +73 -17
  237. package/src/models/components/webhookdata.ts +18 -8
  238. package/src/models/components/webhookdataauthorizationexpiring.ts +65 -0
  239. package/src/models/components/webhookdatacapabilityrequested.ts +7 -1
  240. package/src/models/components/webhookdatacapabilityupdated.ts +7 -1
  241. package/src/models/components/webhookdatasweepcreated.ts +7 -0
  242. package/src/models/components/webhookdatasweepupdated.ts +7 -0
  243. package/src/models/components/webhookeventtype.ts +1 -0
  244. package/src/models/errors/requestcarderror.ts +26 -25
  245. package/src/models/errors/updateissuedcarderror.ts +18 -13
  246. package/src/models/operations/disablecapability.ts +7 -1
  247. package/src/models/operations/getcapability.ts +7 -1
  248. package/src/models/operations/index.ts +1 -0
  249. package/src/models/operations/linkbankaccount.ts +1 -1
  250. package/src/models/operations/listcancellations.ts +120 -0
  251. package/src/models/operations/listissuedcards.ts +1 -1
  252. package/src/sdk/accounts.ts +8 -10
  253. package/src/sdk/bankaccounts.ts +1 -1
  254. package/src/sdk/capabilities.ts +4 -4
  255. package/src/sdk/transfers.ts +18 -0
  256. package/src/types/async.ts +8 -7
  257. package/types/async.d.ts.map +1 -1
  258. package/types/async.js +8 -7
  259. package/types/async.js.map +1 -1
  260. package/lib/dlv.d.ts +0 -14
  261. package/lib/dlv.d.ts.map +0 -1
  262. package/lib/dlv.js +0 -49
  263. package/lib/dlv.js.map +0 -1
  264. package/lib/is-plain-object.d.ts +0 -2
  265. package/lib/is-plain-object.d.ts.map +0 -1
  266. package/lib/is-plain-object.js +0 -41
  267. package/lib/is-plain-object.js.map +0 -1
  268. package/models/components/authorizeduser.d.ts +0 -22
  269. package/models/components/authorizeduser.d.ts.map +0 -1
  270. package/models/components/authorizeduser.js.map +0 -1
  271. package/models/components/createauthorizeduser.d.ts +0 -25
  272. package/models/components/createauthorizeduser.d.ts.map +0 -1
  273. package/models/components/createauthorizeduser.js +0 -63
  274. package/models/components/createauthorizeduser.js.map +0 -1
  275. package/models/components/createauthorizedusererror.d.ts +0 -22
  276. package/models/components/createauthorizedusererror.d.ts.map +0 -1
  277. package/models/components/createauthorizedusererror.js.map +0 -1
  278. package/models/components/createauthorizeduserupdate.d.ts +0 -25
  279. package/models/components/createauthorizeduserupdate.d.ts.map +0 -1
  280. package/models/components/createauthorizeduserupdate.js +0 -63
  281. package/models/components/createauthorizeduserupdate.js.map +0 -1
  282. package/src/lib/dlv.ts +0 -53
  283. package/src/lib/is-plain-object.ts +0 -43
  284. package/src/models/components/authorizeduser.ts +0 -54
  285. package/src/models/components/createauthorizeduser.ts +0 -68
  286. package/src/models/components/createauthorizedusererror.ts +0 -65
  287. package/src/models/components/createauthorizeduserupdate.ts +0 -68
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import { bytesToBase64 } from "./base64.js";
6
- import { isPlainObject } from "./is-plain-object.js";
6
+ import { isPlainObject } from "./primitives.js";
7
7
 
8
8
  export class EncodingError extends Error {
9
9
  constructor(message: string) {
package/src/lib/http.ts CHANGED
@@ -45,8 +45,10 @@ export class HTTPClient {
45
45
  private requestHooks: BeforeRequestHook[] = [];
46
46
  private requestErrorHooks: RequestErrorHook[] = [];
47
47
  private responseHooks: ResponseHook[] = [];
48
+ private options: HTTPClientOptions;
48
49
 
49
- constructor(private options: HTTPClientOptions = {}) {
50
+ constructor(options: HTTPClientOptions = {}) {
51
+ this.options = options;
50
52
  this.fetcher = options.fetcher || DEFAULT_FETCHER;
51
53
  }
52
54
 
@@ -6,7 +6,7 @@ import { APIError } from "../models/errors/apierror.js";
6
6
  import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
7
7
  import { ERR, OK, Result } from "../types/fp.js";
8
8
  import { matchResponse, matchStatusCode, StatusCodePredicate } from "./http.js";
9
- import { isPlainObject } from "./is-plain-object.js";
9
+ import { isPlainObject } from "./primitives.js";
10
10
 
11
11
  export type Encoding =
12
12
  | "jsonl"
@@ -148,3 +148,19 @@ export function allRequired<V extends Record<string, unknown>>(
148
148
 
149
149
  return v as ReturnType<typeof allRequired<V>>;
150
150
  }
151
+
152
+ export function isPlainObject(
153
+ value: unknown,
154
+ ): value is Record<string, unknown> {
155
+ if (value === null || typeof value !== "object") return false;
156
+ if (Object.prototype.toString.call(value) !== "[object Object]") return false;
157
+ const proto = Object.getPrototypeOf(value);
158
+ if (proto === null || proto === Object.prototype) return true;
159
+ // cross-realm plain objects (vm contexts, iframes) inherit from a
160
+ // different realm's Object.prototype, which itself has a null prototype
161
+ try {
162
+ return Object.getPrototypeOf(proto) === null;
163
+ } catch {
164
+ return false;
165
+ }
166
+ }
@@ -194,6 +194,14 @@ async function retryBackoff(
194
194
  }
195
195
 
196
196
  function retryIntervalFromResponse(res: Response): number {
197
+ const retryAfterMsVal = res.headers.get("retry-after-ms");
198
+ if (retryAfterMsVal) {
199
+ const parsedMs = Number(retryAfterMsVal);
200
+ if (Number.isFinite(parsedMs) && parsedMs >= 0) {
201
+ return parsedMs;
202
+ }
203
+ }
204
+
197
205
  const retryVal = res.headers.get("retry-after") || "";
198
206
  if (!retryVal) {
199
207
  return 0;
package/src/lib/sdks.ts CHANGED
@@ -23,6 +23,7 @@ import {
23
23
  matchContentType,
24
24
  } from "./http.js";
25
25
  import { Logger } from "./logger.js";
26
+ import { combineSignals } from "./primitives.js";
26
27
  import { retry, RetryConfig } from "./retries.js";
27
28
  import { SecurityState } from "./security.js";
28
29
 
@@ -127,27 +128,55 @@ export class ClientSDK {
127
128
  if (path) {
128
129
  baseURL.pathname = baseURL.pathname.replace(/\/+$/, "") + "/";
129
130
  reqURL = new URL(path, baseURL);
131
+ if (!reqURL.search && baseURL.search) {
132
+ reqURL.search = baseURL.search;
133
+ }
130
134
  } else {
131
135
  reqURL = baseURL;
132
136
  }
133
137
  reqURL.hash = "";
134
138
 
135
- let finalQuery = query || "";
136
-
137
- const secQuery: string[] = [];
138
- for (const [k, v] of Object.entries(security?.queryParams || {})) {
139
- const q = encodeForm(k, v, { charEncoding: "percent" });
140
- if (typeof q !== "undefined") {
141
- secQuery.push(q);
139
+ // Appends already-encoded query pairs to a query string, replacing any
140
+ // existing pairs with the same key so later sources take precedence.
141
+ const mergeQuery = (current: string, additions: string): string => {
142
+ if (!additions) {
143
+ return current;
142
144
  }
143
- }
144
- if (secQuery.length) {
145
- finalQuery += `&${secQuery.join("&")}`;
146
- }
145
+ const additionKeys = new Set(
146
+ additions
147
+ .split("&")
148
+ .filter((pair) => pair !== "")
149
+ .map((pair) => pair.split("=")[0] ?? ""),
150
+ );
151
+ const kept = current.split("&").filter((pair) => {
152
+ return pair !== "" && !additionKeys.has(pair.split("=")[0] ?? "");
153
+ });
154
+ return [...kept, additions].join("&");
155
+ };
156
+
157
+ const encodeQueryRecord = (record: Record<string, unknown>): string => {
158
+ return Object.entries(record)
159
+ .map(([k, v]) => {
160
+ if (v == null) {
161
+ return undefined;
162
+ }
163
+ const value = v;
164
+ return encodeForm(k, value, {
165
+ explode: Array.isArray(value),
166
+ charEncoding: "percent",
167
+ });
168
+ })
169
+ .filter((pair): pair is string => typeof pair !== "undefined")
170
+ .join("&");
171
+ };
172
+
173
+ const finalQuery = [
174
+ query || "",
175
+ encodeQueryRecord(security?.queryParams || {}),
176
+ ].reduce(mergeQuery, reqURL.search.slice(1));
147
177
 
148
178
  if (finalQuery) {
149
- const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
150
- reqURL.search = `?${q}`;
179
+ reqURL.search = `?${finalQuery}`;
151
180
  }
152
181
 
153
182
  const headers = new Headers(opHeaders);
@@ -193,9 +222,8 @@ export class ClientSDK {
193
222
  ...options?.fetchOptions,
194
223
  ...options,
195
224
  };
196
- if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
197
- const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
198
- fetchOptions.signal = timeoutSignal;
225
+ if (!fetchOptions?.signal && conf.timeoutMs != null && conf.timeoutMs > 0) {
226
+ context.timeoutMs = conf.timeoutMs;
199
227
  }
200
228
 
201
229
  if (conf.body instanceof ReadableStream) {
@@ -242,10 +270,19 @@ export class ClientSDK {
242
270
  >
243
271
  > {
244
272
  const { context, isErrorStatusCode } = options;
273
+ const timeoutMs = context.timeoutMs;
245
274
 
246
275
  return retry(
247
276
  async () => {
248
- const req = await this.#hooks.beforeRequest(context, request.clone());
277
+ const cloned = request.clone();
278
+ let attempt = cloned;
279
+ if (timeoutMs != null && timeoutMs > 0) {
280
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
281
+ const combined = combineSignals(cloned.signal, timeoutSignal)
282
+ ?? timeoutSignal;
283
+ attempt = new Request(cloned, { signal: combined });
284
+ }
285
+ const req = await this.#hooks.beforeRequest(context, attempt);
249
286
  await logRequest(this.#logger, req).catch((e) =>
250
287
  this.#logger?.log("Failed to log request:", e)
251
288
  );
@@ -12,17 +12,22 @@ type OAuth2PasswordFlow = {
12
12
  tokenURL: string;
13
13
  };
14
14
 
15
- export enum SecurityErrorCode {
16
- Incomplete = "incomplete",
17
- UnrecognisedSecurityType = "unrecognized_security_type",
18
- }
15
+ export const SecurityErrorCode = {
16
+ Incomplete: "incomplete",
17
+ UnrecognisedSecurityType: "unrecognized_security_type",
18
+ } as const;
19
+ export type SecurityErrorCode =
20
+ (typeof SecurityErrorCode)[keyof typeof SecurityErrorCode];
19
21
 
20
22
  export class SecurityError extends Error {
23
+ public code: SecurityErrorCode;
24
+
21
25
  constructor(
22
- public code: SecurityErrorCode,
26
+ code: SecurityErrorCode,
23
27
  message: string,
24
28
  ) {
25
29
  super(message);
30
+ this.code = code;
26
31
  this.name = "SecurityError";
27
32
  }
28
33
 
@@ -19,7 +19,7 @@ const routes = buildRouteMap({
19
19
  export const app = buildApplication(routes, {
20
20
  name: "mcp",
21
21
  versionInfo: {
22
- currentVersion: "25.12.0",
22
+ currentVersion: "25.12.3",
23
23
  },
24
24
  });
25
25
 
@@ -166,6 +166,7 @@ import { tool$transfersGetCancellation } from "./tools/transfersGetCancellation.
166
166
  import { tool$transfersGetRefund } from "./tools/transfersGetRefund.js";
167
167
  import { tool$transfersInitiateRefund } from "./tools/transfersInitiateRefund.js";
168
168
  import { tool$transfersList } from "./tools/transfersList.js";
169
+ import { tool$transfersListCancellations } from "./tools/transfersListCancellations.js";
169
170
  import { tool$transfersListRefunds } from "./tools/transfersListRefunds.js";
170
171
  import { tool$transfersUpdate } from "./tools/transfersUpdate.js";
171
172
  import { tool$underwritingGet } from "./tools/underwritingGet.js";
@@ -197,7 +198,7 @@ export function createMCPServer(deps: {
197
198
  }) {
198
199
  const server = new McpServer({
199
200
  name: "Moov",
200
- version: "25.12.0",
201
+ version: "25.12.3",
201
202
  });
202
203
 
203
204
  const client = new MoovCore({
@@ -346,6 +347,7 @@ export function createMCPServer(deps: {
346
347
  tool(tool$transfersGet);
347
348
  tool(tool$transfersUpdate);
348
349
  tool(tool$transfersCreateCancellation);
350
+ tool(tool$transfersListCancellations);
349
351
  tool(tool$transfersGetCancellation);
350
352
  tool(tool$transfersInitiateRefund);
351
353
  tool(tool$transfersListRefunds);
@@ -13,21 +13,19 @@ const args = {
13
13
  export const tool$accountsCreate: ToolDefinition<typeof args> = {
14
14
  name: "accounts-create",
15
15
  description:
16
- `You can create **business** or **individual** accounts for your users (i.e., customers, merchants) by passing the required
17
- information to Moov. Requirements differ per account type and requested [capabilities](https://docs.moov.io/guides/accounts/capabilities/requirements/).
16
+ `You can create business or individual accounts for your users (i.e., customers, merchants) by passing the required information to Moov. Requirements differ per account type and requested [capabilities](https://docs.moov.io/guides/accounts/capabilities/reference/).
18
17
 
19
- If you're requesting the \`wallet\`, \`send-funds\`, \`collect-funds\`, or \`card-issuing\` capabilities, you'll need to:
20
- + Send Moov the user [platform terms of service agreement](https://docs.moov.io/guides/accounts/requirements/platform-agreement/) acceptance.
21
- This can be done upon account creation, or by [patching](https://docs.moov.io/api/moov-accounts/accounts/patch/) the account using the \`termsOfService\` field.
22
- If you're creating a business account with the business type \`llc\`, \`partnership\`, or \`privateCorporation\`, you'll need to:
18
+ The \`transfers\` capability is automatically requested for every account. If you request any capability beyond \`transfers\` (for example, \`send-funds.ach\`, \`collect-funds.card-payments\`), you'll need to:
19
+ + Send Moov the user's [platform terms of service agreement](https://docs.moov.io/guides/accounts/requirements/platform-agreement/) acceptance. This can be done at account creation, or by [patching](https://docs.moov.io/api/moov-accounts/accounts/patch/) the account using the \`termsOfService\` field.
20
+ + Fulfill the [verification and underwriting requirements](https://docs.moov.io/guides/accounts/requirements/) for each requested capability. A capability isn't enabled until its requirements pass — check the capability's status to see what's still outstanding.
21
+
22
+ If you're creating a business account, depending on the business type, you'll also need to:
23
23
  + Provide [business representatives](https://docs.moov.io/api/moov-accounts/representatives/) after creating the account.
24
24
  + [Patch](https://docs.moov.io/api/moov-accounts/accounts/patch/) the account to indicate that business representative ownership information is complete.
25
25
 
26
- Visit our documentation to read more about [creating accounts](https://docs.moov.io/guides/accounts/create-accounts/) and [verification requirements](https://docs.moov.io/guides/accounts/requirements/identity-verification/).
27
- Note that the \`mode\` field (for production or sandbox) is only required when creating a _facilitator_ account. All non-facilitator account requests will ignore the mode field and be set to the calling facilitator's mode.
26
+ Visit our documentation to read more about [creating accounts](https://docs.moov.io/guides/accounts/create-accounts/) and [verification requirements](https://docs.moov.io/guides/accounts/requirements/identity-verification/). Note that the \`mode\` field (for production or sandbox) is only required when creating a Partner account. All other account requests will ignore the mode field and be set to the calling Partner account's mode.
28
27
 
29
- To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) you'll need
30
- to specify the \`/accounts.write\` scope.`,
28
+ To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) you'll need to specify the \`/accounts.write\` scope.`,
31
29
  args,
32
30
  tool: async (client, args, ctx) => {
33
31
  const [result, apiCall] = await accountsCreate(
@@ -16,7 +16,7 @@ export const tool$bankAccountsLink: ToolDefinition<typeof args> = {
16
16
  `Link a bank account to an existing Moov account. Read our [bank accounts guide](https://docs.moov.io/guides/sources/bank-accounts/) to learn more.
17
17
 
18
18
  It is strongly recommended that callers include the \`X-Wait-For\` header, set to \`payment-method\`, if the newly linked
19
- bank-account is intended to be used right away. If this header is not included, the caller will need to poll the [List Payment
19
+ bank account is intended to be used right away. If this header is not included, the caller will need to poll the [List Payment
20
20
  Methods](https://docs.moov.io/api/sources/payment-methods/list/)
21
21
  endpoint to wait for the new payment methods to be available for use.
22
22
 
@@ -13,7 +13,7 @@ const args = {
13
13
  export const tool$capabilitiesDisable: ToolDefinition<typeof args> = {
14
14
  name: "capabilities-disable",
15
15
  description:
16
- `Disable a specific capability that an account has requested. Read our [capabilities guide](https://docs.moov.io/guides/accounts/capabilities/) to learn more.
16
+ `Disable a specific capability that an account has requested. Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to learn more.
17
17
 
18
18
  To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
19
19
  you'll need to specify the \`/accounts/{accountID}/capabilities.write\` scope.`,
@@ -13,7 +13,7 @@ const args = {
13
13
  export const tool$capabilitiesGet: ToolDefinition<typeof args> = {
14
14
  name: "capabilities-get",
15
15
  description:
16
- `Retrieve a specific capability that an account has requested. Read our [capabilities guide](https://docs.moov.io/guides/accounts/capabilities/) to learn more.
16
+ `Retrieve a specific capability that an account has requested. Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to learn more.
17
17
 
18
18
  To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
19
19
  you'll need to specify the \`/accounts/{accountID}/capabilities.read\` scope.`,
@@ -14,7 +14,7 @@ export const tool$capabilitiesList: ToolDefinition<typeof args> = {
14
14
  name: "capabilities-list",
15
15
  description: `Retrieve all the capabilities an account has requested.
16
16
 
17
- Read our [capabilities guide](https://docs.moov.io/guides/accounts/capabilities/) to learn more.
17
+ Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to learn more.
18
18
 
19
19
  To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
20
20
  you'll need to specify the \`/accounts/{accountID}/capabilities.read\` scope.`,
@@ -13,7 +13,7 @@ const args = {
13
13
  export const tool$capabilitiesRequest: ToolDefinition<typeof args> = {
14
14
  name: "capabilities-request",
15
15
  description:
16
- `Request capabilities for a specific account. Read our [capabilities guide](https://docs.moov.io/guides/accounts/capabilities/) to learn more.
16
+ `Request capabilities for a specific account. Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to learn more.
17
17
 
18
18
  To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
19
19
  you'll need to specify the \`/accounts/{accountID}/capabilities.write\` scope.`,
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { transfersListCancellations } from "../../funcs/transfersListCancellations.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.ListCancellationsRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$transfersListCancellations: ToolDefinition<typeof args> = {
14
+ name: "transfers-list-cancellations",
15
+ description: ` Get a list of cancellations for a transfer.
16
+
17
+ To access this endpoint using a [token](https://docs.moov.io/api/authentication/access-tokens/) you'll need
18
+ to specify the \`/accounts/{accountID}/transfers.read\` scope.`,
19
+ args,
20
+ tool: async (client, args, ctx) => {
21
+ const [result, apiCall] = await transfersListCancellations(
22
+ client,
23
+ args.request,
24
+ { fetchOptions: { signal: ctx.signal } },
25
+ ).$inspect();
26
+
27
+ if (!result.ok) {
28
+ return {
29
+ content: [{ type: "text", text: result.error.message }],
30
+ isError: true,
31
+ };
32
+ }
33
+
34
+ const value = result.value.result;
35
+
36
+ return formatResult(value, apiCall);
37
+ },
38
+ };
@@ -13,6 +13,15 @@ import {
13
13
  } from "./capabilityid.js";
14
14
 
15
15
  export type AddCapabilities = {
16
+ /**
17
+ * Capabilities to request for the account. Request granular capability IDs that match your use case.
18
+ *
19
+ * @remarks
20
+ *
21
+ * Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to choose the right capabilities for your integration.
22
+ *
23
+ * The `send-funds`, `collect-funds`, and `wallet` capability IDs are deprecated. Use granular values such as `send-funds.ach`, `collect-funds.card-payments`, or `wallet.balance` instead.
24
+ */
16
25
  capabilities: Array<CapabilityID>;
17
26
  };
18
27
 
@@ -29,7 +29,13 @@ export type Capability = {
29
29
  *
30
30
  * @remarks
31
31
  *
32
- * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in your list. These are read-only capabilities that Moov requests and uses for account verification purposes. These capabilities remains active with your account and require no additional action.
32
+ * **Deprecated capabilities**
33
+ *
34
+ * The `send-funds`, `collect-funds`, and `wallet` capability IDs are deprecated. Request granular capabilities instead (for example, `send-funds.ach`, `collect-funds.card-payments`, or `wallet.balance`). Deprecated values will be removed in a future API version.
35
+ *
36
+ * Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to choose the right capabilities for your integration.
37
+ *
38
+ * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in the list for your Partner account. These are read-only capabilities that Moov requests. These capabilities remain active with your account and require no additional action.
33
39
  */
34
40
  capability: CapabilityID;
35
41
  accountID: string;
@@ -10,7 +10,13 @@ import { ClosedEnum } from "../../types/enums.js";
10
10
  *
11
11
  * @remarks
12
12
  *
13
- * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in your list. These are read-only capabilities that Moov requests and uses for account verification purposes. These capabilities remains active with your account and require no additional action.
13
+ * **Deprecated capabilities**
14
+ *
15
+ * The `send-funds`, `collect-funds`, and `wallet` capability IDs are deprecated. Request granular capabilities instead (for example, `send-funds.ach`, `collect-funds.card-payments`, or `wallet.balance`). Deprecated values will be removed in a future API version.
16
+ *
17
+ * Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to choose the right capabilities for your integration.
18
+ *
19
+ * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in the list for your Partner account. These are read-only capabilities that Moov requests. These capabilities remain active with your account and require no additional action.
14
20
  */
15
21
  export const CapabilityID = {
16
22
  Transfers: "transfers",
@@ -27,6 +33,7 @@ export const CapabilityID = {
27
33
  Wallet: "wallet",
28
34
  WalletBalance: "wallet.balance",
29
35
  CardIssuing: "card-issuing",
36
+ IssuingCardholder: "issuing.cardholder",
30
37
  ProductionApp: "production-app",
31
38
  PlatformProductionApp: "platform.production-app",
32
39
  PlatformWalletTransfers: "platform.wallet-transfers",
@@ -36,7 +43,13 @@ export const CapabilityID = {
36
43
  *
37
44
  * @remarks
38
45
  *
39
- * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in your list. These are read-only capabilities that Moov requests and uses for account verification purposes. These capabilities remains active with your account and require no additional action.
46
+ * **Deprecated capabilities**
47
+ *
48
+ * The `send-funds`, `collect-funds`, and `wallet` capability IDs are deprecated. Request granular capabilities instead (for example, `send-funds.ach`, `collect-funds.card-payments`, or `wallet.balance`). Deprecated values will be removed in a future API version.
49
+ *
50
+ * Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to choose the right capabilities for your integration.
51
+ *
52
+ * The `production-app`, `platform.production-app`, and / or `platform.wallet-transfers` capabilities might appear in the list for your Partner account. These are read-only capabilities that Moov requests. These capabilities remain active with your account and require no additional action.
40
53
  */
41
54
  export type CapabilityID = ClosedEnum<typeof CapabilityID>;
42
55
 
@@ -56,6 +56,10 @@ export type CardBrandFees = {
56
56
  * Details of refunded transactions.
57
57
  */
58
58
  refunds?: BillingCountAndAmount | undefined;
59
+ /**
60
+ * Details of card cancellations.
61
+ */
62
+ cardCancellations?: BillingCountAndAmount | undefined;
59
63
  /**
60
64
  * Total fees for this card brand.
61
65
  */
@@ -79,6 +83,7 @@ export const CardBrandFees$inboundSchema: z.ZodType<
79
83
  .optional(),
80
84
  declines: BillingCountAndAmount$inboundSchema.optional(),
81
85
  refunds: BillingCountAndAmount$inboundSchema.optional(),
86
+ cardCancellations: BillingCountAndAmount$inboundSchema.optional(),
82
87
  total: BillingCountAndAmount$inboundSchema,
83
88
  });
84
89
  /** @internal */
@@ -94,6 +99,7 @@ export type CardBrandFees$Outbound = {
94
99
  completedInternationalInPerson?: BillingCountAndAmount$Outbound | undefined;
95
100
  declines?: BillingCountAndAmount$Outbound | undefined;
96
101
  refunds?: BillingCountAndAmount$Outbound | undefined;
102
+ cardCancellations?: BillingCountAndAmount$Outbound | undefined;
97
103
  total: BillingCountAndAmount$Outbound;
98
104
  };
99
105
 
@@ -114,6 +120,7 @@ export const CardBrandFees$outboundSchema: z.ZodType<
114
120
  .optional(),
115
121
  declines: BillingCountAndAmount$outboundSchema.optional(),
116
122
  refunds: BillingCountAndAmount$outboundSchema.optional(),
123
+ cardCancellations: BillingCountAndAmount$outboundSchema.optional(),
117
124
  total: BillingCountAndAmount$outboundSchema,
118
125
  });
119
126
 
@@ -65,6 +65,15 @@ export type CreateAccount = {
65
65
  * User provided settings to manage an account.
66
66
  */
67
67
  settings?: Settings | undefined;
68
+ /**
69
+ * Capabilities to request when the account is created. Request granular capability IDs that match your use case.
70
+ *
71
+ * @remarks
72
+ *
73
+ * Read our [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) to choose the right capabilities for your integration.
74
+ *
75
+ * The `send-funds`, `collect-funds`, and `wallet` capability IDs are deprecated. Use granular values such as `send-funds.ach`, `collect-funds.card-payments`, or `wallet.balance` instead.
76
+ */
68
77
  capabilities?: Array<CapabilityID> | undefined;
69
78
  /**
70
79
  * The operating mode for an account.
@@ -48,7 +48,7 @@ import {
48
48
  *
49
49
  * @remarks
50
50
  *
51
- * A payment link must include either `payment` or `payout` details, but not both. For payout payment links,
51
+ * A payment link must include exactly one of `payment`, `payout`, or `customAmountPayment` details. For payout payment links,
52
52
  * `maxUses` will automatically be set to 1, as these are intended for a one-time disbursement
53
53
  * to a specific recipient.
54
54
  */
@@ -68,8 +68,8 @@ export type CreatePaymentLink = {
68
68
  *
69
69
  * In API versions before `2026.07.00`, this was a required field.
70
70
  *
71
- * In API version `2026.07.00` and beyond, this field is required for `fixed` payment amount types and omitted
72
- * for `open` payment amount types.
71
+ * In API version `2026.07.00` and beyond, this field is required for `payment` and `payout` links and must be
72
+ * omitted for `customAmountPayment` links, where the payor chooses the amount.
73
73
  */
74
74
  amount: Amount;
75
75
  /**
@@ -7,11 +7,11 @@ import { safeParse } from "../../lib/schemas.js";
7
7
  import { Result as SafeParseResult } from "../../types/fp.js";
8
8
  import { SDKValidationError } from "../errors/sdkvalidationerror.js";
9
9
  import {
10
- AuthorizedUser,
11
- AuthorizedUser$inboundSchema,
12
- AuthorizedUser$Outbound,
13
- AuthorizedUser$outboundSchema,
14
- } from "./authorizeduser.js";
10
+ Address,
11
+ Address$inboundSchema,
12
+ Address$Outbound,
13
+ Address$outboundSchema,
14
+ } from "./address.js";
15
15
  import {
16
16
  CardBrand,
17
17
  CardBrand$inboundSchema,
@@ -55,26 +55,32 @@ export type FullIssuedCard = {
55
55
  */
56
56
  expiration: CardExpiration;
57
57
  /**
58
- * Fields for identifying an authorized individual.
58
+ * Unique identifier for the wallet funding the card.
59
59
  */
60
- authorizedUser: AuthorizedUser;
60
+ fundingWalletID: string;
61
61
  /**
62
- * Optional descriptor for the card.
62
+ * Identifier for the account of the card's authorized user.
63
63
  */
64
- memo?: string | undefined;
64
+ authorizedUserAccountID?: string | undefined;
65
65
  /**
66
- * Unique identifier for the wallet funding the card.
66
+ * An optional descriptive name for the card.
67
67
  */
68
- fundingWalletID: string;
68
+ nickname?: string | undefined;
69
+ /**
70
+ * Free-form key-value pair list. Useful for storing information that is not captured elsewhere.
71
+ */
72
+ metadata?: { [k: string]: string } | undefined;
73
+ /**
74
+ * Billing address associated with the card.
75
+ */
76
+ billingAddress?: Address | undefined;
69
77
  /**
70
78
  * The `state` represents the operational status of an issued card. A card can only approve incoming authorizations if it is in an active state.
71
79
  *
72
80
  * @remarks
73
81
  *
74
- * - `active`: The card is operational and approves authorizations. Generally becomes active shortly after card creation.
75
- * - `inactive`: The card cannot approve authorizations. This is currently a temporary state assigned post-creation during the activation process.
82
+ * - `active`: The card is operational and can approve authorizations.
76
83
  * - `closed`: The card is permanently deactivated and cannot approve authorizations. A card can be closed by request or when it expires.
77
- * - `pending-verification`: Awaiting additional authorized user verification before the card can be activated.
78
84
  */
79
85
  state: IssuedCardState;
80
86
  /**
@@ -83,6 +89,7 @@ export type FullIssuedCard = {
83
89
  formFactor: IssuedCardFormFactor;
84
90
  controls?: IssuingControls | undefined;
85
91
  createdOn: Date;
92
+ updatedOn: Date;
86
93
  /**
87
94
  * The issued card's Primary Account Number (PAN)
88
95
  */
@@ -103,13 +110,16 @@ export const FullIssuedCard$inboundSchema: z.ZodType<
103
110
  brand: CardBrand$inboundSchema,
104
111
  lastFourCardNumber: z.string(),
105
112
  expiration: CardExpiration$inboundSchema,
106
- authorizedUser: AuthorizedUser$inboundSchema,
107
- memo: z.string().optional(),
108
113
  fundingWalletID: z.string(),
114
+ authorizedUserAccountID: z.string().optional(),
115
+ nickname: z.string().optional(),
116
+ metadata: z.record(z.string()).optional(),
117
+ billingAddress: Address$inboundSchema.optional(),
109
118
  state: IssuedCardState$inboundSchema,
110
119
  formFactor: IssuedCardFormFactor$inboundSchema,
111
120
  controls: IssuingControls$inboundSchema.optional(),
112
121
  createdOn: z.string().datetime({ offset: true }).transform(v => new Date(v)),
122
+ updatedOn: z.string().datetime({ offset: true }).transform(v => new Date(v)),
113
123
  pan: z.string(),
114
124
  cvv: z.string(),
115
125
  });
@@ -119,13 +129,16 @@ export type FullIssuedCard$Outbound = {
119
129
  brand: string;
120
130
  lastFourCardNumber: string;
121
131
  expiration: CardExpiration$Outbound;
122
- authorizedUser: AuthorizedUser$Outbound;
123
- memo?: string | undefined;
124
132
  fundingWalletID: string;
133
+ authorizedUserAccountID?: string | undefined;
134
+ nickname?: string | undefined;
135
+ metadata?: { [k: string]: string } | undefined;
136
+ billingAddress?: Address$Outbound | undefined;
125
137
  state: string;
126
138
  formFactor: string;
127
139
  controls?: IssuingControls$Outbound | undefined;
128
140
  createdOn: string;
141
+ updatedOn: string;
129
142
  pan: string;
130
143
  cvv: string;
131
144
  };
@@ -140,13 +153,16 @@ export const FullIssuedCard$outboundSchema: z.ZodType<
140
153
  brand: CardBrand$outboundSchema,
141
154
  lastFourCardNumber: z.string(),
142
155
  expiration: CardExpiration$outboundSchema,
143
- authorizedUser: AuthorizedUser$outboundSchema,
144
- memo: z.string().optional(),
145
156
  fundingWalletID: z.string(),
157
+ authorizedUserAccountID: z.string().optional(),
158
+ nickname: z.string().optional(),
159
+ metadata: z.record(z.string()).optional(),
160
+ billingAddress: Address$outboundSchema.optional(),
146
161
  state: IssuedCardState$outboundSchema,
147
162
  formFactor: IssuedCardFormFactor$outboundSchema,
148
163
  controls: IssuingControls$outboundSchema.optional(),
149
164
  createdOn: z.date().transform(v => v.toISOString()),
165
+ updatedOn: z.date().transform(v => v.toISOString()),
150
166
  pan: z.string(),
151
167
  cvv: z.string(),
152
168
  });