From ef452c2e53baa69304862d5aa457f844ad6887cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Mili=C4=87evi=C4=87?= Date: Sat, 18 Apr 2026 18:23:14 -0500 Subject: [PATCH] feat: publish @telivityhaip packages to npm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename @haip/* → @telivityhaip/* across all packages, imports, docs, Dockerfile, CI workflow, and tsconfig paths - Remove private:true from packages/shared and packages/database to enable publish; add publishConfig + files + repository fields - Keep apps/api, apps/dashboard, tools/* private (not libraries) - Add .github/workflows/publish.yml triggered on release + workflow_dispatch (dry-run then publish with NPM_TOKEN) pnpm publish dry-run verified locally: - @telivityhaip/shared@0.0.1 (8 files, 6.6 kB) - @telivityhaip/database@0.0.1 (16 files) 575/575 tests passing, build + typecheck clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/ci.yml | 2 +- .github/workflows/publish.yml | 38 +++++++++++++++++++ README.md | 10 ++--- apps/api/Dockerfile | 6 +-- apps/api/package.json | 6 +-- apps/api/src/database/database.module.ts | 2 +- .../api/src/modules/agent/agent.controller.ts | 2 +- apps/api/src/modules/agent/agent.service.ts | 2 +- .../cancellation-predictor.agent.ts | 2 +- .../agent/channel-mix/channel-mix.agent.ts | 2 +- .../src/modules/agent/demand/demand.agent.ts | 2 +- .../guest-comms/guest-communication.agent.ts | 2 +- .../housekeeping-optimizer.agent.ts | 2 +- .../night-audit/night-audit-anomaly.agent.ts | 2 +- .../agent/overbooking/overbooking.agent.ts | 2 +- .../modules/agent/pricing/pricing.agent.ts | 2 +- .../review-response/review-response.agent.ts | 2 +- apps/api/src/modules/channel/ari.service.ts | 2 +- .../src/modules/channel/channel.service.ts | 2 +- .../channel/inbound-reservation.service.ts | 2 +- .../modules/channel/rate-parity.service.ts | 2 +- .../connect/connect-booking.service.ts | 4 +- .../connect/connect-content.service.ts | 2 +- .../modules/connect/connect-events.service.ts | 2 +- .../connect/connect-insights.service.ts | 4 +- .../modules/connect/connect-search.service.ts | 2 +- .../modules/folio/folio-routing.service.ts | 2 +- apps/api/src/modules/folio/folio.service.ts | 2 +- apps/api/src/modules/guest/guest.service.ts | 2 +- .../housekeeping/housekeeping.service.ts | 2 +- .../night-audit/night-audit.service.ts | 2 +- .../src/modules/payment/payment.service.ts | 2 +- .../payment/stripe-webhook.controller.ts | 2 +- .../src/modules/property/property.service.ts | 2 +- .../modules/rate-plan/rate-plan.service.ts | 2 +- .../src/modules/reports/reports.service.ts | 2 +- .../reservation/availability.service.ts | 2 +- .../reservation/reservation.service.ts | 2 +- .../src/modules/room/room-status.service.ts | 2 +- apps/api/src/modules/room/room.service.ts | 2 +- apps/api/src/modules/tax/tax.service.ts | 2 +- .../webhook/webhook-delivery.service.spec.ts | 2 +- .../webhook/webhook-delivery.service.ts | 2 +- .../src/modules/webhook/webhook.service.ts | 4 +- apps/dashboard/package.json | 2 +- package.json | 10 ++--- packages/database/package.json | 15 +++++++- packages/database/src/seed.ts | 2 +- packages/shared/package.json | 15 +++++++- pnpm-lock.yaml | 12 +++--- tools/mock-bookingcom/package.json | 2 +- tools/mock-siteminder/package.json | 2 +- 52 files changed, 133 insertions(+), 73 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af98f76..5560390 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: - run: pnpm install --frozen-lockfile - name: Build packages - run: pnpm -r --filter @haip/shared --filter @haip/database run build + run: pnpm -r --filter @telivityhaip/shared --filter @telivityhaip/database run build - name: Lint run: pnpm lint diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..3abcbb0 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,38 @@ +name: Publish to npm + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: 'pnpm' + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build all packages + run: pnpm build + + - name: Dry-run publish + run: pnpm -r publish --access public --no-git-checks --dry-run + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish to npm + run: pnpm -r publish --access public --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index 23fba41..ca64637 100644 --- a/README.md +++ b/README.md @@ -369,16 +369,16 @@ cp .env.example .env pnpm build # Run database migrations -pnpm --filter @haip/api run migrate +pnpm --filter @telivityhaip/api run migrate # Seed demo data (Telivity Grand Hotel) -pnpm --filter @haip/api run seed +pnpm --filter @telivityhaip/api run seed # Start the API (with hot reload) pnpm dev # In a separate terminal — start the dashboard -pnpm --filter @haip/dashboard dev +pnpm --filter @telivityhaip/dashboard dev ``` - API: `http://localhost:3000` @@ -401,10 +401,10 @@ This starts PostgreSQL, Redis, Keycloak, and the HAIP API + Dashboard in a singl pnpm test # API tests only -pnpm --filter @haip/api test +pnpm --filter @telivityhaip/api test # Dashboard component tests -pnpm --filter @haip/dashboard test +pnpm --filter @telivityhaip/dashboard test # Type checking pnpm typecheck diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index e48796b..8fde214 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -20,14 +20,14 @@ COPY apps/api/ ./apps/api/ COPY apps/dashboard/ ./apps/dashboard/ # Build workspace packages -RUN pnpm --filter @haip/shared run build -RUN pnpm --filter @haip/database run build +RUN pnpm --filter @telivityhaip/shared run build +RUN pnpm --filter @telivityhaip/database run build # Build dashboard (Vite static output) RUN pnpm --filter dashboard run build # Build API (NestJS) -RUN pnpm --filter @haip/api run build +RUN pnpm --filter @telivityhaip/api run build # Production stage FROM node:20-alpine AS production diff --git a/apps/api/package.json b/apps/api/package.json index b47d78d..df0c39c 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,5 +1,5 @@ { - "name": "@haip/api", + "name": "@telivityhaip/api", "version": "0.0.1", "description": "HAIP API — NestJS REST API for the Hotel AI Platform", "private": true, @@ -17,8 +17,8 @@ "clean": "rm -rf dist" }, "dependencies": { - "@haip/database": "workspace:*", - "@haip/shared": "workspace:^", + "@telivityhaip/database": "workspace:*", + "@telivityhaip/shared": "workspace:^", "@nestjs/common": "^10.4.0", "@nestjs/config": "^3.3.0", "@nestjs/core": "^10.4.0", diff --git a/apps/api/src/database/database.module.ts b/apps/api/src/database/database.module.ts index 322b64d..3e283a8 100644 --- a/apps/api/src/database/database.module.ts +++ b/apps/api/src/database/database.module.ts @@ -2,7 +2,7 @@ import { Global, Module } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { drizzle } from 'drizzle-orm/postgres-js'; import postgres from 'postgres'; -import * as schema from '@haip/database'; +import * as schema from '@telivityhaip/database'; export const DRIZZLE = Symbol('DRIZZLE'); diff --git a/apps/api/src/modules/agent/agent.controller.ts b/apps/api/src/modules/agent/agent.controller.ts index 1edfcbb..c3b0d64 100644 --- a/apps/api/src/modules/agent/agent.controller.ts +++ b/apps/api/src/modules/agent/agent.controller.ts @@ -12,7 +12,7 @@ import { } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiQuery } from '@nestjs/swagger'; import { eq, and, desc } from 'drizzle-orm'; -import { guestReviews } from '@haip/database'; +import { guestReviews } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { Roles } from '../auth/roles.decorator'; import { CurrentUser, type AuthUser } from '../auth/current-user.decorator'; diff --git a/apps/api/src/modules/agent/agent.service.ts b/apps/api/src/modules/agent/agent.service.ts index 1c774c8..61cecba 100644 --- a/apps/api/src/modules/agent/agent.service.ts +++ b/apps/api/src/modules/agent/agent.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, NotFoundException, BadRequestException } from '@nestjs/common'; import { eq, and, desc } from 'drizzle-orm'; -import { agentConfigs, agentDecisions, agentTrainingSnapshots, auditLogs } from '@haip/database'; +import { agentConfigs, agentDecisions, agentTrainingSnapshots, auditLogs } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; import type { diff --git a/apps/api/src/modules/agent/cancellation/cancellation-predictor.agent.ts b/apps/api/src/modules/agent/cancellation/cancellation-predictor.agent.ts index 233bac4..36f5786 100644 --- a/apps/api/src/modules/agent/cancellation/cancellation-predictor.agent.ts +++ b/apps/api/src/modules/agent/cancellation/cancellation-predictor.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, gte, not, inArray } from 'drizzle-orm'; -import { reservations, guests, folios, payments, bookings } from '@haip/database'; +import { reservations, guests, folios, payments, bookings } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/channel-mix/channel-mix.agent.ts b/apps/api/src/modules/agent/channel-mix/channel-mix.agent.ts index 53dfeaf..b67c98f 100644 --- a/apps/api/src/modules/agent/channel-mix/channel-mix.agent.ts +++ b/apps/api/src/modules/agent/channel-mix/channel-mix.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, desc } from 'drizzle-orm'; -import { channelConnections, bookings, reservations, agentDecisions } from '@haip/database'; +import { channelConnections, bookings, reservations, agentDecisions } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/demand/demand.agent.ts b/apps/api/src/modules/agent/demand/demand.agent.ts index e84d06d..3db0f07 100644 --- a/apps/api/src/modules/agent/demand/demand.agent.ts +++ b/apps/api/src/modules/agent/demand/demand.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, gte, lte, sql, not, inArray } from 'drizzle-orm'; -import { reservations, rooms, roomTypes, agentConfigs, agentDecisions } from '@haip/database'; +import { reservations, rooms, roomTypes, agentConfigs, agentDecisions } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/guest-comms/guest-communication.agent.ts b/apps/api/src/modules/agent/guest-comms/guest-communication.agent.ts index a04f7b3..61bd3e0 100644 --- a/apps/api/src/modules/agent/guest-comms/guest-communication.agent.ts +++ b/apps/api/src/modules/agent/guest-comms/guest-communication.agent.ts @@ -8,7 +8,7 @@ import { ratePlans, bookings, agentDecisions, -} from '@haip/database'; +} from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import { EmailService } from './email.service'; diff --git a/apps/api/src/modules/agent/housekeeping/housekeeping-optimizer.agent.ts b/apps/api/src/modules/agent/housekeeping/housekeeping-optimizer.agent.ts index c9003c8..a0d84bc 100644 --- a/apps/api/src/modules/agent/housekeeping/housekeeping-optimizer.agent.ts +++ b/apps/api/src/modules/agent/housekeeping/housekeeping-optimizer.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { housekeepingTasks, rooms, reservations, guests } from '@haip/database'; +import { housekeepingTasks, rooms, reservations, guests } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/night-audit/night-audit-anomaly.agent.ts b/apps/api/src/modules/agent/night-audit/night-audit-anomaly.agent.ts index e94ca69..0662dc1 100644 --- a/apps/api/src/modules/agent/night-audit/night-audit-anomaly.agent.ts +++ b/apps/api/src/modules/agent/night-audit/night-audit-anomaly.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, gte, lte, not, inArray } from 'drizzle-orm'; -import { reservations, folios, charges as chargesTable, guests } from '@haip/database'; +import { reservations, folios, charges as chargesTable, guests } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/overbooking/overbooking.agent.ts b/apps/api/src/modules/agent/overbooking/overbooking.agent.ts index 3d35333..af681cf 100644 --- a/apps/api/src/modules/agent/overbooking/overbooking.agent.ts +++ b/apps/api/src/modules/agent/overbooking/overbooking.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, gte, lte, not, inArray, desc } from 'drizzle-orm'; -import { reservations, rooms, agentDecisions } from '@haip/database'; +import { reservations, rooms, agentDecisions } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/pricing/pricing.agent.ts b/apps/api/src/modules/agent/pricing/pricing.agent.ts index fe1a1a8..ee31530 100644 --- a/apps/api/src/modules/agent/pricing/pricing.agent.ts +++ b/apps/api/src/modules/agent/pricing/pricing.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, desc } from 'drizzle-orm'; -import { ratePlans, agentDecisions } from '@haip/database'; +import { ratePlans, agentDecisions } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/agent/review-response/review-response.agent.ts b/apps/api/src/modules/agent/review-response/review-response.agent.ts index 93e5780..9e6f7cc 100644 --- a/apps/api/src/modules/agent/review-response/review-response.agent.ts +++ b/apps/api/src/modules/agent/review-response/review-response.agent.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; import { eq, and, inArray } from 'drizzle-orm'; -import { guestReviews, reservations, roomTypes, properties } from '@haip/database'; +import { guestReviews, reservations, roomTypes, properties } from '@telivityhaip/database'; import { DRIZZLE } from '../../../database/database.module'; import { AgentService } from '../agent.service'; import type { diff --git a/apps/api/src/modules/channel/ari.service.ts b/apps/api/src/modules/channel/ari.service.ts index 9721d2a..35eb671 100644 --- a/apps/api/src/modules/channel/ari.service.ts +++ b/apps/api/src/modules/channel/ari.service.ts @@ -2,7 +2,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; import { eq, and } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { ariSyncLogs, ratePlans, rateRestrictions } from '@haip/database'; +import { ariSyncLogs, ratePlans, rateRestrictions } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { ChannelAdapterFactory } from './channel-adapter.factory'; import { ChannelService } from './channel.service'; diff --git a/apps/api/src/modules/channel/channel.service.ts b/apps/api/src/modules/channel/channel.service.ts index 9795212..c286da0 100644 --- a/apps/api/src/modules/channel/channel.service.ts +++ b/apps/api/src/modules/channel/channel.service.ts @@ -4,7 +4,7 @@ import { NotFoundException, } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { channelConnections } from '@haip/database'; +import { channelConnections } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; import { ChannelAdapterFactory } from './channel-adapter.factory'; diff --git a/apps/api/src/modules/channel/inbound-reservation.service.ts b/apps/api/src/modules/channel/inbound-reservation.service.ts index 833e2f9..7041b1a 100644 --- a/apps/api/src/modules/channel/inbound-reservation.service.ts +++ b/apps/api/src/modules/channel/inbound-reservation.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, ConflictException, NotFoundException } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { bookings, reservations, guests, channelConnections } from '@haip/database'; +import { bookings, reservations, guests, channelConnections } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { ChannelService } from './channel.service'; import { ChannelAdapterFactory } from './channel-adapter.factory'; diff --git a/apps/api/src/modules/channel/rate-parity.service.ts b/apps/api/src/modules/channel/rate-parity.service.ts index 7f75bb8..396c56d 100644 --- a/apps/api/src/modules/channel/rate-parity.service.ts +++ b/apps/api/src/modules/channel/rate-parity.service.ts @@ -1,7 +1,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { eq, and, gte, lte } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { ratePlans, channelConnections } from '@haip/database'; +import { ratePlans, channelConnections } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; export interface RateParityResult { diff --git a/apps/api/src/modules/connect/connect-booking.service.ts b/apps/api/src/modules/connect/connect-booking.service.ts index cb45e20..4927a27 100644 --- a/apps/api/src/modules/connect/connect-booking.service.ts +++ b/apps/api/src/modules/connect/connect-booking.service.ts @@ -1,7 +1,7 @@ import { Injectable, Inject, NotFoundException, BadRequestException } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { bookings, reservations, guests, ratePlans, roomTypes, folios, rooms } from '@haip/database'; +import { bookings, reservations, guests, ratePlans, roomTypes, folios, rooms } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { AvailabilityService } from '../reservation/availability.service'; import { WebhookService } from '../webhook/webhook.service'; @@ -444,7 +444,7 @@ export class ConnectBookingService { } private async getPropertySettings(propertyId: string): Promise> { - const { properties: props } = await import('@haip/database'); + const { properties: props } = await import('@telivityhaip/database'); const [property] = await this.db .select({ settings: props.settings }) .from(props) diff --git a/apps/api/src/modules/connect/connect-content.service.ts b/apps/api/src/modules/connect/connect-content.service.ts index 29d95fe..acc9584 100644 --- a/apps/api/src/modules/connect/connect-content.service.ts +++ b/apps/api/src/modules/connect/connect-content.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, NotFoundException } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { properties, roomTypes } from '@haip/database'; +import { properties, roomTypes } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; @Injectable() diff --git a/apps/api/src/modules/connect/connect-events.service.ts b/apps/api/src/modules/connect/connect-events.service.ts index 611ddef..9bc401f 100644 --- a/apps/api/src/modules/connect/connect-events.service.ts +++ b/apps/api/src/modules/connect/connect-events.service.ts @@ -1,7 +1,7 @@ import { Injectable, Inject, NotFoundException, Optional } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; import { eq, and, gte, desc } from 'drizzle-orm'; -import { agentWebhookSubscriptions, auditLogs } from '@haip/database'; +import { agentWebhookSubscriptions, auditLogs } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import type { CreateSubscriptionDto } from './dto/agent-event-subscription.dto'; import { WebhookDeliveryService } from '../webhook/webhook-delivery.service'; diff --git a/apps/api/src/modules/connect/connect-insights.service.ts b/apps/api/src/modules/connect/connect-insights.service.ts index 0f5c652..a5a1b48 100644 --- a/apps/api/src/modules/connect/connect-insights.service.ts +++ b/apps/api/src/modules/connect/connect-insights.service.ts @@ -7,7 +7,7 @@ import { rooms, ratePlans, housekeepingTasks, -} from '@haip/database'; +} from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; @Injectable() @@ -403,7 +403,7 @@ export class ConnectInsightsService { } private async getGuestInfo(guestId: string) { - const { guests } = await import('@haip/database'); + const { guests } = await import('@telivityhaip/database'); const [guest] = await this.db .select() .from(guests) diff --git a/apps/api/src/modules/connect/connect-search.service.ts b/apps/api/src/modules/connect/connect-search.service.ts index 080cc8d..9471878 100644 --- a/apps/api/src/modules/connect/connect-search.service.ts +++ b/apps/api/src/modules/connect/connect-search.service.ts @@ -1,7 +1,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { eq, and, gte, lte } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { properties, roomTypes, ratePlans, rateRestrictions } from '@haip/database'; +import { properties, roomTypes, ratePlans, rateRestrictions } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { AvailabilityService } from '../reservation/availability.service'; import type { AgentSearchDto } from './dto/agent-search.dto'; diff --git a/apps/api/src/modules/folio/folio-routing.service.ts b/apps/api/src/modules/folio/folio-routing.service.ts index f0182f6..d0bfa5f 100644 --- a/apps/api/src/modules/folio/folio-routing.service.ts +++ b/apps/api/src/modules/folio/folio-routing.service.ts @@ -5,7 +5,7 @@ import { } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { folios, reservations, payments } from '@haip/database'; +import { folios, reservations, payments } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { FolioService } from './folio.service'; import { TransferCityLedgerDto } from './dto/transfer-city-ledger.dto'; diff --git a/apps/api/src/modules/folio/folio.service.ts b/apps/api/src/modules/folio/folio.service.ts index 6e5ffa8..a671c5a 100644 --- a/apps/api/src/modules/folio/folio.service.ts +++ b/apps/api/src/modules/folio/folio.service.ts @@ -6,7 +6,7 @@ import { } from '@nestjs/common'; import { eq, and, sql, gte, lte } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { folios, charges, payments } from '@haip/database'; +import { folios, charges, payments } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; import { TaxService } from '../tax/tax.service'; diff --git a/apps/api/src/modules/guest/guest.service.ts b/apps/api/src/modules/guest/guest.service.ts index c812baf..a076925 100644 --- a/apps/api/src/modules/guest/guest.service.ts +++ b/apps/api/src/modules/guest/guest.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, NotFoundException } from '@nestjs/common'; import { eq, ilike, or, and, sql, inArray } from 'drizzle-orm'; -import { guests, reservations, auditLogs } from '@haip/database'; +import { guests, reservations, auditLogs } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { CreateGuestDto } from './dto/create-guest.dto'; import { UpdateGuestDto } from './dto/update-guest.dto'; diff --git a/apps/api/src/modules/housekeeping/housekeeping.service.ts b/apps/api/src/modules/housekeeping/housekeeping.service.ts index c77586c..9728411 100644 --- a/apps/api/src/modules/housekeeping/housekeeping.service.ts +++ b/apps/api/src/modules/housekeeping/housekeeping.service.ts @@ -7,7 +7,7 @@ import { } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; import { eq, and, sql, desc, asc, inArray, gte, lt } from 'drizzle-orm'; -import { housekeepingTasks, rooms, reservations, guests, properties, roomTypes } from '@haip/database'; +import { housekeepingTasks, rooms, reservations, guests, properties, roomTypes } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService, type WebhookPayload } from '../webhook/webhook.service'; import { RoomStatusService } from '../room/room-status.service'; diff --git a/apps/api/src/modules/night-audit/night-audit.service.ts b/apps/api/src/modules/night-audit/night-audit.service.ts index eb70783..8fbd2ee 100644 --- a/apps/api/src/modules/night-audit/night-audit.service.ts +++ b/apps/api/src/modules/night-audit/night-audit.service.ts @@ -15,7 +15,7 @@ import { ratePlans, properties, rooms, -} from '@haip/database'; +} from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { FolioService } from '../folio/folio.service'; import { ReservationService } from '../reservation/reservation.service'; diff --git a/apps/api/src/modules/payment/payment.service.ts b/apps/api/src/modules/payment/payment.service.ts index 330b8a0..901bdf8 100644 --- a/apps/api/src/modules/payment/payment.service.ts +++ b/apps/api/src/modules/payment/payment.service.ts @@ -7,7 +7,7 @@ import { } from '@nestjs/common'; import { eq, and, sql } from 'drizzle-orm'; import { Decimal } from 'decimal.js'; -import { payments } from '@haip/database'; +import { payments } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; import { FolioService } from '../folio/folio.service'; diff --git a/apps/api/src/modules/payment/stripe-webhook.controller.ts b/apps/api/src/modules/payment/stripe-webhook.controller.ts index 4acd87a..7a021d1 100644 --- a/apps/api/src/modules/payment/stripe-webhook.controller.ts +++ b/apps/api/src/modules/payment/stripe-webhook.controller.ts @@ -11,7 +11,7 @@ import { ConfigService } from '@nestjs/config'; import { ApiTags, ApiOperation, ApiExcludeEndpoint } from '@nestjs/swagger'; import { Public } from '../auth/public.decorator'; import { eq } from 'drizzle-orm'; -import { payments } from '@haip/database'; +import { payments } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; import { FolioService } from '../folio/folio.service'; diff --git a/apps/api/src/modules/property/property.service.ts b/apps/api/src/modules/property/property.service.ts index d2732b9..94d0ccf 100644 --- a/apps/api/src/modules/property/property.service.ts +++ b/apps/api/src/modules/property/property.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, NotFoundException } from '@nestjs/common'; import { eq } from 'drizzle-orm'; -import { properties } from '@haip/database'; +import { properties } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { CreatePropertyDto } from './dto/create-property.dto'; import { UpdatePropertyDto } from './dto/update-property.dto'; diff --git a/apps/api/src/modules/rate-plan/rate-plan.service.ts b/apps/api/src/modules/rate-plan/rate-plan.service.ts index 1a19d8f..accb28f 100644 --- a/apps/api/src/modules/rate-plan/rate-plan.service.ts +++ b/apps/api/src/modules/rate-plan/rate-plan.service.ts @@ -5,7 +5,7 @@ import { BadRequestException, } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { ratePlans, rateRestrictions } from '@haip/database'; +import { ratePlans, rateRestrictions } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { CreateRatePlanDto } from './dto/create-rate-plan.dto'; import { UpdateRatePlanDto } from './dto/update-rate-plan.dto'; diff --git a/apps/api/src/modules/reports/reports.service.ts b/apps/api/src/modules/reports/reports.service.ts index 23f4e06..ad96dae 100644 --- a/apps/api/src/modules/reports/reports.service.ts +++ b/apps/api/src/modules/reports/reports.service.ts @@ -9,7 +9,7 @@ import { auditRuns, properties, rooms, -} from '@haip/database'; +} from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; @Injectable() diff --git a/apps/api/src/modules/reservation/availability.service.ts b/apps/api/src/modules/reservation/availability.service.ts index 04bd866..4432d68 100644 --- a/apps/api/src/modules/reservation/availability.service.ts +++ b/apps/api/src/modules/reservation/availability.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject } from '@nestjs/common'; import { eq, and, notInArray, lte, gte, sql } from 'drizzle-orm'; -import { reservations, roomTypes, properties, rooms } from '@haip/database'; +import { reservations, roomTypes, properties, rooms } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; export interface AvailabilityResult { diff --git a/apps/api/src/modules/reservation/reservation.service.ts b/apps/api/src/modules/reservation/reservation.service.ts index 1ea4f0c..6b9646f 100644 --- a/apps/api/src/modules/reservation/reservation.service.ts +++ b/apps/api/src/modules/reservation/reservation.service.ts @@ -8,7 +8,7 @@ import { } from '@nestjs/common'; import { eq, and, sql, gte, lte, inArray } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { reservations, bookings, guests, rooms, roomTypes, ratePlans, properties, payments } from '@haip/database'; +import { reservations, bookings, guests, rooms, roomTypes, ratePlans, properties, payments } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { assertTransition, type ReservationStatus } from './reservation-state-machine'; import { AvailabilityService } from './availability.service'; diff --git a/apps/api/src/modules/room/room-status.service.ts b/apps/api/src/modules/room/room-status.service.ts index 4ee5dd7..3f41769 100644 --- a/apps/api/src/modules/room/room-status.service.ts +++ b/apps/api/src/modules/room/room-status.service.ts @@ -5,7 +5,7 @@ import { BadRequestException, } from '@nestjs/common'; import { eq, and, sql } from 'drizzle-orm'; -import { rooms } from '@haip/database'; +import { rooms } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { WebhookService } from '../webhook/webhook.service'; diff --git a/apps/api/src/modules/room/room.service.ts b/apps/api/src/modules/room/room.service.ts index 16f3a64..b2e5753 100644 --- a/apps/api/src/modules/room/room.service.ts +++ b/apps/api/src/modules/room/room.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject, NotFoundException } from '@nestjs/common'; import { eq, and } from 'drizzle-orm'; -import { rooms, roomTypes } from '@haip/database'; +import { rooms, roomTypes } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { CreateRoomTypeDto } from './dto/create-room-type.dto'; import { CreateRoomDto } from './dto/create-room.dto'; diff --git a/apps/api/src/modules/tax/tax.service.ts b/apps/api/src/modules/tax/tax.service.ts index 3268cdb..7f0a135 100644 --- a/apps/api/src/modules/tax/tax.service.ts +++ b/apps/api/src/modules/tax/tax.service.ts @@ -6,7 +6,7 @@ import { } from '@nestjs/common'; import { eq, and, lte, sql } from 'drizzle-orm'; import Decimal from 'decimal.js'; -import { taxProfiles, taxRules, guests } from '@haip/database'; +import { taxProfiles, taxRules, guests } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; import { CreateTaxProfileDto } from './dto/create-tax-profile.dto'; import { UpdateTaxProfileDto } from './dto/update-tax-profile.dto'; diff --git a/apps/api/src/modules/webhook/webhook-delivery.service.spec.ts b/apps/api/src/modules/webhook/webhook-delivery.service.spec.ts index b31f4f2..212f2fb 100644 --- a/apps/api/src/modules/webhook/webhook-delivery.service.spec.ts +++ b/apps/api/src/modules/webhook/webhook-delivery.service.spec.ts @@ -16,7 +16,7 @@ function createStatefulMockDb(subscription: any) { let currentTable: 'webhook_deliveries' | 'subscriptions' = 'webhook_deliveries'; const identifyTable = (tbl: any): 'webhook_deliveries' | 'subscriptions' => { - // @haip/database exports identifiable symbols on each pgTable. Fall back + // @telivityhaip/database exports identifiable symbols on each pgTable. Fall back // to a constructor-name check; the test just needs to distinguish. const name = tbl?.[Symbol.for('drizzle:Name')] ?? tbl?._?.name ?? ''; if (String(name).includes('webhook_deliveries')) return 'webhook_deliveries'; diff --git a/apps/api/src/modules/webhook/webhook-delivery.service.ts b/apps/api/src/modules/webhook/webhook-delivery.service.ts index 2c5a2a0..0392ae4 100644 --- a/apps/api/src/modules/webhook/webhook-delivery.service.ts +++ b/apps/api/src/modules/webhook/webhook-delivery.service.ts @@ -7,7 +7,7 @@ import { } from '@nestjs/common'; import { createHmac } from 'crypto'; import { eq, and, lte, or, isNull } from 'drizzle-orm'; -import { webhookDeliveries, agentWebhookSubscriptions } from '@haip/database'; +import { webhookDeliveries, agentWebhookSubscriptions } from '@telivityhaip/database'; import { DRIZZLE } from '../../database/database.module'; // Exponential backoff schedule in milliseconds: 30s, 2m, 10m, 1h, 6h. diff --git a/apps/api/src/modules/webhook/webhook.service.ts b/apps/api/src/modules/webhook/webhook.service.ts index f582347..07c18d3 100644 --- a/apps/api/src/modules/webhook/webhook.service.ts +++ b/apps/api/src/modules/webhook/webhook.service.ts @@ -1,7 +1,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; -import { auditLogs } from '@haip/database'; -import { type WebhookEvent } from '@haip/shared'; +import { auditLogs } from '@telivityhaip/database'; +import { type WebhookEvent } from '@telivityhaip/shared'; import { DRIZZLE } from '../../database/database.module'; export interface WebhookPayload { diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 3f7552b..6fdc0bc 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -1,5 +1,5 @@ { - "name": "@haip/dashboard", + "name": "@telivityhaip/dashboard", "version": "0.0.1", "private": true, "license": "Apache-2.0", diff --git a/package.json b/package.json index 167cd4f..2268bdb 100644 --- a/package.json +++ b/package.json @@ -11,15 +11,15 @@ "packageManager": "pnpm@9.15.4", "scripts": { "build": "pnpm -r run build", - "dev": "pnpm --filter @haip/api run dev", + "dev": "pnpm --filter @telivityhaip/api run dev", "lint": "pnpm -r run lint", "typecheck": "pnpm -r run typecheck", "test": "pnpm -r run test", "test:coverage": "pnpm -r run test:coverage", - "seed": "pnpm --filter @haip/database run seed", - "db:generate": "pnpm --filter @haip/database run db:generate", - "db:migrate": "pnpm --filter @haip/database run db:migrate", - "db:studio": "pnpm --filter @haip/database run db:studio", + "seed": "pnpm --filter @telivityhaip/database run seed", + "db:generate": "pnpm --filter @telivityhaip/database run db:generate", + "db:migrate": "pnpm --filter @telivityhaip/database run db:migrate", + "db:studio": "pnpm --filter @telivityhaip/database run db:studio", "docker:up": "docker compose up -d", "docker:down": "docker compose down", "clean": "pnpm -r run clean && rm -rf node_modules" diff --git a/packages/database/package.json b/packages/database/package.json index fa0d655..d77c3fa 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,9 +1,20 @@ { - "name": "@haip/database", + "name": "@telivityhaip/database", "version": "0.0.1", "description": "HAIP database schema and migrations (Drizzle ORM + PostgreSQL)", - "private": true, "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/telivity-otaip/haip.git", + "directory": "packages/database" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "README.md" + ], "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/database/src/seed.ts b/packages/database/src/seed.ts index 7ad6542..b2b00db 100644 --- a/packages/database/src/seed.ts +++ b/packages/database/src/seed.ts @@ -5,7 +5,7 @@ * dashboard screen. Idempotent: uses property code 'TGH' as the anchor and * skips if it already exists. * - * Run: pnpm --filter @haip/database seed + * Run: pnpm --filter @telivityhaip/database seed */ import postgres from 'postgres'; diff --git a/packages/shared/package.json b/packages/shared/package.json index 2ea755d..6a2e302 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,9 +1,20 @@ { - "name": "@haip/shared", + "name": "@telivityhaip/shared", "version": "0.0.1", "description": "HAIP shared types, constants, and utilities", - "private": true, "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/telivity-otaip/haip.git", + "directory": "packages/shared" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "README.md" + ], "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f41647..adfd857 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,12 +20,6 @@ importers: apps/api: dependencies: - '@haip/database': - specifier: workspace:* - version: link:../../packages/database - '@haip/shared': - specifier: workspace:^ - version: link:../../packages/shared '@nestjs/common': specifier: ^10.4.0 version: 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -56,6 +50,12 @@ importers: '@nestjs/websockets': specifier: ^10.0.0 version: 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/platform-socket.io@10.4.22)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@telivityhaip/database': + specifier: workspace:* + version: link:../../packages/database + '@telivityhaip/shared': + specifier: workspace:^ + version: link:../../packages/shared '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 diff --git a/tools/mock-bookingcom/package.json b/tools/mock-bookingcom/package.json index 82e5b9b..469503a 100644 --- a/tools/mock-bookingcom/package.json +++ b/tools/mock-bookingcom/package.json @@ -1,5 +1,5 @@ { - "name": "@haip/mock-bookingcom", + "name": "@telivityhaip/mock-bookingcom", "version": "0.0.1", "private": true, "description": "Mock Booking.com Connectivity Partner API for development and testing", diff --git a/tools/mock-siteminder/package.json b/tools/mock-siteminder/package.json index cac6c7a..a0c2b96 100644 --- a/tools/mock-siteminder/package.json +++ b/tools/mock-siteminder/package.json @@ -1,5 +1,5 @@ { - "name": "@haip/mock-siteminder", + "name": "@telivityhaip/mock-siteminder", "version": "0.0.1", "private": true, "description": "Mock SiteMinder pmsXchange API for development and testing",