@iann29/rastro 0.10.0 → 0.10.2
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/agent/manifest.json +1 -1
- package/dist/client/index.d.ts +6 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +9 -3
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +1 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/meta.d.ts +11 -5
- package/dist/component/meta.d.ts.map +1 -1
- package/dist/component/meta.js +88 -25
- package/dist/component/meta.js.map +1 -1
- package/dist/component/metaGraph.d.ts +0 -1
- package/dist/component/metaGraph.d.ts.map +1 -1
- package/dist/component/metaGraph.js +29 -16
- package/dist/component/metaGraph.js.map +1 -1
- package/dist/component/pipeline.d.ts +1 -0
- package/dist/component/pipeline.d.ts.map +1 -1
- package/dist/component/pipeline.js +18 -5
- package/dist/component/pipeline.js.map +1 -1
- package/dist/tracker/generated.d.ts +1 -1
- package/dist/tracker/generated.js +1 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +3 -2
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/integrations/AccountPicker.d.ts.map +1 -1
- package/dist/ui/integrations/AccountPicker.js +6 -2
- package/dist/ui/integrations/AccountPicker.js.map +1 -1
- package/dist/ui/integrations/ClientCards.d.ts.map +1 -1
- package/dist/ui/integrations/ClientCards.js +6 -2
- package/dist/ui/integrations/ClientCards.js.map +1 -1
- package/dist/ui/integrations/ClientsTable.d.ts.map +1 -1
- package/dist/ui/integrations/ClientsTable.js +26 -10
- package/dist/ui/integrations/ClientsTable.js.map +1 -1
- package/dist/ui/integrations/Connect.d.ts +8 -2
- package/dist/ui/integrations/Connect.d.ts.map +1 -1
- package/dist/ui/integrations/Connect.js +18 -5
- package/dist/ui/integrations/Connect.js.map +1 -1
- package/dist/ui/integrations/Connection.d.ts.map +1 -1
- package/dist/ui/integrations/Connection.js +18 -4
- package/dist/ui/integrations/Connection.js.map +1 -1
- package/dist/ui/integrations/Dialogs.d.ts +4 -1
- package/dist/ui/integrations/Dialogs.d.ts.map +1 -1
- package/dist/ui/integrations/Dialogs.js +13 -4
- package/dist/ui/integrations/Dialogs.js.map +1 -1
- package/dist/ui/integrations/EventsFeed.d.ts.map +1 -1
- package/dist/ui/integrations/EventsFeed.js +5 -1
- package/dist/ui/integrations/EventsFeed.js.map +1 -1
- package/dist/ui/integrations/EventsSheet.d.ts +9 -3
- package/dist/ui/integrations/EventsSheet.d.ts.map +1 -1
- package/dist/ui/integrations/EventsSheet.js +20 -5
- package/dist/ui/integrations/EventsSheet.js.map +1 -1
- package/dist/ui/integrations/Icons.d.ts +2 -0
- package/dist/ui/integrations/Icons.d.ts.map +1 -1
- package/dist/ui/integrations/Icons.js +2 -0
- package/dist/ui/integrations/Icons.js.map +1 -1
- package/dist/ui/integrations/IntegrationsView.d.ts +10 -9
- package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -1
- package/dist/ui/integrations/IntegrationsView.js +43 -15
- package/dist/ui/integrations/IntegrationsView.js.map +1 -1
- package/dist/ui/integrations/Overlay.js +1 -1
- package/dist/ui/integrations/Overlay.js.map +1 -1
- package/dist/ui/integrations/Partner.d.ts +14 -0
- package/dist/ui/integrations/Partner.d.ts.map +1 -0
- package/dist/ui/integrations/Partner.js +38 -0
- package/dist/ui/integrations/Partner.js.map +1 -0
- package/dist/ui/integrations/RowMenu.js +1 -1
- package/dist/ui/integrations/RowMenu.js.map +1 -1
- package/dist/ui/integrations/audience.d.ts +12 -0
- package/dist/ui/integrations/audience.d.ts.map +1 -0
- package/dist/ui/integrations/audience.js +12 -0
- package/dist/ui/integrations/audience.js.map +1 -0
- package/dist/ui/integrations/index.d.ts +2 -2
- package/dist/ui/integrations/index.d.ts.map +1 -1
- package/dist/ui/integrations/index.js +1 -1
- package/dist/ui/integrations/index.js.map +1 -1
- package/dist/ui/integrations/{overlay.d.ts → modal.d.ts} +1 -1
- package/dist/ui/integrations/modal.d.ts.map +1 -0
- package/dist/ui/integrations/{overlay.js → modal.js} +1 -1
- package/dist/ui/integrations/modal.js.map +1 -0
- package/dist/ui/integrations/model.d.ts +18 -3
- package/dist/ui/integrations/model.d.ts.map +1 -1
- package/dist/ui/integrations/model.js +35 -2
- package/dist/ui/integrations/model.js.map +1 -1
- package/dist/ui/integrations/types.d.ts +53 -3
- package/dist/ui/integrations/types.d.ts.map +1 -1
- package/dist/ui/sample.d.ts +62 -0
- package/dist/ui/sample.d.ts.map +1 -1
- package/dist/ui/sample.js +21 -0
- package/dist/ui/sample.js.map +1 -1
- package/dist/ui/ui.css +73 -5
- package/docs/meta-ads.md +53 -4
- package/docs/upgrading.md +27 -0
- package/package.json +1 -1
- package/src/component/_generated/component.ts +1 -0
- package/src/component/meta.ts +102 -31
- package/src/component/metaGraph.ts +35 -21
- package/src/component/pipeline.ts +23 -5
- package/src/tracker/generated.ts +1 -1
- package/dist/ui/integrations/overlay.d.ts.map +0 -1
- package/dist/ui/integrations/overlay.js.map +0 -1
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type QueryCtx,
|
|
8
8
|
} from "./_generated/server.js";
|
|
9
9
|
import { fail } from "./errors.js";
|
|
10
|
+
import { ownerKeyOf } from "./meta.js";
|
|
10
11
|
import { enqueueColumnEvent, type MetaUserData } from "./metaCapi.js";
|
|
11
12
|
import { cleanString } from "./sanitize.js";
|
|
12
13
|
import {
|
|
@@ -139,10 +140,30 @@ export const setEventMap = mutation({
|
|
|
139
140
|
siteId: v.id("sites"),
|
|
140
141
|
columns: v.record(v.string(), v.union(metaColumnEventValidator, v.null())),
|
|
141
142
|
sendLeadEvent: v.boolean(),
|
|
143
|
+
/**
|
|
144
|
+
* The owner saving the map. The map feeds the site's pixel, so whoever
|
|
145
|
+
* set the pixel decides it: with `ownerKey`, a pixel another owner (or
|
|
146
|
+
* the host) set is a `CONFLICT`. A site without a pixel takes anyone's.
|
|
147
|
+
*/
|
|
148
|
+
ownerKey: v.optional(v.string()),
|
|
142
149
|
},
|
|
143
150
|
returns: v.null(),
|
|
144
151
|
handler: async (ctx, args) => {
|
|
145
152
|
await requireSite(ctx, args.siteId);
|
|
153
|
+
const pixel = await ctx.db
|
|
154
|
+
.query("sitePixels")
|
|
155
|
+
.withIndex("by_siteId", (range) => range.eq("siteId", args.siteId))
|
|
156
|
+
.unique();
|
|
157
|
+
if (
|
|
158
|
+
args.ownerKey !== undefined &&
|
|
159
|
+
pixel &&
|
|
160
|
+
pixel.setBy !== ownerKeyOf(args.ownerKey)
|
|
161
|
+
) {
|
|
162
|
+
fail(
|
|
163
|
+
"CONFLICT",
|
|
164
|
+
"the site's pixel was set by another owner on this host; change its events there",
|
|
165
|
+
);
|
|
166
|
+
}
|
|
146
167
|
const existing = await pipelineOf(ctx, args.siteId);
|
|
147
168
|
const declared = new Set((existing?.columns ?? []).map((row) => row.key));
|
|
148
169
|
for (const key of Object.keys(args.columns)) {
|
|
@@ -174,14 +195,11 @@ export const setEventMap = mutation({
|
|
|
174
195
|
updatedAt: now,
|
|
175
196
|
});
|
|
176
197
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
.withIndex("by_siteId", (range) => range.eq("siteId", args.siteId))
|
|
180
|
-
.unique();
|
|
198
|
+
// `updatedAt` stays: it says when the pixel itself was set, which is what
|
|
199
|
+
// removing its owner compares against.
|
|
181
200
|
if (pixel && pixel.sendLeadEvent !== args.sendLeadEvent) {
|
|
182
201
|
await ctx.db.patch("sitePixels", pixel._id, {
|
|
183
202
|
sendLeadEvent: args.sendLeadEvent,
|
|
184
|
-
updatedAt: now,
|
|
185
203
|
});
|
|
186
204
|
}
|
|
187
205
|
return null;
|
package/src/tracker/generated.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Generated by scripts/build-tracker.mjs. Do not edit.
|
|
2
|
-
export const RASTRO_VERSION = "0.10.
|
|
2
|
+
export const RASTRO_VERSION = "0.10.2";
|
|
3
3
|
export const TRACKER_SOURCE = "(()=>{const t=document.currentScript,e=t?.dataset.site,i=t?.dataset.endpoint||t?.src&&new URL(\"events\",t.src).href;if(!e||!i)return;const n=()=>crypto.randomUUID?.()||Math.random()+\"\",r=new URLSearchParams(location.search),s=r.get(\"ref\")?.slice(0,64);let o;for(const t of[\"source\",\"medium\",\"campaign\",\"term\",\"content\"]){const e=r.get(\"utm_\"+t)?.slice(0,64);e&&((o??={})[\"utm_\"+t]=e)}const a=\"gclid gbraid wbraid msclkid ttclid twclid li_fat_id ScCid rdt_cid dclid epik srsltid mc_cid mc_eid _hsenc igsh igshid fbclid\".split(\" \").filter(t=>r.has(t)).slice(0,8);let c,d,l,h,f=t.dataset.visitor||\"\",p=Boolean(f);try{f||=localStorage._rv||=n()}catch{}try{d=sessionStorage,l=d._r,c=d._ri==f&&d._rt,h=s||d._a,h&&(d._a=h),o||=d._u&&JSON.parse(d._u),o&&(d._u=JSON.stringify(o))}catch{h=s}let v,g=0;const u=[];let m=document.referrer.split(\"/\",3).join(\"/\")||void 0;const _=t=>{const n=u.splice(0,50);if(!n.length)return;const r=()=>new Blob([JSON.stringify({siteId:e,events:n,sentAt:Date.now()})]);let s=r();for(;s.size>64e3&&n.length>1;)u.unshift(n.pop()),s=r();t&&navigator.sendBeacon(i,s)||fetch(i,{method:\"POST\",body:s,keepalive:1}).catch(()=>{}),u.length&&_(t)},y=(t,e,i)=>{const r=Date.now(),s=r-c;c=r,s<18e5||(l=n(),\"pageview\"!=t&&(S=\"\",w()));try{d._r=l,d._ri=f,d._rt=r}catch{}u.push({eventId:`${l}.${r.toString(36)}.${g}`,sessionId:l,visitorId:f||l,type:t,name:e,path:location.pathname.slice(0,256),referrer:m,timestamp:r,sequence:g++,affiliateSlug:h,...i}),clearTimeout(v),v=setTimeout(_,1200)};let S;const w=()=>{const t=location.pathname;t!=S&&(S=t,y(\"pageview\",void 0,{properties:o,clid:a.length?a:void 0}))};window.rastro=(e,i,r)=>{if(\"context\"==e)return{sessionId:l,visitorId:f||l,identified:p};if(\"identify\"==e||\"reset\"==e){if(\"identify\"==e&&(!i||i.length>128||!/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/.test(i)))return;if(\"identify\"==e&&i==f)return;_();const r=\"reset\"==e||p;if(p=\"identify\"==e,f=\"identify\"==e?i:n(),t.dataset.visitor=\"identify\"==e?f:\"\",r){h=void 0,o=void 0,m=void 0,a.length=0;try{\"reset\"==e&&(localStorage._rv=f),d._a=\"\",d._u=\"\"}catch{}}c=0,g=0,S=\"\",w()}\"event\"==e&&y(\"custom\",`${i||\"event\"}`.slice(0,80),r&&JSON.stringify(r).length>2e4?void 0:{properties:r})},document.addEventListener(\"click\",t=>{const e=t.target?.closest(\"a,button,[data-rastro-event]\");if(!e)return;const i=e.dataset.rastroEvent,n=e.href,r=n&&new URL(n),s=/^https?:$/.test(r?.protocol),o=s&&r.origin!=location.origin;y(i?\"custom\":o?\"outbound\":\"click\",i,{target:(e.dataset.rastroLabel||e.innerText||e.tagName).slice(0,64),href:s?((o?r.origin:\"\")+r.pathname).slice(0,256):void 0})},1);for(const t of[\"pushState\",\"replaceState\"]){const e=history[t];history[t]=(...t)=>{e.apply(history,t),w()}}addEventListener(\"popstate\",w);let b=0;const I=()=>{y(\"heartbeat\"),_()},L=()=>{b&&(clearInterval(b),b=0,y(\"leave\"),_(1))},E=()=>{document.hidden?L():b||(I(),b=setInterval(I,2e4))};addEventListener(\"pagehide\",L),addEventListener(\"pageshow\",E),document.addEventListener(\"visibilitychange\",E),b=setInterval(I,2e4),w(),E()})();";
|
|
4
4
|
export const TRACKER_GZIP_BASE64 = "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";
|
|
5
5
|
export const TRACKER_RAW_BYTES = 2999;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpE;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,OAAO,EAAE,MAAM,IAAI,EACnB,OAAO,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,QA2CxC;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,EAClD,OAAO,EAAE,MAAM,IAAI,QAsBpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/ui/integrations/overlay.ts"],"names":[],"mappings":"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"}
|