Skip to content

Commit

Permalink
Feat/xml null (#250)
Browse files Browse the repository at this point in the history
* feat: Add default XML value

* feat: Add default XML value
  • Loading branch information
rrr523 authored Aug 24, 2023
1 parent 8665454 commit 2e86b92
Show file tree
Hide file tree
Showing 14 changed files with 201 additions and 132 deletions.
5 changes: 5 additions & 0 deletions .changeset/modern-ties-give.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@bnb-chain/greenfield-js-sdk': patch
---

feat: Add XML default value when null
22 changes: 5 additions & 17 deletions packages/chain-sdk/src/api/bucket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import { MsgCreateBucketSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgC
import { MsgDeleteBucketSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgDeleteBucket';
import { MsgMigrateBucketSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgMigrateBucket';
import { MsgUpdateBucketInfoSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgUpdateBucketInfo';
import { parseGetUserBucketsResponse } from '@/parseXML/parseGetUserBucketsResponse';
import { parseReadQuotaResponse } from '@/parseXML/parseReadQuotaResponse';
import { ReqMeta } from '@/types/auth';
import { GetUserBucketsResponse, ReadQuotaResponse } from '@/types/spXML';
import { GetUserBucketsResponse } from '@/types/sp-xml';
import { getAuthorization, newRequestHeadersByMeta } from '@/utils/auth';
import { decodeObjectFromHexString, encodeObjectToHexString } from '@/utils/encoding';
import { fetchWithTimeout, parseErrorXml } from '@/utils/http';
Expand Down Expand Up @@ -33,7 +35,6 @@ import {
} from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx';
import { bytesFromBase64 } from '@bnb-chain/greenfield-cosmos-types/helpers';
import { Headers } from 'cross-fetch';
import { XMLParser } from 'fast-xml-parser';
import Long from 'long';
import { container, delay, inject, singleton } from 'tsyringe';
import {
Expand Down Expand Up @@ -377,20 +378,8 @@ export class Bucket implements IBucket {
};
}

const xmlParser = new XMLParser({
isArray: (tagName: string) => {
if (tagName === 'Buckets') return true;
return false;
},
numberParseOptions: {
hex: false,
leadingZeros: true,
skipLike: undefined,
eNotation: false,
},
});
const xmlData = await result.text();
const res = xmlParser.parse(xmlData) as GetUserBucketsResponse;
const res = parseGetUserBucketsResponse(xmlData);

return {
code: 0,
Expand Down Expand Up @@ -477,9 +466,8 @@ export class Bucket implements IBucket {
},
);

const xmlParser = new XMLParser();
const xmlData = await result.text();
const res = xmlParser.parse(xmlData) as ReadQuotaResponse;
const res = parseReadQuotaResponse(xmlData);

return {
code: 0,
Expand Down
22 changes: 4 additions & 18 deletions packages/chain-sdk/src/api/objectt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import { MsgCancelCreateObjectSDKTypeEIP712 } from '@/messages/greenfield/storag
import { MsgCreateObjectSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgCreateObject';
import { MsgDeleteObjectSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgDeleteObject';
import { MsgUpdateObjectInfoSDKTypeEIP712 } from '@/messages/greenfield/storage/MsgUpdateObjectInfo';
import { parseListObjectsByBucketNameResponse } from '@/parseXML/parseListObjectsByBucketNameResponse';
import { ReqMeta } from '@/types/auth';
import { GetSpListObjectsByBucketNameResponse } from '@/types/spXML';
import { ListObjectsByBucketNameResponse } from '@/types/sp-xml/ListObjectsByBucketNameResponse';
import { getAuthorization, newRequestHeadersByMeta } from '@/utils/auth';
import { fetchWithTimeout, parseErrorXml } from '@/utils/http';
import {
Expand Down Expand Up @@ -33,7 +34,6 @@ import {
} from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx';
import { bytesFromBase64 } from '@bnb-chain/greenfield-cosmos-types/helpers';
import { Headers } from 'cross-fetch';
import { XMLParser } from 'fast-xml-parser';
import { container, delay, inject, singleton } from 'tsyringe';
import {
GRNToString,
Expand Down Expand Up @@ -62,7 +62,6 @@ import {
isValidUrl,
} from '../utils/s3';
import { Basic } from './basic';
import { OffChainAuth } from './offchainauth';
import { RpcQueryClient } from './queryclient';
import { Sp } from './sp';
import { AuthType, SpClient } from './spclient';
Expand Down Expand Up @@ -102,7 +101,7 @@ export interface IObject {

listObjects(
configParam: TListObjects,
): Promise<IObjectResultType<GetSpListObjectsByBucketNameResponse>>;
): Promise<IObjectResultType<ListObjectsByBucketNameResponse>>;

createFolder(
getApprovalParams: Omit<TBaseGetCreateObject, 'contentLength' | 'fileType' | 'expectCheckSums'>,
Expand Down Expand Up @@ -148,7 +147,6 @@ export class Objectt implements IObject {
) {}

private queryClient: RpcQueryClient = container.resolve(RpcQueryClient);
private offChainAuthClient = container.resolve(OffChainAuth);
private spClient = container.resolve(SpClient);

public async getCreateObjectApproval(configParam: TBaseGetCreateObject, authType: AuthType) {
Expand Down Expand Up @@ -610,20 +608,8 @@ export class Objectt implements IObject {
};
}

const xmlParser = new XMLParser({
isArray: (tagName: string) => {
if (tagName === 'Objects') return true;
return false;
},
numberParseOptions: {
hex: false,
leadingZeros: true,
skipLike: undefined,
eNotation: false,
},
});
const xmlData = await result.text();
const res = xmlParser.parse(xmlData) as GetSpListObjectsByBucketNameResponse;
const res = parseListObjectsByBucketNameResponse(xmlData);

return {
code: 0,
Expand Down
2 changes: 1 addition & 1 deletion packages/chain-sdk/src/offchainauth/fetch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { fetchWithTimeout } from '@/utils/http';
import { Headers } from 'cross-fetch';
import { IFetchNonce, IUpdateOneSpPubKeyParams } from '../types/storage';
import { XMLParser } from 'fast-xml-parser';
import { RequestNonceResponse } from '@/types/spXML';
import { RequestNonceResponse } from '@/types/sp-xml';

export const fetchNonce = async ({
spEndpoint,
Expand Down
19 changes: 19 additions & 0 deletions packages/chain-sdk/src/parseXML/parseGetUserBucketsResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { GetUserBucketsResponse } from '@/types';
import { XMLParser } from 'fast-xml-parser';

export const parseGetUserBucketsResponse = (data: string) => {
const xmlParser = new XMLParser({
isArray: (tagName: string) => {
if (tagName === 'Buckets') return true;
return false;
},
numberParseOptions: {
hex: false,
leadingZeros: true,
skipLike: undefined,
eNotation: false,
},
});

return xmlParser.parse(data) as GetUserBucketsResponse;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { ListObjectsByBucketNameResponse } from '@/types/sp-xml/ListObjectsByBucketNameResponse';
import { XMLParser } from 'fast-xml-parser';

export const parseListObjectsByBucketNameResponse = (data: string) => {
const arrayFields = ['Objects', 'CommonPrefixes'];
const xmlParser = new XMLParser({
isArray: (tagName: string) => {
if (arrayFields.includes(tagName)) return true;
return false;
},
numberParseOptions: {
hex: false,
leadingZeros: true,
skipLike: undefined,
eNotation: false,
},
});

const res = xmlParser.parse(data) as ListObjectsByBucketNameResponse;

if (res.GfSpListObjectsByBucketNameResponse.CommonPrefixes.length === 0) {
res.GfSpListObjectsByBucketNameResponse.CommonPrefixes = [];
}

if (res.GfSpListObjectsByBucketNameResponse.Objects.length === 0) {
res.GfSpListObjectsByBucketNameResponse.Objects = [];
}

return res;
};
7 changes: 7 additions & 0 deletions packages/chain-sdk/src/parseXML/parseReadQuotaResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { XMLParser } from 'fast-xml-parser';
import { ReadQuotaResponse } from '..';

export const parseReadQuotaResponse = (data: string) => {
const xmlParser = new XMLParser();
return xmlParser.parse(data) as ReadQuotaResponse;
};
2 changes: 1 addition & 1 deletion packages/chain-sdk/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ export * from './auth';
export * from './common';
export * from './storage';
export * from './tx';
export * from './spXML';
export * from './sp-xml';
32 changes: 32 additions & 0 deletions packages/chain-sdk/src/types/sp-xml/GetUserBucketsResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
export interface GetUserBucketsResponse {
GfSpGetUserBucketsResponse: GfSPGetUserBucketsResponse;
}

export interface GfSPGetUserBucketsResponse {
Buckets: Bucket[];
}

export interface Bucket {
BucketInfo: BucketInfo;
Removed: string;
DeleteAt: string;
DeleteReason: string;
Operator: string;
CreateTxHash: string;
UpdateTxHash: string;
UpdateAt: string;
UpdateTime: string;
}

export interface BucketInfo {
Owner: string;
BucketName: string;
Visibility: string;
Id: string;
SourceType: string;
CreateAt: string;
PaymentAddress: string;
GlobalVirtualGroupFamilyId: string;
ChargedReadQuota: string;
BucketStatus: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
export interface ListObjectsByBucketNameResponse {
GfSpListObjectsByBucketNameResponse: GfSPListObjectsByBucketNameResponse;
}

export interface GfSPListObjectsByBucketNameResponse {
Objects: TObject[];
KeyCount: string;
MaxKeys: string;
IsTruncated: string;
NextContinuationToken: string;
Name: string;
Prefix: string;
Delimiter: string;
CommonPrefixes: string[];
ContinuationToken: string;
}

export interface TObject {
ObjectInfo: ObjectInfo;
LockedBalance: string;
Removed: string;
UpdateAt: string;
DeleteAt: string;
DeleteReason: string;
Operator: string;
CreateTxHash: string;
UpdateTxHash: string;
SealTxHash: string;
}

export interface ObjectInfo {
Owner: string;
Creator: string;
BucketName: string;
ObjectName: string;
Id: string;
LocalVirtualGroupId: string;
PayloadSize: string;
Visibility: string;
ContentType: string;
CreateAt: string;
ObjectStatus: string;
RedundancyType: string;
SourceType: string;
Checksums: Checksum[];
}

export enum Checksum {
D7Dca9013758E3E20E448Eead58D2Eb075Cfd2Af6C8781B650A6Dbd1B6E49481 = 'd7dca9013758e3e20e448eead58d2eb075cfd2af6c8781b650a6dbd1b6e49481',
F803F1A72B179111F3Bea2203695D1Bacefec4Ef546D4Cdc90F5C252Bcc6F827 = 'f803f1a72b179111f3bea2203695d1bacefec4ef546d4cdc90f5c252bcc6f827',
}
9 changes: 9 additions & 0 deletions packages/chain-sdk/src/types/sp-xml/ReadQuotaResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export interface ReadQuotaResponse {
GetReadQuotaResult: {
BucketID: number;
BucketName: string;
ReadConsumedSize: number;
ReadQuotaSize: number;
SPFreeReadQuotaSize: number;
};
}
36 changes: 36 additions & 0 deletions packages/chain-sdk/src/types/sp-xml/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
export * from './GetUserBucketsResponse';
export * from './ListObjectsByBucketNameResponse';
export * from './ReadQuotaResponse';

export interface RequestErrorResponse {
Error: {
Code: string;
Message: string;
};
}

export interface RequestNonceResponse {
RequestNonceResp: {
CurrentNonce: number;
CurrentPublicKey: string;
ExpiryDate: string;
NextNonce: number;
};
}

interface ObjectInfo {
Owner: number;
Creator: number;
BucketName: string;
ObjectName: string;
Id: number;
LocalVirtualGroupId: number;
PayloadSize: number;
Visibility: number;
ContentType: string;
CreateAt: number;
ObjectStatus: number;
RedundancyType: number;
SourceType: number;
Checksums: string[];
}
Loading

0 comments on commit 2e86b92

Please sign in to comment.