chore: remove frontend source files and add AWS CDK output artifacts

This commit is contained in:
vickytechkey 2026-09-13 09:06:53 +05:30
parent 132fac5c0d
commit 720bfa012c
147 changed files with 1494 additions and 17484 deletions

37
.gitignore vendored
View file

@ -1,37 +0,0 @@
# Logs
logs
html
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
test-results
playwright-report
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Virtual environments
venv/
.venv/
env/
.env/
*.env
# CDK
cdk.out/

View file

@ -1,8 +0,0 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "oxc"],
"rules": {
"react/rules-of-hooks": "error",
"react/only-export-components": ["warn", { "allowConstantExport": true }]
}
}

Binary file not shown.

Binary file not shown.

View file

@ -1,32 +0,0 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the Oxlint configuration
If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`:
```json
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "oxc"],
"options": {
"typeAware": true
},
"rules": {
"react/rules-of-hooks": "error",
"react/only-export-components": ["warn", { "allowConstantExport": true }]
}
}
```
See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories.

View file

@ -1,108 +0,0 @@
# Supplier Portal Architecture & Module Design
This document outlines the proposed module structure, page flows, and visual architecture for the E-Commerce Supplier Portal.
## 1. System Architecture & Modules
```mermaid
graph TD
%% Styling
classDef primary fill:#1A2B45,stroke:#1A2B45,color:#fff;
classDef accent fill:#E9C46A,stroke:#E9C46A,color:#1A2B45;
classDef container fill:#FFFFFF,stroke:#1A2B45,color:#1A2B45;
classDef bg fill:#F5F0EA,stroke:#1A2B45,color:#1A2B45;
%% Modules
AuthModule["Authentication Module"]:::primary
ProfileModule["Onboarding & Profile Module"]:::primary
ProductModule["Product Management"]:::primary
DashboardModule["Analytics & Dashboard"]:::primary
FulfillmentModule["Order & Fulfillment Tracking"]:::primary
WalletModule["Payout & Wallet"]:::primary
NotificationModule["Notification System"]:::primary
%% Components
Signup["Signup Page<br/>(Email, Phone, GSTIN Init)"]:::container
Login["Login Page<br/>(OTP / Password)"]:::container
ProfileComplete["Profile Completion Page<br/>(Store Info, Pickup Address, GSTIN Verify)"]:::container
ProdUpload["Single Upload / Modify Page"]:::container
BulkUpload["Bulk Excel/CSV Upload Page"]:::container
AnalyticsDash["Sales & Earnings Analytics<br/>(Yearly, Weekly, Daily, Custom Date Filters)"]:::container
StockReports["Stock & Inventory Tracking"]:::container
ReturnsDashboard["Customer Returns Center<br/>(Requests, Tracking & Quality Checks)"]:::container
PayoutCenter["Payout / Wallet Dashboard<br/>(Outstanding Balance, Withdrawal Request)"]:::container
ItemTracking["Item Tracking Dashboard<br/>(Individual Item Status, SKUs, Serials)"]:::container
TransitTracking["Transit Tracking Dashboard<br/>(Courier Status, Carrier Integration)"]:::container
%% Relations
AuthModule --> Signup
AuthModule --> Login
Signup --> ProfileComplete
ProfileComplete --> ProfileModule
ProductModule --> ProdUpload
ProductModule --> BulkUpload
DashboardModule --> AnalyticsDash
DashboardModule --> StockReports
FulfillmentModule --> ItemTracking
FulfillmentModule --> TransitTracking
FulfillmentModule --> ReturnsDashboard
WalletModule --> PayoutCenter
```
---
## 2. Detailed Page & Module Breakdown
### A. Authentication & Onboarding Module
1. **Signup Page**
- Business Email, Password, and Mobile Number validation.
- Initial GSTIN input (for verification).
2. **Login Page**
- Credentials or OTP-based secure login.
3. **Account Profile Completion Page (Onboarding Step 2)**
- **Store Details**: Upload Store Logo/Profile Image, Store Display Name.
- **Pickup & Shipping**: Pickup Address, contact person details.
- **Regulatory Info**: Verified GSTIN, Bank Account details (for payouts).
### B. Product & Inventory Management Module
1. **Single Product Upload & Modification**
- Form-based creation (Images, Title, Description, SKU, Category, Price, Stock count).
- Real-time preview of the product card matching our theme.
2. **Bulk Product Upload & Modify**
- Excel/CSV upload template download.
- Status log showing validation warnings (e.g., missing images, pricing errors).
### C. Analytical Dashboard Module
Provides comprehensive reporting with dynamic period filters (**Yearly, Weekly, Daily, and Custom Date Range**):
1. **Sales & Earnings Reports**
- Interactive charts showing Total Sales (Gross volume) vs. Total Earned (Net margin after commissions).
2. **Stock & Inventory Status**
- Low-stock alerts, active listings count, and inactive listings.
### D. Order & Fulfillment Tracking Module
1. **Item Tracking**
- Track individual items per order (SKU details, quantity, individual packaging status).
- Flag items: *Ready to Ship*, *Shipped*, *Delivered*, *Cancelled*.
2. **Transit Tracking**
- Real-time logistic carrier updates (e.g., DHL, FedEx, Local Post tracking number integration).
- Expected Delivery Date and transit milestones display.
3. **Return Tracking & Return Requests**
- **Items Requested for Return**: Lists customer return requests, reason for return, and custom images uploaded by the customer (e.g., defective product, wrong size). Action to *Approve* or *Reject* return.
- **In-Transit Return Tracking**: Real-time logistic progress of returning items from the customer back to the supplier hub.
### E. Wallet & Financials (Payout) Module
1. **Current Outstanding Balance**
- Live ready-to-withdraw funds display.
2. **Withdrawal Interface**
- Payout history list with status tracking (Pending, Approved, Transferred).
- "Withdraw Funds" action trigger.
### F. Notifications & Account Settings
1. **Header Notification Drawer**
- Real-time notices for new orders, low inventory, return requests, and completed payouts.
2. **Profile / Account Settings Page**
- Modify existing Store Profile Image, Pickup Location details, and GSTIN certificates.

Binary file not shown.

View file

@ -1,6 +0,0 @@
{
"hosted-zone:account=764709663363:domainName=tipro.in:region=ap-south-2": {
"Id": "/hostedzone/Z04761903HH8T88QWE7JX",
"Name": "tipro.in."
}
}

View file

@ -1,68 +0,0 @@
{
"app": "npx tsx cdk/app.ts",
"watch": {
"include": [
"cdk/**"
],
"exclude": [
"README.md",
"cdk*.json",
"**/*.d.ts",
"**/*.js",
"tsconfig.json",
"package*.json",
"yarn.lock",
"node_modules",
"test"
]
},
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
"@aws-cdk/core:target-partitions": [
"aws",
"aws-cn"
],
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
"@aws-cdk/aws-iam:minimizePolicies": true,
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasReadAccess": true,
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
"@aws-cdk/core:enablePartitionLiterals": true,
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
"@aws-cdk/aws-iam:standardizedServicePrincipals": true,
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
"@aws-cdk/aws-route53-patters:useCertificate": true,
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachment": true,
"@aws-cdk/aws-redshift:columnId": true,
"@aws-cdk/aws-stepfunctions-tasks:invokeLambdaOutputIncludesPayload": true,
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true,
"@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true,
"@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true,
"@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true,
"@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true,
"@aws-cdk/aws-eks:nodegroupNameAttribute": true,
"@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true,
"@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true
}
}

View file

@ -0,0 +1,51 @@
{
"version": "54.0.0",
"files": {
"faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6": {
"displayName": "BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider Code",
"source": {
"path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6",
"packaging": "zip"
},
"destinations": {
"764709663363-ap-south-2-41ddd48c": {
"bucketName": "cdk-hnb659fds-assets-764709663363-ap-south-2",
"objectKey": "faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6.zip",
"region": "ap-south-2",
"assumeRoleArn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-file-publishing-role-764709663363-ap-south-2"
}
}
},
"ffb21b7e396cc684c46812aea1d2ff7ea22401e05038c047ae9f071082c68586": {
"displayName": "SiteCertificate/CertificateRequestorFunction/Code",
"source": {
"path": "asset.ffb21b7e396cc684c46812aea1d2ff7ea22401e05038c047ae9f071082c68586",
"packaging": "zip"
},
"destinations": {
"764709663363-ap-south-2-89e47e6b": {
"bucketName": "cdk-hnb659fds-assets-764709663363-ap-south-2",
"objectKey": "ffb21b7e396cc684c46812aea1d2ff7ea22401e05038c047ae9f071082c68586.zip",
"region": "ap-south-2",
"assumeRoleArn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-file-publishing-role-764709663363-ap-south-2"
}
}
},
"30a2cd7f0feb00e4aa485dcb99f543fe02e39d74ba056cc6e415bb422047618a": {
"displayName": "BetaSupplierSiteStack Template",
"source": {
"path": "BetaSupplierSiteStack.template.json",
"packaging": "file"
},
"destinations": {
"764709663363-ap-south-2-6eaef7fa": {
"bucketName": "cdk-hnb659fds-assets-764709663363-ap-south-2",
"objectKey": "30a2cd7f0feb00e4aa485dcb99f543fe02e39d74ba056cc6e415bb422047618a.json",
"region": "ap-south-2",
"assumeRoleArn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-file-publishing-role-764709663363-ap-south-2"
}
}
}
},
"dockerImages": {}
}

View file

@ -0,0 +1,303 @@
{
"/BetaSupplierSiteStack": [
{
"type": "aws:cdk:creationStack",
"data": [
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider": [
{
"type": "aws:cdk:is-custom-resource-handler-customResourceProvider",
"data": true
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteBucketName": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteBucketName"
},
{
"type": "aws:cdk:creationStack",
"data": [
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:2349)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteCloudFrontDomainName": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteCloudFrontDomainName"
},
{
"type": "aws:cdk:creationStack",
"data": [
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:2501)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/AWSCloudFrontPartitionHostedZoneIdMap": [
{
"type": "aws:cdk:logicalId",
"data": "AWSCloudFrontPartitionHostedZoneIdMap"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new ARecord2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:2691)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/BootstrapVersion": [
{
"type": "aws:cdk:logicalId",
"data": "BootstrapVersion"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/CheckBootstrapVersion": [
{
"type": "aws:cdk:logicalId",
"data": "CheckBootstrapVersion"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteBucket/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteBucketC3053F9A"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new Bucket2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:617)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
},
{
"type": "aws:cdk:analytics:mixin",
"data": {
"mixin": "aws-cdk-lib.aws_s3.mixins.BucketAutoDeleteObjects"
}
}
],
"/BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role": [
{
"type": "aws:cdk:logicalId",
"data": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler": [
{
"type": "aws:cdk:logicalId",
"data": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/ApiRecord/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "ApiRecord15755A12"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new ARecord2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1090)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction": [
{
"type": "aws:cdk:is-custom-resource-handler-runtime-family",
"data": 0
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteDistribution/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteDistributionD03E58A9"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new Distribution2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1383)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/SiteAliasRecord/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "SiteAliasRecord3C0AF5BF"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new ARecord2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:2691)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/CDKMetadata/Default": [
{
"type": "aws:cdk:logicalId",
"data": "CDKMetadata"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib, node internals...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteBucket/Policy/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteBucketPolicy7E1C9F1E"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new Bucket2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:617)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
},
{
"type": "aws:cdk:analytics:mixin",
"data": {
"mixin": "aws-cdk-lib.aws_s3.mixins.BucketPolicyStatements"
}
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteBucket/AutoDeleteObjectsCustomResource/Default": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteBucketAutoDeleteObjectsCustomResource789310C3"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...aws-cdk-lib...",
"(no user code in 10 frames, use --stack-trace-limit to capture more)"
]
}
],
"/BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "SiteCertificateCertificateRequestorFunction7CFA7DEA"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new DnsValidatedCertificate2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1240)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/SiteCertificate/CertificateRequestorResource/Default": [
{
"type": "aws:cdk:logicalId",
"data": "SiteCertificateCertificateRequestorResource6021082A"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new DnsValidatedCertificate2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1240)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/ServiceRole/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "SiteCertificateCertificateRequestorFunctionServiceRole645E891D"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new DnsValidatedCertificate2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1240)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)"
]
}
],
"/BetaSupplierSiteStack/BetaSupplierSiteDistribution/Origin1/S3OriginAccessControl/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "BetaSupplierSiteDistributionOrigin1S3OriginAccessControlF9377C01"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new Distribution2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1383)",
"file:///home/vignesh/github/sellercentral/cdk/app.ts:2:1 (file:///home/vignesh/github/sellercentral/cdk/app.ts:2:15)",
"...node internals..."
]
}
],
"/BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/ServiceRole/DefaultPolicy/Resource": [
{
"type": "aws:cdk:logicalId",
"data": "SiteCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy96ED5C9C"
},
{
"type": "aws:cdk:creationStack",
"data": [
"...new DnsValidatedCertificate2 in aws-cdk-lib...",
"new BetaSupplierSiteStack (file:///home/vignesh/github/sellercentral/cdk/betasupplier-site-stack.ts:1:1240)"
]
}
]
}

View file

@ -0,0 +1,584 @@
{
"Resources": {
"BetaSupplierSiteBucketC3053F9A": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketEncryption": {
"ServerSideEncryptionConfiguration": [
{
"ServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
}
}
]
},
"BucketName": "betasuppliersite-764709663363-ap-south-2",
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"BlockPublicPolicy": true,
"IgnorePublicAcls": true,
"RestrictPublicBuckets": true
},
"Tags": [
{
"Key": "aws-cdk:auto-delete-objects",
"Value": "true"
}
]
},
"UpdateReplacePolicy": "Delete",
"DeletionPolicy": "Delete",
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/BetaSupplierSiteBucket/Resource"
}
},
"BetaSupplierSiteBucketPolicy7E1C9F1E": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"Bucket": {
"Ref": "BetaSupplierSiteBucketC3053F9A"
},
"PolicyDocument": {
"Statement": [
{
"Action": [
"s3:DeleteObject*",
"s3:GetBucket*",
"s3:List*",
"s3:PutBucketPolicy"
],
"Effect": "Allow",
"Principal": {
"AWS": {
"Fn::GetAtt": [
"CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
"Arn"
]
}
},
"Resource": [
{
"Fn::GetAtt": [
"BetaSupplierSiteBucketC3053F9A",
"Arn"
]
},
{
"Fn::Join": [
"",
[
{
"Fn::GetAtt": [
"BetaSupplierSiteBucketC3053F9A",
"Arn"
]
},
"/*"
]
]
}
]
},
{
"Action": "s3:GetObject",
"Condition": {
"StringEquals": {
"AWS:SourceArn": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":cloudfront::",
{
"Ref": "AWS::AccountId"
},
":distribution/",
{
"Ref": "BetaSupplierSiteDistributionD03E58A9"
}
]
]
}
}
},
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Resource": {
"Fn::Join": [
"",
[
{
"Fn::GetAtt": [
"BetaSupplierSiteBucketC3053F9A",
"Arn"
]
},
"/*"
]
]
}
}
],
"Version": "2012-10-17"
}
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/BetaSupplierSiteBucket/Policy/Resource"
}
},
"BetaSupplierSiteBucketAutoDeleteObjectsCustomResource789310C3": {
"Type": "Custom::S3AutoDeleteObjects",
"Properties": {
"ServiceToken": {
"Fn::GetAtt": [
"CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
"Arn"
]
},
"BucketName": {
"Ref": "BetaSupplierSiteBucketC3053F9A"
}
},
"DependsOn": [
"BetaSupplierSiteBucketPolicy7E1C9F1E"
],
"UpdateReplacePolicy": "Delete",
"DeletionPolicy": "Delete",
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/BetaSupplierSiteBucket/AutoDeleteObjectsCustomResource/Default"
}
},
"CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
}
}
]
},
"ManagedPolicyArns": [
{
"Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
]
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role"
}
},
"CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": "cdk-hnb659fds-assets-764709663363-ap-south-2",
"S3Key": "faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6.zip"
},
"Timeout": 900,
"MemorySize": 128,
"Handler": "index.handler",
"Role": {
"Fn::GetAtt": [
"CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
"Arn"
]
},
"Runtime": "nodejs24.x",
"Description": {
"Fn::Join": [
"",
[
"Lambda function for auto-deleting objects in ",
{
"Ref": "BetaSupplierSiteBucketC3053F9A"
},
" S3 bucket."
]
]
}
},
"DependsOn": [
"CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
],
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler",
"aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6",
"aws:asset:property": "Code"
}
},
"ApiRecord15755A12": {
"Type": "AWS::Route53::RecordSet",
"Properties": {
"HostedZoneId": "Z04761903HH8T88QWE7JX",
"Name": "api.tipro.in.",
"ResourceRecords": [
"16.113.57.127"
],
"TTL": "1800",
"Type": "A"
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/ApiRecord/Resource"
}
},
"SiteCertificateCertificateRequestorFunctionServiceRole645E891D": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
}
}
],
"Version": "2012-10-17"
},
"ManagedPolicyArns": [
{
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
]
]
}
]
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/ServiceRole/Resource"
}
},
"SiteCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy96ED5C9C": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": [
"acm:AddTagsToCertificate",
"acm:DeleteCertificate",
"acm:DescribeCertificate",
"acm:RequestCertificate",
"route53:GetChange"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "route53:changeResourceRecordSets",
"Condition": {
"ForAllValues:StringEquals": {
"route53:ChangeResourceRecordSetsRecordTypes": [
"CNAME"
],
"route53:ChangeResourceRecordSetsActions": [
"UPSERT"
]
},
"ForAllValues:StringLike": {
"route53:ChangeResourceRecordSetsNormalizedRecordNames": [
"*.partners.tipro.in"
]
}
},
"Effect": "Allow",
"Resource": "arn:aws:route53:::hostedzone/Z04761903HH8T88QWE7JX"
}
],
"Version": "2012-10-17"
},
"PolicyName": "SiteCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy96ED5C9C",
"Roles": [
{
"Ref": "SiteCertificateCertificateRequestorFunctionServiceRole645E891D"
}
]
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/ServiceRole/DefaultPolicy/Resource"
}
},
"SiteCertificateCertificateRequestorFunction7CFA7DEA": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": "cdk-hnb659fds-assets-764709663363-ap-south-2",
"S3Key": "ffb21b7e396cc684c46812aea1d2ff7ea22401e05038c047ae9f071082c68586.zip"
},
"Handler": "index.certificateRequestHandler",
"Role": {
"Fn::GetAtt": [
"SiteCertificateCertificateRequestorFunctionServiceRole645E891D",
"Arn"
]
},
"Runtime": "nodejs24.x",
"Timeout": 900
},
"DependsOn": [
"SiteCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy96ED5C9C",
"SiteCertificateCertificateRequestorFunctionServiceRole645E891D"
],
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/SiteCertificate/CertificateRequestorFunction/Resource",
"aws:asset:path": "asset.ffb21b7e396cc684c46812aea1d2ff7ea22401e05038c047ae9f071082c68586",
"aws:asset:is-bundled": false,
"aws:asset:property": "Code"
}
},
"SiteCertificateCertificateRequestorResource6021082A": {
"Type": "AWS::CloudFormation::CustomResource",
"Properties": {
"ServiceToken": {
"Fn::GetAtt": [
"SiteCertificateCertificateRequestorFunction7CFA7DEA",
"Arn"
]
},
"DomainName": "partners.tipro.in",
"HostedZoneId": "Z04761903HH8T88QWE7JX",
"Region": "us-east-1"
},
"UpdateReplacePolicy": "Delete",
"DeletionPolicy": "Delete",
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/SiteCertificate/CertificateRequestorResource/Default"
}
},
"BetaSupplierSiteDistributionOrigin1S3OriginAccessControlF9377C01": {
"Type": "AWS::CloudFront::OriginAccessControl",
"Properties": {
"OriginAccessControlConfig": {
"Name": "BetaSupplierSiteStackBetaSupOrigin1S3OriginAccessControl50127AEA",
"OriginAccessControlOriginType": "s3",
"SigningBehavior": "always",
"SigningProtocol": "sigv4"
}
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/BetaSupplierSiteDistribution/Origin1/S3OriginAccessControl/Resource"
}
},
"BetaSupplierSiteDistributionD03E58A9": {
"Type": "AWS::CloudFront::Distribution",
"Properties": {
"DistributionConfig": {
"Aliases": [
"partners.tipro.in"
],
"CacheBehaviors": [
{
"AllowedMethods": [
"GET",
"HEAD",
"OPTIONS",
"PUT",
"PATCH",
"POST",
"DELETE"
],
"CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad",
"Compress": true,
"OriginRequestPolicyId": "216adef6-5c7f-47e4-b989-5492eafa07d3",
"PathPattern": "/api/*",
"TargetOriginId": "BetaSupplierSiteStackBetaSupplierSiteDistributionOrigin26FE0C2F5",
"ViewerProtocolPolicy": "redirect-to-https"
}
],
"CustomErrorResponses": [
{
"ErrorCachingMinTTL": 0,
"ErrorCode": 404,
"ResponseCode": 200,
"ResponsePagePath": "/index.html"
},
{
"ErrorCachingMinTTL": 0,
"ErrorCode": 403,
"ResponseCode": 200,
"ResponsePagePath": "/index.html"
}
],
"DefaultCacheBehavior": {
"AllowedMethods": [
"GET",
"HEAD"
],
"CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
"CachedMethods": [
"GET",
"HEAD"
],
"Compress": true,
"TargetOriginId": "BetaSupplierSiteStackBetaSupplierSiteDistributionOrigin118CF032F",
"ViewerProtocolPolicy": "redirect-to-https"
},
"DefaultRootObject": "index.html",
"Enabled": true,
"HttpVersion": "http2",
"IPV6Enabled": true,
"Origins": [
{
"DomainName": {
"Fn::GetAtt": [
"BetaSupplierSiteBucketC3053F9A",
"RegionalDomainName"
]
},
"Id": "BetaSupplierSiteStackBetaSupplierSiteDistributionOrigin118CF032F",
"OriginAccessControlId": {
"Fn::GetAtt": [
"BetaSupplierSiteDistributionOrigin1S3OriginAccessControlF9377C01",
"Id"
]
},
"S3OriginConfig": {
"OriginAccessIdentity": ""
}
},
{
"CustomOriginConfig": {
"HTTPPort": 8080,
"OriginProtocolPolicy": "http-only",
"OriginSSLProtocols": [
"TLSv1.2"
]
},
"DomainName": "api.tipro.in",
"Id": "BetaSupplierSiteStackBetaSupplierSiteDistributionOrigin26FE0C2F5"
}
],
"ViewerCertificate": {
"AcmCertificateArn": {
"Fn::GetAtt": [
"SiteCertificateCertificateRequestorResource6021082A",
"Arn"
]
},
"MinimumProtocolVersion": "TLSv1.2_2021",
"SslSupportMethod": "sni-only"
}
}
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/BetaSupplierSiteDistribution/Resource"
}
},
"SiteAliasRecord3C0AF5BF": {
"Type": "AWS::Route53::RecordSet",
"Properties": {
"AliasTarget": {
"DNSName": {
"Fn::GetAtt": [
"BetaSupplierSiteDistributionD03E58A9",
"DomainName"
]
},
"HostedZoneId": {
"Fn::FindInMap": [
"AWSCloudFrontPartitionHostedZoneIdMap",
{
"Ref": "AWS::Partition"
},
"zoneId"
]
}
},
"HostedZoneId": "Z04761903HH8T88QWE7JX",
"Name": "partners.tipro.in.",
"Type": "A"
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/SiteAliasRecord/Resource"
}
},
"CDKMetadata": {
"Type": "AWS::CDK::Metadata",
"Properties": {
"Analytics": "v2:deflate64:H4sIAAAAAAAA/5VRwU7DMAz9lvWcBdQKhLiVTtzQplbigtCUpl7lLU2m2NlAVf4dtRFsHDhwei9+fs9Oksv8/kHeLtSZlro7LA22cmxY6YNQZ9qOVMjxKegDsKh2NrG3MRvwA232mF3bpn4q5CyRTK1lYLcCAwzrdg+aKYvvIkkbZ1B/XlLT+R/ZydCwYhjAXkc/KYIovAsMd4Ucyxq08900KrEGOAoNnnGHerIrq3rwcmXpVRnsFENXXWRh1NB2So7PwWpGZ6ekbx4FqkGOtTMwD5jwcrXEoqBiq4iASZYTCG1c6HbeWZbjCok9tmFOboq1xx5tqTUQVc6yd2ZK+qN8bY5RVIHYDTWQC16nhX74L2nj3Qk78NNTiXmnhlWPthfX5nXgY5h//kUdj2j7KKzrQO7p5pTnMs9lsdgT4tIHyziArBN+AQxOyStWAgAA"
},
"Metadata": {
"aws:cdk:path": "BetaSupplierSiteStack/CDKMetadata/Default"
}
}
},
"Outputs": {
"BetaSupplierSiteBucketName": {
"Description": "The name of the S3 bucket for the betasupplier site",
"Value": {
"Ref": "BetaSupplierSiteBucketC3053F9A"
}
},
"BetaSupplierSiteCloudFrontDomainName": {
"Description": "The domain name of the CloudFront distribution for betasupplier site",
"Value": {
"Fn::GetAtt": [
"BetaSupplierSiteDistributionD03E58A9",
"DomainName"
]
}
}
},
"Mappings": {
"AWSCloudFrontPartitionHostedZoneIdMap": {
"aws": {
"zoneId": "Z2FDTNDATAQYW2"
},
"aws-cn": {
"zoneId": "Z3RFFRIM2A3IF5"
}
}
},
"Parameters": {
"BootstrapVersion": {
"Type": "AWS::SSM::Parameter::Value<String>",
"Default": "/cdk-bootstrap/hnb659fds/version",
"Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
}
},
"Rules": {
"CheckBootstrapVersion": {
"Assertions": [
{
"Assert": {
"Fn::Not": [
{
"Fn::Contains": [
[
"1",
"2",
"3",
"4",
"5"
],
{
"Ref": "BootstrapVersion"
}
]
}
]
},
"AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
}
]
}
}
}

View file

@ -0,0 +1 @@
"use strict";var f=Object.create,i=Object.defineProperty,I=Object.getOwnPropertyDescriptor,C=Object.getOwnPropertyNames,w=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty,A=(t,e)=>{for(var o in e)i(t,o,{get:e[o],enumerable:!0})},d=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of C(e))!P.call(t,s)&&s!==o&&i(t,s,{get:()=>e[s],enumerable:!(r=I(e,s))||r.enumerable});return t},l=(t,e,o)=>(o=t!=null?f(w(t)):{},d(e||!t||!t.__esModule?i(o,"default",{value:t,enumerable:!0}):o,t)),B=t=>d(i({},"__esModule",{value:!0}),t),q={};A(q,{autoDeleteHandler:()=>S,handler:()=>H}),module.exports=B(q);var h=require("@aws-sdk/client-s3"),y=l(require("https")),m=l(require("url")),a={sendHttpRequest:D,log:T,includeStackTraces:!0,userHandlerIndex:"./index"},p="AWSCDK::CustomResourceProviderFramework::CREATE_FAILED",L="AWSCDK::CustomResourceProviderFramework::MISSING_PHYSICAL_ID";function R(t){return async(e,o)=>{let r={...e,ResponseURL:"..."};if(a.log(JSON.stringify(r,void 0,2)),e.RequestType==="Delete"&&e.PhysicalResourceId===p){a.log("ignoring DELETE event caused by a failed CREATE event"),await u("SUCCESS",e);return}try{let s=await t(r,o),n=k(e,s);await u("SUCCESS",n)}catch(s){let n={...e,Reason:a.includeStackTraces?s.stack:s.message};n.PhysicalResourceId||(e.RequestType==="Create"?(a.log("CREATE failed, responding with a marker physical resource id so that the subsequent DELETE will be ignored"),n.PhysicalResourceId=p):a.log(`ERROR: Malformed event. "PhysicalResourceId" is required: ${JSON.stringify(e)}`)),await u("FAILED",n)}}}function k(t,e={}){let o=e.PhysicalResourceId??t.PhysicalResourceId??t.RequestId;if(t.RequestType==="Delete"&&o!==t.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${t.PhysicalResourceId}" to "${e.PhysicalResourceId}" during deletion`);return{...t,...e,PhysicalResourceId:o}}async function u(t,e){let o={Status:t,Reason:e.Reason??t,StackId:e.StackId,RequestId:e.RequestId,PhysicalResourceId:e.PhysicalResourceId||L,LogicalResourceId:e.LogicalResourceId,NoEcho:e.NoEcho,Data:e.Data},r=m.parse(e.ResponseURL),s=`${r.protocol}//${r.hostname}/${r.pathname}?***`;a.log("submit response to cloudformation",s,o);let n=JSON.stringify(o),E={hostname:r.hostname,path:r.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(n,"utf8")}};await O({attempts:5,sleep:1e3},a.sendHttpRequest)(E,n)}async function D(t,e){return new Promise((o,r)=>{try{let s=y.request(t,n=>{n.resume(),!n.statusCode||n.statusCode>=400?r(new Error(`Unsuccessful HTTP response: ${n.statusCode}`)):o()});s.on("error",r),s.write(e),s.end()}catch(s){r(s)}})}function T(t,...e){console.log(t,...e)}function O(t,e){return async(...o)=>{let r=t.attempts,s=t.sleep;for(;;)try{return await e(...o)}catch(n){if(r--<=0)throw n;await b(Math.floor(Math.random()*s)),s*=2}}}async function b(t){return new Promise(e=>setTimeout(e,t))}var g="aws-cdk:auto-delete-objects",x=JSON.stringify({Version:"2012-10-17",Statement:[]}),c=new h.S3({}),H=R(S);async function S(t){switch(t.RequestType){case"Create":return;case"Update":return{PhysicalResourceId:(await F(t)).PhysicalResourceId};case"Delete":return N(t.ResourceProperties?.BucketName)}}async function F(t){let e=t,o=e.OldResourceProperties?.BucketName;return{PhysicalResourceId:e.ResourceProperties?.BucketName??o}}async function _(t){try{let e=(await c.getBucketPolicy({Bucket:t}))?.Policy??x,o=JSON.parse(e);o.Statement.push({Principal:"*",Effect:"Deny",Action:["s3:PutObject"],Resource:[`arn:aws:s3:::${t}/*`]}),await c.putBucketPolicy({Bucket:t,Policy:JSON.stringify(o)})}catch(e){if(e.name==="NoSuchBucket")throw e;console.log(`Could not set new object deny policy on bucket '${t}' prior to deletion.`)}}async function U(t){let e;do{e=await c.listObjectVersions({Bucket:t});let o=[...e.Versions??[],...e.DeleteMarkers??[]];if(o.length===0)return;let r=o.map(s=>({Key:s.Key,VersionId:s.VersionId}));await c.deleteObjects({Bucket:t,Delete:{Objects:r}})}while(e?.IsTruncated)}async function N(t){if(!t)throw new Error("No BucketName was provided.");try{if(!await W(t)){console.log(`Bucket does not have '${g}' tag, skipping cleaning.`);return}await _(t),await U(t)}catch(e){if(e.name==="NoSuchBucket"){console.log(`Bucket '${t}' does not exist.`);return}throw e}}async function W(t){return(await c.getBucketTagging({Bucket:t})).TagSet?.some(o=>o.Key===g&&o.Value==="true")}

File diff suppressed because one or more lines are too long

1
cdk.out/cdk.out Normal file
View file

@ -0,0 +1 @@
{"version":"54.0.0"}

547
cdk.out/manifest.json Normal file
View file

@ -0,0 +1,547 @@
{
"version": "54.0.0",
"artifacts": {
"BetaSupplierSiteStack.assets": {
"type": "cdk:asset-manifest",
"properties": {
"file": "BetaSupplierSiteStack.assets.json",
"requiresBootstrapStackVersion": 6,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
}
},
"BetaSupplierSiteStack": {
"type": "aws:cloudformation:stack",
"environment": "aws://764709663363/ap-south-2",
"properties": {
"templateFile": "BetaSupplierSiteStack.template.json",
"terminationProtection": false,
"validateOnSynth": false,
"assumeRoleArn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-deploy-role-764709663363-ap-south-2",
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-cfn-exec-role-764709663363-ap-south-2",
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-764709663363-ap-south-2/30a2cd7f0feb00e4aa485dcb99f543fe02e39d74ba056cc6e415bb422047618a.json",
"requiresBootstrapStackVersion": 6,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
"additionalDependencies": [
"BetaSupplierSiteStack.assets"
],
"lookupRole": {
"arn": "arn:${AWS::Partition}:iam::764709663363:role/cdk-hnb659fds-lookup-role-764709663363-ap-south-2",
"requiresBootstrapStackVersion": 8,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
}
},
"dependencies": [
"BetaSupplierSiteStack.assets"
],
"additionalMetadataFile": "BetaSupplierSiteStack.metadata.json",
"displayName": "BetaSupplierSiteStack"
},
"Tree": {
"type": "cdk:tree",
"properties": {
"file": "tree.json"
}
},
"aws-cdk-lib/feature-flag-report": {
"type": "cdk:feature-flag-report",
"properties": {
"module": "aws-cdk-lib",
"flags": {
"@aws-cdk/aws-signer:signingProfileNamePassedToCfn": {
"recommendedValue": true,
"explanation": "Pass signingProfileName to CfnSigningProfile"
},
"@aws-cdk/core:newStyleStackSynthesis": {
"recommendedValue": true,
"explanation": "Switch to new stack synthesis method which enables CI/CD",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/core:stackRelativeExports": {
"recommendedValue": true,
"explanation": "Name exports based on the construct paths relative to the stack, rather than the global construct path",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-ecs-patterns:secGroupsDisablesImplicitOpenListener": {
"recommendedValue": true,
"explanation": "Disable implicit openListener when custom security groups are provided"
},
"@aws-cdk/aws-rds:lowercaseDbIdentifier": {
"recommendedValue": true,
"explanation": "Force lowercasing of RDS Cluster names in CDK",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": {
"recommendedValue": true,
"explanation": "Allow adding/removing multiple UsagePlanKeys independently",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-lambda:recognizeVersionProps": {
"recommendedValue": true,
"explanation": "Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`.",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-lambda:recognizeLayerVersion": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`."
},
"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": {
"recommendedValue": true,
"explanation": "Enable this feature flag to have cloudfront distributions use the security policy TLSv1.2_2021 by default.",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/core:checkSecretUsage": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enable this flag to make it impossible to accidentally use SecretValues in unsafe locations"
},
"@aws-cdk/core:target-partitions": {
"userValue": [
"aws",
"aws-cn"
],
"recommendedValue": [
"aws",
"aws-cn"
],
"explanation": "What regions to include in lookup tables of environment agnostic stacks"
},
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": {
"userValue": true,
"recommendedValue": true,
"explanation": "ECS extensions will automatically add an `awslogs` driver if no logging is specified"
},
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enable this feature flag to have Launch Templates generated by the `InstanceRequireImdsv2Aspect` use unique names."
},
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": {
"userValue": true,
"recommendedValue": true,
"explanation": "ARN format used by ECS. In the new ARN format, the cluster name is part of the resource ID."
},
"@aws-cdk/aws-iam:minimizePolicies": {
"userValue": true,
"recommendedValue": true,
"explanation": "Minimize IAM policies by combining Statements"
},
"@aws-cdk/core:validateSnapshotRemovalPolicy": {
"userValue": true,
"recommendedValue": true,
"explanation": "Error on snapshot removal policies on resources that do not support it."
},
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": {
"recommendedValue": true,
"explanation": "Generate key aliases that include the stack name"
},
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enable this feature flag to create an S3 bucket policy by default in cases where an AWS service would automatically create the Policy if one does not exist."
},
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": {
"userValue": true,
"recommendedValue": true,
"explanation": "Restrict KMS key policy for encrypted Queues a bit more"
},
"@aws-cdk/aws-apigateway:disableCloudWatchRole": {
"userValue": true,
"recommendedValue": true,
"explanation": "Make default CloudWatch Role behavior safe for multiple API Gateways in one environment"
},
"@aws-cdk/core:enablePartitionLiterals": {
"userValue": true,
"recommendedValue": true,
"explanation": "Make ARNs concrete if AWS partition is known"
},
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": {
"userValue": true,
"recommendedValue": true,
"explanation": "Event Rules may only push to encrypted SQS queues in the same account"
},
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": {
"userValue": true,
"recommendedValue": true,
"explanation": "Avoid setting the \"ECS\" deployment controller when adding a circuit breaker"
},
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enable this feature to create default policy names for imported roles that depend on the stack the role is in."
},
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": {
"userValue": true,
"recommendedValue": true,
"explanation": "Use S3 Bucket Policy instead of ACLs for Server Access Logging"
},
"@aws-cdk/aws-route53-patters:useCertificate": {
"userValue": true,
"recommendedValue": true,
"explanation": "Use the official `Certificate` resource instead of `DnsValidatedCertificate`"
},
"@aws-cdk/customresources:installLatestAwsSdkDefault": {
"userValue": false,
"recommendedValue": false,
"explanation": "Whether to install the latest SDK by default in AwsCustomResource"
},
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": {
"userValue": true,
"recommendedValue": true,
"explanation": "Use unique resource name for Database Proxy"
},
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": {
"userValue": true,
"recommendedValue": true,
"explanation": "Remove CloudWatch alarms from deployment group"
},
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": {
"userValue": true,
"recommendedValue": true,
"explanation": "Include authorizer configuration in the calculation of the API deployment logical ID."
},
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": {
"userValue": true,
"recommendedValue": true,
"explanation": "Define user data for a launch template by default when a machine image is provided."
},
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": {
"recommendedValue": true,
"explanation": "SecretTargetAttachments uses the ResourcePolicy of the attached Secret."
},
"@aws-cdk/aws-redshift:columnId": {
"userValue": true,
"recommendedValue": true,
"explanation": "Whether to use an ID to track Redshift column changes"
},
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": {
"recommendedValue": true,
"explanation": "Enable AmazonEMRServicePolicy_v2 managed policies"
},
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": {
"recommendedValue": true,
"explanation": "Restrict access to the VPC default security group"
},
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": {
"recommendedValue": true,
"explanation": "Generate a unique id for each RequestValidator added to a method"
},
"@aws-cdk/aws-kms:aliasNameRef": {
"recommendedValue": true,
"explanation": "KMS Alias name and keyArn will have implicit reference to KMS Key"
},
"@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal": {
"recommendedValue": true,
"explanation": "Enable grant methods on Aliases imported by name to use kms:ResourceAliases condition"
},
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": {
"userValue": true,
"recommendedValue": true,
"explanation": "Generate a launch template when creating an AutoScalingGroup"
},
"@aws-cdk/core:includePrefixInUniqueNameGeneration": {
"userValue": true,
"recommendedValue": true,
"explanation": "Include the stack prefix in the stack name generation process"
},
"@aws-cdk/aws-efs:denyAnonymousAccess": {
"userValue": true,
"recommendedValue": true,
"explanation": "EFS denies anonymous clients accesses"
},
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enables support for Multi-AZ with Standby deployment for opensearch domains"
},
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enables aws-lambda-nodejs.Function to use the latest available NodeJs runtime as the default"
},
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, mount targets will have a stable logicalId that is linked to the associated subnet."
},
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, a scope of InstanceParameterGroup for AuroraClusterInstance with each parameters will change."
},
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, will always use the arn for identifiers for CfnSourceApiAssociation in the GraphqlApi construct rather than id."
},
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, creating an RDS database cluster from a snapshot will only render credentials for snapshot credentials."
},
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, the CodeCommit source action is using the default branch name 'main'."
},
"@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, the logical ID of a Lambda permission for a Lambda action includes an alarm ID."
},
"@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enables Pipeline to set the default value for crossAccountKeys to false."
},
"@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": {
"userValue": true,
"recommendedValue": true,
"explanation": "Enables Pipeline to set the default pipeline type to V2."
},
"@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, IAM Policy created from KMS key grant will reduce the resource scope to this key only."
},
"@aws-cdk/pipelines:reduceAssetRoleTrustScope": {
"recommendedValue": true,
"explanation": "Remove the root account principal from PipelineAssetsFileRole trust policy",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-eks:nodegroupNameAttribute": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, nodegroupName attribute of the provisioned EKS NodeGroup will not have the cluster name prefix."
},
"@aws-cdk/aws-eks:useNativeOidcProvider": {
"recommendedValue": true,
"explanation": "When enabled, EKS V2 clusters will use the native OIDC provider resource AWS::IAM::OIDCProvider instead of creating the OIDCProvider with a custom resource (iam.OpenIDConnectProvider)."
},
"@aws-cdk/aws-ec2:ebsDefaultGp3Volume": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, the default volume type of the EBS volume will be GP3"
},
"@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": {
"userValue": true,
"recommendedValue": true,
"explanation": "When enabled, remove default deployment alarm settings"
},
"@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": {
"recommendedValue": false,
"explanation": "When enabled, the custom resource used for `AwsCustomResource` will configure the `logApiResponseData` property as true by default"
},
"@aws-cdk/aws-s3:keepNotificationInImportedBucket": {
"recommendedValue": false,
"explanation": "When enabled, Adding notifications to a bucket in the current stack will not remove notification from imported stack."
},
"@aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask": {
"recommendedValue": true,
"explanation": "When enabled, use new props for S3 URI field in task definition of state machine for bedrock invoke model.",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/core:explicitStackTags": {
"recommendedValue": true,
"explanation": "When enabled, stack tags need to be assigned explicitly on a Stack."
},
"@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": {
"recommendedValue": true,
"explanation": "When enabled, we will only grant the necessary permissions when users specify cloudwatch log group through logConfiguration"
},
"@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": {
"recommendedValue": true,
"explanation": "When enabled will allow you to specify a resource policy per replica, and not copy the source table policy to all replicas"
},
"@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": {
"recommendedValue": true,
"explanation": "When enabled, initOptions.timeout and resourceSignalTimeout values will be summed together."
},
"@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": {
"recommendedValue": true,
"explanation": "When enabled, a Lambda authorizer Permission created when using GraphqlApi will be properly scoped with a SourceArn."
},
"@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": {
"recommendedValue": true,
"explanation": "When enabled, the value of property `instanceResourceId` in construct `DatabaseInstanceReadReplica` will be set to the correct value which is `DbiResourceId` instead of currently `DbInstanceArn`"
},
"@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": {
"recommendedValue": true,
"explanation": "When enabled, CFN templates added with `cfn-include` will error if the template contains Resource Update or Create policies with CFN Intrinsics that include non-primitive values."
},
"@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": {
"recommendedValue": true,
"explanation": "When enabled, both `@aws-sdk` and `@smithy` packages will be excluded from the Lambda Node.js 18.x runtime to prevent version mismatches in bundled applications."
},
"@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": {
"recommendedValue": true,
"explanation": "When enabled, the resource of IAM Run Ecs policy generated by SFN EcsRunTask will reference the definition, instead of constructing ARN."
},
"@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": {
"recommendedValue": true,
"explanation": "When enabled, the BastionHost construct will use the latest Amazon Linux 2023 AMI, instead of Amazon Linux 2."
},
"@aws-cdk/core:aspectStabilization": {
"recommendedValue": true,
"explanation": "When enabled, a stabilization loop will be run when invoking Aspects during synthesis.",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": {
"recommendedValue": true,
"explanation": "When enabled, use a new method for DNS Name of user pool domain target without creating a custom resource."
},
"@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": {
"recommendedValue": true,
"explanation": "When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere"
},
"@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": {
"recommendedValue": true,
"explanation": "When enabled, the default behaviour of OIDC provider will reject unauthorized connections"
},
"@aws-cdk/core:enableAdditionalMetadataCollection": {
"recommendedValue": true,
"explanation": "When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues."
},
"@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy": {
"recommendedValue": false,
"explanation": "[Deprecated] When enabled, Lambda will create new inline policies with AddToRolePolicy instead of adding to the Default Policy Statement"
},
"@aws-cdk/aws-s3:setUniqueReplicationRoleName": {
"recommendedValue": true,
"explanation": "When enabled, CDK will automatically generate a unique role name that is used for s3 object replication."
},
"@aws-cdk/pipelines:reduceStageRoleTrustScope": {
"recommendedValue": true,
"explanation": "Remove the root account principal from Stage addActions trust policy",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-events:requireEventBusPolicySid": {
"recommendedValue": true,
"explanation": "When enabled, grantPutEventsTo() will use resource policies with Statement IDs for service principals."
},
"@aws-cdk/core:aspectPrioritiesMutating": {
"recommendedValue": true,
"explanation": "When set to true, Aspects added by the construct library on your behalf will be given a priority of MUTATING."
},
"@aws-cdk/aws-dynamodb:retainTableReplica": {
"recommendedValue": true,
"explanation": "When enabled, table replica will be default to the removal policy of source table unless specified otherwise."
},
"@aws-cdk/cognito:logUserPoolClientSecretValue": {
"recommendedValue": false,
"explanation": "When disabled, the value of the user pool client secret will not be logged in the custom resource lambda function logs."
},
"@aws-cdk/pipelines:reduceCrossAccountActionRoleTrustScope": {
"recommendedValue": true,
"explanation": "When enabled, scopes down the trust policy for the cross-account action role",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-stepfunctions:useDistributedMapResultWriterV2": {
"recommendedValue": true,
"explanation": "When enabled, the resultWriterV2 property of DistributedMap will be used insted of resultWriter"
},
"@aws-cdk/s3-notifications:addS3TrustKeyPolicyForSnsSubscriptions": {
"recommendedValue": true,
"explanation": "Add an S3 trust policy to a KMS key resource policy for SNS subscriptions."
},
"@aws-cdk/aws-ec2:requirePrivateSubnetsForEgressOnlyInternetGateway": {
"recommendedValue": true,
"explanation": "When enabled, the EgressOnlyGateway resource is only created if private subnets are defined in the dual-stack VPC."
},
"@aws-cdk/aws-ec2-alpha:useResourceIdForVpcV2Migration": {
"recommendedValue": false,
"explanation": "When enabled, use resource IDs for VPC V2 migration"
},
"@aws-cdk/aws-s3:publicAccessBlockedByDefault": {
"recommendedValue": true,
"explanation": "When enabled, setting any combination of options for BlockPublicAccess will automatically set true for any options not defined."
},
"@aws-cdk/aws-lambda:useCdkManagedLogGroup": {
"recommendedValue": true,
"explanation": "When enabled, CDK creates and manages loggroup for the lambda function"
},
"@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault": {
"recommendedValue": true,
"explanation": "When enabled, Network Load Balancer will be created with a security group by default."
},
"@aws-cdk/aws-stepfunctions-tasks:httpInvokeDynamicJsonPathEndpoint": {
"recommendedValue": true,
"explanation": "When enabled, allows using a dynamic apiEndpoint with JSONPath format in HttpInvoke tasks.",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-ecs-patterns:uniqueTargetGroupId": {
"recommendedValue": true,
"explanation": "When enabled, ECS patterns will generate unique target group IDs to prevent conflicts during load balancer replacement"
},
"@aws-cdk/aws-route53-patterns:useDistribution": {
"recommendedValue": true,
"explanation": "Use the `Distribution` resource instead of `CloudFrontWebDistribution`"
},
"@aws-cdk/aws-cloudfront:defaultFunctionRuntimeV2_0": {
"recommendedValue": true,
"explanation": "Use cloudfront-js-2.0 as the default runtime for CloudFront Functions"
},
"@aws-cdk/aws-elasticloadbalancingv2:usePostQuantumTlsPolicy": {
"recommendedValue": true,
"explanation": "When enabled, HTTPS/TLS listeners use post-quantum TLS policy by default"
},
"@aws-cdk/core:automaticL1Traits": {
"recommendedValue": true,
"explanation": "Automatically use the default L1 traits for L1 constructs`",
"unconfiguredBehavesLike": {
"v2": true
}
},
"@aws-cdk/aws-batch:defaultToAL2023": {
"recommendedValue": true,
"explanation": "Use AL2023 as the default imageType for EC2 Batch compute environments instead of the deprecated AL2"
},
"@aws-cdk/aws-eks:defaultToAL2023": {
"recommendedValue": true,
"explanation": "Use AL2023 as the default AMI type for EKS managed node groups using non-GPU instance types instead of the deprecated AL2"
},
"@aws-cdk/core:annotationsInValidationReport": {
"recommendedValue": true,
"explanation": "Include construct annotations (warnings and errors) in the policy validation report"
},
"@aws-cdk/core:defaultCrossStackReferences": {
"recommendedValue": "weak",
"explanation": "Controls whether cross-stack references are strong, weak, or both",
"unconfiguredBehavesLike": {
"v2": "strong"
}
},
"@aws-cdk/core:validateAgainstDefaultRules": {
"recommendedValue": true,
"explanation": "Treat CloudFormation Validate findings as errors"
}
}
}
}
},
"minimumCliVersion": "2.1140.0"
}

1
cdk.out/tree.json Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,5 @@
{
"version": "54.0.0",
"title": "Validation Report",
"pluginReports": []
}

View file

@ -1,9 +0,0 @@
import { defineConfig } from "cypress";
export default defineConfig({
e2e: {
baseUrl: "http://localhost:5173",
supportFile: false,
specPattern: "cypress/e2e/**/*.cy.{js,jsx,ts,tsx}"
},
});

View file

@ -1,3 +0,0 @@
Title,SKU,Category,Price,Stock,Description
Silk Banarasi Saree,SAR-BAN-101,Apparel,120.00,15,Pure handloom zardozi border
Wooden Carved Ganesha,GAN-302,Home Decor,85.00,5,Premium teak wood hand carved
1 Title SKU Category Price Stock Description
2 Silk Banarasi Saree SAR-BAN-101 Apparel 120.00 15 Pure handloom zardozi border
3 Wooden Carved Ganesha GAN-302 Home Decor 85.00 5 Premium teak wood hand carved

View file

@ -1,62 +0,0 @@
describe('Seller Central Django Backend API E2E Tests', () => {
const backendUrl = 'http://16.113.57.127:8080/api';
it('verifies product list', () => {
cy.request(`${backendUrl}/products/`).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.be.an('array');
});
});
it('creates and deletes a product', () => {
const uniqueSku = `SKU-CY-${Date.now()}`;
cy.request('POST', `${backendUrl}/products/`, {
title: 'Cypress Test Silk Scarf',
category: 'Apparel',
price: '55.00',
stock: 20,
sku: uniqueSku
}).then((response) => {
expect(response.status).to.eq(201);
expect(response.body.sku).to.eq(uniqueSku);
const prodId = response.body.id;
// Delete the created product
cy.request('DELETE', `${backendUrl}/products/${prodId}/`).then((delRes) => {
expect(delRes.status).to.eq(204); // django rest framework delete returns 204 No Content
});
});
});
it('verifies order list and acceptance', () => {
cy.request(`${backendUrl}/orders/`).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.be.an('array');
expect(response.body.length).to.be.greaterThan(0);
const pendingOrder = response.body.find((o: any) => o.status === 'Pending Acceptance');
if (pendingOrder) {
cy.request('POST', `${backendUrl}/orders/${pendingOrder.id}/accept/`).then((acceptRes) => {
expect(acceptRes.status).to.eq(200);
expect(acceptRes.body.status).to.eq('Ready to Ship');
});
}
});
});
it('verifies wallet summary and payout withdrawal', () => {
cy.request(`${backendUrl}/wallet/`).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.have.property('outstanding');
expect(response.body).to.have.property('withdrawn');
const currentOutstanding = parseFloat(response.body.outstanding);
if (currentOutstanding > 10) {
cy.request('POST', `${backendUrl}/wallet/withdraw/`, { amount: '10.00' }).then((withdrawRes) => {
expect(withdrawRes.status).to.eq(200);
expect(parseFloat(withdrawRes.body.outstanding)).to.eq(currentOutstanding - 10);
});
}
});
});
});

View file

@ -1,154 +0,0 @@
describe('Supplier Portal Onboarding & Feature E2E Flow', () => {
it('completes the registration, contact verification, document upload, location pinning, welcome tour, order acceptance, and barcode generation', () => {
// 1. Visit Landing Page
cy.visit('/');
cy.contains('Sell Globally.').should('be.visible');
// 2. Registration Page
cy.contains('Get Started Today').click();
const randUser = `test_seller_${Date.now()}@example.com`;
cy.get('input#reg-email').type(randUser);
cy.get('input#reg-phone').type('9876543210');
cy.get('input#reg-pass').type('super_secure_pass_123');
cy.get('input#reg-confirm-pass').type('super_secure_pass_123');
cy.get('input#reg-policy').check();
cy.get('button').contains('Register Business').click();
// 3. Step 1: Contact Verification
cy.contains('Step 1 of 3: Contact Verification').should('be.visible');
cy.contains('Send WhatsApp OTP').click();
cy.get('input[placeholder="Enter 123456"]').first().type('123456');
cy.contains('Verify Code').first().click();
cy.contains('✓ Mobile & WhatsApp Verified').should('be.visible');
cy.contains('Send Email OTP').click();
cy.get('input[placeholder="Enter 123456"]').last().type('123456');
cy.contains('Verify Code').last().click();
cy.contains('✓ Email Verified').should('be.visible');
cy.contains('Next Step: Identity Verification').click();
// 4. Step 2: Tax & Identity Verification
cy.contains('Step 2 of 3: Tax & Identity Verification').should('be.visible');
cy.get('input#verify-gst').clear().type('29AAAAA1111A1Z1');
cy.contains('Submit GSTIN').click();
cy.contains('verification will be completed within next 24 hrs').should('be.visible');
// Upload mock Aadhaar & PAN files
cy.get('input#aadhar-upload').selectFile({
contents: Cypress.Buffer.from('mock aadhaar pdf'),
fileName: 'aadhar_card.pdf',
mimeType: 'application/pdf',
}, { force: true });
cy.contains('Selected: aadhar_card.pdf').should('be.visible');
cy.get('input#pan-upload').selectFile({
contents: Cypress.Buffer.from('mock pan pdf'),
fileName: 'pan_card.pdf',
mimeType: 'application/pdf',
}, { force: true });
cy.contains('Selected: pan_card.pdf').should('be.visible');
cy.contains('Next Step: Store & Location').click();
// 5. Step 3: Store & Pickup Location Setup
cy.contains('Step 3 of 3: Store & Pickup Location').should('be.visible');
cy.get('input#store-name').clear().type('Teak Wood Craft Store');
cy.get('textarea#store-bio').clear().type('Teak wood hand-carved home decor elements.');
// Test interactive map coordinate pinning
cy.contains('Store Location on Map *').should('be.visible');
cy.get('span').contains('Click anywhere on the map grid to pin location').parent().click(100, 80);
cy.contains('Coordinates: Lat').should('be.visible');
cy.get('input#location-text').should('not.have.value', '');
cy.get('input#loc-city').clear().type('Bangalore');
cy.get('input#loc-pincode').clear().type('560001');
cy.contains('Submit Supplier Profile').click();
// 6. Setup Welcome Tour Stepper
cy.contains('Supplier Account Under Review ⏳').should('be.visible');
cy.contains('Start Guided Tour 🎬').click();
cy.contains('📦 Products & Inventory Management').should('be.visible');
cy.contains('Next: Order Management').click();
cy.contains('🚚 Order Acceptance Control').should('be.visible');
cy.contains('Next: Barcode Generation').click();
cy.contains('🏷️ Barcode Identification & Tracking').should('be.visible');
cy.contains('Next: Earnings & Wallet').click();
cy.contains('💼 Wallet & Payout Withdrawals').should('be.visible');
cy.contains('Explore Dashboard 🚀').click();
// 7. Check Active Dashboard Tab
cy.contains('Performance Analytics').should('be.visible');
// 8. Manage Products tab & Bulk template download
cy.contains('Manage Products').click();
cy.contains('Active Inventory').should('be.visible');
cy.contains('📥 Download Sample Excel Template').click();
// 9. Orders Acceptance Flow
cy.contains('Orders & Transit').click();
cy.contains('Active Orders & Payout status').should('be.visible');
cy.contains('Pending Acceptance').should('be.visible');
cy.get('button').contains('Accept').first().click();
cy.contains('Ready to Ship').should('be.visible');
// 10. Barcode Generator
cy.contains('Barcode Generator').click();
cy.contains('Product Barcode Generator').should('be.visible');
cy.get('select#barcode-product').select(1);
cy.contains('Generate Barcode Graphic').click();
cy.contains('Generated Barcode Preview').should('be.visible');
cy.contains('Print Label').should('be.visible');
cy.contains('Download SVG').should('be.visible');
});
it('enforces security constraints and validation rules (negative test cases)', () => {
// 1. Visit Home and verify dashboard components are not in DOM (route guarding)
cy.visit('/');
cy.get('.dashboard-container').should('not.exist');
cy.get('.sidebar-menu').should('not.exist');
// 2. Go to Registration
cy.contains('Get Started Today').click();
const randSecurityUser = `security_test_${Date.now()}@example.com`;
cy.get('input#reg-email').type(randSecurityUser);
cy.get('input#reg-phone').type('9000000000');
cy.get('input#reg-pass').type('password123');
cy.get('input#reg-confirm-pass').type('password123');
cy.get('input#reg-policy').check();
cy.get('button').contains('Register Business').click();
// 3. Step 1: Negative OTP validations
cy.contains('Step 1 of 3: Contact Verification').should('be.visible');
// Proceed button must be disabled initially
cy.get('button').contains('Next Step: Identity Verification').should('be.disabled');
// Submit invalid WhatsApp OTP
cy.contains('Send WhatsApp OTP').click();
cy.get('input[placeholder="Enter 123456"]').first().type('000000');
// Capture alert for incorrect OTP
const alertStub = cy.stub();
cy.on('window:alert', alertStub);
cy.contains('Verify Code').first().click().then(() => {
expect(alertStub).to.have.been.calledWith('Incorrect code. Enter 123456');
});
cy.contains('✓ Mobile & WhatsApp Verified').should('not.exist');
// Correct the code to enable proceed
cy.get('input[placeholder="Enter 123456"]').first().clear().type('123456');
cy.contains('Verify Code').first().click();
cy.contains('✓ Mobile & WhatsApp Verified').should('be.visible');
// Submit invalid Email OTP
cy.contains('Send Email OTP').click();
cy.get('input[placeholder="Enter 123456"]').last().type('999999');
cy.contains('Verify Code').last().click().then(() => {
expect(alertStub).to.have.been.calledWith('Incorrect code. Enter 123456');
});
cy.contains('✓ Email Verified').should('not.exist');
cy.get('button').contains('Next Step: Identity Verification').should('be.disabled');
});
});

5
fix.py
View file

@ -1,5 +0,0 @@
with open('/home/vignesh/github/Tiproemail/aws_cdk/lib/betasupplier-site-stack.ts', 'r') as f:
content = f.read()
content = content.replace(' }\n errorResponses: [', ' },\n errorResponses: [')
with open('/home/vignesh/github/Tiproemail/aws_cdk/lib/betasupplier-site-stack.ts', 'w') as f:
f.write(content)

View file

@ -1,86 +0,0 @@
# Supplier Portal - View & Navigation Guide
This guide explains how to start the development server, navigate the screens, and view the onboarding flows and simulated dashboard preview.
## 1. Running the Portal Locally
To start the Vite development server, run the following command in the project root:
```bash
npm run dev
```
By default, the server runs at **[http://localhost:5173/](http://localhost:5173/)** (or the port specified in your console).
---
## 2. Page Routing & State Mapping
The portal uses a client-side state router mapping component views to logical routes:
| Route State | Component/View Description | Navigable Via |
| :--- | :--- | :--- |
| `home` | **Landing Page**: Brand value proposition, hero banner, primary action CTAs. | Logo click, "Platform" header link. |
| `about` | **About Us**: Organization mission details and team profiles. | "Success Stories" header link. |
| `contact` | **Contact Support**: "Get in Touch" inquiry form and help desk coordinates. | "Support" header link. |
| `login` | **Supplier Login**: Account login via password credentials or OTP mock. | "Login" header button. |
| `signup` | **Supplier Registration**: Fields for business email, password, and GSTIN. | "Get Started" header button. |
| `profile-completion` | **Profile Wizard (Step 2)**: Logo picker, bio, and interactive GSTIN validation. | Auto-redirect on Signup form submit. |
| `confirmation` | **Dashboard Preview (Step 3)**: Payout status notifications and mock graphs. | Auto-redirect on Profile Completion save. |
| `dashboard` | **Seller Dashboard & Tools**: Overview performance metrics, single/bulk product uploads, orders tracking log, returns approvals, wallet payouts, and settings configuration. | Click "Go to Dashboard" button in confirmation, or submit Login form. |
--- te
## 3. Navigating the Phase 1 Onboarding Flow )
You can step through the interactive onboarding flow sequentially to experience the full walkthrough:
### Step A: The Landing Page
- Open the application. You will see the **Global Artisans Hub** landing page with the primary theme (Deep Navy Blue headers/footers, Amber Gold accents, and Warm Cream backgrounds).
- Click **Platform**, **Success Stories** (About Us), or **Support** (Contact Us) in the header navigation to view the respective information layouts.
### Step B: Account Registration
1. Click **Get Started** in the header.
2. The view will switch to the **Register** tab.
3. Fill in the required fields:
- **Business Email**
- **Mobile Number**
- **Create Password**
- **GSTIN / Tax ID**
4. Click **Register Business**.
### Step C: Profile Completion (Step 2 of 3)
1. You will be taken to the **Complete Your Supplier Profile** wizard.
2. Enter a **Store Display Name**.
3. (Optional) Choose an image file to upload. It will immediately show an avatar logo preview.
4. Enter an **About Your Craft / Business** description.
5. Fill in the **Business Address for Pickup** fields (Street Address, City, State, Pincode).
6. Enter a GSTIN, and click **Verify GSTIN**. The button will show a loading spinner, then update to **Verified ✓** status.
7. Click **Save & Continue**.
### Step D: Onboarding Confirmation (Step 3 of 3)
- You will arrive at the **Welcome to Global Artisans Hub!** confirmation view.
- Click **Go to Dashboard (Preview Only)** to go to the live seller portal dashboard page.
- Alternatively, you can directly access the dashboard page by going to **Login** -> enter credentials -> click **Secure Login**.
### Step E: Navigating the Seller Dashboard & Tools
Once inside the active dashboard (`/dashboard`), use the left sidebar menu to navigate the tools:
1. **Overview & Analytics**: View Sales, net margins, stock, and returns. Toggle the date filters (Year, Week, Day, Custom Date) to see the metrics update dynamically.
2. **Manage Products**:
- View your active inventory listing.
- Fill out the **Upload Product** form on the right to add a product or click **Edit** on a row to modify it.
- Click the bulk upload zone to simulate importing products via CSV files.
3. **Orders & Transit**: Track active orders, status (Ready to Ship, Shipped, Delivered), carriers, and tracking coordinates.
4. **Returns Management**: View buyer return requests. Click **Approve** or **Reject** to update their logistics status in the warehouse transit log.
5. **Wallet & Payouts**: Enter an amount to process a withdrawal from your outstanding ready balance.
6. **Store Settings**: Update your store name, logo file, bio, and pickup coordinates.
---
## 4. Run Automated Component Tests
To run the Vitest unit tests verifying these navigation flows and tools, execute:
```bash
npm run test
```

View file

@ -1,63 +0,0 @@
<!doctype html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>sellercentral</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Libre+Caslon+Text:ital,wght@0,400;0,700;1,400&family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=Inter:wght@400;500;600;700&family=Work+Sans:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" />
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<script>
tailwind = {
config: {
theme: {
extend: {
colors: {
primary: '#4d0218',
'primary-container': '#6b1a2c',
'primary-fixed': '#ffd9dc',
'on-primary': '#ffffff',
secondary: '#5f5e5b',
'secondary-container': '#e2dfdb',
background: '#fbf9f8',
'on-background': '#1b1c1c',
surface: '#fbf9f8',
'on-surface': '#1b1c1c',
'surface-container-lowest': '#ffffff',
'surface-container-low': '#f5f3f3',
'surface-container': '#efeded',
'surface-container-high': '#eae8e7',
'surface-container-highest': '#e4e2e2',
outline: '#887274',
'outline-variant': '#dac0c2',
brand: {
maroon: '#671B26',
maroonHover: '#52141e',
footerWine: '#791B2C',
cream: '#fbf9f5',
creamDark: '#f2eee6',
navy: '#1B2667',
border: '#e6e1d8'
}
},
fontFamily: {
sans: ['Inter', 'system-ui', '-apple-system', 'Segoe UI', 'Roboto', 'sans-serif'],
serif: ['Libre Caslon Text', 'Georgia', 'serif'],
body: ['Work Sans', 'Inter', 'sans-serif']
}
}
}
}
};
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

6601
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,45 +0,0 @@
{
"name": "sellercentral",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "oxlint",
"test": "vitest run",
"preview": "vite preview",
"cypress:run": "cypress run --headed",
"cypress:open": "cypress open",
"test:playwright": "playwright test --project=chromium"
},
"dependencies": {
"bulma": "^1.0.4",
"react": "^19.2.8",
"react-dom": "^19.2.8",
"recharts": "^3.10.1"
},
"devDependencies": {
"@playwright/test": "^1.49.0",
"@tailwindcss/postcss": "^4.3.3",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^7.0.0",
"@testing-library/react": "^16.3.2",
"@types/node": "^24.13.3",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.4",
"@vitest/ui": "^4.1.10",
"aws-cdk": "^2.1140.0",
"aws-cdk-lib": "^2.268.0",
"constructs": "^10.8.1",
"cypress": "^15.20.0",
"jsdom": "^30.0.1",
"oxlint": "^1.75.0",
"source-map-support": "^0.5.21",
"tsx": "^4.23.13",
"typescript": "~6.0.2",
"vite": "^8.2.0",
"vitest": "^4.1.10"
}
}

View file

@ -1,30 +0,0 @@
--- /home/vignesh/github/Tiproemail/aws_cdk/lib/betasupplier-site-stack.ts
+++ /home/vignesh/github/Tiproemail/aws_cdk/lib/betasupplier-site-stack.ts
@@ -19,13 +19,25 @@
+ const ec2Origin = new origins.HttpOrigin('ec2-16-113-57-127.ap-south-2.compute.amazonaws.com', {
+ protocolPolicy: cloudfront.OriginProtocolPolicy.HTTPS_ONLY,
+ });
+
// 2. Create CloudFront Distribution
// origins.S3Origin will automatically create an Origin Access Identity (OAI)
// and update the S3 bucket policy to allow access only from this CloudFront distribution.
const distribution = new cloudfront.Distribution(this, 'BetaSupplierSiteDistribution', {
defaultRootObject: 'index.html',
defaultBehavior: {
origin: new origins.S3Origin(websiteBucket),
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD,
cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD,
cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
},
+ additionalBehaviors: {
+ '/api/*': {
+ origin: ec2Origin,
+ viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
+ allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL,
+ cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED,
+ originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER,
+ }
+ },
errorResponses: [

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function e(e,t=`'`){let n=JSON.stringify(e),r=n.substring(1,n.length-1).replace(/\\"/g,`"`);if(t===`'`)return t+r.replace(/[']/g,`\\'`)+t;if(t===`"`)return t+r.replace(/["]/g,`\\"`)+t;if(t==="`")return t+r.replace(/[`]/g,"\\`")+t;throw Error(`Invalid escape char`)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/([A-Z])([A-Z][a-z])/g,`$1_$2`).toLowerCase()}function r(e){return`"${e.replace(/["\\]/g,e=>`\\`+e)}"`}var i;function a(){i=new Map}function o(e){let t=i?.get(e);return t===void 0&&(t=e.replace(/[\u200b\u00ad]/g,``).trim().replace(/\s+/g,` `),i?.set(e,t)),t}function s(e){return e.replace(/(^|[^\\])(\\\\)*\\(['"`])/g,`$1$2$3`)}function c(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function l(e,t){return typeof e==`string`?`${JSON.stringify(e)}${t?`s`:`i`}`:c(e)}function u(e,t){return typeof e==`string`?`"${e.replace(/\\/g,`\\\\`).replace(/["]/g,`\\"`)}"${t?`s`:`i`}`:c(e)}function d(e,t,n=``){if(e.length<=t)return e;let r=[...e];return r.length>t?r.slice(0,t-n.length).join(``)+n:r.join(``)}function f(e,t){return d(e,t,`…`)}function p(e){if(!e.startsWith(`data:`))return e;let t=e.indexOf(`,`);return t===-1?e:e.slice(0,t+1)+`…`}function m(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function h(e,t){let n=e.length,r=t.length,i=0,a=0,o=Array(n+1).fill(null).map(()=>Array(r+1).fill(0));for(let s=1;s<=n;s++)for(let n=1;n<=r;n++)e[s-1]===t[n-1]&&(o[s][n]=o[s-1][n-1]+1,o[s][n]>i&&(i=o[s][n],a=s));return e.slice(a-i,a)}function g(e,t){try{return[`http:`,`https:`].includes(new URL(e,t).protocol)}catch{return!1}}export{m as a,s as c,n as d,t as f,l as i,o as l,p as m,a as n,e as o,f as p,u as r,h as s,g as t,r as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
.drop-target{background-color:var(--vscode-editor-background);z-index:100;flex-direction:column;flex:auto;justify-content:center;align-items:center;line-height:24px;display:flex;position:absolute;inset:0}body .drop-target{background:#fffc}:root.dark-mode .drop-target{background:#000c}.drop-target .title{margin-bottom:30px;font-size:24px;font-weight:700}.drop-target .info{text-align:center;max-width:400px}.drop-target .processing-error{color:#e74c3c;text-align:center;white-space:pre-line;margin:30px;font-size:24px;font-weight:700}.drop-target input{margin-top:50px}.drop-target button{color:#fff;cursor:pointer;background-color:#007acc;border:none;margin:30px 0;padding:8px 12px}.drop-target .version{color:var(--vscode-disabledForeground);margin-top:8px}.progress-dialog{background-color:var(--vscode-sideBar-background);border:none;outline:none;width:400px;inset:0}.progress-dialog::backdrop{background-color:#0006}.progress-content{padding:16px}.progress-content .title{background-color:unset;padding:0;font-size:18px;font-weight:700}.progress-wrapper{background-color:var(--vscode-commandCenter-activeBackground);width:100%;margin-top:16px;margin-bottom:8px}.inner-progress{background-color:var(--vscode-progressBar-background);height:4px}.workbench-loader-header{background-color:var(--vscode-sideBar-background);box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px;flex:0 0 48px;align-items:center;font-size:16px;line-height:48px;display:flex}.workbench-loader{contain:size}.workbench-loader .workbench-loader-header{flex-basis:32px;font-size:13px;line-height:32px}.workbench-loader .workbench-loader-header .toolbar-button{margin:4px}.workbench-loader .logo{align-items:center;margin-left:16px;display:flex}.workbench-loader .logo img{pointer-events:none;flex:none;width:32px;height:32px}.workbench-loader .product{flex:none;margin-left:16px;font-weight:600}.workbench-loader .workbench-loader-header .title{text-overflow:ellipsis;text-wrap:nowrap;margin-left:16px;overflow:hidden}html,body{min-width:550px;min-height:450px;overflow:auto}

File diff suppressed because one or more lines are too long

View file

@ -1,44 +0,0 @@
<!DOCTYPE html>
<html lang="en" translate="no">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="./playwright-logo.svg" type="image/svg+xml">
<link rel="manifest" href="./manifest.webmanifest">
<title>Playwright Trace Viewer</title>
<script type="module" crossorigin src="./index.KZ4wOW1K.js"></script>
<link rel="modulepreload" crossorigin href="./assets/urlMatch-L3liM589.js">
<link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-B-dXF5JN.js">
<link rel="stylesheet" crossorigin href="./defaultSettingsView.BLFoOugd.css">
<link rel="stylesheet" crossorigin href="./index.B_TqY17P.css">
</head>
<body>
<div id="root"></div>
<dialog id="fallback-error">
<p>The Playwright Trace Viewer must be loaded over the <code>http://</code> or <code>https://</code> protocols.</p>
<p>For more information, please see the <a href="https://aka.ms/playwright/trace-viewer-file-protocol">docs</a>.</p>
</dialog>
<script>
if (!/^https?:/.test(window.location.protocol)) {
const fallbackErrorDialog = document.getElementById('fallback-error');
const isTraceViewerInsidePlaywrightReport = window.location.protocol === 'file:' && window.location.pathname.endsWith('/trace/index.html');
// Best-effort to show the report path in the dialog.
if (isTraceViewerInsidePlaywrightReport) {
const reportPath = (() => {
const base = decodeURIComponent(window.location.pathname).replace(/\/trace\/index\.html$/, '');
if (navigator.platform === 'Win32')
return base.replace(/^\//, '').replace(/\//g, '\\\\');
return base;
})();
const reportLink = document.createElement('div');
const command = `npx playwright show-report "${reportPath}"`;
reportLink.innerHTML = `You can open the report via <code>${command}</code> from your Playwright project. <button type="button">Copy Command</button>`;
fallbackErrorDialog.insertBefore(reportLink, fallbackErrorDialog.children[1]);
reportLink.querySelector('button').addEventListener('click', () => navigator.clipboard.writeText(command));
}
fallbackErrorDialog.show();
}
</script>
</body>
</html>

View file

@ -1,16 +0,0 @@
{
"theme_color": "#000",
"background_color": "#fff",
"display": "standalone",
"start_url": "index.html",
"name": "Playwright Trace Viewer",
"short_name": "Trace Viewer",
"icons": [
{
"src": "playwright-logo.svg",
"sizes": "48x48 72x72 96x96 128x128 150x150 256x256 512x512 1024x1024",
"type": "image/svg+xml",
"purpose": "any"
}
]
}

View file

@ -1,9 +0,0 @@
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M136.444 221.556C123.558 225.213 115.104 231.625 109.535 238.032C114.869 233.364 122.014 229.08 131.652 226.348C141.51 223.554 149.92 223.574 156.869 224.915V219.481C150.941 218.939 144.145 219.371 136.444 221.556ZM108.946 175.876L61.0895 188.484C61.0895 188.484 61.9617 189.716 63.5767 191.36L104.153 180.668C104.153 180.668 103.578 188.077 98.5847 194.705C108.03 187.559 108.946 175.876 108.946 175.876ZM149.005 288.347C81.6582 306.486 46.0272 228.438 35.2396 187.928C30.2556 169.229 28.0799 155.067 27.5 145.928C27.4377 144.979 27.4665 144.179 27.5336 143.446C24.04 143.657 22.3674 145.473 22.7077 150.721C23.2876 159.855 25.4633 174.016 30.4473 192.721C41.2301 233.225 76.8659 311.273 144.213 293.134C158.872 289.185 169.885 281.992 178.152 272.81C170.532 279.692 160.995 285.112 149.005 288.347ZM161.661 128.11V132.903H188.077C187.535 131.206 186.989 129.677 186.447 128.11H161.661Z" fill="#2D4552"/>
<path d="M193.981 167.584C205.861 170.958 212.144 179.287 215.465 186.658L228.711 190.42C228.711 190.42 226.904 164.623 203.57 157.995C181.741 151.793 168.308 170.124 166.674 172.496C173.024 167.972 182.297 164.268 193.981 167.584ZM299.422 186.777C277.573 180.547 264.145 198.916 262.535 201.255C268.89 196.736 278.158 193.031 289.837 196.362C301.698 199.741 307.976 208.06 311.307 215.436L324.572 219.212C324.572 219.212 322.736 193.41 299.422 186.777ZM286.262 254.795L176.072 223.99C176.072 223.99 177.265 230.038 181.842 237.869L274.617 263.805C282.255 259.386 286.262 254.795 286.262 254.795ZM209.867 321.102C122.618 297.71 133.166 186.543 147.284 133.865C153.097 112.156 159.073 96.0203 164.029 85.204C161.072 84.5953 158.623 86.1529 156.203 91.0746C150.941 101.747 144.212 119.124 137.7 143.45C123.586 196.127 113.038 307.29 200.283 330.682C241.406 341.699 273.442 324.955 297.323 298.659C274.655 319.19 245.714 330.701 209.867 321.102Z" fill="#2D4552"/>
<path d="M161.661 262.296V239.863L99.3324 257.537C99.3324 257.537 103.938 230.777 136.444 221.556C146.302 218.762 154.713 218.781 161.661 220.123V128.11H192.869C189.471 117.61 186.184 109.526 183.423 103.909C178.856 94.612 174.174 100.775 163.545 109.665C156.059 115.919 137.139 129.261 108.668 136.933C80.1966 144.61 57.179 142.574 47.5752 140.911C33.9601 138.562 26.8387 135.572 27.5049 145.928C28.0847 155.062 30.2605 169.224 35.2445 187.928C46.0272 228.433 81.663 306.481 149.01 288.342C166.602 283.602 179.019 274.233 187.626 262.291H161.661V262.296ZM61.0848 188.484L108.946 175.876C108.946 175.876 107.551 194.288 89.6087 199.018C71.6614 203.743 61.0848 188.484 61.0848 188.484Z" fill="#E2574C"/>
<path d="M341.786 129.174C329.345 131.355 299.498 134.072 262.612 124.185C225.716 114.304 201.236 97.0224 191.537 88.8994C177.788 77.3834 171.74 69.3802 165.788 81.4857C160.526 92.163 153.797 109.54 147.284 133.866C133.171 186.543 122.623 297.706 209.867 321.098C297.093 344.47 343.53 242.92 357.644 190.238C364.157 165.917 367.013 147.5 367.799 135.625C368.695 122.173 359.455 126.078 341.786 129.174ZM166.497 172.756C166.497 172.756 180.246 151.372 203.565 158C226.899 164.628 228.706 190.425 228.706 190.425L166.497 172.756ZM223.42 268.713C182.403 256.698 176.077 223.99 176.077 223.99L286.262 254.796C286.262 254.791 264.021 280.578 223.42 268.713ZM262.377 201.495C262.377 201.495 276.107 180.126 299.422 186.773C322.736 193.411 324.572 219.208 324.572 219.208L262.377 201.495Z" fill="#2EAD33"/>
<path d="M139.88 246.04L99.3324 257.532C99.3324 257.532 103.737 232.44 133.607 222.496L110.647 136.33L108.663 136.933C80.1918 144.611 57.1742 142.574 47.5704 140.911C33.9554 138.563 26.834 135.572 27.5001 145.929C28.08 155.063 30.2557 169.224 35.2397 187.929C46.0225 228.433 81.6583 306.481 149.005 288.342L150.989 287.719L139.88 246.04ZM61.0848 188.485L108.946 175.876C108.946 175.876 107.551 194.288 89.6087 199.018C71.6615 203.743 61.0848 188.485 61.0848 188.485Z" fill="#D65348"/>
<path d="M225.27 269.163L223.415 268.712C182.398 256.698 176.072 223.99 176.072 223.99L232.89 239.872L262.971 124.281L262.607 124.185C225.711 114.304 201.232 97.0224 191.532 88.8994C177.783 77.3834 171.735 69.3802 165.783 81.4857C160.526 92.163 153.797 109.54 147.284 133.866C133.171 186.543 122.623 297.706 209.867 321.097L211.655 321.5L225.27 269.163ZM166.497 172.756C166.497 172.756 180.246 151.372 203.565 158C226.899 164.628 228.706 190.425 228.706 190.425L166.497 172.756Z" fill="#1D8D22"/>
<path d="M141.946 245.451L131.072 248.537C133.641 263.019 138.169 276.917 145.276 289.195C146.513 288.922 147.74 288.687 149 288.342C152.302 287.451 155.364 286.348 158.312 285.145C150.371 273.361 145.118 259.789 141.946 245.451ZM137.7 143.451C132.112 164.307 127.113 194.326 128.489 224.436C130.952 223.367 133.554 222.371 136.444 221.551L138.457 221.101C136.003 188.939 141.308 156.165 147.284 133.866C148.799 128.225 150.318 122.978 151.832 118.085C149.393 119.637 146.767 121.228 143.776 122.867C141.759 129.093 139.722 135.898 137.7 143.451Z" fill="#C04B41"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -1 +0,0 @@
import{t as e}from"./assets/urlMatch-L3liM589.js";(async()=>{if(!navigator.serviceWorker)throw Error(`Service workers are not supported.\nMake sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register(`sw.bundle.js`),navigator.serviceWorker.controller||await new Promise(e=>navigator.serviceWorker.oncontrollerchange=e);let t=new URL(location.href).searchParams.get(`trace`),n=new URLSearchParams;t&&n.set(`trace`,t),await fetch(`contexts?`+n.toString());let r=new URLSearchParams(location.search).get(`r`);if(!r||!e(r,location.href))return;let i=document.querySelector(`iframe`);i&&(i.src=r)})();

View file

@ -1,10 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<script type="module" crossorigin src="./snapshot.B_Jk1wbt.js"></script>
<link rel="modulepreload" crossorigin href="./assets/urlMatch-L3liM589.js">
<body>
<iframe src="about:blank" sandbox="allow-same-origin allow-scripts" style="position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;border:none;"></iframe>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="en" translate="no">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="./playwright-logo.svg" type="image/svg+xml">
<title>Playwright Test</title>
<script type="module" crossorigin src="./uiMode.Dzuouizj.js"></script>
<link rel="modulepreload" crossorigin href="./assets/urlMatch-L3liM589.js">
<link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-B-dXF5JN.js">
<link rel="stylesheet" crossorigin href="./defaultSettingsView.BLFoOugd.css">
<link rel="stylesheet" crossorigin href="./uiMode.C7UW1sC9.css">
</head>
<body>
<div id="root"></div>
</body>
</html>

View file

@ -1 +0,0 @@
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}

View file

@ -1,30 +0,0 @@
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './playwright/e2e',
fullyParallel: false,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: 1,
reporter: 'html',
use: {
baseURL: 'https://betasuppliers.tipro.in/',
trace: 'on',
screenshot: 'on',
video: 'on',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
});

View file

@ -1,178 +0,0 @@
import { test, expect } from '@playwright/test';
test.describe('Supplier Portal Onboarding & Feature E2E Flow', () => {
test('completes the registration, contact verification, document upload, location pinning, welcome tour, order acceptance, and barcode generation', async ({ page }) => {
// 1. Visit Landing Page
await page.goto('/');
await expect(page.getByText('Sell Globally.')).toBeVisible();
// 2. Registration Page
await page.locator('button, a').filter({ hasText: 'Get Started Today' }).first().click();
const randUser = `test_seller_${Date.now()}_${Math.floor(Math.random() * 1000000)}@example.com`;
const randPhone = `9${Math.floor(100000000 + Math.random() * 900000000)}`;
await page.locator('input#reg-email').fill(randUser);
await page.locator('input#reg-phone').fill(randPhone);
await page.locator('input#reg-pass').fill('Super_secure_pass_123!');
await page.locator('input#reg-confirm-pass').fill('Super_secure_pass_123!');
await page.locator('input#reg-policy').check();
await page.locator('button').filter({ hasText: 'Register Business' }).click();
// 3. Step 1: Contact Verification
await expect(page.getByText('Step 1 of 3: Contact Verification')).toBeVisible();
await page.locator('button').filter({ hasText: 'Send WhatsApp OTP' }).click();
await page.locator('input[placeholder="Enter 123456"]').first().fill('123456');
await page.locator('button').filter({ hasText: 'Verify Code' }).first().click();
await expect(page.getByText('✓ Mobile & WhatsApp Verified')).toBeVisible();
await page.locator('button').filter({ hasText: 'Send Email OTP' }).click();
await page.locator('input[placeholder="Enter 123456"]').last().fill('123456');
await page.locator('button').filter({ hasText: 'Verify Code' }).last().click();
await expect(page.getByText('✓ Email Verified')).toBeVisible();
await page.locator('button').filter({ hasText: 'Next Step: Identity Verification' }).click();
// 4. Step 2: Tax & Identity Verification
await expect(page.getByText('Step 2 of 3: Tax & Identity Verification')).toBeVisible();
await page.locator('input#verify-gst').clear();
await page.locator('input#verify-gst').fill('29AAAAA1111A1Z1');
await page.locator('button').filter({ hasText: 'Submit GSTIN' }).click();
await expect(page.getByText('verification will be completed within next 24 hrs')).toBeVisible();
// Upload mock Aadhaar & PAN files
await page.setInputFiles('input#aadhar-upload', {
name: 'aadhar_card.pdf',
mimeType: 'application/pdf',
buffer: Buffer.from('mock aadhaar pdf'),
});
await expect(page.getByText('Selected: aadhar_card.pdf')).toBeVisible();
await page.setInputFiles('input#pan-upload', {
name: 'pan_card.pdf',
mimeType: 'application/pdf',
buffer: Buffer.from('mock pan pdf'),
});
await expect(page.getByText('Selected: pan_card.pdf')).toBeVisible();
await page.locator('button').filter({ hasText: 'Next Step: Store & Location' }).click();
// 5. Step 3: Store & Pickup Location Setup
await expect(page.getByText('Step 3 of 3: Store & Pickup Location')).toBeVisible();
await page.locator('input#store-name').clear();
await page.locator('input#store-name').fill('Teak Wood Craft Store');
await page.locator('textarea#store-bio').clear();
await page.locator('textarea#store-bio').fill('Teak wood hand-carved home decor elements.');
// Test interactive map coordinate pinning
await expect(page.getByText('Store Location on Map *')).toBeVisible();
const mapGridParent = page.locator('span').filter({ hasText: 'Click anywhere on the map grid to pin location' }).locator('..');
await mapGridParent.click({ position: { x: 100, y: 80 } });
await expect(page.getByText('Coordinates: Lat')).toBeVisible();
await expect(page.locator('input#location-text')).not.toHaveValue('');
await page.locator('input#loc-city').clear();
await page.locator('input#loc-city').fill('Bangalore');
await page.locator('input#loc-pincode').clear();
await page.locator('input#loc-pincode').fill('560001');
await page.locator('button').filter({ hasText: 'Submit Supplier Profile' }).click();
// 6. Setup Welcome Tour Stepper
await expect(page.getByText('Supplier Account Under Review ⏳')).toBeVisible();
await page.locator('button').filter({ hasText: 'Start Guided Tour 🎬' }).click();
await expect(page.getByText('📦 Products & Inventory Management')).toBeVisible();
await page.locator('button').filter({ hasText: 'Next: Order Management' }).click();
await expect(page.getByText('🚚 Order Acceptance Control')).toBeVisible();
await page.locator('button').filter({ hasText: 'Next: Barcode Generation' }).click();
await expect(page.getByText('🏷️ Barcode Identification & Tracking')).toBeVisible();
await page.locator('button').filter({ hasText: 'Next: Earnings & Wallet' }).click();
await expect(page.getByText('💼 Wallet & Payout Withdrawals')).toBeVisible();
await page.locator('button').filter({ hasText: 'Explore Dashboard 🚀' }).click();
// 7. Check Active Dashboard Tab
await expect(page.getByText('Performance Analytics')).toBeVisible();
// 8. Manage Products tab & Bulk template download
await page.locator('button, a').filter({ hasText: 'Manage Products' }).click();
await expect(page.getByText('Active Inventory')).toBeVisible();
const downloadPromise = page.waitForEvent('download');
await page.locator('button, a').filter({ hasText: 'Download Sample Excel Template' }).click();
const download = await downloadPromise;
expect(download.suggestedFilename()).toBeDefined();
// 9. Orders Acceptance Flow
await page.locator('button, a').filter({ hasText: 'Orders & Transit' }).click();
await expect(page.getByText('Active Orders & Payout status')).toBeVisible();
await expect(page.getByText('Pending Acceptance').first()).toBeVisible();
await page.locator('button').filter({ hasText: 'Accept' }).first().click();
await expect(page.getByText('Ready to Ship')).toBeVisible();
// 10. Customer Address Printer
await page.locator('button, a').filter({ hasText: 'Customer Address Printer' }).click();
await expect(page.getByRole('heading', { name: 'Customer Address Printer' })).toBeVisible();
await page.locator('select#print-order').selectOption({ index: 1 });
await expect(page.getByText('Shipping Label Preview')).toBeVisible();
await expect(page.getByRole('button', { name: 'Print Address Label' })).toBeVisible();
});
test('enforces security constraints and validation rules (negative test cases)', async ({ page }) => {
// 1. Visit Home and verify dashboard components are not in DOM (route guarding)
await page.goto('/');
await expect(page.locator('.dashboard-container')).toBeHidden();
await expect(page.locator('.sidebar-menu')).toBeHidden();
// 2. Go to Registration
await page.locator('button, a').filter({ hasText: 'Get Started Today' }).first().click();
const randSecurityUser = `security_test_${Date.now()}_${Math.floor(Math.random() * 1000000)}@example.com`;
const randSecurityPhone = `9${Math.floor(100000000 + Math.random() * 900000000)}`;
await page.locator('input#reg-email').fill(randSecurityUser);
await page.locator('input#reg-phone').fill(randSecurityPhone);
await page.locator('input#reg-pass').fill('Password123!');
await page.locator('input#reg-confirm-pass').fill('Password123!');
await page.locator('input#reg-policy').check();
await page.locator('button').filter({ hasText: 'Register Business' }).click();
// 3. Step 1: Negative OTP validations
await expect(page.getByText('Step 1 of 3: Contact Verification')).toBeVisible();
// Proceed button must be disabled initially
await expect(page.locator('button').filter({ hasText: 'Next Step: Identity Verification' })).toBeDisabled();
// Submit invalid WhatsApp OTP
await page.locator('button').filter({ hasText: 'Send WhatsApp OTP' }).click();
await page.locator('input[placeholder="Enter 123456"]').first().fill('000000');
// Capture dialog
let alertMessage = '';
page.once('dialog', async dialog => {
alertMessage = dialog.message();
await dialog.accept();
});
await page.locator('button').filter({ hasText: 'Verify Code' }).first().click();
// Give brief time/event loop ticks to ensure dialog handler fires
await page.waitForTimeout(500);
expect(alertMessage).toBe('Incorrect code. Enter 123456');
await expect(page.getByText('✓ Mobile & WhatsApp Verified')).toBeHidden();
// Correct the code to enable proceed
await page.locator('input[placeholder="Enter 123456"]').first().clear();
await page.locator('input[placeholder="Enter 123456"]').first().fill('123456');
await page.locator('button').filter({ hasText: 'Verify Code' }).first().click();
await expect(page.getByText('✓ Mobile & WhatsApp Verified')).toBeVisible();
// Submit invalid Email OTP
await page.locator('button').filter({ hasText: 'Send Email OTP' }).click();
await page.locator('input[placeholder="Enter 123456"]').last().fill('999999');
page.once('dialog', async dialog => {
alertMessage = dialog.message();
await dialog.accept();
});
await page.locator('button').filter({ hasText: 'Verify Code' }).last().click();
await page.waitForTimeout(500);
expect(alertMessage).toBe('Incorrect code. Enter 123456');
await expect(page.getByText('✓ Email Verified')).toBeHidden();
await expect(page.locator('button').filter({ hasText: 'Next Step: Identity Verification' })).toBeDisabled();
});
});

5
prompt
View file

@ -1,5 +0,0 @@
django server code : /home/vignesh/github/seller_central_backend
Don't push code without my command
beta site : https://betasuppliers.tipro.in/
in betasite only you need test with playwright
Read this repo and understand this project , once you ready let me know i will provide you instruction

View file

@ -1,2 +0,0 @@
RewriteEngine On
RewriteRule ^api/(.*) http://16.113.57.127:8080/api/$1 [P,L]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 982 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 808 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -1,24 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="bluesky-icon" viewBox="0 0 16 17">
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
</symbol>
<symbol id="discord-icon" viewBox="0 0 20 19">
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
</symbol>
<symbol id="documentation-icon" viewBox="0 0 21 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
</symbol>
<symbol id="social-icon" viewBox="0 0 20 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
</symbol>
<symbol id="x-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
</symbol>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Some files were not shown because too many files have changed in this diff Show more