@polyester/sdk 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/core-client.d.ts +3 -3
  3. package/dist/core-client.d.ts.map +1 -1
  4. package/dist/core-client.js +35 -50
  5. package/dist/core-client.js.map +1 -1
  6. package/dist/gen/auth/v1/address_book_pb.d.ts +21 -0
  7. package/dist/gen/auth/v1/address_book_pb.d.ts.map +1 -1
  8. package/dist/gen/auth/v1/address_book_pb.js +1 -1
  9. package/dist/gen/auth/v1/address_book_pb.js.map +1 -1
  10. package/dist/gen/auth/v1/mfa_pb.d.ts +39 -3
  11. package/dist/gen/auth/v1/mfa_pb.d.ts.map +1 -1
  12. package/dist/gen/auth/v1/mfa_pb.js +1 -1
  13. package/dist/gen/auth/v1/mfa_pb.js.map +1 -1
  14. package/dist/gen/auth/v1/subaccounts_pb.d.ts +2 -1
  15. package/dist/gen/auth/v1/subaccounts_pb.d.ts.map +1 -1
  16. package/dist/gen/auth/v1/subaccounts_pb.js.map +1 -1
  17. package/dist/gen/chain/withdraw/v1/withdraw_pb.d.ts +3 -2
  18. package/dist/gen/chain/withdraw/v1/withdraw_pb.d.ts.map +1 -1
  19. package/dist/gen/chain/withdraw/v1/withdraw_pb.js.map +1 -1
  20. package/dist/gen/transfer/v1/internal_transfer_pb.d.ts +3 -0
  21. package/dist/gen/transfer/v1/internal_transfer_pb.d.ts.map +1 -1
  22. package/dist/gen/transfer/v1/internal_transfer_pb.js.map +1 -1
  23. package/dist/gen/triggers/v1/triggers_pb.d.ts +347 -5
  24. package/dist/gen/triggers/v1/triggers_pb.d.ts.map +1 -1
  25. package/dist/gen/triggers/v1/triggers_pb.js +307 -3
  26. package/dist/gen/triggers/v1/triggers_pb.js.map +1 -1
  27. package/dist/services/accounts/accounts.d.ts +2 -2
  28. package/dist/services/accounts/accounts.d.ts.map +1 -1
  29. package/dist/services/accounts/accounts.js +2 -2
  30. package/dist/services/accounts/accounts.js.map +1 -1
  31. package/dist/services/address-book/address-book.d.ts +5 -3
  32. package/dist/services/address-book/address-book.d.ts.map +1 -1
  33. package/dist/services/address-book/address-book.js +5 -3
  34. package/dist/services/address-book/address-book.js.map +1 -1
  35. package/dist/services/address-book/address-book.schemas.d.ts +6 -0
  36. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  37. package/dist/services/address-book/address-book.schemas.js +10 -5
  38. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  39. package/dist/services/api-keys/api-keys.d.ts +2 -2
  40. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  41. package/dist/services/api-keys/api-keys.js +3 -3
  42. package/dist/services/api-keys/api-keys.js.map +1 -1
  43. package/dist/services/auth/account-signer-auth.d.ts +3 -2
  44. package/dist/services/auth/account-signer-auth.d.ts.map +1 -1
  45. package/dist/services/auth/account-signer-auth.js.map +1 -1
  46. package/dist/services/auth/auth.d.ts +3 -7
  47. package/dist/services/auth/auth.d.ts.map +1 -1
  48. package/dist/services/auth/auth.js +1 -1
  49. package/dist/services/auth/auth.js.map +1 -1
  50. package/dist/services/auth/profile/profile.d.ts +2 -2
  51. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  52. package/dist/services/auth/profile/profile.js +2 -2
  53. package/dist/services/auth/profile/profile.js.map +1 -1
  54. package/dist/services/balances/balances.d.ts +2 -2
  55. package/dist/services/balances/balances.d.ts.map +1 -1
  56. package/dist/services/balances/balances.js +2 -2
  57. package/dist/services/balances/balances.js.map +1 -1
  58. package/dist/services/candles/candles.d.ts +2 -2
  59. package/dist/services/candles/candles.d.ts.map +1 -1
  60. package/dist/services/candles/candles.js +2 -2
  61. package/dist/services/candles/candles.js.map +1 -1
  62. package/dist/services/candles/candles.schemas.d.ts +10 -10
  63. package/dist/services/chain-analytics/chain-analytics.d.ts +2 -2
  64. package/dist/services/chain-analytics/chain-analytics.d.ts.map +1 -1
  65. package/dist/services/chain-analytics/chain-analytics.js +2 -2
  66. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  67. package/dist/services/deposit/deposit.d.ts +2 -2
  68. package/dist/services/deposit/deposit.d.ts.map +1 -1
  69. package/dist/services/deposit/deposit.js +2 -2
  70. package/dist/services/deposit/deposit.js.map +1 -1
  71. package/dist/services/fees/fees.d.ts +2 -2
  72. package/dist/services/fees/fees.d.ts.map +1 -1
  73. package/dist/services/fees/fees.js +2 -2
  74. package/dist/services/fees/fees.js.map +1 -1
  75. package/dist/services/guard-signer/guard-signer.d.ts +2 -2
  76. package/dist/services/guard-signer/guard-signer.d.ts.map +1 -1
  77. package/dist/services/guard-signer/guard-signer.js +2 -2
  78. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  79. package/dist/services/heatmap/heatmap.d.ts +2 -2
  80. package/dist/services/heatmap/heatmap.d.ts.map +1 -1
  81. package/dist/services/heatmap/heatmap.js +2 -2
  82. package/dist/services/heatmap/heatmap.js.map +1 -1
  83. package/dist/services/heatmap/heatmap.schemas.d.ts +9 -9
  84. package/dist/services/internal-transfers/internal-transfers.d.ts +2 -2
  85. package/dist/services/internal-transfers/internal-transfers.d.ts.map +1 -1
  86. package/dist/services/internal-transfers/internal-transfers.js +2 -2
  87. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  88. package/dist/services/lifecycle/lifecycle.d.ts +2 -2
  89. package/dist/services/lifecycle/lifecycle.d.ts.map +1 -1
  90. package/dist/services/lifecycle/lifecycle.js +2 -2
  91. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  92. package/dist/services/market-data/market-data.d.ts +2 -2
  93. package/dist/services/market-data/market-data.d.ts.map +1 -1
  94. package/dist/services/market-data/market-data.js +2 -2
  95. package/dist/services/market-data/market-data.js.map +1 -1
  96. package/dist/services/market-overview/market-overview.d.ts +2 -2
  97. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  98. package/dist/services/market-overview/market-overview.js +2 -2
  99. package/dist/services/market-overview/market-overview.js.map +1 -1
  100. package/dist/services/market-overview/market-overview.schemas.d.ts +3 -3
  101. package/dist/services/mfa/mfa.d.ts +4 -4
  102. package/dist/services/mfa/mfa.d.ts.map +1 -1
  103. package/dist/services/mfa/mfa.js +4 -4
  104. package/dist/services/mfa/mfa.js.map +1 -1
  105. package/dist/services/mfa/mfa.schemas.d.ts +132 -4
  106. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  107. package/dist/services/mfa/mfa.schemas.js +13 -7
  108. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  109. package/dist/services/orderbook/orderbook.d.ts +2 -2
  110. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  111. package/dist/services/orderbook/orderbook.js +2 -2
  112. package/dist/services/orderbook/orderbook.js.map +1 -1
  113. package/dist/services/orders/orders-input.schemas.d.ts +1 -1
  114. package/dist/services/orders/orders-output.schemas.d.ts +6 -6
  115. package/dist/services/orders/orders.d.ts +2 -2
  116. package/dist/services/orders/orders.d.ts.map +1 -1
  117. package/dist/services/orders/orders.js +3 -3
  118. package/dist/services/orders/orders.js.map +1 -1
  119. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +2 -2
  120. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  121. package/dist/services/policies/api-key-policies/api-key-policies.js +2 -2
  122. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  123. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +2 -2
  124. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  125. package/dist/services/policies/subaccount-policies/subaccount-policies.js +2 -2
  126. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  127. package/dist/services/rate-limits/rate-limits.d.ts +2 -2
  128. package/dist/services/rate-limits/rate-limits.d.ts.map +1 -1
  129. package/dist/services/rate-limits/rate-limits.js.map +1 -1
  130. package/dist/services/social-verification/social-verification.d.ts +2 -2
  131. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  132. package/dist/services/social-verification/social-verification.js +2 -2
  133. package/dist/services/social-verification/social-verification.js.map +1 -1
  134. package/dist/services/subaccounts/subaccounts.d.ts +3 -3
  135. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  136. package/dist/services/subaccounts/subaccounts.js +11 -9
  137. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  138. package/dist/services/subaccounts/subaccounts.schemas.d.ts +4 -4
  139. package/dist/services/trades/trades.d.ts +2 -2
  140. package/dist/services/trades/trades.d.ts.map +1 -1
  141. package/dist/services/trades/trades.js +2 -2
  142. package/dist/services/trades/trades.js.map +1 -1
  143. package/dist/services/trading-withdraws/trading-withdraws.d.ts +2 -2
  144. package/dist/services/trading-withdraws/trading-withdraws.d.ts.map +1 -1
  145. package/dist/services/trading-withdraws/trading-withdraws.js +2 -2
  146. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  147. package/dist/services/transfers/transfers.d.ts +2 -2
  148. package/dist/services/transfers/transfers.d.ts.map +1 -1
  149. package/dist/services/transfers/transfers.js +2 -2
  150. package/dist/services/transfers/transfers.js.map +1 -1
  151. package/dist/services/triggers/trigger-input.schemas.d.ts +2 -2
  152. package/dist/services/triggers/triggers-output.schemas.d.ts +365 -18
  153. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  154. package/dist/services/triggers/triggers-output.schemas.js +36 -4
  155. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  156. package/dist/services/triggers/triggers.codecs.js +51 -1
  157. package/dist/services/triggers/triggers.codecs.js.map +1 -1
  158. package/dist/services/triggers/triggers.d.ts +2 -2
  159. package/dist/services/triggers/triggers.d.ts.map +1 -1
  160. package/dist/services/triggers/triggers.js +2 -2
  161. package/dist/services/triggers/triggers.js.map +1 -1
  162. package/dist/services/vip/vip.d.ts +2 -2
  163. package/dist/services/vip/vip.js.map +1 -1
  164. package/dist/services/whiteboard/whiteboard.d.ts +2 -2
  165. package/dist/services/whiteboard/whiteboard.d.ts.map +1 -1
  166. package/dist/services/whiteboard/whiteboard.js +2 -2
  167. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  168. package/dist/services/zipper/zipper.d.ts +2 -2
  169. package/dist/services/zipper/zipper.d.ts.map +1 -1
  170. package/dist/services/zipper/zipper.js +2 -2
  171. package/dist/services/zipper/zipper.js.map +1 -1
  172. package/dist/shared/transports.d.ts +7 -1
  173. package/dist/shared/transports.d.ts.map +1 -1
  174. package/dist/shared/transports.js.map +1 -1
  175. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mfa.js","names":["#client","Proto.MFAService"],"sources":["../../../src/services/mfa/mfa.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n BeginMfaChallengeInputSchema,\n BeginMfaChallengeResultSchema,\n BeginPasskeyEnrollmentInputSchema,\n BeginPasskeyEnrollmentResultSchema,\n BeginTotpEnrollmentInputSchema,\n BeginTotpEnrollmentResultSchema,\n ClaimFreshStepUpInputSchema,\n ClaimFreshStepUpResultSchema,\n CompleteMfaChallengeResultSchema,\n ConsumeFreshStepUpInputSchema,\n DeleteMfaFactorInputSchema,\n UpdateMfaFactorInputSchema,\n UpdateMfaFactorResultSchema,\n FinishPasskeyChallengeInputSchema,\n FinishPasskeyEnrollmentInputSchema,\n FinishPasskeyEnrollmentResultSchema,\n FinishTotpEnrollmentInputSchema,\n FinishTotpEnrollmentResultSchema,\n ListMfaFactorsResponseSchema,\n RegenerateRecoveryCodesInputSchema,\n RegenerateRecoveryCodesResultSchema,\n ReleaseFreshStepUpInputSchema,\n VerifyRecoveryCodeChallengeInputSchema,\n VerifyTotpChallengeInputSchema,\n type BeginMfaChallengeInput,\n type BeginMfaChallengeResult,\n type BeginPasskeyEnrollmentInput,\n type BeginPasskeyEnrollmentResult,\n type BeginTotpEnrollmentInput,\n type BeginTotpEnrollmentResult,\n type ClaimFreshStepUpInput,\n type ClaimFreshStepUpResult,\n type CompleteMfaChallengeResult,\n type ConsumeFreshStepUpInput,\n type DeleteMfaFactorInput,\n type UpdateMfaFactorInput,\n type UpdateMfaFactorResult,\n type FinishPasskeyChallengeInput,\n type FinishPasskeyEnrollmentInput,\n type FinishPasskeyEnrollmentResult,\n type FinishTotpEnrollmentInput,\n type FinishTotpEnrollmentResult,\n type ListMfaFactorsResult,\n type RegenerateRecoveryCodesInput,\n type RegenerateRecoveryCodesResult,\n type ReleaseFreshStepUpInput,\n type VerifyRecoveryCodeChallengeInput,\n type VerifyTotpChallengeInput,\n} from \"./mfa.schemas.js\";\n\n/**\n * Manages MFA enrollment, challenges, recovery codes, session elevation, and fresh step-up proofs.\n */\nexport class MfaService {\n #client: Client<typeof Proto.MFAService>;\n\n constructor(transport: Transport) {\n this.#client = createClient(Proto.MFAService, transport);\n }\n\n /**\n * Returns the caller's enrolled MFA factors, oldest first, and whether unused recovery codes exist.\n */\n async listFactors(options?: PolyesterRequestOptions): Promise<ListMfaFactorsResult> {\n const res = await this.#client.listMFAFactors({}, toConnectCallOptions(options));\n return parse(ListMfaFactorsResponseSchema, res);\n }\n\n /**\n * Creates an authenticator-app enrollment challenge and returns the secret, QR-compatible otpauth URI, enrollment ID, and expiry.\n */\n async beginTotpEnrollment(\n input: BeginTotpEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginTotpEnrollmentResult> {\n const req = parse(BeginTotpEnrollmentInputSchema, input);\n const res = await this.#client.beginTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(BeginTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the first authenticator code, activates the factor, and returns one-time recovery codes that are only shown in this response.\n */\n async finishTotpEnrollment(\n input: FinishTotpEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishTotpEnrollmentResult> {\n const req = parse(FinishTotpEnrollmentInputSchema, input);\n const res = await this.#client.finishTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(FinishTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Creates passkey registration options for a new factor and returns the enrollment challenge and expiry.\n */\n async beginPasskeyEnrollment(\n input: BeginPasskeyEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginPasskeyEnrollmentResult> {\n const req = parse(BeginPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.beginPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(BeginPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the passkey registration response, activates the factor, and returns one-time recovery codes.\n */\n async finishPasskeyEnrollment(\n input: FinishPasskeyEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishPasskeyEnrollmentResult> {\n const req = parse(FinishPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.finishPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(FinishPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Starts an MFA challenge for either session elevation or fresh step-up and returns allowed factor types plus passkey request options when available.\n */\n async beginChallenge(\n input: BeginMfaChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<BeginMfaChallengeResult> {\n const req = parse(BeginMfaChallengeInputSchema, input);\n const res = await this.#client.beginMFAChallenge(req, toConnectCallOptions(options));\n return parse(BeginMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with an authenticator code, returning either an elevated access token or a fresh step-up token depending on the challenge purpose.\n */\n async verifyTotpChallenge(\n input: VerifyTotpChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyTotpChallengeInputSchema, input);\n const res = await this.#client.verifyTOTPChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with a passkey authentication response, returning session assurance and the relevant token for the challenge purpose.\n */\n async finishPasskeyChallenge(\n input: FinishPasskeyChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(FinishPasskeyChallengeInputSchema, input);\n const res = await this.#client.finishPasskeyChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Consumes a one-time recovery code to complete session elevation or fresh step-up.\n */\n async verifyRecoveryCodeChallenge(\n input: VerifyRecoveryCodeChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyRecoveryCodeChallengeInputSchema, input);\n const res = await this.#client.verifyRecoveryCodeChallenge(\n req,\n toConnectCallOptions(options),\n );\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Removes an enrolled MFA factor by factor ID; backend policy may require fresh step-up for this protected action.\n */\n async deleteFactor(\n input: DeleteMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const { factorId } = parse(DeleteMfaFactorInputSchema, input);\n await this.#client.deleteMFAFactor({ factorId }, toConnectCallOptions(options));\n }\n\n /**\n * Updates an MFA factor label, where an empty label clears the display name.\n */\n async updateFactor(\n input: UpdateMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateMfaFactorResult> {\n const { factorId, label } = parse(UpdateMfaFactorInputSchema, input);\n const res = await this.#client.updateMFAFactor(\n { factorId, label },\n toConnectCallOptions(options),\n );\n return parse(UpdateMfaFactorResultSchema, res);\n }\n\n /**\n * Rotates recovery codes after step-up and returns the new one-time codes, which are only available in this response.\n */\n async regenerateRecoveryCodes(\n input: RegenerateRecoveryCodesInput = {},\n options?: PolyesterMutationOptions,\n ): Promise<RegenerateRecoveryCodesResult> {\n parse(RegenerateRecoveryCodesInputSchema, input);\n const res = await this.#client.regenerateRecoveryCodes({}, toConnectCallOptions(options));\n return parse(RegenerateRecoveryCodesResultSchema, res);\n }\n\n /**\n * Binds a fresh step-up proof to one protected request using a request ID, action type, and subject, returning a claim nonce and expiry.\n */\n async claimFreshStepUp(\n input: ClaimFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<ClaimFreshStepUpResult> {\n const req = parse(ClaimFreshStepUpInputSchema, input);\n const res = await this.#client.claimFreshStepUp(req, toConnectCallOptions(options));\n return parse(ClaimFreshStepUpResultSchema, res);\n }\n\n /**\n * Marks a claimed fresh step-up proof as used after the protected request succeeds, echoing the original request binding and claim nonce.\n */\n async consumeFreshStepUp(\n input: ConsumeFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ConsumeFreshStepUpInputSchema, input);\n await this.#client.consumeFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n\n /**\n * Releases a claimed fresh step-up proof when the protected request is abandoned or fails, preserving the original request binding and reason.\n */\n async releaseFreshStepUp(\n input: ReleaseFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ReleaseFreshStepUpInputSchema, input);\n await this.#client.releaseFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mfa.js","names":["#client","Proto.MFAService"],"sources":["../../../src/services/mfa/mfa.ts"],"sourcesContent":["import { createClient, type Client } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport type { AuthApiTransports } from \"../../shared/transports.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n BeginMfaChallengeInputSchema,\n BeginMfaChallengeResultSchema,\n BeginPasskeyEnrollmentInputSchema,\n BeginPasskeyEnrollmentResultSchema,\n BeginTotpEnrollmentInputSchema,\n BeginTotpEnrollmentResultSchema,\n ClaimFreshStepUpInputSchema,\n ClaimFreshStepUpResultSchema,\n CompleteMfaChallengeResultSchema,\n ConsumeFreshStepUpInputSchema,\n DeleteMfaFactorInputSchema,\n UpdateMfaFactorInputSchema,\n UpdateMfaFactorResultSchema,\n FinishPasskeyChallengeInputSchema,\n FinishPasskeyEnrollmentInputSchema,\n FinishPasskeyEnrollmentResultSchema,\n FinishTotpEnrollmentInputSchema,\n FinishTotpEnrollmentResultSchema,\n ListMfaFactorsResponseSchema,\n RegenerateRecoveryCodesInputSchema,\n RegenerateRecoveryCodesResultSchema,\n ReleaseFreshStepUpInputSchema,\n VerifyRecoveryCodeChallengeInputSchema,\n VerifyTotpChallengeInputSchema,\n type BeginMfaChallengeInput,\n type BeginMfaChallengeResult,\n type BeginPasskeyEnrollmentInput,\n type BeginPasskeyEnrollmentResult,\n type BeginTotpEnrollmentInput,\n type BeginTotpEnrollmentResult,\n type ClaimFreshStepUpInput,\n type ClaimFreshStepUpResult,\n type CompleteMfaChallengeResult,\n type ConsumeFreshStepUpInput,\n type DeleteMfaFactorInput,\n type UpdateMfaFactorInput,\n type UpdateMfaFactorResult,\n type FinishPasskeyChallengeInput,\n type FinishPasskeyEnrollmentInput,\n type FinishPasskeyEnrollmentResult,\n type FinishTotpEnrollmentInput,\n type FinishTotpEnrollmentResult,\n type ListMfaFactorsResult,\n type RegenerateRecoveryCodesInput,\n type RegenerateRecoveryCodesResult,\n type ReleaseFreshStepUpInput,\n type VerifyRecoveryCodeChallengeInput,\n type VerifyTotpChallengeInput,\n} from \"./mfa.schemas.js\";\n\n/**\n * Manages MFA enrollment, challenges, recovery codes, session elevation, and fresh step-up proofs.\n */\nexport class MfaService {\n #client: Client<typeof Proto.MFAService>;\n\n constructor(transports: AuthApiTransports) {\n this.#client = createClient(Proto.MFAService, transports.authApi);\n }\n\n /**\n * Returns the caller's enrolled MFA factors, oldest first, and whether unused recovery codes exist.\n */\n async listFactors(options?: PolyesterRequestOptions): Promise<ListMfaFactorsResult> {\n const res = await this.#client.listMFAFactors({}, toConnectCallOptions(options));\n return parse(ListMfaFactorsResponseSchema, res);\n }\n\n /**\n * Creates an authenticator-app enrollment challenge and returns the secret, QR-compatible otpauth URI, enrollment ID, and expiry.\n */\n async beginTotpEnrollment(\n input: BeginTotpEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginTotpEnrollmentResult> {\n const req = parse(BeginTotpEnrollmentInputSchema, input);\n const res = await this.#client.beginTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(BeginTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the first authenticator code, activates the factor, and returns one-time recovery codes that are only shown in this response, plus MFA-elevated session details and access token.\n */\n async finishTotpEnrollment(\n input: FinishTotpEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishTotpEnrollmentResult> {\n const req = parse(FinishTotpEnrollmentInputSchema, input);\n const res = await this.#client.finishTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(FinishTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Creates passkey registration options for a new factor and returns the enrollment challenge and expiry.\n */\n async beginPasskeyEnrollment(\n input: BeginPasskeyEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginPasskeyEnrollmentResult> {\n const req = parse(BeginPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.beginPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(BeginPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the passkey registration response, activates the factor, and returns one-time recovery codes plus MFA-elevated session details and access token.\n */\n async finishPasskeyEnrollment(\n input: FinishPasskeyEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishPasskeyEnrollmentResult> {\n const req = parse(FinishPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.finishPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(FinishPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Starts an MFA challenge for either session elevation or fresh step-up and returns allowed factor types plus passkey request options when available.\n */\n async beginChallenge(\n input: BeginMfaChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<BeginMfaChallengeResult> {\n const req = parse(BeginMfaChallengeInputSchema, input);\n const res = await this.#client.beginMFAChallenge(req, toConnectCallOptions(options));\n return parse(BeginMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with an authenticator code, returning either an elevated access token or a fresh step-up token depending on the challenge purpose.\n */\n async verifyTotpChallenge(\n input: VerifyTotpChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyTotpChallengeInputSchema, input);\n const res = await this.#client.verifyTOTPChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with a passkey authentication response, returning session assurance and the relevant token for the challenge purpose.\n */\n async finishPasskeyChallenge(\n input: FinishPasskeyChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(FinishPasskeyChallengeInputSchema, input);\n const res = await this.#client.finishPasskeyChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Consumes a one-time recovery code to complete session elevation or fresh step-up.\n */\n async verifyRecoveryCodeChallenge(\n input: VerifyRecoveryCodeChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyRecoveryCodeChallengeInputSchema, input);\n const res = await this.#client.verifyRecoveryCodeChallenge(\n req,\n toConnectCallOptions(options),\n );\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Removes an enrolled MFA factor by factor ID; backend policy may require fresh step-up for this protected action.\n */\n async deleteFactor(\n input: DeleteMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const { factorId } = parse(DeleteMfaFactorInputSchema, input);\n await this.#client.deleteMFAFactor({ factorId }, toConnectCallOptions(options));\n }\n\n /**\n * Updates an MFA factor label, where an empty label clears the display name.\n */\n async updateFactor(\n input: UpdateMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateMfaFactorResult> {\n const { factorId, label } = parse(UpdateMfaFactorInputSchema, input);\n const res = await this.#client.updateMFAFactor(\n { factorId, label },\n toConnectCallOptions(options),\n );\n return parse(UpdateMfaFactorResultSchema, res);\n }\n\n /**\n * Rotates recovery codes after step-up and returns the new one-time codes, which are only available in this response.\n */\n async regenerateRecoveryCodes(\n input: RegenerateRecoveryCodesInput = {},\n options?: PolyesterMutationOptions,\n ): Promise<RegenerateRecoveryCodesResult> {\n parse(RegenerateRecoveryCodesInputSchema, input);\n const res = await this.#client.regenerateRecoveryCodes({}, toConnectCallOptions(options));\n return parse(RegenerateRecoveryCodesResultSchema, res);\n }\n\n /**\n * Binds a fresh step-up proof to one protected request using a request ID, action type, and subject, returning a claim nonce and expiry.\n */\n async claimFreshStepUp(\n input: ClaimFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<ClaimFreshStepUpResult> {\n const req = parse(ClaimFreshStepUpInputSchema, input);\n const res = await this.#client.claimFreshStepUp(req, toConnectCallOptions(options));\n return parse(ClaimFreshStepUpResultSchema, res);\n }\n\n /**\n * Marks a claimed fresh step-up proof as used after the protected request succeeds, echoing the original request binding and claim nonce.\n */\n async consumeFreshStepUp(\n input: ConsumeFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ConsumeFreshStepUpInputSchema, input);\n await this.#client.consumeFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n\n /**\n * Releases a claimed fresh step-up proof when the protected request is abandoned or fails, preserving the original request binding and reason.\n */\n async releaseFreshStepUp(\n input: ReleaseFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ReleaseFreshStepUpInputSchema, input);\n await this.#client.releaseFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n}\n"],"mappings":"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"}
@@ -113,7 +113,7 @@ declare const FinishTotpEnrollmentInputSchema: v.StrictObjectSchema<{
113
113
  readonly code: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
114
114
  }, undefined>;
115
115
  type FinishTotpEnrollmentInput = v.InferInput<typeof FinishTotpEnrollmentInputSchema>;
116
- declare const FinishTotpEnrollmentResultSchema: v.ObjectSchema<{
116
+ declare const FinishTotpEnrollmentResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
117
117
  readonly factor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
118
118
  readonly factorId: v.StringSchema<undefined>;
119
119
  readonly factorType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof MFAFactorType, undefined>, v.TransformAction<MFAFactorType, "unspecified" | "totp" | "passkey" | "recoveryCode">]>;
@@ -146,7 +146,71 @@ declare const FinishTotpEnrollmentResultSchema: v.ObjectSchema<{
146
146
  lastUsedAtMs: number | undefined;
147
147
  }>]>, undefined>;
148
148
  readonly recoveryCodes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
149
- }, undefined>;
149
+ readonly session: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
150
+ readonly sessionId: v.StringSchema<undefined>;
151
+ readonly sessionLevel: v.SchemaWithPipe<readonly [v.EnumSchema<typeof SessionLevel, undefined>, v.TransformAction<SessionLevel, "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp">]>;
152
+ readonly authenticationMethods: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
153
+ readonly authTime: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
154
+ readonly seconds: v.BigintSchema<undefined>;
155
+ readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
156
+ }, undefined>, undefined>, v.TransformAction<{
157
+ seconds: bigint;
158
+ nanos: number;
159
+ } | undefined, number | undefined>]>;
160
+ }, undefined>, v.TransformAction<{
161
+ sessionId: string;
162
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
163
+ authenticationMethods: string[];
164
+ authTime?: number | undefined;
165
+ }, {
166
+ sessionId: string;
167
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
168
+ authenticationMethods: string[];
169
+ authTimeMs: number | undefined;
170
+ }>]>, undefined>;
171
+ readonly accessToken: v.OptionalSchema<v.StringSchema<undefined>, "">;
172
+ readonly accessTokenExpiresAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
173
+ readonly seconds: v.BigintSchema<undefined>;
174
+ readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
175
+ }, undefined>, undefined>, v.TransformAction<{
176
+ seconds: bigint;
177
+ nanos: number;
178
+ } | undefined, number | undefined>]>;
179
+ }, undefined>, v.TransformAction<{
180
+ factor?: {
181
+ factorId: string;
182
+ factorType: "unspecified" | "totp" | "passkey" | "recoveryCode";
183
+ label: string;
184
+ createdAtMs: number | undefined;
185
+ lastUsedAtMs: number | undefined;
186
+ } | undefined;
187
+ recoveryCodes: string[];
188
+ session?: {
189
+ sessionId: string;
190
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
191
+ authenticationMethods: string[];
192
+ authTimeMs: number | undefined;
193
+ } | undefined;
194
+ accessToken: string;
195
+ accessTokenExpiresAt?: number | undefined;
196
+ }, {
197
+ factor: {
198
+ factorId: string;
199
+ factorType: "unspecified" | "totp" | "passkey" | "recoveryCode";
200
+ label: string;
201
+ createdAtMs: number | undefined;
202
+ lastUsedAtMs: number | undefined;
203
+ } | undefined;
204
+ recoveryCodes: string[];
205
+ session: {
206
+ sessionId: string;
207
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
208
+ authenticationMethods: string[];
209
+ authTimeMs: number | undefined;
210
+ } | undefined;
211
+ accessToken: string | undefined;
212
+ accessTokenExpiresAtMs: number | undefined;
213
+ }>]>;
150
214
  type FinishTotpEnrollmentResult = v.InferOutput<typeof FinishTotpEnrollmentResultSchema>;
151
215
  declare const BeginPasskeyEnrollmentInputSchema: v.StrictObjectSchema<{
152
216
  readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
@@ -169,7 +233,7 @@ declare const FinishPasskeyEnrollmentInputSchema: v.StrictObjectSchema<{
169
233
  readonly credential: v.CustomSchema<import("@bufbuild/protobuf").JsonObject, undefined>;
170
234
  }, undefined>;
171
235
  type FinishPasskeyEnrollmentInput = v.InferInput<typeof FinishPasskeyEnrollmentInputSchema>;
172
- declare const FinishPasskeyEnrollmentResultSchema: v.ObjectSchema<{
236
+ declare const FinishPasskeyEnrollmentResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
173
237
  readonly factor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
174
238
  readonly factorId: v.StringSchema<undefined>;
175
239
  readonly factorType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof MFAFactorType, undefined>, v.TransformAction<MFAFactorType, "unspecified" | "totp" | "passkey" | "recoveryCode">]>;
@@ -202,7 +266,71 @@ declare const FinishPasskeyEnrollmentResultSchema: v.ObjectSchema<{
202
266
  lastUsedAtMs: number | undefined;
203
267
  }>]>, undefined>;
204
268
  readonly recoveryCodes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
205
- }, undefined>;
269
+ readonly session: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
270
+ readonly sessionId: v.StringSchema<undefined>;
271
+ readonly sessionLevel: v.SchemaWithPipe<readonly [v.EnumSchema<typeof SessionLevel, undefined>, v.TransformAction<SessionLevel, "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp">]>;
272
+ readonly authenticationMethods: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
273
+ readonly authTime: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
274
+ readonly seconds: v.BigintSchema<undefined>;
275
+ readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
276
+ }, undefined>, undefined>, v.TransformAction<{
277
+ seconds: bigint;
278
+ nanos: number;
279
+ } | undefined, number | undefined>]>;
280
+ }, undefined>, v.TransformAction<{
281
+ sessionId: string;
282
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
283
+ authenticationMethods: string[];
284
+ authTime?: number | undefined;
285
+ }, {
286
+ sessionId: string;
287
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
288
+ authenticationMethods: string[];
289
+ authTimeMs: number | undefined;
290
+ }>]>, undefined>;
291
+ readonly accessToken: v.OptionalSchema<v.StringSchema<undefined>, "">;
292
+ readonly accessTokenExpiresAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
293
+ readonly seconds: v.BigintSchema<undefined>;
294
+ readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
295
+ }, undefined>, undefined>, v.TransformAction<{
296
+ seconds: bigint;
297
+ nanos: number;
298
+ } | undefined, number | undefined>]>;
299
+ }, undefined>, v.TransformAction<{
300
+ factor?: {
301
+ factorId: string;
302
+ factorType: "unspecified" | "totp" | "passkey" | "recoveryCode";
303
+ label: string;
304
+ createdAtMs: number | undefined;
305
+ lastUsedAtMs: number | undefined;
306
+ } | undefined;
307
+ recoveryCodes: string[];
308
+ session?: {
309
+ sessionId: string;
310
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
311
+ authenticationMethods: string[];
312
+ authTimeMs: number | undefined;
313
+ } | undefined;
314
+ accessToken: string;
315
+ accessTokenExpiresAt?: number | undefined;
316
+ }, {
317
+ factor: {
318
+ factorId: string;
319
+ factorType: "unspecified" | "totp" | "passkey" | "recoveryCode";
320
+ label: string;
321
+ createdAtMs: number | undefined;
322
+ lastUsedAtMs: number | undefined;
323
+ } | undefined;
324
+ recoveryCodes: string[];
325
+ session: {
326
+ sessionId: string;
327
+ sessionLevel: "unspecified" | "primaryAuthenticated" | "mfaElevated" | "freshStepUp";
328
+ authenticationMethods: string[];
329
+ authTimeMs: number | undefined;
330
+ } | undefined;
331
+ accessToken: string | undefined;
332
+ accessTokenExpiresAtMs: number | undefined;
333
+ }>]>;
206
334
  type FinishPasskeyEnrollmentResult = v.InferOutput<typeof FinishPasskeyEnrollmentResultSchema>;
207
335
  declare const BeginMfaChallengeInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
208
336
  readonly purpose: v.PicklistSchema<readonly ["sessionElevation", "freshStepUp"], undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"mfa.schemas.d.ts","names":[],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"mappings":";;;cAWa,sBAAoB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;KAyBrB,iBAAiB,EAAE,mBAAmB;cAErC,iBAAe,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BhB,YAAY,EAAE,mBAAmB;cAEhC,8BAA4B,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAK7B,uBAAuB,EAAE,mBAAmB;cAE3C,gCAA8B,EAAA;;;KAI/B,2BAA2B,EAAE,kBAAkB;cAE9C,iCAA+B,EAAA;;;;;;;;;;;;KAOhC,4BAA4B,EAAE,mBAAmB;cAEhD,iCAA+B,EAAA;;;;KAKhC,4BAA4B,EAAE,kBAAkB;cAE/C,kCAAgC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKjC,6BAA6B,EAAE,mBAAmB;cAEjD,mCAAiC,EAAA;;;KAIlC,8BAA8B,EAAE,kBAAkB;cAEjD,oCAAkC,EAAA;;;;;;;;;;;KAMnC,+BAA+B,EAAE,mBAAmB;cAEnD,oCAAkC,EAAA;;;;KAKnC,+BAA+B,EAAE,kBAAkB;cAElD,qCAAmC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKpC,gCAAgC,EAAE,mBACnC;cAGE,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;KAS7B,yBAAyB,EAAE,kBAAkB;cAE5C,+BAA6B,EAAA;;;;;;;;;;;;KAmB9B,0BAA0B,EAAE,mBAAmB;cAE9C,gCAA8B,EAAA;;;;KAK/B,2BAA2B,EAAE,kBAAkB;cAE9C,mCAAiC,EAAA;;;;KAKlC,8BAA8B,EAAE,kBAAkB;cAEjD,wCAAsC,EAAA;;;;KAKvC,mCAAmC,EAAE,kBACtC;cAGE,kCAAgC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiBjC,6BAA6B,EAAE,mBAAmB;cAEjD,4BAA0B,EAAA;;;KAI3B,uBAAuB,EAAE,kBAAkB;cAE1C,4BAA0B,EAAA;;;;KAK3B,uBAAuB,EAAE,kBAAkB;cAE1C,6BAA2B,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAI5B,wBAAwB,EAAE,mBAAmB;cAE5C,oCAAkC,EAAA;KAEnC,+BAA+B,EAAE,kBAAkB;cAElD,qCAAmC,EAAA;;;KAIpC,gCAAgC,EAAE,mBACnC;cAGE,6BAA2B,EAAA;;;;;KAM5B,wBAAwB,EAAE,kBAAkB;cAE3C,8BAA4B,EAAA;;;;;;;;;;;KAM7B,yBAAyB,EAAE,mBAAmB;cAE7C,+BAA6B,EAAA;;;;;;;KAQ9B,0BAA0B,EAAE,kBAAkB;cAE7C,+BAA6B,EAAA;;;;;;;;KAS9B,0BAA0B,EAAE,kBAAkB"}
1
+ {"version":3,"file":"mfa.schemas.d.ts","names":[],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"mappings":";;;cAWa,sBAAoB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;KAyBrB,iBAAiB,EAAE,mBAAmB;cAErC,iBAAe,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BhB,YAAY,EAAE,mBAAmB;cAEhC,8BAA4B,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAK7B,uBAAuB,EAAE,mBAAmB;cAE3C,gCAA8B,EAAA;;;KAI/B,2BAA2B,EAAE,kBAAkB;cAE9C,iCAA+B,EAAA;;;;;;;;;;;;KAOhC,4BAA4B,EAAE,mBAAmB;cAEhD,iCAA+B,EAAA;;;;KAKhC,4BAA4B,EAAE,kBAAkB;cAE/C,kCAAgC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiBjC,6BAA6B,EAAE,mBAAmB;cAEjD,mCAAiC,EAAA;;;KAIlC,8BAA8B,EAAE,kBAAkB;cAEjD,oCAAkC,EAAA;;;;;;;;;;;KAMnC,+BAA+B,EAAE,mBAAmB;cAEnD,oCAAkC,EAAA;;;;KAKnC,+BAA+B,EAAE,kBAAkB;cAElD,qCAAmC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEpC,gCAAgC,EAAE,mBACnC;cAGE,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;KAS7B,yBAAyB,EAAE,kBAAkB;cAE5C,+BAA6B,EAAA;;;;;;;;;;;;KAmB9B,0BAA0B,EAAE,mBAAmB;cAE9C,gCAA8B,EAAA;;;;KAK/B,2BAA2B,EAAE,kBAAkB;cAE9C,mCAAiC,EAAA;;;;KAKlC,8BAA8B,EAAE,kBAAkB;cAEjD,wCAAsC,EAAA;;;;KAKvC,mCAAmC,EAAE,kBACtC;cAGE,kCAAgC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiBjC,6BAA6B,EAAE,mBAAmB;cAEjD,4BAA0B,EAAA;;;KAI3B,uBAAuB,EAAE,kBAAkB;cAE1C,4BAA0B,EAAA;;;;KAK3B,uBAAuB,EAAE,kBAAkB;cAE1C,6BAA2B,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAI5B,wBAAwB,EAAE,mBAAmB;cAE5C,oCAAkC,EAAA;KAEnC,+BAA+B,EAAE,kBAAkB;cAElD,qCAAmC,EAAA;;;KAIpC,gCAAgC,EAAE,mBACnC;cAGE,6BAA2B,EAAA;;;;;KAM5B,wBAAwB,EAAE,kBAAkB;cAE3C,8BAA4B,EAAA;;;;;;;;;;;KAM7B,yBAAyB,EAAE,mBAAmB;cAE7C,+BAA6B,EAAA;;;;;;;KAQ9B,0BAA0B,EAAE,kBAAkB;cAE7C,+BAA6B,EAAA;;;;;;;;KAS9B,0BAA0B,EAAE,kBAAkB"}
@@ -43,10 +43,19 @@ const FinishTotpEnrollmentInputSchema = v.strictObject({
43
43
  enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),
44
44
  code: v.pipe(v.string(), v.trim(), v.minLength(1))
45
45
  });
46
- const FinishTotpEnrollmentResultSchema = v.object({
46
+ const FinishTotpEnrollmentResultSchema = v.pipe(v.object({
47
47
  factor: v.optional(MfaFactorSchema),
48
- recoveryCodes: v.optional(v.array(v.string()), [])
49
- });
48
+ recoveryCodes: v.optional(v.array(v.string()), []),
49
+ session: v.optional(MfaSessionInfoSchema),
50
+ accessToken: v.optional(v.string(), ""),
51
+ accessTokenExpiresAt: OptionalTimestampMsSchema
52
+ }), v.transform(({ factor, recoveryCodes, session, accessToken, accessTokenExpiresAt }) => ({
53
+ factor,
54
+ recoveryCodes,
55
+ session,
56
+ accessToken: accessToken.trim() || void 0,
57
+ accessTokenExpiresAtMs: accessTokenExpiresAt
58
+ })));
50
59
  const BeginPasskeyEnrollmentInputSchema = v.strictObject({ label: v.pipe(v.string(), v.trim(), v.minLength(1)) });
51
60
  const BeginPasskeyEnrollmentResultSchema = v.object({
52
61
  enrollmentId: v.string(),
@@ -57,10 +66,7 @@ const FinishPasskeyEnrollmentInputSchema = v.strictObject({
57
66
  enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),
58
67
  credential: JsonObjectSchema
59
68
  });
60
- const FinishPasskeyEnrollmentResultSchema = v.object({
61
- factor: v.optional(MfaFactorSchema),
62
- recoveryCodes: v.optional(v.array(v.string()), [])
63
- });
69
+ const FinishPasskeyEnrollmentResultSchema = FinishTotpEnrollmentResultSchema;
64
70
  const BeginMfaChallengeInputSchema = v.pipe(v.strictObject({ purpose: v.picklist(MFA_CHALLENGE_PURPOSE_VALUES) }), v.transform((data) => ({ purpose: MfaChallengePurposeCodec.inputToProto[data.purpose] })));
65
71
  const BeginMfaChallengeResultSchema = v.object({
66
72
  challengeId: v.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"mfa.schemas.js","names":["Proto.SessionLevel","Proto.MFAFactorType"],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { JsonObjectSchema, OptionalTimestampMsSchema } from \"../../shared/schemas.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n MfaChallengePurposeCodec,\n MfaFactorTypeCodec,\n MFA_CHALLENGE_PURPOSE_VALUES,\n SessionLevelCodec,\n} from \"./mfa.codecs.js\";\n\nexport const MfaSessionInfoSchema = v.pipe(\n v.object({\n sessionId: v.string(),\n sessionLevel: v.pipe(\n v.enum(Proto.SessionLevel),\n v.transform((v) =>\n requiredEnumLabel(\n SessionLevelCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaSessionInfoSchema\",\n \"sessionLevel\",\n ),\n ),\n ),\n authenticationMethods: v.optional(v.array(v.string()), []),\n authTime: OptionalTimestampMsSchema,\n }),\n v.transform(({ sessionId, sessionLevel, authenticationMethods, authTime }) => ({\n sessionId,\n sessionLevel,\n authenticationMethods,\n authTimeMs: authTime,\n })),\n);\n\nexport type MfaSessionInfo = v.InferOutput<typeof MfaSessionInfoSchema>;\n\nexport const MfaFactorSchema = v.pipe(\n v.object({\n factorId: v.string(),\n factorType: v.pipe(\n v.enum(Proto.MFAFactorType),\n v.transform((v) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaFactorSchema\",\n \"factorType\",\n ),\n ),\n ),\n label: v.string(),\n createdAt: OptionalTimestampMsSchema,\n lastUsedAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ factorId, factorType, label, createdAt, lastUsedAt }) => ({\n factorId,\n factorType,\n label,\n createdAtMs: createdAt,\n lastUsedAtMs: lastUsedAt,\n })),\n);\n\nexport type MfaFactor = v.InferOutput<typeof MfaFactorSchema>;\n\nexport const ListMfaFactorsResponseSchema = v.object({\n factors: v.optional(v.array(MfaFactorSchema), []),\n hasRecoveryCodes: v.optional(v.boolean(), false),\n});\n\nexport type ListMfaFactorsResult = v.InferOutput<typeof ListMfaFactorsResponseSchema>;\n\nexport const BeginTotpEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginTotpEnrollmentInput = v.InferInput<typeof BeginTotpEnrollmentInputSchema>;\n\nexport const BeginTotpEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n secret: v.string(),\n otpauthUri: v.string(),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginTotpEnrollmentResult = v.InferOutput<typeof BeginTotpEnrollmentResultSchema>;\n\nexport const FinishTotpEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type FinishTotpEnrollmentInput = v.InferInput<typeof FinishTotpEnrollmentInputSchema>;\n\nexport const FinishTotpEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishTotpEnrollmentResult = v.InferOutput<typeof FinishTotpEnrollmentResultSchema>;\n\nexport const BeginPasskeyEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginPasskeyEnrollmentInput = v.InferInput<typeof BeginPasskeyEnrollmentInputSchema>;\n\nexport const BeginPasskeyEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginPasskeyEnrollmentResult = v.InferOutput<typeof BeginPasskeyEnrollmentResultSchema>;\n\nexport const FinishPasskeyEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyEnrollmentInput = v.InferInput<typeof FinishPasskeyEnrollmentInputSchema>;\n\nexport const FinishPasskeyEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishPasskeyEnrollmentResult = v.InferOutput<\n typeof FinishPasskeyEnrollmentResultSchema\n>;\n\nexport const BeginMfaChallengeInputSchema = v.pipe(\n v.strictObject({\n purpose: v.picklist(MFA_CHALLENGE_PURPOSE_VALUES),\n }),\n v.transform((data) => ({\n purpose: MfaChallengePurposeCodec.inputToProto[data.purpose],\n })),\n);\n\nexport type BeginMfaChallengeInput = v.InferInput<typeof BeginMfaChallengeInputSchema>;\n\nexport const BeginMfaChallengeResultSchema = v.object({\n challengeId: v.string(),\n allowedFactorTypes: v.pipe(\n v.array(v.enum(Proto.MFAFactorType)),\n v.transform((arr) =>\n arr.map((t) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n t,\n \"PolyesterClient.BeginMfaChallengeResultSchema\",\n \"allowed factor type\",\n ),\n ),\n ),\n ),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginMfaChallengeResult = v.InferOutput<typeof BeginMfaChallengeResultSchema>;\n\nexport const VerifyTotpChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyTotpChallengeInput = v.InferInput<typeof VerifyTotpChallengeInputSchema>;\n\nexport const FinishPasskeyChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyChallengeInput = v.InferInput<typeof FinishPasskeyChallengeInputSchema>;\n\nexport const VerifyRecoveryCodeChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n recoveryCode: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyRecoveryCodeChallengeInput = v.InferInput<\n typeof VerifyRecoveryCodeChallengeInputSchema\n>;\n\nexport const CompleteMfaChallengeResultSchema = v.pipe(\n v.object({\n session: v.optional(MfaSessionInfoSchema),\n accessToken: v.string(),\n accessTokenExpiresAt: OptionalTimestampMsSchema,\n stepUpToken: v.string(),\n stepUpExpiresAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ session, accessToken, accessTokenExpiresAt, stepUpToken, stepUpExpiresAt }) => ({\n session,\n accessToken: accessToken.trim() || undefined,\n accessTokenExpiresAtMs: accessTokenExpiresAt,\n stepUpToken: stepUpToken.trim() || undefined,\n stepUpExpiresAtMs: stepUpExpiresAt,\n })),\n);\n\nexport type CompleteMfaChallengeResult = v.InferOutput<typeof CompleteMfaChallengeResultSchema>;\n\nexport const DeleteMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type DeleteMfaFactorInput = v.InferInput<typeof DeleteMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n label: v.pipe(v.string(), v.maxLength(128)),\n});\n\nexport type UpdateMfaFactorInput = v.InferInput<typeof UpdateMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n});\n\nexport type UpdateMfaFactorResult = v.InferOutput<typeof UpdateMfaFactorResultSchema>;\n\nexport const RegenerateRecoveryCodesInputSchema = v.strictObject({});\n\nexport type RegenerateRecoveryCodesInput = v.InferInput<typeof RegenerateRecoveryCodesInputSchema>;\n\nexport const RegenerateRecoveryCodesResultSchema = v.object({\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type RegenerateRecoveryCodesResult = v.InferOutput<\n typeof RegenerateRecoveryCodesResultSchema\n>;\n\nexport const ClaimFreshStepUpInputSchema = v.strictObject({\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ClaimFreshStepUpInput = v.InferInput<typeof ClaimFreshStepUpInputSchema>;\n\nexport const ClaimFreshStepUpResultSchema = v.object({\n stepUpId: v.string(),\n claimNonce: v.string(),\n claimExpiresAt: OptionalTimestampMsSchema,\n});\n\nexport type ClaimFreshStepUpResult = v.InferOutput<typeof ClaimFreshStepUpResultSchema>;\n\nexport const ConsumeFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ConsumeFreshStepUpInput = v.InferInput<typeof ConsumeFreshStepUpInputSchema>;\n\nexport const ReleaseFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n reason: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ReleaseFreshStepUpInput = v.InferInput<typeof ReleaseFreshStepUpInputSchema>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"mfa.schemas.js","names":["Proto.SessionLevel","Proto.MFAFactorType"],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { JsonObjectSchema, OptionalTimestampMsSchema } from \"../../shared/schemas.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n MfaChallengePurposeCodec,\n MfaFactorTypeCodec,\n MFA_CHALLENGE_PURPOSE_VALUES,\n SessionLevelCodec,\n} from \"./mfa.codecs.js\";\n\nexport const MfaSessionInfoSchema = v.pipe(\n v.object({\n sessionId: v.string(),\n sessionLevel: v.pipe(\n v.enum(Proto.SessionLevel),\n v.transform((v) =>\n requiredEnumLabel(\n SessionLevelCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaSessionInfoSchema\",\n \"sessionLevel\",\n ),\n ),\n ),\n authenticationMethods: v.optional(v.array(v.string()), []),\n authTime: OptionalTimestampMsSchema,\n }),\n v.transform(({ sessionId, sessionLevel, authenticationMethods, authTime }) => ({\n sessionId,\n sessionLevel,\n authenticationMethods,\n authTimeMs: authTime,\n })),\n);\n\nexport type MfaSessionInfo = v.InferOutput<typeof MfaSessionInfoSchema>;\n\nexport const MfaFactorSchema = v.pipe(\n v.object({\n factorId: v.string(),\n factorType: v.pipe(\n v.enum(Proto.MFAFactorType),\n v.transform((v) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaFactorSchema\",\n \"factorType\",\n ),\n ),\n ),\n label: v.string(),\n createdAt: OptionalTimestampMsSchema,\n lastUsedAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ factorId, factorType, label, createdAt, lastUsedAt }) => ({\n factorId,\n factorType,\n label,\n createdAtMs: createdAt,\n lastUsedAtMs: lastUsedAt,\n })),\n);\n\nexport type MfaFactor = v.InferOutput<typeof MfaFactorSchema>;\n\nexport const ListMfaFactorsResponseSchema = v.object({\n factors: v.optional(v.array(MfaFactorSchema), []),\n hasRecoveryCodes: v.optional(v.boolean(), false),\n});\n\nexport type ListMfaFactorsResult = v.InferOutput<typeof ListMfaFactorsResponseSchema>;\n\nexport const BeginTotpEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginTotpEnrollmentInput = v.InferInput<typeof BeginTotpEnrollmentInputSchema>;\n\nexport const BeginTotpEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n secret: v.string(),\n otpauthUri: v.string(),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginTotpEnrollmentResult = v.InferOutput<typeof BeginTotpEnrollmentResultSchema>;\n\nexport const FinishTotpEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type FinishTotpEnrollmentInput = v.InferInput<typeof FinishTotpEnrollmentInputSchema>;\n\nexport const FinishTotpEnrollmentResultSchema = v.pipe(\n v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n session: v.optional(MfaSessionInfoSchema),\n accessToken: v.optional(v.string(), \"\"),\n accessTokenExpiresAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ factor, recoveryCodes, session, accessToken, accessTokenExpiresAt }) => ({\n factor,\n recoveryCodes,\n session,\n accessToken: accessToken.trim() || undefined,\n accessTokenExpiresAtMs: accessTokenExpiresAt,\n })),\n);\n\nexport type FinishTotpEnrollmentResult = v.InferOutput<typeof FinishTotpEnrollmentResultSchema>;\n\nexport const BeginPasskeyEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginPasskeyEnrollmentInput = v.InferInput<typeof BeginPasskeyEnrollmentInputSchema>;\n\nexport const BeginPasskeyEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginPasskeyEnrollmentResult = v.InferOutput<typeof BeginPasskeyEnrollmentResultSchema>;\n\nexport const FinishPasskeyEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyEnrollmentInput = v.InferInput<typeof FinishPasskeyEnrollmentInputSchema>;\n\nexport const FinishPasskeyEnrollmentResultSchema = FinishTotpEnrollmentResultSchema;\n\nexport type FinishPasskeyEnrollmentResult = v.InferOutput<\n typeof FinishPasskeyEnrollmentResultSchema\n>;\n\nexport const BeginMfaChallengeInputSchema = v.pipe(\n v.strictObject({\n purpose: v.picklist(MFA_CHALLENGE_PURPOSE_VALUES),\n }),\n v.transform((data) => ({\n purpose: MfaChallengePurposeCodec.inputToProto[data.purpose],\n })),\n);\n\nexport type BeginMfaChallengeInput = v.InferInput<typeof BeginMfaChallengeInputSchema>;\n\nexport const BeginMfaChallengeResultSchema = v.object({\n challengeId: v.string(),\n allowedFactorTypes: v.pipe(\n v.array(v.enum(Proto.MFAFactorType)),\n v.transform((arr) =>\n arr.map((t) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n t,\n \"PolyesterClient.BeginMfaChallengeResultSchema\",\n \"allowed factor type\",\n ),\n ),\n ),\n ),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginMfaChallengeResult = v.InferOutput<typeof BeginMfaChallengeResultSchema>;\n\nexport const VerifyTotpChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyTotpChallengeInput = v.InferInput<typeof VerifyTotpChallengeInputSchema>;\n\nexport const FinishPasskeyChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyChallengeInput = v.InferInput<typeof FinishPasskeyChallengeInputSchema>;\n\nexport const VerifyRecoveryCodeChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n recoveryCode: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyRecoveryCodeChallengeInput = v.InferInput<\n typeof VerifyRecoveryCodeChallengeInputSchema\n>;\n\nexport const CompleteMfaChallengeResultSchema = v.pipe(\n v.object({\n session: v.optional(MfaSessionInfoSchema),\n accessToken: v.string(),\n accessTokenExpiresAt: OptionalTimestampMsSchema,\n stepUpToken: v.string(),\n stepUpExpiresAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ session, accessToken, accessTokenExpiresAt, stepUpToken, stepUpExpiresAt }) => ({\n session,\n accessToken: accessToken.trim() || undefined,\n accessTokenExpiresAtMs: accessTokenExpiresAt,\n stepUpToken: stepUpToken.trim() || undefined,\n stepUpExpiresAtMs: stepUpExpiresAt,\n })),\n);\n\nexport type CompleteMfaChallengeResult = v.InferOutput<typeof CompleteMfaChallengeResultSchema>;\n\nexport const DeleteMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type DeleteMfaFactorInput = v.InferInput<typeof DeleteMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n label: v.pipe(v.string(), v.maxLength(128)),\n});\n\nexport type UpdateMfaFactorInput = v.InferInput<typeof UpdateMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n});\n\nexport type UpdateMfaFactorResult = v.InferOutput<typeof UpdateMfaFactorResultSchema>;\n\nexport const RegenerateRecoveryCodesInputSchema = v.strictObject({});\n\nexport type RegenerateRecoveryCodesInput = v.InferInput<typeof RegenerateRecoveryCodesInputSchema>;\n\nexport const RegenerateRecoveryCodesResultSchema = v.object({\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type RegenerateRecoveryCodesResult = v.InferOutput<\n typeof RegenerateRecoveryCodesResultSchema\n>;\n\nexport const ClaimFreshStepUpInputSchema = v.strictObject({\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ClaimFreshStepUpInput = v.InferInput<typeof ClaimFreshStepUpInputSchema>;\n\nexport const ClaimFreshStepUpResultSchema = v.object({\n stepUpId: v.string(),\n claimNonce: v.string(),\n claimExpiresAt: OptionalTimestampMsSchema,\n});\n\nexport type ClaimFreshStepUpResult = v.InferOutput<typeof ClaimFreshStepUpResultSchema>;\n\nexport const ConsumeFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ConsumeFreshStepUpInput = v.InferInput<typeof ConsumeFreshStepUpInputSchema>;\n\nexport const ReleaseFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n reason: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ReleaseFreshStepUpInput = v.InferInput<typeof ReleaseFreshStepUpInputSchema>;\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
+ import { PublicApiTransports } from "../../shared/transports.js";
1
2
  import { PolyesterRequestOptions } from "../../shared/request-options.js";
2
3
  import { PolyesterRealtime } from "../../realtime/types.js";
3
4
  import { BaseSubscribeInput } from "../../shared/types.js";
4
5
  import { SdkScales } from "../../shared/decimal-surface.js";
5
6
  import { GetOrderbookInputSchema, OrderbookData } from "./orderbook.schemas.js";
6
- import { Transport } from "@connectrpc/connect";
7
7
  import * as v from "valibot";
8
8
  //#region src/services/orderbook/orderbook.d.ts
9
9
  interface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {
@@ -22,7 +22,7 @@ interface CreateOrderbookSubscriptionInput extends OrderbookStreamHandlers, Pick
22
22
  */
23
23
  declare class OrderbookService {
24
24
  #private;
25
- constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales);
25
+ constructor(transports: PublicApiTransports, realtime: PolyesterRealtime, scales: SdkScales);
26
26
  /**
27
27
  * Fetches a spot order book depth snapshot for a symbol ID and requested depth, returning best bids and asks with the backend book sequence.
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"orderbook.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.ts"],"mappings":";;;;;;;;UA2BU,gCAAgC,mBAAmB;EACzD;EACA;EACA;;UAGa,gCAAgC,mBAAmB;UAEnD;EACb;EACA,YAAY;;UAGC,yCAET,yBACA,KAAK;;;;cAOA;;EAKG,YAAA,WAAW,WAAW,UAAU,mBAAmB,QAAQ;;;;EASjE,IACF,OAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX,QAAQ;;;;EAmBX,UAAU,OAAO;;;;;;;;EAWjB,mBAAmB,OAAO,mCAAmC"}
1
+ {"version":3,"file":"orderbook.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.ts"],"mappings":";;;;;;;;UA4BU,gCAAgC,mBAAmB;EACzD;EACA;EACA;;UAGa,gCAAgC,mBAAmB;UAEnD;EACb;EACA,YAAY;;UAGC,yCAET,yBACA,KAAK;;;;cAOA;;EAKG,YAAA,YAAY,qBAAqB,UAAU,mBAAmB,QAAQ;;;;EAS5E,IACF,OAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX,QAAQ;;;;EAmBX,UAAU,OAAO;;;;;;;;EAWjB,mBAAmB,OAAO,mCAAmC"}
@@ -17,8 +17,8 @@ var OrderbookService = class {
17
17
  #client;
18
18
  #realtime;
19
19
  #scales;
20
- constructor(transport, realtime, scales) {
21
- this.#client = createClient(OrderbookService$1, transport);
20
+ constructor(transports, realtime, scales) {
21
+ this.#client = createClient(OrderbookService$1, transports.publicApi);
22
22
  this.#realtime = realtime;
23
23
  this.#scales = scales;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orderbook.js","names":["#client","Proto.OrderbookService","#realtime","#scales","Proto.GetOrderBookResponseSchema","Proto.OrderBookDeltaSchema"],"sources":["../../../src/services/orderbook/orderbook.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/orderbook/v1/orderbook_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport {\n snapshotThenStream,\n type SnapshotThenStreamSubscription,\n} from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { decimalInputToScaled, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n formatOrderbookLevel,\n GetOrderbookInputSchema,\n createOrderbookDataSchema,\n type OrderbookLevel,\n type OrderbookData,\n} from \"./orderbook.schemas.js\";\nimport { orderbookWsChannelDepth } from \"./orderbook.codecs.js\";\nimport { isResourceNotFoundError } from \"../../utils/errors.js\";\nimport type * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\n\ninterface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {\n symbolId: number;\n depth?: number;\n bucket?: string | null;\n}\n\nexport interface OrderbookStreamHandlers extends BaseSubscribeInput<OrderbookData> {}\n\nexport interface OrderbookSubscription {\n unsubscribe: () => void;\n setBucket: (bucket: string | null | undefined) => void;\n}\n\nexport interface CreateOrderbookSubscriptionInput\n extends\n OrderbookStreamHandlers,\n Pick<SubscribeOrderbookInput, \"symbolId\" | \"depth\" | \"bucket\"> {}\n\ntype BookSide = Map<bigint, bigint>;\n\n/**\n * Reads spot order book snapshots and maintains realtime local order book state from public delta channels.\n */\nexport class OrderbookService {\n #client: Client<typeof Proto.OrderbookService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.OrderbookService, transport);\n this.#realtime = realtime;\n this.#scales = scales;\n }\n\n /**\n * Fetches a spot order book depth snapshot for a symbol ID and requested depth, returning best bids and asks with the backend book sequence.\n */\n async get(\n input: v.InferInput<typeof GetOrderbookInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookData> {\n const validated = parse(GetOrderbookInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.getOrderBook(\n { symbolId: validated.symbolId, depth: validated.protoDepth },\n toConnectCallOptions(options),\n );\n return parse(createOrderbookDataSchema(this.#scales, validated.symbolId), {\n symbolId: res.symbolId,\n depth: validated.depth,\n bookSeq: res.bookSeq,\n bids: res.bids,\n asks: res.asks,\n });\n }\n\n /**\n * Subscribes to the managed order book stream for a symbol ID and forwards reconstructed snapshots to onEvent. This is a convenience wrapper around createSubscription().unsubscribe.\n */\n subscribe(input: SubscribeOrderbookInput): () => void {\n return this.createSubscription(input).unsubscribe;\n }\n\n /**\n * Creates a stateful order book subscription that first fetches a snapshot, buffers proto deltas from public:spot:orderbook:deltas:depth:{depth}:{symbolId}:proto, applies sequence-checked updates, and refetches on observed sequence gaps or reconnects. The returned handle can unsubscribe or change local price bucket aggregation without reconnecting.\n *\n * `depth` is clamped to [1, 500] and rides the smallest published channel depth that covers it (see ORDERBOOK_WS_DEPTHS); levels are sliced back to the requested depth locally.\n *\n * Refetching is driven by observed sequence gaps and reconnect events only. A feed that stays subscribed but stops publishing is indistinguishable from a quiet market, so it does not trigger onError or a refetch. Callers that must detect a stalled book need their own idle watchdog plus a REST refetch.\n */\n createSubscription(input: CreateOrderbookSubscriptionInput): OrderbookSubscription {\n const { symbolId } = parse(GetOrderbookInputSchema, {\n symbolId: input.symbolId,\n depth: input.depth,\n });\n const requestedDepth = Math.min(500, Math.max(1, Math.trunc(input.depth ?? 50)));\n const channelDepth = orderbookWsChannelDepth(requestedDepth);\n const channel = `public:spot:orderbook:deltas:depth:${channelDepth}:${symbolId}:proto`;\n\n const client = this.#client;\n const scales = this.#scales;\n let bidsMap: BookSide = new Map();\n let asksMap: BookSide = new Map();\n let currentBookSeq = 0n;\n let bucketTicks: bigint | null = null;\n let stream: SnapshotThenStreamSubscription | undefined;\n\n function levelsToMap(levels: Proto.PriceLevel[] | undefined): BookSide {\n const map: BookSide = new Map();\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) continue;\n map.set(l.priceTicks, l.qtyScaled);\n }\n return map;\n }\n\n function applySideDelta(map: BookSide, levels: Proto.PriceLevel[] | undefined): void {\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) map.delete(l.priceTicks);\n else map.set(l.priceTicks, l.qtyScaled);\n }\n }\n\n function sideToUI(map: BookSide, side: \"bids\" | \"asks\", limit: number): OrderbookLevel[] {\n const entries = Array.from(map.entries());\n entries.sort(([pa], [pb]) => {\n if (pa === pb) return 0;\n return side === \"bids\" ? (pa > pb ? -1 : 1) : pa < pb ? -1 : 1;\n });\n return entries\n .slice(0, limit)\n .map(([priceTicks, qtyScaled]) =>\n formatOrderbookLevel({ priceTicks, qtyScaled }, scales, symbolId),\n );\n }\n\n function sideToUIBucketed(\n map: BookSide,\n side: \"bids\" | \"asks\",\n limit: number,\n bucket: bigint | null,\n ): OrderbookLevel[] {\n if (!bucket || bucket <= 0n) return sideToUI(map, side, limit);\n\n const agg: BookSide = new Map();\n for (const [priceTicks, qtyScaled] of map.entries()) {\n if (qtyScaled <= 0n) continue;\n const bucketFloor = (priceTicks / bucket) * bucket;\n const bucketPrice =\n side === \"asks\" && bucketFloor !== priceTicks\n ? bucketFloor + bucket\n : bucketFloor;\n agg.set(bucketPrice, (agg.get(bucketPrice) ?? 0n) + qtyScaled);\n }\n return sideToUI(agg, side, limit);\n }\n\n function emit(): void {\n try {\n input.onEvent({\n symbolId,\n depth: requestedDepth,\n bookSeq: currentBookSeq.toString(),\n bids: sideToUIBucketed(bidsMap, \"bids\", requestedDepth, bucketTicks),\n asks: sideToUIBucketed(asksMap, \"asks\", requestedDepth, bucketTicks),\n });\n } catch (error) {\n input.onError?.(publicationHandlerErrorContext(channel, error));\n }\n }\n\n function setBucket(bucket: string | null | undefined): void {\n if (!bucket) {\n bucketTicks = null;\n } else {\n try {\n bucketTicks = decimalInputToScaled(\"bucket\", bucket, scales.price());\n } catch {\n bucketTicks = null;\n }\n }\n if (stream?.isReady()) emit();\n }\n\n async function inputServiceFetch(): Promise<Proto.GetOrderBookResponse> {\n await scales.ready();\n const validated = parse(GetOrderbookInputSchema, {\n symbolId,\n depth: channelDepth,\n });\n try {\n return await client.getOrderBook({\n symbolId: validated.symbolId,\n depth: validated.protoDepth,\n });\n } catch (error: unknown) {\n if (!isResourceNotFoundError(error)) throw error;\n\n return create(Proto.GetOrderBookResponseSchema, {\n symbolId,\n bookSeq: 0n,\n bids: [],\n asks: [],\n });\n }\n }\n\n function handleDelta(delta: Proto.OrderBookDelta): boolean {\n if (delta.bookSeqEnd <= currentBookSeq) return true;\n\n if (delta.reset) {\n bidsMap.clear();\n asksMap.clear();\n currentBookSeq = 0n;\n }\n\n if (currentBookSeq !== 0n && delta.bookSeqStart > currentBookSeq + 1n) {\n stream?.refreshSnapshot();\n return false;\n }\n\n applySideDelta(bidsMap, delta.bids);\n applySideDelta(asksMap, delta.asks);\n\n currentBookSeq = delta.bookSeqEnd > currentBookSeq ? delta.bookSeqEnd : currentBookSeq;\n emit();\n return true;\n }\n\n setBucket(input.bucket);\n stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.OrderBookDeltaSchema,\n maxBufferedPublications: 200,\n snapshotErrorLog: \"Failed to fetch orderbook\",\n snapshotRetry: { maxAttempts: 3, delayMs: 1_000 },\n fetchSnapshot: inputServiceFetch,\n readPublication: (delta) => [delta],\n applySnapshot: (snapshot, bufferedDeltas) => {\n bidsMap = levelsToMap(snapshot.bids);\n asksMap = levelsToMap(snapshot.asks);\n currentBookSeq = snapshot.bookSeq;\n emit();\n for (const delta of bufferedDeltas) {\n if (stream?.isDisposed()) return;\n if (!handleDelta(delta)) return;\n }\n },\n applyLivePublications: (deltas) => {\n for (const delta of deltas) {\n if (stream?.isDisposed()) return;\n if (!handleDelta(delta)) return;\n }\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream?.unsubscribe();\n }\n\n return { unsubscribe: dispose, setBucket };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"orderbook.js","names":["#client","Proto.OrderbookService","#realtime","#scales","Proto.GetOrderBookResponseSchema","Proto.OrderBookDeltaSchema"],"sources":["../../../src/services/orderbook/orderbook.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/orderbook/v1/orderbook_pb.js\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport {\n snapshotThenStream,\n type SnapshotThenStreamSubscription,\n} from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { decimalInputToScaled, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n formatOrderbookLevel,\n GetOrderbookInputSchema,\n createOrderbookDataSchema,\n type OrderbookLevel,\n type OrderbookData,\n} from \"./orderbook.schemas.js\";\nimport { orderbookWsChannelDepth } from \"./orderbook.codecs.js\";\nimport { isResourceNotFoundError } from \"../../utils/errors.js\";\nimport type * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport type { PublicApiTransports } from \"../../shared/transports.js\";\n\ninterface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {\n symbolId: number;\n depth?: number;\n bucket?: string | null;\n}\n\nexport interface OrderbookStreamHandlers extends BaseSubscribeInput<OrderbookData> {}\n\nexport interface OrderbookSubscription {\n unsubscribe: () => void;\n setBucket: (bucket: string | null | undefined) => void;\n}\n\nexport interface CreateOrderbookSubscriptionInput\n extends\n OrderbookStreamHandlers,\n Pick<SubscribeOrderbookInput, \"symbolId\" | \"depth\" | \"bucket\"> {}\n\ntype BookSide = Map<bigint, bigint>;\n\n/**\n * Reads spot order book snapshots and maintains realtime local order book state from public delta channels.\n */\nexport class OrderbookService {\n #client: Client<typeof Proto.OrderbookService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n\n constructor(transports: PublicApiTransports, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.OrderbookService, transports.publicApi);\n this.#realtime = realtime;\n this.#scales = scales;\n }\n\n /**\n * Fetches a spot order book depth snapshot for a symbol ID and requested depth, returning best bids and asks with the backend book sequence.\n */\n async get(\n input: v.InferInput<typeof GetOrderbookInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookData> {\n const validated = parse(GetOrderbookInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.getOrderBook(\n { symbolId: validated.symbolId, depth: validated.protoDepth },\n toConnectCallOptions(options),\n );\n return parse(createOrderbookDataSchema(this.#scales, validated.symbolId), {\n symbolId: res.symbolId,\n depth: validated.depth,\n bookSeq: res.bookSeq,\n bids: res.bids,\n asks: res.asks,\n });\n }\n\n /**\n * Subscribes to the managed order book stream for a symbol ID and forwards reconstructed snapshots to onEvent. This is a convenience wrapper around createSubscription().unsubscribe.\n */\n subscribe(input: SubscribeOrderbookInput): () => void {\n return this.createSubscription(input).unsubscribe;\n }\n\n /**\n * Creates a stateful order book subscription that first fetches a snapshot, buffers proto deltas from public:spot:orderbook:deltas:depth:{depth}:{symbolId}:proto, applies sequence-checked updates, and refetches on observed sequence gaps or reconnects. The returned handle can unsubscribe or change local price bucket aggregation without reconnecting.\n *\n * `depth` is clamped to [1, 500] and rides the smallest published channel depth that covers it (see ORDERBOOK_WS_DEPTHS); levels are sliced back to the requested depth locally.\n *\n * Refetching is driven by observed sequence gaps and reconnect events only. A feed that stays subscribed but stops publishing is indistinguishable from a quiet market, so it does not trigger onError or a refetch. Callers that must detect a stalled book need their own idle watchdog plus a REST refetch.\n */\n createSubscription(input: CreateOrderbookSubscriptionInput): OrderbookSubscription {\n const { symbolId } = parse(GetOrderbookInputSchema, {\n symbolId: input.symbolId,\n depth: input.depth,\n });\n const requestedDepth = Math.min(500, Math.max(1, Math.trunc(input.depth ?? 50)));\n const channelDepth = orderbookWsChannelDepth(requestedDepth);\n const channel = `public:spot:orderbook:deltas:depth:${channelDepth}:${symbolId}:proto`;\n\n const client = this.#client;\n const scales = this.#scales;\n let bidsMap: BookSide = new Map();\n let asksMap: BookSide = new Map();\n let currentBookSeq = 0n;\n let bucketTicks: bigint | null = null;\n let stream: SnapshotThenStreamSubscription | undefined;\n\n function levelsToMap(levels: Proto.PriceLevel[] | undefined): BookSide {\n const map: BookSide = new Map();\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) continue;\n map.set(l.priceTicks, l.qtyScaled);\n }\n return map;\n }\n\n function applySideDelta(map: BookSide, levels: Proto.PriceLevel[] | undefined): void {\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) map.delete(l.priceTicks);\n else map.set(l.priceTicks, l.qtyScaled);\n }\n }\n\n function sideToUI(map: BookSide, side: \"bids\" | \"asks\", limit: number): OrderbookLevel[] {\n const entries = Array.from(map.entries());\n entries.sort(([pa], [pb]) => {\n if (pa === pb) return 0;\n return side === \"bids\" ? (pa > pb ? -1 : 1) : pa < pb ? -1 : 1;\n });\n return entries\n .slice(0, limit)\n .map(([priceTicks, qtyScaled]) =>\n formatOrderbookLevel({ priceTicks, qtyScaled }, scales, symbolId),\n );\n }\n\n function sideToUIBucketed(\n map: BookSide,\n side: \"bids\" | \"asks\",\n limit: number,\n bucket: bigint | null,\n ): OrderbookLevel[] {\n if (!bucket || bucket <= 0n) return sideToUI(map, side, limit);\n\n const agg: BookSide = new Map();\n for (const [priceTicks, qtyScaled] of map.entries()) {\n if (qtyScaled <= 0n) continue;\n const bucketFloor = (priceTicks / bucket) * bucket;\n const bucketPrice =\n side === \"asks\" && bucketFloor !== priceTicks\n ? bucketFloor + bucket\n : bucketFloor;\n agg.set(bucketPrice, (agg.get(bucketPrice) ?? 0n) + qtyScaled);\n }\n return sideToUI(agg, side, limit);\n }\n\n function emit(): void {\n try {\n input.onEvent({\n symbolId,\n depth: requestedDepth,\n bookSeq: currentBookSeq.toString(),\n bids: sideToUIBucketed(bidsMap, \"bids\", requestedDepth, bucketTicks),\n asks: sideToUIBucketed(asksMap, \"asks\", requestedDepth, bucketTicks),\n });\n } catch (error) {\n input.onError?.(publicationHandlerErrorContext(channel, error));\n }\n }\n\n function setBucket(bucket: string | null | undefined): void {\n if (!bucket) {\n bucketTicks = null;\n } else {\n try {\n bucketTicks = decimalInputToScaled(\"bucket\", bucket, scales.price());\n } catch {\n bucketTicks = null;\n }\n }\n if (stream?.isReady()) emit();\n }\n\n async function inputServiceFetch(): Promise<Proto.GetOrderBookResponse> {\n await scales.ready();\n const validated = parse(GetOrderbookInputSchema, {\n symbolId,\n depth: channelDepth,\n });\n try {\n return await client.getOrderBook({\n symbolId: validated.symbolId,\n depth: validated.protoDepth,\n });\n } catch (error: unknown) {\n if (!isResourceNotFoundError(error)) throw error;\n\n return create(Proto.GetOrderBookResponseSchema, {\n symbolId,\n bookSeq: 0n,\n bids: [],\n asks: [],\n });\n }\n }\n\n function handleDelta(delta: Proto.OrderBookDelta): boolean {\n if (delta.bookSeqEnd <= currentBookSeq) return true;\n\n if (delta.reset) {\n bidsMap.clear();\n asksMap.clear();\n currentBookSeq = 0n;\n }\n\n if (currentBookSeq !== 0n && delta.bookSeqStart > currentBookSeq + 1n) {\n stream?.refreshSnapshot();\n return false;\n }\n\n applySideDelta(bidsMap, delta.bids);\n applySideDelta(asksMap, delta.asks);\n\n currentBookSeq = delta.bookSeqEnd > currentBookSeq ? delta.bookSeqEnd : currentBookSeq;\n emit();\n return true;\n }\n\n setBucket(input.bucket);\n stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.OrderBookDeltaSchema,\n maxBufferedPublications: 200,\n snapshotErrorLog: \"Failed to fetch orderbook\",\n snapshotRetry: { maxAttempts: 3, delayMs: 1_000 },\n fetchSnapshot: inputServiceFetch,\n readPublication: (delta) => [delta],\n applySnapshot: (snapshot, bufferedDeltas) => {\n bidsMap = levelsToMap(snapshot.bids);\n asksMap = levelsToMap(snapshot.asks);\n currentBookSeq = snapshot.bookSeq;\n emit();\n for (const delta of bufferedDeltas) {\n if (stream?.isDisposed()) return;\n if (!handleDelta(delta)) return;\n }\n },\n applyLivePublications: (deltas) => {\n for (const delta of deltas) {\n if (stream?.isDisposed()) return;\n if (!handleDelta(delta)) return;\n }\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream?.unsubscribe();\n }\n\n return { unsubscribe: dispose, setBucket };\n }\n}\n"],"mappings":"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"}
@@ -40,7 +40,7 @@ type OpenOrdersInput = v.InferInput<typeof OpenOrdersInputSchema>;
40
40
  declare const OrderHistoryInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
41
41
  readonly includeAttachedRisk: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
42
42
  readonly includeAttachedRiskState: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
43
- readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["FILLED", "CANCELED", "REJECTED"], undefined>, undefined>, v.TransformAction<"CANCELED" | "FILLED" | "REJECTED" | undefined, OrderStatus.FILLED | OrderStatus.CANCELED | OrderStatus.REJECTED | undefined>]>;
43
+ readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["FILLED", "CANCELED", "REJECTED"], undefined>, undefined>, v.TransformAction<"REJECTED" | "FILLED" | "CANCELED" | undefined, OrderStatus.FILLED | OrderStatus.CANCELED | OrderStatus.REJECTED | undefined>]>;
44
44
  readonly startTsNs: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
45
45
  readonly endTsNs: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
46
46
  readonly symbolId: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>, undefined>;
@@ -243,7 +243,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
243
243
  attachedRisk: {
244
244
  takeProfit: {
245
245
  state: {
246
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
246
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
247
247
  armedTs: number | undefined;
248
248
  armedTsNs: string | undefined;
249
249
  terminalTs: number | undefined;
@@ -262,7 +262,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
262
262
  } | undefined;
263
263
  stopLoss: {
264
264
  state: {
265
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
265
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
266
266
  armedTs: number | undefined;
267
267
  armedTsNs: string | undefined;
268
268
  terminalTs: number | undefined;
@@ -281,7 +281,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
281
281
  } | undefined;
282
282
  trailingStop: {
283
283
  state: {
284
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
284
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
285
285
  armedTs: number | undefined;
286
286
  armedTsNs: string | undefined;
287
287
  terminalTs: number | undefined;
@@ -586,7 +586,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
586
586
  attachedRisk: {
587
587
  takeProfit: {
588
588
  state: {
589
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
589
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
590
590
  armedTs: number | undefined;
591
591
  armedTsNs: string | undefined;
592
592
  terminalTs: number | undefined;
@@ -605,7 +605,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
605
605
  } | undefined;
606
606
  stopLoss: {
607
607
  state: {
608
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
608
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
609
609
  armedTs: number | undefined;
610
610
  armedTsNs: string | undefined;
611
611
  terminalTs: number | undefined;
@@ -624,7 +624,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
624
624
  } | undefined;
625
625
  trailingStop: {
626
626
  state: {
627
- status: "unspecified" | "created" | "failed" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
627
+ status: "unspecified" | "failed" | "created" | "completed" | "armed" | "running" | "paused" | "canceled" | "not_configured";
628
628
  armedTs: number | undefined;
629
629
  armedTsNs: string | undefined;
630
630
  terminalTs: number | undefined;
@@ -1,3 +1,4 @@
1
+ import { AuthApiTransports } from "../../shared/transports.js";
1
2
  import { PolyesterMutationOptions, PolyesterRequestOptions } from "../../shared/request-options.js";
2
3
  import { SubaccountResolver } from "../subaccount-resolver.js";
3
4
  import { PolyesterRealtime } from "../../realtime/types.js";
@@ -8,7 +9,6 @@ import { ModifyOrderInput, ModifyOrderResult } from "./orders-modify.schemas.js"
8
9
  import { BatchCancelOrdersInput, BatchCancelOrdersResult, BatchCreateOrdersInput, BatchCreateOrdersResult, BatchReplaceOrdersInput, BatchReplaceOrdersResult, CancelAllAfterInput, CancelAllAfterResult, GetBatchReplaceStatusInput, GetBatchReplaceStatusResult } from "./orders-batch.schemas.js";
9
10
  import { Order, OrderDetails } from "./orders-output.schemas.js";
10
11
  import "./orders.schemas.js";
11
- import { Transport } from "@connectrpc/connect";
12
12
  import * as v from "valibot";
13
13
  //#region src/services/orders/orders.d.ts
14
14
  interface SubscribeOrdersInput extends BaseSubscribeInput<Order> {
@@ -19,7 +19,7 @@ interface SubscribeOrdersInput extends BaseSubscribeInput<Order> {
19
19
  */
20
20
  declare class OrdersService {
21
21
  #private;
22
- constructor(transport: Transport, realtime: PolyesterRealtime, resolver: SubaccountResolver | undefined, scales: SdkScales);
22
+ constructor(transports: AuthApiTransports, realtime: PolyesterRealtime, resolver: SubaccountResolver | undefined, scales: SdkScales);
23
23
  /**
24
24
  * Returns open orders for the resolved root account or subaccount, with optional symbol IDs, trigger ID, side, pagination, and attached-risk inclusion filters. Results are paginated with a server-determined page size: a single call is not the full set of open orders — keep calling with the returned nextPageToken until it is empty.
25
25
  */
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UAqFU,6BAA6B,mBAAmB;EACtD;;;;;cAqBS;;EAaL,YAAA,WAAW,WACX,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAiBN,SACF,QAAO,EAAE,kBAAkB,wBAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,YACF,QAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,QACF,OAAO,eACP,UAAU,0BACX,QAAQ;;;;EAiBL,OACF,OAAO,eACP,UAAU,2BACX,QAAQ;;;;EAkBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAyBL,OACF,OAAO,EAAE,kBAAkB,yBAC3B,UAAU,2BACX,QAAQ;;;;EAmBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAkBL,OACF,OAAO,kBACP,UAAU,2BACX,QAAQ;;;;EAkBL,aACF,OAAO,yBACP,UAAU,2BACX,QAAQ;;;;EAsBL,sBACF,OAAO,4BACP,UAAU,0BACX,QAAQ;;;;EAaL,UACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,2BACX,QAAQ;;;;EAgBL,eACF,OAAO,qBACP,UAAU,2BACX,QAAQ;;;;EAgBL,WACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,0BACX,QAAQ;;;;EAqBX,UAAU,OAAO"}
1
+ {"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UAsFU,6BAA6B,mBAAmB;EACtD;;;;;cAqBS;;EAaL,YAAA,YAAY,mBACZ,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAiBN,SACF,QAAO,EAAE,kBAAkB,wBAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,YACF,QAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,QACF,OAAO,eACP,UAAU,0BACX,QAAQ;;;;EAiBL,OACF,OAAO,eACP,UAAU,2BACX,QAAQ;;;;EAkBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAyBL,OACF,OAAO,EAAE,kBAAkB,yBAC3B,UAAU,2BACX,QAAQ;;;;EAmBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAkBL,OACF,OAAO,kBACP,UAAU,2BACX,QAAQ;;;;EAkBL,aACF,OAAO,yBACP,UAAU,2BACX,QAAQ;;;;EAsBL,sBACF,OAAO,4BACP,UAAU,0BACX,QAAQ;;;;EAaL,UACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,2BACX,QAAQ;;;;EAgBL,eACF,OAAO,qBACP,UAAU,2BACX,QAAQ;;;;EAgBL,WACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,0BACX,QAAQ;;;;EAqBX,UAAU,OAAO"}
@@ -46,9 +46,9 @@ var OrdersService = class {
46
46
  #newOrderInputSchema;
47
47
  #modifyOrderInputSchema;
48
48
  #batchCreateOrdersInputSchema;
49
- constructor(transport, realtime, resolver, scales) {
50
- this.#readClient = createClient(OrdersReadService, transport);
51
- this.#writeClient = createClient(OrdersService$1, transport);
49
+ constructor(transports, realtime, resolver, scales) {
50
+ this.#readClient = createClient(OrdersReadService, transports.authApi);
51
+ this.#writeClient = createClient(OrdersService$1, transports.authApi);
52
52
  this.#realtime = realtime;
53
53
  this.#resolver = resolver;
54
54
  this.#scales = scales;