@reachy/audience-module 1.0.19 → 1.0.21

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.
@@ -0,0 +1,31 @@
1
+ ## Descrição
2
+
3
+ <!-- Descreva de forma clara o que foi feito e por quê -->
4
+
5
+
6
+
7
+ ## Tipo de mudança
8
+
9
+ - [ ] 🐛 Bug fix
10
+ - [ ] ✨ Nova funcionalidade
11
+ - [ ] ♻️ Refatoração
12
+ - [ ] 📦 Dependências
13
+ - [ ] ⚙️ CI/CD
14
+ - [ ] 📝 Documentação
15
+
16
+ ## O que foi alterado
17
+
18
+ -
19
+ -
20
+
21
+ ## Como testar
22
+
23
+ 1.
24
+ 2.
25
+
26
+ ## Checklist
27
+
28
+ - [ ] Código segue os padrões do projeto
29
+ - [ ] Testei localmente e funciona
30
+ - [ ] Não introduz breaking changes
31
+ - [ ] Commits seguem Conventional Commits
package/.gitlab-ci.yml CHANGED
@@ -1,60 +1,49 @@
1
1
  image: node:20
2
2
 
3
+ workflow:
4
+ rules:
5
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
6
+ - if: '$CI_COMMIT_BRANCH == "main"'
7
+ - if: '$CI_COMMIT_BRANCH'
8
+ when: always
9
+
3
10
  variables:
4
11
  GIT_DEPTH: 0
5
12
  GIT_STRATEGY: fetch
6
13
 
14
+ include:
15
+ # Módulos de qualidade
16
+ - project: 'kontrole1/cicd/pipeline'
17
+ file: 'ci/templates/claude-review.yml'
18
+ ref: 'main'
19
+ - project: 'kontrole1/cicd/pipeline'
20
+ file: 'ci/templates/mr-description-check.yml'
21
+ ref: 'main'
22
+ - project: 'kontrole1/cicd/pipeline'
23
+ file: 'ci/templates/commit-lint.yml'
24
+ ref: 'main'
25
+ - project: 'kontrole1/cicd/pipeline'
26
+ file: 'ci/templates/security.yml'
27
+ ref: 'main'
28
+ - project: 'kontrole1/cicd/pipeline'
29
+ file: 'ci/templates/review-gate.yml'
30
+ ref: 'main'
31
+ - project: 'kontrole1/cicd/pipeline'
32
+ file: 'ci/templates/approval-check.yml'
33
+ ref: 'main'
34
+ - project: 'kontrole1/cicd/pipeline'
35
+ file: 'ci/templates/notifications.yml'
36
+ ref: 'main'
37
+
7
38
  stages:
39
+ - .pre
40
+ - review
8
41
  - test
9
42
  - build
10
43
  - tag
11
44
  - publish
12
45
  - notify
13
46
 
14
- .slack-notify-template:
15
- image: alpine:3.20
16
- before_script:
17
- - apk add --no-cache curl jq
18
- - |
19
- slack_post () {
20
- [ -z "${SLACK_WEBHOOK_URL:-}" ] && { echo "SLACK_WEBHOOK_URL não configurada; pulando notificação."; return 0; }
21
- local color="$1" title="$2" emoji="$3" msg="$4"
22
- local short_sha="${CI_COMMIT_SHA:0:8}"
23
- [ -f build_info.env ] && set -a && . build_info.env && set +a || true
24
- payload="$(
25
- jq -n \
26
- --arg ch "${SLACK_CHANNEL:-}" \
27
- --arg color "$color" --arg title "$title" --arg emoji "$emoji" \
28
- --arg project "$CI_PROJECT_PATH" --arg branch "$CI_COMMIT_REF_NAME" \
29
- --arg sha "$short_sha" --arg actor "${GITLAB_USER_NAME:-ci}" \
30
- --arg job_url "$CI_JOB_URL" --arg pipe_url "$CI_PIPELINE_URL" \
31
- --arg image "${NEW_IMAGE:-${IMAGE_REPO:-}<unknown>:${IMAGE_TAG:-}}" \
32
- --arg service "${PORTAINER_SERVICE_NAME:-<desconhecido>}" \
33
- --arg msg "$msg" '
34
- def base:
35
- { attachments: [ { color: $color, blocks: [
36
- { "type":"header", "text": { "type":"plain_text", "text": ($emoji+" "+$title) } },
37
- { "type":"section", "fields": [
38
- { "type":"mrkdwn", "text": ("*Projeto:*\n"+$project) },
39
- { "type":"mrkdwn", "text": ("*Branch:*\n"+$branch) },
40
- { "type":"mrkdwn", "text": ("*Commit:*\n"+$sha) },
41
- { "type":"mrkdwn", "text": ("*Autor:*\n"+$actor) },
42
- { "type":"mrkdwn", "text": ("*Serviço:*\n"+$service) },
43
- { "type":"mrkdwn", "text": ("*Imagem:*\n"+$image) }
44
- ] },
45
- { "type":"actions", "elements": [
46
- { "type":"button", "text": { "type":"plain_text","text":"Ver Job" }, "url": $job_url },
47
- { "type":"button", "text": { "type":"plain_text","text":"Ver Pipeline" }, "url": $pipe_url }
48
- ] }
49
- ] } ] };
50
- def add_msg(obj):
51
- if ($msg|length) > 0 then obj | .attachments[0].blocks += [ { "type":"context", "elements":[ { "type":"mrkdwn", "text": $msg } ] } ] else obj end;
52
- base | (if ($ch|length) > 0 then . + {channel:$ch} else . end) | add_msg(.)
53
- '
54
- )"
55
- curl -sS -X POST -H 'Content-type: application/json' --data "$payload" "$SLACK_WEBHOOK_URL" >/dev/null || true
56
- }
57
-
58
47
  default:
59
48
  cache:
60
49
  key: ${CI_COMMIT_REF_SLUG}
@@ -65,6 +54,17 @@ default:
65
54
  tags:
66
55
  - docker
67
56
 
57
+ # Security scans
58
+ sast:
59
+ extends: .sast-scan
60
+
61
+ dependency-scan:
62
+ extends: .dependency-scan
63
+
64
+ secret-detection:
65
+ extends: .secret-detection
66
+
67
+ # Pipeline original preservada
68
68
  lint_and_test:
69
69
  stage: test
70
70
  script:
@@ -104,7 +104,7 @@ create_tag:
104
104
  - |
105
105
  AUTH_USER="oauth2"
106
106
  AUTH_TOKEN="$GITLAB_TOKEN"
107
- REPO_URL="https://${AUTH_USER}:${AUTH_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"
107
+ REPO_URL="${CI_SERVER_PROTOCOL}://${AUTH_USER}:${AUTH_TOKEN}@${CI_SERVER_HOST}${CI_SERVER_PORT:+:$CI_SERVER_PORT}/${CI_PROJECT_PATH}.git"
108
108
  git tag "$TAG"
109
109
  - git push "$REPO_URL" "$TAG"
110
110
  rules:
@@ -124,15 +124,25 @@ publish_npm:
124
124
  when: manual
125
125
  allow_failure: false
126
126
 
127
+ # Notificação unificada (Slack + Roam)
127
128
  notify:publish:
128
- stage: notify
129
- extends: [.slack-notify-template]
129
+ extends: .notify-success
130
130
  needs:
131
131
  - job: publish_npm
132
+ script:
133
+ - VERSION=$(jq -r '.version' package.json 2>/dev/null || echo "?")
134
+ - notify_all "#2EB67D" "Publicação npm @reachy/audience-module v${VERSION}" "✅" "Pacote publicado a partir da main."
132
135
  rules:
133
136
  - if: '$CI_COMMIT_BRANCH == "main"'
134
137
  when: on_success
135
138
  - when: never
139
+
140
+ notify:failure:pipeline:
141
+ extends: .notify-failure
142
+ needs: []
136
143
  script:
137
- - VERSION=$(jq -r '.version' package.json)
138
- - slack_post "#2EB67D" "Publicação npm concluída" ":white_check_mark:" "Pacote publicado a partir do branch main. Versão \`${VERSION}\`."
144
+ - notify_all "#E01E5A" "Pipeline Audience Module falhou" "❌" ""
145
+ rules:
146
+ - if: '$CI_COMMIT_BRANCH == "main"'
147
+ when: on_failure
148
+ - when: never
@@ -6,7 +6,10 @@ export declare class QueryBuilder {
6
6
  private static applyFiltersCriteria;
7
7
  private static applyConditionsCriteria;
8
8
  private static applyCondition;
9
+ private static applyTagCondition;
10
+ private static normalizeTagValues;
9
11
  private static buildConditionString;
12
+ private static buildTagConditionString;
10
13
  private static mapFieldToColumn;
11
14
  }
12
15
  //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK3C,qBAAa,YAAY;IAIvB,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG;IAW3G,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmBpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAuCnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoBtC,OAAO,CAAC,MAAM,CAAC,cAAc;IAwC7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAyCnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAoBhC"}
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK3C,qBAAa,YAAY;IAIvB,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG;IAW3G,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmBpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAuCnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoBtC,OAAO,CAAC,MAAM,CAAC,cAAc;IAyC7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA0CnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAoBhC"}
@@ -88,6 +88,9 @@ class QueryBuilder {
88
88
  static applyCondition(query, condition) {
89
89
  const { field, operator, value } = condition;
90
90
  const dbField = this.mapFieldToColumn(field, condition.customFieldKey);
91
+ if (dbField === 'tags') {
92
+ return this.applyTagCondition(query, operator, value);
93
+ }
91
94
  switch (operator) {
92
95
  case 'equals':
93
96
  case 'eq':
@@ -119,11 +122,48 @@ class QueryBuilder {
119
122
  return query;
120
123
  }
121
124
  }
125
+ static applyTagCondition(query, operator, value) {
126
+ const op = String(operator || '').trim().toLowerCase();
127
+ const values = QueryBuilder.normalizeTagValues(value);
128
+ if (op === 'has_all' || op === 'equals' || op === 'eq' || op === '=') {
129
+ if (values.length === 0)
130
+ return query.eq('id', '__never__');
131
+ return query.contains('tags', values);
132
+ }
133
+ if (op === 'has_any' || op === 'contains' || op === 'in') {
134
+ if (values.length === 0)
135
+ return query.eq('id', '__never__');
136
+ return query.overlaps('tags', values);
137
+ }
138
+ if (op === 'is_empty') {
139
+ return query.or('tags.is.null,tags.eq.{}');
140
+ }
141
+ if (op === 'is_not_empty') {
142
+ return query.not('tags', 'is', null).neq('tags', '{}');
143
+ }
144
+ console.warn(`⚠️ Operador de tag desconhecido: ${operator}`);
145
+ return query.eq('id', '__never__');
146
+ }
147
+ static normalizeTagValues(value) {
148
+ if (value === null || value === undefined)
149
+ return [];
150
+ const raw = Array.isArray(value) ? value : String(value).split(',');
151
+ const out = [];
152
+ for (const item of raw) {
153
+ const v = String(item ?? '').trim();
154
+ if (v.length > 0)
155
+ out.push(v);
156
+ }
157
+ return out;
158
+ }
122
159
  static buildConditionString(condition) {
123
160
  const { field, operator, value } = condition;
124
161
  if (!field || !operator)
125
162
  return null;
126
163
  const dbField = this.mapFieldToColumn(field, condition.customFieldKey);
164
+ if (dbField === 'tags') {
165
+ return QueryBuilder.buildTagConditionString(operator, value);
166
+ }
127
167
  switch (operator) {
128
168
  case 'equals':
129
169
  case 'eq':
@@ -154,6 +194,26 @@ class QueryBuilder {
154
194
  return null;
155
195
  }
156
196
  }
197
+ static buildTagConditionString(operator, value) {
198
+ const op = String(operator || '').trim().toLowerCase();
199
+ const values = QueryBuilder.normalizeTagValues(value);
200
+ const arrLiteral = `{${values.map((v) => v.includes(',') ? `"${v.replace(/"/g, '\\"')}"` : v).join(',')}}`;
201
+ if (op === 'has_all' || op === 'equals' || op === 'eq' || op === '=') {
202
+ if (values.length === 0)
203
+ return null;
204
+ return `tags.cs.${arrLiteral}`;
205
+ }
206
+ if (op === 'has_any' || op === 'contains' || op === 'in') {
207
+ if (values.length === 0)
208
+ return null;
209
+ return `tags.ov.${arrLiteral}`;
210
+ }
211
+ if (op === 'is_empty')
212
+ return `tags.is.null`;
213
+ if (op === 'is_not_empty')
214
+ return `tags.not.is.null`;
215
+ return null;
216
+ }
157
217
  static mapFieldToColumn(field, customFieldKey) {
158
218
  if (field === 'custom_field' && customFieldKey) {
159
219
  return `properties->>${customFieldKey}`;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/builders/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"V2AudienceEngine.d.ts","sourceRoot":"","sources":["../../src/engine/V2AudienceEngine.ts"],"names":[],"mappings":"AAIA,KAAK,MAAM,GAAG;IACZ,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAChC,CAAA;AAgRD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAA4C;IAE9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuD;IAC9E,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgB;gBAE/B,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC;QAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;YAUvF,kBAAkB;IAyB1B,iCAAiC,CACrC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAw/BjB,kCAAkC,CACtC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAmsBnB,OAAO,CAAC,IAAI;CAIb"}
1
+ {"version":3,"file":"V2AudienceEngine.d.ts","sourceRoot":"","sources":["../../src/engine/V2AudienceEngine.ts"],"names":[],"mappings":"AAIA,KAAK,MAAM,GAAG;IACZ,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CAChC,CAAA;AAySD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAA4C;IAE9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuD;IAC9E,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgB;gBAE/B,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC;QAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;YAUvF,kBAAkB;IAyB1B,iCAAiC,CACrC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAijCjB,kCAAkC,CACtC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAwvBnB,OAAO,CAAC,IAAI;CAIb"}
@@ -190,6 +190,36 @@ const normalizePropertyOp = (opRaw) => {
190
190
  return '<=';
191
191
  return op;
192
192
  };
193
+ const normalizeTagValues = (value) => {
194
+ if (value === null || value === undefined)
195
+ return [];
196
+ const raw = Array.isArray(value) ? value : String(value).split(',');
197
+ const out = [];
198
+ for (const item of raw) {
199
+ const v = String(item ?? '').trim();
200
+ if (v.length > 0)
201
+ out.push(v);
202
+ }
203
+ return out;
204
+ };
205
+ const normalizeTagOp = (opRaw) => {
206
+ const op = String(opRaw ?? '').trim().toLowerCase();
207
+ if (op === 'equals' || op === 'eq' || op === '=' || op === 'has_all' || op === 'has')
208
+ return 'equals';
209
+ if (op === 'not_equals' || op === 'neq' || op === '!=' || op === '<>')
210
+ return 'not_equals';
211
+ if (op === 'contains')
212
+ return 'contains';
213
+ if (op === 'not_contains')
214
+ return 'not_contains';
215
+ if (op === 'has_any' || op === 'in')
216
+ return 'has_any';
217
+ if (op === 'is_empty')
218
+ return 'is_empty';
219
+ if (op === 'is_not_empty')
220
+ return 'is_not_empty';
221
+ return op;
222
+ };
193
223
  const isNumericLike = (value) => {
194
224
  if (typeof value === 'number')
195
225
  return Number.isFinite(value);
@@ -1035,6 +1065,71 @@ class V2AudienceEngine {
1035
1065
  return { start: start.toISOString(), end: end.toISOString() };
1036
1066
  };
1037
1067
  const mappedField = mapAudienceFieldToContactField(field);
1068
+ if (field === 'tags' || mappedField === 'tags') {
1069
+ const tagOp = normalizeTagOp(opRaw);
1070
+ if (tagOp === 'contains' || tagOp === 'not_contains') {
1071
+ const expected = String(value ?? '').trim().toLowerCase();
1072
+ if (!expected)
1073
+ return new Set();
1074
+ const fetchQuery = this.supabase
1075
+ .from('contacts')
1076
+ .select('id, tags')
1077
+ .eq('organization_id', organizationId)
1078
+ .eq('project_id', projectId);
1079
+ const data = await fetchAll(fetchQuery, 1000);
1080
+ if (!data || data.length === 0)
1081
+ return new Set();
1082
+ const result = new Set();
1083
+ for (const row of data) {
1084
+ const id = row?.id;
1085
+ if (!id)
1086
+ continue;
1087
+ const tags = Array.isArray(row.tags) ? row.tags : [];
1088
+ const hasMatch = tags.some((t) => String(t ?? '').toLowerCase().includes(expected));
1089
+ if (tagOp === 'contains' && hasMatch)
1090
+ result.add(id);
1091
+ else if (tagOp === 'not_contains' && !hasMatch)
1092
+ result.add(id);
1093
+ }
1094
+ return result;
1095
+ }
1096
+ const tagValues = normalizeTagValues(value);
1097
+ let tagQuery = this.supabase
1098
+ .from('contacts')
1099
+ .select('id')
1100
+ .eq('organization_id', organizationId)
1101
+ .eq('project_id', projectId);
1102
+ if (tagOp === 'equals') {
1103
+ if (tagValues.length === 0)
1104
+ return new Set();
1105
+ tagQuery = tagQuery.contains('tags', tagValues);
1106
+ }
1107
+ else if (tagOp === 'not_equals') {
1108
+ if (tagValues.length === 0)
1109
+ return new Set();
1110
+ const arrLiteral = `{${tagValues.join(',')}}`;
1111
+ tagQuery = tagQuery.or(`tags.is.null,tags.not.cs.${arrLiteral}`);
1112
+ }
1113
+ else if (tagOp === 'has_any') {
1114
+ if (tagValues.length === 0)
1115
+ return new Set();
1116
+ tagQuery = tagQuery.overlaps('tags', tagValues);
1117
+ }
1118
+ else if (tagOp === 'is_empty') {
1119
+ tagQuery = tagQuery.or('tags.is.null,tags.eq.{}');
1120
+ }
1121
+ else if (tagOp === 'is_not_empty') {
1122
+ tagQuery = tagQuery.not('tags', 'is', null).neq('tags', '{}');
1123
+ }
1124
+ else {
1125
+ this.dlog('tags rule with unsupported op, returning empty', { opRaw, tagOp });
1126
+ return new Set();
1127
+ }
1128
+ const tagData = await fetchAll(tagQuery, 1000);
1129
+ if (!tagData || tagData.length === 0)
1130
+ return new Set();
1131
+ return new Set(tagData.map((r) => r.id));
1132
+ }
1038
1133
  const known = ['email', 'first_name', 'last_name', 'phone', 'is_subscribed', 'created_at', 'updated_at', 'name'];
1039
1134
  const isJsonb = !(known.includes(field) || known.includes(mappedField));
1040
1135
  const dbField = isJsonb ? `properties->>${field}` : mappedField;
@@ -1841,6 +1936,62 @@ class V2AudienceEngine {
1841
1936
  return { start: start.toISOString(), end: end.toISOString() };
1842
1937
  };
1843
1938
  const mappedField = mapAudienceFieldToContactField(field);
1939
+ if (field === 'tags' || mappedField === 'tags') {
1940
+ const tagOp = normalizeTagOp(opRaw);
1941
+ if (tagOp === 'contains' || tagOp === 'not_contains') {
1942
+ const expected = String(value ?? '').trim().toLowerCase();
1943
+ if (!expected)
1944
+ return false;
1945
+ const { data: tagsRow, error: tagsErr } = await this.supabase
1946
+ .from('contacts')
1947
+ .select('tags')
1948
+ .eq('organization_id', organizationId)
1949
+ .eq('project_id', projectId)
1950
+ .eq('id', contactId)
1951
+ .maybeSingle();
1952
+ if (tagsErr)
1953
+ return false;
1954
+ const tags = Array.isArray(tagsRow?.tags) ? tagsRow.tags : [];
1955
+ const hasMatch = tags.some((t) => String(t ?? '').toLowerCase().includes(expected));
1956
+ return tagOp === 'contains' ? hasMatch : !hasMatch;
1957
+ }
1958
+ const tagValues = normalizeTagValues(value);
1959
+ let tagQuery = this.supabase
1960
+ .from('contacts')
1961
+ .select('id')
1962
+ .eq('organization_id', organizationId)
1963
+ .eq('project_id', projectId)
1964
+ .eq('id', contactId);
1965
+ if (tagOp === 'equals') {
1966
+ if (tagValues.length === 0)
1967
+ return false;
1968
+ tagQuery = tagQuery.contains('tags', tagValues);
1969
+ }
1970
+ else if (tagOp === 'not_equals') {
1971
+ if (tagValues.length === 0)
1972
+ return false;
1973
+ const arrLiteral = `{${tagValues.join(',')}}`;
1974
+ tagQuery = tagQuery.or(`tags.is.null,tags.not.cs.${arrLiteral}`);
1975
+ }
1976
+ else if (tagOp === 'has_any') {
1977
+ if (tagValues.length === 0)
1978
+ return false;
1979
+ tagQuery = tagQuery.overlaps('tags', tagValues);
1980
+ }
1981
+ else if (tagOp === 'is_empty') {
1982
+ tagQuery = tagQuery.or('tags.is.null,tags.eq.{}');
1983
+ }
1984
+ else if (tagOp === 'is_not_empty') {
1985
+ tagQuery = tagQuery.not('tags', 'is', null).neq('tags', '{}');
1986
+ }
1987
+ else {
1988
+ return false;
1989
+ }
1990
+ const { data: tagData, error: tagErr } = await tagQuery;
1991
+ if (tagErr)
1992
+ return false;
1993
+ return Array.isArray(tagData) && tagData.length > 0;
1994
+ }
1844
1995
  const known = ['email', 'first_name', 'last_name', 'phone', 'is_subscribed', 'created_at', 'updated_at', 'name'];
1845
1996
  const isJsonb = !(known.includes(field) || known.includes(mappedField));
1846
1997
  const dbField = isJsonb ? `properties->>${field}` : mappedField;