@walkeros/server-destination-gcp 4.7.0 → 4.7.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @walkeros/server-destination-gcp
2
2
 
3
+ ## 4.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [0635330]
8
+ - Updated dependencies [91e9aeb]
9
+ - @walkeros/core@4.7.1
10
+ - @walkeros/server-core@4.7.1
11
+
3
12
  ## 4.7.0
4
13
 
5
14
  ### Minor Changes
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,r)=>{for(var s in r)t(e,s,{get:r[s],enumerable:!0})},a={};o(a,{examples:()=>n,exportExamples:()=>ue,exportSchemas:()=>pe,hints:()=>ce,pubsubExamples:()=>D,schemas:()=>le}),module.exports=(e=a,((e,o,a,n)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let l of s(o))i.call(e,l)||l===a||t(e,l,{get:()=>o[l],enumerable:!(n=r(o,l))||n.enumerable});return e})(t({},"__esModule",{value:!0}),e));var n={};o(n,{env:()=>l,step:()=>k});var l={};o(l,{push:()=>S,simulation:()=>w});var c=require("events"),u=[],p=null,d=null,g=null,m=null,b=class extends c.EventEmitter{streamId;constructor(e){super(),this.streamId=e}getStreamId(){return this.streamId}onConnectionError(e){return u.push({method:"onConnectionError",args:[]}),this.on("error",e),{off:()=>{this.off("error",e)}}}__emitConnectionError(e){this.emit("error",e)}},h=[],y={convertStorageSchemaToProto2Descriptor:(e,t)=>(u.push({method:"adapt.convertStorageSchemaToProto2Descriptor",args:[e,t]}),{name:"root",field:[]})},v=class{constructor(e){u.push({method:"WriterClient.ctor",args:[e]})}async createStreamConnection(e,t){if("DEFAULT"!==e.streamId)throw new Error(`mock createStreamConnection: expected streamId='DEFAULT', got ${JSON.stringify(e)}`);u.push({method:"createStreamConnection",args:[e,t]});const r=m;if(null!==r)throw m=null,r;const s=new b(`${e.destinationTable}/streams/_default`);return h.push(s),s}async getWriteStream(e,t){return u.push({method:"getWriteStream",args:[e,t]}),{tableSchema:{fields:[]}}}close(){u.push({method:"WriterClient.close",args:[]})}},f=class{constructor(e){u.push({method:"JSONWriter.ctor",args:[e]})}appendRows(e,t){u.push({method:"appendRows",args:[e,t]});const r=d;if(null!==r)throw d=null,r;const s=p;p=null;const i=g;return g=null,{getResult:async()=>{if(null!==i)throw i;return{appendResult:{offset:{value:"0"}},rowErrors:s??[],writeStream:"projects/p/datasets/d/tables/t/streams/_default"}}}}close(){u.push({method:"JSONWriter.close",args:[]})}};var S={get BigQuery(){return class{calls;options;constructor(e){this.options=e,this.calls=[]}dataset(e){return this.calls.push({method:"dataset",args:[e]}),this}table(e){return this.calls.push({method:"table",args:[e]}),this}async exists(){return this.calls.push({method:"exists",args:[]}),[!0]}async create(e){this.calls.push({method:"create",args:[e]})}async getMetadata(){return this.calls.push({method:"getMetadata",args:[]}),[{}]}}},get WriterClient(){return v},get JSONWriter(){return f},get adapt(){return y}},w=["call:JSONWriter.appendRows"],k={};o(k,{pageView:()=>A,purchase:()=>C});var j=require("@walkeros/core");function O(e){return null==e?null:"object"==typeof e?Array.isArray(e)&&0===e.length?null:Array.isArray(e)||0!==Object.keys(e).length?JSON.stringify(e):null:JSON.stringify(e)}function z(e){return function(e){return{name:e.name,data:O(e.data),context:O(e.context),globals:O(e.globals),custom:O(e.custom),user:O(e.user),nested:O(e.nested),consent:O(e.consent),id:e.id,trigger:e.trigger,entity:e.entity,action:e.action,timestamp:1e3*new Date(e.timestamp).getTime(),timing:e.timing,source:O(e.source)}}(e)}var P=(0,j.getEvent)("page view",{timestamp:1700001100,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server"}}),A={title:"Page view",description:"A page view is appended as one row through the BigQuery Storage Write API JSONWriter. Nested objects/arrays in data, source, etc. are JSON-stringified by eventToRow.",in:P,mapping:void 0,out:[["appendRows",[z(P)]]]},E=(0,j.getEvent)("order complete",{timestamp:1700001101,data:{id:"ORD-500",total:199.99,items:[{sku:"SKU-1",qty:2}]},source:{type:"express",platform:"server"}}),C={title:"Purchase",description:"An order event is appended as a single row through JSONWriter.appendRows. The entire nested data object (including arrays like items) is JSON-stringified into the data column via eventToRow().",in:E,mapping:void 0,out:[["appendRows",[z(E)]]]},D={};o(D,{env:()=>T,step:()=>R});var T={};o(T,{push:()=>x,simulation:()=>N});var I=class{constructor(e){this.name=e}name;publishMessage(e){return Promise.resolve("mock-message-id")}resumePublishing(e){}},x={PubSub:class{constructor(e){this.options=e}options;topic(e){return new I(e)}close(){return Promise.resolve()}}},N=["call:PubSub.topic.publishMessage"],R={};o(R,{defaultPush:()=>_,mappedAttributes:()=>K,mappedData:()=>U,mappedOrderingKey:()=>W,mappedTopic:()=>Q,pageView:()=>F});var M=require("@walkeros/core"),q=(0,M.getEvent)("order complete",{timestamp:1700001100,data:{id:"ORD-500",total:199.99,currency:"EUR"},user:{id:"usr-789"},source:{type:"express",platform:"server",trace:"1a2b3c4d5e6f70819a2b3c4d5e6f7081",count:1}}),J=(0,M.getEvent)("page view",{timestamp:1700001101,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server",trace:"9f8e7d6c5b4a39281706f5e4d3c2b1a0",count:1}});function B(e){const t=e.source.platform??"default",r={...e,source:{...e.source,release:{[t]:"4.7.0"}}};return Buffer.from(JSON.stringify(r))}var _={title:"Default publish",description:"An event is published to the configured Pub/Sub topic with the full JSON event as the message body and no ordering key.",in:q,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(q)}]]},Q={title:"Topic override",description:"A mapping rule overrides the destination default topic so order events are published to a dedicated topic.",in:q,mapping:{settings:{topic:"orders"}},out:[["topic","orders",{messageOrdering:!1}],["publishMessage","orders",{data:B(q)}]]},W={title:"Ordering key from user",description:"A mapping resolves the ordering key from event.user.id, enabling per-user ordering for this publish.",in:q,mapping:{settings:{orderingKey:"user.id"}},out:[["topic","events",{messageOrdering:!0}],["publishMessage","events",{data:B(q),orderingKey:"usr-789"}]]},K={title:"Mapped attributes",description:"A mapping resolves a per-event attribute map, here exposing entity and action as Pub/Sub attributes for routing in subscribers.",in:q,mapping:{settings:{attributes:{entity:"entity",action:"action"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(q),attributes:{entity:"order",action:"complete"}}]]},U={title:"Mapped payload",description:"A data mapping transforms the event payload before publish. The rewritten object becomes the Pub/Sub message body.",in:q,mapping:{data:{map:{order_id:"data.id",revenue:"data.total",currency:"data.currency"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:Buffer.from(JSON.stringify({order_id:"ORD-500",revenue:199.99,currency:"EUR"}))}]]},F={title:"Page view",description:"A page view is published to the default topic with no ordering key, demonstrating the simplest publish path.",in:J,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(J)}]]},G=require("@walkeros/core/dev"),L=require("@walkeros/core/dev"),V=L.z.object({client:L.z.any().describe("Google Cloud BigQuery client instance (like new BigQuery({ projectId, keyFilename }))").optional(),projectId:L.z.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),datasetId:L.z.string().min(1).default("walkerOS").describe("BigQuery dataset ID where events will be stored (like walker_events)"),tableId:L.z.string().min(1).default("events").describe("BigQuery table ID for event storage (like events)"),location:L.z.string().default("EU").describe("Geographic location for the BigQuery dataset (like US)"),bigquery:L.z.any().describe('Additional BigQuery client configuration options (like { keyFilename: "path/to/key.json" })').optional()}),$=require("@walkeros/core/dev").z.object({}),X=(0,G.zodToSchema)(V),H=(0,G.zodToSchema)($),Y=require("@walkeros/core/dev"),Z=require("@walkeros/core/dev"),ee=Z.z.object({client:Z.z.any().describe("Google Cloud Pub/Sub client instance (like new PubSub({ projectId, keyFilename }))").optional(),projectId:Z.z.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),topic:Z.z.string().min(1).describe("Pub/Sub topic short name (like events). The full resource name projects/<projectId>/topics/<topic> is built by the SDK."),credentials:Z.z.any().describe("Service account credentials as a JSON string or an object with client_email and private_key. Default: Application Default Credentials (ADC). (deprecated: use config.credentials)").optional(),apiEndpoint:Z.z.string().describe("Override Pub/Sub API endpoint. Useful for the local emulator (like localhost:8085).").optional(),orderingKey:Z.z.any().describe("Mapping value resolved per-event. Truthy enables per-key ordering for the publish.").optional(),attributes:Z.z.any().describe("Default per-event attribute map merged into every published message. Mapping.Map shape.").optional()}),te=require("@walkeros/core/dev"),re=te.z.object({topic:te.z.string().describe("Per-rule topic override. Falls back to settings.topic if absent.").optional(),orderingKey:te.z.any().describe("Per-rule ordering-key Mapping.Value. Overrides settings.orderingKey when set.").optional(),attributes:te.z.any().describe("Per-rule attribute Mapping.Map merged on top of settings.attributes.").optional()}),se=require("@walkeros/core/dev"),ie=se.z.object({messageStoragePolicy:se.z.object({allowedPersistenceRegions:se.z.array(se.z.string()).describe("Geographic regions for at-rest message storage. Default: EU multi-region (eu-west1, eu-west3, eu-west4).")}).describe("Topic-level message storage policy.").optional(),messageRetentionDuration:se.z.object({seconds:se.z.number().describe("Retention window in seconds. Default: project default.")}).describe("Topic-level retention configuration.").optional(),kmsKeyName:se.z.string().describe("Customer-managed encryption key (CMEK) resource name. Optional.").optional(),labels:se.z.record(se.z.string(),se.z.string()).describe("Topic labels for organization and billing.").optional()}),oe=(0,Y.zodToSchema)(ee),ae=(0,Y.zodToSchema)(re),ne=(0,Y.zodToSchema)(ie),le={};o(le,{mapping:()=>H,pubsubMapping:()=>ae,pubsubSettings:()=>oe,pubsubSetup:()=>ne,settings:()=>X});var ce={"auth-methods":{text:'Supports three auth methods: SA key file via bigquery options ({ bigquery: { keyFilename: "./sa.json" } }), Application Default Credentials (automatic on GCP infrastructure — just provide projectId), or a pre-configured BigQuery client instance (client option). See settings schema for all options.',code:[{lang:"json",code:'{ "settings": { "projectId": "my-project", "bigquery": { "keyFilename": "./sa.json" } } }'},{lang:"json",code:'{ "settings": { "projectId": "my-project" } }'}]},"storage-format":{text:'All events are stored in a single table. Scalar fields (strings, numbers, booleans) are stored as-is. Nested objects and arrays are JSON-stringified automatically. Defaults: dataset "walkeros", table "events", location "EU" — all overridable via settings.'},"query-json-columns":{text:"Nested event fields (data, context, globals, user) are stored as JSON strings. Use BigQuery JSON_EXTRACT_SCALAR to query them. Field paths follow the walkerOS event structure.",code:[{lang:"sql",code:"SELECT JSON_EXTRACT_SCALAR(data, '$.total') AS total FROM `project.walkeros.events` WHERE entity = 'order'"}]},"troubleshoot-empty-table":{text:"Events not appearing? Common causes: projectId doesn't match GCP project, dataset doesn't exist yet (create via BigQuery console or bq CLI before first push), or SA key lacks bigquery.dataEditor role. The destination validates client/datasetId/tableId at push time but GCP permission errors surface from the BigQuery SDK."}},ue={destinationBigQuery:n,destinationPubSub:D},pe={destinationBigQuery:{settings:X,mapping:H},destinationPubSub:{settings:oe,mapping:ae,setup:ne}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,r)=>{for(var s in r)t(e,s,{get:r[s],enumerable:!0})},a={};o(a,{examples:()=>n,exportExamples:()=>ue,exportSchemas:()=>pe,hints:()=>ce,pubsubExamples:()=>D,schemas:()=>le}),module.exports=(e=a,((e,o,a,n)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let l of s(o))i.call(e,l)||l===a||t(e,l,{get:()=>o[l],enumerable:!(n=r(o,l))||n.enumerable});return e})(t({},"__esModule",{value:!0}),e));var n={};o(n,{env:()=>l,step:()=>k});var l={};o(l,{push:()=>S,simulation:()=>w});var c=require("events"),u=[],p=null,d=null,g=null,m=null,b=class extends c.EventEmitter{streamId;constructor(e){super(),this.streamId=e}getStreamId(){return this.streamId}onConnectionError(e){return u.push({method:"onConnectionError",args:[]}),this.on("error",e),{off:()=>{this.off("error",e)}}}__emitConnectionError(e){this.emit("error",e)}},h=[],y={convertStorageSchemaToProto2Descriptor:(e,t)=>(u.push({method:"adapt.convertStorageSchemaToProto2Descriptor",args:[e,t]}),{name:"root",field:[]})},v=class{constructor(e){u.push({method:"WriterClient.ctor",args:[e]})}async createStreamConnection(e,t){if("DEFAULT"!==e.streamId)throw new Error(`mock createStreamConnection: expected streamId='DEFAULT', got ${JSON.stringify(e)}`);u.push({method:"createStreamConnection",args:[e,t]});const r=m;if(null!==r)throw m=null,r;const s=new b(`${e.destinationTable}/streams/_default`);return h.push(s),s}async getWriteStream(e,t){return u.push({method:"getWriteStream",args:[e,t]}),{tableSchema:{fields:[]}}}close(){u.push({method:"WriterClient.close",args:[]})}},f=class{constructor(e){u.push({method:"JSONWriter.ctor",args:[e]})}appendRows(e,t){u.push({method:"appendRows",args:[e,t]});const r=d;if(null!==r)throw d=null,r;const s=p;p=null;const i=g;return g=null,{getResult:async()=>{if(null!==i)throw i;return{appendResult:{offset:{value:"0"}},rowErrors:s??[],writeStream:"projects/p/datasets/d/tables/t/streams/_default"}}}}close(){u.push({method:"JSONWriter.close",args:[]})}};var S={get BigQuery(){return class{calls;options;constructor(e){this.options=e,this.calls=[]}dataset(e){return this.calls.push({method:"dataset",args:[e]}),this}table(e){return this.calls.push({method:"table",args:[e]}),this}async exists(){return this.calls.push({method:"exists",args:[]}),[!0]}async create(e){this.calls.push({method:"create",args:[e]})}async getMetadata(){return this.calls.push({method:"getMetadata",args:[]}),[{}]}}},get WriterClient(){return v},get JSONWriter(){return f},get adapt(){return y}},w=["call:JSONWriter.appendRows"],k={};o(k,{pageView:()=>A,purchase:()=>C});var j=require("@walkeros/core");function O(e){return null==e?null:"object"==typeof e?Array.isArray(e)&&0===e.length?null:Array.isArray(e)||0!==Object.keys(e).length?JSON.stringify(e):null:JSON.stringify(e)}function z(e){return function(e){return{name:e.name,data:O(e.data),context:O(e.context),globals:O(e.globals),custom:O(e.custom),user:O(e.user),nested:O(e.nested),consent:O(e.consent),id:e.id,trigger:e.trigger,entity:e.entity,action:e.action,timestamp:1e3*new Date(e.timestamp).getTime(),timing:e.timing,source:O(e.source)}}(e)}var P=(0,j.getEvent)("page view",{timestamp:1700001100,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server"}}),A={title:"Page view",description:"A page view is appended as one row through the BigQuery Storage Write API JSONWriter. Nested objects/arrays in data, source, etc. are JSON-stringified by eventToRow.",in:P,mapping:void 0,out:[["appendRows",[z(P)]]]},E=(0,j.getEvent)("order complete",{timestamp:1700001101,data:{id:"ORD-500",total:199.99,items:[{sku:"SKU-1",qty:2}]},source:{type:"express",platform:"server"}}),C={title:"Purchase",description:"An order event is appended as a single row through JSONWriter.appendRows. The entire nested data object (including arrays like items) is JSON-stringified into the data column via eventToRow().",in:E,mapping:void 0,out:[["appendRows",[z(E)]]]},D={};o(D,{env:()=>T,step:()=>R});var T={};o(T,{push:()=>x,simulation:()=>N});var I=class{constructor(e){this.name=e}name;publishMessage(e){return Promise.resolve("mock-message-id")}resumePublishing(e){}},x={PubSub:class{constructor(e){this.options=e}options;topic(e){return new I(e)}close(){return Promise.resolve()}}},N=["call:PubSub.topic.publishMessage"],R={};o(R,{defaultPush:()=>_,mappedAttributes:()=>K,mappedData:()=>U,mappedOrderingKey:()=>W,mappedTopic:()=>Q,pageView:()=>F});var M=require("@walkeros/core"),q=(0,M.getEvent)("order complete",{timestamp:1700001100,data:{id:"ORD-500",total:199.99,currency:"EUR"},user:{id:"usr-789"},source:{type:"express",platform:"server",trace:"1a2b3c4d5e6f70819a2b3c4d5e6f7081",count:1}}),J=(0,M.getEvent)("page view",{timestamp:1700001101,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server",trace:"9f8e7d6c5b4a39281706f5e4d3c2b1a0",count:1}});function B(e){const t=e.source.platform??"default",r={...e,source:{...e.source,release:{[t]:"4.7.1"}}};return Buffer.from(JSON.stringify(r))}var _={title:"Default publish",description:"An event is published to the configured Pub/Sub topic with the full JSON event as the message body and no ordering key.",in:q,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(q)}]]},Q={title:"Topic override",description:"A mapping rule overrides the destination default topic so order events are published to a dedicated topic.",in:q,mapping:{settings:{topic:"orders"}},out:[["topic","orders",{messageOrdering:!1}],["publishMessage","orders",{data:B(q)}]]},W={title:"Ordering key from user",description:"A mapping resolves the ordering key from event.user.id, enabling per-user ordering for this publish.",in:q,mapping:{settings:{orderingKey:"user.id"}},out:[["topic","events",{messageOrdering:!0}],["publishMessage","events",{data:B(q),orderingKey:"usr-789"}]]},K={title:"Mapped attributes",description:"A mapping resolves a per-event attribute map, here exposing entity and action as Pub/Sub attributes for routing in subscribers.",in:q,mapping:{settings:{attributes:{entity:"entity",action:"action"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(q),attributes:{entity:"order",action:"complete"}}]]},U={title:"Mapped payload",description:"A data mapping transforms the event payload before publish. The rewritten object becomes the Pub/Sub message body.",in:q,mapping:{data:{map:{order_id:"data.id",revenue:"data.total",currency:"data.currency"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:Buffer.from(JSON.stringify({order_id:"ORD-500",revenue:199.99,currency:"EUR"}))}]]},F={title:"Page view",description:"A page view is published to the default topic with no ordering key, demonstrating the simplest publish path.",in:J,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:B(J)}]]},G=require("@walkeros/core/dev"),L=require("@walkeros/core/dev"),V=L.z.object({client:L.z.any().describe("Google Cloud BigQuery client instance (like new BigQuery({ projectId, keyFilename }))").optional(),projectId:L.z.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),datasetId:L.z.string().min(1).default("walkerOS").describe("BigQuery dataset ID where events will be stored (like walker_events)"),tableId:L.z.string().min(1).default("events").describe("BigQuery table ID for event storage (like events)"),location:L.z.string().default("EU").describe("Geographic location for the BigQuery dataset (like US)"),bigquery:L.z.any().describe('Additional BigQuery client configuration options (like { keyFilename: "path/to/key.json" })').optional()}),$=require("@walkeros/core/dev").z.object({}),X=(0,G.zodToSchema)(V),H=(0,G.zodToSchema)($),Y=require("@walkeros/core/dev"),Z=require("@walkeros/core/dev"),ee=Z.z.object({client:Z.z.any().describe("Google Cloud Pub/Sub client instance (like new PubSub({ projectId, keyFilename }))").optional(),projectId:Z.z.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),topic:Z.z.string().min(1).describe("Pub/Sub topic short name (like events). The full resource name projects/<projectId>/topics/<topic> is built by the SDK."),credentials:Z.z.any().describe("Service account credentials as a JSON string or an object with client_email and private_key. Default: Application Default Credentials (ADC). (deprecated: use config.credentials)").optional(),apiEndpoint:Z.z.string().describe("Override Pub/Sub API endpoint. Useful for the local emulator (like localhost:8085).").optional(),orderingKey:Z.z.any().describe("Mapping value resolved per-event. Truthy enables per-key ordering for the publish.").optional(),attributes:Z.z.any().describe("Default per-event attribute map merged into every published message. Mapping.Map shape.").optional()}),te=require("@walkeros/core/dev"),re=te.z.object({topic:te.z.string().describe("Per-rule topic override. Falls back to settings.topic if absent.").optional(),orderingKey:te.z.any().describe("Per-rule ordering-key Mapping.Value. Overrides settings.orderingKey when set.").optional(),attributes:te.z.any().describe("Per-rule attribute Mapping.Map merged on top of settings.attributes.").optional()}),se=require("@walkeros/core/dev"),ie=se.z.object({messageStoragePolicy:se.z.object({allowedPersistenceRegions:se.z.array(se.z.string()).describe("Geographic regions for at-rest message storage. Default: EU multi-region (eu-west1, eu-west3, eu-west4).")}).describe("Topic-level message storage policy.").optional(),messageRetentionDuration:se.z.object({seconds:se.z.number().describe("Retention window in seconds. Default: project default.")}).describe("Topic-level retention configuration.").optional(),kmsKeyName:se.z.string().describe("Customer-managed encryption key (CMEK) resource name. Optional.").optional(),labels:se.z.record(se.z.string(),se.z.string()).describe("Topic labels for organization and billing.").optional()}),oe=(0,Y.zodToSchema)(ee),ae=(0,Y.zodToSchema)(re),ne=(0,Y.zodToSchema)(ie),le={};o(le,{mapping:()=>H,pubsubMapping:()=>ae,pubsubSettings:()=>oe,pubsubSetup:()=>ne,settings:()=>X});var ce={"auth-methods":{text:'Supports three auth methods: SA key file via bigquery options ({ bigquery: { keyFilename: "./sa.json" } }), Application Default Credentials (automatic on GCP infrastructure — just provide projectId), or a pre-configured BigQuery client instance (client option). See settings schema for all options.',code:[{lang:"json",code:'{ "settings": { "projectId": "my-project", "bigquery": { "keyFilename": "./sa.json" } } }'},{lang:"json",code:'{ "settings": { "projectId": "my-project" } }'}]},"storage-format":{text:'All events are stored in a single table. Scalar fields (strings, numbers, booleans) are stored as-is. Nested objects and arrays are JSON-stringified automatically. Defaults: dataset "walkeros", table "events", location "EU" — all overridable via settings.'},"query-json-columns":{text:"Nested event fields (data, context, globals, user) are stored as JSON strings. Use BigQuery JSON_EXTRACT_SCALAR to query them. Field paths follow the walkerOS event structure.",code:[{lang:"sql",code:"SELECT JSON_EXTRACT_SCALAR(data, '$.total') AS total FROM `project.walkeros.events` WHERE entity = 'order'"}]},"troubleshoot-empty-table":{text:"Events not appearing? Common causes: projectId doesn't match GCP project, dataset doesn't exist yet (create via BigQuery console or bq CLI before first push), or SA key lacks bigquery.dataEditor role. The destination validates client/datasetId/tableId at push time but GCP permission errors surface from the BigQuery SDK."}},ue={destinationBigQuery:n,destinationPubSub:D},pe={destinationBigQuery:{settings:X,mapping:H},destinationPubSub:{settings:oe,mapping:ae,setup:ne}};//# sourceMappingURL=dev.js.map
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})},r={};t(r,{env:()=>s,step:()=>y});var s={};t(s,{push:()=>b,simulation:()=>h});import{EventEmitter as i}from"events";var o=[],a=null,n=null,l=null,c=null,p=class extends i{streamId;constructor(e){super(),this.streamId=e}getStreamId(){return this.streamId}onConnectionError(e){return o.push({method:"onConnectionError",args:[]}),this.on("error",e),{off:()=>{this.off("error",e)}}}__emitConnectionError(e){this.emit("error",e)}},d=[],u={convertStorageSchemaToProto2Descriptor:(e,t)=>(o.push({method:"adapt.convertStorageSchemaToProto2Descriptor",args:[e,t]}),{name:"root",field:[]})},g=class{constructor(e){o.push({method:"WriterClient.ctor",args:[e]})}async createStreamConnection(e,t){if("DEFAULT"!==e.streamId)throw new Error(`mock createStreamConnection: expected streamId='DEFAULT', got ${JSON.stringify(e)}`);o.push({method:"createStreamConnection",args:[e,t]});const r=c;if(null!==r)throw c=null,r;const s=new p(`${e.destinationTable}/streams/_default`);return d.push(s),s}async getWriteStream(e,t){return o.push({method:"getWriteStream",args:[e,t]}),{tableSchema:{fields:[]}}}close(){o.push({method:"WriterClient.close",args:[]})}},m=class{constructor(e){o.push({method:"JSONWriter.ctor",args:[e]})}appendRows(e,t){o.push({method:"appendRows",args:[e,t]});const r=n;if(null!==r)throw n=null,r;const s=a;a=null;const i=l;return l=null,{getResult:async()=>{if(null!==i)throw i;return{appendResult:{offset:{value:"0"}},rowErrors:s??[],writeStream:"projects/p/datasets/d/tables/t/streams/_default"}}}}close(){o.push({method:"JSONWriter.close",args:[]})}};var b={get BigQuery(){return class{calls;options;constructor(e){this.options=e,this.calls=[]}dataset(e){return this.calls.push({method:"dataset",args:[e]}),this}table(e){return this.calls.push({method:"table",args:[e]}),this}async exists(){return this.calls.push({method:"exists",args:[]}),[!0]}async create(e){this.calls.push({method:"create",args:[e]})}async getMetadata(){return this.calls.push({method:"getMetadata",args:[]}),[{}]}}},get WriterClient(){return g},get JSONWriter(){return m},get adapt(){return u}},h=["call:JSONWriter.appendRows"],y={};t(y,{pageView:()=>k,purchase:()=>O});import{getEvent as f}from"@walkeros/core";function v(e){return null==e?null:"object"==typeof e?Array.isArray(e)&&0===e.length?null:Array.isArray(e)||0!==Object.keys(e).length?JSON.stringify(e):null:JSON.stringify(e)}function S(e){return function(e){return{name:e.name,data:v(e.data),context:v(e.context),globals:v(e.globals),custom:v(e.custom),user:v(e.user),nested:v(e.nested),consent:v(e.consent),id:e.id,trigger:e.trigger,entity:e.entity,action:e.action,timestamp:1e3*new Date(e.timestamp).getTime(),timing:e.timing,source:v(e.source)}}(e)}var w=f("page view",{timestamp:1700001100,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server"}}),k={title:"Page view",description:"A page view is appended as one row through the BigQuery Storage Write API JSONWriter. Nested objects/arrays in data, source, etc. are JSON-stringified by eventToRow.",in:w,mapping:void 0,out:[["appendRows",[S(w)]]]},j=f("order complete",{timestamp:1700001101,data:{id:"ORD-500",total:199.99,items:[{sku:"SKU-1",qty:2}]},source:{type:"express",platform:"server"}}),O={title:"Purchase",description:"An order event is appended as a single row through JSONWriter.appendRows. The entire nested data object (including arrays like items) is JSON-stringified into the data column via eventToRow().",in:j,mapping:void 0,out:[["appendRows",[S(j)]]]},P={};t(P,{env:()=>A,step:()=>E});var A={};t(A,{push:()=>D,simulation:()=>I});var C=class{constructor(e){this.name=e}name;publishMessage(e){return Promise.resolve("mock-message-id")}resumePublishing(e){}},D={PubSub:class{constructor(e){this.options=e}options;topic(e){return new C(e)}close(){return Promise.resolve()}}},I=["call:PubSub.topic.publishMessage"],E={};t(E,{defaultPush:()=>M,mappedAttributes:()=>Q,mappedData:()=>W,mappedOrderingKey:()=>B,mappedTopic:()=>J,pageView:()=>_});import{getEvent as R}from"@walkeros/core";var T=R("order complete",{timestamp:1700001100,data:{id:"ORD-500",total:199.99,currency:"EUR"},user:{id:"usr-789"},source:{type:"express",platform:"server",trace:"1a2b3c4d5e6f70819a2b3c4d5e6f7081",count:1}}),N=R("page view",{timestamp:1700001101,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server",trace:"9f8e7d6c5b4a39281706f5e4d3c2b1a0",count:1}});function x(e){const t=e.source.platform??"default",r={...e,source:{...e.source,release:{[t]:"4.7.0"}}};return Buffer.from(JSON.stringify(r))}var M={title:"Default publish",description:"An event is published to the configured Pub/Sub topic with the full JSON event as the message body and no ordering key.",in:T,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(T)}]]},J={title:"Topic override",description:"A mapping rule overrides the destination default topic so order events are published to a dedicated topic.",in:T,mapping:{settings:{topic:"orders"}},out:[["topic","orders",{messageOrdering:!1}],["publishMessage","orders",{data:x(T)}]]},B={title:"Ordering key from user",description:"A mapping resolves the ordering key from event.user.id, enabling per-user ordering for this publish.",in:T,mapping:{settings:{orderingKey:"user.id"}},out:[["topic","events",{messageOrdering:!0}],["publishMessage","events",{data:x(T),orderingKey:"usr-789"}]]},Q={title:"Mapped attributes",description:"A mapping resolves a per-event attribute map, here exposing entity and action as Pub/Sub attributes for routing in subscribers.",in:T,mapping:{settings:{attributes:{entity:"entity",action:"action"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(T),attributes:{entity:"order",action:"complete"}}]]},W={title:"Mapped payload",description:"A data mapping transforms the event payload before publish. The rewritten object becomes the Pub/Sub message body.",in:T,mapping:{data:{map:{order_id:"data.id",revenue:"data.total",currency:"data.currency"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:Buffer.from(JSON.stringify({order_id:"ORD-500",revenue:199.99,currency:"EUR"}))}]]},_={title:"Page view",description:"A page view is published to the default topic with no ordering key, demonstrating the simplest publish path.",in:N,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(N)}]]};import{zodToSchema as K}from"@walkeros/core/dev";import{z as U}from"@walkeros/core/dev";var q=U.object({client:U.any().describe("Google Cloud BigQuery client instance (like new BigQuery({ projectId, keyFilename }))").optional(),projectId:U.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),datasetId:U.string().min(1).default("walkerOS").describe("BigQuery dataset ID where events will be stored (like walker_events)"),tableId:U.string().min(1).default("events").describe("BigQuery table ID for event storage (like events)"),location:U.string().default("EU").describe("Geographic location for the BigQuery dataset (like US)"),bigquery:U.any().describe('Additional BigQuery client configuration options (like { keyFilename: "path/to/key.json" })').optional()});import{z as F}from"@walkeros/core/dev";var G=F.object({}),z=K(q),L=K(G);import{zodToSchema as V}from"@walkeros/core/dev";import{z as $}from"@walkeros/core/dev";var X=$.object({client:$.any().describe("Google Cloud Pub/Sub client instance (like new PubSub({ projectId, keyFilename }))").optional(),projectId:$.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),topic:$.string().min(1).describe("Pub/Sub topic short name (like events). The full resource name projects/<projectId>/topics/<topic> is built by the SDK."),credentials:$.any().describe("Service account credentials as a JSON string or an object with client_email and private_key. Default: Application Default Credentials (ADC). (deprecated: use config.credentials)").optional(),apiEndpoint:$.string().describe("Override Pub/Sub API endpoint. Useful for the local emulator (like localhost:8085).").optional(),orderingKey:$.any().describe("Mapping value resolved per-event. Truthy enables per-key ordering for the publish.").optional(),attributes:$.any().describe("Default per-event attribute map merged into every published message. Mapping.Map shape.").optional()});import{z as H}from"@walkeros/core/dev";var Y=H.object({topic:H.string().describe("Per-rule topic override. Falls back to settings.topic if absent.").optional(),orderingKey:H.any().describe("Per-rule ordering-key Mapping.Value. Overrides settings.orderingKey when set.").optional(),attributes:H.any().describe("Per-rule attribute Mapping.Map merged on top of settings.attributes.").optional()});import{z as Z}from"@walkeros/core/dev";var ee=Z.object({messageStoragePolicy:Z.object({allowedPersistenceRegions:Z.array(Z.string()).describe("Geographic regions for at-rest message storage. Default: EU multi-region (eu-west1, eu-west3, eu-west4).")}).describe("Topic-level message storage policy.").optional(),messageRetentionDuration:Z.object({seconds:Z.number().describe("Retention window in seconds. Default: project default.")}).describe("Topic-level retention configuration.").optional(),kmsKeyName:Z.string().describe("Customer-managed encryption key (CMEK) resource name. Optional.").optional(),labels:Z.record(Z.string(),Z.string()).describe("Topic labels for organization and billing.").optional()}),te=V(X),re=V(Y),se=V(ee),ie={};t(ie,{mapping:()=>L,pubsubMapping:()=>re,pubsubSettings:()=>te,pubsubSetup:()=>se,settings:()=>z});var oe={"auth-methods":{text:'Supports three auth methods: SA key file via bigquery options ({ bigquery: { keyFilename: "./sa.json" } }), Application Default Credentials (automatic on GCP infrastructure — just provide projectId), or a pre-configured BigQuery client instance (client option). See settings schema for all options.',code:[{lang:"json",code:'{ "settings": { "projectId": "my-project", "bigquery": { "keyFilename": "./sa.json" } } }'},{lang:"json",code:'{ "settings": { "projectId": "my-project" } }'}]},"storage-format":{text:'All events are stored in a single table. Scalar fields (strings, numbers, booleans) are stored as-is. Nested objects and arrays are JSON-stringified automatically. Defaults: dataset "walkeros", table "events", location "EU" — all overridable via settings.'},"query-json-columns":{text:"Nested event fields (data, context, globals, user) are stored as JSON strings. Use BigQuery JSON_EXTRACT_SCALAR to query them. Field paths follow the walkerOS event structure.",code:[{lang:"sql",code:"SELECT JSON_EXTRACT_SCALAR(data, '$.total') AS total FROM `project.walkeros.events` WHERE entity = 'order'"}]},"troubleshoot-empty-table":{text:"Events not appearing? Common causes: projectId doesn't match GCP project, dataset doesn't exist yet (create via BigQuery console or bq CLI before first push), or SA key lacks bigquery.dataEditor role. The destination validates client/datasetId/tableId at push time but GCP permission errors surface from the BigQuery SDK."}},ae={destinationBigQuery:r,destinationPubSub:P},ne={destinationBigQuery:{settings:z,mapping:L},destinationPubSub:{settings:te,mapping:re,setup:se}};export{r as examples,ae as exportExamples,ne as exportSchemas,oe as hints,P as pubsubExamples,ie as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})},r={};t(r,{env:()=>s,step:()=>y});var s={};t(s,{push:()=>b,simulation:()=>h});import{EventEmitter as i}from"events";var o=[],a=null,n=null,l=null,c=null,p=class extends i{streamId;constructor(e){super(),this.streamId=e}getStreamId(){return this.streamId}onConnectionError(e){return o.push({method:"onConnectionError",args:[]}),this.on("error",e),{off:()=>{this.off("error",e)}}}__emitConnectionError(e){this.emit("error",e)}},d=[],u={convertStorageSchemaToProto2Descriptor:(e,t)=>(o.push({method:"adapt.convertStorageSchemaToProto2Descriptor",args:[e,t]}),{name:"root",field:[]})},g=class{constructor(e){o.push({method:"WriterClient.ctor",args:[e]})}async createStreamConnection(e,t){if("DEFAULT"!==e.streamId)throw new Error(`mock createStreamConnection: expected streamId='DEFAULT', got ${JSON.stringify(e)}`);o.push({method:"createStreamConnection",args:[e,t]});const r=c;if(null!==r)throw c=null,r;const s=new p(`${e.destinationTable}/streams/_default`);return d.push(s),s}async getWriteStream(e,t){return o.push({method:"getWriteStream",args:[e,t]}),{tableSchema:{fields:[]}}}close(){o.push({method:"WriterClient.close",args:[]})}},m=class{constructor(e){o.push({method:"JSONWriter.ctor",args:[e]})}appendRows(e,t){o.push({method:"appendRows",args:[e,t]});const r=n;if(null!==r)throw n=null,r;const s=a;a=null;const i=l;return l=null,{getResult:async()=>{if(null!==i)throw i;return{appendResult:{offset:{value:"0"}},rowErrors:s??[],writeStream:"projects/p/datasets/d/tables/t/streams/_default"}}}}close(){o.push({method:"JSONWriter.close",args:[]})}};var b={get BigQuery(){return class{calls;options;constructor(e){this.options=e,this.calls=[]}dataset(e){return this.calls.push({method:"dataset",args:[e]}),this}table(e){return this.calls.push({method:"table",args:[e]}),this}async exists(){return this.calls.push({method:"exists",args:[]}),[!0]}async create(e){this.calls.push({method:"create",args:[e]})}async getMetadata(){return this.calls.push({method:"getMetadata",args:[]}),[{}]}}},get WriterClient(){return g},get JSONWriter(){return m},get adapt(){return u}},h=["call:JSONWriter.appendRows"],y={};t(y,{pageView:()=>k,purchase:()=>O});import{getEvent as f}from"@walkeros/core";function v(e){return null==e?null:"object"==typeof e?Array.isArray(e)&&0===e.length?null:Array.isArray(e)||0!==Object.keys(e).length?JSON.stringify(e):null:JSON.stringify(e)}function S(e){return function(e){return{name:e.name,data:v(e.data),context:v(e.context),globals:v(e.globals),custom:v(e.custom),user:v(e.user),nested:v(e.nested),consent:v(e.consent),id:e.id,trigger:e.trigger,entity:e.entity,action:e.action,timestamp:1e3*new Date(e.timestamp).getTime(),timing:e.timing,source:v(e.source)}}(e)}var w=f("page view",{timestamp:1700001100,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server"}}),k={title:"Page view",description:"A page view is appended as one row through the BigQuery Storage Write API JSONWriter. Nested objects/arrays in data, source, etc. are JSON-stringified by eventToRow.",in:w,mapping:void 0,out:[["appendRows",[S(w)]]]},j=f("order complete",{timestamp:1700001101,data:{id:"ORD-500",total:199.99,items:[{sku:"SKU-1",qty:2}]},source:{type:"express",platform:"server"}}),O={title:"Purchase",description:"An order event is appended as a single row through JSONWriter.appendRows. The entire nested data object (including arrays like items) is JSON-stringified into the data column via eventToRow().",in:j,mapping:void 0,out:[["appendRows",[S(j)]]]},P={};t(P,{env:()=>A,step:()=>E});var A={};t(A,{push:()=>D,simulation:()=>I});var C=class{constructor(e){this.name=e}name;publishMessage(e){return Promise.resolve("mock-message-id")}resumePublishing(e){}},D={PubSub:class{constructor(e){this.options=e}options;topic(e){return new C(e)}close(){return Promise.resolve()}}},I=["call:PubSub.topic.publishMessage"],E={};t(E,{defaultPush:()=>M,mappedAttributes:()=>Q,mappedData:()=>W,mappedOrderingKey:()=>B,mappedTopic:()=>J,pageView:()=>_});import{getEvent as R}from"@walkeros/core";var T=R("order complete",{timestamp:1700001100,data:{id:"ORD-500",total:199.99,currency:"EUR"},user:{id:"usr-789"},source:{type:"express",platform:"server",trace:"1a2b3c4d5e6f70819a2b3c4d5e6f7081",count:1}}),N=R("page view",{timestamp:1700001101,data:{title:"Documentation",url:"https://example.com/docs"},source:{type:"express",platform:"server",trace:"9f8e7d6c5b4a39281706f5e4d3c2b1a0",count:1}});function x(e){const t=e.source.platform??"default",r={...e,source:{...e.source,release:{[t]:"4.7.1"}}};return Buffer.from(JSON.stringify(r))}var M={title:"Default publish",description:"An event is published to the configured Pub/Sub topic with the full JSON event as the message body and no ordering key.",in:T,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(T)}]]},J={title:"Topic override",description:"A mapping rule overrides the destination default topic so order events are published to a dedicated topic.",in:T,mapping:{settings:{topic:"orders"}},out:[["topic","orders",{messageOrdering:!1}],["publishMessage","orders",{data:x(T)}]]},B={title:"Ordering key from user",description:"A mapping resolves the ordering key from event.user.id, enabling per-user ordering for this publish.",in:T,mapping:{settings:{orderingKey:"user.id"}},out:[["topic","events",{messageOrdering:!0}],["publishMessage","events",{data:x(T),orderingKey:"usr-789"}]]},Q={title:"Mapped attributes",description:"A mapping resolves a per-event attribute map, here exposing entity and action as Pub/Sub attributes for routing in subscribers.",in:T,mapping:{settings:{attributes:{entity:"entity",action:"action"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(T),attributes:{entity:"order",action:"complete"}}]]},W={title:"Mapped payload",description:"A data mapping transforms the event payload before publish. The rewritten object becomes the Pub/Sub message body.",in:T,mapping:{data:{map:{order_id:"data.id",revenue:"data.total",currency:"data.currency"}}},out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:Buffer.from(JSON.stringify({order_id:"ORD-500",revenue:199.99,currency:"EUR"}))}]]},_={title:"Page view",description:"A page view is published to the default topic with no ordering key, demonstrating the simplest publish path.",in:N,out:[["topic","events",{messageOrdering:!1}],["publishMessage","events",{data:x(N)}]]};import{zodToSchema as K}from"@walkeros/core/dev";import{z as U}from"@walkeros/core/dev";var q=U.object({client:U.any().describe("Google Cloud BigQuery client instance (like new BigQuery({ projectId, keyFilename }))").optional(),projectId:U.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),datasetId:U.string().min(1).default("walkerOS").describe("BigQuery dataset ID where events will be stored (like walker_events)"),tableId:U.string().min(1).default("events").describe("BigQuery table ID for event storage (like events)"),location:U.string().default("EU").describe("Geographic location for the BigQuery dataset (like US)"),bigquery:U.any().describe('Additional BigQuery client configuration options (like { keyFilename: "path/to/key.json" })').optional()});import{z as F}from"@walkeros/core/dev";var G=F.object({}),z=K(q),L=K(G);import{zodToSchema as V}from"@walkeros/core/dev";import{z as $}from"@walkeros/core/dev";var X=$.object({client:$.any().describe("Google Cloud Pub/Sub client instance (like new PubSub({ projectId, keyFilename }))").optional(),projectId:$.string().min(1).describe("Google Cloud Project ID (like my-gcp-project)"),topic:$.string().min(1).describe("Pub/Sub topic short name (like events). The full resource name projects/<projectId>/topics/<topic> is built by the SDK."),credentials:$.any().describe("Service account credentials as a JSON string or an object with client_email and private_key. Default: Application Default Credentials (ADC). (deprecated: use config.credentials)").optional(),apiEndpoint:$.string().describe("Override Pub/Sub API endpoint. Useful for the local emulator (like localhost:8085).").optional(),orderingKey:$.any().describe("Mapping value resolved per-event. Truthy enables per-key ordering for the publish.").optional(),attributes:$.any().describe("Default per-event attribute map merged into every published message. Mapping.Map shape.").optional()});import{z as H}from"@walkeros/core/dev";var Y=H.object({topic:H.string().describe("Per-rule topic override. Falls back to settings.topic if absent.").optional(),orderingKey:H.any().describe("Per-rule ordering-key Mapping.Value. Overrides settings.orderingKey when set.").optional(),attributes:H.any().describe("Per-rule attribute Mapping.Map merged on top of settings.attributes.").optional()});import{z as Z}from"@walkeros/core/dev";var ee=Z.object({messageStoragePolicy:Z.object({allowedPersistenceRegions:Z.array(Z.string()).describe("Geographic regions for at-rest message storage. Default: EU multi-region (eu-west1, eu-west3, eu-west4).")}).describe("Topic-level message storage policy.").optional(),messageRetentionDuration:Z.object({seconds:Z.number().describe("Retention window in seconds. Default: project default.")}).describe("Topic-level retention configuration.").optional(),kmsKeyName:Z.string().describe("Customer-managed encryption key (CMEK) resource name. Optional.").optional(),labels:Z.record(Z.string(),Z.string()).describe("Topic labels for organization and billing.").optional()}),te=V(X),re=V(Y),se=V(ee),ie={};t(ie,{mapping:()=>L,pubsubMapping:()=>re,pubsubSettings:()=>te,pubsubSetup:()=>se,settings:()=>z});var oe={"auth-methods":{text:'Supports three auth methods: SA key file via bigquery options ({ bigquery: { keyFilename: "./sa.json" } }), Application Default Credentials (automatic on GCP infrastructure — just provide projectId), or a pre-configured BigQuery client instance (client option). See settings schema for all options.',code:[{lang:"json",code:'{ "settings": { "projectId": "my-project", "bigquery": { "keyFilename": "./sa.json" } } }'},{lang:"json",code:'{ "settings": { "projectId": "my-project" } }'}]},"storage-format":{text:'All events are stored in a single table. Scalar fields (strings, numbers, booleans) are stored as-is. Nested objects and arrays are JSON-stringified automatically. Defaults: dataset "walkeros", table "events", location "EU" — all overridable via settings.'},"query-json-columns":{text:"Nested event fields (data, context, globals, user) are stored as JSON strings. Use BigQuery JSON_EXTRACT_SCALAR to query them. Field paths follow the walkerOS event structure.",code:[{lang:"sql",code:"SELECT JSON_EXTRACT_SCALAR(data, '$.total') AS total FROM `project.walkeros.events` WHERE entity = 'order'"}]},"troubleshoot-empty-table":{text:"Events not appearing? Common causes: projectId doesn't match GCP project, dataset doesn't exist yet (create via BigQuery console or bq CLI before first push), or SA key lacks bigquery.dataEditor role. The destination validates client/datasetId/tableId at push time but GCP permission errors surface from the BigQuery SDK."}},ae={destinationBigQuery:r,destinationPubSub:P},ne={destinationBigQuery:{settings:z,mapping:L},destinationPubSub:{settings:te,mapping:re,setup:se}};export{r as examples,ae as exportExamples,ne as exportSchemas,oe as hints,P as pubsubExamples,ie as schemas};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-destination-gcp",
4
- "version": "4.7.0",
4
+ "version": "4.7.1",
5
5
  "type": "destination",
6
6
  "platform": [
7
7
  "server"
@@ -227,7 +227,7 @@
227
227
  "consent": {
228
228
  "functional": true
229
229
  },
230
- "id": "17f447fd4236f695",
230
+ "id": "360abb2a22120f06",
231
231
  "trigger": "load",
232
232
  "entity": "page",
233
233
  "action": "view",
@@ -253,7 +253,7 @@
253
253
  "user": "{\"id\":\"us3r\",\"device\":\"c00k13\",\"session\":\"s3ss10n\"}",
254
254
  "nested": "[{\"entity\":\"child\",\"data\":{\"is\":\"subordinated\"}}]",
255
255
  "consent": "{\"functional\":true}",
256
- "id": "17f447fd4236f695",
256
+ "id": "360abb2a22120f06",
257
257
  "trigger": "load",
258
258
  "entity": "page",
259
259
  "action": "view",
@@ -348,7 +348,7 @@
348
348
  "consent": {
349
349
  "functional": true
350
350
  },
351
- "id": "f5647a3aef66626c",
351
+ "id": "65c2ff2f50c66e4c",
352
352
  "trigger": "load",
353
353
  "entity": "order",
354
354
  "action": "complete",
@@ -374,7 +374,7 @@
374
374
  "user": "{\"id\":\"us3r\",\"device\":\"c00k13\",\"session\":\"s3ss10n\"}",
375
375
  "nested": "[{\"entity\":\"product\",\"data\":{\"id\":\"ers\",\"name\":\"Everyday Ruck Snack\",\"color\":\"black\",\"size\":\"l\",\"price\":420},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]},{\"entity\":\"product\",\"data\":{\"id\":\"cc\",\"name\":\"Cool Cap\",\"size\":\"one size\",\"price\":42},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]},{\"entity\":\"gift\",\"data\":{\"name\":\"Surprise\"},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]}]",
376
376
  "consent": "{\"functional\":true}",
377
- "id": "f5647a3aef66626c",
377
+ "id": "65c2ff2f50c66e4c",
378
378
  "trigger": "load",
379
379
  "entity": "order",
380
380
  "action": "complete",
@@ -449,7 +449,7 @@
449
449
  "consent": {
450
450
  "functional": true
451
451
  },
452
- "id": "17f447fd4236f695",
452
+ "id": "360abb2a22120f06",
453
453
  "trigger": "load",
454
454
  "entity": "page",
455
455
  "action": "view",
@@ -475,7 +475,7 @@
475
475
  "user": "{\"id\":\"us3r\",\"device\":\"c00k13\",\"session\":\"s3ss10n\"}",
476
476
  "nested": "[{\"entity\":\"child\",\"data\":{\"is\":\"subordinated\"}}]",
477
477
  "consent": "{\"functional\":true}",
478
- "id": "17f447fd4236f695",
478
+ "id": "360abb2a22120f06",
479
479
  "trigger": "load",
480
480
  "entity": "page",
481
481
  "action": "view",
@@ -570,7 +570,7 @@
570
570
  "consent": {
571
571
  "functional": true
572
572
  },
573
- "id": "f5647a3aef66626c",
573
+ "id": "65c2ff2f50c66e4c",
574
574
  "trigger": "load",
575
575
  "entity": "order",
576
576
  "action": "complete",
@@ -596,7 +596,7 @@
596
596
  "user": "{\"id\":\"us3r\",\"device\":\"c00k13\",\"session\":\"s3ss10n\"}",
597
597
  "nested": "[{\"entity\":\"product\",\"data\":{\"id\":\"ers\",\"name\":\"Everyday Ruck Snack\",\"color\":\"black\",\"size\":\"l\",\"price\":420},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]},{\"entity\":\"product\",\"data\":{\"id\":\"cc\",\"name\":\"Cool Cap\",\"size\":\"one size\",\"price\":42},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]},{\"entity\":\"gift\",\"data\":{\"name\":\"Surprise\"},\"context\":{\"shopping\":[\"complete\",0]},\"nested\":[]}]",
598
598
  "consent": "{\"functional\":true}",
599
- "id": "f5647a3aef66626c",
599
+ "id": "65c2ff2f50c66e4c",
600
600
  "trigger": "load",
601
601
  "entity": "order",
602
602
  "action": "complete",
@@ -698,7 +698,7 @@
698
698
  "consent": {
699
699
  "functional": true
700
700
  },
701
- "id": "bb7c3521fbbcfafc",
701
+ "id": "39348962a406ea77",
702
702
  "trigger": "load",
703
703
  "entity": "order",
704
704
  "action": "complete",
@@ -1369,22 +1369,22 @@
1369
1369
  "642": 34,
1370
1370
  "643": 58,
1371
1371
  "644": 34,
1372
- "645": 98,
1373
- "646": 98,
1374
- "647": 55,
1375
- "648": 99,
1376
- "649": 51,
1377
- "650": 53,
1378
- "651": 50,
1379
- "652": 49,
1380
- "653": 102,
1381
- "654": 98,
1382
- "655": 98,
1383
- "656": 99,
1384
- "657": 102,
1372
+ "645": 51,
1373
+ "646": 57,
1374
+ "647": 51,
1375
+ "648": 52,
1376
+ "649": 56,
1377
+ "650": 57,
1378
+ "651": 54,
1379
+ "652": 50,
1380
+ "653": 97,
1381
+ "654": 52,
1382
+ "655": 48,
1383
+ "656": 54,
1384
+ "657": 101,
1385
1385
  "658": 97,
1386
- "659": 102,
1387
- "660": 99,
1386
+ "659": 55,
1387
+ "660": 55,
1388
1388
  "661": 34,
1389
1389
  "662": 44,
1390
1390
  "663": 34,
@@ -1603,7 +1603,7 @@
1603
1603
  "876": 46,
1604
1604
  "877": 55,
1605
1605
  "878": 46,
1606
- "879": 48,
1606
+ "879": 49,
1607
1607
  "880": 34,
1608
1608
  "881": 125,
1609
1609
  "882": 125,
@@ -1689,7 +1689,7 @@
1689
1689
  "consent": {
1690
1690
  "functional": true
1691
1691
  },
1692
- "id": "bb7c3521fbbcfafc",
1692
+ "id": "39348962a406ea77",
1693
1693
  "trigger": "load",
1694
1694
  "entity": "order",
1695
1695
  "action": "complete",
@@ -2368,22 +2368,22 @@
2368
2368
  "642": 34,
2369
2369
  "643": 58,
2370
2370
  "644": 34,
2371
- "645": 98,
2372
- "646": 98,
2373
- "647": 55,
2374
- "648": 99,
2375
- "649": 51,
2376
- "650": 53,
2377
- "651": 50,
2378
- "652": 49,
2379
- "653": 102,
2380
- "654": 98,
2381
- "655": 98,
2382
- "656": 99,
2383
- "657": 102,
2371
+ "645": 51,
2372
+ "646": 57,
2373
+ "647": 51,
2374
+ "648": 52,
2375
+ "649": 56,
2376
+ "650": 57,
2377
+ "651": 54,
2378
+ "652": 50,
2379
+ "653": 97,
2380
+ "654": 52,
2381
+ "655": 48,
2382
+ "656": 54,
2383
+ "657": 101,
2384
2384
  "658": 97,
2385
- "659": 102,
2386
- "660": 99,
2385
+ "659": 55,
2386
+ "660": 55,
2387
2387
  "661": 34,
2388
2388
  "662": 44,
2389
2389
  "663": 34,
@@ -2602,7 +2602,7 @@
2602
2602
  "876": 46,
2603
2603
  "877": 55,
2604
2604
  "878": 46,
2605
- "879": 48,
2605
+ "879": 49,
2606
2606
  "880": 34,
2607
2607
  "881": 125,
2608
2608
  "882": 125,
@@ -2692,7 +2692,7 @@
2692
2692
  "consent": {
2693
2693
  "functional": true
2694
2694
  },
2695
- "id": "bb7c3521fbbcfafc",
2695
+ "id": "39348962a406ea77",
2696
2696
  "trigger": "load",
2697
2697
  "entity": "order",
2698
2698
  "action": "complete",
@@ -2864,7 +2864,7 @@
2864
2864
  "consent": {
2865
2865
  "functional": true
2866
2866
  },
2867
- "id": "bb7c3521fbbcfafc",
2867
+ "id": "39348962a406ea77",
2868
2868
  "trigger": "load",
2869
2869
  "entity": "order",
2870
2870
  "action": "complete",
@@ -3540,22 +3540,22 @@
3540
3540
  "642": 34,
3541
3541
  "643": 58,
3542
3542
  "644": 34,
3543
- "645": 98,
3544
- "646": 98,
3545
- "647": 55,
3546
- "648": 99,
3547
- "649": 51,
3548
- "650": 53,
3549
- "651": 50,
3550
- "652": 49,
3551
- "653": 102,
3552
- "654": 98,
3553
- "655": 98,
3554
- "656": 99,
3555
- "657": 102,
3543
+ "645": 51,
3544
+ "646": 57,
3545
+ "647": 51,
3546
+ "648": 52,
3547
+ "649": 56,
3548
+ "650": 57,
3549
+ "651": 54,
3550
+ "652": 50,
3551
+ "653": 97,
3552
+ "654": 52,
3553
+ "655": 48,
3554
+ "656": 54,
3555
+ "657": 101,
3556
3556
  "658": 97,
3557
- "659": 102,
3558
- "660": 99,
3557
+ "659": 55,
3558
+ "660": 55,
3559
3559
  "661": 34,
3560
3560
  "662": 44,
3561
3561
  "663": 34,
@@ -3774,7 +3774,7 @@
3774
3774
  "876": 46,
3775
3775
  "877": 55,
3776
3776
  "878": 46,
3777
- "879": 48,
3777
+ "879": 49,
3778
3778
  "880": 34,
3779
3779
  "881": 125,
3780
3780
  "882": 125,
@@ -3861,7 +3861,7 @@
3861
3861
  "consent": {
3862
3862
  "functional": true
3863
3863
  },
3864
- "id": "bb7c3521fbbcfafc",
3864
+ "id": "39348962a406ea77",
3865
3865
  "trigger": "load",
3866
3866
  "entity": "order",
3867
3867
  "action": "complete",
@@ -4537,22 +4537,22 @@
4537
4537
  "642": 34,
4538
4538
  "643": 58,
4539
4539
  "644": 34,
4540
- "645": 98,
4541
- "646": 98,
4542
- "647": 55,
4543
- "648": 99,
4544
- "649": 51,
4545
- "650": 53,
4546
- "651": 50,
4547
- "652": 49,
4548
- "653": 102,
4549
- "654": 98,
4550
- "655": 98,
4551
- "656": 99,
4552
- "657": 102,
4540
+ "645": 51,
4541
+ "646": 57,
4542
+ "647": 51,
4543
+ "648": 52,
4544
+ "649": 56,
4545
+ "650": 57,
4546
+ "651": 54,
4547
+ "652": 50,
4548
+ "653": 97,
4549
+ "654": 52,
4550
+ "655": 48,
4551
+ "656": 54,
4552
+ "657": 101,
4553
4553
  "658": 97,
4554
- "659": 102,
4555
- "660": 99,
4554
+ "659": 55,
4555
+ "660": 55,
4556
4556
  "661": 34,
4557
4557
  "662": 44,
4558
4558
  "663": 34,
@@ -4771,7 +4771,7 @@
4771
4771
  "876": 46,
4772
4772
  "877": 55,
4773
4773
  "878": 46,
4774
- "879": 48,
4774
+ "879": 49,
4775
4775
  "880": 34,
4776
4776
  "881": 125,
4777
4777
  "882": 125,
@@ -4818,7 +4818,7 @@
4818
4818
  "consent": {
4819
4819
  "functional": true
4820
4820
  },
4821
- "id": "fcaf8df1effbd98c",
4821
+ "id": "da9e8376bf3767f1",
4822
4822
  "trigger": "load",
4823
4823
  "entity": "page",
4824
4824
  "action": "view",
@@ -5177,22 +5177,22 @@
5177
5177
  "330": 34,
5178
5178
  "331": 58,
5179
5179
  "332": 34,
5180
- "333": 102,
5181
- "334": 99,
5182
- "335": 97,
5183
- "336": 102,
5180
+ "333": 100,
5181
+ "334": 97,
5182
+ "335": 57,
5183
+ "336": 101,
5184
5184
  "337": 56,
5185
- "338": 100,
5186
- "339": 102,
5187
- "340": 49,
5188
- "341": 101,
5185
+ "338": 51,
5186
+ "339": 55,
5187
+ "340": 54,
5188
+ "341": 98,
5189
5189
  "342": 102,
5190
- "343": 102,
5191
- "344": 98,
5192
- "345": 100,
5193
- "346": 57,
5194
- "347": 56,
5195
- "348": 99,
5190
+ "343": 51,
5191
+ "344": 55,
5192
+ "345": 54,
5193
+ "346": 55,
5194
+ "347": 102,
5195
+ "348": 49,
5196
5196
  "349": 34,
5197
5197
  "350": 44,
5198
5198
  "351": 34,
@@ -5406,7 +5406,7 @@
5406
5406
  "559": 46,
5407
5407
  "560": 55,
5408
5408
  "561": 46,
5409
- "562": 48,
5409
+ "562": 49,
5410
5410
  "563": 34,
5411
5411
  "564": 125,
5412
5412
  "565": 125,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-destination-gcp",
3
3
  "description": "Google Cloud Platform server destinations for walkerOS (BigQuery, Pub/Sub)",
4
- "version": "4.7.0",
4
+ "version": "4.7.1",
5
5
  "license": "MIT",
6
6
  "exports": {
7
7
  ".": {
@@ -33,11 +33,11 @@
33
33
  "@google-cloud/bigquery": "^8.1.1",
34
34
  "@google-cloud/bigquery-storage": "^5.1.0",
35
35
  "@google-cloud/pubsub": "^5.3.0",
36
- "@walkeros/core": "4.7.0",
37
- "@walkeros/server-core": "4.7.0"
36
+ "@walkeros/core": "4.7.1",
37
+ "@walkeros/server-core": "4.7.1"
38
38
  },
39
39
  "devDependencies": {
40
- "@walkeros/collector": "4.7.0"
40
+ "@walkeros/collector": "4.7.1"
41
41
  },
42
42
  "repository": {
43
43
  "url": "git+https://github.com/elbwalker/walkerOS.git",