Skip to content
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
9aafb6c
feat(protocols): add SDA (Smart Deposit Address) protocol interface
AlonzoRicardo Jun 24, 2026
066400b
feat(protocols): add custody model + recipient-keyed history to SDA i…
AlonzoRicardo Jun 30, 2026
7accd53
feat(protocols): add activation model + generic derivation to SDA int…
AlonzoRicardo Jul 1, 2026
d6f7658
refactor(protocols): add Blockchain type alias for SDA chain fields
AlonzoRicardo Jul 2, 2026
3545f2a
refactor(protocols): accept number | bigint for SDA deposit limits
AlonzoRicardo Jul 2, 2026
0060e75
refactor(protocols): make SdaDepositAddress.id required
AlonzoRicardo Jul 2, 2026
e299a0e
refactor(protocols): use skip offset instead of cursor in SdaTransfer…
AlonzoRicardo Jul 2, 2026
ae6ab3d
refactor(protocols): rename getDepositAddressTransfers to getTransfers
AlonzoRicardo Jul 2, 2026
be6e8c1
refactor(protocols): swap getTransfersByRecipient arg order to (desti…
AlonzoRicardo Jul 2, 2026
71e587a
refactor(protocols): drop config argument from base SdaProtocol
AlonzoRicardo Jul 3, 2026
386e2ee
refactor(protocols): drop generic derivation field from SDA types
AlonzoRicardo Jul 3, 2026
072ea09
feat(errors): add UnsupportedOperationError and AccountRequiredError
AlonzoRicardo Jul 3, 2026
3a7d9e0
refactor(protocols): drop SdaCapabilities descriptor for behavior-bas…
AlonzoRicardo Jul 3, 2026
8907ba8
docs(protocols): document AccountRequiredError on create/derive
AlonzoRicardo Jul 3, 2026
6bc203f
refactor(protocols): make SdaRecoveryOptions a union of identifying s…
AlonzoRicardo Jul 6, 2026
83303e1
docs(protocols): remove provider names from SDA interface JSDoc
AlonzoRicardo Jul 7, 2026
42097de
fix(types): emit ISdaProtocol as interface and SdaProtocol as abstrac…
AlonzoRicardo Jul 7, 2026
e639e62
refactor(protocols): drop options.quote; quoteDeposit is a standalone…
AlonzoRicardo Jul 7, 2026
5112778
docs(protocols): SdaLimits is base-unit only; omit if denominated oth…
AlonzoRicardo Jul 7, 2026
eda7dcb
refactor(protocols): rework SDA error taxonomy (review round 2)
AlonzoRicardo Jul 9, 2026
6ba18ee
refactor(protocols): apply review round 2 docs + renames to SDA inter…
AlonzoRicardo Jul 9, 2026
f6ba3b3
refactor(protocols): drop unused SdaTransfer fields
AlonzoRicardo Jul 9, 2026
412d807
style(protocols): wrap SDA doc comments at 120 columns
AlonzoRicardo Jul 10, 2026
d82dca3
style(types): normalize SDA .d.ts comments to tsc output
AlonzoRicardo Jul 10, 2026
e145969
refactor(protocols): apply review round 3 to the SDA interface
AlonzoRicardo Jul 13, 2026
fa4cd7e
refactor(protocols): drop non-shared fields from SdaCreateDepositAddr…
AlonzoRicardo Jul 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ export {

export { IWalletAccount } from './src/wallet-account.js'

export { NotImplementedError, SignerError } from './src/errors.js'
export {
NotImplementedError,
SignerError,
UnsupportedOperationError,
AccountRequiredError
} from './src/errors.js'

export { ISigner } from './src/signer.js'
29 changes: 29 additions & 0 deletions src/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,32 @@ export class SignerError extends Error {
this.name = 'SignerError'
}
}

export class UnsupportedOperationError extends Error {
/**
* Create a new unsupported operation error. Thrown by an optional operation
* that the concrete implementation deliberately does not support, so consumers
* can distinguish "not supported here" from an abstract method left unimplemented.
Comment thread
Davi0kProgramsThings marked this conversation as resolved.
Outdated
*
* @param {string} operation - The name of the operation that is not supported.
*/
constructor (operation) {
super(`Operation '${operation}' is not supported by this protocol.`)

this.name = 'UnsupportedOperationError'
}
}

export class AccountRequiredError extends Error {
/**
* Create a new account required error. Thrown when an operation needs a wallet
* account to run but none was bound at construction.
*
* @param {string} operation - The name of the operation that requires a wallet account.
*/
constructor (operation) {
super(`Operation '${operation}' requires a wallet account.`)

this.name = 'AccountRequiredError'
}
}
25 changes: 25 additions & 0 deletions src/protocols/index.js
Comment thread
Davi0kProgramsThings marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,29 @@
/** @typedef {import('./swidge-protocol.js').SwidgeSupportedToken} SwidgeSupportedToken */
/** @typedef {import('./swidge-protocol.js').SwidgeSupportedTokensOptions} SwidgeSupportedTokensOptions */

/** @typedef {import('./sda-protocol.js').SdaRecoveryMode} SdaRecoveryMode */
/** @typedef {import('./sda-protocol.js').SdaRouteDiscoveryMode} SdaRouteDiscoveryMode */
/** @typedef {import('./sda-protocol.js').SdaCustodyModel} SdaCustodyModel */
/** @typedef {import('./sda-protocol.js').SdaActivationModel} SdaActivationModel */
/** @typedef {import('./sda-protocol.js').Blockchain} Blockchain */
/** @typedef {import('./sda-protocol.js').SdaToken} SdaToken */
/** @typedef {import('./sda-protocol.js').SdaLimits} SdaLimits */
/** @typedef {import('./sda-protocol.js').SdaRoutesOptions} SdaRoutesOptions */
/** @typedef {import('./sda-protocol.js').SdaRoute} SdaRoute */
/** @typedef {import('./sda-protocol.js').SdaQuoteOptions} SdaQuoteOptions */
/** @typedef {import('./sda-protocol.js').SdaFeeType} SdaFeeType */
/** @typedef {import('./sda-protocol.js').SdaFee} SdaFee */
/** @typedef {import('./sda-protocol.js').SdaQuote} SdaQuote */
/** @typedef {import('./sda-protocol.js').SdaCreateOptions} SdaCreateOptions */
/** @typedef {import('./sda-protocol.js').SdaDepositAddress} SdaDepositAddress */
/** @typedef {import('./sda-protocol.js').SdaTransferStatus} SdaTransferStatus */
/** @typedef {import('./sda-protocol.js').SdaTransfer} SdaTransfer */
/** @typedef {import('./sda-protocol.js').SdaTransfersOptions} SdaTransfersOptions */
/** @typedef {import('./sda-protocol.js').SdaRecoverById} SdaRecoverById */
/** @typedef {import('./sda-protocol.js').SdaRecoverByAddress} SdaRecoverByAddress */
/** @typedef {import('./sda-protocol.js').SdaRecoveryOptions} SdaRecoveryOptions */
/** @typedef {import('./sda-protocol.js').SdaRecoveryResult} SdaRecoveryResult */

export { default as SwapProtocol, ISwapProtocol } from './swap-protocol.js'

export { default as BridgeProtocol, IBridgeProtocol } from './bridge-protocol.js'
Expand All @@ -77,3 +100,5 @@ export { default as LendingProtocol, ILendingProtocol } from './lending-protocol
export { default as FiatProtocol, IFiatProtocol } from './fiat-protocol.js'

export { default as SwidgeProtocol, ISwidgeProtocol } from './swidge-protocol.js'

export { default as SdaProtocol, ISdaProtocol } from './sda-protocol.js'
646 changes: 646 additions & 0 deletions src/protocols/sda-protocol.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
export { default } from "./src/wallet-manager.js";
export { IWalletAccount } from "./src/wallet-account.js";
export { ISigner } from "./src/signer.js";
export type FeeRates = import("./src/wallet-manager.js").FeeRates;
export type WalletConfig = import("./src/wallet-manager.js").WalletConfig;
export type Transaction = import("./src/wallet-account-read-only.js").Transaction;
export type TransactionResult = import("./src/wallet-account-read-only.js").TransactionResult;
export type TransferOptions = import("./src/wallet-account-read-only.js").TransferOptions;
export type TransferResult = import("./src/wallet-account-read-only.js").TransferResult;
export type KeyPair = import("./src/wallet-account.js").KeyPair;
export { default } from "./src/wallet-manager.js";
export { default as WalletAccountReadOnly, IWalletAccountReadOnly } from "./src/wallet-account-read-only.js";
export { IWalletAccount } from "./src/wallet-account.js";
export { NotImplementedError, SignerError } from "./src/errors.js";
export { ISigner } from "./src/signer.js";
export { NotImplementedError, SignerError, UnsupportedOperationError, AccountRequiredError } from "./src/errors.js";
19 changes: 19 additions & 0 deletions types/src/errors.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,22 @@ export class SignerError extends Error {
*/
constructor(message: string);
}
export class UnsupportedOperationError extends Error {
/**
* Create a new unsupported operation error. Thrown by an optional operation
* that the concrete implementation deliberately does not support, so consumers
* can distinguish "not supported here" from an abstract method left unimplemented.
*
* @param {string} operation - The name of the operation that is not supported.
*/
constructor(operation: string);
}
export class AccountRequiredError extends Error {
/**
* Create a new account required error. Thrown when an operation needs a wallet
* account to run but none was bound at construction.
*
* @param {string} operation - The name of the operation that requires a wallet account.
*/
constructor(operation: string);
}
23 changes: 23 additions & 0 deletions types/src/protocols/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,31 @@ export type SwidgeStatusResult = import("./swidge-protocol.js").SwidgeStatusResu
export type SwidgeSupportedChain = import("./swidge-protocol.js").SwidgeSupportedChain;
export type SwidgeSupportedToken = import("./swidge-protocol.js").SwidgeSupportedToken;
export type SwidgeSupportedTokensOptions = import("./swidge-protocol.js").SwidgeSupportedTokensOptions;
export type SdaRecoveryMode = import("./sda-protocol.js").SdaRecoveryMode;
export type SdaRouteDiscoveryMode = import("./sda-protocol.js").SdaRouteDiscoveryMode;
export type SdaCustodyModel = import("./sda-protocol.js").SdaCustodyModel;
export type SdaActivationModel = import("./sda-protocol.js").SdaActivationModel;
export type Blockchain = import("./sda-protocol.js").Blockchain;
export type SdaToken = import("./sda-protocol.js").SdaToken;
export type SdaLimits = import("./sda-protocol.js").SdaLimits;
export type SdaRoutesOptions = import("./sda-protocol.js").SdaRoutesOptions;
export type SdaRoute = import("./sda-protocol.js").SdaRoute;
export type SdaQuoteOptions = import("./sda-protocol.js").SdaQuoteOptions;
export type SdaFeeType = import("./sda-protocol.js").SdaFeeType;
export type SdaFee = import("./sda-protocol.js").SdaFee;
export type SdaQuote = import("./sda-protocol.js").SdaQuote;
export type SdaCreateOptions = import("./sda-protocol.js").SdaCreateOptions;
export type SdaDepositAddress = import("./sda-protocol.js").SdaDepositAddress;
export type SdaTransferStatus = import("./sda-protocol.js").SdaTransferStatus;
export type SdaTransfer = import("./sda-protocol.js").SdaTransfer;
export type SdaTransfersOptions = import("./sda-protocol.js").SdaTransfersOptions;
export type SdaRecoverById = import("./sda-protocol.js").SdaRecoverById;
export type SdaRecoverByAddress = import("./sda-protocol.js").SdaRecoverByAddress;
export type SdaRecoveryOptions = import("./sda-protocol.js").SdaRecoveryOptions;
export type SdaRecoveryResult = import("./sda-protocol.js").SdaRecoveryResult;
export { default as SwapProtocol, ISwapProtocol } from "./swap-protocol.js";
export { default as BridgeProtocol, IBridgeProtocol } from "./bridge-protocol.js";
export { default as LendingProtocol, ILendingProtocol } from "./lending-protocol.js";
export { default as FiatProtocol, IFiatProtocol } from "./fiat-protocol.js";
export { default as SwidgeProtocol, ISwidgeProtocol } from "./swidge-protocol.js";
export { default as SdaProtocol, ISdaProtocol } from "./sda-protocol.js";
Loading