Merge release/delivery (IAM single sign-on) into the triage work

Brings the four release/delivery commits (IAM SSO for the admin panel,
both apps and the API; IAM env in docker-compose) onto fix/issues-triage.

Conflicts:
- customer-auth.service.ts imports: both kept.
- both apps' api/client.ts: both kept (AccountingBalance/WageQuote, and
  iamAppUrl).
- all build output (admin-panel, user-app, user-app-v2 dist, and the api
  release bundle): rebuilt from the merged source instead of picking a
  side.

Fixed while verifying:
- The IAM change calls iam.browserBootstrapUrl after every login, but
  the identity-service stand-ins in three test files lacked it. 15 tests
  failed on release/delivery itself.
- SMS relay: SMS_RELAY_PLATFORM was read but never sent, so the gateway
  never got `platform` (documented body: phone, host, text, platform).
  relayConfig() now returns it ("default" → null) and the request carries
  it. sms.service.spec now passes.

All 249 API tests pass; the three front-ends type-check and build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
s.esmaeili
2026-10-10 09:03:53 +03:30
co-authored by Claude Opus 5.5
315 changed files with 82919 additions and 7020 deletions
+97 -3
View File
@@ -125,7 +125,7 @@ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
exports.Prisma.CityScalarFieldEnum = {
id: 'id',
name: 'name',
province: 'province',
parentId: 'parentId',
percent: 'percent',
percentAux: 'percentAux'
};
@@ -203,6 +203,7 @@ exports.Prisma.CustomerScalarFieldEnum = {
nationalCode: 'nationalCode',
passwordHash: 'passwordHash',
cityId: 'cityId',
cityNameRaw: 'cityNameRaw',
kind: 'kind',
phone: 'phone',
address: 'address',
@@ -214,11 +215,17 @@ exports.Prisma.CustomerScalarFieldEnum = {
goldCreditLimitGrams: 'goldCreditLimitGrams',
goldDebtGrams: 'goldDebtGrams',
fiatDebtRial: 'fiatDebtRial',
accountingGoldBalance: 'accountingGoldBalance',
accountingRialBalance: 'accountingRialBalance',
accountingBalanceAt: 'accountingBalanceAt',
makingChargeOffsetPercent: 'makingChargeOffsetPercent',
verificationStep: 'verificationStep',
nationalIdImageUrl: 'nationalIdImageUrl',
businessLicenseUrl: 'businessLicenseUrl',
shopImageUrl: 'shopImageUrl',
verificationRejectionReason: 'verificationRejectionReason',
verificationRejectedAt: 'verificationRejectedAt',
birthDate: 'birthDate',
avatarFileId: 'avatarFileId',
canPlaceOrders: 'canPlaceOrders',
isActive: 'isActive',
@@ -227,6 +234,12 @@ exports.Prisma.CustomerScalarFieldEnum = {
updatedAt: 'updatedAt'
};
exports.Prisma.CustomerFavoriteScalarFieldEnum = {
customerId: 'customerId',
productId: 'productId',
createdAt: 'createdAt'
};
exports.Prisma.CustomerAddressScalarFieldEnum = {
id: 'id',
customerId: 'customerId',
@@ -290,7 +303,10 @@ exports.Prisma.ProductScalarFieldEnum = {
productCode: 'productCode',
showType: 'showType',
isActive: 'isActive',
createdAt: 'createdAt'
createdAt: 'createdAt',
accountingStockWeight: 'accountingStockWeight',
accountingStockCount: 'accountingStockCount',
accountingStockAt: 'accountingStockAt'
};
exports.Prisma.ProductImageScalarFieldEnum = {
@@ -326,6 +342,8 @@ exports.Prisma.OrderScalarFieldEnum = {
flatRialCharge: 'flatRialCharge',
isSuspendedOverCreditLimit: 'isSuspendedOverCreditLimit',
deliveredAt: 'deliveredAt',
salesAgentId: 'salesAgentId',
referrerCustomerId: 'referrerCustomerId',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
};
@@ -453,6 +471,51 @@ exports.Prisma.SettingScalarFieldEnum = {
updatedAt: 'updatedAt'
};
exports.Prisma.AccountingLinkScalarFieldEnum = {
id: 'id',
provider: 'provider',
entityType: 'entityType',
entityId: 'entityId',
externalCode: 'externalCode',
externalName: 'externalName',
origin: 'origin',
snapshot: 'snapshot',
syncedAt: 'syncedAt',
createdAt: 'createdAt'
};
exports.Prisma.AccountingOutboxScalarFieldEnum = {
id: 'id',
provider: 'provider',
kind: 'kind',
entityId: 'entityId',
status: 'status',
attempts: 'attempts',
nextAttemptAt: 'nextAttemptAt',
lastError: 'lastError',
externalRef: 'externalRef',
progress: 'progress',
lastRequest: 'lastRequest',
lastResponse: 'lastResponse',
sentAt: 'sentAt',
resolvedById: 'resolvedById',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
};
exports.Prisma.AccountingIssueScalarFieldEnum = {
id: 'id',
provider: 'provider',
kind: 'kind',
externalCode: 'externalCode',
entityId: 'entityId',
message: 'message',
data: 'data',
createdAt: 'createdAt',
updatedAt: 'updatedAt',
resolvedAt: 'resolvedAt'
};
exports.Prisma.PromotionScalarFieldEnum = {
id: 'id',
title: 'title',
@@ -567,6 +630,11 @@ exports.Prisma.JsonNullValueInput = {
JsonNull: Prisma.JsonNull
};
exports.Prisma.NullableJsonNullValueInput = {
DbNull: Prisma.DbNull,
JsonNull: Prisma.JsonNull
};
exports.Prisma.QueryMode = {
default: 'default',
insensitive: 'insensitive'
@@ -603,7 +671,8 @@ exports.VerificationStep = exports.$Enums.VerificationStep = {
UNVERIFIED: 'UNVERIFIED',
STEP_ONE_SUBMITTED: 'STEP_ONE_SUBMITTED',
STEP_TWO_SUBMITTED: 'STEP_TWO_SUBMITTED',
VERIFIED: 'VERIFIED'
VERIFIED: 'VERIFIED',
REJECTED: 'REJECTED'
};
exports.ProductImageRole = exports.$Enums.ProductImageRole = {
@@ -665,6 +734,27 @@ exports.CommentStatus = exports.$Enums.CommentStatus = {
REJECTED: 'REJECTED'
};
exports.AccountingEntityType = exports.$Enums.AccountingEntityType = {
CUSTOMER: 'CUSTOMER',
PRODUCT: 'PRODUCT'
};
exports.AccountingOutboxKind = exports.$Enums.AccountingOutboxKind = {
CUSTOMER_PUSH: 'CUSTOMER_PUSH',
PRODUCT_PUSH: 'PRODUCT_PUSH',
ORDER_DOCUMENT: 'ORDER_DOCUMENT',
ORDER_DOCUMENT_DELETE: 'ORDER_DOCUMENT_DELETE'
};
exports.AccountingOutboxStatus = exports.$Enums.AccountingOutboxStatus = {
PENDING: 'PENDING',
SENDING: 'SENDING',
SENT: 'SENT',
FAILED: 'FAILED',
NEEDS_REVIEW: 'NEEDS_REVIEW',
RESOLVED: 'RESOLVED'
};
exports.PromotionScope = exports.$Enums.PromotionScope = {
PRODUCT: 'PRODUCT',
CATEGORY: 'CATEGORY',
@@ -693,6 +783,7 @@ exports.Prisma.ModelName = {
AdminSession: 'AdminSession',
SalesExpertProfile: 'SalesExpertProfile',
Customer: 'Customer',
CustomerFavorite: 'CustomerFavorite',
CustomerAddress: 'CustomerAddress',
Branch: 'Branch',
Workshop: 'Workshop',
@@ -715,6 +806,9 @@ exports.Prisma.ModelName = {
Permission: 'Permission',
Comment: 'Comment',
Setting: 'Setting',
AccountingLink: 'AccountingLink',
AccountingOutbox: 'AccountingOutbox',
AccountingIssue: 'AccountingIssue',
Promotion: 'Promotion',
PromotionExclusion: 'PromotionExclusion',
BranchAllocation: 'BranchAllocation',