diff --git a/package.json b/package.json index 3d18ecf..959a7ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@normalfinance/utils", - "version": "1.6.3", + "version": "1.7.0", "description": "A Typescript modules for frequently used types, utilities, constants, and more across Normal repositories.", "homepage": "https://github.com/normalfinance/utils#readme", "bugs": { diff --git a/src/constants/urls.ts b/src/constants/urls.ts index fd0c814..e07bab7 100644 --- a/src/constants/urls.ts +++ b/src/constants/urls.ts @@ -49,9 +49,6 @@ export const normalUrls = { execute: '/v1/investments/execute', charge: '/v1/investments/charge', }, - divestments: { - execute: '/v1/divestments/execute', - }, schedules: '/v1/schedules', }, diff --git a/src/database/schema/divestmentOrders.ts b/src/database/schema/divestmentOrders.ts deleted file mode 100644 index f1d0224..0000000 --- a/src/database/schema/divestmentOrders.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - integer, - pgTable, - varchar, - serial, - timestamp, - uniqueIndex, -} from 'drizzle-orm/pg-core'; - -import type { InferResultType } from '../../types/database/helpers'; -import { divestments } from './divestments'; - -export type DivestmentOrder = typeof divestmentOrders.$inferSelect; -export type NewDivestmentOrder = typeof divestmentOrders.$inferInsert; -export type DivestmentOrderWithRelations = InferResultType< - 'divestmentOrders', - { divestment: true } ->; -export type DivestmentOrderWithNestedRelations = InferResultType< - 'divestmentOrders', - { - divestment: { - with: { - exchange: { - columns: { apiKey: false; apiSecret: false; apiPass: false }; - }; - index: { columns: { title: true; description: true } }; - orders: true; - }; - }; - } ->; - -export const divestmentOrders = pgTable( - 'divestmentOrders', - { - id: serial('id').primaryKey(), - divestmentId: integer('divestmentId').notNull(), - orderId: varchar('orderId', { length: 256 }).notNull(), - asset: varchar('asset', { length: 10 }).notNull(), - price: varchar('price', { length: 40 }).notNull(), - amount: varchar('amount', { length: 256 }).notNull(), - usdValue: varchar('usdValue', { length: 40 }).notNull(), - fee: varchar('fee', { length: 40 }).notNull(), - createdAt: timestamp('createdAt').defaultNow().notNull(), - updatedAt: timestamp('updatedAt').defaultNow().notNull(), - }, - (table) => ({ - unq: uniqueIndex().on(table.orderId), - }), -); - -export const divestmentOrdersRelations = relations( - divestmentOrders, - ({ one }) => ({ - divestment: one(divestments, { - fields: [divestmentOrders.divestmentId], - references: [divestments.id], - }), - }), -); diff --git a/src/database/schema/divestments.ts b/src/database/schema/divestments.ts deleted file mode 100644 index f41c9d6..0000000 --- a/src/database/schema/divestments.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - integer, - pgTable, - char, - serial, - timestamp, - decimal, - pgEnum, - uuid, - uniqueIndex, -} from 'drizzle-orm/pg-core'; - -import { IndexQuoteCurrency } from '../../types'; -import type { InferResultType } from '../../types/database/helpers'; -import { enumToPgEnum } from '../../utils/drizzle'; -import { divestmentOrders } from './divestmentOrders'; -import { exchanges } from './exchanges'; -import { indexes } from './indexes'; - -export type Divestment = typeof divestments.$inferSelect; -export type NewDivestment = typeof divestments.$inferInsert; -export type DivestmentWithOrders = InferResultType< - 'divestments', - { orders: true } ->; -export type DivestmentWithRelations = InferResultType< - 'divestments', - { - exchange: { columns: { type: true; nickname: true } }; - index: { columns: { title: true; description: true } }; - orders: true; - } ->; - -export const DivestmentCurrency = pgEnum( - 'DivestmentCurrency', - enumToPgEnum(IndexQuoteCurrency), -); - -export const DivestmentStatus = pgEnum('DivestmentStatus', [ - 'new', - 'processing', - 'failed', - 'successful', -]); - -export const divestments = pgTable( - 'divestments', - { - id: serial('id').primaryKey(), - idempotencyKey: char('idempotencyKey', { length: 256 }).notNull(), - userId: uuid('userId').notNull(), - exchangeId: integer('exchangeId').notNull(), - indexId: integer('indexId').notNull(), - portion: decimal('portion', { precision: 3, scale: 2 }).notNull(), - currency: DivestmentCurrency('currency').notNull(), - status: DivestmentStatus('status').notNull(), - createdAt: timestamp('createdAt').defaultNow().notNull(), - updatedAt: timestamp('updatedAt').defaultNow().notNull(), - }, - (table) => ({ - unq: uniqueIndex().on(table.userId, table.idempotencyKey), - }), -); - -export const divestmentsRelations = relations(divestments, ({ one, many }) => ({ - exchange: one(exchanges, { - fields: [divestments.exchangeId], - references: [exchanges.id], - }), - index: one(indexes, { - fields: [divestments.indexId], - references: [indexes.id], - }), - orders: many(divestmentOrders), -})); diff --git a/src/database/schema/index.ts b/src/database/schema/index.ts index 6fd4d7a..35ad89d 100644 --- a/src/database/schema/index.ts +++ b/src/database/schema/index.ts @@ -1,6 +1,4 @@ export * from './accountRecovery'; -export * from './divestmentOrders'; -export * from './divestments'; export * from './exchanges'; export * from './indexCriteria'; export * from './indexPerformances'; diff --git a/src/types/analytics/email.ts b/src/types/analytics/email.ts index 3974dc2..b2d0176 100644 --- a/src/types/analytics/email.ts +++ b/src/types/analytics/email.ts @@ -14,12 +14,6 @@ export enum TransactionalEmailTemplateId { InvestmentSucceeded = 'investment_succeeded', InvestmentFailed = 'investment_failed', - // Divestment - DivestmentCreated = 'divestment_created', - DivestmentCancelled = 'divestment_cancelled', - DivestmentSucceeded = 'divestment_succeeded', - DivestmentFailed = 'divestment_failed', - // Referral ReferralCreated = 'referral_created', ReferralCodeCreated = 'referral_code_created', @@ -75,24 +69,6 @@ export type TransactionalEmailArgs = { amount: string; }; - // Divestment - [TransactionalEmailTemplateId.DivestmentCreated]: { - index: string; - portion: string; - }; - [TransactionalEmailTemplateId.DivestmentCancelled]: { - index: string; - portion: string; - }; - [TransactionalEmailTemplateId.DivestmentSucceeded]: { - index: string; - portion: string; - }; - [TransactionalEmailTemplateId.DivestmentFailed]: { - index: string; - portion: string; - }; - // Referral [TransactionalEmailTemplateId.ReferralCreated]: { code: string; diff --git a/src/types/analytics/events/divestment.ts b/src/types/analytics/events/divestment.ts deleted file mode 100644 index ed7f066..0000000 --- a/src/types/analytics/events/divestment.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Divestment specific events. - */ -export enum DivestmentEventName { - // UI - SubmitDivestment = 'Submit Divestment', - - // API - DivestmentCreated = 'Divestment Created', - DivestmentCancelled = 'Divestment Cancelled', - DivestmentSucceeded = 'Divestment Succeeded', - DivestmentEnrichSucceeded = 'Divestment Enrich Succeeded', - DivestmentEnrichFailed = 'Divestment Enrich Failed', - DivestmentFailed = 'Divestment Failed', -} diff --git a/src/types/analytics/events/index.ts b/src/types/analytics/events/index.ts index 2fda80f..067e3ae 100644 --- a/src/types/analytics/events/index.ts +++ b/src/types/analytics/events/index.ts @@ -1,6 +1,5 @@ import type { AuthEventName } from './auth'; import type { BillingEventName } from './billing'; -import type { DivestmentEventName } from './divestment'; import type { ExchangeEventName } from './exchange'; import type { IndexEventName } from './indexes'; import type { InvestmentEventName } from './investment'; @@ -10,7 +9,6 @@ import type { ScheduleEventName } from './schedule'; export * from './auth'; export * from './billing'; -export * from './divestment'; export * from './exchange'; export * from './indexes'; export * from './investment'; @@ -26,5 +24,4 @@ export type AnalyticsEventName = | NotificationEventName | ReferralEventName | InvestmentEventName - | DivestmentEventName | ScheduleEventName; diff --git a/src/types/order.ts b/src/types/order.ts index a18ad39..4c3aa5e 100644 --- a/src/types/order.ts +++ b/src/types/order.ts @@ -1,10 +1,9 @@ -export type DivestmentOrderIntent = { +export type InvestmentOrderIntent = { + weight: string; asset: string; amount: string; }; -export type InvestmentOrderIntent = { weight: string } & DivestmentOrderIntent; - export type OrderSummary = { asset: string; orderId: string; diff --git a/src/utils/idempotency.ts b/src/utils/idempotency.ts index b4a45b8..b9b667a 100644 --- a/src/utils/idempotency.ts +++ b/src/utils/idempotency.ts @@ -1,7 +1,7 @@ /* eslint-disable import/no-nodejs-modules */ import { createHash } from 'crypto'; -import type { NewDivestment, NewInvestment } from '../database'; +import type { NewInvestment } from '../database'; export const IdempotencyAlgorithm = 'md5'; // or sha256 @@ -73,16 +73,3 @@ export const createInvestmentIdempotencyKey = (investment: NewInvestment) => investment.amount, investment.currency, ]); - -/** - * Creates an idempotency key for a divestment. - * @param divestment - The divestment. - * @returns The idempotency key. - */ -export const createDivestmentIdempotencyKey = (divestment: NewDivestment) => - createIdempotencyKey([ - new Date().toJSON().slice(0, 10), - divestment.indexId, - divestment.exchangeId, - divestment.portion, - ]);