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