@drift-labs/common 1.0.12 → 1.0.13

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 (43) hide show
  1. package/lib/common-ui-utils/commonUiUtils.d.ts +1 -1
  2. package/lib/common-ui-utils/trading.d.ts +1 -1
  3. package/lib/common-ui-utils/trading.js +2 -1
  4. package/lib/common-ui-utils/trading.js.map +1 -1
  5. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.d.ts +20 -2
  6. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +32 -0
  7. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -1
  8. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/types.d.ts +31 -1
  9. package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/types.js.map +1 -1
  10. package/lib/drift/Drift/clients/AuthorityDrift/index.d.ts +10 -2
  11. package/lib/drift/Drift/clients/AuthorityDrift/index.js +12 -0
  12. package/lib/drift/Drift/clients/AuthorityDrift/index.js.map +1 -1
  13. package/lib/drift/base/actions/builder/createRevenueShareAccount.d.ts +62 -0
  14. package/lib/drift/base/actions/builder/createRevenueShareAccount.js +59 -0
  15. package/lib/drift/base/actions/builder/createRevenueShareAccount.js.map +1 -0
  16. package/lib/drift/base/actions/builder/createRevenueShareEscrow.d.ts +126 -0
  17. package/lib/drift/base/actions/builder/createRevenueShareEscrow.js +114 -0
  18. package/lib/drift/base/actions/builder/createRevenueShareEscrow.js.map +1 -0
  19. package/lib/drift/base/actions/builder/index.d.ts +3 -0
  20. package/lib/drift/base/actions/builder/index.js +20 -0
  21. package/lib/drift/base/actions/builder/index.js.map +1 -0
  22. package/lib/drift/base/actions/builder/manageBuilder.d.ts +157 -0
  23. package/lib/drift/base/actions/builder/manageBuilder.js +139 -0
  24. package/lib/drift/base/actions/builder/manageBuilder.js.map +1 -0
  25. package/lib/drift/base/actions/index.d.ts +1 -0
  26. package/lib/drift/base/actions/index.js +1 -0
  27. package/lib/drift/base/actions/index.js.map +1 -1
  28. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.d.ts +29 -1
  29. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +2 -1
  30. package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -1
  31. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.d.ts +8 -0
  32. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +1 -0
  33. package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -1
  34. package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.d.ts +56 -2
  35. package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js +7 -2
  36. package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js.map +1 -1
  37. package/lib/drift/base/constants/index.d.ts +2 -0
  38. package/lib/drift/base/constants/index.js +19 -0
  39. package/lib/drift/base/constants/index.js.map +1 -0
  40. package/lib/drift/index.d.ts +1 -0
  41. package/lib/drift/index.js +1 -0
  42. package/lib/drift/index.js.map +1 -1
  43. package/package.json +1 -1
@@ -53,6 +53,32 @@ interface PrepSwiftOrderParams {
53
53
  };
54
54
  /** Buffer slots to account for signing time (default: 2 slots ~1 second). If a user is required to manually sign the message, this should be a higher number. */
55
55
  slotBuffer?: number;
56
+ /**
57
+ * Optional builder code parameters for revenue sharing.
58
+ * If provided, the builder will receive a portion of the trading fees.
59
+ *
60
+ * Prerequisites:
61
+ * - User must have initialized a RevenueShareEscrow account
62
+ * - Builder must be in the user's approved_builders list
63
+ * - builderFeeTenthBps must not exceed the builder's max_fee_tenth_bps
64
+ */
65
+ builderParams?: {
66
+ /**
67
+ * Index of the builder in the user's approved_builders list.
68
+ * This is the position (0-indexed) of the builder in the RevenueShareEscrow.approved_builders array.
69
+ */
70
+ builderIdx: number;
71
+ /**
72
+ * Fee to charge for this order, in tenths of basis points.
73
+ * Must be <= the builder's max_fee_tenth_bps.
74
+ *
75
+ * Examples:
76
+ * - 10 = 1 bps = 0.01%
77
+ * - 50 = 5 bps = 0.05%
78
+ * - 100 = 10 bps = 0.1%
79
+ */
80
+ builderFeeTenthBps: number;
81
+ };
56
82
  }
57
83
  /**
58
84
  * Prepares a swift order by encoding the order parameters into a message format
@@ -71,7 +97,7 @@ interface PrepSwiftOrderParams {
71
97
  * - `slotForSignedMsg`: The slot number for the signed message
72
98
  * - `signedMsgOrderUuid`: Unique identifier for the signed message order
73
99
  */
74
- export declare const prepSwiftOrder: ({ driftClient, takerUserAccount, currentSlot, isDelegate, orderParams, slotBuffer, }: PrepSwiftOrderParams) => {
100
+ export declare const prepSwiftOrder: ({ driftClient, takerUserAccount, currentSlot, isDelegate, orderParams, slotBuffer, builderParams, }: PrepSwiftOrderParams) => {
75
101
  hexEncodedSwiftOrderMessage: {
76
102
  uInt8Array: Uint8Array;
77
103
  string: string;
@@ -177,11 +203,39 @@ type PrepSignAndSendSwiftOrderParams = {
177
203
  */
178
204
  positionMaxLeverage?: number;
179
205
  };
206
+ /**
207
+ * Optional builder code parameters for revenue sharing.
208
+ * If provided, the builder will receive a portion of the trading fees.
209
+ *
210
+ * Prerequisites:
211
+ * - User must have initialized a RevenueShareEscrow account
212
+ * - Builder must be in the user's approved_builders list
213
+ * - builderFeeTenthBps must not exceed the builder's max_fee_tenth_bps
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * builderParams: {
218
+ * builderIdx: 0, // First builder in approved list
219
+ * builderFeeTenthBps: 50 // 5 bps = 0.05%
220
+ * }
221
+ * ```
222
+ */
223
+ builderParams?: {
224
+ /**
225
+ * Index of the builder in the user's approved_builders list.
226
+ */
227
+ builderIdx: number;
228
+ /**
229
+ * Fee to charge for this order, in tenths of basis points.
230
+ * Must be <= the builder's max_fee_tenth_bps.
231
+ */
232
+ builderFeeTenthBps: number;
233
+ };
180
234
  };
181
235
  /**
182
236
  * Handles the full flow of the swift order, from preparing to signing and sending to the Swift server.
183
237
  * Callbacks can be provided to handle the events of the Swift order.
184
238
  * Returns a promise that resolves when the Swift order has reached a terminal state (i.e. confirmed, expired, or errored).
185
239
  */
186
- export declare const prepSignAndSendSwiftOrder: ({ driftClient, subAccountId, userAccountPubKey, marketIndex, slotBuffer, swiftOptions, orderParams, }: PrepSignAndSendSwiftOrderParams) => Promise<void>;
240
+ export declare const prepSignAndSendSwiftOrder: ({ driftClient, subAccountId, userAccountPubKey, marketIndex, slotBuffer, swiftOptions, orderParams, builderParams, }: PrepSignAndSendSwiftOrderParams) => Promise<void>;
187
241
  export {};
@@ -25,7 +25,8 @@ exports.MINIMUM_SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS = 5;
25
25
  * - `slotForSignedMsg`: The slot number for the signed message
26
26
  * - `signedMsgOrderUuid`: Unique identifier for the signed message order
27
27
  */
28
- const prepSwiftOrder = ({ driftClient, takerUserAccount, currentSlot, isDelegate, orderParams, slotBuffer = 35, }) => {
28
+ const prepSwiftOrder = ({ driftClient, takerUserAccount, currentSlot, isDelegate, orderParams, slotBuffer = 35, builderParams, }) => {
29
+ var _a, _b;
29
30
  const mainOrderParams = (0, sdk_2.getOrderParams)({
30
31
  ...orderParams.main,
31
32
  auctionDuration: orderParams.main.auctionDuration || null, // swift server expects auctionDuration to be null if not set, won't handle 0
@@ -52,6 +53,9 @@ const prepSwiftOrder = ({ driftClient, takerUserAccount, currentSlot, isDelegate
52
53
  maxMarginRatio: orderParams.positionMaxLeverage
53
54
  ? trading_1.TRADING_UTILS.convertLeverageToMarginRatio(orderParams.positionMaxLeverage)
54
55
  : null,
56
+ // Include builder params if provided
57
+ builderIdx: (_a = builderParams === null || builderParams === void 0 ? void 0 : builderParams.builderIdx) !== null && _a !== void 0 ? _a : null,
58
+ builderFeeTenthBps: (_b = builderParams === null || builderParams === void 0 ? void 0 : builderParams.builderFeeTenthBps) !== null && _b !== void 0 ? _b : null,
55
59
  };
56
60
  const signedMsgOrderParamsMessage = isDelegate
57
61
  ? {
@@ -161,7 +165,7 @@ exports.sendSwiftOrder = sendSwiftOrder;
161
165
  * Callbacks can be provided to handle the events of the Swift order.
162
166
  * Returns a promise that resolves when the Swift order has reached a terminal state (i.e. confirmed, expired, or errored).
163
167
  */
164
- const prepSignAndSendSwiftOrder = async ({ driftClient, subAccountId, userAccountPubKey, marketIndex, slotBuffer, swiftOptions, orderParams, }) => {
168
+ const prepSignAndSendSwiftOrder = async ({ driftClient, subAccountId, userAccountPubKey, marketIndex, slotBuffer, swiftOptions, orderParams, builderParams, }) => {
165
169
  var _a, _b, _c, _d, _e;
166
170
  const currentSlot = await driftClient.connection.getSlot('confirmed');
167
171
  const { hexEncodedSwiftOrderMessage, signedMsgOrderUuid, signedMsgOrderParamsMessage, } = (0, exports.prepSwiftOrder)({
@@ -174,6 +178,7 @@ const prepSignAndSendSwiftOrder = async ({ driftClient, subAccountId, userAccoun
174
178
  isDelegate: swiftOptions.isDelegate || false,
175
179
  orderParams,
176
180
  slotBuffer,
181
+ builderParams,
177
182
  });
178
183
  (_b = (_a = swiftOptions.callbacks) === null || _a === void 0 ? void 0 : _a.onOrderParamsMessagePrepped) === null || _b === void 0 ? void 0 : _b.call(_a, signedMsgOrderParamsMessage);
179
184
  const expirationTimeMs = Math.max(slotBuffer +
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tgetSignedMsgUserAccountPublicKey,\n\tSignedMsgOrderParamsDelegateMessage,\n\tSignedMsgOrderParamsMessage,\n\tSLOT_TIME_ESTIMATE_MS,\n} from '@drift-labs/sdk';\nimport {\n\tBN,\n\tDriftClient,\n\tgenerateSignedMsgUuid,\n\tgetOrderParams,\n\tOptionalOrderParams,\n\tPublicKey,\n} from '@drift-labs/sdk';\nimport {\n\tSwiftClient,\n\tSwiftOrderConfirmedEvent,\n\tSwiftOrderErroredEvent,\n\tSwiftOrderEvent,\n\tSwiftOrderEventWithParams,\n\tSwiftOrderSentEvent,\n} from '../../../../../../clients/swiftClient';\nimport { MarketId } from '../../../../../../types';\nimport { Observable, Subscription } from 'rxjs';\nimport { OptionalTriggerOrderParams } from '../types';\nimport { TRADING_UTILS } from '../../../../../../common-ui-utils/trading';\n\nexport const SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS = 5;\nexport const MINIMUM_SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS = 5;\n\nexport interface SwiftOrderOptions {\n\twallet: {\n\t\tsignMessage: (message: Uint8Array) => Promise<Uint8Array>;\n\t\ttakerAuthority: PublicKey;\n\t\tsigningAuthority?: PublicKey;\n\t};\n\tswiftServerUrl: string;\n\tsignedMessageOrderSlotBuffer?: number;\n\tisDelegate?: boolean;\n\tcallbacks?: {\n\t\tonOrderParamsMessagePrepped?: (\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSigningExpiry?: (\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSigningSuccess?: (\n\t\t\tsignedMessage: Uint8Array,\n\t\t\t// we add the following here, because the onSigningSuccess callback is called before the order is sent to the swift server\n\t\t\torderUuid: Uint8Array,\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSent?: (\n\t\t\tswiftSentEvent: SwiftOrderEventWithParams<SwiftOrderSentEvent>\n\t\t) => void;\n\t\tonConfirmed?: (\n\t\t\tswiftConfirmedEvent: SwiftOrderEventWithParams<SwiftOrderConfirmedEvent>\n\t\t) => void;\n\t\tonExpired?: (\n\t\t\tswiftExpiredEvent: SwiftOrderEventWithParams<SwiftOrderErroredEvent>\n\t\t) => void;\n\t\tonErrored?: (\n\t\t\tswiftErroredEvent: SwiftOrderEventWithParams<SwiftOrderErroredEvent>\n\t\t) => void;\n\t};\n}\n\nexport type SwiftOrderObservable = Observable<SwiftOrderEvent>;\n\ninterface PrepSwiftOrderParams {\n\t/** The Drift client instance */\n\tdriftClient: DriftClient;\n\t/** The taker user account information */\n\ttakerUserAccount: {\n\t\t/** Public key of the user account */\n\t\tpubKey: PublicKey;\n\t\t/** User account ID */\n\t\tsubAccountId: number;\n\t};\n\t/** Current blockchain slot number */\n\tcurrentSlot: number;\n\t/** Whether this is a delegate order */\n\tisDelegate: boolean;\n\t/** Order parameters including main order and optional stop loss/take profit */\n\torderParams: {\n\t\t/** Main order parameters */\n\t\tmain: OptionalOrderParams;\n\t\t/** Optional stop loss order parameters */\n\t\tstopLoss?: OptionalTriggerOrderParams;\n\t\t/** Optional take profit order parameters */\n\t\ttakeProfit?: OptionalTriggerOrderParams;\n\t\t/** Optional max leverage for the position */\n\t\tpositionMaxLeverage?: number;\n\t};\n\t/** Buffer slots to account for signing time (default: 2 slots ~1 second). If a user is required to manually sign the message, this should be a higher number. */\n\tslotBuffer?: number;\n}\n\n/**\n * Prepares a swift order by encoding the order parameters into a message format\n * suitable for signing and sending to the Swift server.\n *\n * @param driftClient - The Drift client instance\n * @param takerUserAccount - The taker user account information\n * @param currentSlot - Current blockchain slot number\n * @param isDelegate - Whether this is a delegate order\n * @param orderParams - Order parameters including main order and optional stop loss/take profit\n * @param slotBuffer - Buffer slots to account for signing time (default: 35 slots ~14 seconds). Use this default value if it is not an auction order, else used an estimate number of slots to sign the message.\n *\n * @returns An object containing:\n * - `hexEncodedSwiftOrderMessage`: The encoded order message in both Uint8Array and string formats. The Uint8Array format is for a wallet to sign, while the string format is used to send to the SWIFT server.\n * - `signedMsgOrderParamsMessage`: The signed message order parameters\n * - `slotForSignedMsg`: The slot number for the signed message\n * - `signedMsgOrderUuid`: Unique identifier for the signed message order\n */\nexport const prepSwiftOrder = ({\n\tdriftClient,\n\ttakerUserAccount,\n\tcurrentSlot,\n\tisDelegate,\n\torderParams,\n\tslotBuffer = 35,\n}: PrepSwiftOrderParams): {\n\thexEncodedSwiftOrderMessage: {\n\t\tuInt8Array: Uint8Array;\n\t\tstring: string;\n\t};\n\tsignedMsgOrderParamsMessage:\n\t\t| SignedMsgOrderParamsMessage\n\t\t| SignedMsgOrderParamsDelegateMessage;\n\tslotForSignedMsg: BN;\n\tsignedMsgOrderUuid: Uint8Array;\n} => {\n\tconst mainOrderParams = getOrderParams({\n\t\t...orderParams.main,\n\t\tauctionDuration: orderParams.main.auctionDuration || null, // swift server expects auctionDuration to be null if not set, won't handle 0\n\t});\n\n\t// buffer for time the user takes to sign a message and send to the swift server\n\tconst slotForSignedMsg = new BN(currentSlot + slotBuffer);\n\n\tconst signedMsgOrderUuid = generateSignedMsgUuid();\n\n\tconst baseSignedMsgOrderParamsMessage = {\n\t\tsignedMsgOrderParams: mainOrderParams,\n\t\tuuid: signedMsgOrderUuid,\n\t\tslot: slotForSignedMsg,\n\t\tstopLossOrderParams: orderParams.stopLoss\n\t\t\t? {\n\t\t\t\t\tbaseAssetAmount: orderParams.stopLoss.baseAssetAmount,\n\t\t\t\t\ttriggerPrice: orderParams.stopLoss.triggerPrice,\n\t\t\t }\n\t\t\t: null,\n\t\ttakeProfitOrderParams: orderParams.takeProfit\n\t\t\t? {\n\t\t\t\t\tbaseAssetAmount: orderParams.takeProfit.baseAssetAmount,\n\t\t\t\t\ttriggerPrice: orderParams.takeProfit.triggerPrice,\n\t\t\t }\n\t\t\t: null,\n\t\tmaxMarginRatio: orderParams.positionMaxLeverage\n\t\t\t? TRADING_UTILS.convertLeverageToMarginRatio(\n\t\t\t\t\torderParams.positionMaxLeverage\n\t\t\t )\n\t\t\t: null,\n\t};\n\n\tconst signedMsgOrderParamsMessage:\n\t\t| SignedMsgOrderParamsMessage\n\t\t| SignedMsgOrderParamsDelegateMessage = isDelegate\n\t\t? {\n\t\t\t\t...baseSignedMsgOrderParamsMessage,\n\t\t\t\ttakerPubkey: takerUserAccount.pubKey,\n\t\t }\n\t\t: {\n\t\t\t\t...baseSignedMsgOrderParamsMessage,\n\t\t\t\tsubAccountId: takerUserAccount.subAccountId,\n\t\t };\n\n\tconst encodedOrderMessage = driftClient.encodeSignedMsgOrderParamsMessage(\n\t\tsignedMsgOrderParamsMessage,\n\t\tisDelegate\n\t);\n\tconst hexEncodedSwiftOrderMessage = Buffer.from(\n\t\tencodedOrderMessage.toString('hex')\n\t);\n\n\treturn {\n\t\thexEncodedSwiftOrderMessage: {\n\t\t\tuInt8Array: new Uint8Array(hexEncodedSwiftOrderMessage),\n\t\t\tstring: hexEncodedSwiftOrderMessage.toString(),\n\t\t},\n\t\tsignedMsgOrderParamsMessage,\n\t\tslotForSignedMsg,\n\t\tsignedMsgOrderUuid,\n\t};\n};\n\n/**\n * Error thrown when an auction slot has expired\n */\nexport class AuctionSlotExpiredError extends Error {\n\tname = 'AuctionSlotExpiredError';\n\n\t/**\n\t * Creates an instance of AuctionSlotExpiredError\n\t * @param message - Error message (default: 'Auction slot expired')\n\t */\n\tconstructor(message: string = 'Auction slot expired') {\n\t\tsuper(message);\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, AuctionSlotExpiredError);\n\t\t}\n\t}\n}\n\ninterface SignOrderMsgParams {\n\t/** Wallet instance with message signing capability */\n\twallet: {\n\t\t/** Function to sign a message */\n\t\tsignMessage: (message: Uint8Array) => Promise<Uint8Array>;\n\t};\n\t/** Hex-encoded swift order message to sign */\n\thexEncodedSwiftOrderMessage: Uint8Array;\n\t/** Time in milliseconds till the auction expires */\n\texpirationTimeMs: number;\n\t/** Callback function called when the auction expires */\n\tonExpired?: () => void;\n}\n\n/**\n * Signs a swift order message with slot expiration monitoring.\n * Continuously monitors the current slot and rejects with AuctionSlotExpiredError\n * if the auction slot expires before signing is complete.\n *\n * @param wallet - Wallet instance with message signing capability\n * @param hexEncodedSwiftOrderMessage - Hex-encoded swift order message to sign\n * @param expirationTimeMs - Time in milliseconds till the auction expires\n * @param onExpired - Callback function called when the auction expires\n *\n * @returns Promise resolving to the signed message as Uint8Array\n * @throws {AuctionSlotExpiredError} When the auction slot expires before signing completes\n */\nexport const signSwiftOrderMsg = async ({\n\twallet,\n\thexEncodedSwiftOrderMessage,\n\texpirationTimeMs,\n\tonExpired,\n}: SignOrderMsgParams): Promise<Uint8Array> => {\n\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\ttry {\n\t\t// Sign the message\n\t\tconst signedMessagePromise = wallet.signMessage(\n\t\t\thexEncodedSwiftOrderMessage\n\t\t);\n\n\t\tconst signingExpiredPromise = new Promise<never>((_resolve, reject) => {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tonExpired?.();\n\t\t\t\treject(new AuctionSlotExpiredError());\n\t\t\t}, expirationTimeMs);\n\t\t});\n\n\t\t// Ensure that the user signs the message before the expiration time\n\t\tconst signedMessage = await Promise.race([\n\t\t\tsignedMessagePromise,\n\t\t\tsigningExpiredPromise,\n\t\t]);\n\n\t\treturn signedMessage;\n\t} finally {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n};\n\n/**\n * Parameters for sending a swift order to the Swift server\n * @interface SendSwiftOrderParams\n */\ninterface SendSwiftOrderParams {\n\t/** The Drift client instance */\n\tdriftClient: DriftClient;\n\t/** Market identifier for the order */\n\tmarketId: MarketId;\n\t/** Hex-encoded swift order message as string */\n\thexEncodedSwiftOrderMessageString: string;\n\t/** The signed message from the wallet */\n\tsignedMessage: Uint8Array;\n\t/** Unique identifier for the signed message order */\n\tsignedMsgOrderUuid: Uint8Array;\n\t/** Public key of the taker authority */\n\ttakerAuthority: PublicKey;\n\t/** Public key of the signing authority */\n\tsigningAuthority: PublicKey;\n\t/** Duration of the auction in slots (optional) */\n\tauctionDuration?: number;\n}\n\n/**\n * Sends a swift order to the Swift server and handles the response.\n * Monitors the order status and calls appropriate callback functions based on the response type.\n *\n * @param driftClient - The Drift client instance\n * @param marketId - Market identifier for the order\n * @param hexEncodedSwiftOrderMessageString - Hex-encoded swift order message as string\n * @param signedMessage - The signed message from the wallet\n * @param signedMsgOrderUuid - Unique identifier for the signed message order\n * @param takerAuthority - Public key of the taker authority\n * @param signingAuthority - Public key of the signing authority\n * @param auctionDurationSlot - Duration of the auction in slots (optional)\n * @param swiftConfirmationSlotBuffer - Slot buffer for swift server confirmation time (default: 15)\n * @param onExpired - Callback function called when the order expires\n * @param onErrored - Callback function called when the order encounters an error\n * @param onConfirmed - Callback function called when the order is confirmed\n *\n * @returns Promise that resolves when the order processing is complete\n *\n */\nexport const sendSwiftOrder = ({\n\tdriftClient,\n\tmarketId,\n\thexEncodedSwiftOrderMessageString,\n\tsignedMessage,\n\tsignedMsgOrderUuid,\n\ttakerAuthority,\n\tsigningAuthority,\n\tauctionDuration,\n}: SendSwiftOrderParams): SwiftOrderObservable => {\n\tconst signedMsgUserOrdersAccountPubkey = getSignedMsgUserAccountPublicKey(\n\t\tdriftClient.program.programId,\n\t\ttakerAuthority\n\t);\n\n\tconst swiftOrderObservable = SwiftClient.sendAndConfirmSwiftOrderWS(\n\t\tdriftClient.connection,\n\t\tdriftClient,\n\t\tmarketId.marketIndex,\n\t\tmarketId.marketType,\n\t\thexEncodedSwiftOrderMessageString,\n\t\tBuffer.from(signedMessage),\n\t\ttakerAuthority,\n\t\tsignedMsgUserOrdersAccountPubkey,\n\t\tsignedMsgOrderUuid,\n\t\t((auctionDuration ?? 0) + 15) * SLOT_TIME_ESTIMATE_MS,\n\t\tsigningAuthority\n\t);\n\n\treturn swiftOrderObservable;\n};\n\ntype PrepSignAndSendSwiftOrderParams = {\n\tdriftClient: DriftClient;\n\tsubAccountId: number;\n\tuserAccountPubKey: PublicKey;\n\tmarketIndex: number;\n\tslotBuffer: number;\n\tswiftOptions: SwiftOrderOptions;\n\torderParams: {\n\t\tmain: OptionalOrderParams;\n\t\ttakeProfit?: OptionalTriggerOrderParams;\n\t\tstopLoss?: OptionalTriggerOrderParams;\n\t\t/**\n\t\t * Adjusts the max leverage of a position.\n\t\t */\n\t\tpositionMaxLeverage?: number;\n\t};\n};\n\n/**\n * Handles the full flow of the swift order, from preparing to signing and sending to the Swift server.\n * Callbacks can be provided to handle the events of the Swift order.\n * Returns a promise that resolves when the Swift order has reached a terminal state (i.e. confirmed, expired, or errored).\n */\nexport const prepSignAndSendSwiftOrder = async ({\n\tdriftClient,\n\tsubAccountId,\n\tuserAccountPubKey,\n\tmarketIndex,\n\tslotBuffer,\n\tswiftOptions,\n\torderParams,\n}: PrepSignAndSendSwiftOrderParams): Promise<void> => {\n\tconst currentSlot = await driftClient.connection.getSlot('confirmed');\n\n\tconst {\n\t\thexEncodedSwiftOrderMessage,\n\t\tsignedMsgOrderUuid,\n\t\tsignedMsgOrderParamsMessage,\n\t} = prepSwiftOrder({\n\t\tdriftClient,\n\t\ttakerUserAccount: {\n\t\t\tpubKey: userAccountPubKey,\n\t\t\tsubAccountId: subAccountId,\n\t\t},\n\t\tcurrentSlot,\n\t\tisDelegate: swiftOptions.isDelegate || false,\n\t\torderParams,\n\t\tslotBuffer,\n\t});\n\n\tswiftOptions.callbacks?.onOrderParamsMessagePrepped?.(\n\t\tsignedMsgOrderParamsMessage\n\t);\n\n\tconst expirationTimeMs =\n\t\tMath.max(\n\t\t\tslotBuffer +\n\t\t\t\t(orderParams.main.auctionDuration || 0) -\n\t\t\t\tSWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS,\n\t\t\tMINIMUM_SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS\n\t\t) * SLOT_TIME_ESTIMATE_MS;\n\n\t// Ensure that the user signs the message before the expiration time\n\tconst signedMessage = await signSwiftOrderMsg({\n\t\twallet: swiftOptions.wallet,\n\t\thexEncodedSwiftOrderMessage: hexEncodedSwiftOrderMessage.uInt8Array,\n\t\texpirationTimeMs,\n\t\tonExpired: () =>\n\t\t\tswiftOptions.callbacks?.onSigningExpiry?.(signedMsgOrderParamsMessage),\n\t});\n\n\tswiftOptions.callbacks?.onSigningSuccess?.(\n\t\tsignedMessage,\n\t\tsignedMsgOrderUuid,\n\t\tsignedMsgOrderParamsMessage\n\t);\n\n\t// Initialize SwiftClient (required before using sendSwiftOrder)\n\tSwiftClient.init(swiftOptions.swiftServerUrl);\n\n\t// Create a promise-based wrapper for the sendSwiftOrder callback-based API\n\tconst swiftOrderObservable = sendSwiftOrder({\n\t\tdriftClient,\n\t\tmarketId: MarketId.createPerpMarket(marketIndex),\n\t\thexEncodedSwiftOrderMessageString: hexEncodedSwiftOrderMessage.string,\n\t\tsignedMessage,\n\t\tsignedMsgOrderUuid,\n\t\ttakerAuthority: swiftOptions.wallet.takerAuthority,\n\t\tsigningAuthority:\n\t\t\tswiftOptions.wallet.signingAuthority ??\n\t\t\tswiftOptions.wallet.takerAuthority,\n\t\tauctionDuration: orderParams.main.auctionDuration || undefined,\n\t});\n\n\tconst wrapSwiftOrderEvent = <T extends SwiftOrderEvent>(\n\t\tswiftOrderEvent: T\n\t) => {\n\t\treturn {\n\t\t\t...swiftOrderEvent,\n\t\t\tswiftOrderUuid: signedMsgOrderUuid,\n\t\t\torderParamsMessage: signedMsgOrderParamsMessage,\n\t\t};\n\t};\n\n\tlet promiseResolver: (value: void | PromiseLike<void>) => void;\n\tconst promise = new Promise<void>((resolve) => {\n\t\tpromiseResolver = resolve;\n\t});\n\n\tconst handleTerminalEvent = (subscription: Subscription) => {\n\t\tsubscription.unsubscribe();\n\t\tpromiseResolver();\n\t};\n\n\tconst subscription = swiftOrderObservable.subscribe((swiftOrderEvent) => {\n\t\tif (swiftOrderEvent.type === 'sent') {\n\t\t\tswiftOptions.callbacks?.onSent?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t}\n\t\tif (swiftOrderEvent.type === 'confirmed') {\n\t\t\tswiftOptions.callbacks?.onConfirmed?.(\n\t\t\t\twrapSwiftOrderEvent(swiftOrderEvent)\n\t\t\t);\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t\tif (swiftOrderEvent.type === 'expired') {\n\t\t\tswiftOptions.callbacks?.onExpired?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t\tif (swiftOrderEvent.type === 'errored') {\n\t\t\tswiftOptions.callbacks?.onErrored?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t});\n\n\treturn promise;\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.ts"],"names":[],"mappings":";;;AAAA,yCAKyB;AACzB,yCAOyB;AACzB,uEAO+C;AAC/C,mDAAmD;AAGnD,uEAA0E;AAE7D,QAAA,2CAA2C,GAAG,CAAC,CAAC;AAChD,QAAA,mDAAmD,GAAG,CAAC,CAAC;AAsGrE;;;;;;;;;;;;;;;;GAgBG;AACI,MAAM,cAAc,GAAG,CAAC,EAC9B,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,GAAG,EAAE,EACf,aAAa,GACS,EAUrB,EAAE;;IACH,MAAM,eAAe,GAAG,IAAA,oBAAc,EAAC;QACtC,GAAG,WAAW,CAAC,IAAI;QACnB,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE,6EAA6E;KACxI,CAAC,CAAC;IAEH,gFAAgF;IAChF,MAAM,gBAAgB,GAAG,IAAI,QAAE,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAG,IAAA,2BAAqB,GAAE,CAAC;IAEnD,MAAM,+BAA+B,GAAG;QACvC,oBAAoB,EAAE,eAAe;QACrC,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,gBAAgB;QACtB,mBAAmB,EAAE,WAAW,CAAC,QAAQ;YACxC,CAAC,CAAC;gBACA,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,eAAe;gBACrD,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,YAAY;aAC9C;YACH,CAAC,CAAC,IAAI;QACP,qBAAqB,EAAE,WAAW,CAAC,UAAU;YAC5C,CAAC,CAAC;gBACA,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,eAAe;gBACvD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,YAAY;aAChD;YACH,CAAC,CAAC,IAAI;QACP,cAAc,EAAE,WAAW,CAAC,mBAAmB;YAC9C,CAAC,CAAC,uBAAa,CAAC,4BAA4B,CAC1C,WAAW,CAAC,mBAAmB,CAC9B;YACH,CAAC,CAAC,IAAI;QACP,qCAAqC;QACrC,UAAU,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,mCAAI,IAAI;QAC7C,kBAAkB,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,kBAAkB,mCAAI,IAAI;KAC7D,CAAC;IAEF,MAAM,2BAA2B,GAEQ,UAAU;QAClD,CAAC,CAAC;YACA,GAAG,+BAA+B;YAClC,WAAW,EAAE,gBAAgB,CAAC,MAAM;SACnC;QACH,CAAC,CAAC;YACA,GAAG,+BAA+B;YAClC,YAAY,EAAE,gBAAgB,CAAC,YAAY;SAC1C,CAAC;IAEL,MAAM,mBAAmB,GAAG,WAAW,CAAC,iCAAiC,CACxE,2BAA2B,EAC3B,UAAU,CACV,CAAC;IACF,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAC9C,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CACnC,CAAC;IAEF,OAAO;QACN,2BAA2B,EAAE;YAC5B,UAAU,EAAE,IAAI,UAAU,CAAC,2BAA2B,CAAC;YACvD,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE;SAC9C;QACD,2BAA2B;QAC3B,gBAAgB;QAChB,kBAAkB;KAClB,CAAC;AACH,CAAC,CAAC;AApFW,QAAA,cAAc,kBAoFzB;AAEF;;GAEG;AACH,MAAa,uBAAwB,SAAQ,KAAK;IAGjD;;;OAGG;IACH,YAAY,UAAkB,sBAAsB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAPhB,SAAI,GAAG,yBAAyB,CAAC;QAQhC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC7B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QACxD,CAAC;IACF,CAAC;CACD;AAbD,0DAaC;AAgBD;;;;;;;;;;;;GAYG;AACI,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACvC,MAAM,EACN,2BAA2B,EAC3B,gBAAgB,EAChB,SAAS,GACW,EAAuB,EAAE;IAC7C,IAAI,SAAoD,CAAC;IAEzD,IAAI,CAAC;QACJ,mBAAmB;QACnB,MAAM,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC9C,2BAA2B,CAC3B,CAAC;QAEF,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACrE,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;gBACd,MAAM,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;YACvC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACxC,oBAAoB;YACpB,qBAAqB;SACrB,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACtB,CAAC;YAAS,CAAC;QACV,IAAI,SAAS,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAjCW,QAAA,iBAAiB,qBAiC5B;AAyBF;;;;;;;;;;;;;;;;;;;GAmBG;AACI,MAAM,cAAc,GAAG,CAAC,EAC9B,WAAW,EACX,QAAQ,EACR,iCAAiC,EACjC,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,GACO,EAAwB,EAAE;IAChD,MAAM,gCAAgC,GAAG,IAAA,sCAAgC,EACxE,WAAW,CAAC,OAAO,CAAC,SAAS,EAC7B,cAAc,CACd,CAAC;IAEF,MAAM,oBAAoB,GAAG,yBAAW,CAAC,0BAA0B,CAClE,WAAW,CAAC,UAAU,EACtB,WAAW,EACX,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,UAAU,EACnB,iCAAiC,EACjC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAC1B,cAAc,EACd,gCAAgC,EAChC,kBAAkB,EAClB,CAAC,CAAC,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,2BAAqB,EACrD,gBAAgB,CAChB,CAAC;IAEF,OAAO,oBAAoB,CAAC;AAC7B,CAAC,CAAC;AA9BW,QAAA,cAAc,kBA8BzB;AAgDF;;;;GAIG;AACI,MAAM,yBAAyB,GAAG,KAAK,EAAE,EAC/C,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,GACoB,EAAiB,EAAE;;IACpD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE,MAAM,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,2BAA2B,GAC3B,GAAG,IAAA,sBAAc,EAAC;QAClB,WAAW;QACX,gBAAgB,EAAE;YACjB,MAAM,EAAE,iBAAiB;YACzB,YAAY,EAAE,YAAY;SAC1B;QACD,WAAW;QACX,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,KAAK;QAC5C,WAAW;QACX,UAAU;QACV,aAAa;KACb,CAAC,CAAC;IAEH,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,2BAA2B,mDAClD,2BAA2B,CAC3B,CAAC;IAEF,MAAM,gBAAgB,GACrB,IAAI,CAAC,GAAG,CACP,UAAU;QACT,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QACvC,mDAA2C,EAC5C,2DAAmD,CACnD,GAAG,2BAAqB,CAAC;IAE3B,oEAAoE;IACpE,MAAM,aAAa,GAAG,MAAM,IAAA,yBAAiB,EAAC;QAC7C,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,2BAA2B,EAAE,2BAA2B,CAAC,UAAU;QACnE,gBAAgB;QAChB,SAAS,EAAE,GAAG,EAAE,eACf,OAAA,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,eAAe,mDAAG,2BAA2B,CAAC,CAAA,EAAA;KACvE,CAAC,CAAC;IAEH,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,gBAAgB,mDACvC,aAAa,EACb,kBAAkB,EAClB,2BAA2B,CAC3B,CAAC;IAEF,gEAAgE;IAChE,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAE9C,2EAA2E;IAC3E,MAAM,oBAAoB,GAAG,IAAA,sBAAc,EAAC;QAC3C,WAAW;QACX,QAAQ,EAAE,gBAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAChD,iCAAiC,EAAE,2BAA2B,CAAC,MAAM;QACrE,aAAa;QACb,kBAAkB;QAClB,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,cAAc;QAClD,gBAAgB,EACf,MAAA,YAAY,CAAC,MAAM,CAAC,gBAAgB,mCACpC,YAAY,CAAC,MAAM,CAAC,cAAc;QACnC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,SAAS;KAC9D,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,CAC3B,eAAkB,EACjB,EAAE;QACH,OAAO;YACN,GAAG,eAAe;YAClB,cAAc,EAAE,kBAAkB;YAClC,kBAAkB,EAAE,2BAA2B;SAC/C,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,eAA0D,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC7C,eAAe,GAAG,OAAO,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,CAAC,YAA0B,EAAE,EAAE;QAC1D,YAAY,CAAC,WAAW,EAAE,CAAC;QAC3B,eAAe,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,EAAE;;QACvE,IAAI,eAAe,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,MAAM,mDAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,WAAW,mDAClC,mBAAmB,CAAC,eAAe,CAAC,CACpC,CAAC;YACF,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,SAAS,mDAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;YAC1E,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAA,MAAA,YAAY,CAAC,SAAS,0CAAE,SAAS,mDAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;YAC1E,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAlHW,QAAA,yBAAyB,6BAkHpC","sourcesContent":["import {\n\tgetSignedMsgUserAccountPublicKey,\n\tSignedMsgOrderParamsDelegateMessage,\n\tSignedMsgOrderParamsMessage,\n\tSLOT_TIME_ESTIMATE_MS,\n} from '@drift-labs/sdk';\nimport {\n\tBN,\n\tDriftClient,\n\tgenerateSignedMsgUuid,\n\tgetOrderParams,\n\tOptionalOrderParams,\n\tPublicKey,\n} from '@drift-labs/sdk';\nimport {\n\tSwiftClient,\n\tSwiftOrderConfirmedEvent,\n\tSwiftOrderErroredEvent,\n\tSwiftOrderEvent,\n\tSwiftOrderEventWithParams,\n\tSwiftOrderSentEvent,\n} from '../../../../../../clients/swiftClient';\nimport { MarketId } from '../../../../../../types';\nimport { Observable, Subscription } from 'rxjs';\nimport { OptionalTriggerOrderParams } from '../types';\nimport { TRADING_UTILS } from '../../../../../../common-ui-utils/trading';\n\nexport const SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS = 5;\nexport const MINIMUM_SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS = 5;\n\nexport interface SwiftOrderOptions {\n\twallet: {\n\t\tsignMessage: (message: Uint8Array) => Promise<Uint8Array>;\n\t\ttakerAuthority: PublicKey;\n\t\tsigningAuthority?: PublicKey;\n\t};\n\tswiftServerUrl: string;\n\tsignedMessageOrderSlotBuffer?: number;\n\tisDelegate?: boolean;\n\tcallbacks?: {\n\t\tonOrderParamsMessagePrepped?: (\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSigningExpiry?: (\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSigningSuccess?: (\n\t\t\tsignedMessage: Uint8Array,\n\t\t\t// we add the following here, because the onSigningSuccess callback is called before the order is sent to the swift server\n\t\t\torderUuid: Uint8Array,\n\t\t\torderParamsMessage:\n\t\t\t\t| SignedMsgOrderParamsMessage\n\t\t\t\t| SignedMsgOrderParamsDelegateMessage\n\t\t) => void;\n\t\tonSent?: (\n\t\t\tswiftSentEvent: SwiftOrderEventWithParams<SwiftOrderSentEvent>\n\t\t) => void;\n\t\tonConfirmed?: (\n\t\t\tswiftConfirmedEvent: SwiftOrderEventWithParams<SwiftOrderConfirmedEvent>\n\t\t) => void;\n\t\tonExpired?: (\n\t\t\tswiftExpiredEvent: SwiftOrderEventWithParams<SwiftOrderErroredEvent>\n\t\t) => void;\n\t\tonErrored?: (\n\t\t\tswiftErroredEvent: SwiftOrderEventWithParams<SwiftOrderErroredEvent>\n\t\t) => void;\n\t};\n}\n\nexport type SwiftOrderObservable = Observable<SwiftOrderEvent>;\n\ninterface PrepSwiftOrderParams {\n\t/** The Drift client instance */\n\tdriftClient: DriftClient;\n\t/** The taker user account information */\n\ttakerUserAccount: {\n\t\t/** Public key of the user account */\n\t\tpubKey: PublicKey;\n\t\t/** User account ID */\n\t\tsubAccountId: number;\n\t};\n\t/** Current blockchain slot number */\n\tcurrentSlot: number;\n\t/** Whether this is a delegate order */\n\tisDelegate: boolean;\n\t/** Order parameters including main order and optional stop loss/take profit */\n\torderParams: {\n\t\t/** Main order parameters */\n\t\tmain: OptionalOrderParams;\n\t\t/** Optional stop loss order parameters */\n\t\tstopLoss?: OptionalTriggerOrderParams;\n\t\t/** Optional take profit order parameters */\n\t\ttakeProfit?: OptionalTriggerOrderParams;\n\t\t/** Optional max leverage for the position */\n\t\tpositionMaxLeverage?: number;\n\t};\n\t/** Buffer slots to account for signing time (default: 2 slots ~1 second). If a user is required to manually sign the message, this should be a higher number. */\n\tslotBuffer?: number;\n\t/**\n\t * Optional builder code parameters for revenue sharing.\n\t * If provided, the builder will receive a portion of the trading fees.\n\t *\n\t * Prerequisites:\n\t * - User must have initialized a RevenueShareEscrow account\n\t * - Builder must be in the user's approved_builders list\n\t * - builderFeeTenthBps must not exceed the builder's max_fee_tenth_bps\n\t */\n\tbuilderParams?: {\n\t\t/**\n\t\t * Index of the builder in the user's approved_builders list.\n\t\t * This is the position (0-indexed) of the builder in the RevenueShareEscrow.approved_builders array.\n\t\t */\n\t\tbuilderIdx: number;\n\t\t/**\n\t\t * Fee to charge for this order, in tenths of basis points.\n\t\t * Must be <= the builder's max_fee_tenth_bps.\n\t\t *\n\t\t * Examples:\n\t\t * - 10 = 1 bps = 0.01%\n\t\t * - 50 = 5 bps = 0.05%\n\t\t * - 100 = 10 bps = 0.1%\n\t\t */\n\t\tbuilderFeeTenthBps: number;\n\t};\n}\n\n/**\n * Prepares a swift order by encoding the order parameters into a message format\n * suitable for signing and sending to the Swift server.\n *\n * @param driftClient - The Drift client instance\n * @param takerUserAccount - The taker user account information\n * @param currentSlot - Current blockchain slot number\n * @param isDelegate - Whether this is a delegate order\n * @param orderParams - Order parameters including main order and optional stop loss/take profit\n * @param slotBuffer - Buffer slots to account for signing time (default: 35 slots ~14 seconds). Use this default value if it is not an auction order, else used an estimate number of slots to sign the message.\n *\n * @returns An object containing:\n * - `hexEncodedSwiftOrderMessage`: The encoded order message in both Uint8Array and string formats. The Uint8Array format is for a wallet to sign, while the string format is used to send to the SWIFT server.\n * - `signedMsgOrderParamsMessage`: The signed message order parameters\n * - `slotForSignedMsg`: The slot number for the signed message\n * - `signedMsgOrderUuid`: Unique identifier for the signed message order\n */\nexport const prepSwiftOrder = ({\n\tdriftClient,\n\ttakerUserAccount,\n\tcurrentSlot,\n\tisDelegate,\n\torderParams,\n\tslotBuffer = 35,\n\tbuilderParams,\n}: PrepSwiftOrderParams): {\n\thexEncodedSwiftOrderMessage: {\n\t\tuInt8Array: Uint8Array;\n\t\tstring: string;\n\t};\n\tsignedMsgOrderParamsMessage:\n\t\t| SignedMsgOrderParamsMessage\n\t\t| SignedMsgOrderParamsDelegateMessage;\n\tslotForSignedMsg: BN;\n\tsignedMsgOrderUuid: Uint8Array;\n} => {\n\tconst mainOrderParams = getOrderParams({\n\t\t...orderParams.main,\n\t\tauctionDuration: orderParams.main.auctionDuration || null, // swift server expects auctionDuration to be null if not set, won't handle 0\n\t});\n\n\t// buffer for time the user takes to sign a message and send to the swift server\n\tconst slotForSignedMsg = new BN(currentSlot + slotBuffer);\n\n\tconst signedMsgOrderUuid = generateSignedMsgUuid();\n\n\tconst baseSignedMsgOrderParamsMessage = {\n\t\tsignedMsgOrderParams: mainOrderParams,\n\t\tuuid: signedMsgOrderUuid,\n\t\tslot: slotForSignedMsg,\n\t\tstopLossOrderParams: orderParams.stopLoss\n\t\t\t? {\n\t\t\t\t\tbaseAssetAmount: orderParams.stopLoss.baseAssetAmount,\n\t\t\t\t\ttriggerPrice: orderParams.stopLoss.triggerPrice,\n\t\t\t }\n\t\t\t: null,\n\t\ttakeProfitOrderParams: orderParams.takeProfit\n\t\t\t? {\n\t\t\t\t\tbaseAssetAmount: orderParams.takeProfit.baseAssetAmount,\n\t\t\t\t\ttriggerPrice: orderParams.takeProfit.triggerPrice,\n\t\t\t }\n\t\t\t: null,\n\t\tmaxMarginRatio: orderParams.positionMaxLeverage\n\t\t\t? TRADING_UTILS.convertLeverageToMarginRatio(\n\t\t\t\t\torderParams.positionMaxLeverage\n\t\t\t )\n\t\t\t: null,\n\t\t// Include builder params if provided\n\t\tbuilderIdx: builderParams?.builderIdx ?? null,\n\t\tbuilderFeeTenthBps: builderParams?.builderFeeTenthBps ?? null,\n\t};\n\n\tconst signedMsgOrderParamsMessage:\n\t\t| SignedMsgOrderParamsMessage\n\t\t| SignedMsgOrderParamsDelegateMessage = isDelegate\n\t\t? {\n\t\t\t\t...baseSignedMsgOrderParamsMessage,\n\t\t\t\ttakerPubkey: takerUserAccount.pubKey,\n\t\t }\n\t\t: {\n\t\t\t\t...baseSignedMsgOrderParamsMessage,\n\t\t\t\tsubAccountId: takerUserAccount.subAccountId,\n\t\t };\n\n\tconst encodedOrderMessage = driftClient.encodeSignedMsgOrderParamsMessage(\n\t\tsignedMsgOrderParamsMessage,\n\t\tisDelegate\n\t);\n\tconst hexEncodedSwiftOrderMessage = Buffer.from(\n\t\tencodedOrderMessage.toString('hex')\n\t);\n\n\treturn {\n\t\thexEncodedSwiftOrderMessage: {\n\t\t\tuInt8Array: new Uint8Array(hexEncodedSwiftOrderMessage),\n\t\t\tstring: hexEncodedSwiftOrderMessage.toString(),\n\t\t},\n\t\tsignedMsgOrderParamsMessage,\n\t\tslotForSignedMsg,\n\t\tsignedMsgOrderUuid,\n\t};\n};\n\n/**\n * Error thrown when an auction slot has expired\n */\nexport class AuctionSlotExpiredError extends Error {\n\tname = 'AuctionSlotExpiredError';\n\n\t/**\n\t * Creates an instance of AuctionSlotExpiredError\n\t * @param message - Error message (default: 'Auction slot expired')\n\t */\n\tconstructor(message: string = 'Auction slot expired') {\n\t\tsuper(message);\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, AuctionSlotExpiredError);\n\t\t}\n\t}\n}\n\ninterface SignOrderMsgParams {\n\t/** Wallet instance with message signing capability */\n\twallet: {\n\t\t/** Function to sign a message */\n\t\tsignMessage: (message: Uint8Array) => Promise<Uint8Array>;\n\t};\n\t/** Hex-encoded swift order message to sign */\n\thexEncodedSwiftOrderMessage: Uint8Array;\n\t/** Time in milliseconds till the auction expires */\n\texpirationTimeMs: number;\n\t/** Callback function called when the auction expires */\n\tonExpired?: () => void;\n}\n\n/**\n * Signs a swift order message with slot expiration monitoring.\n * Continuously monitors the current slot and rejects with AuctionSlotExpiredError\n * if the auction slot expires before signing is complete.\n *\n * @param wallet - Wallet instance with message signing capability\n * @param hexEncodedSwiftOrderMessage - Hex-encoded swift order message to sign\n * @param expirationTimeMs - Time in milliseconds till the auction expires\n * @param onExpired - Callback function called when the auction expires\n *\n * @returns Promise resolving to the signed message as Uint8Array\n * @throws {AuctionSlotExpiredError} When the auction slot expires before signing completes\n */\nexport const signSwiftOrderMsg = async ({\n\twallet,\n\thexEncodedSwiftOrderMessage,\n\texpirationTimeMs,\n\tonExpired,\n}: SignOrderMsgParams): Promise<Uint8Array> => {\n\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\ttry {\n\t\t// Sign the message\n\t\tconst signedMessagePromise = wallet.signMessage(\n\t\t\thexEncodedSwiftOrderMessage\n\t\t);\n\n\t\tconst signingExpiredPromise = new Promise<never>((_resolve, reject) => {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tonExpired?.();\n\t\t\t\treject(new AuctionSlotExpiredError());\n\t\t\t}, expirationTimeMs);\n\t\t});\n\n\t\t// Ensure that the user signs the message before the expiration time\n\t\tconst signedMessage = await Promise.race([\n\t\t\tsignedMessagePromise,\n\t\t\tsigningExpiredPromise,\n\t\t]);\n\n\t\treturn signedMessage;\n\t} finally {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n};\n\n/**\n * Parameters for sending a swift order to the Swift server\n * @interface SendSwiftOrderParams\n */\ninterface SendSwiftOrderParams {\n\t/** The Drift client instance */\n\tdriftClient: DriftClient;\n\t/** Market identifier for the order */\n\tmarketId: MarketId;\n\t/** Hex-encoded swift order message as string */\n\thexEncodedSwiftOrderMessageString: string;\n\t/** The signed message from the wallet */\n\tsignedMessage: Uint8Array;\n\t/** Unique identifier for the signed message order */\n\tsignedMsgOrderUuid: Uint8Array;\n\t/** Public key of the taker authority */\n\ttakerAuthority: PublicKey;\n\t/** Public key of the signing authority */\n\tsigningAuthority: PublicKey;\n\t/** Duration of the auction in slots (optional) */\n\tauctionDuration?: number;\n}\n\n/**\n * Sends a swift order to the Swift server and handles the response.\n * Monitors the order status and calls appropriate callback functions based on the response type.\n *\n * @param driftClient - The Drift client instance\n * @param marketId - Market identifier for the order\n * @param hexEncodedSwiftOrderMessageString - Hex-encoded swift order message as string\n * @param signedMessage - The signed message from the wallet\n * @param signedMsgOrderUuid - Unique identifier for the signed message order\n * @param takerAuthority - Public key of the taker authority\n * @param signingAuthority - Public key of the signing authority\n * @param auctionDurationSlot - Duration of the auction in slots (optional)\n * @param swiftConfirmationSlotBuffer - Slot buffer for swift server confirmation time (default: 15)\n * @param onExpired - Callback function called when the order expires\n * @param onErrored - Callback function called when the order encounters an error\n * @param onConfirmed - Callback function called when the order is confirmed\n *\n * @returns Promise that resolves when the order processing is complete\n *\n */\nexport const sendSwiftOrder = ({\n\tdriftClient,\n\tmarketId,\n\thexEncodedSwiftOrderMessageString,\n\tsignedMessage,\n\tsignedMsgOrderUuid,\n\ttakerAuthority,\n\tsigningAuthority,\n\tauctionDuration,\n}: SendSwiftOrderParams): SwiftOrderObservable => {\n\tconst signedMsgUserOrdersAccountPubkey = getSignedMsgUserAccountPublicKey(\n\t\tdriftClient.program.programId,\n\t\ttakerAuthority\n\t);\n\n\tconst swiftOrderObservable = SwiftClient.sendAndConfirmSwiftOrderWS(\n\t\tdriftClient.connection,\n\t\tdriftClient,\n\t\tmarketId.marketIndex,\n\t\tmarketId.marketType,\n\t\thexEncodedSwiftOrderMessageString,\n\t\tBuffer.from(signedMessage),\n\t\ttakerAuthority,\n\t\tsignedMsgUserOrdersAccountPubkey,\n\t\tsignedMsgOrderUuid,\n\t\t((auctionDuration ?? 0) + 15) * SLOT_TIME_ESTIMATE_MS,\n\t\tsigningAuthority\n\t);\n\n\treturn swiftOrderObservable;\n};\n\ntype PrepSignAndSendSwiftOrderParams = {\n\tdriftClient: DriftClient;\n\tsubAccountId: number;\n\tuserAccountPubKey: PublicKey;\n\tmarketIndex: number;\n\tslotBuffer: number;\n\tswiftOptions: SwiftOrderOptions;\n\torderParams: {\n\t\tmain: OptionalOrderParams;\n\t\ttakeProfit?: OptionalTriggerOrderParams;\n\t\tstopLoss?: OptionalTriggerOrderParams;\n\t\t/**\n\t\t * Adjusts the max leverage of a position.\n\t\t */\n\t\tpositionMaxLeverage?: number;\n\t};\n\t/**\n\t * Optional builder code parameters for revenue sharing.\n\t * If provided, the builder will receive a portion of the trading fees.\n\t *\n\t * Prerequisites:\n\t * - User must have initialized a RevenueShareEscrow account\n\t * - Builder must be in the user's approved_builders list\n\t * - builderFeeTenthBps must not exceed the builder's max_fee_tenth_bps\n\t *\n\t * @example\n\t * ```typescript\n\t * builderParams: {\n\t * builderIdx: 0, // First builder in approved list\n\t * builderFeeTenthBps: 50 // 5 bps = 0.05%\n\t * }\n\t * ```\n\t */\n\tbuilderParams?: {\n\t\t/**\n\t\t * Index of the builder in the user's approved_builders list.\n\t\t */\n\t\tbuilderIdx: number;\n\t\t/**\n\t\t * Fee to charge for this order, in tenths of basis points.\n\t\t * Must be <= the builder's max_fee_tenth_bps.\n\t\t */\n\t\tbuilderFeeTenthBps: number;\n\t};\n};\n\n/**\n * Handles the full flow of the swift order, from preparing to signing and sending to the Swift server.\n * Callbacks can be provided to handle the events of the Swift order.\n * Returns a promise that resolves when the Swift order has reached a terminal state (i.e. confirmed, expired, or errored).\n */\nexport const prepSignAndSendSwiftOrder = async ({\n\tdriftClient,\n\tsubAccountId,\n\tuserAccountPubKey,\n\tmarketIndex,\n\tslotBuffer,\n\tswiftOptions,\n\torderParams,\n\tbuilderParams,\n}: PrepSignAndSendSwiftOrderParams): Promise<void> => {\n\tconst currentSlot = await driftClient.connection.getSlot('confirmed');\n\n\tconst {\n\t\thexEncodedSwiftOrderMessage,\n\t\tsignedMsgOrderUuid,\n\t\tsignedMsgOrderParamsMessage,\n\t} = prepSwiftOrder({\n\t\tdriftClient,\n\t\ttakerUserAccount: {\n\t\t\tpubKey: userAccountPubKey,\n\t\t\tsubAccountId: subAccountId,\n\t\t},\n\t\tcurrentSlot,\n\t\tisDelegate: swiftOptions.isDelegate || false,\n\t\torderParams,\n\t\tslotBuffer,\n\t\tbuilderParams,\n\t});\n\n\tswiftOptions.callbacks?.onOrderParamsMessagePrepped?.(\n\t\tsignedMsgOrderParamsMessage\n\t);\n\n\tconst expirationTimeMs =\n\t\tMath.max(\n\t\t\tslotBuffer +\n\t\t\t\t(orderParams.main.auctionDuration || 0) -\n\t\t\t\tSWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS,\n\t\t\tMINIMUM_SWIFT_ORDER_SIGNING_EXPIRATION_BUFFER_SLOTS\n\t\t) * SLOT_TIME_ESTIMATE_MS;\n\n\t// Ensure that the user signs the message before the expiration time\n\tconst signedMessage = await signSwiftOrderMsg({\n\t\twallet: swiftOptions.wallet,\n\t\thexEncodedSwiftOrderMessage: hexEncodedSwiftOrderMessage.uInt8Array,\n\t\texpirationTimeMs,\n\t\tonExpired: () =>\n\t\t\tswiftOptions.callbacks?.onSigningExpiry?.(signedMsgOrderParamsMessage),\n\t});\n\n\tswiftOptions.callbacks?.onSigningSuccess?.(\n\t\tsignedMessage,\n\t\tsignedMsgOrderUuid,\n\t\tsignedMsgOrderParamsMessage\n\t);\n\n\t// Initialize SwiftClient (required before using sendSwiftOrder)\n\tSwiftClient.init(swiftOptions.swiftServerUrl);\n\n\t// Create a promise-based wrapper for the sendSwiftOrder callback-based API\n\tconst swiftOrderObservable = sendSwiftOrder({\n\t\tdriftClient,\n\t\tmarketId: MarketId.createPerpMarket(marketIndex),\n\t\thexEncodedSwiftOrderMessageString: hexEncodedSwiftOrderMessage.string,\n\t\tsignedMessage,\n\t\tsignedMsgOrderUuid,\n\t\ttakerAuthority: swiftOptions.wallet.takerAuthority,\n\t\tsigningAuthority:\n\t\t\tswiftOptions.wallet.signingAuthority ??\n\t\t\tswiftOptions.wallet.takerAuthority,\n\t\tauctionDuration: orderParams.main.auctionDuration || undefined,\n\t});\n\n\tconst wrapSwiftOrderEvent = <T extends SwiftOrderEvent>(\n\t\tswiftOrderEvent: T\n\t) => {\n\t\treturn {\n\t\t\t...swiftOrderEvent,\n\t\t\tswiftOrderUuid: signedMsgOrderUuid,\n\t\t\torderParamsMessage: signedMsgOrderParamsMessage,\n\t\t};\n\t};\n\n\tlet promiseResolver: (value: void | PromiseLike<void>) => void;\n\tconst promise = new Promise<void>((resolve) => {\n\t\tpromiseResolver = resolve;\n\t});\n\n\tconst handleTerminalEvent = (subscription: Subscription) => {\n\t\tsubscription.unsubscribe();\n\t\tpromiseResolver();\n\t};\n\n\tconst subscription = swiftOrderObservable.subscribe((swiftOrderEvent) => {\n\t\tif (swiftOrderEvent.type === 'sent') {\n\t\t\tswiftOptions.callbacks?.onSent?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t}\n\t\tif (swiftOrderEvent.type === 'confirmed') {\n\t\t\tswiftOptions.callbacks?.onConfirmed?.(\n\t\t\t\twrapSwiftOrderEvent(swiftOrderEvent)\n\t\t\t);\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t\tif (swiftOrderEvent.type === 'expired') {\n\t\t\tswiftOptions.callbacks?.onExpired?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t\tif (swiftOrderEvent.type === 'errored') {\n\t\t\tswiftOptions.callbacks?.onErrored?.(wrapSwiftOrderEvent(swiftOrderEvent));\n\t\t\thandleTerminalEvent(subscription);\n\t\t}\n\t});\n\n\treturn promise;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './accountNames';
2
+ export * from './auction';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./accountNames"), exports);
18
+ __exportStar(require("./auction"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/drift/base/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,4CAA0B","sourcesContent":["export * from './accountNames';\nexport * from './auction';\n"]}
@@ -1,4 +1,5 @@
1
1
  export * from './base/actions';
2
2
  export * from './base/details';
3
+ export * from './base/constants';
3
4
  export * from './Drift';
4
5
  export * from './utils';
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./base/actions"), exports);
18
18
  __exportStar(require("./base/details"), exports);
19
+ __exportStar(require("./base/constants"), exports);
19
20
  __exportStar(require("./Drift"), exports);
20
21
  __exportStar(require("./utils"), exports);
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,iDAA+B;AAC/B,0CAAwB;AACxB,0CAAwB","sourcesContent":["export * from './base/actions';\nexport * from './base/details';\nexport * from './Drift';\nexport * from './utils';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,iDAA+B;AAC/B,mDAAiC;AACjC,0CAAwB;AACxB,0CAAwB","sourcesContent":["export * from './base/actions';\nexport * from './base/details';\nexport * from './base/constants';\nexport * from './Drift';\nexport * from './utils';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/common",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "Common functions for Drift",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",