@temboplus/afloat 0.1.57 → 0.1.59
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 +7 -0
- package/README.md +42 -246
- package/esm/_dnt.test_shims.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/almost_equals.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/array_includes.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/assert.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/assertion_error.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/equal.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/equals.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/exists.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/fail.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/false.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/greater.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/greater_or_equal.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/instance_of.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/is_error.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/less.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/less_or_equal.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/match.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/not_equals.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/not_instance_of.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/not_match.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/not_strict_equals.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/object_match.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/rejects.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/strict_equals.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/string_includes.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/throws.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/unimplemented.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.10/unreachable.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +1 -0
- package/esm/mod.d.ts +8 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +7 -0
- package/esm/package.json +3 -0
- package/{dist/lib/error/error.api.d.ts → esm/src/errors/api_error.d.ts} +1 -0
- package/esm/src/errors/api_error.d.ts.map +1 -0
- package/esm/src/errors/api_error.js +90 -0
- package/esm/src/errors/index.d.ts +3 -0
- package/esm/src/errors/index.d.ts.map +1 -0
- package/esm/src/errors/index.js +2 -0
- package/{dist/lib/error/error.permission.d.ts → esm/src/errors/permission_error.d.ts} +2 -1
- package/esm/src/errors/permission_error.d.ts.map +1 -0
- package/esm/src/errors/permission_error.js +70 -0
- package/{dist/features/admin/admin.contract.d.ts → esm/src/features/admin/contract.d.ts} +77 -41
- package/esm/src/features/admin/contract.d.ts.map +1 -0
- package/esm/src/features/admin/contract.js +210 -0
- package/esm/src/features/admin/index.d.ts +4 -0
- package/esm/src/features/admin/index.d.ts.map +1 -0
- package/esm/src/features/admin/index.js +3 -0
- package/esm/src/features/admin/repository.d.ts +114 -0
- package/esm/src/features/admin/repository.d.ts.map +1 -0
- package/esm/src/features/admin/repository.js +248 -0
- package/{dist/features/admin/admin.dtos.d.ts → esm/src/features/admin/schemas.d.ts} +9 -8
- package/esm/src/features/admin/schemas.d.ts.map +1 -0
- package/esm/src/features/admin/schemas.js +206 -0
- package/{dist/features/auth/access/access.api-contract.d.ts → esm/src/features/auth/access/contract.d.ts} +1 -0
- package/esm/src/features/auth/access/contract.d.ts.map +1 -0
- package/esm/src/features/auth/access/contract.js +14 -0
- package/esm/src/features/auth/access/repository.d.ts +11 -0
- package/esm/src/features/auth/access/repository.d.ts.map +1 -0
- package/esm/src/features/auth/access/repository.js +25 -0
- package/{dist/features/auth/auth.contract.d.ts → esm/src/features/auth/contract.d.ts} +8 -12
- package/esm/src/features/auth/contract.d.ts.map +1 -0
- package/esm/src/features/auth/contract.js +43 -0
- package/{dist/features/auth/identity/identity.api-contract.d.ts → esm/src/features/auth/identity/contract.d.ts} +1 -0
- package/esm/src/features/auth/identity/contract.d.ts.map +1 -0
- package/esm/src/features/auth/identity/contract.js +17 -0
- package/esm/src/features/auth/identity/repository.d.ts +22 -0
- package/esm/src/features/auth/identity/repository.d.ts.map +1 -0
- package/esm/src/features/auth/identity/repository.js +30 -0
- package/esm/src/features/auth/index.d.ts +6 -0
- package/esm/src/features/auth/index.d.ts.map +1 -0
- package/esm/src/features/auth/index.js +5 -0
- package/esm/src/features/auth/manager.d.ts +105 -0
- package/esm/src/features/auth/manager.d.ts.map +1 -0
- package/esm/src/features/auth/manager.js +181 -0
- package/{dist/features/auth/profile/profile.api-contract.d.ts → esm/src/features/auth/profile/contract.d.ts} +6 -8
- package/esm/src/features/auth/profile/contract.d.ts.map +1 -0
- package/esm/src/features/auth/profile/contract.js +14 -0
- package/esm/src/features/auth/profile/repository.d.ts +11 -0
- package/esm/src/features/auth/profile/repository.d.ts.map +1 -0
- package/esm/src/features/auth/profile/repository.js +25 -0
- package/esm/src/features/auth/repository.d.ts +30 -0
- package/esm/src/features/auth/repository.d.ts.map +1 -0
- package/esm/src/features/auth/repository.js +69 -0
- package/{dist/features/auth/storage/client-store.d.ts → esm/src/features/auth/storage/client_store.d.ts} +3 -2
- package/esm/src/features/auth/storage/client_store.d.ts.map +1 -0
- package/esm/src/features/auth/storage/client_store.js +46 -0
- package/{dist/features/auth/storage/client-token-handler.d.ts → esm/src/features/auth/storage/client_token_handler.d.ts} +2 -1
- package/esm/src/features/auth/storage/client_token_handler.d.ts.map +1 -0
- package/esm/src/features/auth/storage/client_token_handler.js +36 -0
- package/esm/src/features/auth/storage/server_store.d.ts +24 -0
- package/esm/src/features/auth/storage/server_store.d.ts.map +1 -0
- package/esm/src/features/auth/storage/server_store.js +34 -0
- package/esm/src/features/auth/storage/server_token_handler.d.ts +36 -0
- package/esm/src/features/auth/storage/server_token_handler.d.ts.map +1 -0
- package/esm/src/features/auth/storage/server_token_handler.js +115 -0
- package/{dist → esm/src}/features/auth/storage/types.d.ts +2 -1
- package/esm/src/features/auth/storage/types.d.ts.map +1 -0
- package/esm/src/features/auth/storage/types.js +1 -0
- package/{dist/features/contact/contact.api-contract.d.ts → esm/src/features/contact/contract.d.ts} +45 -101
- package/esm/src/features/contact/contract.d.ts.map +1 -0
- package/esm/src/features/contact/contract.js +49 -0
- package/esm/src/features/contact/index.d.ts +2 -0
- package/esm/src/features/contact/index.d.ts.map +1 -0
- package/esm/src/features/contact/index.js +1 -0
- package/esm/src/features/contact/repository.d.ts +58 -0
- package/esm/src/features/contact/repository.d.ts.map +1 -0
- package/esm/src/features/contact/repository.js +108 -0
- package/{dist/features/payout/payout.api-contract.d.ts → esm/src/features/payout/contract.d.ts} +187 -351
- package/esm/src/features/payout/contract.d.ts.map +1 -0
- package/esm/src/features/payout/contract.js +75 -0
- package/esm/src/features/payout/index.d.ts +2 -0
- package/esm/src/features/payout/index.d.ts.map +1 -0
- package/esm/src/features/payout/index.js +1 -0
- package/esm/src/features/payout/repository.d.ts +67 -0
- package/esm/src/features/payout/repository.d.ts.map +1 -0
- package/esm/src/features/payout/repository.js +163 -0
- package/{dist/features/wallet/wallet.contract.d.ts → esm/src/features/wallet/contract.d.ts} +7 -9
- package/esm/src/features/wallet/contract.d.ts.map +1 -0
- package/esm/src/features/wallet/contract.js +38 -0
- package/esm/src/features/wallet/index.d.ts +2 -0
- package/esm/src/features/wallet/index.d.ts.map +1 -0
- package/esm/src/features/wallet/index.js +1 -0
- package/esm/src/features/wallet/repository.d.ts +57 -0
- package/esm/src/features/wallet/repository.d.ts.map +1 -0
- package/esm/src/features/wallet/repository.js +93 -0
- package/{dist/models/contact.model.d.ts → esm/src/models/contact/derivatives/contact.d.ts} +16 -23
- package/esm/src/models/contact/derivatives/contact.d.ts.map +1 -0
- package/esm/src/models/contact/derivatives/contact.js +266 -0
- package/esm/src/models/contact/derivatives/contact.test.d.ts.map +1 -0
- package/esm/src/models/contact/derivatives/contact_info.d.ts +188 -0
- package/esm/src/models/contact/derivatives/contact_info.d.ts.map +1 -0
- package/esm/src/models/contact/derivatives/contact_info.js +255 -0
- package/esm/src/models/contact/derivatives/contact_info.test.d.ts.map +1 -0
- package/esm/src/models/contact/index.d.ts +5 -0
- package/esm/src/models/contact/index.d.ts.map +1 -0
- package/esm/src/models/contact/index.js +4 -0
- package/esm/src/models/contact/schemas.d.ts +66 -0
- package/esm/src/models/contact/schemas.d.ts.map +1 -0
- package/esm/src/models/contact/schemas.js +64 -0
- package/esm/src/models/contact/validation.d.ts +37 -0
- package/esm/src/models/contact/validation.d.ts.map +1 -0
- package/esm/src/models/contact/validation.js +146 -0
- package/esm/src/models/contact/validation.test.d.ts.map +1 -0
- package/esm/src/models/index.d.ts +7 -0
- package/esm/src/models/index.d.ts.map +1 -0
- package/esm/src/models/index.js +6 -0
- package/esm/src/models/payout/api.d.ts +29 -0
- package/esm/src/models/payout/api.d.ts.map +1 -0
- package/esm/src/models/payout/api.js +1 -0
- package/esm/src/models/payout/channel.d.ts +58 -0
- package/esm/src/models/payout/channel.d.ts.map +1 -0
- package/esm/src/models/payout/channel.js +53 -0
- package/{dist/models/payout.model.d.ts → esm/src/models/payout/derivatives/payout.d.ts} +17 -13
- package/esm/src/models/payout/derivatives/payout.d.ts.map +1 -0
- package/esm/src/models/payout/derivatives/payout.js +265 -0
- package/esm/src/models/payout/derivatives/payout.test.d.ts.map +1 -0
- package/esm/src/models/payout/index.d.ts +6 -0
- package/esm/src/models/payout/index.d.ts.map +1 -0
- package/esm/src/models/payout/index.js +5 -0
- package/esm/src/models/payout/schemas.d.ts +156 -0
- package/esm/src/models/payout/schemas.d.ts.map +1 -0
- package/esm/src/models/payout/schemas.js +105 -0
- package/esm/src/models/payout/status.d.ts +33 -0
- package/esm/src/models/payout/status.d.ts.map +1 -0
- package/esm/src/models/payout/status.js +34 -0
- package/{dist → esm/src}/models/permission.d.ts +2 -1
- package/esm/src/models/permission.d.ts.map +1 -0
- package/esm/src/models/permission.js +50 -0
- package/{dist/models/role.model.d.ts → esm/src/models/role.d.ts} +10 -2
- package/esm/src/models/role.d.ts.map +1 -0
- package/esm/src/models/role.js +73 -0
- package/esm/src/models/user/authenticated-user.d.ts +77 -0
- package/esm/src/models/user/authenticated-user.d.ts.map +1 -0
- package/esm/src/models/user/authenticated-user.js +226 -0
- package/esm/src/models/user/index.d.ts +4 -0
- package/esm/src/models/user/index.d.ts.map +1 -0
- package/esm/src/models/user/index.js +3 -0
- package/{dist/models/managed-user.model.d.ts → esm/src/models/user/managed-user.d.ts} +3 -3
- package/esm/src/models/user/managed-user.d.ts.map +1 -0
- package/esm/src/models/user/managed-user.js +255 -0
- package/{dist/models/profile.model.d.ts → esm/src/models/user/profile.d.ts} +43 -37
- package/esm/src/models/user/profile.d.ts.map +1 -0
- package/esm/src/models/user/profile.js +334 -0
- package/esm/src/models/wallet/index.d.ts +4 -0
- package/esm/src/models/wallet/index.d.ts.map +1 -0
- package/esm/src/models/wallet/index.js +3 -0
- package/esm/src/models/wallet/schemas.d.ts +95 -0
- package/esm/src/models/wallet/schemas.d.ts.map +1 -0
- package/esm/src/models/wallet/schemas.js +35 -0
- package/esm/src/models/wallet/statement_entry.d.ts +160 -0
- package/esm/src/models/wallet/statement_entry.d.ts.map +1 -0
- package/esm/src/models/wallet/statement_entry.js +255 -0
- package/{dist/models/wallet.model.d.ts → esm/src/models/wallet/wallet.d.ts} +46 -3
- package/esm/src/models/wallet/wallet.d.ts.map +1 -0
- package/esm/src/models/wallet/wallet.js +279 -0
- package/{dist/lib/api/base-repository.d.ts → esm/src/shared/base_repository.d.ts} +42 -137
- package/esm/src/shared/base_repository.d.ts.map +1 -0
- package/esm/src/shared/base_repository.js +153 -0
- package/{dist/lib/api/common-responses.d.ts → esm/src/shared/common_responses.d.ts} +1 -0
- package/esm/src/shared/common_responses.d.ts.map +1 -0
- package/esm/src/shared/common_responses.js +10 -0
- package/esm/src/shared/index.d.ts +3 -0
- package/esm/src/shared/index.d.ts.map +1 -0
- package/esm/src/shared/index.js +2 -0
- package/esm/src/shared/token_required_repository.d.ts +78 -0
- package/esm/src/shared/token_required_repository.d.ts.map +1 -0
- package/esm/src/shared/token_required_repository.js +128 -0
- package/package.json +25 -47
- package/script/_dnt.test_shims.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/almost_equals.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/array_includes.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/assert.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/assertion_error.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/equal.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/equals.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/exists.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/fail.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/false.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/greater.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/greater_or_equal.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/instance_of.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/is_error.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/less.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/less_or_equal.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/match.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/not_equals.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/not_instance_of.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/not_match.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/not_strict_equals.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/object_match.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/rejects.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/strict_equals.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/string_includes.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/throws.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/unimplemented.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/assert/1.0.10/unreachable.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +1 -0
- package/script/mod.d.ts +8 -0
- package/script/mod.d.ts.map +1 -0
- package/script/mod.js +23 -0
- package/script/package.json +3 -0
- package/script/src/errors/api_error.d.ts +63 -0
- package/script/src/errors/api_error.d.ts.map +1 -0
- package/script/src/errors/api_error.js +94 -0
- package/script/src/errors/index.d.ts +3 -0
- package/script/src/errors/index.d.ts.map +1 -0
- package/script/src/errors/index.js +18 -0
- package/script/src/errors/permission_error.d.ts +48 -0
- package/script/src/errors/permission_error.d.ts.map +1 -0
- package/script/src/errors/permission_error.js +74 -0
- package/script/src/features/admin/contract.d.ts +842 -0
- package/script/src/features/admin/contract.d.ts.map +1 -0
- package/script/src/features/admin/contract.js +213 -0
- package/script/src/features/admin/index.d.ts +4 -0
- package/script/src/features/admin/index.d.ts.map +1 -0
- package/script/src/features/admin/index.js +19 -0
- package/script/src/features/admin/repository.d.ts +114 -0
- package/script/src/features/admin/repository.d.ts.map +1 -0
- package/script/src/features/admin/repository.js +252 -0
- package/script/src/features/admin/schemas.d.ts +146 -0
- package/script/src/features/admin/schemas.d.ts.map +1 -0
- package/script/src/features/admin/schemas.js +209 -0
- package/script/src/features/auth/access/contract.d.ts +14 -0
- package/script/src/features/auth/access/contract.d.ts.map +1 -0
- package/script/src/features/auth/access/contract.js +17 -0
- package/script/src/features/auth/access/repository.d.ts +11 -0
- package/script/src/features/auth/access/repository.d.ts.map +1 -0
- package/script/src/features/auth/access/repository.js +29 -0
- package/script/src/features/auth/contract.d.ts +112 -0
- package/script/src/features/auth/contract.d.ts.map +1 -0
- package/script/src/features/auth/contract.js +46 -0
- package/script/src/features/auth/identity/contract.d.ts +23 -0
- package/script/src/features/auth/identity/contract.d.ts.map +1 -0
- package/script/src/features/auth/identity/contract.js +20 -0
- package/script/src/features/auth/identity/repository.d.ts +22 -0
- package/script/src/features/auth/identity/repository.d.ts.map +1 -0
- package/script/src/features/auth/identity/repository.js +34 -0
- package/script/src/features/auth/index.d.ts +6 -0
- package/script/src/features/auth/index.d.ts.map +1 -0
- package/script/src/features/auth/index.js +21 -0
- package/script/src/features/auth/manager.d.ts +105 -0
- package/script/src/features/auth/manager.d.ts.map +1 -0
- package/script/src/features/auth/manager.js +185 -0
- package/script/src/features/auth/profile/contract.d.ts +37 -0
- package/script/src/features/auth/profile/contract.d.ts.map +1 -0
- package/script/src/features/auth/profile/contract.js +17 -0
- package/script/src/features/auth/profile/repository.d.ts +11 -0
- package/script/src/features/auth/profile/repository.d.ts.map +1 -0
- package/script/src/features/auth/profile/repository.js +29 -0
- package/script/src/features/auth/repository.d.ts +30 -0
- package/script/src/features/auth/repository.d.ts.map +1 -0
- package/script/src/features/auth/repository.js +73 -0
- package/script/src/features/auth/storage/client_store.d.ts +30 -0
- package/script/src/features/auth/storage/client_store.d.ts.map +1 -0
- package/script/src/features/auth/storage/client_store.js +51 -0
- package/script/src/features/auth/storage/client_token_handler.d.ts +32 -0
- package/script/src/features/auth/storage/client_token_handler.d.ts.map +1 -0
- package/script/src/features/auth/storage/client_token_handler.js +40 -0
- package/script/src/features/auth/storage/server_store.d.ts +24 -0
- package/script/src/features/auth/storage/server_store.d.ts.map +1 -0
- package/script/src/features/auth/storage/server_store.js +38 -0
- package/script/src/features/auth/storage/server_token_handler.d.ts +36 -0
- package/script/src/features/auth/storage/server_token_handler.d.ts.map +1 -0
- package/script/src/features/auth/storage/server_token_handler.js +119 -0
- package/script/src/features/auth/storage/types.d.ts +42 -0
- package/script/src/features/auth/storage/types.d.ts.map +1 -0
- package/script/src/features/auth/storage/types.js +2 -0
- package/script/src/features/contact/contract.d.ts +170 -0
- package/script/src/features/contact/contract.d.ts.map +1 -0
- package/script/src/features/contact/contract.js +52 -0
- package/script/src/features/contact/index.d.ts +2 -0
- package/script/src/features/contact/index.d.ts.map +1 -0
- package/script/src/features/contact/index.js +17 -0
- package/script/src/features/contact/repository.d.ts +58 -0
- package/script/src/features/contact/repository.d.ts.map +1 -0
- package/script/src/features/contact/repository.js +112 -0
- package/script/src/features/payout/contract.d.ts +623 -0
- package/script/src/features/payout/contract.d.ts.map +1 -0
- package/script/src/features/payout/contract.js +78 -0
- package/script/src/features/payout/index.d.ts +2 -0
- package/script/src/features/payout/index.d.ts.map +1 -0
- package/script/src/features/payout/index.js +17 -0
- package/script/src/features/payout/repository.d.ts +67 -0
- package/script/src/features/payout/repository.d.ts.map +1 -0
- package/script/src/features/payout/repository.js +167 -0
- package/script/src/features/wallet/contract.d.ts +137 -0
- package/script/src/features/wallet/contract.d.ts.map +1 -0
- package/script/src/features/wallet/contract.js +41 -0
- package/script/src/features/wallet/index.d.ts +2 -0
- package/script/src/features/wallet/index.d.ts.map +1 -0
- package/script/src/features/wallet/index.js +17 -0
- package/script/src/features/wallet/repository.d.ts +57 -0
- package/script/src/features/wallet/repository.d.ts.map +1 -0
- package/script/src/features/wallet/repository.js +97 -0
- package/script/src/models/contact/derivatives/contact.d.ts +172 -0
- package/script/src/models/contact/derivatives/contact.d.ts.map +1 -0
- package/script/src/models/contact/derivatives/contact.js +270 -0
- package/script/src/models/contact/derivatives/contact.test.d.ts.map +1 -0
- package/script/src/models/contact/derivatives/contact_info.d.ts +188 -0
- package/script/src/models/contact/derivatives/contact_info.d.ts.map +1 -0
- package/script/src/models/contact/derivatives/contact_info.js +260 -0
- package/script/src/models/contact/derivatives/contact_info.test.d.ts.map +1 -0
- package/script/src/models/contact/index.d.ts +5 -0
- package/script/src/models/contact/index.d.ts.map +1 -0
- package/script/src/models/contact/index.js +20 -0
- package/script/src/models/contact/schemas.d.ts +66 -0
- package/script/src/models/contact/schemas.d.ts.map +1 -0
- package/script/src/models/contact/schemas.js +67 -0
- package/script/src/models/contact/validation.d.ts +37 -0
- package/script/src/models/contact/validation.d.ts.map +1 -0
- package/script/src/models/contact/validation.js +153 -0
- package/script/src/models/contact/validation.test.d.ts.map +1 -0
- package/script/src/models/index.d.ts +7 -0
- package/script/src/models/index.d.ts.map +1 -0
- package/script/src/models/index.js +22 -0
- package/script/src/models/payout/api.d.ts +29 -0
- package/script/src/models/payout/api.d.ts.map +1 -0
- package/script/src/models/payout/api.js +2 -0
- package/script/src/models/payout/channel.d.ts +58 -0
- package/script/src/models/payout/channel.d.ts.map +1 -0
- package/script/src/models/payout/channel.js +56 -0
- package/script/src/models/payout/derivatives/payout.d.ts +158 -0
- package/script/src/models/payout/derivatives/payout.d.ts.map +1 -0
- package/script/src/models/payout/derivatives/payout.js +269 -0
- package/script/src/models/payout/derivatives/payout.test.d.ts.map +1 -0
- package/script/src/models/payout/index.d.ts +6 -0
- package/script/src/models/payout/index.d.ts.map +1 -0
- package/script/src/models/payout/index.js +21 -0
- package/script/src/models/payout/schemas.d.ts +156 -0
- package/script/src/models/payout/schemas.d.ts.map +1 -0
- package/script/src/models/payout/schemas.js +108 -0
- package/script/src/models/payout/status.d.ts +33 -0
- package/script/src/models/payout/status.d.ts.map +1 -0
- package/script/src/models/payout/status.js +37 -0
- package/script/src/models/permission.d.ts +55 -0
- package/script/src/models/permission.d.ts.map +1 -0
- package/script/src/models/permission.js +53 -0
- package/script/src/models/role.d.ts +21 -0
- package/script/src/models/role.d.ts.map +1 -0
- package/script/src/models/role.js +77 -0
- package/script/src/models/user/authenticated-user.d.ts +77 -0
- package/script/src/models/user/authenticated-user.d.ts.map +1 -0
- package/script/src/models/user/authenticated-user.js +230 -0
- package/script/src/models/user/index.d.ts +4 -0
- package/script/src/models/user/index.d.ts.map +1 -0
- package/script/src/models/user/index.js +19 -0
- package/script/src/models/user/managed-user.d.ts +108 -0
- package/script/src/models/user/managed-user.d.ts.map +1 -0
- package/script/src/models/user/managed-user.js +260 -0
- package/script/src/models/user/profile.d.ts +161 -0
- package/script/src/models/user/profile.d.ts.map +1 -0
- package/script/src/models/user/profile.js +338 -0
- package/script/src/models/wallet/index.d.ts +4 -0
- package/script/src/models/wallet/index.d.ts.map +1 -0
- package/script/src/models/wallet/index.js +19 -0
- package/script/src/models/wallet/schemas.d.ts +95 -0
- package/script/src/models/wallet/schemas.d.ts.map +1 -0
- package/script/src/models/wallet/schemas.js +38 -0
- package/script/src/models/wallet/statement_entry.d.ts +160 -0
- package/script/src/models/wallet/statement_entry.d.ts.map +1 -0
- package/script/src/models/wallet/statement_entry.js +259 -0
- package/script/src/models/wallet/wallet.d.ts +147 -0
- package/script/src/models/wallet/wallet.d.ts.map +1 -0
- package/script/src/models/wallet/wallet.js +283 -0
- package/script/src/shared/base_repository.d.ts +80 -0
- package/script/src/shared/base_repository.d.ts.map +1 -0
- package/script/src/shared/base_repository.js +157 -0
- package/script/src/shared/common_responses.d.ts +13 -0
- package/script/src/shared/common_responses.d.ts.map +1 -0
- package/script/src/shared/common_responses.js +13 -0
- package/script/src/shared/index.d.ts +3 -0
- package/script/src/shared/index.d.ts.map +1 -0
- package/script/src/shared/index.js +18 -0
- package/script/src/shared/token_required_repository.d.ts +78 -0
- package/script/src/shared/token_required_repository.d.ts.map +1 -0
- package/script/src/shared/token_required_repository.js +132 -0
- package/dist/features/admin/admin.repository.d.ts +0 -179
- package/dist/features/admin/index.d.ts +0 -2
- package/dist/features/auth/access/access.repository.d.ts +0 -55
- package/dist/features/auth/auth.manager.d.ts +0 -249
- package/dist/features/auth/auth.repository.d.ts +0 -66
- package/dist/features/auth/auth.store.d.ts +0 -139
- package/dist/features/auth/identity/identity.repository.d.ts +0 -58
- package/dist/features/auth/index.d.ts +0 -5
- package/dist/features/auth/profile/profile.dtos.d.ts +0 -80
- package/dist/features/auth/profile/profile.repository.d.ts +0 -56
- package/dist/features/contact/contact-input-handler.d.ts +0 -16
- package/dist/features/contact/contact.dtos.d.ts +0 -90
- package/dist/features/contact/contact.repository.d.ts +0 -116
- package/dist/features/contact/index.d.ts +0 -2
- package/dist/features/payout/index.d.ts +0 -3
- package/dist/features/payout/payout-channel-handler.d.ts +0 -108
- package/dist/features/payout/payout.dtos.d.ts +0 -365
- package/dist/features/payout/payout.repository.d.ts +0 -193
- package/dist/features/wallet/index.d.ts +0 -4
- package/dist/features/wallet/wallet-manager.session.d.ts +0 -143
- package/dist/features/wallet/wallet.dtos.d.ts +0 -204
- package/dist/features/wallet/wallet.repository.d.ts +0 -120
- package/dist/features/wallet/wallet.utils.d.ts +0 -17
- package/dist/index.cjs.js +0 -2
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.esm.js +0 -2
- package/dist/index.esm.js.map +0 -1
- package/dist/lib/api/index.d.ts +0 -2
- package/dist/lib/error/error.utils.d.ts +0 -22
- package/dist/lib/error/index.d.ts +0 -3
- package/dist/models/contact-info.model.d.ts +0 -817
- package/dist/models/index.d.ts +0 -10
- package/dist/models/statement-entry.model.d.ts +0 -195
- package/dist/models/user.model.d.ts +0 -65
|
@@ -1,175 +1,80 @@
|
|
|
1
|
-
import { AppRouter } from "@ts-rest/core";
|
|
2
|
-
import { InitClientArgs } from "@ts-rest/core";
|
|
1
|
+
import { type AppRouter } from "@ts-rest/core";
|
|
2
|
+
import type { InitClientArgs } from "@ts-rest/core";
|
|
3
|
+
import { AfloatAuth } from "../features/auth/manager.js";
|
|
3
4
|
/**
|
|
4
|
-
* BaseRepository
|
|
5
|
+
* BaseRepository
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
7
|
+
* A generic base class to build repositories for interacting with the Afloat API.
|
|
8
|
+
* This class initializes a "ts-rest" client using a specified "ts-rest" contract and provides
|
|
9
|
+
* helper methods to handle API responses consistently.
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
* 1. Direct token provided in constructor
|
|
11
|
-
* 2. Global authentication state via getCurrentToken()
|
|
12
|
-
*
|
|
13
|
-
* @template TContract - The API contract extending `AppRouter` from `@ts-rest/core`
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // Usage 1: Direct token usage (Recommended for server-side usage)
|
|
18
|
-
* const repo = new WalletRepository("wallet", walletContract, {
|
|
19
|
-
* token: "user-auth-token"
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* // Usage 2: Global auth state (Recommended for client-side usage)
|
|
23
|
-
* // Token automatically retrieved from AfloatAuth.instance
|
|
24
|
-
* const repo = new WalletRepository("wallet", walletContract);
|
|
25
|
-
* ```
|
|
11
|
+
* @template TContract - The API contract extending `AppRouter` from `@npm/ts_rest.ts`.
|
|
26
12
|
*/
|
|
27
13
|
export declare class BaseRepository<TContract extends AppRouter> {
|
|
28
14
|
/**
|
|
29
|
-
*
|
|
15
|
+
* A "ts-rest" contract
|
|
16
|
+
*
|
|
30
17
|
* @protected
|
|
31
18
|
*/
|
|
32
19
|
protected contract: TContract;
|
|
33
20
|
/**
|
|
34
|
-
*
|
|
21
|
+
* An API endpoint
|
|
22
|
+
*
|
|
35
23
|
* @protected
|
|
36
24
|
*/
|
|
37
25
|
protected endpoint: string;
|
|
38
26
|
/**
|
|
39
|
-
*
|
|
27
|
+
* An API Root URL
|
|
28
|
+
*
|
|
40
29
|
* @protected
|
|
41
30
|
*/
|
|
42
31
|
protected root: string | undefined;
|
|
43
32
|
/**
|
|
44
|
-
*
|
|
33
|
+
* The auth instance to use for authentication
|
|
34
|
+
*
|
|
45
35
|
* @protected
|
|
46
36
|
*/
|
|
47
|
-
protected
|
|
37
|
+
protected auth: AfloatAuth | undefined;
|
|
48
38
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* @param endpoint - The API endpoint path (e.g., "users", "wallets")
|
|
52
|
-
* @param contract - The ts-rest contract defining the API
|
|
53
|
-
* @param options - Optional configuration
|
|
54
|
-
* @param options.root - Custom API root URL (defaults to https://api.afloat.money/v1)
|
|
55
|
-
* @param options.token - Authentication token for API calls
|
|
39
|
+
* Constructs a new instance of `BaseRepository`.
|
|
56
40
|
*
|
|
57
|
-
* @
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* root: "https://api-staging.afloat.money/v1"
|
|
63
|
-
* });
|
|
64
|
-
*
|
|
65
|
-
* // Client-side using global auth state
|
|
66
|
-
* const repo = new WalletRepository("wallet", walletContract);
|
|
67
|
-
* ```
|
|
41
|
+
* @param endpoint - API endpoint
|
|
42
|
+
* @param contract - The "ts-rest" contract
|
|
43
|
+
* @param args - Optional constructor arguments
|
|
44
|
+
* @param args.root - Optional API root URL
|
|
45
|
+
* @param args.auth - Optional auth instance to use
|
|
68
46
|
*/
|
|
69
|
-
constructor(endpoint: string, contract: TContract,
|
|
47
|
+
constructor(endpoint: string, contract: TContract, args?: {
|
|
70
48
|
root?: string;
|
|
71
|
-
|
|
49
|
+
auth?: AfloatAuth;
|
|
72
50
|
});
|
|
73
51
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* Uses a fallback chain to find a valid token:
|
|
77
|
-
* 1. Instance token (set in constructor)
|
|
78
|
-
* 2. Global authentication state via getCurrentToken()
|
|
79
|
-
* 3. Return an empty string if no token is found (e.g., for public/unauthenticated endpoints)
|
|
52
|
+
* Gets an auth instance that can be used for permission checks.
|
|
53
|
+
* Follows a fallback strategy to find a valid auth instance.
|
|
80
54
|
*
|
|
81
55
|
* @protected
|
|
82
|
-
* @returns
|
|
83
|
-
* @throws {Error} If no valid
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```typescript
|
|
87
|
-
* // This method is called automatically by the client getter
|
|
88
|
-
* // You typically don't need to call this directly
|
|
89
|
-
* ```
|
|
56
|
+
* @returns {AfloatAuth} A valid auth instance
|
|
57
|
+
* @throws {Error} If no valid auth instance is available
|
|
90
58
|
*/
|
|
91
|
-
protected
|
|
59
|
+
protected getAuthForPermissionCheck(): AfloatAuth;
|
|
92
60
|
/**
|
|
93
|
-
* Gets the
|
|
94
|
-
*
|
|
95
|
-
* Automatically includes authentication headers and request tracking.
|
|
96
|
-
* The client resolves the authentication token using the fallback chain.
|
|
97
|
-
*
|
|
98
|
-
* @returns Configured ts-rest client instance
|
|
99
|
-
* @throws {Error} If no authentication token is available
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```typescript
|
|
103
|
-
* // Client automatically includes token and request ID
|
|
104
|
-
* const result = await this.client.getUsers({ query: { limit: 10 } });
|
|
105
|
-
*
|
|
106
|
-
* // Headers automatically included:
|
|
107
|
-
* // - token: "user-auth-token"
|
|
108
|
-
* // - x-request-id: "uuid-v4-string"
|
|
109
|
-
* ```
|
|
61
|
+
* Gets the initialized client for making API requests.
|
|
62
|
+
* Uses authentication token if available.
|
|
110
63
|
*/
|
|
111
|
-
get client(): { [TKey in keyof TContract]: TContract[TKey] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey], InitClientArgs>> : TContract[TKey] extends AppRouter ? TContract[TKey] extends infer T extends AppRouter ? { [TKey_1 in keyof T]: TContract[TKey][TKey_1] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1], InitClientArgs>> : TContract[TKey][TKey_1] extends AppRouter ? TContract[TKey][TKey_1] extends infer T_1 extends AppRouter ? { [TKey_2 in keyof T_1]: TContract[TKey][TKey_1][TKey_2] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2] extends AppRouter ? TContract[TKey][TKey_1][TKey_2] extends infer T_2 extends AppRouter ? { [TKey_3 in keyof T_2]: TContract[TKey][TKey_1][TKey_2][TKey_3] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3] extends infer T_3 extends AppRouter ? { [TKey_4 in keyof T_3]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends infer T_4 extends AppRouter ? { [TKey_5 in keyof T_4]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends infer T_5 extends AppRouter ? { [TKey_6 in keyof T_5]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends infer T_6 extends AppRouter ? { [TKey_7 in keyof T_6]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends infer T_7 extends AppRouter ? { [TKey_8 in keyof T_7]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends infer T_8 extends AppRouter ? { [TKey_9 in keyof T_8]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends infer T_9 extends AppRouter ? { [TKey_10 in keyof T_9]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends AppRouter ?
|
|
64
|
+
get client(): { [TKey in keyof TContract]: TContract[TKey] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey], InitClientArgs>> : TContract[TKey] extends AppRouter ? TContract[TKey] extends infer T extends AppRouter ? { [TKey_1 in keyof T]: TContract[TKey][TKey_1] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1], InitClientArgs>> : TContract[TKey][TKey_1] extends AppRouter ? TContract[TKey][TKey_1] extends infer T_1 extends AppRouter ? { [TKey_2 in keyof T_1]: TContract[TKey][TKey_1][TKey_2] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2] extends AppRouter ? TContract[TKey][TKey_1][TKey_2] extends infer T_2 extends AppRouter ? { [TKey_3 in keyof T_2]: TContract[TKey][TKey_1][TKey_2][TKey_3] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3] extends infer T_3 extends AppRouter ? { [TKey_4 in keyof T_3]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends infer T_4 extends AppRouter ? { [TKey_5 in keyof T_4]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends infer T_5 extends AppRouter ? { [TKey_6 in keyof T_5]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends infer T_6 extends AppRouter ? { [TKey_7 in keyof T_6]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends infer T_7 extends AppRouter ? { [TKey_8 in keyof T_7]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends infer T_8 extends AppRouter ? { [TKey_9 in keyof T_8]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends infer T_9 extends AppRouter ? { [TKey_10 in keyof T_9]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends AppRouter ? any : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; };
|
|
112
65
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* @
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* // Or clearing the token to fall back to global auth state
|
|
123
|
-
* repository.setToken(undefined);
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
|
-
setToken(token: string): void;
|
|
127
|
-
/**
|
|
128
|
-
* Gets the currently configured token (if set directly on the instance).
|
|
129
|
-
*
|
|
130
|
-
* @returns The current authentication token or undefined
|
|
131
|
-
*
|
|
132
|
-
* @note This only returns tokens set directly on the instance, not tokens
|
|
133
|
-
* resolved from the global authentication state.
|
|
134
|
-
*
|
|
135
|
-
* @example
|
|
136
|
-
* ```typescript
|
|
137
|
-
* const directToken = repository.getCurrentToken();
|
|
138
|
-
* if (directToken) {
|
|
139
|
-
* console.log("Repository has a direct token");
|
|
140
|
-
* } else {
|
|
141
|
-
* console.log("Repository will use global auth state");
|
|
142
|
-
* }
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
|
-
getCurrentToken(): string | undefined;
|
|
146
|
-
/**
|
|
147
|
-
* Handles API responses consistently across all repositories.
|
|
148
|
-
*
|
|
149
|
-
* Checks the HTTP status code and either returns the response body for
|
|
150
|
-
* successful requests or throws appropriate errors for failures.
|
|
151
|
-
*
|
|
152
|
-
* @template T - The expected type of the successful response body
|
|
153
|
-
* @param result - The API response object with status and body
|
|
154
|
-
* @param successStatusCode - The expected HTTP status code for success
|
|
155
|
-
* @returns The response body typed as T
|
|
156
|
-
* @throws {APIError} For API errors (400, 401, 403, 404, 500, etc.)
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* ```typescript
|
|
160
|
-
* const result = await this.client.getUser({ params: { id: "123" } });
|
|
161
|
-
* return this.handleResponse<User>(result, 200);
|
|
162
|
-
*
|
|
163
|
-
* // Automatically handles error cases:
|
|
164
|
-
* // - 400: Bad Request with detailed error info
|
|
165
|
-
* // - 401: Unauthorized (authentication required)
|
|
166
|
-
* // - 403: Forbidden (insufficient permissions)
|
|
167
|
-
* // - 404: Not Found
|
|
168
|
-
* // - Other: Generic server error
|
|
169
|
-
* ```
|
|
66
|
+
* Handles the API response by checking the HTTP status code and returning the response body
|
|
67
|
+
* for successful requests or throwing an `APIError` for errors.
|
|
68
|
+
*
|
|
69
|
+
* @template T - The expected type of the successful response body.
|
|
70
|
+
* @param result - The API response object containing the status code and response body.
|
|
71
|
+
* @param successStatusCode - The expected HTTP status code indicating success (e.g., 200, 201).
|
|
72
|
+
* @returns The response body typed as `T` if the status code matches the success criteria.
|
|
73
|
+
* @throws `APIError` - If the status code indicates a failure.
|
|
170
74
|
*/
|
|
171
75
|
handleResponse<T>(result: {
|
|
172
76
|
status: number;
|
|
173
77
|
body: unknown;
|
|
174
78
|
}, successStatusCode: number): T;
|
|
175
79
|
}
|
|
80
|
+
//# sourceMappingURL=base_repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_repository.d.ts","sourceRoot":"","sources":["../../../src/src/shared/base_repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,eAAe,CAAC;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;GAQG;AACH,qBAAa,cAAc,CAAC,SAAS,SAAS,SAAS;IACrD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE9B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAEvC;;;;;;;;OAQG;gBACS,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;QACxD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,UAAU,CAAC;KACnB;IASD;;;;;;;OAOG;IACH,SAAS,CAAC,yBAAyB,IAAI,UAAU;IAgBjD;;;OAGG;IACH,IAAI,MAAM,k0LA+BT;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,EACd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EACzC,iBAAiB,EAAE,MAAM,GACxB,CAAC;CAgBL"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { initClient } from "@ts-rest/core";
|
|
2
|
+
import { APIError } from "../errors/api_error.js";
|
|
3
|
+
import { v4 as uuidv4 } from "uuid";
|
|
4
|
+
import { AfloatAuth, AuthContext } from "../features/auth/manager.js";
|
|
5
|
+
/**
|
|
6
|
+
* BaseRepository
|
|
7
|
+
*
|
|
8
|
+
* A generic base class to build repositories for interacting with the Afloat API.
|
|
9
|
+
* This class initializes a "ts-rest" client using a specified "ts-rest" contract and provides
|
|
10
|
+
* helper methods to handle API responses consistently.
|
|
11
|
+
*
|
|
12
|
+
* @template TContract - The API contract extending `AppRouter` from `@npm/ts_rest.ts`.
|
|
13
|
+
*/
|
|
14
|
+
export class BaseRepository {
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new instance of `BaseRepository`.
|
|
17
|
+
*
|
|
18
|
+
* @param endpoint - API endpoint
|
|
19
|
+
* @param contract - The "ts-rest" contract
|
|
20
|
+
* @param args - Optional constructor arguments
|
|
21
|
+
* @param args.root - Optional API root URL
|
|
22
|
+
* @param args.auth - Optional auth instance to use
|
|
23
|
+
*/
|
|
24
|
+
constructor(endpoint, contract, args) {
|
|
25
|
+
/**
|
|
26
|
+
* A "ts-rest" contract
|
|
27
|
+
*
|
|
28
|
+
* @protected
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(this, "contract", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: void 0
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* An API endpoint
|
|
38
|
+
*
|
|
39
|
+
* @protected
|
|
40
|
+
*/
|
|
41
|
+
Object.defineProperty(this, "endpoint", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: void 0
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* An API Root URL
|
|
49
|
+
*
|
|
50
|
+
* @protected
|
|
51
|
+
*/
|
|
52
|
+
Object.defineProperty(this, "root", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
configurable: true,
|
|
55
|
+
writable: true,
|
|
56
|
+
value: void 0
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* The auth instance to use for authentication
|
|
60
|
+
*
|
|
61
|
+
* @protected
|
|
62
|
+
*/
|
|
63
|
+
Object.defineProperty(this, "auth", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: void 0
|
|
68
|
+
});
|
|
69
|
+
this.contract = contract;
|
|
70
|
+
this.endpoint = endpoint;
|
|
71
|
+
this.root = args?.root;
|
|
72
|
+
// Use provided auth or try to get the current context
|
|
73
|
+
this.auth = args?.auth || AuthContext.current;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Gets an auth instance that can be used for permission checks.
|
|
77
|
+
* Follows a fallback strategy to find a valid auth instance.
|
|
78
|
+
*
|
|
79
|
+
* @protected
|
|
80
|
+
* @returns {AfloatAuth} A valid auth instance
|
|
81
|
+
* @throws {Error} If no valid auth instance is available
|
|
82
|
+
*/
|
|
83
|
+
getAuthForPermissionCheck() {
|
|
84
|
+
// Use the instance provided in constructor, or fallback to context
|
|
85
|
+
const auth = this.auth || AuthContext.current;
|
|
86
|
+
if (!auth) {
|
|
87
|
+
try {
|
|
88
|
+
// Last resort: try to get the client singleton
|
|
89
|
+
return AfloatAuth.instance;
|
|
90
|
+
}
|
|
91
|
+
catch (_) {
|
|
92
|
+
throw new Error(`No valid auth instance available for ${this.endpoint} repository`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return auth;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Gets the initialized client for making API requests.
|
|
99
|
+
* Uses authentication token if available.
|
|
100
|
+
*/
|
|
101
|
+
get client() {
|
|
102
|
+
const baseUrl = this.root
|
|
103
|
+
? `${this.root}/${this.endpoint}`
|
|
104
|
+
: `https://api.afloat.money/v1/${this.endpoint}`;
|
|
105
|
+
let token = "";
|
|
106
|
+
// Try to get token from the provided auth instance
|
|
107
|
+
if (this.auth) {
|
|
108
|
+
token = this.auth.getUserToken() ?? "";
|
|
109
|
+
}
|
|
110
|
+
// Fall back to singleton if no auth was provided, but handle exceptions
|
|
111
|
+
// that occur in server environments
|
|
112
|
+
else {
|
|
113
|
+
try {
|
|
114
|
+
token = AfloatAuth.instance.getUserToken() ?? "";
|
|
115
|
+
}
|
|
116
|
+
catch (_) {
|
|
117
|
+
// This will fail when called within the server without initialization
|
|
118
|
+
// We'll proceed with an empty token
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const args = {
|
|
122
|
+
baseUrl,
|
|
123
|
+
baseHeaders: {
|
|
124
|
+
"token": token,
|
|
125
|
+
"x-request-id": uuidv4(),
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
return initClient(this.contract, args);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Handles the API response by checking the HTTP status code and returning the response body
|
|
132
|
+
* for successful requests or throwing an `APIError` for errors.
|
|
133
|
+
*
|
|
134
|
+
* @template T - The expected type of the successful response body.
|
|
135
|
+
* @param result - The API response object containing the status code and response body.
|
|
136
|
+
* @param successStatusCode - The expected HTTP status code indicating success (e.g., 200, 201).
|
|
137
|
+
* @returns The response body typed as `T` if the status code matches the success criteria.
|
|
138
|
+
* @throws `APIError` - If the status code indicates a failure.
|
|
139
|
+
*/
|
|
140
|
+
handleResponse(result, successStatusCode) {
|
|
141
|
+
if (successStatusCode === result.status) {
|
|
142
|
+
return result.body;
|
|
143
|
+
}
|
|
144
|
+
if (result.status === 400) {
|
|
145
|
+
throw new APIError(result.body);
|
|
146
|
+
}
|
|
147
|
+
throw new APIError({
|
|
148
|
+
message: "We encountered an error trying to process your request. Please try again later",
|
|
149
|
+
statusCode: 520,
|
|
150
|
+
error: "UNKNOWN ERROR",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -10,3 +10,4 @@ export declare const common400ResponseSchema: ApiErrorResponseSchemaType;
|
|
|
10
10
|
export type Common400APIResponse = z.infer<typeof common400ResponseSchema>;
|
|
11
11
|
export declare const commonAPIResponses: Record<number, AppRouteResponse>;
|
|
12
12
|
export {};
|
|
13
|
+
//# sourceMappingURL=common_responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common_responses.d.ts","sourceRoot":"","sources":["../../../src/src/shared/common_responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,KAAK,0BAA0B,GAAG,CAAC,CAAC,SAAS,CAAC;IAC5C,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC,CAAC;AACH,eAAO,MAAM,uBAAuB,EAAE,0BAKpC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAE/D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const common400ResponseSchema = z.object({
|
|
3
|
+
statusCode: z.number(),
|
|
4
|
+
message: z.string(),
|
|
5
|
+
error: z.string(),
|
|
6
|
+
details: z.record(z.string()).optional(),
|
|
7
|
+
});
|
|
8
|
+
export const commonAPIResponses = {
|
|
9
|
+
400: common400ResponseSchema,
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type AppRouter } from "@ts-rest/core";
|
|
2
|
+
import type { InitClientArgs } from "@ts-rest/core";
|
|
3
|
+
/**
|
|
4
|
+
* TokenRequiredRepository
|
|
5
|
+
*
|
|
6
|
+
* A generic base class to build repositories for interacting with the API,
|
|
7
|
+
* without any dependency on AfloatAuth. Instead, it requires token to be
|
|
8
|
+
* explicitly provided when initializing the repository.
|
|
9
|
+
*
|
|
10
|
+
* @template TContract - The API contract extending `AppRouter` from `@ts-rest/core`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class TokenRequiredRepository<TContract extends AppRouter> {
|
|
13
|
+
/**
|
|
14
|
+
* A "ts-rest" contract
|
|
15
|
+
*
|
|
16
|
+
* @protected
|
|
17
|
+
*/
|
|
18
|
+
protected contract: TContract;
|
|
19
|
+
/**
|
|
20
|
+
* An API endpoint
|
|
21
|
+
*
|
|
22
|
+
* @protected
|
|
23
|
+
*/
|
|
24
|
+
protected endpoint: string;
|
|
25
|
+
/**
|
|
26
|
+
* An API Root URL
|
|
27
|
+
*
|
|
28
|
+
* @protected
|
|
29
|
+
*/
|
|
30
|
+
protected root: string | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Authentication token
|
|
33
|
+
*
|
|
34
|
+
* @protected
|
|
35
|
+
*/
|
|
36
|
+
protected token: string;
|
|
37
|
+
/**
|
|
38
|
+
* Constructs a new instance of `TokenRequiredRepository`.
|
|
39
|
+
*
|
|
40
|
+
* @param endpoint - API endpoint
|
|
41
|
+
* @param contract - The "ts-rest" contract
|
|
42
|
+
* @param token - Authentication token (required)
|
|
43
|
+
* @param root - Optional API root URL
|
|
44
|
+
*/
|
|
45
|
+
constructor(endpoint: string, contract: TContract, token: string, root?: string);
|
|
46
|
+
/**
|
|
47
|
+
* Gets the initialized client for making API requests.
|
|
48
|
+
* Uses the provided authentication token.
|
|
49
|
+
*/
|
|
50
|
+
get client(): { [TKey in keyof TContract]: TContract[TKey] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey], InitClientArgs>> : TContract[TKey] extends AppRouter ? TContract[TKey] extends infer T extends AppRouter ? { [TKey_1 in keyof T]: TContract[TKey][TKey_1] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1], InitClientArgs>> : TContract[TKey][TKey_1] extends AppRouter ? TContract[TKey][TKey_1] extends infer T_1 extends AppRouter ? { [TKey_2 in keyof T_1]: TContract[TKey][TKey_1][TKey_2] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2] extends AppRouter ? TContract[TKey][TKey_1][TKey_2] extends infer T_2 extends AppRouter ? { [TKey_3 in keyof T_2]: TContract[TKey][TKey_1][TKey_2][TKey_3] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3] extends infer T_3 extends AppRouter ? { [TKey_4 in keyof T_3]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4] extends infer T_4 extends AppRouter ? { [TKey_5 in keyof T_4]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5] extends infer T_5 extends AppRouter ? { [TKey_6 in keyof T_5]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6] extends infer T_6 extends AppRouter ? { [TKey_7 in keyof T_6]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7] extends infer T_7 extends AppRouter ? { [TKey_8 in keyof T_7]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8] extends infer T_8 extends AppRouter ? { [TKey_9 in keyof T_8]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends AppRouter ? TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9] extends infer T_9 extends AppRouter ? { [TKey_10 in keyof T_9]: TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends import("@ts-rest/core").AppRoute ? import("@ts-rest/core").AppRouteFunction<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs, import("@ts-rest/core").PartialClientInferRequest<TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10], InitClientArgs>> : TContract[TKey][TKey_1][TKey_2][TKey_3][TKey_4][TKey_5][TKey_6][TKey_7][TKey_8][TKey_9][TKey_10] extends AppRouter ? any : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; } : never : never; };
|
|
51
|
+
/**
|
|
52
|
+
* Updates the token used by this repository
|
|
53
|
+
*
|
|
54
|
+
* @param token - New authentication token
|
|
55
|
+
*/
|
|
56
|
+
setToken(token: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Gets the current token
|
|
59
|
+
*
|
|
60
|
+
* @returns The current authentication token
|
|
61
|
+
*/
|
|
62
|
+
getToken(): string;
|
|
63
|
+
/**
|
|
64
|
+
* Handles the API response by checking the HTTP status code and returning the response body
|
|
65
|
+
* for successful requests or throwing an `APIError` for errors.
|
|
66
|
+
*
|
|
67
|
+
* @template T - The expected type of the successful response body.
|
|
68
|
+
* @param result - The API response object containing the status code and response body.
|
|
69
|
+
* @param successStatusCode - The expected HTTP status code indicating success (e.g., 200, 201).
|
|
70
|
+
* @returns The response body typed as `T` if the status code matches the success criteria.
|
|
71
|
+
* @throws `APIError` - If the status code indicates a failure.
|
|
72
|
+
*/
|
|
73
|
+
handleResponse<T>(result: {
|
|
74
|
+
status: number;
|
|
75
|
+
body: unknown;
|
|
76
|
+
}, successStatusCode: number): T;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=token_required_repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_required_repository.d.ts","sourceRoot":"","sources":["../../../src/src/shared/token_required_repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,eAAe,CAAC;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD;;;;;;;;GAQG;AACH,qBAAa,uBAAuB,CAAC,SAAS,SAAS,SAAS;IAC9D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE9B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAExB;;;;;;;OAOG;gBAED,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM;IAQf;;;OAGG;IACH,IAAI,MAAM,k0LAcT;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,EACd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EACzC,iBAAiB,EAAE,MAAM,GACxB,CAAC;CAgBL"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { initClient } from "@ts-rest/core";
|
|
2
|
+
import { APIError } from "../errors/api_error.js";
|
|
3
|
+
import { v4 as uuidv4 } from "uuid";
|
|
4
|
+
/**
|
|
5
|
+
* TokenRequiredRepository
|
|
6
|
+
*
|
|
7
|
+
* A generic base class to build repositories for interacting with the API,
|
|
8
|
+
* without any dependency on AfloatAuth. Instead, it requires token to be
|
|
9
|
+
* explicitly provided when initializing the repository.
|
|
10
|
+
*
|
|
11
|
+
* @template TContract - The API contract extending `AppRouter` from `@ts-rest/core`.
|
|
12
|
+
*/
|
|
13
|
+
export class TokenRequiredRepository {
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new instance of `TokenRequiredRepository`.
|
|
16
|
+
*
|
|
17
|
+
* @param endpoint - API endpoint
|
|
18
|
+
* @param contract - The "ts-rest" contract
|
|
19
|
+
* @param token - Authentication token (required)
|
|
20
|
+
* @param root - Optional API root URL
|
|
21
|
+
*/
|
|
22
|
+
constructor(endpoint, contract, token, root) {
|
|
23
|
+
/**
|
|
24
|
+
* A "ts-rest" contract
|
|
25
|
+
*
|
|
26
|
+
* @protected
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(this, "contract", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: void 0
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* An API endpoint
|
|
36
|
+
*
|
|
37
|
+
* @protected
|
|
38
|
+
*/
|
|
39
|
+
Object.defineProperty(this, "endpoint", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: void 0
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* An API Root URL
|
|
47
|
+
*
|
|
48
|
+
* @protected
|
|
49
|
+
*/
|
|
50
|
+
Object.defineProperty(this, "root", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: void 0
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Authentication token
|
|
58
|
+
*
|
|
59
|
+
* @protected
|
|
60
|
+
*/
|
|
61
|
+
Object.defineProperty(this, "token", {
|
|
62
|
+
enumerable: true,
|
|
63
|
+
configurable: true,
|
|
64
|
+
writable: true,
|
|
65
|
+
value: void 0
|
|
66
|
+
});
|
|
67
|
+
this.contract = contract;
|
|
68
|
+
this.endpoint = endpoint;
|
|
69
|
+
this.token = token;
|
|
70
|
+
this.root = root;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Gets the initialized client for making API requests.
|
|
74
|
+
* Uses the provided authentication token.
|
|
75
|
+
*/
|
|
76
|
+
get client() {
|
|
77
|
+
const baseUrl = this.root
|
|
78
|
+
? `${this.root}/${this.endpoint}`
|
|
79
|
+
: `https://api.afloat.money/v1/${this.endpoint}`;
|
|
80
|
+
const args = {
|
|
81
|
+
baseUrl,
|
|
82
|
+
baseHeaders: {
|
|
83
|
+
"token": this.token,
|
|
84
|
+
"x-request-id": uuidv4(),
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
return initClient(this.contract, args);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Updates the token used by this repository
|
|
91
|
+
*
|
|
92
|
+
* @param token - New authentication token
|
|
93
|
+
*/
|
|
94
|
+
setToken(token) {
|
|
95
|
+
this.token = token;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Gets the current token
|
|
99
|
+
*
|
|
100
|
+
* @returns The current authentication token
|
|
101
|
+
*/
|
|
102
|
+
getToken() {
|
|
103
|
+
return this.token;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Handles the API response by checking the HTTP status code and returning the response body
|
|
107
|
+
* for successful requests or throwing an `APIError` for errors.
|
|
108
|
+
*
|
|
109
|
+
* @template T - The expected type of the successful response body.
|
|
110
|
+
* @param result - The API response object containing the status code and response body.
|
|
111
|
+
* @param successStatusCode - The expected HTTP status code indicating success (e.g., 200, 201).
|
|
112
|
+
* @returns The response body typed as `T` if the status code matches the success criteria.
|
|
113
|
+
* @throws `APIError` - If the status code indicates a failure.
|
|
114
|
+
*/
|
|
115
|
+
handleResponse(result, successStatusCode) {
|
|
116
|
+
if (successStatusCode === result.status) {
|
|
117
|
+
return result.body;
|
|
118
|
+
}
|
|
119
|
+
if (result.status === 400) {
|
|
120
|
+
throw new APIError(result.body);
|
|
121
|
+
}
|
|
122
|
+
throw new APIError({
|
|
123
|
+
message: "We encountered an error trying to process your request. Please try again later",
|
|
124
|
+
statusCode: 520,
|
|
125
|
+
error: "UNKNOWN ERROR",
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|