@resvary/postgres 0.5.0 → 0.7.0
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/LICENSE +13 -13
- package/README.md +32 -32
- package/dist/cli-options.d.ts +3 -0
- package/dist/cli-options.d.ts.map +1 -0
- package/dist/cli-options.js +35 -0
- package/dist/cli-options.js.map +1 -0
- package/dist/cli.js +11 -37
- package/dist/cli.js.map +1 -1
- package/dist/credit.d.ts +11 -3
- package/dist/credit.d.ts.map +1 -1
- package/dist/credit.js +182 -31
- package/dist/credit.js.map +1 -1
- package/dist/health.js +1 -1
- package/dist/import-sqlite.d.ts +1 -0
- package/dist/import-sqlite.d.ts.map +1 -1
- package/dist/import-sqlite.js +108 -7
- package/dist/import-sqlite.js.map +1 -1
- package/dist/migrations.d.ts +5 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +363 -174
- package/dist/migrations.js.map +1 -1
- package/dist/receipt.js +24 -24
- package/package.json +55 -49
package/dist/migrations.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { creditUnitsToString, parseCreditUnits } from '@resvary/sdk/credits';
|
|
2
|
+
import { parseReceiptStoreValue, serializeReceiptStoreValue } from '@resvary/sdk/receipts';
|
|
1
3
|
import { createPostgresHandle, table } from './connection.js';
|
|
2
|
-
export const POSTGRES_SCHEMA_VERSION =
|
|
4
|
+
export const POSTGRES_SCHEMA_VERSION = 3;
|
|
3
5
|
const MIGRATION_LOCK_ID = 7_226_519_918;
|
|
4
6
|
export async function getPostgresMigrationStatus(config) {
|
|
5
7
|
const handle = createPostgresHandle(config);
|
|
6
8
|
try {
|
|
7
|
-
const exists = await handle.pool.query(`SELECT EXISTS (
|
|
8
|
-
SELECT 1 FROM information_schema.tables
|
|
9
|
-
WHERE table_schema = $1 AND table_name = 'resvary_schema_migrations'
|
|
9
|
+
const exists = await handle.pool.query(`SELECT EXISTS (
|
|
10
|
+
SELECT 1 FROM information_schema.tables
|
|
11
|
+
WHERE table_schema = $1 AND table_name = 'resvary_schema_migrations'
|
|
10
12
|
) AS exists`, [handle.schema]);
|
|
11
13
|
let currentVersion = 0;
|
|
12
14
|
if (exists.rows[0]?.exists) {
|
|
@@ -31,11 +33,11 @@ export async function migratePostgres(config) {
|
|
|
31
33
|
try {
|
|
32
34
|
await client.query('SELECT pg_advisory_lock($1)', [MIGRATION_LOCK_ID]);
|
|
33
35
|
await client.query(`CREATE SCHEMA IF NOT EXISTS "${handle.schema}"`);
|
|
34
|
-
await client.query(`
|
|
35
|
-
CREATE TABLE IF NOT EXISTS ${table(handle, 'resvary_schema_migrations')} (
|
|
36
|
-
version INTEGER PRIMARY KEY,
|
|
37
|
-
applied_at BIGINT NOT NULL
|
|
38
|
-
)
|
|
36
|
+
await client.query(`
|
|
37
|
+
CREATE TABLE IF NOT EXISTS ${table(handle, 'resvary_schema_migrations')} (
|
|
38
|
+
version INTEGER PRIMARY KEY,
|
|
39
|
+
applied_at BIGINT NOT NULL
|
|
40
|
+
)
|
|
39
41
|
`);
|
|
40
42
|
const current = await client.query(`SELECT version FROM ${table(handle, 'resvary_schema_migrations')} ORDER BY version ASC`);
|
|
41
43
|
const currentVersion = assertMigrationHistory(current.rows.map((row) => row.version));
|
|
@@ -43,6 +45,8 @@ export async function migratePostgres(config) {
|
|
|
43
45
|
await applyV1(client, handle.schema);
|
|
44
46
|
if (currentVersion < 2)
|
|
45
47
|
await applyV2(client, handle.schema);
|
|
48
|
+
if (currentVersion < 3)
|
|
49
|
+
await applyV3(client, handle.schema);
|
|
46
50
|
}
|
|
47
51
|
finally {
|
|
48
52
|
await client.query('SELECT pg_advisory_unlock($1)', [MIGRATION_LOCK_ID]).catch(() => undefined);
|
|
@@ -70,101 +74,101 @@ export async function applyV1(client, schema) {
|
|
|
70
74
|
const t = (name) => table({ schema }, name);
|
|
71
75
|
await client.query('BEGIN');
|
|
72
76
|
try {
|
|
73
|
-
await client.query(`
|
|
74
|
-
CREATE TABLE ${t('resvary_credit_accounts')} (
|
|
75
|
-
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, customer_id TEXT NOT NULL,
|
|
76
|
-
currency TEXT NOT NULL, posted_units NUMERIC(78,0) NOT NULL,
|
|
77
|
-
reserved_units NUMERIC(78,0) NOT NULL, updated_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
78
|
-
UNIQUE(project_id, customer_id)
|
|
79
|
-
);
|
|
80
|
-
CREATE TABLE ${t('resvary_credit_grants')} (
|
|
81
|
-
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, amount_units NUMERIC(78,0) NOT NULL,
|
|
82
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
83
|
-
);
|
|
84
|
-
CREATE INDEX resvary_credit_grants_account ON ${t('resvary_credit_grants')}(account_id);
|
|
85
|
-
CREATE TABLE ${t('resvary_meters')} (
|
|
86
|
-
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, meter_key TEXT NOT NULL, payload JSONB NOT NULL,
|
|
87
|
-
UNIQUE(project_id, meter_key)
|
|
88
|
-
);
|
|
89
|
-
CREATE TABLE ${t('resvary_price_versions')} (
|
|
90
|
-
id TEXT PRIMARY KEY, meter_id TEXT NOT NULL, version INTEGER NOT NULL,
|
|
91
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL, UNIQUE(meter_id, version)
|
|
92
|
-
);
|
|
93
|
-
CREATE TABLE ${t('resvary_credit_reservations')} (
|
|
94
|
-
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, project_id TEXT NOT NULL,
|
|
95
|
-
customer_id TEXT NOT NULL, status TEXT NOT NULL,
|
|
96
|
-
reserved_units NUMERIC(78,0) NOT NULL, expires_at BIGINT NOT NULL,
|
|
97
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
98
|
-
);
|
|
99
|
-
CREATE INDEX resvary_credit_reservations_open
|
|
100
|
-
ON ${t('resvary_credit_reservations')}(project_id, customer_id, status, expires_at);
|
|
101
|
-
CREATE TABLE ${t('resvary_usage_events')} (
|
|
102
|
-
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, received_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
103
|
-
);
|
|
104
|
-
CREATE TABLE ${t('resvary_usage_receipts')} (
|
|
105
|
-
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, reservation_id TEXT NOT NULL UNIQUE,
|
|
106
|
-
usage_event_id TEXT NOT NULL UNIQUE, charged_units NUMERIC(78,0) NOT NULL,
|
|
107
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
108
|
-
);
|
|
109
|
-
CREATE INDEX resvary_usage_receipts_account
|
|
110
|
-
ON ${t('resvary_usage_receipts')}(account_id, created_at);
|
|
111
|
-
CREATE TABLE ${t('resvary_ledger_entries')} (
|
|
112
|
-
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, delta_units NUMERIC(78,0) NOT NULL,
|
|
113
|
-
balance_after_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
114
|
-
);
|
|
115
|
-
CREATE INDEX resvary_ledger_entries_account
|
|
116
|
-
ON ${t('resvary_ledger_entries')}(account_id, created_at);
|
|
117
|
-
CREATE TABLE ${t('resvary_funding_intents')} (
|
|
118
|
-
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, customer_id TEXT NOT NULL,
|
|
119
|
-
status TEXT NOT NULL, requested_units NUMERIC(78,0) NOT NULL,
|
|
120
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
121
|
-
);
|
|
122
|
-
CREATE TABLE ${t('resvary_funding_transactions')} (
|
|
123
|
-
id TEXT PRIMARY KEY, funding_intent_id TEXT NOT NULL, rail TEXT NOT NULL,
|
|
124
|
-
network TEXT NOT NULL, external_payment_id_norm TEXT NOT NULL, tx_hash_norm TEXT,
|
|
125
|
-
amount_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
126
|
-
UNIQUE(rail, network, external_payment_id_norm)
|
|
127
|
-
);
|
|
128
|
-
CREATE UNIQUE INDEX resvary_funding_transactions_tx_hash
|
|
129
|
-
ON ${t('resvary_funding_transactions')}(network, tx_hash_norm)
|
|
130
|
-
WHERE tx_hash_norm IS NOT NULL;
|
|
131
|
-
CREATE TABLE ${t('resvary_idempotency_keys')} (
|
|
132
|
-
scope TEXT NOT NULL, key TEXT NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
133
|
-
PRIMARY KEY(scope, key)
|
|
134
|
-
);
|
|
135
|
-
CREATE TABLE ${t('resvary_outbox_events')} (
|
|
136
|
-
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, type TEXT NOT NULL, status TEXT NOT NULL,
|
|
137
|
-
created_at BIGINT NOT NULL, attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
138
|
-
next_attempt_at BIGINT NOT NULL, lease_owner TEXT, lease_expires_at BIGINT,
|
|
139
|
-
last_attempt_at BIGINT, last_error TEXT, delivered_at BIGINT, payload JSONB NOT NULL
|
|
140
|
-
);
|
|
141
|
-
CREATE INDEX resvary_outbox_events_due
|
|
142
|
-
ON ${t('resvary_outbox_events')}(project_id, status, next_attempt_at, created_at);
|
|
143
|
-
|
|
144
|
-
CREATE TABLE ${t('resvary_invoices')} (
|
|
145
|
-
id TEXT PRIMARY KEY, status TEXT NOT NULL, customer_id TEXT, amount_units NUMERIC(78,0) NOT NULL,
|
|
146
|
-
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
147
|
-
);
|
|
148
|
-
CREATE INDEX resvary_invoices_status ON ${t('resvary_invoices')}(status);
|
|
149
|
-
CREATE INDEX resvary_invoices_customer_id ON ${t('resvary_invoices')}(customer_id);
|
|
150
|
-
CREATE TABLE ${t('resvary_receipts')} (
|
|
151
|
-
id TEXT PRIMARY KEY, invoice_id TEXT NOT NULL, tx_hash_norm TEXT, status TEXT NOT NULL,
|
|
152
|
-
amount_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
153
|
-
);
|
|
154
|
-
CREATE UNIQUE INDEX resvary_receipts_invoice_tx_hash
|
|
155
|
-
ON ${t('resvary_receipts')}(invoice_id, tx_hash_norm) WHERE tx_hash_norm IS NOT NULL;
|
|
156
|
-
CREATE TABLE ${t('arc_webhook_events')} (
|
|
157
|
-
id TEXT PRIMARY KEY, type TEXT NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
158
|
-
);
|
|
159
|
-
CREATE TABLE ${t('arc_webhook_deliveries')} (
|
|
160
|
-
id TEXT PRIMARY KEY, event_id TEXT NOT NULL, event_type TEXT NOT NULL, attempt INTEGER NOT NULL,
|
|
161
|
-
status TEXT NOT NULL, received_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
162
|
-
);
|
|
163
|
-
CREATE INDEX arc_webhook_deliveries_event_id ON ${t('arc_webhook_deliveries')}(event_id);
|
|
164
|
-
CREATE TABLE ${t('arc_watcher_cursors')} (
|
|
165
|
-
key TEXT PRIMARY KEY, network TEXT NOT NULL, invoice_id TEXT, memo_id_norm TEXT,
|
|
166
|
-
next_from_block NUMERIC(78,0) NOT NULL, updated_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
167
|
-
);
|
|
77
|
+
await client.query(`
|
|
78
|
+
CREATE TABLE ${t('resvary_credit_accounts')} (
|
|
79
|
+
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, customer_id TEXT NOT NULL,
|
|
80
|
+
currency TEXT NOT NULL, posted_units NUMERIC(78,0) NOT NULL,
|
|
81
|
+
reserved_units NUMERIC(78,0) NOT NULL, updated_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
82
|
+
UNIQUE(project_id, customer_id)
|
|
83
|
+
);
|
|
84
|
+
CREATE TABLE ${t('resvary_credit_grants')} (
|
|
85
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, amount_units NUMERIC(78,0) NOT NULL,
|
|
86
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
87
|
+
);
|
|
88
|
+
CREATE INDEX resvary_credit_grants_account ON ${t('resvary_credit_grants')}(account_id);
|
|
89
|
+
CREATE TABLE ${t('resvary_meters')} (
|
|
90
|
+
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, meter_key TEXT NOT NULL, payload JSONB NOT NULL,
|
|
91
|
+
UNIQUE(project_id, meter_key)
|
|
92
|
+
);
|
|
93
|
+
CREATE TABLE ${t('resvary_price_versions')} (
|
|
94
|
+
id TEXT PRIMARY KEY, meter_id TEXT NOT NULL, version INTEGER NOT NULL,
|
|
95
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL, UNIQUE(meter_id, version)
|
|
96
|
+
);
|
|
97
|
+
CREATE TABLE ${t('resvary_credit_reservations')} (
|
|
98
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, project_id TEXT NOT NULL,
|
|
99
|
+
customer_id TEXT NOT NULL, status TEXT NOT NULL,
|
|
100
|
+
reserved_units NUMERIC(78,0) NOT NULL, expires_at BIGINT NOT NULL,
|
|
101
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
102
|
+
);
|
|
103
|
+
CREATE INDEX resvary_credit_reservations_open
|
|
104
|
+
ON ${t('resvary_credit_reservations')}(project_id, customer_id, status, expires_at);
|
|
105
|
+
CREATE TABLE ${t('resvary_usage_events')} (
|
|
106
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, received_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
107
|
+
);
|
|
108
|
+
CREATE TABLE ${t('resvary_usage_receipts')} (
|
|
109
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, reservation_id TEXT NOT NULL UNIQUE,
|
|
110
|
+
usage_event_id TEXT NOT NULL UNIQUE, charged_units NUMERIC(78,0) NOT NULL,
|
|
111
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
112
|
+
);
|
|
113
|
+
CREATE INDEX resvary_usage_receipts_account
|
|
114
|
+
ON ${t('resvary_usage_receipts')}(account_id, created_at);
|
|
115
|
+
CREATE TABLE ${t('resvary_ledger_entries')} (
|
|
116
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, delta_units NUMERIC(78,0) NOT NULL,
|
|
117
|
+
balance_after_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
118
|
+
);
|
|
119
|
+
CREATE INDEX resvary_ledger_entries_account
|
|
120
|
+
ON ${t('resvary_ledger_entries')}(account_id, created_at);
|
|
121
|
+
CREATE TABLE ${t('resvary_funding_intents')} (
|
|
122
|
+
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, customer_id TEXT NOT NULL,
|
|
123
|
+
status TEXT NOT NULL, requested_units NUMERIC(78,0) NOT NULL,
|
|
124
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
125
|
+
);
|
|
126
|
+
CREATE TABLE ${t('resvary_funding_transactions')} (
|
|
127
|
+
id TEXT PRIMARY KEY, funding_intent_id TEXT NOT NULL, rail TEXT NOT NULL,
|
|
128
|
+
network TEXT NOT NULL, external_payment_id_norm TEXT NOT NULL, tx_hash_norm TEXT,
|
|
129
|
+
amount_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
130
|
+
UNIQUE(rail, network, external_payment_id_norm)
|
|
131
|
+
);
|
|
132
|
+
CREATE UNIQUE INDEX resvary_funding_transactions_tx_hash
|
|
133
|
+
ON ${t('resvary_funding_transactions')}(network, tx_hash_norm)
|
|
134
|
+
WHERE tx_hash_norm IS NOT NULL;
|
|
135
|
+
CREATE TABLE ${t('resvary_idempotency_keys')} (
|
|
136
|
+
scope TEXT NOT NULL, key TEXT NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
137
|
+
PRIMARY KEY(scope, key)
|
|
138
|
+
);
|
|
139
|
+
CREATE TABLE ${t('resvary_outbox_events')} (
|
|
140
|
+
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, type TEXT NOT NULL, status TEXT NOT NULL,
|
|
141
|
+
created_at BIGINT NOT NULL, attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
142
|
+
next_attempt_at BIGINT NOT NULL, lease_owner TEXT, lease_expires_at BIGINT,
|
|
143
|
+
last_attempt_at BIGINT, last_error TEXT, delivered_at BIGINT, payload JSONB NOT NULL
|
|
144
|
+
);
|
|
145
|
+
CREATE INDEX resvary_outbox_events_due
|
|
146
|
+
ON ${t('resvary_outbox_events')}(project_id, status, next_attempt_at, created_at);
|
|
147
|
+
|
|
148
|
+
CREATE TABLE ${t('resvary_invoices')} (
|
|
149
|
+
id TEXT PRIMARY KEY, status TEXT NOT NULL, customer_id TEXT, amount_units NUMERIC(78,0) NOT NULL,
|
|
150
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
151
|
+
);
|
|
152
|
+
CREATE INDEX resvary_invoices_status ON ${t('resvary_invoices')}(status);
|
|
153
|
+
CREATE INDEX resvary_invoices_customer_id ON ${t('resvary_invoices')}(customer_id);
|
|
154
|
+
CREATE TABLE ${t('resvary_receipts')} (
|
|
155
|
+
id TEXT PRIMARY KEY, invoice_id TEXT NOT NULL, tx_hash_norm TEXT, status TEXT NOT NULL,
|
|
156
|
+
amount_units NUMERIC(78,0) NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
157
|
+
);
|
|
158
|
+
CREATE UNIQUE INDEX resvary_receipts_invoice_tx_hash
|
|
159
|
+
ON ${t('resvary_receipts')}(invoice_id, tx_hash_norm) WHERE tx_hash_norm IS NOT NULL;
|
|
160
|
+
CREATE TABLE ${t('arc_webhook_events')} (
|
|
161
|
+
id TEXT PRIMARY KEY, type TEXT NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
162
|
+
);
|
|
163
|
+
CREATE TABLE ${t('arc_webhook_deliveries')} (
|
|
164
|
+
id TEXT PRIMARY KEY, event_id TEXT NOT NULL, event_type TEXT NOT NULL, attempt INTEGER NOT NULL,
|
|
165
|
+
status TEXT NOT NULL, received_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
166
|
+
);
|
|
167
|
+
CREATE INDEX arc_webhook_deliveries_event_id ON ${t('arc_webhook_deliveries')}(event_id);
|
|
168
|
+
CREATE TABLE ${t('arc_watcher_cursors')} (
|
|
169
|
+
key TEXT PRIMARY KEY, network TEXT NOT NULL, invoice_id TEXT, memo_id_norm TEXT,
|
|
170
|
+
next_from_block NUMERIC(78,0) NOT NULL, updated_at BIGINT NOT NULL, payload JSONB NOT NULL
|
|
171
|
+
);
|
|
168
172
|
`);
|
|
169
173
|
await client.query(`INSERT INTO ${t('resvary_schema_migrations')}(version, applied_at) VALUES (1, $1)`, [Date.now()]);
|
|
170
174
|
await client.query('COMMIT');
|
|
@@ -174,83 +178,84 @@ export async function applyV1(client, schema) {
|
|
|
174
178
|
throw error;
|
|
175
179
|
}
|
|
176
180
|
}
|
|
177
|
-
|
|
181
|
+
/** @internal Exported for sequential-migration verification. */
|
|
182
|
+
export async function applyV2(client, schema) {
|
|
178
183
|
const t = (name) => table({ schema }, name);
|
|
179
184
|
await client.query('BEGIN');
|
|
180
185
|
try {
|
|
181
|
-
const duplicateReceipt = await client.query(`SELECT tx_hash_norm, COUNT(*)::text AS count
|
|
182
|
-
FROM ${t('resvary_receipts')}
|
|
183
|
-
WHERE tx_hash_norm IS NOT NULL
|
|
184
|
-
GROUP BY tx_hash_norm
|
|
185
|
-
HAVING COUNT(*) > 1
|
|
186
|
+
const duplicateReceipt = await client.query(`SELECT tx_hash_norm, COUNT(*)::text AS count
|
|
187
|
+
FROM ${t('resvary_receipts')}
|
|
188
|
+
WHERE tx_hash_norm IS NOT NULL
|
|
189
|
+
GROUP BY tx_hash_norm
|
|
190
|
+
HAVING COUNT(*) > 1
|
|
186
191
|
LIMIT 1`);
|
|
187
192
|
if (duplicateReceipt.rows[0]) {
|
|
188
193
|
throw new Error(`Cannot enforce receipt transaction uniqueness: ${duplicateReceipt.rows[0].count} receipts use ${duplicateReceipt.rows[0].tx_hash_norm}`);
|
|
189
194
|
}
|
|
190
|
-
await client.query(`
|
|
191
|
-
DROP INDEX IF EXISTS "${schema}".resvary_receipts_invoice_tx_hash;
|
|
192
|
-
CREATE UNIQUE INDEX resvary_receipts_tx_hash
|
|
193
|
-
ON ${t('resvary_receipts')}(tx_hash_norm)
|
|
194
|
-
WHERE tx_hash_norm IS NOT NULL;
|
|
195
|
-
|
|
196
|
-
ALTER TABLE ${t('resvary_credit_accounts')}
|
|
197
|
-
ADD CONSTRAINT resvary_credit_accounts_nonnegative
|
|
198
|
-
CHECK (posted_units >= 0 AND reserved_units >= 0 AND reserved_units <= posted_units);
|
|
199
|
-
ALTER TABLE ${t('resvary_credit_grants')}
|
|
200
|
-
ADD CONSTRAINT resvary_credit_grants_amount_positive CHECK (amount_units > 0),
|
|
201
|
-
ADD CONSTRAINT resvary_credit_grants_account_fk FOREIGN KEY (account_id)
|
|
202
|
-
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
203
|
-
ALTER TABLE ${t('resvary_price_versions')}
|
|
204
|
-
ADD CONSTRAINT resvary_price_versions_version_positive CHECK (version > 0),
|
|
205
|
-
ADD CONSTRAINT resvary_price_versions_meter_fk FOREIGN KEY (meter_id)
|
|
206
|
-
REFERENCES ${t('resvary_meters')}(id);
|
|
207
|
-
ALTER TABLE ${t('resvary_credit_reservations')}
|
|
208
|
-
ADD CONSTRAINT resvary_credit_reservations_status
|
|
209
|
-
CHECK (status IN ('open', 'committed', 'released', 'expired')),
|
|
210
|
-
ADD CONSTRAINT resvary_credit_reservations_units_nonnegative CHECK (reserved_units >= 0),
|
|
211
|
-
ADD CONSTRAINT resvary_credit_reservations_account_fk FOREIGN KEY (account_id)
|
|
212
|
-
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
213
|
-
ALTER TABLE ${t('resvary_usage_events')}
|
|
214
|
-
ADD CONSTRAINT resvary_usage_events_account_fk FOREIGN KEY (account_id)
|
|
215
|
-
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
216
|
-
ALTER TABLE ${t('resvary_usage_receipts')}
|
|
217
|
-
ADD CONSTRAINT resvary_usage_receipts_units_nonnegative CHECK (charged_units >= 0),
|
|
218
|
-
ADD CONSTRAINT resvary_usage_receipts_account_fk FOREIGN KEY (account_id)
|
|
219
|
-
REFERENCES ${t('resvary_credit_accounts')}(id),
|
|
220
|
-
ADD CONSTRAINT resvary_usage_receipts_reservation_fk FOREIGN KEY (reservation_id)
|
|
221
|
-
REFERENCES ${t('resvary_credit_reservations')}(id),
|
|
222
|
-
ADD CONSTRAINT resvary_usage_receipts_usage_event_fk FOREIGN KEY (usage_event_id)
|
|
223
|
-
REFERENCES ${t('resvary_usage_events')}(id);
|
|
224
|
-
ALTER TABLE ${t('resvary_ledger_entries')}
|
|
225
|
-
ADD CONSTRAINT resvary_ledger_entries_balance_nonnegative CHECK (balance_after_units >= 0),
|
|
226
|
-
ADD CONSTRAINT resvary_ledger_entries_account_fk FOREIGN KEY (account_id)
|
|
227
|
-
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
228
|
-
ALTER TABLE ${t('resvary_funding_intents')}
|
|
229
|
-
ADD CONSTRAINT resvary_funding_intents_status
|
|
230
|
-
CHECK (status IN ('pending', 'confirmed', 'failed')),
|
|
231
|
-
ADD CONSTRAINT resvary_funding_intents_units_positive CHECK (requested_units > 0);
|
|
232
|
-
ALTER TABLE ${t('resvary_funding_transactions')}
|
|
233
|
-
ADD CONSTRAINT resvary_funding_transactions_units_positive CHECK (amount_units > 0),
|
|
234
|
-
ADD CONSTRAINT resvary_funding_transactions_intent_fk FOREIGN KEY (funding_intent_id)
|
|
235
|
-
REFERENCES ${t('resvary_funding_intents')}(id);
|
|
236
|
-
ALTER TABLE ${t('resvary_outbox_events')}
|
|
237
|
-
ADD CONSTRAINT resvary_outbox_events_status
|
|
238
|
-
CHECK (status IN ('pending', 'processing', 'delivered', 'dead_letter')),
|
|
239
|
-
ADD CONSTRAINT resvary_outbox_events_attempt_nonnegative CHECK (attempt_count >= 0);
|
|
240
|
-
ALTER TABLE ${t('resvary_invoices')}
|
|
241
|
-
ADD CONSTRAINT resvary_invoices_status
|
|
242
|
-
CHECK (status IN ('open', 'observed', 'paid', 'expired', 'refunded', 'void')),
|
|
243
|
-
ADD CONSTRAINT resvary_invoices_amount_positive CHECK (amount_units > 0);
|
|
244
|
-
ALTER TABLE ${t('resvary_receipts')}
|
|
245
|
-
ADD CONSTRAINT resvary_receipts_status CHECK (status IN ('paid', 'refunded')),
|
|
246
|
-
ADD CONSTRAINT resvary_receipts_amount_positive CHECK (amount_units > 0),
|
|
247
|
-
ADD CONSTRAINT resvary_receipts_invoice_fk FOREIGN KEY (invoice_id)
|
|
248
|
-
REFERENCES ${t('resvary_invoices')}(id);
|
|
249
|
-
ALTER TABLE ${t('arc_webhook_deliveries')}
|
|
250
|
-
ADD CONSTRAINT arc_webhook_deliveries_status CHECK (status IN ('verified', 'failed')),
|
|
251
|
-
ADD CONSTRAINT arc_webhook_deliveries_attempt_positive CHECK (attempt > 0);
|
|
252
|
-
ALTER TABLE ${t('arc_watcher_cursors')}
|
|
253
|
-
ADD CONSTRAINT arc_watcher_cursors_block_nonnegative CHECK (next_from_block >= 0);
|
|
195
|
+
await client.query(`
|
|
196
|
+
DROP INDEX IF EXISTS "${schema}".resvary_receipts_invoice_tx_hash;
|
|
197
|
+
CREATE UNIQUE INDEX resvary_receipts_tx_hash
|
|
198
|
+
ON ${t('resvary_receipts')}(tx_hash_norm)
|
|
199
|
+
WHERE tx_hash_norm IS NOT NULL;
|
|
200
|
+
|
|
201
|
+
ALTER TABLE ${t('resvary_credit_accounts')}
|
|
202
|
+
ADD CONSTRAINT resvary_credit_accounts_nonnegative
|
|
203
|
+
CHECK (posted_units >= 0 AND reserved_units >= 0 AND reserved_units <= posted_units);
|
|
204
|
+
ALTER TABLE ${t('resvary_credit_grants')}
|
|
205
|
+
ADD CONSTRAINT resvary_credit_grants_amount_positive CHECK (amount_units > 0),
|
|
206
|
+
ADD CONSTRAINT resvary_credit_grants_account_fk FOREIGN KEY (account_id)
|
|
207
|
+
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
208
|
+
ALTER TABLE ${t('resvary_price_versions')}
|
|
209
|
+
ADD CONSTRAINT resvary_price_versions_version_positive CHECK (version > 0),
|
|
210
|
+
ADD CONSTRAINT resvary_price_versions_meter_fk FOREIGN KEY (meter_id)
|
|
211
|
+
REFERENCES ${t('resvary_meters')}(id);
|
|
212
|
+
ALTER TABLE ${t('resvary_credit_reservations')}
|
|
213
|
+
ADD CONSTRAINT resvary_credit_reservations_status
|
|
214
|
+
CHECK (status IN ('open', 'committed', 'released', 'expired')),
|
|
215
|
+
ADD CONSTRAINT resvary_credit_reservations_units_nonnegative CHECK (reserved_units >= 0),
|
|
216
|
+
ADD CONSTRAINT resvary_credit_reservations_account_fk FOREIGN KEY (account_id)
|
|
217
|
+
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
218
|
+
ALTER TABLE ${t('resvary_usage_events')}
|
|
219
|
+
ADD CONSTRAINT resvary_usage_events_account_fk FOREIGN KEY (account_id)
|
|
220
|
+
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
221
|
+
ALTER TABLE ${t('resvary_usage_receipts')}
|
|
222
|
+
ADD CONSTRAINT resvary_usage_receipts_units_nonnegative CHECK (charged_units >= 0),
|
|
223
|
+
ADD CONSTRAINT resvary_usage_receipts_account_fk FOREIGN KEY (account_id)
|
|
224
|
+
REFERENCES ${t('resvary_credit_accounts')}(id),
|
|
225
|
+
ADD CONSTRAINT resvary_usage_receipts_reservation_fk FOREIGN KEY (reservation_id)
|
|
226
|
+
REFERENCES ${t('resvary_credit_reservations')}(id),
|
|
227
|
+
ADD CONSTRAINT resvary_usage_receipts_usage_event_fk FOREIGN KEY (usage_event_id)
|
|
228
|
+
REFERENCES ${t('resvary_usage_events')}(id);
|
|
229
|
+
ALTER TABLE ${t('resvary_ledger_entries')}
|
|
230
|
+
ADD CONSTRAINT resvary_ledger_entries_balance_nonnegative CHECK (balance_after_units >= 0),
|
|
231
|
+
ADD CONSTRAINT resvary_ledger_entries_account_fk FOREIGN KEY (account_id)
|
|
232
|
+
REFERENCES ${t('resvary_credit_accounts')}(id);
|
|
233
|
+
ALTER TABLE ${t('resvary_funding_intents')}
|
|
234
|
+
ADD CONSTRAINT resvary_funding_intents_status
|
|
235
|
+
CHECK (status IN ('pending', 'confirmed', 'failed')),
|
|
236
|
+
ADD CONSTRAINT resvary_funding_intents_units_positive CHECK (requested_units > 0);
|
|
237
|
+
ALTER TABLE ${t('resvary_funding_transactions')}
|
|
238
|
+
ADD CONSTRAINT resvary_funding_transactions_units_positive CHECK (amount_units > 0),
|
|
239
|
+
ADD CONSTRAINT resvary_funding_transactions_intent_fk FOREIGN KEY (funding_intent_id)
|
|
240
|
+
REFERENCES ${t('resvary_funding_intents')}(id);
|
|
241
|
+
ALTER TABLE ${t('resvary_outbox_events')}
|
|
242
|
+
ADD CONSTRAINT resvary_outbox_events_status
|
|
243
|
+
CHECK (status IN ('pending', 'processing', 'delivered', 'dead_letter')),
|
|
244
|
+
ADD CONSTRAINT resvary_outbox_events_attempt_nonnegative CHECK (attempt_count >= 0);
|
|
245
|
+
ALTER TABLE ${t('resvary_invoices')}
|
|
246
|
+
ADD CONSTRAINT resvary_invoices_status
|
|
247
|
+
CHECK (status IN ('open', 'observed', 'paid', 'expired', 'refunded', 'void')),
|
|
248
|
+
ADD CONSTRAINT resvary_invoices_amount_positive CHECK (amount_units > 0);
|
|
249
|
+
ALTER TABLE ${t('resvary_receipts')}
|
|
250
|
+
ADD CONSTRAINT resvary_receipts_status CHECK (status IN ('paid', 'refunded')),
|
|
251
|
+
ADD CONSTRAINT resvary_receipts_amount_positive CHECK (amount_units > 0),
|
|
252
|
+
ADD CONSTRAINT resvary_receipts_invoice_fk FOREIGN KEY (invoice_id)
|
|
253
|
+
REFERENCES ${t('resvary_invoices')}(id);
|
|
254
|
+
ALTER TABLE ${t('arc_webhook_deliveries')}
|
|
255
|
+
ADD CONSTRAINT arc_webhook_deliveries_status CHECK (status IN ('verified', 'failed')),
|
|
256
|
+
ADD CONSTRAINT arc_webhook_deliveries_attempt_positive CHECK (attempt > 0);
|
|
257
|
+
ALTER TABLE ${t('arc_watcher_cursors')}
|
|
258
|
+
ADD CONSTRAINT arc_watcher_cursors_block_nonnegative CHECK (next_from_block >= 0);
|
|
254
259
|
`);
|
|
255
260
|
await client.query(`INSERT INTO ${t('resvary_schema_migrations')}(version, applied_at) VALUES (2, $1)`, [Date.now()]);
|
|
256
261
|
await client.query('COMMIT');
|
|
@@ -260,4 +265,188 @@ async function applyV2(client, schema) {
|
|
|
260
265
|
throw error;
|
|
261
266
|
}
|
|
262
267
|
}
|
|
268
|
+
/** @internal Exported for sequential-migration verification. */
|
|
269
|
+
export async function applyV3(client, schema) {
|
|
270
|
+
const t = (name) => table({ schema }, name);
|
|
271
|
+
await client.query('BEGIN');
|
|
272
|
+
try {
|
|
273
|
+
await client.query(`
|
|
274
|
+
CREATE TABLE ${t('resvary_grant_policies')} (
|
|
275
|
+
id TEXT PRIMARY KEY, project_id TEXT NOT NULL, policy_key TEXT NOT NULL,
|
|
276
|
+
version INTEGER NOT NULL CHECK (version > 0), created_at BIGINT NOT NULL,
|
|
277
|
+
payload JSONB NOT NULL, UNIQUE(project_id, policy_key, version)
|
|
278
|
+
);
|
|
279
|
+
CREATE INDEX resvary_grant_policies_project
|
|
280
|
+
ON ${t('resvary_grant_policies')}(project_id, created_at);
|
|
281
|
+
|
|
282
|
+
CREATE TABLE ${t('resvary_credit_lots')} (
|
|
283
|
+
id TEXT PRIMARY KEY, account_id TEXT NOT NULL, project_id TEXT NOT NULL,
|
|
284
|
+
customer_id TEXT NOT NULL, kind TEXT NOT NULL,
|
|
285
|
+
policy_id TEXT, original_units NUMERIC(78,0) NOT NULL,
|
|
286
|
+
available_units NUMERIC(78,0) NOT NULL, reserved_units NUMERIC(78,0) NOT NULL,
|
|
287
|
+
consumed_units NUMERIC(78,0) NOT NULL, expired_units NUMERIC(78,0) NOT NULL,
|
|
288
|
+
expires_at BIGINT, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
289
|
+
CONSTRAINT resvary_credit_lots_kind
|
|
290
|
+
CHECK (kind IN ('legacy', 'general', 'allowance', 'promotion')),
|
|
291
|
+
CONSTRAINT resvary_credit_lots_balances_nonnegative
|
|
292
|
+
CHECK (original_units > 0 AND available_units >= 0 AND reserved_units >= 0
|
|
293
|
+
AND consumed_units >= 0 AND expired_units >= 0),
|
|
294
|
+
CONSTRAINT resvary_credit_lots_balance_total
|
|
295
|
+
CHECK (available_units + reserved_units + consumed_units + expired_units = original_units),
|
|
296
|
+
CONSTRAINT resvary_credit_lots_account_fk FOREIGN KEY (account_id)
|
|
297
|
+
REFERENCES ${t('resvary_credit_accounts')}(id),
|
|
298
|
+
CONSTRAINT resvary_credit_lots_policy_fk FOREIGN KEY (policy_id)
|
|
299
|
+
REFERENCES ${t('resvary_grant_policies')}(id)
|
|
300
|
+
);
|
|
301
|
+
CREATE INDEX resvary_credit_lots_account
|
|
302
|
+
ON ${t('resvary_credit_lots')}(account_id, created_at);
|
|
303
|
+
CREATE INDEX resvary_credit_lots_expiry
|
|
304
|
+
ON ${t('resvary_credit_lots')}(project_id, expires_at)
|
|
305
|
+
WHERE expires_at IS NOT NULL;
|
|
306
|
+
|
|
307
|
+
CREATE TABLE ${t('resvary_credit_lot_allocations')} (
|
|
308
|
+
id TEXT PRIMARY KEY, reservation_id TEXT NOT NULL, lot_id TEXT NOT NULL,
|
|
309
|
+
account_id TEXT NOT NULL, allocated_units NUMERIC(78,0) NOT NULL,
|
|
310
|
+
reserved_units NUMERIC(78,0) NOT NULL, consumed_units NUMERIC(78,0) NOT NULL,
|
|
311
|
+
released_units NUMERIC(78,0) NOT NULL, expired_units NUMERIC(78,0) NOT NULL,
|
|
312
|
+
created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
313
|
+
CONSTRAINT resvary_credit_lot_allocations_balances_nonnegative
|
|
314
|
+
CHECK (allocated_units > 0 AND reserved_units >= 0 AND consumed_units >= 0
|
|
315
|
+
AND released_units >= 0 AND expired_units >= 0),
|
|
316
|
+
CONSTRAINT resvary_credit_lot_allocations_balance_total
|
|
317
|
+
CHECK (reserved_units + consumed_units + released_units + expired_units = allocated_units),
|
|
318
|
+
CONSTRAINT resvary_credit_lot_allocations_reservation_fk FOREIGN KEY (reservation_id)
|
|
319
|
+
REFERENCES ${t('resvary_credit_reservations')}(id),
|
|
320
|
+
CONSTRAINT resvary_credit_lot_allocations_lot_fk FOREIGN KEY (lot_id)
|
|
321
|
+
REFERENCES ${t('resvary_credit_lots')}(id),
|
|
322
|
+
CONSTRAINT resvary_credit_lot_allocations_account_fk FOREIGN KEY (account_id)
|
|
323
|
+
REFERENCES ${t('resvary_credit_accounts')}(id),
|
|
324
|
+
UNIQUE(reservation_id, lot_id)
|
|
325
|
+
);
|
|
326
|
+
CREATE INDEX resvary_credit_lot_allocations_reservation
|
|
327
|
+
ON ${t('resvary_credit_lot_allocations')}(reservation_id, created_at);
|
|
328
|
+
|
|
329
|
+
CREATE TABLE ${t('resvary_grant_policy_applications')} (
|
|
330
|
+
id TEXT PRIMARY KEY, policy_id TEXT NOT NULL, account_id TEXT NOT NULL,
|
|
331
|
+
project_id TEXT NOT NULL, customer_id TEXT NOT NULL, policy_type TEXT NOT NULL,
|
|
332
|
+
period_key TEXT NOT NULL, created_at BIGINT NOT NULL, payload JSONB NOT NULL,
|
|
333
|
+
CONSTRAINT resvary_grant_policy_applications_type
|
|
334
|
+
CHECK (policy_type IN ('allowance', 'promotion')),
|
|
335
|
+
CONSTRAINT resvary_grant_policy_applications_policy_fk FOREIGN KEY (policy_id)
|
|
336
|
+
REFERENCES ${t('resvary_grant_policies')}(id),
|
|
337
|
+
CONSTRAINT resvary_grant_policy_applications_account_fk FOREIGN KEY (account_id)
|
|
338
|
+
REFERENCES ${t('resvary_credit_accounts')}(id),
|
|
339
|
+
UNIQUE(policy_id, account_id, period_key)
|
|
340
|
+
);
|
|
341
|
+
CREATE INDEX resvary_grant_policy_applications_customer
|
|
342
|
+
ON ${t('resvary_grant_policy_applications')}(project_id, customer_id, created_at);
|
|
343
|
+
`);
|
|
344
|
+
const accounts = await client.query(`SELECT payload::text AS payload FROM ${t('resvary_credit_accounts')} ORDER BY id`);
|
|
345
|
+
for (const accountRow of accounts.rows) {
|
|
346
|
+
const account = parseReceiptStoreValue(accountRow.payload);
|
|
347
|
+
const posted = parseCreditUnits(account.postedUnits);
|
|
348
|
+
const reserved = parseCreditUnits(account.reservedUnits);
|
|
349
|
+
if (reserved > posted) {
|
|
350
|
+
throw new Error(`Cannot migrate Postgres credit lots: account invariant failed for ${account.id}`);
|
|
351
|
+
}
|
|
352
|
+
const reservations = await client.query(`SELECT payload::text AS payload FROM ${t('resvary_credit_reservations')}
|
|
353
|
+
WHERE account_id = $1 AND status = 'open' ORDER BY created_at, id`, [account.id]);
|
|
354
|
+
const open = reservations.rows.map((item) => parseReceiptStoreValue(item.payload));
|
|
355
|
+
const reservationTotal = open.reduce((total, reservation) => total + parseCreditUnits(reservation.reservedUnits), 0n);
|
|
356
|
+
if (reservationTotal !== reserved) {
|
|
357
|
+
throw new Error(`Cannot migrate Postgres credit lots: open reservations do not match account ${account.id}`);
|
|
358
|
+
}
|
|
359
|
+
if (posted === 0n)
|
|
360
|
+
continue;
|
|
361
|
+
const available = posted - reserved;
|
|
362
|
+
const lot = {
|
|
363
|
+
id: `lot_legacy_${account.id}`,
|
|
364
|
+
accountId: account.id,
|
|
365
|
+
projectId: account.projectId,
|
|
366
|
+
customerId: account.customerId,
|
|
367
|
+
kind: 'legacy',
|
|
368
|
+
originalAmount: creditUnitsToString(posted),
|
|
369
|
+
originalUnits: posted.toString(),
|
|
370
|
+
availableAmount: creditUnitsToString(available),
|
|
371
|
+
availableUnits: available.toString(),
|
|
372
|
+
reservedAmount: creditUnitsToString(reserved),
|
|
373
|
+
reservedUnits: reserved.toString(),
|
|
374
|
+
consumedAmount: '0',
|
|
375
|
+
consumedUnits: '0',
|
|
376
|
+
expiredAmount: '0',
|
|
377
|
+
expiredUnits: '0',
|
|
378
|
+
createdAt: account.createdAt,
|
|
379
|
+
updatedAt: account.updatedAt,
|
|
380
|
+
metadata: { migratedFrom: 'postgres-v2' },
|
|
381
|
+
};
|
|
382
|
+
await client.query(`INSERT INTO ${t('resvary_credit_lots')} (
|
|
383
|
+
id, account_id, project_id, customer_id, kind, policy_id,
|
|
384
|
+
original_units, available_units, reserved_units, consumed_units, expired_units,
|
|
385
|
+
expires_at, created_at, payload
|
|
386
|
+
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14::jsonb)`, [
|
|
387
|
+
lot.id,
|
|
388
|
+
lot.accountId,
|
|
389
|
+
lot.projectId,
|
|
390
|
+
lot.customerId,
|
|
391
|
+
lot.kind,
|
|
392
|
+
null,
|
|
393
|
+
lot.originalUnits,
|
|
394
|
+
lot.availableUnits,
|
|
395
|
+
lot.reservedUnits,
|
|
396
|
+
lot.consumedUnits,
|
|
397
|
+
lot.expiredUnits,
|
|
398
|
+
null,
|
|
399
|
+
lot.createdAt,
|
|
400
|
+
serializeReceiptStoreValue(lot),
|
|
401
|
+
]);
|
|
402
|
+
for (const reservation of open) {
|
|
403
|
+
const units = parseCreditUnits(reservation.reservedUnits);
|
|
404
|
+
if (units === 0n)
|
|
405
|
+
continue;
|
|
406
|
+
const allocation = {
|
|
407
|
+
id: `cla_legacy_${reservation.id}`,
|
|
408
|
+
reservationId: reservation.id,
|
|
409
|
+
lotId: lot.id,
|
|
410
|
+
accountId: account.id,
|
|
411
|
+
projectId: account.projectId,
|
|
412
|
+
customerId: account.customerId,
|
|
413
|
+
allocatedAmount: creditUnitsToString(units),
|
|
414
|
+
allocatedUnits: units.toString(),
|
|
415
|
+
reservedAmount: creditUnitsToString(units),
|
|
416
|
+
reservedUnits: units.toString(),
|
|
417
|
+
consumedAmount: '0',
|
|
418
|
+
consumedUnits: '0',
|
|
419
|
+
releasedAmount: '0',
|
|
420
|
+
releasedUnits: '0',
|
|
421
|
+
expiredAmount: '0',
|
|
422
|
+
expiredUnits: '0',
|
|
423
|
+
createdAt: reservation.createdAt,
|
|
424
|
+
updatedAt: account.updatedAt,
|
|
425
|
+
};
|
|
426
|
+
await client.query(`INSERT INTO ${t('resvary_credit_lot_allocations')} (
|
|
427
|
+
id, reservation_id, lot_id, account_id, allocated_units, reserved_units,
|
|
428
|
+
consumed_units, released_units, expired_units, created_at, payload
|
|
429
|
+
) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb)`, [
|
|
430
|
+
allocation.id,
|
|
431
|
+
allocation.reservationId,
|
|
432
|
+
allocation.lotId,
|
|
433
|
+
allocation.accountId,
|
|
434
|
+
allocation.allocatedUnits,
|
|
435
|
+
allocation.reservedUnits,
|
|
436
|
+
allocation.consumedUnits,
|
|
437
|
+
allocation.releasedUnits,
|
|
438
|
+
allocation.expiredUnits,
|
|
439
|
+
allocation.createdAt,
|
|
440
|
+
serializeReceiptStoreValue(allocation),
|
|
441
|
+
]);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
await client.query(`INSERT INTO ${t('resvary_schema_migrations')}(version, applied_at) VALUES (3, $1)`, [Date.now()]);
|
|
445
|
+
await client.query('COMMIT');
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
await client.query('ROLLBACK');
|
|
449
|
+
throw error;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
263
452
|
//# sourceMappingURL=migrations.js.map
|
package/dist/migrations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7E,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAiC,MAAM,iBAAiB,CAAC;AAE7F,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AASxC,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAgC;IAEhC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CACpC;;;mBAGa,EACb,CAAC,MAAM,CAAC,MAAM,CAAC,CAChB,CAAC;QACF,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CACpC,uBAAuB,KAAK,CAAC,MAAM,EAAE,2BAA2B,CAAC,uBAAuB,CACzF,CAAC;YACF,cAAc,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc;YACd,aAAa,EAAE,uBAAuB;YACtC,eAAe,EAAE,KAAK,CAAC,IAAI,CACzB,EAAE,MAAM,EAAE,uBAAuB,GAAG,cAAc,EAAE,EACpD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,CACzC;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAgC;IAEhC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,KAAK,CAAC;mCACY,KAAK,CAAC,MAAM,EAAE,2BAA2B,CAAC;;;;KAIxE,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAChC,uBAAuB,KAAK,CAAC,MAAM,EAAE,2BAA2B,CAAC,uBAAuB,CACzF,CAAC;QACF,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACtF,IAAI,cAAc,GAAG,CAAC;YAAE,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,cAAc,GAAG,CAAC;YAAE,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,cAAc,GAAG,CAAC;YAAE,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChG,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAkB;IAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,wDAAwD,QAAQ,WAAW,QAAQ,CAAC,KAAK,CAAC,EAAE,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,cAAc,GAAG,uBAAuB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,2BAA2B,cAAc,oCAAoC,uBAAuB,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAkB,EAAE,MAAc;IAC9D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;qBACF,CAAC,CAAC,yBAAyB,CAAC;;;;;;qBAM5B,CAAC,CAAC,uBAAuB,CAAC;;;;sDAIO,CAAC,CAAC,uBAAuB,CAAC;qBAC3D,CAAC,CAAC,gBAAgB,CAAC;;;;qBAInB,CAAC,CAAC,wBAAwB,CAAC;;;;qBAI3B,CAAC,CAAC,6BAA6B,CAAC;;;;;;;aAOxC,CAAC,CAAC,6BAA6B,CAAC;qBACxB,CAAC,CAAC,sBAAsB,CAAC;;;qBAGzB,CAAC,CAAC,wBAAwB,CAAC;;;;;;aAMnC,CAAC,CAAC,wBAAwB,CAAC;qBACnB,CAAC,CAAC,wBAAwB,CAAC;;;;;aAKnC,CAAC,CAAC,wBAAwB,CAAC;qBACnB,CAAC,CAAC,yBAAyB,CAAC;;;;;qBAK5B,CAAC,CAAC,8BAA8B,CAAC;;;;;;;aAOzC,CAAC,CAAC,8BAA8B,CAAC;;qBAEzB,CAAC,CAAC,0BAA0B,CAAC;;;;qBAI7B,CAAC,CAAC,uBAAuB,CAAC;;;;;;;aAOlC,CAAC,CAAC,uBAAuB,CAAC;;qBAElB,CAAC,CAAC,kBAAkB,CAAC;;;;gDAIM,CAAC,CAAC,kBAAkB,CAAC;qDAChB,CAAC,CAAC,kBAAkB,CAAC;qBACrD,CAAC,CAAC,kBAAkB,CAAC;;;;;aAK7B,CAAC,CAAC,kBAAkB,CAAC;qBACb,CAAC,CAAC,oBAAoB,CAAC;;;qBAGvB,CAAC,CAAC,wBAAwB,CAAC;;;;wDAIQ,CAAC,CAAC,wBAAwB,CAAC;qBAC9D,CAAC,CAAC,qBAAqB,CAAC;;;;KAIxC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,CAAC,CAAC,2BAA2B,CAAC,sCAAsC,EACnF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CACb,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAkB,EAAE,MAAc;IAC9D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,KAAK,CACzC;cACQ,CAAC,CAAC,kBAAkB,CAAC;;;;eAIpB,CACV,CAAC;QACF,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,kDAAkD,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CACzI,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,CAAC;8BACO,MAAM;;aAEvB,CAAC,CAAC,kBAAkB,CAAC;;;oBAGd,CAAC,CAAC,yBAAyB,CAAC;;;oBAG5B,CAAC,CAAC,uBAAuB,CAAC;;;uBAGvB,CAAC,CAAC,yBAAyB,CAAC;oBAC/B,CAAC,CAAC,wBAAwB,CAAC;;;uBAGxB,CAAC,CAAC,gBAAgB,CAAC;oBACtB,CAAC,CAAC,6BAA6B,CAAC;;;;;uBAK7B,CAAC,CAAC,yBAAyB,CAAC;oBAC/B,CAAC,CAAC,sBAAsB,CAAC;;uBAEtB,CAAC,CAAC,yBAAyB,CAAC;oBAC/B,CAAC,CAAC,wBAAwB,CAAC;;;uBAGxB,CAAC,CAAC,yBAAyB,CAAC;;uBAE5B,CAAC,CAAC,6BAA6B,CAAC;;uBAEhC,CAAC,CAAC,sBAAsB,CAAC;oBAC5B,CAAC,CAAC,wBAAwB,CAAC;;;uBAGxB,CAAC,CAAC,yBAAyB,CAAC;oBAC/B,CAAC,CAAC,yBAAyB,CAAC;;;;oBAI5B,CAAC,CAAC,8BAA8B,CAAC;;;uBAG9B,CAAC,CAAC,yBAAyB,CAAC;oBAC/B,CAAC,CAAC,uBAAuB,CAAC;;;;oBAI1B,CAAC,CAAC,kBAAkB,CAAC;;;;oBAIrB,CAAC,CAAC,kBAAkB,CAAC;;;;uBAIlB,CAAC,CAAC,kBAAkB,CAAC;oBACxB,CAAC,CAAC,wBAAwB,CAAC;;;oBAG3B,CAAC,CAAC,qBAAqB,CAAC;;KAEvC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,CAAC,CAAC,2BAA2B,CAAC,sCAAsC,EACnF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CACb,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAkB,EAAE,MAAc;IAC9D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;qBACF,CAAC,CAAC,wBAAwB,CAAC;;;;;;aAMnC,CAAC,CAAC,wBAAwB,CAAC;;qBAEnB,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;uBAetB,CAAC,CAAC,yBAAyB,CAAC;;uBAE5B,CAAC,CAAC,wBAAwB,CAAC;;;aAGrC,CAAC,CAAC,qBAAqB,CAAC;;aAExB,CAAC,CAAC,qBAAqB,CAAC;;;qBAGhB,CAAC,CAAC,gCAAgC,CAAC;;;;;;;;;;;;uBAYjC,CAAC,CAAC,6BAA6B,CAAC;;uBAEhC,CAAC,CAAC,qBAAqB,CAAC;;uBAExB,CAAC,CAAC,yBAAyB,CAAC;;;;aAItC,CAAC,CAAC,gCAAgC,CAAC;;qBAE3B,CAAC,CAAC,mCAAmC,CAAC;;;;;;;uBAOpC,CAAC,CAAC,wBAAwB,CAAC;;uBAE3B,CAAC,CAAC,yBAAyB,CAAC;;;;aAItC,CAAC,CAAC,mCAAmC,CAAC;KAC9C,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,wCAAwC,CAAC,CAAC,yBAAyB,CAAC,cAAc,CACnF,CAAC;QACF,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,sBAAsB,CAAgB,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACzD,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,qEAAqE,OAAO,CAAC,EAAE,EAAE,CAClF,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CACrC,wCAAwC,CAAC,CAAC,6BAA6B,CAAC;2EACL,EACnE,CAAC,OAAO,CAAC,EAAE,CAAC,CACb,CAAC;YACF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,sBAAsB,CAAoB,IAAI,CAAC,OAAO,CAAC,CACxD,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAClC,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC,EAC3E,EAAE,CACH,CAAC;YACF,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,+EAA+E,OAAO,CAAC,EAAE,EAAE,CAC5F,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,KAAK,EAAE;gBAAE,SAAS;YAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;YACpC,MAAM,GAAG,GAAc;gBACrB,EAAE,EAAE,cAAc,OAAO,CAAC,EAAE,EAAE;gBAC9B,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBAC3C,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAChC,eAAe,EAAE,mBAAmB,CAAC,SAAS,CAAC;gBAC/C,cAAc,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACpC,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC;gBAC7C,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE;gBAClC,cAAc,EAAE,GAAG;gBACnB,aAAa,EAAE,GAAG;gBAClB,aAAa,EAAE,GAAG;gBAClB,YAAY,EAAE,GAAG;gBACjB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE;aAC1C,CAAC;YACF,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,CAAC,CAAC,qBAAqB,CAAC;;;;yEAI0B,EACjE;gBACE,GAAG,CAAC,EAAE;gBACN,GAAG,CAAC,SAAS;gBACb,GAAG,CAAC,SAAS;gBACb,GAAG,CAAC,UAAU;gBACd,GAAG,CAAC,IAAI;gBACR,IAAI;gBACJ,GAAG,CAAC,aAAa;gBACjB,GAAG,CAAC,cAAc;gBAClB,GAAG,CAAC,aAAa;gBACjB,GAAG,CAAC,aAAa;gBACjB,GAAG,CAAC,YAAY;gBAChB,IAAI;gBACJ,GAAG,CAAC,SAAS;gBACb,0BAA0B,CAAC,GAAG,CAAC;aAChC,CACF,CAAC;YACF,KAAK,MAAM,WAAW,IAAI,IAAI,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAC1D,IAAI,KAAK,KAAK,EAAE;oBAAE,SAAS;gBAC3B,MAAM,UAAU,GAAwB;oBACtC,EAAE,EAAE,cAAc,WAAW,CAAC,EAAE,EAAE;oBAClC,aAAa,EAAE,WAAW,CAAC,EAAE;oBAC7B,KAAK,EAAE,GAAG,CAAC,EAAE;oBACb,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,eAAe,EAAE,mBAAmB,CAAC,KAAK,CAAC;oBAC3C,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE;oBAChC,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC;oBAC1C,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE;oBAC/B,cAAc,EAAE,GAAG;oBACnB,aAAa,EAAE,GAAG;oBAClB,cAAc,EAAE,GAAG;oBACnB,aAAa,EAAE,GAAG;oBAClB,aAAa,EAAE,GAAG;oBAClB,YAAY,EAAE,GAAG;oBACjB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,CAAC,CAAC,gCAAgC,CAAC;;;+DAGG,EACrD;oBACE,UAAU,CAAC,EAAE;oBACb,UAAU,CAAC,aAAa;oBACxB,UAAU,CAAC,KAAK;oBAChB,UAAU,CAAC,SAAS;oBACpB,UAAU,CAAC,cAAc;oBACzB,UAAU,CAAC,aAAa;oBACxB,UAAU,CAAC,aAAa;oBACxB,UAAU,CAAC,aAAa;oBACxB,UAAU,CAAC,YAAY;oBACvB,UAAU,CAAC,SAAS;oBACpB,0BAA0B,CAAC,UAAU,CAAC;iBACvC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,CAAC,CAAC,2BAA2B,CAAC,sCAAsC,EACnF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CACb,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|