@infuro/cms-core 1.0.46 → 1.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -16
- package/dist/admin.cjs +4568 -2716
- package/dist/admin.d.cts +18 -4
- package/dist/admin.d.ts +18 -4
- package/dist/admin.js +3475 -1625
- package/dist/api.cjs +38 -39
- package/dist/api.d.cts +9 -3
- package/dist/api.d.ts +9 -3
- package/dist/api.js +6 -7
- package/dist/auth.cjs +84 -51
- package/dist/auth.d.cts +105 -4
- package/dist/auth.d.ts +105 -4
- package/dist/auth.js +4 -3
- package/dist/chunk-2IAXTKQN.cjs +19 -0
- package/dist/chunk-3EOM4V2M.cjs +452 -0
- package/dist/{chunk-X6UQFV4X.cjs → chunk-77NUXO6A.cjs} +14 -12
- package/dist/{chunk-KFFB6EMZ.js → chunk-AYERBA7I.js} +3 -7
- package/dist/chunk-EIZKW2PF.js +13 -0
- package/dist/{chunk-CRYKVJTO.js → chunk-IPDHT2UV.js} +1420 -3
- package/dist/{chunk-UDVLFVEC.cjs → chunk-JCMOOPNX.cjs} +3820 -2907
- package/dist/{chunk-X47PBV4I.js → chunk-JE22VP6S.js} +1 -0
- package/dist/{chunk-DN65KDIA.js → chunk-JIWUVQ6B.js} +14 -13
- package/dist/{chunk-HT5DI3XW.cjs → chunk-KOTXDSQB.cjs} +1 -0
- package/dist/{chunk-UKC3HYXI.js → chunk-LT2WOPKA.js} +3733 -2813
- package/dist/chunk-RK5ETF2I.js +434 -0
- package/dist/{chunk-SPQFNIYJ.cjs → chunk-TJ2MIQUT.cjs} +3 -7
- package/dist/{chunk-TCSGFAWB.cjs → chunk-UUWAUHUW.cjs} +1451 -3
- package/dist/{chunk-57O3HZPG.js → chunk-WRKV6MHB.js} +415 -3
- package/dist/{chunk-FBKDMRQL.cjs → chunk-YV5PK4JW.cjs} +427 -7
- package/dist/cli.cjs +13 -22
- package/dist/cli.js +13 -22
- package/dist/{emit-order-notification-trigger-IVLWKKJL.js → emit-order-notification-trigger-6XX7LSC4.js} +1 -1
- package/dist/{emit-order-notification-trigger-D2N3KFHL.cjs → emit-order-notification-trigger-NASG7ZEO.cjs} +3 -3
- package/dist/{event-order-defaults-EMWBIGL3.cjs → event-order-defaults-DU7V3YND.cjs} +9 -9
- package/dist/{event-order-defaults-SDRNAZHC.js → event-order-defaults-H4RT7NMR.js} +1 -1
- package/dist/hooks.cjs +43 -0
- package/dist/hooks.d.cts +10 -1
- package/dist/hooks.d.ts +10 -1
- package/dist/hooks.js +39 -1
- package/dist/index.cjs +479 -339
- package/dist/index.d.cts +181 -20
- package/dist/index.d.ts +181 -20
- package/dist/index.js +115 -13
- package/dist/migrations/1782200000000-VendorTeamProfiles.ts +233 -0
- package/dist/migrations/1782300000000-AddTypeToOrderNotificationBindings.ts +75 -0
- package/dist/migrations/1782400000000-CreateUserDeviceTokens.ts +36 -0
- package/dist/migrations/1782500000000-AddPushToOrderNotificationBindingsChannelEnum.ts +15 -0
- package/dist/{order-notification-dispatcher-ZJZB2HUN.js → order-notification-dispatcher-3TA4ETYJ.js} +1 -2
- package/dist/{order-notification-dispatcher-SBQAMM5V.cjs → order-notification-dispatcher-ZEAZ5SHV.cjs} +7 -4
- package/dist/{rbac-debug-db-2SGNLANF.js → rbac-debug-db-6EMIVMGF.js} +1 -1
- package/dist/{rbac-debug-db-4Z6A425H.cjs → rbac-debug-db-6PWTLBEL.cjs} +2 -2
- package/dist/theme.cjs +6 -1
- package/dist/theme.d.cts +4 -1
- package/dist/theme.d.ts +4 -1
- package/dist/theme.js +3 -1
- package/package.json +1 -1
- package/src/admin/admin.css +7 -0
- package/dist/chunk-7PMHZRF3.cjs +0 -872
- package/dist/chunk-CQHXW4TR.js +0 -107
- package/dist/chunk-GUSHM5HN.js +0 -862
- package/dist/chunk-NBY4NVTY.cjs +0 -182
- package/dist/chunk-SF2XKMCI.js +0 -171
- package/dist/chunk-XMRMZ6NQ.cjs +0 -109
- package/dist/send-order-placed-emails-B5ZVJT7T.cjs +0 -15
- package/dist/send-order-placed-emails-WPI37KRZ.js +0 -6
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Vendor team/profiles redesign:
|
|
5
|
+
* - Rename user group "Vendor Owner" → "Vendor"
|
|
6
|
+
* - Create vendor_user_profiles
|
|
7
|
+
* - Add vendor_users.vendorUserProfileId; backfill profiles + vendorRoleId
|
|
8
|
+
* - Drop vendor_users.role and vendors.pan
|
|
9
|
+
*/
|
|
10
|
+
export class VendorTeamProfiles1782200000000 implements MigrationInterface {
|
|
11
|
+
name = 'VendorTeamProfiles1782200000000';
|
|
12
|
+
|
|
13
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
14
|
+
await queryRunner.query(`
|
|
15
|
+
UPDATE "user_groups"
|
|
16
|
+
SET "name" = 'Vendor'
|
|
17
|
+
WHERE "name" = 'Vendor Owner' AND "deleted" = false
|
|
18
|
+
`);
|
|
19
|
+
|
|
20
|
+
await queryRunner.query(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS "vendor_user_profiles" (
|
|
22
|
+
"id" SERIAL PRIMARY KEY,
|
|
23
|
+
"name" character varying NOT NULL,
|
|
24
|
+
"email" character varying NOT NULL,
|
|
25
|
+
"phone" character varying,
|
|
26
|
+
"aadhaarNo" character varying,
|
|
27
|
+
"panNo" character varying,
|
|
28
|
+
"addressLine1" character varying,
|
|
29
|
+
"addressLine2" character varying,
|
|
30
|
+
"city" character varying,
|
|
31
|
+
"state" character varying,
|
|
32
|
+
"postalCode" character varying,
|
|
33
|
+
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
34
|
+
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
35
|
+
)
|
|
36
|
+
`);
|
|
37
|
+
|
|
38
|
+
const hasProfileFk = (await queryRunner.query(`
|
|
39
|
+
SELECT 1 FROM information_schema.columns
|
|
40
|
+
WHERE table_name = 'vendor_users' AND column_name = 'vendorUserProfileId'
|
|
41
|
+
LIMIT 1
|
|
42
|
+
`)) as unknown[];
|
|
43
|
+
if (!hasProfileFk.length) {
|
|
44
|
+
await queryRunner.query(`
|
|
45
|
+
ALTER TABLE "vendor_users"
|
|
46
|
+
ADD COLUMN "vendorUserProfileId" integer
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// One profile per membership (loop keeps vu.id ↔ profile.id aligned)
|
|
51
|
+
await queryRunner.query(`
|
|
52
|
+
DO $$
|
|
53
|
+
DECLARE
|
|
54
|
+
r RECORD;
|
|
55
|
+
new_id integer;
|
|
56
|
+
is_owner boolean;
|
|
57
|
+
BEGIN
|
|
58
|
+
FOR r IN
|
|
59
|
+
SELECT
|
|
60
|
+
vu.id AS vu_id,
|
|
61
|
+
vu.role AS vu_role,
|
|
62
|
+
vu."vendorRoleId" AS vendor_role_id,
|
|
63
|
+
COALESCE(NULLIF(TRIM(u.name), ''), COALESCE(NULLIF(TRIM(u.email), ''), 'Vendor user')) AS pname,
|
|
64
|
+
COALESCE(NULLIF(TRIM(u.email), ''), CONCAT('vendor-user-', vu.id, '@placeholder.local')) AS pemail,
|
|
65
|
+
NULLIF(TRIM(u.phone), '') AS pphone,
|
|
66
|
+
v.pan AS vpan,
|
|
67
|
+
v."addressLine1" AS a1,
|
|
68
|
+
v."addressLine2" AS a2,
|
|
69
|
+
v.city AS city,
|
|
70
|
+
v.state AS state,
|
|
71
|
+
v."postalCode" AS postal,
|
|
72
|
+
COALESCE(vr."isOwnerRole", false) AS role_is_owner
|
|
73
|
+
FROM "vendor_users" vu
|
|
74
|
+
INNER JOIN "users" u ON u.id = vu."userId"
|
|
75
|
+
INNER JOIN "vendors" v ON v.id = vu."vendorId"
|
|
76
|
+
LEFT JOIN "vendor_roles" vr ON vr.id = vu."vendorRoleId"
|
|
77
|
+
WHERE vu."vendorUserProfileId" IS NULL
|
|
78
|
+
ORDER BY vu.id
|
|
79
|
+
LOOP
|
|
80
|
+
is_owner := (r.vu_role = 'owner') OR (r.role_is_owner = true);
|
|
81
|
+
INSERT INTO "vendor_user_profiles" (
|
|
82
|
+
"name", "email", "phone", "aadhaarNo", "panNo",
|
|
83
|
+
"addressLine1", "addressLine2", "city", "state", "postalCode",
|
|
84
|
+
"createdAt", "updatedAt"
|
|
85
|
+
) VALUES (
|
|
86
|
+
r.pname,
|
|
87
|
+
r.pemail,
|
|
88
|
+
r.pphone,
|
|
89
|
+
NULL,
|
|
90
|
+
CASE WHEN is_owner THEN NULLIF(TRIM(r.vpan), '') ELSE NULL END,
|
|
91
|
+
CASE WHEN is_owner THEN r.a1 ELSE NULL END,
|
|
92
|
+
CASE WHEN is_owner THEN r.a2 ELSE NULL END,
|
|
93
|
+
CASE WHEN is_owner THEN r.city ELSE NULL END,
|
|
94
|
+
CASE WHEN is_owner THEN r.state ELSE NULL END,
|
|
95
|
+
CASE WHEN is_owner THEN r.postal ELSE NULL END,
|
|
96
|
+
now(),
|
|
97
|
+
now()
|
|
98
|
+
) RETURNING id INTO new_id;
|
|
99
|
+
UPDATE "vendor_users" SET "vendorUserProfileId" = new_id WHERE id = r.vu_id;
|
|
100
|
+
END LOOP;
|
|
101
|
+
END $$;
|
|
102
|
+
`);
|
|
103
|
+
|
|
104
|
+
// Ensure vendorRoleId for legacy rows (while role column still exists)
|
|
105
|
+
await queryRunner.query(`
|
|
106
|
+
UPDATE "vendor_users" vu
|
|
107
|
+
SET "vendorRoleId" = vr.id
|
|
108
|
+
FROM "vendor_roles" vr
|
|
109
|
+
WHERE vu."vendorId" = vr."vendorId"
|
|
110
|
+
AND vu."vendorRoleId" IS NULL
|
|
111
|
+
AND vr.deleted = false
|
|
112
|
+
AND vu.role = 'owner'
|
|
113
|
+
AND vr."isOwnerRole" = true
|
|
114
|
+
`);
|
|
115
|
+
|
|
116
|
+
await queryRunner.query(`
|
|
117
|
+
UPDATE "vendor_users" vu
|
|
118
|
+
SET "vendorRoleId" = vr.id
|
|
119
|
+
FROM "vendor_roles" vr
|
|
120
|
+
WHERE vu."vendorId" = vr."vendorId"
|
|
121
|
+
AND vu."vendorRoleId" IS NULL
|
|
122
|
+
AND vr.deleted = false
|
|
123
|
+
AND vu.role IS DISTINCT FROM 'owner'
|
|
124
|
+
AND vr.name = 'Viewer'
|
|
125
|
+
AND vr."isSystem" = true
|
|
126
|
+
`);
|
|
127
|
+
|
|
128
|
+
await queryRunner.query(`
|
|
129
|
+
UPDATE "vendor_users" vu
|
|
130
|
+
SET "vendorRoleId" = vr.id
|
|
131
|
+
FROM "vendor_roles" vr
|
|
132
|
+
WHERE vu."vendorId" = vr."vendorId"
|
|
133
|
+
AND vu."vendorRoleId" IS NULL
|
|
134
|
+
AND vr.deleted = false
|
|
135
|
+
AND vr."isOwnerRole" = false
|
|
136
|
+
AND vr."isSystem" = true
|
|
137
|
+
AND vr.name = 'Manager'
|
|
138
|
+
`);
|
|
139
|
+
|
|
140
|
+
const nullProfiles = (await queryRunner.query(`
|
|
141
|
+
SELECT COUNT(*)::int AS c FROM "vendor_users" WHERE "vendorUserProfileId" IS NULL
|
|
142
|
+
`)) as Array<{ c: number }>;
|
|
143
|
+
if (Number(nullProfiles[0]?.c ?? 0) > 0) {
|
|
144
|
+
throw new Error('VendorTeamProfiles migration: some vendor_users still lack vendorUserProfileId');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
await queryRunner.query(`
|
|
148
|
+
ALTER TABLE "vendor_users"
|
|
149
|
+
ALTER COLUMN "vendorUserProfileId" SET NOT NULL
|
|
150
|
+
`);
|
|
151
|
+
|
|
152
|
+
const fkExists = (await queryRunner.query(`
|
|
153
|
+
SELECT 1 FROM pg_constraint WHERE conname = 'FK_vendor_users_vendorUserProfileId' LIMIT 1
|
|
154
|
+
`)) as unknown[];
|
|
155
|
+
if (!fkExists.length) {
|
|
156
|
+
await queryRunner.query(`
|
|
157
|
+
ALTER TABLE "vendor_users"
|
|
158
|
+
ADD CONSTRAINT "FK_vendor_users_vendorUserProfileId"
|
|
159
|
+
FOREIGN KEY ("vendorUserProfileId") REFERENCES "vendor_user_profiles"("id")
|
|
160
|
+
ON DELETE RESTRICT
|
|
161
|
+
`);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const roleCol = (await queryRunner.query(`
|
|
165
|
+
SELECT 1 FROM information_schema.columns
|
|
166
|
+
WHERE table_name = 'vendor_users' AND column_name = 'role'
|
|
167
|
+
LIMIT 1
|
|
168
|
+
`)) as unknown[];
|
|
169
|
+
if (roleCol.length) {
|
|
170
|
+
await queryRunner.query(`ALTER TABLE "vendor_users" DROP COLUMN "role"`);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const panCol = (await queryRunner.query(`
|
|
174
|
+
SELECT 1 FROM information_schema.columns
|
|
175
|
+
WHERE table_name = 'vendors' AND column_name = 'pan'
|
|
176
|
+
LIMIT 1
|
|
177
|
+
`)) as unknown[];
|
|
178
|
+
if (panCol.length) {
|
|
179
|
+
await queryRunner.query(`ALTER TABLE "vendors" DROP COLUMN "pan"`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
184
|
+
const panCol = (await queryRunner.query(`
|
|
185
|
+
SELECT 1 FROM information_schema.columns
|
|
186
|
+
WHERE table_name = 'vendors' AND column_name = 'pan'
|
|
187
|
+
LIMIT 1
|
|
188
|
+
`)) as unknown[];
|
|
189
|
+
if (!panCol.length) {
|
|
190
|
+
await queryRunner.query(`ALTER TABLE "vendors" ADD COLUMN "pan" character varying`);
|
|
191
|
+
await queryRunner.query(`
|
|
192
|
+
UPDATE "vendors" v
|
|
193
|
+
SET pan = p."panNo"
|
|
194
|
+
FROM "vendor_users" vu
|
|
195
|
+
INNER JOIN "vendor_user_profiles" p ON p.id = vu."vendorUserProfileId"
|
|
196
|
+
INNER JOIN "vendor_roles" vr ON vr.id = vu."vendorRoleId" AND vr."isOwnerRole" = true
|
|
197
|
+
WHERE vu."vendorId" = v.id AND p."panNo" IS NOT NULL
|
|
198
|
+
`);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const roleCol = (await queryRunner.query(`
|
|
202
|
+
SELECT 1 FROM information_schema.columns
|
|
203
|
+
WHERE table_name = 'vendor_users' AND column_name = 'role'
|
|
204
|
+
LIMIT 1
|
|
205
|
+
`)) as unknown[];
|
|
206
|
+
if (!roleCol.length) {
|
|
207
|
+
await queryRunner.query(`
|
|
208
|
+
ALTER TABLE "vendor_users"
|
|
209
|
+
ADD COLUMN "role" character varying NOT NULL DEFAULT 'staff'
|
|
210
|
+
`);
|
|
211
|
+
await queryRunner.query(`
|
|
212
|
+
UPDATE "vendor_users" vu
|
|
213
|
+
SET "role" = 'owner'
|
|
214
|
+
FROM "vendor_roles" vr
|
|
215
|
+
WHERE vu."vendorRoleId" = vr.id AND vr."isOwnerRole" = true
|
|
216
|
+
`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
await queryRunner.query(`
|
|
220
|
+
ALTER TABLE "vendor_users" DROP CONSTRAINT IF EXISTS "FK_vendor_users_vendorUserProfileId"
|
|
221
|
+
`);
|
|
222
|
+
await queryRunner.query(`
|
|
223
|
+
ALTER TABLE "vendor_users" DROP COLUMN IF EXISTS "vendorUserProfileId"
|
|
224
|
+
`);
|
|
225
|
+
await queryRunner.query(`DROP TABLE IF EXISTS "vendor_user_profiles"`);
|
|
226
|
+
|
|
227
|
+
await queryRunner.query(`
|
|
228
|
+
UPDATE "user_groups"
|
|
229
|
+
SET "name" = 'Vendor Owner'
|
|
230
|
+
WHERE "name" = 'Vendor' AND "deleted" = false
|
|
231
|
+
`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
export class AddTypeToOrderNotificationBindings1782300000000
|
|
4
|
+
implements MigrationInterface
|
|
5
|
+
{
|
|
6
|
+
name = 'AddTypeToOrderNotificationBindings1782300000000';
|
|
7
|
+
|
|
8
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
9
|
+
// 1. Create the audience type enum.
|
|
10
|
+
await queryRunner.query(`
|
|
11
|
+
CREATE TYPE "order_notification_bindings_type_enum" AS ENUM ('customers', 'vendors', 'admin')
|
|
12
|
+
`);
|
|
13
|
+
|
|
14
|
+
// 2. Add the type column, defaulting existing rows to 'customers'.
|
|
15
|
+
await queryRunner.query(`
|
|
16
|
+
ALTER TABLE "order_notification_bindings"
|
|
17
|
+
ADD COLUMN "type" "order_notification_bindings_type_enum" NOT NULL DEFAULT 'customers'
|
|
18
|
+
`);
|
|
19
|
+
|
|
20
|
+
// 3. Drop old unique constraint on (triggerKey, channel).
|
|
21
|
+
await queryRunner.query(`
|
|
22
|
+
DO $$
|
|
23
|
+
DECLARE
|
|
24
|
+
old_constraint_name text;
|
|
25
|
+
BEGIN
|
|
26
|
+
SELECT con.conname INTO old_constraint_name
|
|
27
|
+
FROM pg_constraint con
|
|
28
|
+
JOIN pg_class rel ON rel.oid = con.conrelid
|
|
29
|
+
WHERE rel.relname = 'order_notification_bindings'
|
|
30
|
+
AND con.contype = 'u'
|
|
31
|
+
AND con.conname LIKE '%triggerKey_channel%'
|
|
32
|
+
LIMIT 1;
|
|
33
|
+
|
|
34
|
+
IF old_constraint_name IS NOT NULL THEN
|
|
35
|
+
EXECUTE format('ALTER TABLE "order_notification_bindings" DROP CONSTRAINT %I', old_constraint_name);
|
|
36
|
+
END IF;
|
|
37
|
+
END $$;
|
|
38
|
+
`);
|
|
39
|
+
|
|
40
|
+
// 4. Add new composite unique constraint on (triggerKey, channel, type).
|
|
41
|
+
await queryRunner.query(`
|
|
42
|
+
ALTER TABLE "order_notification_bindings"
|
|
43
|
+
ADD CONSTRAINT "UQ_order_notification_bindings_triggerKey_channel_type" UNIQUE ("triggerKey", "channel", "type")
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
48
|
+
// 1. Drop composite unique constraint.
|
|
49
|
+
await queryRunner.query(`
|
|
50
|
+
ALTER TABLE "order_notification_bindings"
|
|
51
|
+
DROP CONSTRAINT "UQ_order_notification_bindings_triggerKey_channel_type"
|
|
52
|
+
`);
|
|
53
|
+
|
|
54
|
+
// 2. Remove vendor/admin audience rows prior to rollback.
|
|
55
|
+
await queryRunner.query(`
|
|
56
|
+
DELETE FROM "order_notification_bindings" WHERE "type" != 'customers'
|
|
57
|
+
`);
|
|
58
|
+
|
|
59
|
+
// 3. Drop type column.
|
|
60
|
+
await queryRunner.query(`
|
|
61
|
+
ALTER TABLE "order_notification_bindings" DROP COLUMN "type"
|
|
62
|
+
`);
|
|
63
|
+
|
|
64
|
+
// 4. Restore original unique constraint on (triggerKey, channel).
|
|
65
|
+
await queryRunner.query(`
|
|
66
|
+
ALTER TABLE "order_notification_bindings"
|
|
67
|
+
ADD CONSTRAINT "UQ_order_notification_bindings_triggerKey_channel" UNIQUE ("triggerKey", "channel")
|
|
68
|
+
`);
|
|
69
|
+
|
|
70
|
+
// 5. Drop enum type.
|
|
71
|
+
await queryRunner.query(`
|
|
72
|
+
DROP TYPE "order_notification_bindings_type_enum"
|
|
73
|
+
`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
export class CreateUserDeviceTokens1782400000000 implements MigrationInterface {
|
|
4
|
+
name = 'CreateUserDeviceTokens1782400000000';
|
|
5
|
+
|
|
6
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
await queryRunner.query(`
|
|
8
|
+
DO $$ BEGIN
|
|
9
|
+
CREATE TYPE "user_device_tokens_platform_enum" AS ENUM ('android', 'ios');
|
|
10
|
+
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
|
|
11
|
+
`);
|
|
12
|
+
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
CREATE TABLE IF NOT EXISTS "user_device_tokens" (
|
|
15
|
+
"id" uuid NOT NULL DEFAULT gen_random_uuid(),
|
|
16
|
+
"vendor_id" uuid NOT NULL,
|
|
17
|
+
"user_id" uuid NOT NULL,
|
|
18
|
+
"token" text NOT NULL,
|
|
19
|
+
"platform" "user_device_tokens_platform_enum" NOT NULL,
|
|
20
|
+
"device_id" character varying(255),
|
|
21
|
+
"app_version" character varying(50),
|
|
22
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
23
|
+
"last_used_at" TIMESTAMP NULL,
|
|
24
|
+
"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
25
|
+
"updated_at" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
26
|
+
CONSTRAINT "PK_user_device_tokens" PRIMARY KEY ("id"),
|
|
27
|
+
CONSTRAINT "uq_user_device_token" UNIQUE ("user_id", "token")
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
33
|
+
await queryRunner.query(`DROP TABLE IF EXISTS "user_device_tokens"`);
|
|
34
|
+
await queryRunner.query(`DROP TYPE IF EXISTS "user_device_tokens_platform_enum"`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
export class AddMobileToOrderNotificationBindingsChannelEnum1782500000000 implements MigrationInterface {
|
|
4
|
+
name = 'AddMobileToOrderNotificationBindingsChannelEnum1782500000000';
|
|
5
|
+
|
|
6
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
await queryRunner.query(`
|
|
8
|
+
ALTER TYPE "order_notification_bindings_channel_enum" ADD VALUE IF NOT EXISTS 'mobile';
|
|
9
|
+
`);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
13
|
+
/* Postgres ENUM values cannot be safely removed once added */
|
|
14
|
+
}
|
|
15
|
+
}
|
package/dist/{order-notification-dispatcher-ZJZB2HUN.js → order-notification-dispatcher-3TA4ETYJ.js}
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { initWhatsappTriggerDispatcher, resendOrderNotification } from './chunk-
|
|
2
|
-
import './chunk-CRYKVJTO.js';
|
|
1
|
+
export { getSettingsGroup, initWhatsappTriggerDispatcher, resendOrderNotification } from './chunk-IPDHT2UV.js';
|
|
3
2
|
import './chunk-HCIRL37O.js';
|
|
4
3
|
import './chunk-L3525VXI.js';
|
|
5
4
|
import './chunk-2KUCQVAQ.js';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-TCSGFAWB.cjs');
|
|
3
|
+
var chunkUUWAUHUW_cjs = require('./chunk-UUWAUHUW.cjs');
|
|
5
4
|
require('./chunk-UCKN4BBY.cjs');
|
|
6
5
|
require('./chunk-V25RDUOU.cjs');
|
|
7
6
|
require('./chunk-BXYZDMTZ.cjs');
|
|
@@ -11,11 +10,15 @@ require('./chunk-USNT2KNT.cjs');
|
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
Object.defineProperty(exports, "getSettingsGroup", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkUUWAUHUW_cjs.getSettingsGroup; }
|
|
16
|
+
});
|
|
14
17
|
Object.defineProperty(exports, "initWhatsappTriggerDispatcher", {
|
|
15
18
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
19
|
+
get: function () { return chunkUUWAUHUW_cjs.initWhatsappTriggerDispatcher; }
|
|
17
20
|
});
|
|
18
21
|
Object.defineProperty(exports, "resendOrderNotification", {
|
|
19
22
|
enumerable: true,
|
|
20
|
-
get: function () { return
|
|
23
|
+
get: function () { return chunkUUWAUHUW_cjs.resendOrderNotification; }
|
|
21
24
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk77NUXO6A_cjs = require('./chunk-77NUXO6A.cjs');
|
|
4
4
|
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
5
5
|
|
|
6
6
|
// src/auth/rbac-debug-db.ts
|
|
@@ -27,7 +27,7 @@ async function loadDbPermissionsForUser(dataSource, userId) {
|
|
|
27
27
|
return {
|
|
28
28
|
groupId,
|
|
29
29
|
groupName,
|
|
30
|
-
dbEntityPerms:
|
|
30
|
+
dbEntityPerms: chunk77NUXO6A_cjs.summarizeEntityPerms(chunk77NUXO6A_cjs.permissionRowsToRecord(permRows))
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
chunkUSNT2KNT_cjs.__name(loadDbPermissionsForUser, "loadDbPermissionsForUser");
|
package/dist/theme.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunk2IAXTKQN_cjs = require('./chunk-2IAXTKQN.cjs');
|
|
3
4
|
var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
|
|
4
5
|
var React = require('react');
|
|
5
6
|
|
|
@@ -42,7 +43,7 @@ function PageRenderer({ content, theme, navbarConfig, footerConfig }) {
|
|
|
42
43
|
const resolver = buildResolver(theme);
|
|
43
44
|
const NavbarComponent = theme.layout?.navbar?.component;
|
|
44
45
|
const FooterComponent = theme.layout?.footer?.component;
|
|
45
|
-
return React__default.default.createElement(React__default.default.Fragment, null, NavbarComponent && navbarConfig ? React__default.default.createElement(NavbarComponent, navbarConfig) : null, React__default.default.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React__default.default.createElement(FooterComponent, footerConfig) : null);
|
|
46
|
+
return React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(chunk2IAXTKQN_cjs.ForceLightMode), NavbarComponent && navbarConfig ? React__default.default.createElement(NavbarComponent, navbarConfig) : null, React__default.default.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React__default.default.createElement(FooterComponent, footerConfig) : null);
|
|
46
47
|
}
|
|
47
48
|
chunkUSNT2KNT_cjs.__name(PageRenderer, "PageRenderer");
|
|
48
49
|
function getChildIds(node) {
|
|
@@ -79,6 +80,10 @@ function renderNode(json, nodeId, resolver) {
|
|
|
79
80
|
}
|
|
80
81
|
chunkUSNT2KNT_cjs.__name(renderNode, "renderNode");
|
|
81
82
|
|
|
83
|
+
Object.defineProperty(exports, "ForceLightMode", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () { return chunk2IAXTKQN_cjs.ForceLightMode; }
|
|
86
|
+
});
|
|
82
87
|
exports.PageRenderer = PageRenderer;
|
|
83
88
|
exports.buildResolver = buildResolver;
|
|
84
89
|
exports.createTheme = createTheme;
|
package/dist/theme.d.cts
CHANGED
|
@@ -104,4 +104,7 @@ declare function PageRenderer({ content, theme, navbarConfig, footerConfig }: Pa
|
|
|
104
104
|
children?: React$1.ReactNode | undefined;
|
|
105
105
|
}>;
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
/** Component wrapper that forces light mode */
|
|
108
|
+
declare function ForceLightMode(): React$1.ReactElement;
|
|
109
|
+
|
|
110
|
+
export { type CatalogGroup, type ComponentMeta, type FooterConfig, ForceLightMode, type LayoutConfig, type NavItem, type NavbarConfig, PageRenderer, type PropDefinition, type PropType, type ThemeComponent, type ThemeConfig, buildResolver, createTheme, getCatalog };
|
package/dist/theme.d.ts
CHANGED
|
@@ -104,4 +104,7 @@ declare function PageRenderer({ content, theme, navbarConfig, footerConfig }: Pa
|
|
|
104
104
|
children?: React$1.ReactNode | undefined;
|
|
105
105
|
}>;
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
/** Component wrapper that forces light mode */
|
|
108
|
+
declare function ForceLightMode(): React$1.ReactElement;
|
|
109
|
+
|
|
110
|
+
export { type CatalogGroup, type ComponentMeta, type FooterConfig, ForceLightMode, type LayoutConfig, type NavItem, type NavbarConfig, PageRenderer, type PropDefinition, type PropType, type ThemeComponent, type ThemeConfig, buildResolver, createTheme, getCatalog };
|
package/dist/theme.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ForceLightMode } from './chunk-EIZKW2PF.js';
|
|
2
|
+
export { ForceLightMode } from './chunk-EIZKW2PF.js';
|
|
1
3
|
import { __name } from './chunk-SHUYVCID.js';
|
|
2
4
|
import React from 'react';
|
|
3
5
|
|
|
@@ -36,7 +38,7 @@ function PageRenderer({ content, theme, navbarConfig, footerConfig }) {
|
|
|
36
38
|
const resolver = buildResolver(theme);
|
|
37
39
|
const NavbarComponent = theme.layout?.navbar?.component;
|
|
38
40
|
const FooterComponent = theme.layout?.footer?.component;
|
|
39
|
-
return React.createElement(React.Fragment, null, NavbarComponent && navbarConfig ? React.createElement(NavbarComponent, navbarConfig) : null, React.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React.createElement(FooterComponent, footerConfig) : null);
|
|
41
|
+
return React.createElement(React.Fragment, null, React.createElement(ForceLightMode), NavbarComponent && navbarConfig ? React.createElement(NavbarComponent, navbarConfig) : null, React.createElement("main", null, renderNode(content, "ROOT", resolver)), FooterComponent && footerConfig ? React.createElement(FooterComponent, footerConfig) : null);
|
|
40
42
|
}
|
|
41
43
|
__name(PageRenderer, "PageRenderer");
|
|
42
44
|
function getChildIds(node) {
|
package/package.json
CHANGED
package/src/admin/admin.css
CHANGED
|
@@ -72,4 +72,11 @@ body {
|
|
|
72
72
|
background-color: hsl(var(--background));
|
|
73
73
|
color: hsl(var(--foreground));
|
|
74
74
|
}
|
|
75
|
+
|
|
76
|
+
.jodit-wysiwyg ul, .jodit-workplace ul, .md-content ul, .product-detail__description ul { list-style-type: disc !important; padding-left: 1.5rem !important; margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; }
|
|
77
|
+
.jodit-wysiwyg ol, .jodit-workplace ol, .md-content ol, .product-detail__description ol { list-style-type: decimal !important; padding-left: 1.5rem !important; margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; }
|
|
78
|
+
.jodit-wysiwyg li, .jodit-workplace li, .md-content li, .product-detail__description li { display: list-item !important; margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; }
|
|
79
|
+
.jodit-wysiwyg ul ul, .md-content ul ul { list-style-type: circle !important; }
|
|
80
|
+
.jodit-wysiwyg ul ul ul, .md-content ul ul ul { list-style-type: square !important; }
|
|
75
81
|
}
|
|
82
|
+
|