Skip to content

Commit

Permalink
chore: release version 1.2.11
Browse files Browse the repository at this point in the history
* Fix URL encoding for path parameters across multiple API endpoints
* Improve handling of query parameters for optional values
* Mark `deactive` and `deactiveVerification` as deprecated in favor of `deactivate` and `deactivateVerification`
  • Loading branch information
YeungKC committed Jan 14, 2025
1 parent dd19434 commit e39fbb2
Show file tree
Hide file tree
Showing 12 changed files with 95 additions and 56 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 1.2.11

* Fix URL encoding for path parameters
* Fix query parameters handling for optional values
* Mark `deactive` and `deactiveVerification` as deprecated in favor of `deactivate` and `deactivateVerification`

## 1.2.10

* add `kernel_asset_id` field to `SafeSnapshot`
Expand Down
23 changes: 17 additions & 6 deletions lib/src/api/account_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,19 @@ class AccountApi {

Future<MixinResponse<StickerAlbum>> getStickerAlbum(String id) =>
MixinResponse.request(
dio.get('/albums/$id'),
dio.get('/albums/${Uri.encodeComponent(id)}'),
StickerAlbum.fromJson,
);

Future<MixinResponse<List<Sticker>>> getStickersByAlbumId(String id) =>
MixinResponse.requestList(
dio.get('/stickers/albums/$id'),
dio.get('/stickers/albums/${Uri.encodeComponent(id)}'),
Sticker.fromJson,
);

Future<MixinResponse<Sticker>> getStickerById(String id) =>
MixinResponse.request<Sticker>(
dio.get('/stickers/$id'),
dio.get('/stickers/${Uri.encodeComponent(id)}'),
Sticker.fromJson,
);

Expand All @@ -88,7 +88,7 @@ class AccountApi {

Future<MixinResponse<CodeTypeInterface?>> code(String id) =>
MixinResponse.request<CodeTypeInterface?>(
dio.get('/codes/$id'),
dio.get('/codes/${Uri.encodeComponent(id)}'),
(json) {
try {
final jsonObject = json;
Expand Down Expand Up @@ -123,7 +123,7 @@ class AccountApi {

Future<MixinResponse<Account>> create(String id, AccountRequest request) =>
MixinResponse.request<Account>(
dio.post('/verifications/$id', data: request),
dio.post('/verifications/${Uri.encodeComponent(id)}', data: request),
Account.fromJson,
);

Expand Down Expand Up @@ -161,19 +161,30 @@ class AccountApi {
User.fromJson,
);

@Deprecated('Use deactivateVerification instead')
Future<MixinResponse<VerificationResponse>> deactiveVerification(
String id,
String code,
) =>
deactivateVerification(id, code);

Future<MixinResponse<VerificationResponse>> deactivateVerification(
String id,
String code,
) =>
MixinResponse.request<VerificationResponse>(
dio.post('/verifications/$id', data: {
dio.post('/verifications/${Uri.encodeComponent(id)}', data: {
'code': code,
'purpose': VerificationPurpose.deactivated.name.toUpperCase(),
}),
VerificationResponse.fromJson,
);

@Deprecated('Use deactivate instead')
Future<MixinResponse<void>> deactive(DeactivateRequest request) =>
deactivate(request);

Future<MixinResponse<void>> deactivate(DeactivateRequest request) =>
MixinResponse.requestVoid(dio.post('/me/deactivate', data: request));

Future<MixinResponse<List<LogResponse>>> pinLogs({
Expand Down
6 changes: 3 additions & 3 deletions lib/src/api/address_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class AddressApi {

Future<MixinResponse<List<Address>>> getAddressesByAssetId(String assetId) =>
MixinResponse.requestList(
dio.get('/assets/$assetId/addresses'),
dio.get('/assets/${Uri.encodeComponent(assetId)}/addresses'),
Address.fromJson,
);

Expand All @@ -21,13 +21,13 @@ class AddressApi {

Future<MixinResponse<Address>> getAddressById(String id) =>
MixinResponse.request<Address>(
dio.get('/addresses/$id'),
dio.get('/addresses/${Uri.encodeComponent(id)}'),
Address.fromJson,
);

Future<MixinResponse<void>> deleteAddressById(String id, String pin) =>
MixinResponse.requestVoid(dio.post(
'/addresses/$id/delete',
'/addresses/${Uri.encodeComponent(id)}/delete',
data: {'pin': pin},
));
}
22 changes: 13 additions & 9 deletions lib/src/api/asset_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,33 @@ class AssetApi {

Future<MixinResponse<Asset>> getAssetById(String id) =>
MixinResponse.request<Asset>(
dio.get('/assets/$id'),
dio.get('/assets/${Uri.encodeComponent(id)}'),
Asset.fromJson,
);

Future<MixinResponse<AssetFee>> getAssetFee(String id) =>
MixinResponse.request<AssetFee>(
dio.get('/assets/$id/fee'),
dio.get('/assets/${Uri.encodeComponent(id)}/fee'),
AssetFee.fromJson,
);

Future<MixinResponse<List<Token>>> queryAsset(String query) =>
MixinResponse.requestList(
dio.get('/network/assets/search/$query'),
dio.get('/network/assets/search/${Uri.encodeComponent(query)}'),
Token.fromJson,
);

Future<MixinResponse<List<PendingDeposit>>> pendingDeposits(String assetId,
{String? destination, String? tag}) =>
Future<MixinResponse<List<PendingDeposit>>> pendingDeposits(
String? assetId, {
String? destination,
String? tag,
}) =>
MixinResponse.requestList(
dio.get('/external/transactions', queryParameters: <String, dynamic>{
'asset': assetId,
'destination': destination,
'tag': tag,
if (assetId != null && assetId.isNotEmpty) 'asset': assetId,
if (destination != null && destination.isNotEmpty)
'destination': destination,
if (tag != null && tag.isNotEmpty) 'tag': tag,
}),
PendingDeposit.fromJson,
);
Expand All @@ -54,7 +58,7 @@ class AssetApi {

Future<MixinResponse<Chain>> getChain(String chainId) =>
MixinResponse.request<Chain>(
dio.get('/network/chains/$chainId'),
dio.get('/network/chains/${Uri.encodeComponent(chainId)}'),
Chain.fromJson,
);
}
2 changes: 1 addition & 1 deletion lib/src/api/attachment_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class AttachmentApi {

Future<MixinResponse<Attachment>> getAttachment(String id) =>
MixinResponse.request<Attachment>(
dio.get('/attachments/$id'),
dio.get('/attachments/${Uri.encodeComponent(id)}'),
Attachment.fromJson,
);

Expand Down
15 changes: 10 additions & 5 deletions lib/src/api/circle_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class CircleApi {

Future<MixinResponse<CircleResponse>> getCircle(String id) =>
MixinResponse.request<CircleResponse>(
dio.get('/circles/$id'),
dio.get('/circles/${Uri.encodeComponent(id)}'),
CircleResponse.fromJson,
);

Expand All @@ -32,18 +32,19 @@ class CircleApi {
Future<MixinResponse<CircleResponse>> updateCircle(
String id, CircleName circleName) =>
MixinResponse.request<CircleResponse>(
dio.post('/circles/$id', data: circleName),
dio.post('/circles/${Uri.encodeComponent(id)}', data: circleName),
CircleResponse.fromJson,
);

Future<MixinResponse<void>> deleteCircle(String id) =>
MixinResponse.requestVoid(dio.post('/circles/$id/delete'));
MixinResponse.requestVoid(
dio.post('/circles/${Uri.encodeComponent(id)}/delete'));

Future<MixinResponse<List<CircleConversation>>> updateCircleConversations(
String id,
List<CircleConversationRequest> conversationCircleRequests) =>
MixinResponse.requestList(
dio.post('/circles/$id/conversations',
dio.post('/circles/${Uri.encodeComponent(id)}/conversations',
data: conversationCircleRequests),
CircleConversation.fromJson,
);
Expand All @@ -53,7 +54,11 @@ class CircleApi {
{String? offset,
int limit = 500}) =>
MixinResponse.requestList(
dio.get('/circles/$id/conversations?offset=$offset&limit=$limit'),
dio.get('/circles/${Uri.encodeComponent(id)}/conversations',
queryParameters: {
if (offset != null) 'offset': offset,
'limit': limit,
}),
CircleConversation.fromJson,
);
}
25 changes: 15 additions & 10 deletions lib/src/api/conversation_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,56 +17,61 @@ class ConversationApi {
Future<MixinResponse<ConversationResponse>> update(
String conversationId, ConversationRequest request) =>
MixinResponse.request<ConversationResponse>(
dio.post('/conversations/$conversationId', data: request),
dio.post('/conversations/${Uri.encodeComponent(conversationId)}',
data: request),
ConversationResponse.fromJson,
);

Future<MixinResponse<void>> exit(String conversationId) =>
MixinResponse.requestVoid(
dio.post('/conversations/$conversationId/exit'));
MixinResponse.requestVoid(dio
.post('/conversations/${Uri.encodeComponent(conversationId)}/exit'));

Future<MixinResponse<ConversationResponse>> getConversation(String id) =>
MixinResponse.request<ConversationResponse>(
dio.get('/conversations/$id'),
dio.get('/conversations/${Uri.encodeComponent(id)}'),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> updateConversation(String id) =>
MixinResponse.request<ConversationResponse>(
dio.get('/conversations/$id'),
dio.get('/conversations/${Uri.encodeComponent(id)}'),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> participants(
String id, String action, List<ParticipantRequest> requests) =>
MixinResponse.request<ConversationResponse>(
dio.post('/conversations/$id/participants/$action', data: requests),
dio.post(
'/conversations/${Uri.encodeComponent(id)}/participants/${Uri.encodeComponent(action)}',
data: requests),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> mute(
String id, ConversationRequest request) =>
MixinResponse.request<ConversationResponse>(
dio.post('/conversations/$id/mute', data: request),
dio.post('/conversations/${Uri.encodeComponent(id)}/mute',
data: request),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> rotate(String id) =>
MixinResponse.request<ConversationResponse>(
dio.post('/conversations/$id/rotate'),
dio.post('/conversations/${Uri.encodeComponent(id)}/rotate'),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> join(String id) =>
MixinResponse.request(
dio.post('/conversations/$id/join'),
dio.post('/conversations/${Uri.encodeComponent(id)}/join'),
ConversationResponse.fromJson,
);

Future<MixinResponse<ConversationResponse>> disappear(
String id, DisappearRequest request) =>
MixinResponse.request<ConversationResponse>(
dio.post('/conversations/$id/disappear', data: request),
dio.post('/conversations/${Uri.encodeComponent(id)}/disappear',
data: request),
ConversationResponse.fromJson,
);
}
7 changes: 5 additions & 2 deletions lib/src/api/message_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ class MessageApi {
MixinResponse.requestVoid(dio.post('/acknowledgements', data: ack));

Future<MixinResponse<List<BlazeMessageData>>> messageStatusOffset(
int offset) =>
int? offset,
) =>
MixinResponse.requestList<BlazeMessageData>(
dio.get('/messages/status/$offset'),
dio.get('/messages/status', queryParameters: <String, dynamic>{
if (offset != null) 'offset': offset.toString(),
}),
BlazeMessageData.fromJson,
);
}
2 changes: 1 addition & 1 deletion lib/src/api/provisioning_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class ProvisioningApi {

Future<MixinResponse<Provisioning>> getProvisioning(String deviceId) =>
MixinResponse.request<Provisioning>(
dio.get('/provisionings/$deviceId'),
dio.get('/provisionings/${Uri.encodeComponent(deviceId)}'),
Provisioning.fromJson,
);

Expand Down
33 changes: 19 additions & 14 deletions lib/src/api/snapshot_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,43 +16,48 @@ class SnapshotApi {
String? tag}) =>
MixinResponse.requestList(
dio.get('/snapshots', queryParameters: <String, dynamic>{
'asset': assetId,
'offset': offset,
if (assetId != null && assetId.isNotEmpty) 'asset': assetId,
if (offset != null && offset.isNotEmpty) 'offset': offset,
'limit': limit,
'opponent': opponent,
'destination': destination,
'tag': tag,
if (opponent != null && opponent.isNotEmpty) 'opponent': opponent,
if (destination != null && destination.isNotEmpty)
'destination': destination,
if (tag != null && tag.isNotEmpty) 'tag': tag,
}),
Snapshot.fromJson,
);

Future<MixinResponse<Snapshot>> getSnapshotById(String id) =>
MixinResponse.request<Snapshot>(
dio.get('/snapshots/$id'),
dio.get('/snapshots/${Uri.encodeComponent(id)}'),
Snapshot.fromJson,
);

Future<MixinResponse<List<Snapshot>>> getSnapshotsByAssetId(String id,
{String? offset, int limit = 30}) =>
Future<MixinResponse<List<Snapshot>>> getSnapshotsByAssetId(
String id, {
String? offset,
int limit = 30,
}) =>
MixinResponse.requestList(
dio.get('/assets/$id/snapshots', queryParameters: <String, dynamic>{
'offset': offset,
'limit': limit,
}),
dio.get('/assets/${Uri.encodeComponent(id)}/snapshots',
queryParameters: <String, dynamic>{
if (offset != null && offset.isNotEmpty) 'offset': offset,
'limit': limit,
}),
Snapshot.fromJson,
);

Future<MixinResponse<Snapshot>> getSnapshotByTraceId(String traceId) =>
MixinResponse.request(
dio.get('/snapshots/trace/$traceId'),
dio.get('/snapshots/trace/${Uri.encodeComponent(traceId)}'),
Snapshot.fromJson,
);

Future<MixinResponse<Ticker>> getTicker(String assetId, {String? offset}) =>
MixinResponse.request(
dio.get('/network/ticker', queryParameters: <String, dynamic>{
'asset': assetId,
'offset': offset,
if (offset != null && offset.isNotEmpty) 'offset': offset,
}),
Ticker.fromJson,
);
Expand Down
Loading

0 comments on commit e39fbb2

Please sign in to comment.