@florent-uzio/custody 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +280 -0
- package/dist/constants/defaults.d.ts +3 -0
- package/dist/constants/defaults.d.ts.map +1 -0
- package/dist/constants/defaults.js +3 -0
- package/dist/constants/defaults.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/urls.d.ts +86 -0
- package/dist/constants/urls.d.ts.map +1 -0
- package/dist/constants/urls.js +109 -0
- package/dist/constants/urls.js.map +1 -0
- package/dist/helpers/async/async.d.ts +6 -0
- package/dist/helpers/async/async.d.ts.map +1 -0
- package/dist/helpers/async/async.js +6 -0
- package/dist/helpers/async/async.js.map +1 -0
- package/dist/helpers/async/index.d.ts +2 -0
- package/dist/helpers/async/index.d.ts.map +1 -0
- package/dist/helpers/async/index.js +2 -0
- package/dist/helpers/async/index.js.map +1 -0
- package/dist/helpers/index.d.ts +4 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +4 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/typeof-fns/index.d.ts +2 -0
- package/dist/helpers/typeof-fns/index.d.ts.map +1 -0
- package/dist/helpers/typeof-fns/index.js +2 -0
- package/dist/helpers/typeof-fns/index.js.map +1 -0
- package/dist/helpers/typeof-fns/typeof-fns.d.ts +18 -0
- package/dist/helpers/typeof-fns/typeof-fns.d.ts.map +1 -0
- package/dist/helpers/typeof-fns/typeof-fns.js +48 -0
- package/dist/helpers/typeof-fns/typeof-fns.js.map +1 -0
- package/dist/helpers/url/index.d.ts +2 -0
- package/dist/helpers/url/index.d.ts.map +1 -0
- package/dist/helpers/url/index.js +2 -0
- package/dist/helpers/url/index.js.map +1 -0
- package/dist/helpers/url/url.d.ts +39 -0
- package/dist/helpers/url/url.d.ts.map +1 -0
- package/dist/helpers/url/url.js +54 -0
- package/dist/helpers/url/url.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.helpers.d.ts +2 -0
- package/dist/main.helpers.d.ts.map +1 -0
- package/dist/main.helpers.js +99 -0
- package/dist/main.helpers.js.map +1 -0
- package/dist/main.js +41 -0
- package/dist/main.js.map +1 -0
- package/dist/models/custody-error.d.ts +22 -0
- package/dist/models/custody-error.d.ts.map +1 -0
- package/dist/models/custody-error.js +47 -0
- package/dist/models/custody-error.js.map +1 -0
- package/dist/models/custody-types.d.ts +14664 -0
- package/dist/models/custody-types.d.ts.map +1 -0
- package/dist/models/custody-types.js +6 -0
- package/dist/models/custody-types.js.map +1 -0
- package/dist/models/index.d.ts +4 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/ledger-ids.d.ts +19 -0
- package/dist/models/ledger-ids.d.ts.map +1 -0
- package/dist/models/ledger-ids.js +2 -0
- package/dist/models/ledger-ids.js.map +1 -0
- package/dist/namespaces/accounts.d.ts +32 -0
- package/dist/namespaces/accounts.d.ts.map +1 -0
- package/dist/namespaces/accounts.js +66 -0
- package/dist/namespaces/accounts.js.map +1 -0
- package/dist/namespaces/channels.d.ts +14 -0
- package/dist/namespaces/channels.d.ts.map +1 -0
- package/dist/namespaces/channels.js +15 -0
- package/dist/namespaces/channels.js.map +1 -0
- package/dist/namespaces/domains.d.ts +7 -0
- package/dist/namespaces/domains.d.ts.map +1 -0
- package/dist/namespaces/domains.js +8 -0
- package/dist/namespaces/domains.js.map +1 -0
- package/dist/namespaces/endpoints.d.ts +7 -0
- package/dist/namespaces/endpoints.d.ts.map +1 -0
- package/dist/namespaces/endpoints.js +8 -0
- package/dist/namespaces/endpoints.js.map +1 -0
- package/dist/namespaces/events.d.ts +6 -0
- package/dist/namespaces/events.d.ts.map +1 -0
- package/dist/namespaces/events.js +7 -0
- package/dist/namespaces/events.js.map +1 -0
- package/dist/namespaces/genesis.d.ts +6 -0
- package/dist/namespaces/genesis.d.ts.map +1 -0
- package/dist/namespaces/genesis.js +7 -0
- package/dist/namespaces/genesis.js.map +1 -0
- package/dist/namespaces/index.d.ts +16 -0
- package/dist/namespaces/index.d.ts.map +1 -0
- package/dist/namespaces/index.js +16 -0
- package/dist/namespaces/index.js.map +1 -0
- package/dist/namespaces/intents.d.ts +13 -0
- package/dist/namespaces/intents.d.ts.map +1 -0
- package/dist/namespaces/intents.js +70 -0
- package/dist/namespaces/intents.js.map +1 -0
- package/dist/namespaces/ledgers.d.ts +11 -0
- package/dist/namespaces/ledgers.d.ts.map +1 -0
- package/dist/namespaces/ledgers.js +12 -0
- package/dist/namespaces/ledgers.js.map +1 -0
- package/dist/namespaces/policies.d.ts +7 -0
- package/dist/namespaces/policies.d.ts.map +1 -0
- package/dist/namespaces/policies.js +8 -0
- package/dist/namespaces/policies.js.map +1 -0
- package/dist/namespaces/requests.d.ts +8 -0
- package/dist/namespaces/requests.d.ts.map +1 -0
- package/dist/namespaces/requests.js +9 -0
- package/dist/namespaces/requests.js.map +1 -0
- package/dist/namespaces/tickers.d.ts +7 -0
- package/dist/namespaces/tickers.d.ts.map +1 -0
- package/dist/namespaces/tickers.js +8 -0
- package/dist/namespaces/tickers.js.map +1 -0
- package/dist/namespaces/transactions.d.ts +12 -0
- package/dist/namespaces/transactions.d.ts.map +1 -0
- package/dist/namespaces/transactions.js +13 -0
- package/dist/namespaces/transactions.js.map +1 -0
- package/dist/namespaces/user-invitations.d.ts +13 -0
- package/dist/namespaces/user-invitations.d.ts.map +1 -0
- package/dist/namespaces/user-invitations.js +14 -0
- package/dist/namespaces/user-invitations.js.map +1 -0
- package/dist/namespaces/users.d.ts +9 -0
- package/dist/namespaces/users.d.ts.map +1 -0
- package/dist/namespaces/users.js +10 -0
- package/dist/namespaces/users.js.map +1 -0
- package/dist/namespaces/vaults.d.ts +9 -0
- package/dist/namespaces/vaults.d.ts.map +1 -0
- package/dist/namespaces/vaults.js +12 -0
- package/dist/namespaces/vaults.js.map +1 -0
- package/dist/ripple-custody.d.ts +95 -0
- package/dist/ripple-custody.d.ts.map +1 -0
- package/dist/ripple-custody.js +138 -0
- package/dist/ripple-custody.js.map +1 -0
- package/dist/ripple-custody.types.d.ts +29 -0
- package/dist/ripple-custody.types.d.ts.map +1 -0
- package/dist/ripple-custody.types.js +2 -0
- package/dist/ripple-custody.types.js.map +1 -0
- package/dist/services/accounts/accounts.types.d.ts +48 -0
- package/dist/services/accounts/accounts.types.d.ts.map +1 -0
- package/dist/services/accounts/accounts.types.js +2 -0
- package/dist/services/accounts/accounts.types.js.map +1 -0
- package/dist/services/accounts/index.d.ts +2 -0
- package/dist/services/accounts/index.d.ts.map +1 -0
- package/dist/services/accounts/index.js +2 -0
- package/dist/services/accounts/index.js.map +1 -0
- package/dist/services/apis/api.service.d.ts +64 -0
- package/dist/services/apis/api.service.d.ts.map +1 -0
- package/dist/services/apis/api.service.js +235 -0
- package/dist/services/apis/api.service.js.map +1 -0
- package/dist/services/apis/api.service.types.d.ts +16 -0
- package/dist/services/apis/api.service.types.d.ts.map +1 -0
- package/dist/services/apis/api.service.types.js +3 -0
- package/dist/services/apis/api.service.types.js.map +1 -0
- package/dist/services/apis/index.d.ts +3 -0
- package/dist/services/apis/index.d.ts.map +1 -0
- package/dist/services/apis/index.js +3 -0
- package/dist/services/apis/index.js.map +1 -0
- package/dist/services/auth/auth.service.d.ts +56 -0
- package/dist/services/auth/auth.service.d.ts.map +1 -0
- package/dist/services/auth/auth.service.js +120 -0
- package/dist/services/auth/auth.service.js.map +1 -0
- package/dist/services/auth/auth.service.types.d.ts +9 -0
- package/dist/services/auth/auth.service.types.d.ts.map +1 -0
- package/dist/services/auth/auth.service.types.js +2 -0
- package/dist/services/auth/auth.service.types.js.map +1 -0
- package/dist/services/auth/index.d.ts +3 -0
- package/dist/services/auth/index.d.ts.map +1 -0
- package/dist/services/auth/index.js +3 -0
- package/dist/services/auth/index.js.map +1 -0
- package/dist/services/channels/channels.types.d.ts +37 -0
- package/dist/services/channels/channels.types.d.ts.map +1 -0
- package/dist/services/channels/channels.types.js +2 -0
- package/dist/services/channels/channels.types.js.map +1 -0
- package/dist/services/channels/index.d.ts +3 -0
- package/dist/services/channels/index.d.ts.map +1 -0
- package/dist/services/channels/index.js +3 -0
- package/dist/services/channels/index.js.map +1 -0
- package/dist/services/channels/parse-event-payload.d.ts +12 -0
- package/dist/services/channels/parse-event-payload.d.ts.map +1 -0
- package/dist/services/channels/parse-event-payload.js +37 -0
- package/dist/services/channels/parse-event-payload.js.map +1 -0
- package/dist/services/domain-resolver/domain-resolver.types.d.ts +18 -0
- package/dist/services/domain-resolver/domain-resolver.types.d.ts.map +1 -0
- package/dist/services/domain-resolver/domain-resolver.types.js +2 -0
- package/dist/services/domain-resolver/domain-resolver.types.js.map +1 -0
- package/dist/services/domain-resolver/index.d.ts +2 -0
- package/dist/services/domain-resolver/index.d.ts.map +1 -0
- package/dist/services/domain-resolver/index.js +2 -0
- package/dist/services/domain-resolver/index.js.map +1 -0
- package/dist/services/domains/domain.types.d.ts +6 -0
- package/dist/services/domains/domain.types.d.ts.map +1 -0
- package/dist/services/domains/domain.types.js +2 -0
- package/dist/services/domains/domain.types.js.map +1 -0
- package/dist/services/domains/index.d.ts +2 -0
- package/dist/services/domains/index.d.ts.map +1 -0
- package/dist/services/domains/index.js +2 -0
- package/dist/services/domains/index.js.map +1 -0
- package/dist/services/endpoints/endpoints.types.d.ts +7 -0
- package/dist/services/endpoints/endpoints.types.d.ts.map +1 -0
- package/dist/services/endpoints/endpoints.types.js +2 -0
- package/dist/services/endpoints/endpoints.types.js.map +1 -0
- package/dist/services/endpoints/index.d.ts +2 -0
- package/dist/services/endpoints/index.d.ts.map +1 -0
- package/dist/services/endpoints/index.js +2 -0
- package/dist/services/endpoints/index.js.map +1 -0
- package/dist/services/events/events.types.d.ts +8 -0
- package/dist/services/events/events.types.d.ts.map +1 -0
- package/dist/services/events/events.types.js +2 -0
- package/dist/services/events/events.types.js.map +1 -0
- package/dist/services/events/index.d.ts +2 -0
- package/dist/services/events/index.d.ts.map +1 -0
- package/dist/services/events/index.js +2 -0
- package/dist/services/events/index.js.map +1 -0
- package/dist/services/genesis/genesis.types.d.ts +7 -0
- package/dist/services/genesis/genesis.types.d.ts.map +1 -0
- package/dist/services/genesis/genesis.types.js +2 -0
- package/dist/services/genesis/genesis.types.js.map +1 -0
- package/dist/services/genesis/index.d.ts +2 -0
- package/dist/services/genesis/index.d.ts.map +1 -0
- package/dist/services/genesis/index.js +2 -0
- package/dist/services/genesis/index.js.map +1 -0
- package/dist/services/index.d.ts +19 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +19 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/intents/index.d.ts +2 -0
- package/dist/services/intents/index.d.ts.map +1 -0
- package/dist/services/intents/index.js +2 -0
- package/dist/services/intents/index.js.map +1 -0
- package/dist/services/intents/intents.types.d.ts +66 -0
- package/dist/services/intents/intents.types.d.ts.map +1 -0
- package/dist/services/intents/intents.types.js +5 -0
- package/dist/services/intents/intents.types.js.map +1 -0
- package/dist/services/keypairs/ed25519.service.d.ts +25 -0
- package/dist/services/keypairs/ed25519.service.d.ts.map +1 -0
- package/dist/services/keypairs/ed25519.service.js +84 -0
- package/dist/services/keypairs/ed25519.service.js.map +1 -0
- package/dist/services/keypairs/index.d.ts +3 -0
- package/dist/services/keypairs/index.d.ts.map +1 -0
- package/dist/services/keypairs/index.js +3 -0
- package/dist/services/keypairs/index.js.map +1 -0
- package/dist/services/keypairs/keypair.service.d.ts +27 -0
- package/dist/services/keypairs/keypair.service.d.ts.map +1 -0
- package/dist/services/keypairs/keypair.service.js +69 -0
- package/dist/services/keypairs/keypair.service.js.map +1 -0
- package/dist/services/keypairs/keypairs.types.d.ts +10 -0
- package/dist/services/keypairs/keypairs.types.d.ts.map +1 -0
- package/dist/services/keypairs/keypairs.types.js +2 -0
- package/dist/services/keypairs/keypairs.types.js.map +1 -0
- package/dist/services/keypairs/secp256k1.service.d.ts +24 -0
- package/dist/services/keypairs/secp256k1.service.d.ts.map +1 -0
- package/dist/services/keypairs/secp256k1.service.js +101 -0
- package/dist/services/keypairs/secp256k1.service.js.map +1 -0
- package/dist/services/keypairs/secp256r1.service.d.ts +24 -0
- package/dist/services/keypairs/secp256r1.service.d.ts.map +1 -0
- package/dist/services/keypairs/secp256r1.service.js +101 -0
- package/dist/services/keypairs/secp256r1.service.js.map +1 -0
- package/dist/services/ledgers/index.d.ts +2 -0
- package/dist/services/ledgers/index.d.ts.map +1 -0
- package/dist/services/ledgers/index.js +2 -0
- package/dist/services/ledgers/index.js.map +1 -0
- package/dist/services/ledgers/ledgers.types.d.ts +13 -0
- package/dist/services/ledgers/ledgers.types.d.ts.map +1 -0
- package/dist/services/ledgers/ledgers.types.js +2 -0
- package/dist/services/ledgers/ledgers.types.js.map +1 -0
- package/dist/services/policies/index.d.ts +2 -0
- package/dist/services/policies/index.d.ts.map +1 -0
- package/dist/services/policies/index.js +2 -0
- package/dist/services/policies/index.js.map +1 -0
- package/dist/services/policies/policies.types.d.ts +13 -0
- package/dist/services/policies/policies.types.d.ts.map +1 -0
- package/dist/services/policies/policies.types.js +2 -0
- package/dist/services/policies/policies.types.js.map +1 -0
- package/dist/services/requests/index.d.ts +2 -0
- package/dist/services/requests/index.d.ts.map +1 -0
- package/dist/services/requests/index.js +2 -0
- package/dist/services/requests/index.js.map +1 -0
- package/dist/services/requests/requests.types.d.ts +8 -0
- package/dist/services/requests/requests.types.d.ts.map +1 -0
- package/dist/services/requests/requests.types.js +2 -0
- package/dist/services/requests/requests.types.js.map +1 -0
- package/dist/services/tickers/index.d.ts +2 -0
- package/dist/services/tickers/index.d.ts.map +1 -0
- package/dist/services/tickers/index.js +2 -0
- package/dist/services/tickers/index.js.map +1 -0
- package/dist/services/tickers/tickers.types.d.ts +6 -0
- package/dist/services/tickers/tickers.types.d.ts.map +1 -0
- package/dist/services/tickers/tickers.types.js +2 -0
- package/dist/services/tickers/tickers.types.js.map +1 -0
- package/dist/services/transactions/index.d.ts +2 -0
- package/dist/services/transactions/index.d.ts.map +1 -0
- package/dist/services/transactions/index.js +2 -0
- package/dist/services/transactions/index.js.map +1 -0
- package/dist/services/transactions/transactions.types.d.ts +21 -0
- package/dist/services/transactions/transactions.types.d.ts.map +1 -0
- package/dist/services/transactions/transactions.types.js +2 -0
- package/dist/services/transactions/transactions.types.js.map +1 -0
- package/dist/services/user-invitations/index.d.ts +2 -0
- package/dist/services/user-invitations/index.d.ts.map +1 -0
- package/dist/services/user-invitations/index.js +2 -0
- package/dist/services/user-invitations/index.js.map +1 -0
- package/dist/services/user-invitations/user-invitations.types.d.ts +15 -0
- package/dist/services/user-invitations/user-invitations.types.d.ts.map +1 -0
- package/dist/services/user-invitations/user-invitations.types.js +2 -0
- package/dist/services/user-invitations/user-invitations.types.js.map +1 -0
- package/dist/services/users/index.d.ts +2 -0
- package/dist/services/users/index.d.ts.map +1 -0
- package/dist/services/users/index.js +2 -0
- package/dist/services/users/index.js.map +1 -0
- package/dist/services/users/users.types.d.ts +10 -0
- package/dist/services/users/users.types.d.ts.map +1 -0
- package/dist/services/users/users.types.js +2 -0
- package/dist/services/users/users.types.js.map +1 -0
- package/dist/services/vaults/index.d.ts +2 -0
- package/dist/services/vaults/index.d.ts.map +1 -0
- package/dist/services/vaults/index.js +2 -0
- package/dist/services/vaults/index.js.map +1 -0
- package/dist/services/vaults/vaults.types.d.ts +14 -0
- package/dist/services/vaults/vaults.types.d.ts.map +1 -0
- package/dist/services/vaults/vaults.types.js +2 -0
- package/dist/services/vaults/vaults.types.js.map +1 -0
- package/dist/services/xrpl/index.d.ts +5 -0
- package/dist/services/xrpl/index.d.ts.map +1 -0
- package/dist/services/xrpl/index.js +8 -0
- package/dist/services/xrpl/index.js.map +1 -0
- package/dist/services/xrpl/xrpl.adapters.d.ts +13 -0
- package/dist/services/xrpl/xrpl.adapters.d.ts.map +1 -0
- package/dist/services/xrpl/xrpl.adapters.js +288 -0
- package/dist/services/xrpl/xrpl.adapters.js.map +1 -0
- package/dist/services/xrpl/xrpl.http-adapters.d.ts +14 -0
- package/dist/services/xrpl/xrpl.http-adapters.d.ts.map +1 -0
- package/dist/services/xrpl/xrpl.http-adapters.js +83 -0
- package/dist/services/xrpl/xrpl.http-adapters.js.map +1 -0
- package/dist/services/xrpl/xrpl.ports.d.ts +36 -0
- package/dist/services/xrpl/xrpl.ports.d.ts.map +1 -0
- package/dist/services/xrpl/xrpl.ports.js +2 -0
- package/dist/services/xrpl/xrpl.ports.js.map +1 -0
- package/dist/services/xrpl/xrpl.service.d.ts +124 -0
- package/dist/services/xrpl/xrpl.service.d.ts.map +1 -0
- package/dist/services/xrpl/xrpl.service.js +370 -0
- package/dist/services/xrpl/xrpl.service.js.map +1 -0
- package/dist/services/xrpl/xrpl.types.d.ts +131 -0
- package/dist/services/xrpl/xrpl.types.d.ts.map +1 -0
- package/dist/services/xrpl/xrpl.types.js +30 -0
- package/dist/services/xrpl/xrpl.types.js.map +1 -0
- package/dist/transport/index.d.ts +4 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +3 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/split-params.d.ts +14 -0
- package/dist/transport/split-params.d.ts.map +1 -0
- package/dist/transport/split-params.js +28 -0
- package/dist/transport/split-params.js.map +1 -0
- package/dist/transport/transport.types.d.ts +11 -0
- package/dist/transport/transport.types.d.ts.map +1 -0
- package/dist/transport/transport.types.js +2 -0
- package/dist/transport/transport.types.js.map +1 -0
- package/dist/transport/typed-transport.d.ts +38 -0
- package/dist/transport/typed-transport.d.ts.map +1 -0
- package/dist/transport/typed-transport.js +78 -0
- package/dist/transport/typed-transport.js.map +1 -0
- package/dist/type-utils/index.d.ts +4 -0
- package/dist/type-utils/index.d.ts.map +1 -0
- package/dist/type-utils/index.js +4 -0
- package/dist/type-utils/index.js.map +1 -0
- package/dist/type-utils/optional-except-for.d.ts +2 -0
- package/dist/type-utils/optional-except-for.d.ts.map +1 -0
- package/dist/type-utils/optional-except-for.js +2 -0
- package/dist/type-utils/optional-except-for.js.map +1 -0
- package/dist/type-utils/prettify.d.ts +4 -0
- package/dist/type-utils/prettify.d.ts.map +1 -0
- package/dist/type-utils/prettify.js +2 -0
- package/dist/type-utils/prettify.js.map +1 -0
- package/dist/type-utils/required-except-for.d.ts +2 -0
- package/dist/type-utils/required-except-for.d.ts.map +1 -0
- package/dist/type-utils/required-except-for.js +2 -0
- package/dist/type-utils/required-except-for.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import axios, {} from "axios";
|
|
2
|
+
import canonicalize from "canonicalize";
|
|
3
|
+
import qs from "qs";
|
|
4
|
+
import { v4 as uuidv4 } from "uuid";
|
|
5
|
+
import { DEFAULT_TIMEOUT_MS } from "../../constants/index.js";
|
|
6
|
+
import { isObject } from "../../helpers/index.js";
|
|
7
|
+
import { CustodyError } from "../../models/custody-error.js";
|
|
8
|
+
import { AuthService } from "../auth/auth.service.js";
|
|
9
|
+
import { KeypairService } from "../keypairs/index.js";
|
|
10
|
+
import {} from "./api.service.types.js";
|
|
11
|
+
/**
|
|
12
|
+
* ApiService handles authenticated API requests and token management
|
|
13
|
+
*/
|
|
14
|
+
export class ApiService {
|
|
15
|
+
apiClient;
|
|
16
|
+
authFormData;
|
|
17
|
+
authService;
|
|
18
|
+
apiUrl;
|
|
19
|
+
challenge;
|
|
20
|
+
keypairService;
|
|
21
|
+
privateKey;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.authService = options.authService;
|
|
24
|
+
this.apiUrl = options.apiUrl;
|
|
25
|
+
this.authFormData = options.authFormData;
|
|
26
|
+
this.privateKey = options.privateKey;
|
|
27
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
28
|
+
// Create Axios instance for API requests
|
|
29
|
+
this.apiClient = axios.create({
|
|
30
|
+
baseURL: this.apiUrl,
|
|
31
|
+
timeout,
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
// Set params serializer to handle arrays the way Ripple Custody expects
|
|
37
|
+
this.apiClient.defaults.paramsSerializer = (params) => qs.stringify(params, { arrayFormat: "repeat" });
|
|
38
|
+
// Add request interceptor to inject JWT token into headers
|
|
39
|
+
this.apiClient.interceptors.request.use(async (config) => {
|
|
40
|
+
const token = await this.getValidToken(this.privateKey);
|
|
41
|
+
config.headers.Authorization = `Bearer ${token}`;
|
|
42
|
+
return config;
|
|
43
|
+
}, (error) => Promise.reject(error));
|
|
44
|
+
// Add response interceptor to handle 401 errors by refreshing the token and retrying once
|
|
45
|
+
this.apiClient.interceptors.response.use((response) => response, async (error) => {
|
|
46
|
+
const originalRequest = error.config;
|
|
47
|
+
// Only retry once and only on 401 responses
|
|
48
|
+
if (axios.isAxiosError(error) &&
|
|
49
|
+
error.response?.status === 401 &&
|
|
50
|
+
originalRequest &&
|
|
51
|
+
!originalRequest._retried) {
|
|
52
|
+
originalRequest._retried = true;
|
|
53
|
+
// Generate a fresh challenge and force-refresh the token
|
|
54
|
+
const token = await this.getValidToken(this.privateKey, true);
|
|
55
|
+
originalRequest.headers.Authorization = `Bearer ${token}`;
|
|
56
|
+
return this.apiClient(originalRequest);
|
|
57
|
+
}
|
|
58
|
+
return Promise.reject(error);
|
|
59
|
+
});
|
|
60
|
+
// Validate provided private key
|
|
61
|
+
const privateKeyAlgorithm = KeypairService.detectKeyType(this.privateKey);
|
|
62
|
+
if (privateKeyAlgorithm === "unknown") {
|
|
63
|
+
throw new Error("Unsupported private key algorithm. Please provide a valid private key.");
|
|
64
|
+
}
|
|
65
|
+
// Initialize keypair service for signing
|
|
66
|
+
this.keypairService = new KeypairService(privateKeyAlgorithm);
|
|
67
|
+
// Use provided challenge or generate a new one
|
|
68
|
+
this.challenge = this.authFormData.challenge ? this.authFormData.challenge : uuidv4();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Retrieves a valid JWT token, refreshing if needed.
|
|
72
|
+
* @param privateKey - The private key for signing the challenge.
|
|
73
|
+
* @param forceRefresh - Whether to force a token refresh.
|
|
74
|
+
* @returns {Promise<string>} The valid JWT token.
|
|
75
|
+
*/
|
|
76
|
+
async getValidToken(privateKey, forceRefresh = false) {
|
|
77
|
+
if (forceRefresh || this.authService.isTokenExpired()) {
|
|
78
|
+
// Generate a fresh challenge for each token refresh to avoid stale challenge rejection
|
|
79
|
+
this.challenge = this.authFormData.challenge ? this.authFormData.challenge : uuidv4();
|
|
80
|
+
const authData = {
|
|
81
|
+
signature: this.keypairService.sign(privateKey, this.challenge),
|
|
82
|
+
challenge: this.challenge,
|
|
83
|
+
publicKey: this.authFormData.publicKey,
|
|
84
|
+
};
|
|
85
|
+
return await this.authService.getToken(authData);
|
|
86
|
+
}
|
|
87
|
+
return this.authService.getCurrentToken() || "";
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Makes a GET request to the API.
|
|
91
|
+
* @param url - The endpoint URL.
|
|
92
|
+
* @returns {Promise<T>} The response data.
|
|
93
|
+
* @throws {CustodyError} If the request fails with a typed error response.
|
|
94
|
+
*/
|
|
95
|
+
async get(url, params) {
|
|
96
|
+
try {
|
|
97
|
+
const response = await this.apiClient.get(url, { params });
|
|
98
|
+
return response.data;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (axios.isAxiosError(error)) {
|
|
102
|
+
// Check if the error response contains the expected error structure
|
|
103
|
+
const errorData = error.response?.data;
|
|
104
|
+
if (isObject(errorData)) {
|
|
105
|
+
throw new CustodyError(errorData, error.response?.status, error);
|
|
106
|
+
}
|
|
107
|
+
// Fallback for unexpected error formats
|
|
108
|
+
throw new CustodyError({ reason: `GET API request failed: ${error.message}` }, error.response?.status, error);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Re-throw non-Axios errors as CustodyError
|
|
112
|
+
throw new CustodyError({ reason: error instanceof Error ? error.message : "Unknown error occurred" }, undefined, error instanceof Error ? error : undefined);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Makes a POST request to the API.
|
|
118
|
+
* @param url - The endpoint URL.
|
|
119
|
+
* @param body - The request payload.
|
|
120
|
+
* @param config - Axios config; set `sign: false` to skip canonicalization/signing.
|
|
121
|
+
* @returns {Promise<T>} The response data.
|
|
122
|
+
* @throws {CustodyError} If the request fails with a typed error response.
|
|
123
|
+
*/
|
|
124
|
+
async post(url, body, config) {
|
|
125
|
+
const { sign, ...rest } = config ?? {};
|
|
126
|
+
// Preserve `undefined` when no config was passed so axios receives its own default
|
|
127
|
+
const axiosConfig = config ? rest : undefined;
|
|
128
|
+
try {
|
|
129
|
+
// Sign the request (default) unless the caller opted out
|
|
130
|
+
if (sign !== false && body && (!body.signature || body.signature === "")) {
|
|
131
|
+
// Canonicalize the request body
|
|
132
|
+
// @ts-expect-error canonicalize works fine but has complex types
|
|
133
|
+
const canonicalizedRequest = canonicalize(body.request);
|
|
134
|
+
if (!canonicalizedRequest) {
|
|
135
|
+
throw new CustodyError({ reason: "Failed to canonicalize request body" });
|
|
136
|
+
}
|
|
137
|
+
// Sign the canonicalized request
|
|
138
|
+
const signature = this.keypairService.sign(this.privateKey, canonicalizedRequest);
|
|
139
|
+
body.signature = signature;
|
|
140
|
+
}
|
|
141
|
+
const response = await this.apiClient.post(url, body, axiosConfig);
|
|
142
|
+
return response.data;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
if (axios.isAxiosError(error)) {
|
|
146
|
+
// Check if the error response contains the expected error structure
|
|
147
|
+
const errorData = error.response?.data;
|
|
148
|
+
if (isObject(errorData)) {
|
|
149
|
+
throw new CustodyError(errorData, error.response?.status, error);
|
|
150
|
+
}
|
|
151
|
+
// Fallback for unexpected error formats
|
|
152
|
+
throw new CustodyError({ reason: `POST API request failed: ${error.message}` }, error.response?.status, error);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Re-throw non-Axios errors as CustodyError
|
|
156
|
+
throw new CustodyError({ reason: error instanceof Error ? error.message : "Unknown error occurred" }, undefined, error instanceof Error ? error : undefined);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Makes a PUT request to the API.
|
|
162
|
+
* @param url - The endpoint URL.
|
|
163
|
+
* @param body - The request payload (sent as-is; no canonicalization or signing).
|
|
164
|
+
* @returns {Promise<T>} The response data.
|
|
165
|
+
* @throws {CustodyError} If the request fails with a typed error response.
|
|
166
|
+
*/
|
|
167
|
+
async put(url, body, config) {
|
|
168
|
+
try {
|
|
169
|
+
const response = await this.apiClient.put(url, body, config);
|
|
170
|
+
return response.data;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (axios.isAxiosError(error)) {
|
|
174
|
+
const errorData = error.response?.data;
|
|
175
|
+
if (isObject(errorData)) {
|
|
176
|
+
throw new CustodyError(errorData, error.response?.status, error);
|
|
177
|
+
}
|
|
178
|
+
throw new CustodyError({ reason: `PUT API request failed: ${error.message}` }, error.response?.status, error);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
throw new CustodyError({ reason: error instanceof Error ? error.message : "Unknown error occurred" }, undefined, error instanceof Error ? error : undefined);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Makes a PATCH request to the API.
|
|
187
|
+
* @param url - The endpoint URL.
|
|
188
|
+
* @param body - The request payload (sent as-is; no canonicalization or signing).
|
|
189
|
+
* @returns {Promise<T>} The response data.
|
|
190
|
+
* @throws {CustodyError} If the request fails with a typed error response.
|
|
191
|
+
*/
|
|
192
|
+
async patch(url, body, config) {
|
|
193
|
+
try {
|
|
194
|
+
const response = await this.apiClient.patch(url, body, config);
|
|
195
|
+
return response.data;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (axios.isAxiosError(error)) {
|
|
199
|
+
const errorData = error.response?.data;
|
|
200
|
+
if (isObject(errorData)) {
|
|
201
|
+
throw new CustodyError(errorData, error.response?.status, error);
|
|
202
|
+
}
|
|
203
|
+
throw new CustodyError({ reason: `PATCH API request failed: ${error.message}` }, error.response?.status, error);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
throw new CustodyError({ reason: error instanceof Error ? error.message : "Unknown error occurred" }, undefined, error instanceof Error ? error : undefined);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Makes a DELETE request to the API.
|
|
212
|
+
* @param url - The endpoint URL.
|
|
213
|
+
* @returns {Promise<T>} The response data.
|
|
214
|
+
* @throws {CustodyError} If the request fails with a typed error response.
|
|
215
|
+
*/
|
|
216
|
+
async delete(url, config) {
|
|
217
|
+
try {
|
|
218
|
+
const response = await this.apiClient.delete(url, config);
|
|
219
|
+
return response.data;
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
if (axios.isAxiosError(error)) {
|
|
223
|
+
const errorData = error.response?.data;
|
|
224
|
+
if (isObject(errorData)) {
|
|
225
|
+
throw new CustodyError(errorData, error.response?.status, error);
|
|
226
|
+
}
|
|
227
|
+
throw new CustodyError({ reason: `DELETE API request failed: ${error.message}` }, error.response?.status, error);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
throw new CustodyError({ reason: error instanceof Error ? error.message : "Unknown error occurred" }, undefined, error instanceof Error ? error : undefined);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=api.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.service.js","sourceRoot":"","sources":["../../../src/services/apis/api.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AuthFormData, AuthService } from "../auth/index.js";
|
|
2
|
+
import { type KeypairAlgorithm } from "../keypairs/index.js";
|
|
3
|
+
export type PartialAuthFormData = Pick<AuthFormData, "publicKey"> & Partial<Pick<AuthFormData, "challenge">>;
|
|
4
|
+
export type ApiServiceOptions = {
|
|
5
|
+
authFormData: PartialAuthFormData;
|
|
6
|
+
authService: AuthService;
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
keypairAlgorithm?: KeypairAlgorithm;
|
|
9
|
+
privateKey: string;
|
|
10
|
+
/**
|
|
11
|
+
* Request timeout in milliseconds.
|
|
12
|
+
* If not provided, defaults to 30 seconds.
|
|
13
|
+
*/
|
|
14
|
+
timeout?: number;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=api.service.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.service.types.d.ts","sourceRoot":"","sources":["../../../src/services/apis/api.service.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AAE1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.service.types.js","sourceRoot":"","sources":["../../../src/services/apis/api.service.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAyB,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/apis/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/apis/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type AuthFormData } from "./auth.service.types.js";
|
|
2
|
+
export type AuthServiceOptions = {
|
|
3
|
+
/** The full authentication token endpoint URL (e.g., https://auth.example.com/token) */
|
|
4
|
+
authUrl: string;
|
|
5
|
+
/**
|
|
6
|
+
* Request timeout in milliseconds.
|
|
7
|
+
* @default 30000 (30 seconds)
|
|
8
|
+
*/
|
|
9
|
+
timeout?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare class AuthService {
|
|
12
|
+
private authClient;
|
|
13
|
+
private accessToken;
|
|
14
|
+
private tokenExpiration;
|
|
15
|
+
private readonly DEFAULT_TOKEN_VALIDITY;
|
|
16
|
+
/**
|
|
17
|
+
* Stores the in-flight token refresh promise to prevent concurrent refresh requests.
|
|
18
|
+
* When multiple requests need a token refresh simultaneously, they will all await
|
|
19
|
+
* the same promise instead of triggering multiple auth requests.
|
|
20
|
+
*/
|
|
21
|
+
private tokenRefreshPromise;
|
|
22
|
+
constructor(options: AuthServiceOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Fetch a JWT token using the provided authentication data from Ripple Custody backend.
|
|
25
|
+
* @param authData - The authentication data (challenge, publicKey, signature)
|
|
26
|
+
* @returns {Promise<string>} The JWT token.
|
|
27
|
+
* @throws {CustodyError} If authentication fails.
|
|
28
|
+
*/
|
|
29
|
+
private fetchToken;
|
|
30
|
+
/**
|
|
31
|
+
* Get a valid JWT token, refreshing if expired or missing.
|
|
32
|
+
*
|
|
33
|
+
* This method handles concurrent token refresh requests by ensuring only one
|
|
34
|
+
* refresh request is made at a time. If multiple callers need a token refresh
|
|
35
|
+
* simultaneously, they will all await the same promise.
|
|
36
|
+
*/
|
|
37
|
+
getToken(authData: AuthFormData): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Extract the `exp` (expiration) claim from a JWT token's payload.
|
|
40
|
+
* @returns The `exp` value in seconds (Unix timestamp), or null if extraction fails.
|
|
41
|
+
*/
|
|
42
|
+
private extractExpFromJwt;
|
|
43
|
+
/**
|
|
44
|
+
* Check if the current token is expired or about to expire.
|
|
45
|
+
*/
|
|
46
|
+
isTokenExpired(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Get the current JWT token, if available.
|
|
49
|
+
*/
|
|
50
|
+
getCurrentToken(): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Get the current JWT token expiration, if available.
|
|
53
|
+
*/
|
|
54
|
+
getTokenExpiration(): number | null;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=auth.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth/auth.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,yBAAyB,CAAA;AAE9E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAE5D;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAA+B;gBAE9C,OAAO,EAAE,kBAAkB;IAavC;;;;;OAKG;YACW,UAAU;IA+BxB;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBvD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,cAAc,IAAI,OAAO;IASzB;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;CAGpC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import axios, {} from "axios";
|
|
2
|
+
import { DEFAULT_TIMEOUT_MS } from "../../constants/index.js";
|
|
3
|
+
import { CustodyError } from "../../models/custody-error.js";
|
|
4
|
+
import {} from "./auth.service.types.js";
|
|
5
|
+
export class AuthService {
|
|
6
|
+
authClient;
|
|
7
|
+
accessToken = "";
|
|
8
|
+
tokenExpiration = null; // timestamp in milliseconds
|
|
9
|
+
DEFAULT_TOKEN_VALIDITY = 4 * 60 * 60 * 1000; // 4 hours in milliseconds
|
|
10
|
+
/**
|
|
11
|
+
* Stores the in-flight token refresh promise to prevent concurrent refresh requests.
|
|
12
|
+
* When multiple requests need a token refresh simultaneously, they will all await
|
|
13
|
+
* the same promise instead of triggering multiple auth requests.
|
|
14
|
+
*/
|
|
15
|
+
tokenRefreshPromise = null;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
const { authUrl, timeout = DEFAULT_TIMEOUT_MS } = options;
|
|
18
|
+
// Initialize Axios client for auth requests
|
|
19
|
+
this.authClient = axios.create({
|
|
20
|
+
baseURL: authUrl,
|
|
21
|
+
timeout,
|
|
22
|
+
headers: {
|
|
23
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Fetch a JWT token using the provided authentication data from Ripple Custody backend.
|
|
29
|
+
* @param authData - The authentication data (challenge, publicKey, signature)
|
|
30
|
+
* @returns {Promise<string>} The JWT token.
|
|
31
|
+
* @throws {CustodyError} If authentication fails.
|
|
32
|
+
*/
|
|
33
|
+
async fetchToken(authData) {
|
|
34
|
+
// Prepare form data for token request
|
|
35
|
+
const formData = new URLSearchParams();
|
|
36
|
+
formData.append("grant_type", "password");
|
|
37
|
+
formData.append("client_id", "customer_api");
|
|
38
|
+
formData.append("signature", authData.signature);
|
|
39
|
+
formData.append("challenge", authData.challenge);
|
|
40
|
+
formData.append("public_key", authData.publicKey);
|
|
41
|
+
try {
|
|
42
|
+
// Send POST request to obtain token
|
|
43
|
+
const response = await this.authClient.post("", formData);
|
|
44
|
+
this.accessToken = response.data.access_token;
|
|
45
|
+
// Extract expiration from the JWT's exp claim, fall back to default validity
|
|
46
|
+
const exp = this.extractExpFromJwt(this.accessToken);
|
|
47
|
+
this.tokenExpiration = exp ? exp * 1000 : Date.now() + this.DEFAULT_TOKEN_VALIDITY;
|
|
48
|
+
return this.accessToken;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (axios.isAxiosError(error) && error.response) {
|
|
52
|
+
const errorData = error.response.data;
|
|
53
|
+
throw new CustodyError(errorData, error.response.status, error);
|
|
54
|
+
}
|
|
55
|
+
throw new CustodyError({ reason: "Authentication request failed" }, undefined, error instanceof Error ? error : undefined);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get a valid JWT token, refreshing if expired or missing.
|
|
60
|
+
*
|
|
61
|
+
* This method handles concurrent token refresh requests by ensuring only one
|
|
62
|
+
* refresh request is made at a time. If multiple callers need a token refresh
|
|
63
|
+
* simultaneously, they will all await the same promise.
|
|
64
|
+
*/
|
|
65
|
+
async getToken(authData) {
|
|
66
|
+
// Return existing valid token
|
|
67
|
+
if (this.accessToken && !this.isTokenExpired()) {
|
|
68
|
+
return this.accessToken;
|
|
69
|
+
}
|
|
70
|
+
// If a refresh is already in progress, wait for it
|
|
71
|
+
if (this.tokenRefreshPromise) {
|
|
72
|
+
return this.tokenRefreshPromise;
|
|
73
|
+
}
|
|
74
|
+
// Start a new token refresh and store the promise
|
|
75
|
+
this.tokenRefreshPromise = this.fetchToken(authData).finally(() => {
|
|
76
|
+
// Clear the promise once completed (success or failure)
|
|
77
|
+
this.tokenRefreshPromise = null;
|
|
78
|
+
});
|
|
79
|
+
return this.tokenRefreshPromise;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract the `exp` (expiration) claim from a JWT token's payload.
|
|
83
|
+
* @returns The `exp` value in seconds (Unix timestamp), or null if extraction fails.
|
|
84
|
+
*/
|
|
85
|
+
extractExpFromJwt(token) {
|
|
86
|
+
try {
|
|
87
|
+
const payload = token.split(".")[1];
|
|
88
|
+
if (!payload)
|
|
89
|
+
return null;
|
|
90
|
+
const decoded = JSON.parse(Buffer.from(payload, "base64url").toString());
|
|
91
|
+
return typeof decoded.exp === "number" ? decoded.exp : null;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if the current token is expired or about to expire.
|
|
99
|
+
*/
|
|
100
|
+
isTokenExpired() {
|
|
101
|
+
if (!this.tokenExpiration)
|
|
102
|
+
return true;
|
|
103
|
+
// Consider token expired 5 minutes before actual expiration for safety
|
|
104
|
+
const bufferTime = 5 * 60 * 1000;
|
|
105
|
+
return Date.now() > this.tokenExpiration - bufferTime;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the current JWT token, if available.
|
|
109
|
+
*/
|
|
110
|
+
getCurrentToken() {
|
|
111
|
+
return this.accessToken;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the current JWT token expiration, if available.
|
|
115
|
+
*/
|
|
116
|
+
getTokenExpiration() {
|
|
117
|
+
return this.tokenExpiration;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.types.d.ts","sourceRoot":"","sources":["../../../src/services/auth/auth.service.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.types.js","sourceRoot":"","sources":["../../../src/services/auth/auth.service.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { components, operations } from "../../models/custody-types.js";
|
|
2
|
+
import type { Prettify } from "../../type-utils/index.js";
|
|
3
|
+
import type { Core_HarmonizeEvent, Core_HarmonizeEventPayload } from "../events/index.js";
|
|
4
|
+
export type GetChannelsPathParams = operations["getAllChannels"]["parameters"]["path"];
|
|
5
|
+
export type GetChannelPathParams = operations["getChannel"]["parameters"]["path"];
|
|
6
|
+
export type CreateChannelPathParams = operations["createChannel"]["parameters"]["path"];
|
|
7
|
+
export type UpdateChannelPathParams = operations["updateChannel"]["parameters"]["path"];
|
|
8
|
+
export type DeleteChannelPathParams = operations["deleteChannel"]["parameters"]["path"];
|
|
9
|
+
export type TestChannelPathParams = operations["testChannel"]["parameters"]["path"];
|
|
10
|
+
export type GetChannelEventsPathParams = operations["getAllChannelEvents"]["parameters"]["path"];
|
|
11
|
+
export type GetChannelEventPathParams = operations["getEvent"]["parameters"]["path"];
|
|
12
|
+
export type GetAllChannelsEventsPathParams = operations["getAllEvents"]["parameters"]["path"];
|
|
13
|
+
export type EDS_Channel = components["schemas"]["EDS_Channel"];
|
|
14
|
+
export type EDS_Event = components["schemas"]["EDS_Event"];
|
|
15
|
+
export type EDS_ChannelUpdate = components["schemas"]["EDS_ChannelUpdate"];
|
|
16
|
+
export type EDS_WebhookChannelCreate = Omit<components["schemas"]["EDS_ChannelCreate"], "type" | "supportedEventTypes"> & {
|
|
17
|
+
supportedEventTypes: (Core_HarmonizeEventPayload["type"] | (string & {}))[];
|
|
18
|
+
type: "WEBHOOK";
|
|
19
|
+
url: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Request body for `channels.create`. Modeled as a discriminated union so new
|
|
23
|
+
* channel types (e.g. non-WEBHOOK) can be added without a breaking change.
|
|
24
|
+
*/
|
|
25
|
+
export type EDS_ChannelCreate = Prettify<EDS_WebhookChannelCreate>;
|
|
26
|
+
/**
|
|
27
|
+
* Body shape delivered to a webhook channel's URL. The outer envelope adds a
|
|
28
|
+
* W3C `traceId` for distributed tracing; `msg` is a fully-parsed
|
|
29
|
+
* `Core_HarmonizeEvent` (its `payload` is an object, not a JSON string — this
|
|
30
|
+
* is distinct from `EDS_Event`, which the REST API returns with `payload` as
|
|
31
|
+
* a string and which is what `parseEventPayload` operates on).
|
|
32
|
+
*/
|
|
33
|
+
export type EDS_WebhookEvent = {
|
|
34
|
+
traceId: string;
|
|
35
|
+
msg: Core_HarmonizeEvent;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=channels.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.types.d.ts","sourceRoot":"","sources":["../../../src/services/channels/channels.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAGzF,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACtF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACjF,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACvF,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACvF,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACvF,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACnF,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAChG,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACpF,MAAM,MAAM,8BAA8B,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAG7F,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAA;AAC9D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAA;AAC1D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAA;AAM1E,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAC1C,MAAM,GAAG,qBAAqB,CAC/B,GAAG;IACF,mBAAmB,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAA;IAC3E,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAA;AAElE;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,mBAAmB,CAAA;CACzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.types.js","sourceRoot":"","sources":["../../../src/services/channels/channels.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/channels/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/channels/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Core_HarmonizeEvent } from "../events/events.types.js";
|
|
2
|
+
import type { EDS_Event } from "./channels.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parses the JSON-encoded `payload` on an `EDS_Event` into a fully typed
|
|
5
|
+
* `Core_HarmonizeEvent`. TypeScript narrows the inner `payload.type`
|
|
6
|
+
* discriminator so callers can switch on the event variant.
|
|
7
|
+
*
|
|
8
|
+
* Throws `CustodyError` when `payload` is missing, is not valid JSON, or
|
|
9
|
+
* does not contain a `Core_HarmonizeEvent` with a string `payload.type`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseEventPayload(event: EDS_Event): Core_HarmonizeEvent;
|
|
12
|
+
//# sourceMappingURL=parse-event-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-event-payload.d.ts","sourceRoot":"","sources":["../../../src/services/channels/parse-event-payload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB,CAuBvE"}
|