enh
This commit is contained in:
commit
23be301cc0
201 changed files with 10035 additions and 17 deletions
1
.gitignore
vendored
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
6
apps/admin-ui/.expo/types/router.d.ts
vendored
File diff suppressed because one or more lines are too long
11
apps/backend/drizzle.config.postgres.ts
Normal file
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
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
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
3574
apps/backend/drizzle/sqlite/meta/0000_snapshot.json
Normal file
File diff suppressed because it is too large
Load diff
13
apps/backend/drizzle/sqlite/meta/_journal.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
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
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
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
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
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
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
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
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
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
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
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
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
BIN
test/appBinaries/admin.app/AppIcon60x60@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9 KiB |
BIN
test/appBinaries/admin.app/AppIcon76x76@2x~ipad.png
Normal file
BIN
test/appBinaries/admin.app/AppIcon76x76@2x~ipad.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
BIN
test/appBinaries/admin.app/Assets.car
Normal file
BIN
test/appBinaries/admin.app/Assets.car
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/EXConstants.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/EXConstants.bundle/Info.plist
Normal file
Binary file not shown.
1
test/appBinaries/admin.app/EXConstants.bundle/app.config
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/EXUpdates.bundle/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/Expo.plist
Normal file
BIN
test/appBinaries/admin.app/Expo.plist
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/admin.app/ExpoDevice_privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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/Frameworks/hermes.framework/hermes
Executable file
Binary file not shown.
BIN
test/appBinaries/admin.app/Info.plist
Normal file
BIN
test/appBinaries/admin.app/Info.plist
Normal file
Binary file not shown.
1
test/appBinaries/admin.app/PkgInfo
Normal file
1
test/appBinaries/admin.app/PkgInfo
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
APPL????
|
||||||
48
test/appBinaries/admin.app/PrivacyInfo.xcprivacy
Normal file
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/RCT-Folly_privacy.bundle/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/ReachabilitySwift.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/ReachabilitySwift.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/admin.app/React-Core_privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/admin.app/SDWebImage.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib
generated
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/Info.plist
Normal file
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/SplashScreenViewController.nib
generated
Normal file
BIN
test/appBinaries/admin.app/SplashScreen.storyboardc/SplashScreenViewController.nib
generated
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/SymbuyoteAdmin
Executable file
BIN
test/appBinaries/admin.app/SymbuyoteAdmin
Executable file
Binary file not shown.
BIN
test/appBinaries/admin.app/SymbuyoteAdmin.debug.dylib
Executable file
BIN
test/appBinaries/admin.app/SymbuyoteAdmin.debug.dylib
Executable file
Binary file not shown.
535
test/appBinaries/admin.app/_CodeSignature/CodeResources
Normal 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/__preview.dylib
Executable file
Binary file not shown.
BIN
test/appBinaries/admin.app/boost_privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/boost_privacy.bundle/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/admin.app/glog_privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/admin.app/glog_privacy.bundle/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/user.app/AppAuthCore_Privacy.bundle/Info.plist
Normal file
BIN
test/appBinaries/user.app/AppAuthCore_Privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/user.app/AppIcon60x60@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
test/appBinaries/user.app/AppIcon76x76@2x~ipad.png
Normal file
BIN
test/appBinaries/user.app/AppIcon76x76@2x~ipad.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
BIN
test/appBinaries/user.app/Assets.car
Normal file
BIN
test/appBinaries/user.app/Assets.car
Normal file
Binary file not shown.
BIN
test/appBinaries/user.app/EXConstants.bundle/Info.plist
Normal file
BIN
test/appBinaries/user.app/EXConstants.bundle/Info.plist
Normal file
Binary file not shown.
1
test/appBinaries/user.app/EXConstants.bundle/app.config
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/EXUpdates.bundle/Info.plist
Normal file
Binary file not shown.
BIN
test/appBinaries/user.app/Expo.plist
Normal file
BIN
test/appBinaries/user.app/Expo.plist
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/user.app/ExpoDevice_privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/user.app/ExpoSystemUI_privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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
BIN
test/appBinaries/user.app/FBLPromises_Privacy.bundle/Info.plist
Normal file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
BIN
test/appBinaries/user.app/Frameworks/Razorpay.framework/Razorpay
Executable file
BIN
test/appBinaries/user.app/Frameworks/Razorpay.framework/Razorpay
Executable file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
BIN
test/appBinaries/user.app/Frameworks/RazorpayCore.framework/RazorpayCore
Executable file
BIN
test/appBinaries/user.app/Frameworks/RazorpayCore.framework/RazorpayCore
Executable file
Binary file not shown.
|
|
@ -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>
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue