@coinbase-sample/prime-sdk-ts 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/constants.js +1 -1
  2. package/dist/financing/index.js +18 -0
  3. package/dist/futures/index.js +20 -0
  4. package/dist/model/Candle.js +21 -0
  5. package/dist/model/DateOfBirth.js +21 -0
  6. package/dist/model/DetailedAddress.js +21 -0
  7. package/dist/model/GetCandlesResponse.js +21 -0
  8. package/dist/model/GetFcmSettingsResponse.js +21 -0
  9. package/dist/model/GetUnstakingStatusResponse.js +21 -0
  10. package/dist/model/ListFinancingEligibleAssetsResponse.js +21 -0
  11. package/dist/model/ListTFObligationsResponse.js +21 -0
  12. package/dist/model/NaturalPersonName.js +21 -0
  13. package/dist/model/PreviewUnstakeRequest.js +21 -0
  14. package/dist/model/PreviewUnstakeResponse.js +21 -0
  15. package/dist/model/ProcessRequirements.js +21 -0
  16. package/dist/model/RewardMetadata.js +21 -0
  17. package/dist/model/SetFcmSettingsRequest.js +21 -0
  18. package/dist/model/SetFcmSettingsResponse.js +21 -0
  19. package/dist/model/TFAsset.js +21 -0
  20. package/dist/model/TFObligation.js +21 -0
  21. package/dist/model/TravelRuleEntry.js +21 -0
  22. package/dist/model/TravelRuleParty.js +21 -0
  23. package/dist/model/TravelRuleWalletDetails.js +21 -0
  24. package/dist/model/UnstakingStatus.js +21 -0
  25. package/dist/model/VASP.js +21 -0
  26. package/dist/model/ValidatorUnstakingInfo.js +21 -0
  27. package/dist/model/enums/CandlesGranularity.js +34 -0
  28. package/dist/model/enums/EstimateType.js +28 -0
  29. package/dist/model/enums/OrderType.js +2 -1
  30. package/dist/model/enums/PegOffsetType.js +31 -0
  31. package/dist/model/enums/RewardSubtype.js +34 -0
  32. package/dist/model/enums/TransactionType.js +3 -1
  33. package/dist/model/enums/TravelRuleStatus.js +28 -0
  34. package/dist/model/enums/TravelRuleWalletType.js +31 -0
  35. package/dist/model/enums/UnstakeType.js +28 -0
  36. package/dist/model/enums/UserRole.js +2 -1
  37. package/dist/model/enums/XMCallType.js +2 -1
  38. package/dist/model/enums/XMEntityCallStatus.js +2 -1
  39. package/dist/model/enums/index.js +16 -1
  40. package/dist/products/index.js +16 -0
  41. package/dist/shared/__tests__/validation.test.js +210 -0
  42. package/dist/shared/validation.js +380 -0
  43. package/dist/staking/index.js +22 -0
  44. package/dist/types/activities/types.d.ts +1 -0
  45. package/dist/types/constants.d.ts +1 -1
  46. package/dist/types/financing/index.d.ts +5 -1
  47. package/dist/types/financing/types.d.ts +7 -1
  48. package/dist/types/futures/index.d.ts +6 -2
  49. package/dist/types/futures/types.d.ts +10 -1
  50. package/dist/types/index.d.ts +1 -1
  51. package/dist/types/model/Candle.d.ts +42 -0
  52. package/dist/types/model/CreateOrderRequest.d.ts +8 -1
  53. package/dist/types/model/CreatePortfolioAddressBookEntryRequest.d.ts +6 -0
  54. package/dist/types/model/DateOfBirth.d.ts +24 -0
  55. package/dist/types/model/DetailedAddress.d.ts +28 -0
  56. package/dist/types/model/GetCandlesResponse.d.ts +23 -0
  57. package/dist/types/model/GetFcmSettingsResponse.d.ts +25 -0
  58. package/dist/types/model/GetUnstakingStatusResponse.d.ts +42 -0
  59. package/dist/types/model/ListFinancingEligibleAssetsResponse.d.ts +26 -0
  60. package/dist/types/model/ListTFObligationsResponse.d.ts +26 -0
  61. package/dist/types/model/NaturalPersonName.d.ts +24 -0
  62. package/dist/types/model/NetworkDetails.d.ts +4 -0
  63. package/dist/types/model/Order.d.ts +12 -0
  64. package/dist/types/model/OrderPreviewRequest.d.ts +7 -0
  65. package/dist/types/model/PreviewUnstakeRequest.d.ts +28 -0
  66. package/dist/types/model/PreviewUnstakeResponse.d.ts +28 -0
  67. package/dist/types/model/ProcessRequirements.d.ts +23 -0
  68. package/dist/types/model/RewardMetadata.d.ts +23 -0
  69. package/dist/types/model/SetFcmSettingsRequest.d.ts +25 -0
  70. package/dist/types/model/SetFcmSettingsResponse.d.ts +25 -0
  71. package/dist/types/model/TFAsset.d.ts +33 -0
  72. package/dist/types/model/TFObligation.d.ts +41 -0
  73. package/dist/types/model/Transaction.d.ts +2 -0
  74. package/dist/types/model/TransactionMetadata.d.ts +2 -0
  75. package/dist/types/model/TravelRuleEntry.d.ts +38 -0
  76. package/dist/types/model/TravelRuleParty.d.ts +32 -0
  77. package/dist/types/model/TravelRuleWalletDetails.d.ts +28 -0
  78. package/dist/types/model/UnstakingStatus.d.ts +45 -0
  79. package/dist/types/model/VASP.d.ts +27 -0
  80. package/dist/types/model/ValidatorUnstakingInfo.d.ts +30 -0
  81. package/dist/types/model/enums/CandlesGranularity.d.ts +30 -0
  82. package/dist/types/model/enums/EstimateType.d.ts +24 -0
  83. package/dist/types/model/enums/OrderType.d.ts +3 -2
  84. package/dist/types/model/enums/PegOffsetType.d.ts +27 -0
  85. package/dist/types/model/enums/RewardSubtype.d.ts +30 -0
  86. package/dist/types/model/enums/TransactionType.d.ts +4 -2
  87. package/dist/types/model/enums/TravelRuleStatus.d.ts +24 -0
  88. package/dist/types/model/enums/TravelRuleWalletType.d.ts +27 -0
  89. package/dist/types/model/enums/UnstakeType.d.ts +24 -0
  90. package/dist/types/model/enums/UserRole.d.ts +3 -2
  91. package/dist/types/model/enums/XMCallType.d.ts +3 -2
  92. package/dist/types/model/enums/XMEntityCallStatus.d.ts +3 -2
  93. package/dist/types/model/enums/index.d.ts +7 -0
  94. package/dist/types/model/index.d.ts +23 -0
  95. package/dist/types/products/index.d.ts +3 -1
  96. package/dist/types/products/types.d.ts +10 -1
  97. package/dist/types/shared/__tests__/validation.test.d.ts +1 -0
  98. package/dist/types/shared/validation.d.ts +176 -0
  99. package/dist/types/staking/index.d.ts +5 -1
  100. package/dist/types/staking/types.d.ts +12 -1
  101. package/dist/types/transactions/types.d.ts +3 -1
  102. package/dist/types/wallets/types.d.ts +1 -0
  103. package/package.json +8 -8
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Represents a validation error for a specific parameter
3
+ */
4
+ export interface ValidationError {
5
+ paramName: string;
6
+ message: string;
7
+ value?: any;
8
+ }
9
+ /**
10
+ * Validation result that accumulates errors with fluent/builder pattern support
11
+ */
12
+ export declare class ValidationResult {
13
+ private errors;
14
+ /**
15
+ * Add a validation error
16
+ */
17
+ addError(paramName: string, message: string, value?: any): void;
18
+ /**
19
+ * Check if there are any validation errors
20
+ */
21
+ hasErrors(): boolean;
22
+ /**
23
+ * Get all validation errors
24
+ */
25
+ getErrors(): ValidationError[];
26
+ /**
27
+ * Validates that a required UUID parameter is present and valid.
28
+ * Returns this for method chaining.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * validator
33
+ * .validateRequiredUUID(request.portfolioId, 'portfolioId')
34
+ * .validateRequiredUUID(request.orderId, 'orderId')
35
+ * .check();
36
+ * ```
37
+ */
38
+ validateRequiredUUID(value: string | undefined | null, paramName: string): this;
39
+ /**
40
+ * Validates that an optional UUID parameter is valid if provided.
41
+ * Returns this for method chaining.
42
+ */
43
+ validateOptionalUUID(value: string | undefined | null, paramName: string): this;
44
+ /**
45
+ * Validates that a required string parameter is present and not empty.
46
+ * Returns this for method chaining.
47
+ */
48
+ validateRequiredString(value: string | undefined | null, paramName: string): this;
49
+ /**
50
+ * Validates that an optional string parameter is not empty if provided.
51
+ * Returns this for method chaining.
52
+ */
53
+ validateOptionalString(value: string | undefined | null, paramName: string): this;
54
+ /**
55
+ * Throw an exception if there are validation errors.
56
+ * Automatically detects the calling method name if no context is provided.
57
+ *
58
+ * @param contextMessage - Optional context message. If not provided, attempts to detect method name.
59
+ * @throws {CoinbasePrimeClientException} if there are validation errors
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const validator = createValidator();
64
+ * validateRequiredUUID(validator, request.id, 'id');
65
+ * validator.throwIfInvalid(); // Automatically detects calling method
66
+ * ```
67
+ */
68
+ throwIfInvalid(contextMessage?: string): void;
69
+ /**
70
+ * Alias for throwIfInvalid() - more natural for fluent/builder pattern.
71
+ * Throw an exception if there are validation errors.
72
+ *
73
+ * @param contextMessage - Optional context message. If not provided, attempts to detect method name.
74
+ * @throws {CoinbasePrimeClientException} if there are validation errors
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * validator
79
+ * .validateRequiredUUID(request.portfolioId, 'portfolioId')
80
+ * .validateRequiredUUID(request.orderId, 'orderId')
81
+ * .check(); // ✅ Fluent pattern
82
+ * ```
83
+ */
84
+ check(contextMessage?: string): void;
85
+ /**
86
+ * Attempts to extract the calling method name from the stack trace.
87
+ * This provides automatic context for validation errors.
88
+ * Falls back to 'Request validation failed' if method name cannot be determined.
89
+ */
90
+ private getCallerContext;
91
+ }
92
+ /**
93
+ * Validates that a string is a valid UUID v4 format
94
+ */
95
+ export declare function isValidUUID(value: string): boolean;
96
+ /**
97
+ * Validates that a required UUID parameter is present and valid
98
+ */
99
+ export declare function validateRequiredUUID(validator: ValidationResult, value: string | undefined | null, paramName: string): void;
100
+ /**
101
+ * Validates that an optional UUID parameter is valid if provided
102
+ */
103
+ export declare function validateOptionalUUID(validator: ValidationResult, value: string | undefined | null, paramName: string): void;
104
+ /**
105
+ * Validates that a required string parameter is present and not empty
106
+ */
107
+ export declare function validateRequiredString(validator: ValidationResult, value: string | undefined | null, paramName: string): void;
108
+ /**
109
+ * Validates that an optional string parameter is not empty if provided
110
+ */
111
+ export declare function validateOptionalString(validator: ValidationResult, value: string | undefined | null, paramName: string): void;
112
+ /**
113
+ * Convenience function to create a new ValidationResult
114
+ */
115
+ export declare function createValidator(): ValidationResult;
116
+ /**
117
+ * Creates a validator with property accessor support for automatic field name inference.
118
+ *
119
+ * @param source - The source object containing the fields to validate
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * validate(request)
124
+ * .requiredUUID(r => r.portfolioId)
125
+ * .requiredUUID(r => r.orderId)
126
+ * .check();
127
+ * ```
128
+ */
129
+ export declare function validate<T extends Record<string, any>>(source: T): PropertyValidator<T>;
130
+ /**
131
+ * Validator with property accessor support for automatic field name inference.
132
+ * Uses Proxy to track property accesses and extract field names automatically.
133
+ */
134
+ export declare class PropertyValidator<T extends Record<string, any>> {
135
+ private validator;
136
+ private source;
137
+ constructor(source: T);
138
+ /**
139
+ * Validates that a required UUID field is present and valid.
140
+ * Automatically extracts the field name from the property accessor.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * validate(request)
145
+ * .requiredUUID(r => r.portfolioId)
146
+ * .check();
147
+ * ```
148
+ */
149
+ requiredUUID(accessor: (source: T) => string | undefined | null): this;
150
+ /**
151
+ * Validates that an optional UUID field is valid if provided.
152
+ */
153
+ optionalUUID(accessor: (source: T) => string | undefined | null): this;
154
+ /**
155
+ * Validates that a required string field is present and not empty.
156
+ */
157
+ requiredString(accessor: (source: T) => string | undefined | null): this;
158
+ /**
159
+ * Validates that an optional string field is not empty if provided.
160
+ */
161
+ optionalString(accessor: (source: T) => string | undefined | null): this;
162
+ /**
163
+ * Throws if there are validation errors.
164
+ * Automatically detects the calling method name.
165
+ */
166
+ check(contextMessage?: string): void;
167
+ /**
168
+ * Alias for check() for backward compatibility.
169
+ */
170
+ throwIfInvalid(contextMessage?: string): void;
171
+ /**
172
+ * Extracts the property name and value from a property accessor function.
173
+ * Uses a Proxy to track which property was accessed.
174
+ */
175
+ private extractProperty;
176
+ }
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { IPrimeApiClient, CoinbaseCallOptions } from '../clients';
17
- import { CreateStakeRequest, CreateStakeResponse, CreateUnstakeRequest, CreateUnstakeResponse, CreatePortfolioStakeRequest, CreatePortfolioStakeResponse, CreatePortfolioUnstakeRequest, CreatePortfolioUnstakeResponse, QueryTransactionValidatorsRequest, QueryTransactionValidatorsResponse, ClaimRewardsRequest, ClaimRewardsResponse } from './types';
17
+ import { CreateStakeRequest, CreateStakeResponse, CreateUnstakeRequest, CreateUnstakeResponse, CreatePortfolioStakeRequest, CreatePortfolioStakeResponse, CreatePortfolioUnstakeRequest, CreatePortfolioUnstakeResponse, QueryTransactionValidatorsRequest, QueryTransactionValidatorsResponse, ClaimRewardsRequest, ClaimRewardsResponse, PreviewUnstakeRequest, PreviewUnstakeResponse, GetUnstakingStatusRequest, GetUnstakingStatusResponse } from './types';
18
18
  export interface IStakingService {
19
19
  createStake(request: CreateStakeRequest, options?: CoinbaseCallOptions): Promise<CreateStakeResponse>;
20
20
  createUnstake(request: CreateUnstakeRequest, options?: CoinbaseCallOptions): Promise<CreateUnstakeResponse>;
@@ -22,6 +22,8 @@ export interface IStakingService {
22
22
  createPortfolioUnstake(request: CreatePortfolioUnstakeRequest, options?: CoinbaseCallOptions): Promise<CreatePortfolioUnstakeResponse>;
23
23
  queryTransactionValidators(request: QueryTransactionValidatorsRequest, options?: CoinbaseCallOptions): Promise<QueryTransactionValidatorsResponse>;
24
24
  claimRewards(request: ClaimRewardsRequest, options?: CoinbaseCallOptions): Promise<ClaimRewardsResponse>;
25
+ previewUnstake(request: PreviewUnstakeRequest, options?: CoinbaseCallOptions): Promise<PreviewUnstakeResponse>;
26
+ getUnstakingStatus(request: GetUnstakingStatusRequest, options?: CoinbaseCallOptions): Promise<GetUnstakingStatusResponse>;
25
27
  }
26
28
  export declare class StakingService implements IStakingService {
27
29
  private client;
@@ -32,4 +34,6 @@ export declare class StakingService implements IStakingService {
32
34
  createPortfolioUnstake(request: CreatePortfolioUnstakeRequest, options?: CoinbaseCallOptions): Promise<CreatePortfolioUnstakeResponse>;
33
35
  queryTransactionValidators(request: QueryTransactionValidatorsRequest, options?: CoinbaseCallOptions): Promise<QueryTransactionValidatorsResponse>;
34
36
  claimRewards(request: ClaimRewardsRequest, options?: CoinbaseCallOptions): Promise<ClaimRewardsResponse>;
37
+ previewUnstake(request: PreviewUnstakeRequest, options?: CoinbaseCallOptions): Promise<PreviewUnstakeResponse>;
38
+ getUnstakingStatus(request: GetUnstakingStatusRequest, options?: CoinbaseCallOptions): Promise<GetUnstakingStatusResponse>;
35
39
  }
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { Brand } from '../shared/brand';
17
17
  import { BasePaginatedRequest, PaginatedResponseMethods } from '../shared/paginatedResponse';
18
- import { StakingInitiateResponse, StakingInitiateRequest, StakingUnstakeResponse, PortfolioStakingInitiateRequest, PortfolioStakingInitiateResponse, PortfolioStakingUnstakeRequest, PortfolioStakingUnstakeResponse, ListTransactionValidatorsResponse as internalListTransactionValidatorsResponse, StakingClaimRewardsRequest as internalStakingClaimRewardsRequest, StakingClaimRewardsResponse as internalStakingClaimRewardsResponse } from 'src/model/';
18
+ import { StakingInitiateResponse, StakingInitiateRequest, StakingUnstakeResponse, PortfolioStakingInitiateRequest, PortfolioStakingInitiateResponse, PortfolioStakingUnstakeRequest, PortfolioStakingUnstakeResponse, ListTransactionValidatorsResponse as internalListTransactionValidatorsResponse, StakingClaimRewardsRequest as internalStakingClaimRewardsRequest, StakingClaimRewardsResponse as internalStakingClaimRewardsResponse, PreviewUnstakeResponse as internalPreviewUnstakeResponse, GetUnstakingStatusResponse as internalGetUnstakingStatusResponse } from 'src/model/';
19
19
  export type CreateStakeRequest = StakingInitiateRequest & {
20
20
  portfolioId: string;
21
21
  walletId: string;
@@ -45,3 +45,14 @@ export type ClaimRewardsRequest = internalStakingClaimRewardsRequest & {
45
45
  walletId: string;
46
46
  };
47
47
  export type ClaimRewardsResponse = Brand<internalStakingClaimRewardsResponse, 'ClaimRewardsResponse'>;
48
+ export type PreviewUnstakeRequest = {
49
+ portfolioId: string;
50
+ walletId: string;
51
+ amount: string;
52
+ };
53
+ export type PreviewUnstakeResponse = Brand<internalPreviewUnstakeResponse, 'PreviewUnstakeResponse'>;
54
+ export type GetUnstakingStatusRequest = {
55
+ portfolioId: string;
56
+ walletId: string;
57
+ };
58
+ export type GetUnstakingStatusResponse = Brand<internalGetUnstakingStatusResponse, 'GetUnstakingStatusResponse'>;
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Brand } from '../shared/brand';
17
- import { TransactionType } from '../model/enums/';
17
+ import { TransactionType, TravelRuleStatus } from '../model/enums/';
18
18
  import { GetPortfolioTransactionsResponse, GetWalletTransactionsResponse, GetTransactionResponse as internalGet, CreateConversionRequest as internalCreateConversion, CreateConversionResponse as internalCreateConversionResp, CreateATransferBetweenTwoWallets, CreateWalletWithdrawalRequest, CreateWalletWithdrawalResponse, CreateWalletTransferResponse, CreateOnchainTransactionRequest as internalCreate, CreateOnchainTransactionResponse as internalCreateResp } from '../model/';
19
19
  import { Pagination } from '../shared/pagination';
20
20
  import { PaginatedResponseMethods, BasePaginatedRequest } from '../shared/paginatedResponse';
@@ -24,6 +24,8 @@ export type ListPortfolioTransactionsRequest = Pagination & {
24
24
  types?: TransactionType[];
25
25
  startTime?: string;
26
26
  endTime?: string;
27
+ getNetworkUnifiedTransactions?: boolean;
28
+ travelRuleStatus?: TravelRuleStatus[];
27
29
  };
28
30
  type BaseListPortfolioTransactionsResponse = Brand<GetPortfolioTransactionsResponse, 'ListPortfolioTransactionsResponse'>;
29
31
  export type ListPortfolioTransactionsResponse = BaseListPortfolioTransactionsResponse & PaginatedResponseMethods<ListPortfolioTransactionsRequest & BasePaginatedRequest, BaseListPortfolioTransactionsResponse, any>;
@@ -22,6 +22,7 @@ export type ListWalletsRequest = Pagination & {
22
22
  portfolioId: string;
23
23
  type: WalletType;
24
24
  symbols?: string[];
25
+ getNetworkUnifiedWallets?: boolean;
25
26
  };
26
27
  export type BaseListWalletsResponse = Brand<GetWalletsResponse, 'ListWalletsResponse'>;
27
28
  export type ListWalletsResponse = BaseListWalletsResponse & PaginatedResponseMethods<ListWalletsRequest & BasePaginatedRequest, BaseListWalletsResponse, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinbase-sample/prime-sdk-ts",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "exports": {
@@ -57,15 +57,15 @@
57
57
  "description": "",
58
58
  "devDependencies": {
59
59
  "@types/node": "^22.14.0",
60
- "@typescript-eslint/eslint-plugin": "^8.39.1",
61
- "@typescript-eslint/parser": "^8.39.1",
62
- "dotenv": "^17.2.1",
63
- "eslint": "^9.33.0",
60
+ "@typescript-eslint/eslint-plugin": "^8.49.0",
61
+ "@typescript-eslint/parser": "^8.49.0",
62
+ "dotenv": "^17.2.3",
63
+ "eslint": "^9.39.1",
64
64
  "eslint-config-prettier": "^10.1.8",
65
65
  "eslint-plugin-prettier": "^5.5.4",
66
- "js-yaml": "^4.1.0",
67
- "prettier": "^3.6.2",
68
- "typescript": "^5.9.2"
66
+ "js-yaml": "^4.1.1",
67
+ "prettier": "^3.7.4",
68
+ "typescript": "^5.9.3"
69
69
  },
70
70
  "dependencies": {
71
71
  "@coinbase-sample/core-ts": "^0.2.1"