edge_redacted #4
1
.gitignore
vendored
|
|
@ -8,6 +8,7 @@ yarn-error.log*
|
||||||
lerna-debug.log*
|
lerna-debug.log*
|
||||||
.pnpm-debug.log*
|
.pnpm-debug.log*
|
||||||
*.apk
|
*.apk
|
||||||
|
**/appBinaries
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
|
||||||
6
apps/admin-ui/.expo/types/router.d.ts
vendored
11
apps/backend/drizzle.config.postgres.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import 'dotenv/config'
|
||||||
|
import { defineConfig } from 'drizzle-kit'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
out: './drizzle/pg',
|
||||||
|
schema: './src/db/schema-postgres.ts',
|
||||||
|
dialect: 'postgresql',
|
||||||
|
dbCredentials: {
|
||||||
|
url: process.env.DATABASE_URL!,
|
||||||
|
},
|
||||||
|
})
|
||||||
11
apps/backend/drizzle.config.sqlite.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import 'dotenv/config'
|
||||||
|
import { defineConfig } from 'drizzle-kit'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
out: './drizzle/sqlite',
|
||||||
|
schema: './src/db/schema-sqlite.ts',
|
||||||
|
dialect: 'sqlite',
|
||||||
|
dbCredentials: {
|
||||||
|
url: process.env.SQLITE_DB_PATH!,
|
||||||
|
},
|
||||||
|
})
|
||||||
515
apps/backend/drizzle/sqlite/0000_goofy_oracle.sql
Normal file
|
|
@ -0,0 +1,515 @@
|
||||||
|
CREATE TABLE `address_areas` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`place_name` text NOT NULL,
|
||||||
|
`zone_id` integer,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`zone_id`) REFERENCES `address_zones`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `address_zones` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`zone_name` text NOT NULL,
|
||||||
|
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `addresses` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`phone` text NOT NULL,
|
||||||
|
`address_line1` text NOT NULL,
|
||||||
|
`address_line2` text,
|
||||||
|
`city` text NOT NULL,
|
||||||
|
`state` text NOT NULL,
|
||||||
|
`pincode` text NOT NULL,
|
||||||
|
`is_default` integer DEFAULT false NOT NULL,
|
||||||
|
`latitude` real,
|
||||||
|
`longitude` real,
|
||||||
|
`google_maps_url` text,
|
||||||
|
`admin_latitude` real,
|
||||||
|
`admin_longitude` real,
|
||||||
|
`zone_id` integer,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`zone_id`) REFERENCES `address_zones`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `cart_items` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`quantity` text NOT NULL,
|
||||||
|
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_user_product` ON `cart_items` (`user_id`,`product_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `complaints` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`order_id` integer,
|
||||||
|
`complaint_body` text NOT NULL,
|
||||||
|
`images` text,
|
||||||
|
`response` text,
|
||||||
|
`is_resolved` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `coupon_applicable_products` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`coupon_id` integer NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_coupon_product` ON `coupon_applicable_products` (`coupon_id`,`product_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `coupon_applicable_users` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`coupon_id` integer NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_coupon_user` ON `coupon_applicable_users` (`coupon_id`,`user_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `coupon_usage` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`coupon_id` integer NOT NULL,
|
||||||
|
`order_id` integer,
|
||||||
|
`order_item_id` integer,
|
||||||
|
`used_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`order_item_id`) REFERENCES `order_items`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `coupons` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`coupon_code` text NOT NULL,
|
||||||
|
`is_user_based` integer DEFAULT false NOT NULL,
|
||||||
|
`discount_percent` text,
|
||||||
|
`flat_discount` text,
|
||||||
|
`min_order` text,
|
||||||
|
`product_ids` text,
|
||||||
|
`created_by` integer,
|
||||||
|
`max_value` text,
|
||||||
|
`is_apply_for_all` integer DEFAULT false NOT NULL,
|
||||||
|
`valid_till` integer,
|
||||||
|
`max_limit_for_user` integer,
|
||||||
|
`is_invalidated` integer DEFAULT false NOT NULL,
|
||||||
|
`exclusive_apply` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`created_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_coupon_code` ON `coupons` (`coupon_code`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `delivery_slot_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`delivery_time` integer NOT NULL,
|
||||||
|
`freeze_time` integer NOT NULL,
|
||||||
|
`is_active` integer DEFAULT true NOT NULL,
|
||||||
|
`is_flash` integer DEFAULT false NOT NULL,
|
||||||
|
`is_capacity_full` integer DEFAULT false NOT NULL,
|
||||||
|
`delivery_sequence` text DEFAULT '{}',
|
||||||
|
`group_ids` text DEFAULT '[]'
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `home_banners` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`image_url` text NOT NULL,
|
||||||
|
`description` text,
|
||||||
|
`product_ids` text,
|
||||||
|
`redirect_url` text,
|
||||||
|
`serial_num` integer,
|
||||||
|
`is_active` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`last_updated` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `key_val_store` (
|
||||||
|
`key` text PRIMARY KEY NOT NULL,
|
||||||
|
`value` text
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `notif_creds` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`token` text NOT NULL,
|
||||||
|
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`last_verified` integer,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `notif_creds_token_unique` ON `notif_creds` (`token`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `notifications` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`title` text NOT NULL,
|
||||||
|
`body` text NOT NULL,
|
||||||
|
`type` text,
|
||||||
|
`is_read` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `order_items` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`order_id` integer NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`quantity` text NOT NULL,
|
||||||
|
`price` text NOT NULL,
|
||||||
|
`discounted_price` text,
|
||||||
|
`is_packaged` integer DEFAULT false NOT NULL,
|
||||||
|
`is_package_verified` integer DEFAULT false NOT NULL,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `order_status` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`order_time` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`order_id` integer NOT NULL,
|
||||||
|
`is_packaged` integer DEFAULT false NOT NULL,
|
||||||
|
`is_delivered` integer DEFAULT false NOT NULL,
|
||||||
|
`is_cancelled` integer DEFAULT false NOT NULL,
|
||||||
|
`cancel_reason` text,
|
||||||
|
`is_cancelled_by_admin` integer,
|
||||||
|
`payment_state` text DEFAULT 'pending' NOT NULL,
|
||||||
|
`cancellation_user_notes` text,
|
||||||
|
`cancellation_admin_notes` text,
|
||||||
|
`cancellation_reviewed` integer DEFAULT false NOT NULL,
|
||||||
|
`cancellation_reviewed_at` integer,
|
||||||
|
`refund_coupon_id` integer,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`refund_coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `orders` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`address_id` integer NOT NULL,
|
||||||
|
`slot_id` integer,
|
||||||
|
`is_cod` integer DEFAULT false NOT NULL,
|
||||||
|
`is_online_payment` integer DEFAULT false NOT NULL,
|
||||||
|
`payment_info_id` integer,
|
||||||
|
`total_amount` text NOT NULL,
|
||||||
|
`delivery_charge` text DEFAULT '0' NOT NULL,
|
||||||
|
`readable_id` integer NOT NULL,
|
||||||
|
`admin_notes` text,
|
||||||
|
`user_notes` text,
|
||||||
|
`order_group_id` text,
|
||||||
|
`order_group_proportion` text,
|
||||||
|
`is_flash_delivery` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`address_id`) REFERENCES `addresses`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`payment_info_id`) REFERENCES `payment_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `payment_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`status` text NOT NULL,
|
||||||
|
`gateway` text NOT NULL,
|
||||||
|
`order_id` text,
|
||||||
|
`token` text,
|
||||||
|
`merchant_order_id` text NOT NULL,
|
||||||
|
`payload` text
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `payment_info_merchant_order_id_unique` ON `payment_info` (`merchant_order_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `payments` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`status` text NOT NULL,
|
||||||
|
`gateway` text NOT NULL,
|
||||||
|
`order_id` integer NOT NULL,
|
||||||
|
`token` text,
|
||||||
|
`merchant_order_id` text NOT NULL,
|
||||||
|
`payload` text,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `payments_merchant_order_id_unique` ON `payments` (`merchant_order_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_availability_schedules` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`time` text NOT NULL,
|
||||||
|
`schedule_name` text NOT NULL,
|
||||||
|
`action` text NOT NULL,
|
||||||
|
`product_ids` text DEFAULT '[]' NOT NULL,
|
||||||
|
`group_ids` text DEFAULT '[]' NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`last_updated` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `product_availability_schedules_schedule_name_unique` ON `product_availability_schedules` (`schedule_name`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_categories` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`description` text
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_group_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`group_name` text NOT NULL,
|
||||||
|
`description` text,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_group_membership` (
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`group_id` integer NOT NULL,
|
||||||
|
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`group_id`) REFERENCES `product_group_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `product_group_membership_pk` ON `product_group_membership` (`product_id`,`group_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`short_description` text,
|
||||||
|
`long_description` text,
|
||||||
|
`unit_id` integer NOT NULL,
|
||||||
|
`price` text NOT NULL,
|
||||||
|
`market_price` text,
|
||||||
|
`images` text,
|
||||||
|
`is_out_of_stock` integer DEFAULT false NOT NULL,
|
||||||
|
`is_suspended` integer DEFAULT false NOT NULL,
|
||||||
|
`is_flash_available` integer DEFAULT false NOT NULL,
|
||||||
|
`flash_price` text,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`increment_step` real DEFAULT 1 NOT NULL,
|
||||||
|
`product_quantity` real DEFAULT 1 NOT NULL,
|
||||||
|
`store_id` integer,
|
||||||
|
`scheduled_availability` integer DEFAULT true NOT NULL,
|
||||||
|
FOREIGN KEY (`unit_id`) REFERENCES `units`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`store_id`) REFERENCES `store_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_reviews` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`review_body` text NOT NULL,
|
||||||
|
`image_urls` text DEFAULT '[]',
|
||||||
|
`review_time` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`ratings` real NOT NULL,
|
||||||
|
`admin_response` text,
|
||||||
|
`admin_response_images` text DEFAULT '[]',
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
CONSTRAINT "rating_check" CHECK("product_reviews"."ratings" >= 1 AND "product_reviews"."ratings" <= 5)
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_slots` (
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`slot_id` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `product_slot_pk` ON `product_slots` (`product_id`,`slot_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_tag_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`tag_name` text NOT NULL,
|
||||||
|
`tag_description` text,
|
||||||
|
`image_url` text,
|
||||||
|
`is_dashboard_tag` integer DEFAULT false NOT NULL,
|
||||||
|
`related_stores` text DEFAULT '[]',
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `product_tag_info_tag_name_unique` ON `product_tag_info` (`tag_name`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `product_tags` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`tag_id` integer NOT NULL,
|
||||||
|
`assigned_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`tag_id`) REFERENCES `product_tag_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_product_tag` ON `product_tags` (`product_id`,`tag_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `refunds` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`order_id` integer NOT NULL,
|
||||||
|
`refund_amount` text,
|
||||||
|
`refund_status` text DEFAULT 'none',
|
||||||
|
`merchant_refund_id` text,
|
||||||
|
`refund_processed_at` integer,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `reserved_coupons` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`secret_code` text NOT NULL,
|
||||||
|
`coupon_code` text NOT NULL,
|
||||||
|
`discount_percent` text,
|
||||||
|
`flat_discount` text,
|
||||||
|
`min_order` text,
|
||||||
|
`product_ids` text,
|
||||||
|
`max_value` text,
|
||||||
|
`valid_till` integer,
|
||||||
|
`max_limit_for_user` integer,
|
||||||
|
`exclusive_apply` integer DEFAULT false NOT NULL,
|
||||||
|
`is_redeemed` integer DEFAULT false NOT NULL,
|
||||||
|
`redeemed_by` integer,
|
||||||
|
`redeemed_at` integer,
|
||||||
|
`created_by` integer NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`redeemed_by`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`created_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `reserved_coupons_secret_code_unique` ON `reserved_coupons` (`secret_code`);--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_secret_code` ON `reserved_coupons` (`secret_code`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `special_deals` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`product_id` integer NOT NULL,
|
||||||
|
`quantity` text NOT NULL,
|
||||||
|
`price` text NOT NULL,
|
||||||
|
`valid_till` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `staff_permissions` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`permission_name` text NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_permission_name` ON `staff_permissions` (`permission_name`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `staff_role_permissions` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`staff_role_id` integer NOT NULL,
|
||||||
|
`staff_permission_id` integer NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`staff_role_id`) REFERENCES `staff_roles`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`staff_permission_id`) REFERENCES `staff_permissions`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_role_permission` ON `staff_role_permissions` (`staff_role_id`,`staff_permission_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `staff_roles` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`role_name` text NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_role_name` ON `staff_roles` (`role_name`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `staff_users` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`password` text NOT NULL,
|
||||||
|
`staff_role_id` integer,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`staff_role_id`) REFERENCES `staff_roles`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `store_info` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text NOT NULL,
|
||||||
|
`description` text,
|
||||||
|
`image_url` text,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`owner` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`owner`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `units` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`short_notation` text NOT NULL,
|
||||||
|
`full_name` text NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_short_notation` ON `units` (`short_notation`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `unlogged_user_tokens` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`token` text NOT NULL,
|
||||||
|
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`last_verified` integer
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unlogged_user_tokens_token_unique` ON `unlogged_user_tokens` (`token`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `upload_url_status` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`key` text NOT NULL,
|
||||||
|
`status` text DEFAULT 'pending' NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `user_creds` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`user_password` text NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `user_details` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`bio` text,
|
||||||
|
`date_of_birth` integer,
|
||||||
|
`gender` text,
|
||||||
|
`occupation` text,
|
||||||
|
`profile_image` text,
|
||||||
|
`is_suspended` integer DEFAULT false NOT NULL,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`updated_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `user_details_user_id_unique` ON `user_details` (`user_id`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `user_incidents` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`user_id` integer NOT NULL,
|
||||||
|
`order_id` integer,
|
||||||
|
`date_added` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`admin_comment` text,
|
||||||
|
`added_by` integer,
|
||||||
|
`negativity_score` integer,
|
||||||
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
|
||||||
|
FOREIGN KEY (`added_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `user_notifications` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`title` text NOT NULL,
|
||||||
|
`image_url` text,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
`body` text NOT NULL,
|
||||||
|
`applicable_users` text
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE TABLE `users` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`name` text,
|
||||||
|
`email` text,
|
||||||
|
`mobile` text,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `unique_email` ON `users` (`email`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `vendor_snippets` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
`snippet_code` text NOT NULL,
|
||||||
|
`slot_id` integer,
|
||||||
|
`is_permanent` integer DEFAULT false NOT NULL,
|
||||||
|
`product_ids` text NOT NULL,
|
||||||
|
`valid_till` integer,
|
||||||
|
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
|
||||||
|
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `vendor_snippets_snippet_code_unique` ON `vendor_snippets` (`snippet_code`);
|
||||||
3574
apps/backend/drizzle/sqlite/meta/0000_snapshot.json
Normal file
13
apps/backend/drizzle/sqlite/meta/_journal.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"version": "7",
|
||||||
|
"dialect": "sqlite",
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"idx": 0,
|
||||||
|
"version": "6",
|
||||||
|
"when": 1774244805277,
|
||||||
|
"tag": "0000_goofy_oracle",
|
||||||
|
"breakpoints": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -157,6 +157,7 @@ app.onError((err, c) => {
|
||||||
return c.json({ message }, status)
|
return c.json({ message }, status)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
// Start server
|
// Start server
|
||||||
serve({
|
serve({
|
||||||
fetch: app.fetch,
|
fetch: app.fetch,
|
||||||
|
|
@ -165,3 +166,8 @@ serve({
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('🚀 Server running on http://localhost:4000')
|
console.log('🚀 Server running on http://localhost:4000')
|
||||||
|
=======
|
||||||
|
app.listen(4000, '::', () => {
|
||||||
|
console.log("Server is running on http://localhost:4000/api/mobile/");
|
||||||
|
});
|
||||||
|
>>>>>>> main
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,16 @@
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"migrate": "drizzle-kit generate:pg",
|
"migrate": "drizzle-kit generate --config drizzle.config.postgres.ts",
|
||||||
|
"migrate:pg": "drizzle-kit generate --config drizzle.config.postgres.ts",
|
||||||
|
"migrate:sqlite": "drizzle-kit generate --config drizzle.config.sqlite.ts",
|
||||||
|
"generate:pg": "bunx drizzle-kit generate --config drizzle.config.postgres.ts",
|
||||||
|
"generate:sqlite": "bunx drizzle-kit generate --config drizzle.config.sqlite.ts",
|
||||||
"build": "rimraf ./dist && tsc --project tsconfig.json && tsc-alias -p tsconfig.json",
|
"build": "rimraf ./dist && tsc --project tsconfig.json && tsc-alias -p tsconfig.json",
|
||||||
"build2": "rimraf ./dist && tsc",
|
"build2": "rimraf ./dist && tsc",
|
||||||
"db:push": "drizzle-kit push:pg",
|
"db:push": "drizzle-kit push --config drizzle.config.postgres.ts",
|
||||||
|
"db:push:pg": "drizzle-kit push --config drizzle.config.postgres.ts",
|
||||||
|
"db:push:sqlite": "drizzle-kit push --config drizzle.config.sqlite.ts",
|
||||||
"db:seed": "tsx src/db/seed.ts",
|
"db:seed": "tsx src/db/seed.ts",
|
||||||
"dev:express": "bun --watch index-express.ts",
|
"dev:express": "bun --watch index-express.ts",
|
||||||
"dev:hono": "bun --watch index.ts",
|
"dev:hono": "bun --watch index.ts",
|
||||||
|
|
@ -40,6 +46,7 @@
|
||||||
"jose": "^5.10.0",
|
"jose": "^5.10.0",
|
||||||
"node-cron": "^4.2.1",
|
"node-cron": "^4.2.1",
|
||||||
"pg": "^8.16.3",
|
"pg": "^8.16.3",
|
||||||
|
"razorpay": "^2.9.6",
|
||||||
"redis": "^5.9.0",
|
"redis": "^5.9.0",
|
||||||
"zod": "^4.1.12"
|
"zod": "^4.1.12"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,10 @@ const formatOrderMessageWithFullData = (ordersData: any[]): string => {
|
||||||
|
|
||||||
message += '📦 <b>Items:</b>\n';
|
message += '📦 <b>Items:</b>\n';
|
||||||
order.orderItems?.forEach((item: any) => {
|
order.orderItems?.forEach((item: any) => {
|
||||||
message += ` • ${item.product?.name || 'Unknown'} x${item.quantity}\n`;
|
const productQuantity = item.product?.productQuantity ?? 1
|
||||||
|
const unitNotation = item.product?.unit?.shortNotation || ''
|
||||||
|
const quantityWithUnit = unitNotation ? `${productQuantity}${unitNotation}` : `${productQuantity}`
|
||||||
|
message += ` • ${item.product?.name || 'Unknown'} ${quantityWithUnit} x${item.quantity}\n`;
|
||||||
});
|
});
|
||||||
|
|
||||||
message += `\n💰 <b>Total:</b> ₹${order.totalAmount}\n`;
|
message += `\n💰 <b>Total:</b> ₹${order.totalAmount}\n`;
|
||||||
|
|
@ -72,7 +75,12 @@ const formatCancellationMessage = (orderData: any, cancellationData: Cancellatio
|
||||||
📞 <b>Phone:</b> ${orderData.address?.phone || 'N/A'}
|
📞 <b>Phone:</b> ${orderData.address?.phone || 'N/A'}
|
||||||
|
|
||||||
📦 <b>Items:</b>
|
📦 <b>Items:</b>
|
||||||
${orderData.orderItems?.map((item: any) => ` • ${item.product?.name || 'Unknown'} x${item.quantity}`).join('\n') || ' N/A'}
|
${orderData.orderItems?.map((item: any) => {
|
||||||
|
const productQuantity = item.product?.productQuantity ?? 1
|
||||||
|
const unitNotation = item.product?.unit?.shortNotation || ''
|
||||||
|
const quantityWithUnit = unitNotation ? `${productQuantity}${unitNotation}` : `${productQuantity}`
|
||||||
|
return ` • ${item.product?.name || 'Unknown'} ${quantityWithUnit} x${item.quantity}`
|
||||||
|
}).join('\n') || ' N/A'}
|
||||||
|
|
||||||
💰 <b>Total:</b> ₹${orderData.totalAmount}
|
💰 <b>Total:</b> ₹${orderData.totalAmount}
|
||||||
💳 <b>Refund:</b> ${orderData.refundStatus === 'na' ? 'N/A (COD)' : orderData.refundStatus || 'Pending'}
|
💳 <b>Refund:</b> ${orderData.refundStatus === 'na' ? 'N/A (COD)' : orderData.refundStatus || 'Pending'}
|
||||||
|
|
@ -102,7 +110,7 @@ export const startOrderHandler = async (): Promise<void> => {
|
||||||
where: inArray(orders.id, orderIds),
|
where: inArray(orders.id, orderIds),
|
||||||
with: {
|
with: {
|
||||||
address: true,
|
address: true,
|
||||||
orderItems: { with: { product: true } },
|
orderItems: { with: { product: { with: { unit: true } } } },
|
||||||
slot: true,
|
slot: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -147,7 +155,7 @@ export const startCancellationHandler = async (): Promise<void> => {
|
||||||
where: eq(orders.id, cancellationData.orderId),
|
where: eq(orders.id, cancellationData.orderId),
|
||||||
with: {
|
with: {
|
||||||
address: true,
|
address: true,
|
||||||
orderItems: { with: { product: true } },
|
orderItems: { with: { product: { with: { unit: true } } } },
|
||||||
refunds: true,
|
refunds: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
58
apps/migrator/README.md
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Migrator
|
||||||
|
|
||||||
|
Data-only migration tool between Postgres and SQLite using Drizzle.
|
||||||
|
|
||||||
|
## What it does
|
||||||
|
|
||||||
|
- Copies data from source to target
|
||||||
|
- Does NOT create or alter tables
|
||||||
|
- Overwrites target data if any rows exist (via `DELETE FROM` in dependency-safe order)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Tables must already exist on the target database
|
||||||
|
- Schema must match the backend Drizzle schemas
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Run from repo root:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun --cwd apps/migrator run migrate --from postgres --to sqlite --source "<PG_URL>" --target "<SQLITE_PATH>"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun --cwd apps/migrator run migrate --from sqlite --to postgres --source "<SQLITE_PATH>" --target "<PG_URL>"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flags
|
||||||
|
|
||||||
|
- `--from`: `postgres` or `sqlite`
|
||||||
|
- `--to`: `postgres` or `sqlite`
|
||||||
|
- `--source`: Postgres connection string or SQLite file path
|
||||||
|
- `--target`: Postgres connection string or SQLite file path
|
||||||
|
- `--batch`: optional batch size (default: `500`)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun --cwd apps/migrator run migrate \
|
||||||
|
--from postgres \
|
||||||
|
--to sqlite \
|
||||||
|
--source "postgres://user:pass@host:5432/db" \
|
||||||
|
--target "./sqlite.db"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun --cwd apps/migrator run migrate \
|
||||||
|
--from sqlite \
|
||||||
|
--to postgres \
|
||||||
|
--source "./sqlite.db" \
|
||||||
|
--target "postgres://user:pass@host:5432/db" \
|
||||||
|
--batch 1000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- IDs are copied as-is to preserve relationships.
|
||||||
|
- For Postgres targets, sequences may need manual reset after import.
|
||||||
13
apps/migrator/package.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": "migrator",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"migrate": "bun src/index.ts"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"drizzle-orm": "^0.45.1",
|
||||||
|
"pg": "^8.11.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
13
apps/migrator/src/index.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { runPostgresToSqlite } from './postgres_to_sqlite'
|
||||||
|
import { runSqliteToPostgres } from './sqlite_to_postgres'
|
||||||
|
import { parseArgs } from './lib/args'
|
||||||
|
|
||||||
|
const args = parseArgs(Bun.argv.slice(2))
|
||||||
|
|
||||||
|
if (args.from === 'postgres' && args.to === 'sqlite') {
|
||||||
|
await runPostgresToSqlite(args)
|
||||||
|
} else if (args.from === 'sqlite' && args.to === 'postgres') {
|
||||||
|
await runSqliteToPostgres(args)
|
||||||
|
} else {
|
||||||
|
throw new Error('Unsupported migration direction. Use --from postgres --to sqlite or --from sqlite --to postgres.')
|
||||||
|
}
|
||||||
50
apps/migrator/src/lib/args.ts
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
export type MigrationArgs = {
|
||||||
|
from: 'postgres' | 'sqlite'
|
||||||
|
to: 'postgres' | 'sqlite'
|
||||||
|
source: string
|
||||||
|
target: string
|
||||||
|
batchSize: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFlagValue = (args: string[], flag: string): string | undefined => {
|
||||||
|
const index = args.indexOf(flag)
|
||||||
|
if (index === -1) return undefined
|
||||||
|
return args[index + 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parseArgs = (args: string[]): MigrationArgs => {
|
||||||
|
const from = getFlagValue(args, '--from')
|
||||||
|
const to = getFlagValue(args, '--to')
|
||||||
|
const source = getFlagValue(args, '--source')
|
||||||
|
const target = getFlagValue(args, '--target')
|
||||||
|
const batch = getFlagValue(args, '--batch')
|
||||||
|
|
||||||
|
if (!from || (from !== 'postgres' && from !== 'sqlite')) {
|
||||||
|
throw new Error('Missing or invalid --from (postgres|sqlite)')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!to || (to !== 'postgres' && to !== 'sqlite')) {
|
||||||
|
throw new Error('Missing or invalid --to (postgres|sqlite)')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!source) {
|
||||||
|
throw new Error('Missing --source')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!target) {
|
||||||
|
throw new Error('Missing --target')
|
||||||
|
}
|
||||||
|
|
||||||
|
const batchSize = batch ? Number(batch) : 500
|
||||||
|
if (Number.isNaN(batchSize) || batchSize <= 0) {
|
||||||
|
throw new Error('Invalid --batch, must be a positive number')
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
source,
|
||||||
|
target,
|
||||||
|
batchSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
35
apps/migrator/src/lib/casts.ts
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
export const parseJsonValue = <T>(value: unknown, fallback: T): T => {
|
||||||
|
if (value === null || value === undefined) return fallback
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
try {
|
||||||
|
return JSON.parse(value) as T
|
||||||
|
} catch {
|
||||||
|
return fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value as T
|
||||||
|
}
|
||||||
|
|
||||||
|
export const toJsonString = (value: unknown, fallback: string): string => {
|
||||||
|
if (value === null || value === undefined) return fallback
|
||||||
|
if (typeof value === 'string') return value
|
||||||
|
return JSON.stringify(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const toEpochSeconds = (value: Date | number): number => {
|
||||||
|
if (typeof value === 'number') return value
|
||||||
|
return Math.floor(value.getTime() / 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const toDate = (value: number | Date | null | undefined): Date | null => {
|
||||||
|
if (value === null || value === undefined) return null
|
||||||
|
if (value instanceof Date) return value
|
||||||
|
return new Date(value * 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const toBoolean = (value: unknown): boolean => {
|
||||||
|
if (typeof value === 'boolean') return value
|
||||||
|
if (typeof value === 'number') return value !== 0
|
||||||
|
if (typeof value === 'string') return value === 'true' || value === '1'
|
||||||
|
return false
|
||||||
|
}
|
||||||
92
apps/migrator/src/lib/column-maps.ts
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
import type { TableName } from './table-order'
|
||||||
|
|
||||||
|
export const jsonColumns: Partial<Record<TableName, string[]>> = {
|
||||||
|
productInfo: ['images'],
|
||||||
|
productAvailabilitySchedules: ['productIds', 'groupIds'],
|
||||||
|
homeBanners: ['productIds'],
|
||||||
|
productReviews: ['imageUrls', 'adminResponseImages'],
|
||||||
|
deliverySlotInfo: ['deliverySequence', 'groupIds'],
|
||||||
|
vendorSnippets: ['productIds'],
|
||||||
|
paymentInfoTable: ['payload'],
|
||||||
|
payments: ['payload'],
|
||||||
|
keyValStore: ['value'],
|
||||||
|
complaints: ['images'],
|
||||||
|
coupons: ['productIds'],
|
||||||
|
reservedCoupons: ['productIds'],
|
||||||
|
userNotifications: ['applicableUsers'],
|
||||||
|
productTagInfo: ['relatedStores'],
|
||||||
|
}
|
||||||
|
|
||||||
|
export const jsonArrayColumns: Partial<Record<TableName, string[]>> = {
|
||||||
|
productInfo: ['images'],
|
||||||
|
productAvailabilitySchedules: ['productIds', 'groupIds'],
|
||||||
|
homeBanners: ['productIds'],
|
||||||
|
productReviews: ['imageUrls', 'adminResponseImages'],
|
||||||
|
deliverySlotInfo: ['groupIds'],
|
||||||
|
vendorSnippets: ['productIds'],
|
||||||
|
complaints: ['images'],
|
||||||
|
coupons: ['productIds'],
|
||||||
|
reservedCoupons: ['productIds'],
|
||||||
|
userNotifications: ['applicableUsers'],
|
||||||
|
productTagInfo: ['relatedStores'],
|
||||||
|
}
|
||||||
|
|
||||||
|
export const jsonObjectColumns: Partial<Record<TableName, string[]>> = {
|
||||||
|
deliverySlotInfo: ['deliverySequence'],
|
||||||
|
paymentInfoTable: ['payload'],
|
||||||
|
payments: ['payload'],
|
||||||
|
keyValStore: ['value'],
|
||||||
|
}
|
||||||
|
|
||||||
|
export const timestampColumns: Partial<Record<TableName, string[]>> = {
|
||||||
|
users: ['createdAt'],
|
||||||
|
userDetails: ['createdAt', 'updatedAt', 'dateOfBirth'],
|
||||||
|
userCreds: ['createdAt'],
|
||||||
|
addresses: ['createdAt'],
|
||||||
|
addressZones: ['addedAt'],
|
||||||
|
addressAreas: ['createdAt'],
|
||||||
|
staffUsers: ['createdAt'],
|
||||||
|
storeInfo: ['createdAt'],
|
||||||
|
productInfo: ['createdAt'],
|
||||||
|
productAvailabilitySchedules: ['createdAt', 'lastUpdated'],
|
||||||
|
productGroupInfo: ['createdAt'],
|
||||||
|
productGroupMembership: ['addedAt'],
|
||||||
|
homeBanners: ['createdAt', 'lastUpdated'],
|
||||||
|
productReviews: ['reviewTime'],
|
||||||
|
uploadUrlStatus: ['createdAt'],
|
||||||
|
productTagInfo: ['createdAt'],
|
||||||
|
productTags: ['assignedAt'],
|
||||||
|
deliverySlotInfo: ['deliveryTime', 'freezeTime'],
|
||||||
|
vendorSnippets: ['validTill', 'createdAt'],
|
||||||
|
specialDeals: ['validTill'],
|
||||||
|
orders: ['createdAt'],
|
||||||
|
orderStatus: ['orderTime', 'cancellationReviewedAt'],
|
||||||
|
refunds: ['refundProcessedAt', 'createdAt'],
|
||||||
|
notifications: ['createdAt'],
|
||||||
|
cartItems: ['addedAt'],
|
||||||
|
complaints: ['createdAt'],
|
||||||
|
coupons: ['validTill', 'createdAt'],
|
||||||
|
couponUsage: ['usedAt'],
|
||||||
|
userIncidents: ['dateAdded'],
|
||||||
|
reservedCoupons: ['validTill', 'redeemedAt', 'createdAt'],
|
||||||
|
notifCreds: ['addedAt', 'lastVerified'],
|
||||||
|
unloggedUserTokens: ['addedAt', 'lastVerified'],
|
||||||
|
userNotifications: ['createdAt'],
|
||||||
|
}
|
||||||
|
|
||||||
|
export const booleanColumns: Partial<Record<TableName, string[]>> = {
|
||||||
|
userDetails: ['isSuspended'],
|
||||||
|
addresses: ['isDefault'],
|
||||||
|
productInfo: ['isOutOfStock', 'isSuspended', 'isFlashAvailable', 'scheduledAvailability'],
|
||||||
|
homeBanners: ['isActive'],
|
||||||
|
productTagInfo: ['isDashboardTag'],
|
||||||
|
deliverySlotInfo: ['isActive', 'isFlash', 'isCapacityFull'],
|
||||||
|
vendorSnippets: ['isPermanent'],
|
||||||
|
orders: ['isCod', 'isOnlinePayment', 'isFlashDelivery'],
|
||||||
|
orderItems: ['is_packaged', 'is_package_verified'],
|
||||||
|
orderStatus: ['isPackaged', 'isDelivered', 'isCancelled', 'isCancelledByAdmin', 'cancellationReviewed'],
|
||||||
|
notifications: ['isRead'],
|
||||||
|
complaints: ['isResolved'],
|
||||||
|
coupons: ['isUserBased', 'isApplyForAll', 'isInvalidated', 'exclusiveApply'],
|
||||||
|
reservedCoupons: ['exclusiveApply', 'isRedeemed'],
|
||||||
|
}
|
||||||
18
apps/migrator/src/lib/db.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { drizzle as drizzlePostgres } from 'drizzle-orm/node-postgres'
|
||||||
|
import { drizzle as drizzleSqlite } from 'drizzle-orm/bun-sqlite'
|
||||||
|
import { Pool } from 'pg'
|
||||||
|
import { Database } from 'bun:sqlite'
|
||||||
|
import * as postgresSchema from '../../../backend/src/db/schema-postgres'
|
||||||
|
import * as sqliteSchema from '../../../backend/src/db/schema-sqlite'
|
||||||
|
|
||||||
|
export const createPostgresDb = (connectionString: string) => {
|
||||||
|
const pool = new Pool({ connectionString })
|
||||||
|
const db = drizzlePostgres(pool, { schema: postgresSchema })
|
||||||
|
return { db, pool }
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createSqliteDb = (filePath: string) => {
|
||||||
|
const sqlite = new Database(filePath)
|
||||||
|
const db = drizzleSqlite(sqlite, { schema: sqliteSchema })
|
||||||
|
return { db, sqlite }
|
||||||
|
}
|
||||||
142
apps/migrator/src/lib/migrate.ts
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
import { sql, asc } from 'drizzle-orm'
|
||||||
|
import type { TableName } from './table-order'
|
||||||
|
import { tableOrder } from './table-order'
|
||||||
|
import { postgresTables, sqliteTables, type TableMap } from './schema-maps'
|
||||||
|
import { booleanColumns, jsonArrayColumns, jsonColumns, jsonObjectColumns, timestampColumns } from './column-maps'
|
||||||
|
import { parseJsonValue, toBoolean, toDate, toEpochSeconds, toJsonString } from './casts'
|
||||||
|
|
||||||
|
export type Dialect = 'postgres' | 'sqlite'
|
||||||
|
|
||||||
|
type MigrationContext = {
|
||||||
|
from: Dialect
|
||||||
|
to: Dialect
|
||||||
|
sourceDb: any
|
||||||
|
targetDb: any
|
||||||
|
batchSize: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const getTables = (dialect: Dialect): TableMap => (dialect === 'postgres' ? postgresTables : sqliteTables)
|
||||||
|
|
||||||
|
const getOrderById = (table: any) => {
|
||||||
|
const idColumn = table?.id
|
||||||
|
if (!idColumn) return undefined
|
||||||
|
return asc(idColumn)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRowCount = async (db: any, table: any): Promise<number> => {
|
||||||
|
const result = await db.select({ count: sql`count(*)` }).from(table)
|
||||||
|
const count = result[0]?.count
|
||||||
|
return Number(count || 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
const shouldOverwriteTarget = async (db: any, tables: TableMap): Promise<boolean> => {
|
||||||
|
for (const name of tableOrder) {
|
||||||
|
const count = await getRowCount(db, tables[name])
|
||||||
|
if (count > 0) return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const clearTarget = async (db: any, tables: TableMap) => {
|
||||||
|
const reversed = [...tableOrder].reverse()
|
||||||
|
for (const name of reversed) {
|
||||||
|
await db.delete(tables[name])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const normalizeJson = (value: unknown, tableName: TableName, column: string, toDialect: Dialect) => {
|
||||||
|
const isArray = jsonArrayColumns[tableName]?.includes(column)
|
||||||
|
const isObject = jsonObjectColumns[tableName]?.includes(column)
|
||||||
|
const fallback = isArray ? [] : isObject ? {} : null
|
||||||
|
|
||||||
|
if (toDialect === 'sqlite') {
|
||||||
|
if (value === null || value === undefined) {
|
||||||
|
return isArray ? '[]' : isObject ? '{}' : null
|
||||||
|
}
|
||||||
|
return toJsonString(value, isArray ? '[]' : isObject ? '{}' : 'null')
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseJsonValue(value, fallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
const normalizeTimestamps = (value: unknown, toDialect: Dialect) => {
|
||||||
|
if (value === null || value === undefined) return value
|
||||||
|
if (toDialect === 'sqlite') {
|
||||||
|
return toEpochSeconds(value as Date | number)
|
||||||
|
}
|
||||||
|
return toDate(value as number | Date)
|
||||||
|
}
|
||||||
|
|
||||||
|
const normalizeBoolean = (value: unknown, toDialect: Dialect) => {
|
||||||
|
if (toDialect === 'postgres') {
|
||||||
|
return toBoolean(value)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
const transformRow = (row: Record<string, unknown>, tableName: TableName, toDialect: Dialect) => {
|
||||||
|
const jsonCols = jsonColumns[tableName] || []
|
||||||
|
const timeCols = timestampColumns[tableName] || []
|
||||||
|
const boolCols = booleanColumns[tableName] || []
|
||||||
|
|
||||||
|
const output: Record<string, unknown> = { ...row }
|
||||||
|
|
||||||
|
jsonCols.forEach((column) => {
|
||||||
|
output[column] = normalizeJson(output[column], tableName, column, toDialect)
|
||||||
|
})
|
||||||
|
|
||||||
|
timeCols.forEach((column) => {
|
||||||
|
output[column] = normalizeTimestamps(output[column], toDialect)
|
||||||
|
})
|
||||||
|
|
||||||
|
boolCols.forEach((column) => {
|
||||||
|
output[column] = normalizeBoolean(output[column], toDialect)
|
||||||
|
})
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
const copyTable = async (context: MigrationContext, tableName: TableName) => {
|
||||||
|
const fromTables = getTables(context.from)
|
||||||
|
const toTables = getTables(context.to)
|
||||||
|
|
||||||
|
const fromTable = fromTables[tableName]
|
||||||
|
const toTable = toTables[tableName]
|
||||||
|
|
||||||
|
const total = await getRowCount(context.sourceDb, fromTable)
|
||||||
|
if (total === 0) return
|
||||||
|
|
||||||
|
let offset = 0
|
||||||
|
while (offset < total) {
|
||||||
|
let query = context.sourceDb.select().from(fromTable)
|
||||||
|
const orderBy = getOrderById(fromTable)
|
||||||
|
if (orderBy) {
|
||||||
|
query = query.orderBy(orderBy)
|
||||||
|
}
|
||||||
|
|
||||||
|
const batch = await query.limit(context.batchSize).offset(offset)
|
||||||
|
|
||||||
|
const normalized = batch.map((row: Record<string, unknown>) =>
|
||||||
|
transformRow(row, tableName, context.to)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (normalized.length > 0) {
|
||||||
|
await context.targetDb.insert(toTable).values(normalized)
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += context.batchSize
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const runMigration = async (context: MigrationContext) => {
|
||||||
|
const targetTables = getTables(context.to)
|
||||||
|
|
||||||
|
const overwrite = await shouldOverwriteTarget(context.targetDb, targetTables)
|
||||||
|
if (overwrite) {
|
||||||
|
await clearTarget(context.targetDb, targetTables)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const tableName of tableOrder) {
|
||||||
|
await copyTable(context, tableName)
|
||||||
|
}
|
||||||
|
}
|
||||||
21
apps/migrator/src/lib/schema-maps.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import type { TableName } from './table-order'
|
||||||
|
import * as postgresSchema from '../../../backend/src/db/schema-postgres'
|
||||||
|
import * as sqliteSchema from '../../../backend/src/db/schema-sqlite'
|
||||||
|
import { tableOrder } from './table-order'
|
||||||
|
|
||||||
|
export type TableMap = Record<TableName, any>
|
||||||
|
|
||||||
|
const buildMap = (schema: Record<string, unknown>): TableMap => {
|
||||||
|
const map = {} as TableMap
|
||||||
|
tableOrder.forEach((name) => {
|
||||||
|
const table = schema[name]
|
||||||
|
if (!table) {
|
||||||
|
throw new Error(`Missing table export for ${name}`)
|
||||||
|
}
|
||||||
|
map[name] = table
|
||||||
|
})
|
||||||
|
return map
|
||||||
|
}
|
||||||
|
|
||||||
|
export const postgresTables = buildMap(postgresSchema as Record<string, unknown>)
|
||||||
|
export const sqliteTables = buildMap(sqliteSchema as Record<string, unknown>)
|
||||||
48
apps/migrator/src/lib/table-order.ts
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
export const tableOrder = [
|
||||||
|
'users',
|
||||||
|
'staffRoles',
|
||||||
|
'staffPermissions',
|
||||||
|
'staffRolePermissions',
|
||||||
|
'staffUsers',
|
||||||
|
'storeInfo',
|
||||||
|
'units',
|
||||||
|
'productInfo',
|
||||||
|
'productGroupInfo',
|
||||||
|
'productGroupMembership',
|
||||||
|
'productTagInfo',
|
||||||
|
'productTags',
|
||||||
|
'addressZones',
|
||||||
|
'addressAreas',
|
||||||
|
'addresses',
|
||||||
|
'deliverySlotInfo',
|
||||||
|
'productSlots',
|
||||||
|
'productAvailabilitySchedules',
|
||||||
|
'homeBanners',
|
||||||
|
'vendorSnippets',
|
||||||
|
'specialDeals',
|
||||||
|
'coupons',
|
||||||
|
'couponApplicableUsers',
|
||||||
|
'couponApplicableProducts',
|
||||||
|
'reservedCoupons',
|
||||||
|
'paymentInfoTable',
|
||||||
|
'orders',
|
||||||
|
'payments',
|
||||||
|
'orderItems',
|
||||||
|
'orderStatus',
|
||||||
|
'refunds',
|
||||||
|
'complaints',
|
||||||
|
'couponUsage',
|
||||||
|
'userDetails',
|
||||||
|
'userCreds',
|
||||||
|
'notifications',
|
||||||
|
'cartItems',
|
||||||
|
'keyValStore',
|
||||||
|
'notifCreds',
|
||||||
|
'unloggedUserTokens',
|
||||||
|
'userNotifications',
|
||||||
|
'productReviews',
|
||||||
|
'uploadUrlStatus',
|
||||||
|
'userIncidents',
|
||||||
|
] as const
|
||||||
|
|
||||||
|
export type TableName = typeof tableOrder[number]
|
||||||
21
apps/migrator/src/postgres_to_sqlite/index.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import type { MigrationArgs } from '../lib/args'
|
||||||
|
import { createPostgresDb, createSqliteDb } from '../lib/db'
|
||||||
|
import { runMigration } from '../lib/migrate'
|
||||||
|
|
||||||
|
export const runPostgresToSqlite = async (args: MigrationArgs) => {
|
||||||
|
const { db: sourceDb, pool } = createPostgresDb(args.source)
|
||||||
|
const { db: targetDb, sqlite } = createSqliteDb(args.target)
|
||||||
|
|
||||||
|
try {
|
||||||
|
await runMigration({
|
||||||
|
from: 'postgres',
|
||||||
|
to: 'sqlite',
|
||||||
|
sourceDb,
|
||||||
|
targetDb,
|
||||||
|
batchSize: args.batchSize,
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
await pool.end()
|
||||||
|
sqlite.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
21
apps/migrator/src/sqlite_to_postgres/index.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import type { MigrationArgs } from '../lib/args'
|
||||||
|
import { createPostgresDb, createSqliteDb } from '../lib/db'
|
||||||
|
import { runMigration } from '../lib/migrate'
|
||||||
|
|
||||||
|
export const runSqliteToPostgres = async (args: MigrationArgs) => {
|
||||||
|
const { db: sourceDb, sqlite } = createSqliteDb(args.source)
|
||||||
|
const { db: targetDb, pool } = createPostgresDb(args.target)
|
||||||
|
|
||||||
|
try {
|
||||||
|
await runMigration({
|
||||||
|
from: 'sqlite',
|
||||||
|
to: 'postgres',
|
||||||
|
sourceDb,
|
||||||
|
targetDb,
|
||||||
|
batchSize: args.batchSize,
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
sqlite.close()
|
||||||
|
await pool.end()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,11 @@ import {
|
||||||
} from '@/hooks/cart-query-hooks';
|
} from '@/hooks/cart-query-hooks';
|
||||||
import { useProductSlotIdentifier } from '@/hooks/useProductSlotIdentifier';
|
import { useProductSlotIdentifier } from '@/hooks/useProductSlotIdentifier';
|
||||||
import { useCartStore } from '@/src/store/cartStore';
|
import { useCartStore } from '@/src/store/cartStore';
|
||||||
|
<<<<<<< HEAD
|
||||||
import { useCentralSlotStore } from '@/src/store/centralSlotStore';
|
import { useCentralSlotStore } from '@/src/store/centralSlotStore';
|
||||||
|
=======
|
||||||
|
import { trpc } from '@/src/trpc-client';
|
||||||
|
>>>>>>> main
|
||||||
import { Image as RnImage } from 'react-native'
|
import { Image as RnImage } from 'react-native'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -160,8 +164,12 @@ const ProductCard: React.FC<ProductCardProps> = ({
|
||||||
>
|
>
|
||||||
<View style={tw`relative`}>
|
<View style={tw`relative`}>
|
||||||
<RnImage
|
<RnImage
|
||||||
|
<<<<<<< HEAD
|
||||||
source={{ uri: imageUri }}
|
source={{ uri: imageUri }}
|
||||||
// source={{uri: 'https://pub-6bf1fbc4048a4cbaa533ddbb13bf9de6.r2.dev/product-images/1763796113884-0'}}
|
// source={{uri: 'https://pub-6bf1fbc4048a4cbaa533ddbb13bf9de6.r2.dev/product-images/1763796113884-0'}}
|
||||||
|
=======
|
||||||
|
source={{ uri: item.images?.[0] }}
|
||||||
|
>>>>>>> main
|
||||||
style={{ width: "100%", height: itemWidth, resizeMode: "cover" }}
|
style={{ width: "100%", height: itemWidth, resizeMode: "cover" }}
|
||||||
onLoadStart={() => {
|
onLoadStart={() => {
|
||||||
setImageStatus('loading')
|
setImageStatus('loading')
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,9 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) {
|
||||||
const getAvailableSlotsForProduct = React.useMemo(() => {
|
const getAvailableSlotsForProduct = React.useMemo(() => {
|
||||||
return (productId: number) => {
|
return (productId: number) => {
|
||||||
if (!slotsData || !slotsData[productId]) return [];
|
if (!slotsData || !slotsData[productId]) return [];
|
||||||
return slotsData[productId].map((slot) => {
|
return slotsData[productId]
|
||||||
|
.filter((slot) => dayjs(slot.freezeTime).isAfter(dayjs()))
|
||||||
|
.map((slot) => {
|
||||||
const formatTimeRange = (deliveryTime: string) => {
|
const formatTimeRange = (deliveryTime: string) => {
|
||||||
const time = dayjs(deliveryTime);
|
const time = dayjs(deliveryTime);
|
||||||
const endTime = time.add(1, 'hour');
|
const endTime = time.add(1, 'hour');
|
||||||
|
|
@ -187,11 +189,11 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) {
|
||||||
return `${time.format('ddd, DD MMM ')}${timeRange}`;
|
return `${time.format('ddd, DD MMM ')}${timeRange}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
label: `Delivery: ${formatTimeRange(slot.deliveryTime)} - Close time: ${dayjs(slot.freezeTime).format("h:mm a")}`,
|
label: `Delivery: ${formatTimeRange(slot.deliveryTime)} - Close time: ${dayjs(slot.freezeTime).format("h:mm a")}`,
|
||||||
value: slot.id,
|
value: slot.id,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}, [slotsData]);
|
}, [slotsData]);
|
||||||
|
|
||||||
|
|
@ -307,11 +309,11 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) {
|
||||||
if (!productSlots || productSlots.length === 0) return;
|
if (!productSlots || productSlots.length === 0) return;
|
||||||
|
|
||||||
const now = dayjs();
|
const now = dayjs();
|
||||||
const upcomingSlots = productSlots.filter(slot =>
|
const upcomingSlots = productSlots
|
||||||
dayjs(slot.deliveryTime).isAfter(now)
|
.filter((slot) => dayjs(slot.freezeTime).isAfter(now))
|
||||||
).sort((a, b) =>
|
.sort((a, b) =>
|
||||||
dayjs(a.deliveryTime).diff(dayjs(b.deliveryTime))
|
dayjs(a.deliveryTime).diff(dayjs(b.deliveryTime))
|
||||||
);
|
);
|
||||||
|
|
||||||
if (upcomingSlots.length > 0) {
|
if (upcomingSlots.length > 0) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,9 +65,15 @@ const isDevMode = Constants.executionEnvironment !== "standalone";
|
||||||
// const BASE_API_URL = 'http://10.0.2.2:4000';
|
// const BASE_API_URL = 'http://10.0.2.2:4000';
|
||||||
// const BASE_API_URL = 'http://192.168.100.101:4000';
|
// const BASE_API_URL = 'http://192.168.100.101:4000';
|
||||||
// const BASE_API_URL = 'http://192.168.1.5:4000';
|
// const BASE_API_URL = 'http://192.168.1.5:4000';
|
||||||
|
<<<<<<< HEAD
|
||||||
// let BASE_API_URL = "https://mf.freshyo.in";
|
// let BASE_API_URL = "https://mf.freshyo.in";
|
||||||
// let BASE_API_URL = "https://freshyo.technocracy.ovh";
|
// let BASE_API_URL = "https://freshyo.technocracy.ovh";
|
||||||
let BASE_API_URL = 'http://192.168.100.108:4000';
|
let BASE_API_URL = 'http://192.168.100.108:4000';
|
||||||
|
=======
|
||||||
|
let BASE_API_URL = "https://raw.freshyo.in";
|
||||||
|
// let BASE_API_URL = "https://freshyo.technocracy.ovh";
|
||||||
|
// let BASE_API_URL = 'http://192.168.100.108:4000';
|
||||||
|
>>>>>>> main
|
||||||
// let BASE_API_URL = 'http://192.168.29.176:4000';
|
// let BASE_API_URL = 'http://192.168.29.176:4000';
|
||||||
|
|
||||||
// if(isDevMode) {
|
// if(isDevMode) {
|
||||||
|
|
|
||||||
BIN
test/appBinaries/admin.app/AppIcon60x60@2x.png
Normal file
|
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
BIN
test/appBinaries/admin.app/AppIcon76x76@2x~ipad.png
Normal file
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
BIN
test/appBinaries/admin.app/Assets.car
Normal file
BIN
test/appBinaries/admin.app/EXConstants.bundle/Info.plist
Normal file
1
test/appBinaries/admin.app/EXConstants.bundle/app.config
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name":"Symbuyote Admin","slug":"freshyoadmin","version":"1.0.0","orientation":"portrait","icon":"./assets/images/symbuyoteadmin.png","scheme":"freshyoadmin","userInterfaceStyle":"automatic","newArchEnabled":true,"ios":{"supportsTablet":true,"bundleIdentifier":"in.freshyo.adminui","infoPlist":{"LSApplicationQueriesSchemes":["ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay"],"ITSAppUsesNonExemptEncryption":false}},"android":{"adaptiveIcon":{"foregroundImage":"./assets/images/symbuyoteadmin.png","backgroundColor":"#fff0f6"},"edgeToEdgeEnabled":true,"package":"in.freshyo.adminui"},"web":{"bundler":"metro","output":"static","favicon":"./assets/images/favicon.png"},"plugins":["expo-router",["expo-splash-screen",{"image":"./assets/images/symbuyoteadmin.png","imageWidth":200,"resizeMode":"contain","backgroundColor":"#ffffff"}],"expo-secure-store"],"experiments":{"typedRoutes":true},"extra":{"router":{},"eas":{"projectId":"55e2f200-eb9d-4880-a193-70f59320e054"}},"runtimeVersion":{"policy":"appVersion"},"updates":{"url":"https://u.expo.dev/55e2f200-eb9d-4880-a193-70f59320e054"},"sdkVersion":"53.0.0","platforms":["ios","android","web"],"androidStatusBar":{"backgroundColor":"#ffffff"}}
|
||||||
BIN
test/appBinaries/admin.app/EXUpdates.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/Expo.plist
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/ExpoDevice_privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>35F9.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>0A2A.1</string>
|
||||||
|
<string>3B52.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>E174.1</string>
|
||||||
|
<string>85F4.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>hermes</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string></string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>dev.hermesengine.iphonesimulator</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string></string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>0.12.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>0.12.0</string>
|
||||||
|
<key>CSResourcesFileMapped</key>
|
||||||
|
<true/>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>15.1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>files</key>
|
||||||
|
<dict>
|
||||||
|
<key>Info.plist</key>
|
||||||
|
<data>
|
||||||
|
4Hno0Ddszl7pNxmsMdj4eZ8APpg=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>files2</key>
|
||||||
|
<dict/>
|
||||||
|
<key>rules</key>
|
||||||
|
<dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version.plist$</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>rules2</key>
|
||||||
|
<dict>
|
||||||
|
<key>.*\.dSYM($|/)</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>11</real>
|
||||||
|
</dict>
|
||||||
|
<key>^(.*/)?\.DS_Store$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>2000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Info\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^PkgInfo$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^embedded\.provisionprofile$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/Frameworks/hermes.framework/hermes
Executable file
BIN
test/appBinaries/admin.app/Info.plist
Normal file
1
test/appBinaries/admin.app/PkgInfo
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
APPL????
|
||||||
48
test/appBinaries/admin.app/PrivacyInfo.xcprivacy
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
<string>0A2A.1</string>
|
||||||
|
<string>3B52.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>35F9.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>E174.1</string>
|
||||||
|
<string>85F4.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/RCT-Folly_privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/ReachabilitySwift.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/React-Core_privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/SDWebImage.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib
generated
Normal file
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/Info.plist
Normal file
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/SplashScreenViewController.nib
generated
Normal file
BIN
test/appBinaries/admin.app/SymbuyoteAdmin
Executable file
BIN
test/appBinaries/admin.app/SymbuyoteAdmin.debug.dylib
Executable file
535
test/appBinaries/admin.app/_CodeSignature/CodeResources
Normal file
|
|
@ -0,0 +1,535 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>files</key>
|
||||||
|
<dict>
|
||||||
|
<key>AppIcon60x60@2x.png</key>
|
||||||
|
<data>
|
||||||
|
97LNT9kpa48T+CswHSue8trK1eE=
|
||||||
|
</data>
|
||||||
|
<key>AppIcon76x76@2x~ipad.png</key>
|
||||||
|
<data>
|
||||||
|
VzU6ZM8C95tff2IFjtvjPfEV8Vs=
|
||||||
|
</data>
|
||||||
|
<key>Assets.car</key>
|
||||||
|
<data>
|
||||||
|
LrIAJ0UWrloOF0ANfYZBMOddVeQ=
|
||||||
|
</data>
|
||||||
|
<key>EXConstants.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
Hlxsc20/U0owoVLTeqzSm5ybNIs=
|
||||||
|
</data>
|
||||||
|
<key>EXConstants.bundle/app.config</key>
|
||||||
|
<data>
|
||||||
|
IFa3PxmiSkaJ0td8DhhIk/PexXY=
|
||||||
|
</data>
|
||||||
|
<key>EXUpdates.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
wjdfAxEpgfQFinoWBfIM8p9jaw8=
|
||||||
|
</data>
|
||||||
|
<key>Expo.plist</key>
|
||||||
|
<data>
|
||||||
|
yXM53emO8rHxLh7yvjjxI7jUS4U=
|
||||||
|
</data>
|
||||||
|
<key>ExpoApplication_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
8BRDaa8J7FLCzhVYdsGF90Fhe6A=
|
||||||
|
</data>
|
||||||
|
<key>ExpoApplication_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
mUc2YHiDtobIhFXi+Mvm12TXeb8=
|
||||||
|
</data>
|
||||||
|
<key>ExpoConstants_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
gHWCze8PybGkM8T+sLc+3tpj/QE=
|
||||||
|
</data>
|
||||||
|
<key>ExpoConstants_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
dHAsEQehwJCS8hMOpBoz7emiNj8=
|
||||||
|
</data>
|
||||||
|
<key>ExpoDevice_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
6hGpMQ+NbBTY+ghWXzsUw8XJGyM=
|
||||||
|
</data>
|
||||||
|
<key>ExpoDevice_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
hWEgzzi+YPgmddeTqWfAi6jGQ0E=
|
||||||
|
</data>
|
||||||
|
<key>ExpoFileSystem_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
WIOt6Nu0S3BZ/+6OsBQFrMyXaNE=
|
||||||
|
</data>
|
||||||
|
<key>ExpoFileSystem_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
UieOpg4b1PxYR6jA3/cs9mU9rdo=
|
||||||
|
</data>
|
||||||
|
<key>ExpoNotifications_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
BwASpOTXQeKbJUrAWQFpwRpHkM8=
|
||||||
|
</data>
|
||||||
|
<key>ExpoNotifications_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
dHAsEQehwJCS8hMOpBoz7emiNj8=
|
||||||
|
</data>
|
||||||
|
<key>ExpoSystemUI_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
ZY9+IxqDzlo+4baYZWU5AcIgICQ=
|
||||||
|
</data>
|
||||||
|
<key>ExpoSystemUI_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
dHAsEQehwJCS8hMOpBoz7emiNj8=
|
||||||
|
</data>
|
||||||
|
<key>Frameworks/hermes.framework/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
4Hno0Ddszl7pNxmsMdj4eZ8APpg=
|
||||||
|
</data>
|
||||||
|
<key>Frameworks/hermes.framework/_CodeSignature/CodeResources</key>
|
||||||
|
<data>
|
||||||
|
UltW0Jw9IEI+gE7DBGy5/VsUBrw=
|
||||||
|
</data>
|
||||||
|
<key>Frameworks/hermes.framework/hermes</key>
|
||||||
|
<data>
|
||||||
|
zNwvRCO4iW9WNlr9JGQIrylk2Ko=
|
||||||
|
</data>
|
||||||
|
<key>Info.plist</key>
|
||||||
|
<data>
|
||||||
|
4ZwmTOgnIm01EgWvwwqDN/hpTVI=
|
||||||
|
</data>
|
||||||
|
<key>PkgInfo</key>
|
||||||
|
<data>
|
||||||
|
n57qDP4tZfLD1rCS43W0B4LQjzE=
|
||||||
|
</data>
|
||||||
|
<key>PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
QWVPQQrLs8XwFZWrDE5vARWvUdA=
|
||||||
|
</data>
|
||||||
|
<key>RCT-Folly_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
QV6mi/fThThHpU2soqgmADF/NUI=
|
||||||
|
</data>
|
||||||
|
<key>ReachabilitySwift.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
R1f4iy65ziHGDflHUDJ3rYb7QJw=
|
||||||
|
</data>
|
||||||
|
<key>ReachabilitySwift.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
0RESd+++ZxZWQhIEMSOOvP7phYs=
|
||||||
|
</data>
|
||||||
|
<key>React-Core_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
bwZ/mVvwWYRpCtLUK8MTyiLp/JU=
|
||||||
|
</data>
|
||||||
|
<key>React-Core_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
ZahcOiTSEcJJdvNh0xqgAKPqbMs=
|
||||||
|
</data>
|
||||||
|
<key>React-cxxreact_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
DHapNtVVUNHS9BKJUN7HbkRj/0E=
|
||||||
|
</data>
|
||||||
|
<key>React-cxxreact_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
dxJQFdQ77efnBkB0VBZmuIamJ4g=
|
||||||
|
</data>
|
||||||
|
<key>SDWebImage.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
MiKmS7AM8ulTkag/cANN1izmsx4=
|
||||||
|
</data>
|
||||||
|
<key>SDWebImage.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<data>
|
||||||
|
PFHYbs0V3eUFDWQyYQcwEetuqEk=
|
||||||
|
</data>
|
||||||
|
<key>SplashScreen.storyboardc/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib</key>
|
||||||
|
<data>
|
||||||
|
+LtcMiEvVQs2QdoxGRtI33YPCYs=
|
||||||
|
</data>
|
||||||
|
<key>SplashScreen.storyboardc/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
E68oTK3pecVBbvVw/Td2doSlDiA=
|
||||||
|
</data>
|
||||||
|
<key>SplashScreen.storyboardc/SplashScreenViewController.nib</key>
|
||||||
|
<data>
|
||||||
|
XO9GpHETPa/KEeOkIqhZoQ6OIvU=
|
||||||
|
</data>
|
||||||
|
<key>SymbuyoteAdmin.debug.dylib</key>
|
||||||
|
<data>
|
||||||
|
ZwTTt/x0U07XvLmnb3+tTdSeZn0=
|
||||||
|
</data>
|
||||||
|
<key>__preview.dylib</key>
|
||||||
|
<data>
|
||||||
|
NKNb0Q7QaNmfiMI7dnipVcSb6Bo=
|
||||||
|
</data>
|
||||||
|
<key>boost_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
V94X3Cp8LSj+pZ/hfbsOD4huj5Q=
|
||||||
|
</data>
|
||||||
|
<key>glog_privacy.bundle/Info.plist</key>
|
||||||
|
<data>
|
||||||
|
MxuR75ZIsXAD5pxH3nEwX9uafJ0=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>files2</key>
|
||||||
|
<dict>
|
||||||
|
<key>AppIcon60x60@2x.png</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
1EdHEGg/ZaMS6Zip6Ie7YlVSaTP8FBbCsE+pAI+y0Yk=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>AppIcon76x76@2x~ipad.png</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
0FSd2xHbBOAtgMQ4Et7BIh1mcFoPKKSNPELVi5SQJAc=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>Assets.car</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
VeXk52gO5+lQhdUDpJkX5HFitYSp/HTm9kpkxMmfwws=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>EXConstants.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
jZG3+Tzakbtg344R3nPmevDrI3G9hqlhuDM+DGKsmHY=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>EXConstants.bundle/app.config</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
KZQx0xB/v36dzA1NH6PtrZPUnlG5NMIASOIYzeC36j4=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>EXUpdates.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
TSLIu7uoFgEkmWl6rOkXOLHgeB1Z/nLtqptH/f2Kzds=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>Expo.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
WwvRV3RJHdWPGFQnnyrsouAha0/2EaB+goHuQsVMZ2Q=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoApplication_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
OF6pzmZB+LuE1u+wzImbqZDIJmhoflDtg2sTmrOtGiY=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoApplication_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
tIdj/9KcutgVElrlbhBzJz5BiuCGED/H3/fvvsFnWqo=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoConstants_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
MGRLpoZ+01WpddRUuE8TLN2RgOiqhzIDZEWy3MA1kNQ=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoConstants_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoDevice_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
VW+4r911lj+g2ALGOJp8aFap1Y0t3bccy5wunDzTLDs=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoDevice_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
2JioNW3Ie3zSsXkh1opGNtQkBns6dcg7eTX9eXcZycs=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoFileSystem_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
ByWljZT3TE7/EQIJQP/napK+gMwwBFaLiROcsjSHmJk=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoFileSystem_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
M7DgdPJz9YimS6VjKQnGqM8fFtuOTNhMaXi9Ii39Zb0=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoNotifications_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
tKJ+YduFArUfPD3zQIGLIPtXagl8rbk4RDDBfsLvJC8=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoNotifications_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoSystemUI_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
tGD6qrPgcjmHblKSEqq1CRuX18qzPmRBwHGfZltFSCw=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ExpoSystemUI_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>Frameworks/hermes.framework/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
JXB+dif18YekowEWiL1F0bJhRmDJCNhC7Yuki1yxMK0=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>Frameworks/hermes.framework/_CodeSignature/CodeResources</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
1oRx8Mn/IhJGRZOGyHTCY2w0MZ+C71dPBNeLWZ06EJk=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>Frameworks/hermes.framework/hermes</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
0po9tSLjyYKKx+ArJ1vK4kNtKcwcCF1fCYfIP3UR8M8=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
0iT0B29OMhTbiXYnweoynu+q6Im8gta4P/eeuquI8zU=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>RCT-Folly_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
0dcC3Z35ltB1Rk2HWpjCzA4wPFt+2WaTjgv/z5AxE1E=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ReachabilitySwift.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
a0Ywukh2Qq/wQxGNTeIC7/8oN2YZMvE9YYIecPYUN1M=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>ReachabilitySwift.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>React-Core_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
omnNUjXWFudh+cE0TJqsI2YDpTvWTixl77Voxv40Jf4=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>React-Core_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
fAiWnkWWIabs7AQ8zbkBJlHxhYEZRfdVF8Yj2uLhFic=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>React-cxxreact_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
tKBcBEwmtUE9GGaNVVGdsi6/KnlaX4bi1D54dKd5mm4=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>React-cxxreact_privacy.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
BYfRVcVqb08GR+vGtqC9AmYVzWEO6PIJqXhrealq0zU=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SDWebImage.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
ssr4wetNnB+bGHW2na0M24sSv1inTqC0ReqiCMf6fWU=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SDWebImage.bundle/PrivacyInfo.xcprivacy</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
A7LHCDOjMaKx79Ef8WjtAqjq39Xn0fvzDuzHUJpK6kc=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SplashScreen.storyboardc/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
X+tAJBYf6l0fu6OOgc8+aot/0jOHh5N+R9T2CA7fpzw=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SplashScreen.storyboardc/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
dNvO7WzwpeXGmDR5MyjJeD7Ksd5ILUlU4lfKITK3Q68=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SplashScreen.storyboardc/SplashScreenViewController.nib</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
nBo0wSHSJHlAjPDqrLNJFUjO0WZVeZuuO19/I4AxS6g=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>SymbuyoteAdmin.debug.dylib</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
bJ9FzLhQRgwj5TfBA8qj2AMq6UuOeEBnqpn4Mdj7YRc=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>__preview.dylib</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
JxYb3r7Pg5bMt+qPjY4ibIde7zNM5U7OL6HGGuldoTM=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>boost_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
ewhZPFvqBmGCXr9cyPcgBgi1XfwdibD9dwEvGqRXAFc=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>glog_privacy.bundle/Info.plist</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
ppv2/Di+oXBAtgOAUjnelHqDc6Xxh7Ki3j5KlqckbEY=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>rules</key>
|
||||||
|
<dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version.plist$</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>rules2</key>
|
||||||
|
<dict>
|
||||||
|
<key>.*\.dSYM($|/)</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>11</real>
|
||||||
|
</dict>
|
||||||
|
<key>^(.*/)?\.DS_Store$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>2000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Info\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^PkgInfo$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^embedded\.provisionprofile$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/admin.app/__preview.dylib
Executable file
BIN
test/appBinaries/admin.app/boost_privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/glog_privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/user.app/AppAuthCore_Privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/AppIcon60x60@2x.png
Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
BIN
test/appBinaries/user.app/AppIcon76x76@2x~ipad.png
Normal file
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
test/appBinaries/user.app/Assets.car
Normal file
BIN
test/appBinaries/user.app/EXConstants.bundle/Info.plist
Normal file
1
test/appBinaries/user.app/EXConstants.bundle/app.config
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name":"Freshyo","slug":"freshyo","version":"1.2.0","orientation":"portrait","icon":"./assets/images/freshyo-logo.png","scheme":"freshyo","userInterfaceStyle":"automatic","newArchEnabled":true,"ios":{"buildNumber":"1.1.0","supportsTablet":true,"bundleIdentifier":"com.freshyotrial.app","infoPlist":{"LSApplicationQueriesSchemes":["ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay"],"ITSAppUsesNonExemptEncryption":false,"NSPhotoLibraryUsageDescription":"This app uses photo library to allow users to upload pictures as a part or product's review and feedback.","NSLocationWhenInUseUsageDescription":"This app uses your location to decide if your place is serviceable or not."}},"android":{"softwareKeyboardLayoutMode":"resize","adaptiveIcon":{"foregroundImage":"./assets/images/freshyo-logo.png","backgroundColor":"#fff0f6"},"edgeToEdgeEnabled":true,"package":"in.freshyo.app","googleServicesFile":"./google-services.json"},"web":{"bundler":"metro","output":"static","favicon":"./assets/images/favicon.png"},"plugins":["expo-router",["expo-splash-screen",{"image":"./assets/images/freshyo-logo.png","imageWidth":200,"resizeMode":"contain","backgroundColor":"#ffffff"}],"expo-secure-store","expo-notifications"],"experiments":{"typedRoutes":true},"extra":{"router":{},"eas":{"projectId":"7f3e7611-f7a8-45f9-8a99-c2b1f6454d48"}},"runtimeVersion":{"policy":"appVersion"},"updates":{"url":"https://u.expo.dev/7f3e7611-f7a8-45f9-8a99-c2b1f6454d48"},"owner":"mohammedshafiuddin54","sdkVersion":"53.0.0","platforms":["ios","android","web"],"androidStatusBar":{"backgroundColor":"#ffffff"}}
|
||||||
BIN
test/appBinaries/user.app/EXUpdates.bundle/Info.plist
Normal file
BIN
test/appBinaries/user.app/Expo.plist
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>C617.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/ExpoDevice_privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>35F9.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>0A2A.1</string>
|
||||||
|
<string>3B52.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>E174.1</string>
|
||||||
|
<string>85F4.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/ExpoSystemUI_privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPIType</key>
|
||||||
|
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||||
|
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||||
|
<array>
|
||||||
|
<string>CA92.1</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/FBLPromises_Privacy.bundle/Info.plist
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrivacyAccessedAPITypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyCollectedDataTypes</key>
|
||||||
|
<array/>
|
||||||
|
<key>NSPrivacyTracking</key>
|
||||||
|
<false/>
|
||||||
|
<key>NSPrivacyTrackingDomains</key>
|
||||||
|
<array/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/Frameworks/Razorpay.framework/Razorpay
Executable file
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>files</key>
|
||||||
|
<dict>
|
||||||
|
<key>Info.plist</key>
|
||||||
|
<data>
|
||||||
|
m2+OcUVS+NCF/RaQ0NMeexAJIbU=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>files2</key>
|
||||||
|
<dict/>
|
||||||
|
<key>rules</key>
|
||||||
|
<dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version.plist$</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>rules2</key>
|
||||||
|
<dict>
|
||||||
|
<key>.*\.dSYM($|/)</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>11</real>
|
||||||
|
</dict>
|
||||||
|
<key>^(.*/)?\.DS_Store$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>2000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Info\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^PkgInfo$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^embedded\.provisionprofile$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
test/appBinaries/user.app/Frameworks/RazorpayCore.framework/RazorpayCore
Executable file
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>files</key>
|
||||||
|
<dict>
|
||||||
|
<key>Info.plist</key>
|
||||||
|
<data>
|
||||||
|
IgSq/mUvfi0nncHC2TAKVG0zPwA=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
|
<key>files2</key>
|
||||||
|
<dict/>
|
||||||
|
<key>rules</key>
|
||||||
|
<dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version.plist$</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>rules2</key>
|
||||||
|
<dict>
|
||||||
|
<key>.*\.dSYM($|/)</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>11</real>
|
||||||
|
</dict>
|
||||||
|
<key>^(.*/)?\.DS_Store$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>2000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*</key>
|
||||||
|
<true/>
|
||||||
|
<key>^.*\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>optional</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1000</real>
|
||||||
|
</dict>
|
||||||
|
<key>^.*\.lproj/locversion.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1100</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Base\.lproj/</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>1010</real>
|
||||||
|
</dict>
|
||||||
|
<key>^Info\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^PkgInfo$</key>
|
||||||
|
<dict>
|
||||||
|
<key>omit</key>
|
||||||
|
<true/>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^embedded\.provisionprofile$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
<key>^version\.plist$</key>
|
||||||
|
<dict>
|
||||||
|
<key>weight</key>
|
||||||
|
<real>20</real>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||