@pasosdejesus/m 0.21.1 → 0.22.1

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.
Files changed (130) hide show
  1. package/dist/base-model/baseline.generated.d.ts +60 -0
  2. package/dist/base-model/baseline.generated.d.ts.map +1 -0
  3. package/dist/base-model/baseline.generated.js +1110 -0
  4. package/dist/base-model/baseline.generated.js.map +1 -0
  5. package/dist/base-model/check.d.ts +6 -0
  6. package/dist/base-model/check.d.ts.map +1 -0
  7. package/dist/base-model/check.js +195 -0
  8. package/dist/base-model/check.js.map +1 -0
  9. package/dist/base-model/generate.d.ts +37 -0
  10. package/dist/base-model/generate.d.ts.map +1 -0
  11. package/dist/base-model/generate.js +184 -0
  12. package/dist/base-model/generate.js.map +1 -0
  13. package/dist/base-model/guidelines.d.ts +13 -0
  14. package/dist/base-model/guidelines.d.ts.map +1 -0
  15. package/dist/base-model/guidelines.js +61 -0
  16. package/dist/base-model/guidelines.js.map +1 -0
  17. package/dist/base-model/index.d.ts +19 -0
  18. package/dist/base-model/index.d.ts.map +1 -0
  19. package/dist/base-model/index.js +22 -0
  20. package/dist/base-model/index.js.map +1 -0
  21. package/dist/base-model/parse-structure.d.ts +4 -0
  22. package/dist/base-model/parse-structure.d.ts.map +1 -0
  23. package/dist/base-model/parse-structure.js +170 -0
  24. package/dist/base-model/parse-structure.js.map +1 -0
  25. package/dist/base-model/queries.d.ts +41 -0
  26. package/dist/base-model/queries.d.ts.map +1 -0
  27. package/dist/base-model/queries.js +157 -0
  28. package/dist/base-model/queries.js.map +1 -0
  29. package/dist/base-model/references/learn-tg.d.ts +16 -0
  30. package/dist/base-model/references/learn-tg.d.ts.map +1 -0
  31. package/dist/base-model/references/learn-tg.js +60 -0
  32. package/dist/base-model/references/learn-tg.js.map +1 -0
  33. package/dist/base-model/types.d.ts +183 -0
  34. package/dist/base-model/types.d.ts.map +1 -0
  35. package/dist/base-model/types.js +10 -0
  36. package/dist/base-model/types.js.map +1 -0
  37. package/dist/base-model/version.d.ts +12 -0
  38. package/dist/base-model/version.d.ts.map +1 -0
  39. package/dist/base-model/version.js +20 -0
  40. package/dist/base-model/version.js.map +1 -0
  41. package/dist/debug/DebugConsole.js +6 -6
  42. package/dist/debug/DebugConsole.js.map +1 -1
  43. package/dist/debug/Logger.js +2 -2
  44. package/dist/debug/Logger.js.map +1 -1
  45. package/dist/e2e/assertions.js +3 -3
  46. package/dist/e2e/assertions.js.map +1 -1
  47. package/dist/e2e/env.js +3 -3
  48. package/dist/e2e/env.js.map +1 -1
  49. package/dist/i18n/common-cli.js +2 -2
  50. package/dist/i18n/common-cli.js.map +1 -1
  51. package/dist/m.js +37 -5
  52. package/dist/m.js.map +1 -1
  53. package/dist/tasks/base-model.d.ts +3 -0
  54. package/dist/tasks/base-model.d.ts.map +1 -0
  55. package/dist/tasks/base-model.js +177 -0
  56. package/dist/tasks/base-model.js.map +1 -0
  57. package/dist/tasks/context-git.d.ts +27 -0
  58. package/dist/tasks/context-git.d.ts.map +1 -0
  59. package/dist/tasks/context-git.js +96 -0
  60. package/dist/tasks/context-git.js.map +1 -0
  61. package/dist/tasks/context-ignore.d.ts +18 -0
  62. package/dist/tasks/context-ignore.d.ts.map +1 -0
  63. package/dist/tasks/context-ignore.js +63 -0
  64. package/dist/tasks/context-ignore.js.map +1 -0
  65. package/dist/tasks/context-profiles.d.ts +42 -0
  66. package/dist/tasks/context-profiles.d.ts.map +1 -0
  67. package/dist/tasks/context-profiles.js +295 -0
  68. package/dist/tasks/context-profiles.js.map +1 -0
  69. package/dist/tasks/context-render.d.ts +37 -0
  70. package/dist/tasks/context-render.d.ts.map +1 -0
  71. package/dist/tasks/context-render.js +162 -0
  72. package/dist/tasks/context-render.js.map +1 -0
  73. package/dist/tasks/context-reqs.d.ts +20 -0
  74. package/dist/tasks/context-reqs.d.ts.map +1 -0
  75. package/dist/tasks/context-reqs.js +75 -0
  76. package/dist/tasks/context-reqs.js.map +1 -0
  77. package/dist/tasks/context-workspaces.d.ts +22 -0
  78. package/dist/tasks/context-workspaces.d.ts.map +1 -0
  79. package/dist/tasks/context-workspaces.js +116 -0
  80. package/dist/tasks/context-workspaces.js.map +1 -0
  81. package/dist/tasks/context.d.ts +39 -3
  82. package/dist/tasks/context.d.ts.map +1 -1
  83. package/dist/tasks/context.js +254 -262
  84. package/dist/tasks/context.js.map +1 -1
  85. package/dist/tasks/db.js +5 -5
  86. package/dist/tasks/db.js.map +1 -1
  87. package/dist/tasks/edit.js +44 -44
  88. package/dist/tasks/edit.js.map +1 -1
  89. package/dist/tasks/engine.js +2 -2
  90. package/dist/tasks/engine.js.map +1 -1
  91. package/dist/tasks/env-diff.js +2 -2
  92. package/dist/tasks/env-diff.js.map +1 -1
  93. package/dist/tasks/glob.js +6 -6
  94. package/dist/tasks/glob.js.map +1 -1
  95. package/dist/tasks/grep.js +9 -9
  96. package/dist/tasks/grep.js.map +1 -1
  97. package/dist/tasks/readfile.js +17 -17
  98. package/dist/tasks/readfile.js.map +1 -1
  99. package/dist/tasks/req.js +17 -17
  100. package/dist/tasks/req.js.map +1 -1
  101. package/dist/tasks/wallet.js +15 -15
  102. package/dist/tasks/wallet.js.map +1 -1
  103. package/dist/tasks/writefile.js +8 -8
  104. package/dist/tasks/writefile.js.map +1 -1
  105. package/dist/templates/AGENTS.md.hbs +2 -2
  106. package/dist/templates/ARCHITECTURE.md.hbs +2 -2
  107. package/dist/templates/CONTRIBUTING.md.hbs +2 -2
  108. package/dist/templates/apps/.env.example.hbs +1 -1
  109. package/dist/templates/apps/hardhat/package.json +1 -1
  110. package/dist/templates/apps/hardhat/scripts/verifyDeployment.ts +10 -10
  111. package/dist/templates/apps/hardhat/sync-abis.mjs +3 -3
  112. package/dist/templates/apps/nextjs/app/page.tsx.hbs +2 -2
  113. package/dist/util/cli-parser.d.ts +3 -3
  114. package/dist/util/cli-parser.d.ts.map +1 -1
  115. package/dist/util/cli-parser.js +8 -1
  116. package/dist/util/cli-parser.js.map +1 -1
  117. package/dist/util/fs-walk.d.ts +11 -0
  118. package/dist/util/fs-walk.d.ts.map +1 -0
  119. package/dist/util/fs-walk.js +39 -0
  120. package/dist/util/fs-walk.js.map +1 -0
  121. package/dist/util/glob-match.d.ts +8 -0
  122. package/dist/util/glob-match.d.ts.map +1 -0
  123. package/dist/util/glob-match.js +79 -0
  124. package/dist/util/glob-match.js.map +1 -0
  125. package/package.json +2 -2
  126. package/src/blockchain/README.md +1 -1
  127. package/src/debug/README.md +1 -1
  128. package/src/e2e/README.md +2 -2
  129. package/src/tasks/README.md +16 -10
  130. package/src/test-utils/README.md +16 -16
@@ -0,0 +1,22 @@
1
+ export { BASE_MODEL_VERSION, BASE_MODEL_TABLES, isBaseModelTable } from './version.js';
2
+ export * from './types.js';
3
+ export { parseStructureSql, normalizeType } from './parse-structure.js';
4
+ export { buildBaseline, buildInventory, renderBaselineSql, renderGeneratedModule } from './generate.js';
5
+ export { compareInventories, formatCheckReport, inventoryFromDb, inventoryFromParsed, } from './check.js';
6
+ export { USUARIO_BASE_COLUMNS, SEARCH_TOWNS_SQL, siweNusuario, isSessionSubject, getUserByWallet, getUserById, ensureWalletLink, upsertUserByWallet, readProfile, updateProfile, setVisibility, listCountries, listDepartments, listMunicipalities, searchTowns, catalogCounts, baseModelInfo, } from './queries.js';
7
+ export { GUIDELINES, renderGuidelines } from './guidelines.js';
8
+ export { LEARN_TG_EXTENSIONS } from './references/learn-tg.js';
9
+ import { BASE_MODEL_VERSION } from './version.js';
10
+ import { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST } from './baseline.generated.js';
11
+ import { compareInventories, inventoryFromDb } from './check.js';
12
+ export { BASELINE_INVENTORY, BASELINE_SQL, BASELINE_GENERATED_MANIFEST };
13
+ /**
14
+ * Conformance check of a live database against the shipped baseline.
15
+ * Extensions are reported as `extra` and never fail; missing or changed base
16
+ * tables/columns are `drift`/`absent` and make the report not ok.
17
+ */
18
+ export async function checkBaseModel(db) {
19
+ const actual = await inventoryFromDb(db, Object.keys(BASELINE_INVENTORY.tables), BASE_MODEL_VERSION);
20
+ return compareInventories(BASELINE_INVENTORY, actual);
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEvF,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EACL,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,GAC5E,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EACtE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAClE,WAAW,EAAE,aAAa,EAAE,aAAa,EACzC,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAC9E,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAqB,eAAe,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B,EAAE,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAe;IAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrG,OAAO,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ParsedStructure } from './types.js';
2
+ export declare function normalizeType(type: string): string;
3
+ export declare function parseStructureSql(sql: string, tables?: readonly string[]): ParsedStructure;
4
+ //# sourceMappingURL=parse-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-structure.d.ts","sourceRoot":"","sources":["../../src/base-model/parse-structure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACiB,eAAe,EAC3C,MAAM,YAAY,CAAC;AAwCpB,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAgDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAkE1F"}
@@ -0,0 +1,170 @@
1
+ function splitTopLevel(body) {
2
+ const parts = [];
3
+ let depth = 0;
4
+ let current = '';
5
+ let inQuote = false;
6
+ for (let i = 0; i < body.length; i++) {
7
+ const ch = body[i];
8
+ if (ch === "'")
9
+ inQuote = !inQuote;
10
+ if (!inQuote) {
11
+ if (ch === '(')
12
+ depth++;
13
+ else if (ch === ')')
14
+ depth--;
15
+ else if (ch === ',' && depth === 0) {
16
+ parts.push(current);
17
+ current = '';
18
+ continue;
19
+ }
20
+ }
21
+ current += ch;
22
+ }
23
+ if (current.trim())
24
+ parts.push(current);
25
+ return parts.map((part) => part.trim()).filter(Boolean);
26
+ }
27
+ function findTopLevel(text, needle) {
28
+ let depth = 0;
29
+ let inQuote = false;
30
+ for (let i = 0; i <= text.length - needle.length; i++) {
31
+ const ch = text[i];
32
+ if (ch === "'")
33
+ inQuote = !inQuote;
34
+ if (!inQuote) {
35
+ if (ch === '(')
36
+ depth++;
37
+ else if (ch === ')')
38
+ depth--;
39
+ else if (depth === 0 && text.startsWith(needle, i))
40
+ return i;
41
+ }
42
+ }
43
+ return -1;
44
+ }
45
+ export function normalizeType(type) {
46
+ return type
47
+ .replace(/\s+COLLATE\s+\S+/i, '')
48
+ // `information_schema.datetime_precision` is 6 both for `timestamp` and
49
+ // `timestamp(6)`, so the explicit default precision is not comparable.
50
+ .replace(/\b(timestamp|time)\(6\)/gi, '$1')
51
+ .replace(/\s+/g, ' ')
52
+ .trim();
53
+ }
54
+ function parseConstraint(item) {
55
+ const match = item.match(/^CONSTRAINT\s+(\S+)\s+([\s\S]+)$/);
56
+ if (!match)
57
+ return null;
58
+ const name = match[1];
59
+ const definition = match[2].trim();
60
+ const kind = /PRIMARY KEY/i.test(definition)
61
+ ? 'primary-key'
62
+ : /UNIQUE/i.test(definition)
63
+ ? 'unique'
64
+ : /FOREIGN KEY/i.test(definition)
65
+ ? 'foreign-key'
66
+ : 'check';
67
+ const columnsMatch = definition.match(/\((?:[^()]|\([^()]*\))*\)/);
68
+ const columns = columnsMatch
69
+ ? columnsMatch[0].slice(1, -1).split(',').map((column) => column.trim().split(/\s+/)[0])
70
+ : [];
71
+ const referencesMatch = definition.match(/REFERENCES\s+public\.(\w+)\s*\(([^)]*)\)/);
72
+ return {
73
+ name,
74
+ kind,
75
+ definition,
76
+ columns,
77
+ references: referencesMatch
78
+ ? { table: referencesMatch[1], columns: referencesMatch[2].split(',').map((column) => column.trim()) }
79
+ : undefined,
80
+ };
81
+ }
82
+ function parseColumn(item) {
83
+ const match = item.match(/^(\S+)\s+([\s\S]+)$/);
84
+ if (!match)
85
+ return null;
86
+ const name = match[1];
87
+ let rest = match[2].trim();
88
+ // `NOT NULL` may precede other column options (pg_dump writes
89
+ // `nombre character varying(200) NOT NULL COLLATE public.es_co_utf_8`).
90
+ const notNull = /\bNOT NULL\b/i.test(rest);
91
+ rest = rest.replace(/\s*\bNOT NULL\b/i, '').trim();
92
+ let defaultValue;
93
+ const defaultIndex = findTopLevel(rest, ' DEFAULT ');
94
+ if (defaultIndex >= 0) {
95
+ defaultValue = rest.slice(defaultIndex + ' DEFAULT '.length).trim();
96
+ rest = rest.slice(0, defaultIndex).trim();
97
+ }
98
+ return { name, type: normalizeType(rest), notNull, default: defaultValue };
99
+ }
100
+ export function parseStructureSql(sql, tables) {
101
+ const wanted = tables ? new Set(tables) : null;
102
+ const parsed = { tables: {}, sequences: {}, serverDefaults: [], indexes: [] };
103
+ const tableRe = /^CREATE TABLE (?:ONLY )?public\.(\w+) \(\r?\n([\s\S]*?)\r?\n\);/gm;
104
+ for (const match of sql.matchAll(tableRe)) {
105
+ const name = match[1];
106
+ if (wanted && !wanted.has(name))
107
+ continue;
108
+ const columns = [];
109
+ const constraints = [];
110
+ for (const item of splitTopLevel(match[2])) {
111
+ if (/^CONSTRAINT\s/i.test(item)) {
112
+ const constraint = parseConstraint(item);
113
+ if (constraint)
114
+ constraints.push(constraint);
115
+ continue;
116
+ }
117
+ const column = parseColumn(item);
118
+ if (column)
119
+ columns.push(column);
120
+ }
121
+ parsed.tables[name] = { name, columns, constraints };
122
+ }
123
+ const sequenceRe = /^CREATE SEQUENCE public\.(\w+)\r?\n([\s\S]*?);/gm;
124
+ for (const match of sql.matchAll(sequenceRe)) {
125
+ const name = match[1];
126
+ const definition = match[2].trim();
127
+ const owned = definition.match(/OWNED BY public\.(\w+)\.(\w+)/);
128
+ const spec = {
129
+ name,
130
+ definition: `CREATE SEQUENCE public.${name}\n ${definition}`,
131
+ ownedBy: owned ? { table: owned[1], column: owned[2] } : undefined,
132
+ };
133
+ if (wanted && !wanted.has(name.replace(/_\w+_seq$/, '')))
134
+ continue;
135
+ parsed.sequences[name] = spec;
136
+ }
137
+ const defaultRe = /^ALTER TABLE (?:ONLY )?public\.(\w+) ALTER COLUMN (\w+) SET DEFAULT ([\s\S]*?);/gm;
138
+ for (const match of sql.matchAll(defaultRe)) {
139
+ const spec = { table: match[1], column: match[2], default: match[3].trim() };
140
+ if (wanted && !wanted.has(spec.table))
141
+ continue;
142
+ parsed.serverDefaults.push(spec);
143
+ }
144
+ const constraintRe = /^ALTER TABLE (?:ONLY )?public\.(\w+)\r?\n\s*ADD CONSTRAINT (\S+) ([\s\S]*?);/gm;
145
+ for (const match of sql.matchAll(constraintRe)) {
146
+ const table = match[1];
147
+ if (wanted && !wanted.has(table))
148
+ continue;
149
+ const tableSpec = parsed.tables[table];
150
+ if (!tableSpec)
151
+ continue;
152
+ const constraint = parseConstraint(`CONSTRAINT ${match[2]} ${match[3]}`);
153
+ if (constraint)
154
+ tableSpec.constraints.push(constraint);
155
+ }
156
+ const indexRe = /^CREATE (UNIQUE )?INDEX (\w+) ON public\.(\w+) USING btree ([\s\S]*?);/gm;
157
+ for (const match of sql.matchAll(indexRe)) {
158
+ const spec = {
159
+ name: match[2],
160
+ table: match[3],
161
+ unique: Boolean(match[1]),
162
+ definition: `CREATE ${match[1] ?? ''}INDEX ${match[2]} ON public.${match[3]} USING btree ${match[4].trim()}`,
163
+ };
164
+ if (wanted && !wanted.has(spec.table))
165
+ continue;
166
+ parsed.indexes.push(spec);
167
+ }
168
+ return parsed;
169
+ }
170
+ //# sourceMappingURL=parse-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-structure.js","sourceRoot":"","sources":["../../src/base-model/parse-structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { SqlExecutor, TownResult, Usuario, VisibilityConfig } from './types.js';
2
+ export declare const USUARIO_BASE_COLUMNS: readonly ["id", "nusuario", "nombre", "descripcion", "email", "idioma", "rol", "pais_id", "religion_id", "oficina_id", "tema_id", "fechacreacion", "fechadeshabilitacion", "created_at", "updated_at"];
3
+ export declare const SEARCH_TOWNS_SQL: string;
4
+ export declare function siweNusuario(wallet: string): string;
5
+ export declare function isSessionSubject(session: {
6
+ address?: string | null;
7
+ } | null | undefined, wallet: string): boolean;
8
+ export declare function getUserByWallet(db: SqlExecutor, wallet: string): Promise<Usuario | null>;
9
+ export declare function getUserById(db: SqlExecutor, id: number): Promise<Usuario | null>;
10
+ export declare function ensureWalletLink(db: SqlExecutor, usuarioId: number, wallet: string): Promise<{
11
+ id: number;
12
+ usuario_id: number;
13
+ billetera: string;
14
+ }>;
15
+ export declare function upsertUserByWallet(db: SqlExecutor, wallet: string, options?: {
16
+ ip?: string;
17
+ }): Promise<{
18
+ usuario: Usuario;
19
+ created: boolean;
20
+ }>;
21
+ export declare function readProfile(db: SqlExecutor, userId: number, options?: {
22
+ columns?: string[];
23
+ }): Promise<Record<string, unknown> | null>;
24
+ export declare function updateProfile(db: SqlExecutor, userId: number, fields: Record<string, unknown>, allowList: readonly string[]): Promise<Record<string, unknown> | null>;
25
+ export declare function setVisibility(db: SqlExecutor, userId: number, values: Record<string, unknown>, config: VisibilityConfig): Promise<Record<string, unknown> | null>;
26
+ export declare function listCountries(db: SqlExecutor): Promise<Array<Record<string, unknown>>>;
27
+ export declare function listDepartments(db: SqlExecutor, paisId: number): Promise<Array<Record<string, unknown>>>;
28
+ export declare function listMunicipalities(db: SqlExecutor, departamentoId: number): Promise<Array<Record<string, unknown>>>;
29
+ export declare function searchTowns(db: SqlExecutor, query?: {
30
+ q?: string;
31
+ countryId?: number;
32
+ departamentoId?: number;
33
+ municipalityId?: number;
34
+ limit?: number;
35
+ }): Promise<TownResult[]>;
36
+ export declare function catalogCounts(db: SqlExecutor): Promise<Record<string, number>>;
37
+ export declare function baseModelInfo(): {
38
+ version: string;
39
+ tables: readonly string[];
40
+ };
41
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/base-model/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ import { BASE_MODEL_VERSION } from './version.js';
2
+ export const USUARIO_BASE_COLUMNS = [
3
+ 'id', 'nusuario', 'nombre', 'descripcion', 'email', 'idioma', 'rol',
4
+ 'pais_id', 'religion_id', 'oficina_id', 'tema_id',
5
+ 'fechacreacion', 'fechadeshabilitacion', 'created_at', 'updated_at',
6
+ ];
7
+ export const SEARCH_TOWNS_SQL = [
8
+ 'SELECT t.id, t.nombre AS town, m.id AS municipio_id, m.nombre AS municipio,',
9
+ ' d.id AS departamento_id, d.nombre AS departamento',
10
+ ' FROM msip_centropoblado t',
11
+ ' JOIN msip_municipio m ON m.id = t.municipio_id',
12
+ ' JOIN msip_departamento d ON d.id = m.departamento_id',
13
+ ' WHERE t.fechadeshabilitacion IS NULL',
14
+ ].join('\n');
15
+ function selectUsuario() {
16
+ return `SELECT ${USUARIO_BASE_COLUMNS.map((column) => `u.${column}`).join(', ')}\n FROM usuario u`;
17
+ }
18
+ export function siweNusuario(wallet) {
19
+ return `${wallet.slice(0, 7)}...${wallet.slice(-5)}`;
20
+ }
21
+ export function isSessionSubject(session, wallet) {
22
+ const address = session?.address;
23
+ if (!address || !wallet)
24
+ return false;
25
+ return address.toLowerCase() === wallet.toLowerCase();
26
+ }
27
+ export async function getUserByWallet(db, wallet) {
28
+ const result = await db.query(`${selectUsuario()}
29
+ JOIN billetera_usuario b ON b.usuario_id = u.id
30
+ WHERE LOWER(b.billetera) = LOWER($1)
31
+ ORDER BY u.id
32
+ LIMIT 1`, [wallet]);
33
+ return result.rows[0] ?? null;
34
+ }
35
+ export async function getUserById(db, id) {
36
+ const result = await db.query(`${selectUsuario()}\n WHERE u.id = $1`, [id]);
37
+ return result.rows[0] ?? null;
38
+ }
39
+ export async function ensureWalletLink(db, usuarioId, wallet) {
40
+ const lower = wallet.toLowerCase();
41
+ const existing = await db.query('SELECT id, usuario_id, billetera FROM billetera_usuario WHERE LOWER(billetera) = LOWER($1) ORDER BY id LIMIT 1', [lower]);
42
+ if (existing.rows[0]) {
43
+ await db.query('UPDATE billetera_usuario SET updated_at = now() WHERE id = $1', [existing.rows[0].id]);
44
+ return existing.rows[0];
45
+ }
46
+ const inserted = await db.query(`INSERT INTO billetera_usuario (usuario_id, billetera, created_at, updated_at)
47
+ VALUES ($1, $2, now(), now())
48
+ RETURNING id, usuario_id, billetera`, [usuarioId, lower]);
49
+ return inserted.rows[0];
50
+ }
51
+ export async function upsertUserByWallet(db, wallet, options = {}) {
52
+ const ip = options.ip ?? '127.0.0.1';
53
+ const existing = await db.query(`${selectUsuario()}
54
+ JOIN billetera_usuario b ON b.usuario_id = u.id
55
+ WHERE LOWER(b.billetera) = LOWER($1)
56
+ ORDER BY u.id
57
+ LIMIT 1`, [wallet]);
58
+ if (!existing.rows[0]) {
59
+ const address15 = siweNusuario(wallet);
60
+ const created = await db.query(`INSERT INTO usuario (nombre, nusuario, email, fechacreacion, current_sign_in_at, current_sign_in_ip, created_at, updated_at)
61
+ VALUES ($1, $2, $3, now()::date, now(), $4, now(), now())
62
+ RETURNING ${USUARIO_BASE_COLUMNS.join(', ')}`, [wallet, address15, `${address15}@localhost`, ip]);
63
+ await ensureWalletLink(db, created.rows[0].id, wallet);
64
+ return { usuario: created.rows[0], created: true };
65
+ }
66
+ const previous = existing.rows[0];
67
+ const updated = await db.query(`UPDATE usuario
68
+ SET last_sign_in_ip = COALESCE(last_sign_in_ip, current_sign_in_ip),
69
+ last_sign_in_at = COALESCE(last_sign_in_at, current_sign_in_at),
70
+ current_sign_in_ip = $2,
71
+ current_sign_in_at = now(),
72
+ updated_at = now()
73
+ WHERE id = $1
74
+ RETURNING ${USUARIO_BASE_COLUMNS.join(', ')}`, [previous.id, ip]);
75
+ await db.query('UPDATE billetera_usuario SET updated_at = now() WHERE usuario_id = $1', [previous.id]);
76
+ return { usuario: updated.rows[0] ?? previous, created: false };
77
+ }
78
+ export async function readProfile(db, userId, options = {}) {
79
+ const extra = (options.columns ?? []).filter((column) => /^[a-z_][a-z0-9_]*$/.test(column));
80
+ const selected = [...USUARIO_BASE_COLUMNS, ...extra];
81
+ const result = await db.query(`SELECT ${selected.join(', ')} FROM usuario WHERE id = $1`, [userId]);
82
+ return result.rows[0] ?? null;
83
+ }
84
+ export async function updateProfile(db, userId, fields, allowList) {
85
+ const allowed = new Set(allowList);
86
+ const entries = Object.entries(fields).filter(([key]) => allowed.has(key) && /^[a-z_][a-z0-9_]*$/.test(key));
87
+ if (entries.length === 0)
88
+ return readProfile(db, userId);
89
+ const assignments = entries.map(([key], index) => `${key} = $${index + 2}`);
90
+ const values = entries.map(([, value]) => value);
91
+ const result = await db.query(`UPDATE usuario SET ${assignments.join(', ')}, updated_at = now() WHERE id = $1 RETURNING *`, [userId, ...values]);
92
+ return result.rows[0] ?? null;
93
+ }
94
+ export async function setVisibility(db, userId, values, config) {
95
+ const entries = Object.entries(values).filter(([key]) => config.columns.includes(key));
96
+ if (entries.length === 0)
97
+ return null;
98
+ const assignments = entries.map(([key], index) => `${key} = $${index + 2}`);
99
+ const result = await db.query(`UPDATE usuario SET ${assignments.join(', ')}, updated_at = now() WHERE id = $1 RETURNING id, ${config.columns.join(', ')}`, [userId, ...entries.map(([, value]) => value)]);
100
+ return result.rows[0] ?? null;
101
+ }
102
+ export async function listCountries(db) {
103
+ const result = await db.query('SELECT id, nombre, alfa2, alfa3 FROM msip_pais WHERE fechadeshabilitacion IS NULL ORDER BY nombre');
104
+ return result.rows;
105
+ }
106
+ export async function listDepartments(db, paisId) {
107
+ const result = await db.query('SELECT id, nombre, pais_id FROM msip_departamento WHERE pais_id = $1 AND fechadeshabilitacion IS NULL ORDER BY nombre', [paisId]);
108
+ return result.rows;
109
+ }
110
+ export async function listMunicipalities(db, departamentoId) {
111
+ const result = await db.query('SELECT id, nombre, departamento_id FROM msip_municipio WHERE departamento_id = $1 AND fechadeshabilitacion IS NULL ORDER BY nombre', [departamentoId]);
112
+ return result.rows;
113
+ }
114
+ export async function searchTowns(db, query = {}) {
115
+ const params = [];
116
+ const where = [];
117
+ if (query.countryId !== undefined) {
118
+ params.push(query.countryId);
119
+ where.push(`d.pais_id = $${params.length}`);
120
+ }
121
+ if (query.departamentoId !== undefined) {
122
+ params.push(query.departamentoId);
123
+ where.push(`d.id = $${params.length}`);
124
+ }
125
+ if (query.municipalityId !== undefined) {
126
+ params.push(query.municipalityId);
127
+ where.push(`m.id = $${params.length}`);
128
+ }
129
+ const q = query.q ?? '';
130
+ if (q.length >= 2) {
131
+ params.push(`${q}%`);
132
+ where.push(`t.nombre ILIKE $${params.length}`);
133
+ }
134
+ params.push(query.limit ?? 20);
135
+ const sql = [
136
+ SEARCH_TOWNS_SQL,
137
+ ...(where.length > 0 ? [` AND ${where.join(' AND ')}`] : []),
138
+ ' ORDER BY t.nombre',
139
+ ` LIMIT $${params.length}`,
140
+ ].join('\n');
141
+ const result = await db.query(sql, params);
142
+ return result.rows;
143
+ }
144
+ export async function catalogCounts(db) {
145
+ const result = await db.query(`SELECT 'msip_pais' AS table, count(*)::text AS total FROM msip_pais
146
+ UNION ALL SELECT 'msip_departamento', count(*)::text FROM msip_departamento
147
+ UNION ALL SELECT 'msip_municipio', count(*)::text FROM msip_municipio
148
+ UNION ALL SELECT 'msip_centropoblado', count(*)::text FROM msip_centropoblado`);
149
+ const counts = {};
150
+ for (const row of result.rows)
151
+ counts[row.table] = Number(row.total);
152
+ return counts;
153
+ }
154
+ export function baseModelInfo() {
155
+ return { version: BASE_MODEL_VERSION, tables: ['usuario', 'billetera_usuario', 'msip_pais', 'msip_departamento', 'msip_municipio', 'msip_centropoblado'] };
156
+ }
157
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/base-model/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { BaselineExtensions } from '../types.js';
2
+ /**
3
+ * Columns and constraints that belong to learn.tg (not to the base), used to
4
+ * derive the baseline from learn.tg as the reference database.
5
+ *
6
+ * Source: learn.tg REQ/260 §2 (the ~35 columns of the learn.tg era) plus the
7
+ * visibility flags of R-#259, which the base model keeps generic (decision D5).
8
+ * `religion_id` and `pais_id` are **not** here: the classification annex of
9
+ * REQ/260 §5 puts them in group B (base, shared by both apps), even though §2
10
+ * lists them among the learn.tg-era columns. Same for the rest of the base
11
+ * groups A and B. This list is the reviewed subtraction: the derivation guard
12
+ * fails when the reference has a column that is neither in the base nor
13
+ * declared here.
14
+ */
15
+ export declare const LEARN_TG_EXTENSIONS: BaselineExtensions;
16
+ //# sourceMappingURL=learn-tg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn-tg.d.ts","sourceRoot":"","sources":["../../../src/base-model/references/learn-tg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBA6CjC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Columns and constraints that belong to learn.tg (not to the base), used to
3
+ * derive the baseline from learn.tg as the reference database.
4
+ *
5
+ * Source: learn.tg REQ/260 §2 (the ~35 columns of the learn.tg era) plus the
6
+ * visibility flags of R-#259, which the base model keeps generic (decision D5).
7
+ * `religion_id` and `pais_id` are **not** here: the classification annex of
8
+ * REQ/260 §5 puts them in group B (base, shared by both apps), even though §2
9
+ * lists them among the learn.tg-era columns. Same for the rest of the base
10
+ * groups A and B. This list is the reviewed subtraction: the derivation guard
11
+ * fails when the reference has a column that is neither in the base nor
12
+ * declared here.
13
+ */
14
+ export const LEARN_TG_EXTENSIONS = {
15
+ columns: [
16
+ 'usuario.passport_name',
17
+ 'usuario.passport_nationality',
18
+ 'usuario.profilescore',
19
+ 'usuario.learningscore_deprecated',
20
+ 'usuario.lastgooddollarverification',
21
+ 'usuario.excluir_leaderboard',
22
+ 'usuario.church_relationship',
23
+ 'usuario.whatsapp',
24
+ 'usuario.telegram',
25
+ 'usuario.country_id',
26
+ 'usuario.city_id',
27
+ 'usuario.place_of_worship',
28
+ 'usuario.place_of_worship_location',
29
+ 'usuario.church_id',
30
+ 'usuario.id_photo_front',
31
+ 'usuario.id_photo_back',
32
+ 'usuario.id_photo_verified',
33
+ 'usuario.verified_whatsapp',
34
+ 'usuario.verified_telegram',
35
+ 'usuario.verified_email',
36
+ 'usuario.verified_city_id',
37
+ 'usuario.verified_place_of_worship',
38
+ 'usuario.verified_place_of_worship_location',
39
+ 'usuario.verified_church_relationship',
40
+ 'usuario.proposed_date_of_interview',
41
+ 'usuario.conducted_date_of_interview',
42
+ 'usuario.working_hours',
43
+ 'usuario.pastor_name',
44
+ 'usuario.pastor_whatsapp',
45
+ 'usuario.position_israel_gaza',
46
+ 'usuario.registration',
47
+ 'usuario.registration_photo',
48
+ 'usuario.denomination',
49
+ 'usuario.mostrar_cursos_publico',
50
+ 'usuario.mostrar_cursos_sensibles_publico',
51
+ 'billetera_usuario.answer_fib',
52
+ 'billetera_usuario.nonce',
53
+ 'billetera_usuario.nonce_expires_at',
54
+ ],
55
+ constraints: [
56
+ 'usuario.usuario_church_relationship_check',
57
+ 'usuario.usuario_verified_church_relationship_check',
58
+ ],
59
+ };
60
+ //# sourceMappingURL=learn-tg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn-tg.js","sourceRoot":"","sources":["../../../src/base-model/references/learn-tg.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAuB;IACrD,OAAO,EAAE;QACP,uBAAuB;QACvB,8BAA8B;QAC9B,sBAAsB;QACtB,kCAAkC;QAClC,oCAAoC;QACpC,6BAA6B;QAC7B,6BAA6B;QAC7B,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,iBAAiB;QACjB,0BAA0B;QAC1B,mCAAmC;QACnC,mBAAmB;QACnB,wBAAwB;QACxB,uBAAuB;QACvB,2BAA2B;QAC3B,2BAA2B;QAC3B,2BAA2B;QAC3B,wBAAwB;QACxB,0BAA0B;QAC1B,mCAAmC;QACnC,4CAA4C;QAC5C,sCAAsC;QACtC,oCAAoC;QACpC,qCAAqC;QACrC,uBAAuB;QACvB,qBAAqB;QACrB,yBAAyB;QACzB,8BAA8B;QAC9B,sBAAsB;QACtB,4BAA4B;QAC5B,sBAAsB;QACtB,gCAAgC;QAChC,0CAA0C;QAC1C,8BAA8B;QAC9B,yBAAyB;QACzB,oCAAoC;KACrC;IACD,WAAW,EAAE;QACX,2CAA2C;QAC3C,oDAAoD;KACrD;CACF,CAAC"}