@capxul/observability 4.2.0 → 4.20.0-beta.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/README.md +14 -0
- package/dist/engineering.d.mts +12 -3
- package/dist/engineering.mjs +388 -55
- package/dist/index.d.mts +579 -5
- package/dist/index.mjs +404 -460
- package/dist/operations-sJPrehYY.mjs +748 -0
- package/package.json +2 -2
- package/dist/src-CWfRYsBI.mjs +0 -302
package/dist/index.mjs
CHANGED
|
@@ -1,41 +1,5 @@
|
|
|
1
|
-
import { i as redactUrlSecrets, n as
|
|
1
|
+
import { a as CHAIN_UPSTREAMS, c as redactSecrets, i as CAPXUL_ERROR_CODES, l as redactUrlSecrets, n as isCapxulOperation, o as FAILURE_MODES, r as normalizeCapxulOperation, s as isCredentialField, t as CAPXUL_OPERATIONS } from "./operations-sJPrehYY.mjs";
|
|
2
2
|
import { Effect, Schema, SchemaGetter } from "effect";
|
|
3
|
-
//#region ../errors/src/chain-cause.ts
|
|
4
|
-
/**
|
|
5
|
-
* Why an operation failed — the one flat vocabulary. The first four are the
|
|
6
|
-
* auth/provider diagnoses that predate this file. The rest name the chain
|
|
7
|
-
* path. `FailureMode` is derived from this list so a runtime membership check
|
|
8
|
-
* (the SDK's `$exception` projection, the observability schema) and the type
|
|
9
|
-
* can never drift apart.
|
|
10
|
-
*/
|
|
11
|
-
const FAILURE_MODES = [
|
|
12
|
-
"auth-origin-mismatch",
|
|
13
|
-
"stale-openfort-cache",
|
|
14
|
-
"app-env-allowlist",
|
|
15
|
-
"no-secure-context",
|
|
16
|
-
"signer-not-ready",
|
|
17
|
-
"rate-limited",
|
|
18
|
-
"timeout",
|
|
19
|
-
"upstream-down",
|
|
20
|
-
"revert",
|
|
21
|
-
"insufficient-balance",
|
|
22
|
-
"insufficient-allowance",
|
|
23
|
-
"rejected",
|
|
24
|
-
"unauthorized",
|
|
25
|
-
"forbidden",
|
|
26
|
-
"bad-request",
|
|
27
|
-
"method-unsupported",
|
|
28
|
-
"unknown"
|
|
29
|
-
];
|
|
30
|
-
/** Who answered. `alto` is the bundler; `gateway` is the AA gateway's own logic. */
|
|
31
|
-
const CHAIN_UPSTREAMS = [
|
|
32
|
-
"alchemy",
|
|
33
|
-
"infura",
|
|
34
|
-
"public",
|
|
35
|
-
"alto",
|
|
36
|
-
"gateway"
|
|
37
|
-
];
|
|
38
|
-
//#endregion
|
|
39
3
|
//#region ../types/src/index.ts
|
|
40
4
|
const EVM_ADDRESS_RE = /^0x[0-9a-f]{40}$/i;
|
|
41
5
|
const BYTES32_RE = /^0x[0-9a-f]{64}$/i;
|
|
@@ -72,400 +36,6 @@ Object.fromEntries(SUPPORTED_CURRENCIES.map((currency) => [currency.code, curren
|
|
|
72
36
|
const APP_ID_RE = /^app_[0-7][0-9A-HJKMNP-TV-Z]{25}$/;
|
|
73
37
|
Math.floor(Number.MAX_SAFE_INTEGER / 1e3);
|
|
74
38
|
//#endregion
|
|
75
|
-
//#region src/operations.ts
|
|
76
|
-
const CAPXUL_OPERATIONS = {
|
|
77
|
-
account: {
|
|
78
|
-
addressBook: {
|
|
79
|
-
add: "account.addressBook.add",
|
|
80
|
-
get: "account.addressBook.get",
|
|
81
|
-
hide: "account.addressBook.hide",
|
|
82
|
-
label: "account.addressBook.label",
|
|
83
|
-
list: "account.addressBook.list",
|
|
84
|
-
unhide: "account.addressBook.unhide"
|
|
85
|
-
},
|
|
86
|
-
balance: "account.balance",
|
|
87
|
-
faucetMint: "account.faucetMint",
|
|
88
|
-
getLifecycle: "account.getLifecycle",
|
|
89
|
-
readBalance: "account.readBalance",
|
|
90
|
-
retrySetup: "account.retrySetup",
|
|
91
|
-
status: "account.status",
|
|
92
|
-
profile: {
|
|
93
|
-
depositInstructions: "account.profile.depositInstructions",
|
|
94
|
-
get: "account.profile.get"
|
|
95
|
-
},
|
|
96
|
-
inbox: {
|
|
97
|
-
approve: "account.inbox.approve",
|
|
98
|
-
decline: "account.inbox.decline",
|
|
99
|
-
list: "account.inbox.list"
|
|
100
|
-
},
|
|
101
|
-
requests: {
|
|
102
|
-
cancel: "account.requests.cancel",
|
|
103
|
-
get: "account.requests.get",
|
|
104
|
-
issue: "account.requests.issue",
|
|
105
|
-
list: "account.requests.list"
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
accounts: {
|
|
109
|
-
fund: "accounts.fund",
|
|
110
|
-
read: "accounts.read"
|
|
111
|
-
},
|
|
112
|
-
activity: {
|
|
113
|
-
annotate: "activity.annotate",
|
|
114
|
-
emitAnnotationSaved: "activity.emitAnnotationSaved",
|
|
115
|
-
get: "activity.get",
|
|
116
|
-
list: "activity.list",
|
|
117
|
-
summary: "activity.summary"
|
|
118
|
-
},
|
|
119
|
-
addressBook: {
|
|
120
|
-
add: "addressBook.add",
|
|
121
|
-
emitRelationshipChanged: "addressBook.emitRelationshipChanged",
|
|
122
|
-
get: "addressBook.get",
|
|
123
|
-
hide: "addressBook.hide",
|
|
124
|
-
label: "addressBook.label",
|
|
125
|
-
list: "addressBook.list",
|
|
126
|
-
unhide: "addressBook.unhide"
|
|
127
|
-
},
|
|
128
|
-
applications: { create: "applications.create" },
|
|
129
|
-
auth: {
|
|
130
|
-
canSendOtp: "auth.canSendOtp",
|
|
131
|
-
getSession: "auth.getSession",
|
|
132
|
-
signIn: "auth.signIn",
|
|
133
|
-
signOut: "auth.signOut",
|
|
134
|
-
sendVerificationOtp: "auth.sendVerificationOTP",
|
|
135
|
-
verifyOtp: "auth.verifyOtp"
|
|
136
|
-
},
|
|
137
|
-
client: {
|
|
138
|
-
createOrg: "createOrg",
|
|
139
|
-
orgs: "orgs"
|
|
140
|
-
},
|
|
141
|
-
credentials: {
|
|
142
|
-
bootstrapClient: "credentials.bootstrapClient",
|
|
143
|
-
mintQuickstartKey: "credentials.mintQuickstartKey"
|
|
144
|
-
},
|
|
145
|
-
currentUser: { get: "currentUser.get" },
|
|
146
|
-
devIdentity: { seedFinancialOpsOrg: "devIdentity.seedFinancialOpsOrg" },
|
|
147
|
-
dev: { browserSeed: "dev.browserSeed" },
|
|
148
|
-
destinations: {
|
|
149
|
-
add: "destinations.add",
|
|
150
|
-
list: "destinations.list",
|
|
151
|
-
remove: "destinations.remove"
|
|
152
|
-
},
|
|
153
|
-
faucetSafe: { deploy: "FaucetSafe.deploy" },
|
|
154
|
-
financialOps: {
|
|
155
|
-
addDestination: "financialOps.addDestination",
|
|
156
|
-
approveRequest: "financialOps.approveRequest",
|
|
157
|
-
cancelRequest: "financialOps.cancelRequest",
|
|
158
|
-
createPayee: "financialOps.createPayee",
|
|
159
|
-
declineRequest: "financialOps.declineRequest",
|
|
160
|
-
emitPaymentWriterTelemetry: "financialOps.emitPaymentWriterTelemetry",
|
|
161
|
-
issueRequest: "financialOps.issueRequest",
|
|
162
|
-
recoverSettlementVerification: "financialOps.recoverSettlementVerification",
|
|
163
|
-
removeDestination: "financialOps.removeDestination",
|
|
164
|
-
verifySettlement: "financialOps.verifySettlement"
|
|
165
|
-
},
|
|
166
|
-
holdings: {
|
|
167
|
-
current: "holdings.current",
|
|
168
|
-
primary: "holdings.primary"
|
|
169
|
-
},
|
|
170
|
-
identity: {
|
|
171
|
-
accountAt: "identity.AccountAt",
|
|
172
|
-
accountClaimed: "identity.AccountClaimed",
|
|
173
|
-
accountClaiming: "identity.AccountClaiming",
|
|
174
|
-
accountDerived: "identity.AccountDerived",
|
|
175
|
-
accountFailed: "identity.AccountFailed",
|
|
176
|
-
attachOrganization: "identity.AttachOrganization",
|
|
177
|
-
claimAccount: "identity.ClaimAccount",
|
|
178
|
-
completeOnboarding: "identity.completeOnboarding",
|
|
179
|
-
completeProfile: "identity.completeProfile",
|
|
180
|
-
create: "identity.create",
|
|
181
|
-
createOrganization: "identity.CreateOrganization",
|
|
182
|
-
ensureAccount: "identity.EnsureAccount",
|
|
183
|
-
leaveOrganization: "identity.LeaveOrganization",
|
|
184
|
-
loadByAuthUserId: "identity.loadByAuthUserId",
|
|
185
|
-
loadCurrent: "identity.loadCurrent",
|
|
186
|
-
orgAt: "identity.OrgAt",
|
|
187
|
-
orgFailed: "identity.OrgFailed",
|
|
188
|
-
orgReady: "identity.OrgReady",
|
|
189
|
-
otpFailed: "identity.OtpFailed",
|
|
190
|
-
otpSent: "identity.OtpSent",
|
|
191
|
-
readSession: "identity.ReadSession",
|
|
192
|
-
requestOtp: "identity.RequestOtp",
|
|
193
|
-
reset: "identity.Reset",
|
|
194
|
-
restoreSession: "identity.RestoreSession",
|
|
195
|
-
resumeOtpEntry: "identity.ResumeOtpEntry",
|
|
196
|
-
retryAccount: "identity.RetryAccount",
|
|
197
|
-
retryOrganization: "identity.RetryOrganization",
|
|
198
|
-
sessionAbsent: "identity.SessionAbsent",
|
|
199
|
-
sessionRead: "identity.SessionRead",
|
|
200
|
-
sessionReadFailed: "identity.SessionReadFailed",
|
|
201
|
-
sessionRestored: "identity.SessionRestored",
|
|
202
|
-
signedOut: "identity.SignedOut",
|
|
203
|
-
signOut: "identity.SignOut",
|
|
204
|
-
signOutFailed: "identity.SignOutFailed",
|
|
205
|
-
update: "identity.update",
|
|
206
|
-
handleAvailable: "identity.handleAvailable",
|
|
207
|
-
verified: "identity.Verified",
|
|
208
|
-
verifyFailed: "identity.VerifyFailed",
|
|
209
|
-
verifyOtp: "identity.VerifyOtp"
|
|
210
|
-
},
|
|
211
|
-
media: {
|
|
212
|
-
generateUploadUrl: "media.generateUploadUrl",
|
|
213
|
-
setOrgLogo: "media.setOrgLogo",
|
|
214
|
-
setProfileImage: "media.setProfileImage",
|
|
215
|
-
uploadImage: "media.uploadImage"
|
|
216
|
-
},
|
|
217
|
-
me: {
|
|
218
|
-
depositInstructions: "me.depositInstructions",
|
|
219
|
-
get: "me.get"
|
|
220
|
-
},
|
|
221
|
-
moneyExecution: {
|
|
222
|
-
abandonPaymentExecution: "moneyExecution.abandonPaymentExecution",
|
|
223
|
-
prepareOrganizationPaymentExecution: "moneyExecution.prepareOrganizationPaymentExecution",
|
|
224
|
-
preparePaymentExecution: "moneyExecution.preparePaymentExecution",
|
|
225
|
-
preparePaymentLifecycleExecution: "moneyExecution.preparePaymentLifecycleExecution",
|
|
226
|
-
preparePermissionExecution: "moneyExecution.preparePermissionExecution",
|
|
227
|
-
recoverSubmissionClaims: "moneyExecution.recoverSubmissionClaims",
|
|
228
|
-
submit: "moneyExecution.submit",
|
|
229
|
-
submitPaymentCommandExecution: "moneyExecution.submitPaymentCommandExecution",
|
|
230
|
-
submitPaymentExecution: "moneyExecution.submitPaymentExecution",
|
|
231
|
-
submitPermissionExecution: "moneyExecution.submitPermissionExecution"
|
|
232
|
-
},
|
|
233
|
-
movement: {
|
|
234
|
-
emitDepositSettled: "movement.emitDepositSettled",
|
|
235
|
-
scan: "movement.scan"
|
|
236
|
-
},
|
|
237
|
-
inbox: {
|
|
238
|
-
approve: "inbox.approve",
|
|
239
|
-
decline: "inbox.decline",
|
|
240
|
-
list: "inbox.list"
|
|
241
|
-
},
|
|
242
|
-
offramp: {
|
|
243
|
-
quote: "offramp.quote",
|
|
244
|
-
status: "offramp.status"
|
|
245
|
-
},
|
|
246
|
-
onboarding: {
|
|
247
|
-
completeOrganization: "onboarding.completeOrganization",
|
|
248
|
-
completePerson: "onboarding.completePerson"
|
|
249
|
-
},
|
|
250
|
-
org: {
|
|
251
|
-
acceptInvitations: "org.acceptInvitations",
|
|
252
|
-
account: { get: "org.account.get" },
|
|
253
|
-
activateMember: "org.activateMember",
|
|
254
|
-
auditLog: "org.auditLog",
|
|
255
|
-
confirmBootstrap: "org.confirmBootstrap",
|
|
256
|
-
createOrg: "org.createOrg",
|
|
257
|
-
create: "org.create",
|
|
258
|
-
detectAndAcceptPendingInvitations: "org.detectAndAcceptPendingInvitations",
|
|
259
|
-
expireInvitations: "org.expireInvitations",
|
|
260
|
-
getLifecycle: "org.getLifecycle",
|
|
261
|
-
getProofReceipt: "org.getProofReceipt",
|
|
262
|
-
invite: "org.invite",
|
|
263
|
-
inviteMember: "org.inviteMember",
|
|
264
|
-
list: "org.list",
|
|
265
|
-
load: "org.load",
|
|
266
|
-
me: "org.me",
|
|
267
|
-
members: "org.members",
|
|
268
|
-
orgs: "org.orgs",
|
|
269
|
-
payment: "org.payment",
|
|
270
|
-
permissions: {
|
|
271
|
-
assign: "org.permissions.assign",
|
|
272
|
-
change: "org.permissions.change",
|
|
273
|
-
create: "org.permissions.create",
|
|
274
|
-
get: "org.permissions.get",
|
|
275
|
-
list: "org.permissions.list",
|
|
276
|
-
replace: "org.permissions.replace",
|
|
277
|
-
revoke: "org.permissions.revoke"
|
|
278
|
-
},
|
|
279
|
-
payments: {
|
|
280
|
-
pay: "org.payments.pay",
|
|
281
|
-
payBatch: "org.payments.payBatch"
|
|
282
|
-
},
|
|
283
|
-
payroll: {
|
|
284
|
-
authorizeRun: "org.payroll.authorizeRun",
|
|
285
|
-
groups: {
|
|
286
|
-
list: "org.payroll.groups.list",
|
|
287
|
-
remove: "org.payroll.groups.remove",
|
|
288
|
-
save: "org.payroll.groups.save"
|
|
289
|
-
},
|
|
290
|
-
runs: "org.payroll.runs",
|
|
291
|
-
terms: "org.payroll.terms"
|
|
292
|
-
},
|
|
293
|
-
addressBook: {
|
|
294
|
-
add: "org.addressBook.add",
|
|
295
|
-
get: "org.addressBook.get",
|
|
296
|
-
hide: "org.addressBook.hide",
|
|
297
|
-
label: "org.addressBook.label",
|
|
298
|
-
list: "org.addressBook.list",
|
|
299
|
-
unhide: "org.addressBook.unhide"
|
|
300
|
-
},
|
|
301
|
-
inbox: {
|
|
302
|
-
approve: "org.inbox.approve",
|
|
303
|
-
decline: "org.inbox.decline",
|
|
304
|
-
list: "org.inbox.list"
|
|
305
|
-
},
|
|
306
|
-
lifecycle: { startOrResume: "org.lifecycle.startOrResume" },
|
|
307
|
-
prepareBootstrap: "org.prepareBootstrap",
|
|
308
|
-
prepareFounderAccount: "org.prepareFounderAccount",
|
|
309
|
-
profile: {
|
|
310
|
-
depositInstructions: "org.profile.depositInstructions",
|
|
311
|
-
get: "org.profile.get"
|
|
312
|
-
},
|
|
313
|
-
readTreasury: "org.readTreasury",
|
|
314
|
-
requests: {
|
|
315
|
-
cancel: "org.requests.cancel",
|
|
316
|
-
get: "org.requests.get",
|
|
317
|
-
issue: "org.requests.issue",
|
|
318
|
-
list: "org.requests.list"
|
|
319
|
-
},
|
|
320
|
-
recordFailure: "org.recordFailure",
|
|
321
|
-
recordProgress: "org.recordProgress",
|
|
322
|
-
resendInviteToken: "org.resendInviteToken",
|
|
323
|
-
resumeBootstrapSubmission: "org.resumeBootstrapSubmission",
|
|
324
|
-
retry: "org.retry",
|
|
325
|
-
retrySetup: "org.retrySetup",
|
|
326
|
-
roles: "org.roles",
|
|
327
|
-
startOrResume: "org.startOrResume",
|
|
328
|
-
submitBootstrap: "org.submitBootstrap",
|
|
329
|
-
treasury: "org.treasury"
|
|
330
|
-
},
|
|
331
|
-
organization: { setup: "organization.setup" },
|
|
332
|
-
organizationPayments: {
|
|
333
|
-
pay: "organizationPayments.pay",
|
|
334
|
-
payBatch: "organizationPayments.payBatch",
|
|
335
|
-
prepareExecution: "organizationPayments.prepareExecution",
|
|
336
|
-
retry: "organizationPayments.retry"
|
|
337
|
-
},
|
|
338
|
-
organizationSetup: { getProofReceipt: "organizationSetup.getProofReceipt" },
|
|
339
|
-
organizations: { detectAndAcceptPendingInvitations: "orgs.detectAndAcceptPendingInvitations" },
|
|
340
|
-
payments: {
|
|
341
|
-
cancel: "payments.cancel",
|
|
342
|
-
claim: "payments.claim",
|
|
343
|
-
createCommitment: "payments.createCommitment",
|
|
344
|
-
get: "payments.get",
|
|
345
|
-
ledger: "payments",
|
|
346
|
-
list: "payments.list",
|
|
347
|
-
pay: "payments.pay",
|
|
348
|
-
prepareExecution: "payments.prepareExecution",
|
|
349
|
-
prepareLifecycleExecution: "payments.prepareLifecycleExecution",
|
|
350
|
-
redirect: "payments.redirect",
|
|
351
|
-
retry: "payments.retry",
|
|
352
|
-
submitCommandExecution: "payments.submitCommandExecution",
|
|
353
|
-
submitExecution: "payments.submitExecution"
|
|
354
|
-
},
|
|
355
|
-
paymentDocuments: {
|
|
356
|
-
render: "paymentDocuments.render",
|
|
357
|
-
verify: "paymentDocuments.verify"
|
|
358
|
-
},
|
|
359
|
-
recipient: { resolve: "recipient.resolve" },
|
|
360
|
-
payroll: {
|
|
361
|
-
authorizeRun: "payroll.authorizeRun",
|
|
362
|
-
groups: {
|
|
363
|
-
access: "payroll.groups",
|
|
364
|
-
list: "payroll.groups.list",
|
|
365
|
-
remove: "payroll.groups.remove",
|
|
366
|
-
save: "payroll.groups.save"
|
|
367
|
-
},
|
|
368
|
-
removeGroup: "payroll.removeGroup",
|
|
369
|
-
runs: "payroll.runs",
|
|
370
|
-
saveGroup: "payroll.saveGroup",
|
|
371
|
-
terms: "payroll.terms"
|
|
372
|
-
},
|
|
373
|
-
permission: {
|
|
374
|
-
command: "permission.command",
|
|
375
|
-
retryVerification: "permission.retryVerification",
|
|
376
|
-
verify: "permission.verify",
|
|
377
|
-
verifySubmitted: "permission.verifySubmitted"
|
|
378
|
-
},
|
|
379
|
-
permissions: {
|
|
380
|
-
assign: "permissions.assign",
|
|
381
|
-
change: "permissions.change",
|
|
382
|
-
create: "permissions.create",
|
|
383
|
-
get: "permissions.get",
|
|
384
|
-
list: "permissions.list",
|
|
385
|
-
prepareExecution: "permissions.prepareExecution",
|
|
386
|
-
replace: "permissions.replace",
|
|
387
|
-
revoke: "permissions.revoke",
|
|
388
|
-
submitExecution: "permissions.submitExecution"
|
|
389
|
-
},
|
|
390
|
-
publishableKeys: {
|
|
391
|
-
mint: "publishableKeys.mint",
|
|
392
|
-
revoke: "publishableKeys.revoke",
|
|
393
|
-
rotate: "publishableKeys.rotate"
|
|
394
|
-
},
|
|
395
|
-
requests: {
|
|
396
|
-
cancel: "requests.cancel",
|
|
397
|
-
get: "requests.get",
|
|
398
|
-
issue: "requests.issue",
|
|
399
|
-
list: "requests.list"
|
|
400
|
-
},
|
|
401
|
-
runtime: {
|
|
402
|
-
assign: "assign",
|
|
403
|
-
canSendOtp: "canSendOtp",
|
|
404
|
-
cancelCommitment: "cancel_commitment",
|
|
405
|
-
change: "change",
|
|
406
|
-
claimCommitment: "claim_commitment",
|
|
407
|
-
create: "create",
|
|
408
|
-
createCapxulClient: "createCapxulClient",
|
|
409
|
-
createCapxulClientWithOrgDeploymentSeams: "createCapxulClientWithOrgDeploymentSeams",
|
|
410
|
-
createCommitment: "create_commitment",
|
|
411
|
-
getConvexJwt: "getConvexJwt",
|
|
412
|
-
getSession: "getSession",
|
|
413
|
-
initialize: "initialize",
|
|
414
|
-
mutation: "mutation",
|
|
415
|
-
now: "now",
|
|
416
|
-
port: "port",
|
|
417
|
-
query: "query",
|
|
418
|
-
redirectCommitment: "redirect_commitment",
|
|
419
|
-
replace: "replace",
|
|
420
|
-
resolve: "resolve",
|
|
421
|
-
revoke: "revoke",
|
|
422
|
-
send: "send",
|
|
423
|
-
sendOtp: "sendOtp",
|
|
424
|
-
signIn: "signIn",
|
|
425
|
-
signOut: "signOut",
|
|
426
|
-
sleep: "sleep",
|
|
427
|
-
verifyOtp: "verifyOtp",
|
|
428
|
-
wallet: "wallet"
|
|
429
|
-
},
|
|
430
|
-
smartAccount: {
|
|
431
|
-
claim: "smartAccount.claim",
|
|
432
|
-
confirmDeployment: "smartAccount.confirmDeployment",
|
|
433
|
-
loadByAuthUserId: "smartAccount.loadByAuthUserId",
|
|
434
|
-
loadCurrent: "smartAccount.loadCurrent",
|
|
435
|
-
provision: "smartAccount.provision"
|
|
436
|
-
},
|
|
437
|
-
system: {
|
|
438
|
-
health: "system.health",
|
|
439
|
-
ping: "system.ping",
|
|
440
|
-
runtimeChain: "system.runtimeChain"
|
|
441
|
-
},
|
|
442
|
-
testUsdc: { mint: "TestUSDC.mint" },
|
|
443
|
-
_internal: {
|
|
444
|
-
accounts: { fund: "_internal.accounts.fund" },
|
|
445
|
-
close: "_internal.close",
|
|
446
|
-
identity: {
|
|
447
|
-
completeProfile: "_internal.identity.completeProfile",
|
|
448
|
-
runFacade: "_internal.identity.runFacade",
|
|
449
|
-
send: "_internal.identity.send"
|
|
450
|
-
},
|
|
451
|
-
organizationSetup: { getProofReceipt: "_internal.organizationSetup.getProofReceipt" }
|
|
452
|
-
},
|
|
453
|
-
tenancy: {
|
|
454
|
-
revokeBackendTenancyConsent: "tenancy.revokeBackendTenancyConsent",
|
|
455
|
-
seedBackendTenancy: "tenancy.seedBackendTenancy"
|
|
456
|
-
}
|
|
457
|
-
};
|
|
458
|
-
function collectOperations(tree) {
|
|
459
|
-
return Object.values(tree).flatMap((value) => typeof value === "string" ? [value] : collectOperations(value));
|
|
460
|
-
}
|
|
461
|
-
const operations = new Set(collectOperations(CAPXUL_OPERATIONS));
|
|
462
|
-
function isCapxulOperation(value) {
|
|
463
|
-
return typeof value === "string" && operations.has(value);
|
|
464
|
-
}
|
|
465
|
-
function normalizeCapxulOperation(value) {
|
|
466
|
-
return isCapxulOperation(value) ? value : "unknown";
|
|
467
|
-
}
|
|
468
|
-
//#endregion
|
|
469
39
|
//#region src/index.ts
|
|
470
40
|
const TELEMETRY_EVENT_NAMES = [
|
|
471
41
|
"auth_otp_requested",
|
|
@@ -473,6 +43,7 @@ const TELEMETRY_EVENT_NAMES = [
|
|
|
473
43
|
"auth_otp_expired",
|
|
474
44
|
"auth_verified",
|
|
475
45
|
"auth_failed",
|
|
46
|
+
"identity_refused",
|
|
476
47
|
"auth_signed_out",
|
|
477
48
|
"onboarding_intent_selected",
|
|
478
49
|
"onboarding_profile_submitted",
|
|
@@ -518,10 +89,23 @@ const TELEMETRY_EVENT_NAMES = [
|
|
|
518
89
|
"movement_scan_window",
|
|
519
90
|
"movement_scan_checkpoint",
|
|
520
91
|
"movement_scan_incident",
|
|
92
|
+
"indexer_drift_corrected",
|
|
521
93
|
"activity_annotation_saved",
|
|
522
94
|
"ui_activity_action_completed",
|
|
523
95
|
"contact_relationship_changed",
|
|
524
|
-
"ui_contact_action_completed"
|
|
96
|
+
"ui_contact_action_completed",
|
|
97
|
+
"access_recovery_completed",
|
|
98
|
+
"ui_access_step_completed",
|
|
99
|
+
"org_invite_progressed",
|
|
100
|
+
"invoice_issued",
|
|
101
|
+
"invoice_request_transitioned",
|
|
102
|
+
"ui_invoice_step_completed",
|
|
103
|
+
"ui_treasury_step_completed",
|
|
104
|
+
"ui_receive_step_completed",
|
|
105
|
+
"payroll_group_changed",
|
|
106
|
+
"payroll_run_transitioned",
|
|
107
|
+
"ui_payroll_action_completed",
|
|
108
|
+
"cli_diagnostic_completed"
|
|
525
109
|
];
|
|
526
110
|
const TELEMETRY_JOURNEYS = {
|
|
527
111
|
returning_user_login: {
|
|
@@ -719,6 +303,10 @@ const OptionalAccountId = Schema.optional(AccountIdSchema);
|
|
|
719
303
|
const OptionalWeiAmount = Schema.optional(WeiAmountSchema);
|
|
720
304
|
const OptionalCurrencyCode = Schema.optional(CurrencyCodeSchema);
|
|
721
305
|
const OptionalBalanceBucket = Schema.optional(BalanceBucketSchema);
|
|
306
|
+
/** Which Safe a money record is about. Declared here so the money-domain
|
|
307
|
+
* props below can name it as well as the UI-step props further down. */
|
|
308
|
+
const AccountKindSchema = Schema.Literals(["personalSafe", "orgTreasury"]);
|
|
309
|
+
const OptionalAccountKind = Schema.optional(AccountKindSchema);
|
|
722
310
|
const OptionalAddress = Schema.optional(AddressSchema);
|
|
723
311
|
const OptionalAppId = Schema.optional(AppIdSchema);
|
|
724
312
|
const OptionalBlockNumber = Schema.optional(BlockNumberSchema);
|
|
@@ -869,6 +457,17 @@ const AuthFailedProps = Schema.Struct({
|
|
|
869
457
|
auth_type: OptionalString,
|
|
870
458
|
reason: OptionalString
|
|
871
459
|
});
|
|
460
|
+
const IdentityRefusedProps = Schema.Struct({
|
|
461
|
+
...TelemetryEnvelopeProps,
|
|
462
|
+
/** The refused identity event tag, for example CreateOrganization. */
|
|
463
|
+
event: OptionalString,
|
|
464
|
+
/** The machine's refusal code: WRONG_STATE, SUPERSEDED or STALE_EPOCH. */
|
|
465
|
+
refusal_code: OptionalString,
|
|
466
|
+
/** The machine slot the request targeted, for example identity:org. */
|
|
467
|
+
slot: OptionalString,
|
|
468
|
+
/** The machine state at refusal, for example authenticated:claiming. */
|
|
469
|
+
state: OptionalString
|
|
470
|
+
});
|
|
872
471
|
const AuthSignedOutProps = Schema.Struct(TelemetryEnvelopeProps);
|
|
873
472
|
const ProvisioningSafeCreatedProps = Schema.Struct({
|
|
874
473
|
...TelemetryEnvelopeProps,
|
|
@@ -903,9 +502,22 @@ const BootstrapFailedProps = Schema.Struct({
|
|
|
903
502
|
reason: OptionalString,
|
|
904
503
|
target_host: OptionalString
|
|
905
504
|
});
|
|
505
|
+
/**
|
|
506
|
+
* R08 (#1966): which Safe was read, on which chain, of which token. `currency`
|
|
507
|
+
* is the DISPLAY code the surface shows ("USD"); it never says which ERC-20 the
|
|
508
|
+
* `balanceOf` actually hit, so a reader could not tell a treasury read from a
|
|
509
|
+
* personal one, nor USDX from any other dollar-labelled token. The producer
|
|
510
|
+
* takes each of these from the authority that already decided it — the verified
|
|
511
|
+
* Organization row's chain, the configured token address — never from a label.
|
|
512
|
+
* The verified `organization_id` and its group arrive from the backend
|
|
513
|
+
* attribution, so they are not repeated here.
|
|
514
|
+
*/
|
|
906
515
|
const AccountBalanceReadProps = Schema.Struct({
|
|
907
516
|
...TelemetryEnvelopeProps,
|
|
908
517
|
account_id: OptionalAccountId,
|
|
518
|
+
account_kind: OptionalAccountKind,
|
|
519
|
+
chain_id: OptionalChainId,
|
|
520
|
+
token_address: OptionalAddress,
|
|
909
521
|
currency: OptionalCurrencyCode,
|
|
910
522
|
balance_bucket: OptionalBalanceBucket,
|
|
911
523
|
durationMs: OptionalDurationMs
|
|
@@ -1256,10 +868,44 @@ const DepositSettledProps = Schema.Struct({
|
|
|
1256
868
|
});
|
|
1257
869
|
const PermissionMirrorVerificationProps = Schema.Struct({
|
|
1258
870
|
...TelemetryEnvelopeProps,
|
|
871
|
+
/** The RECEIPT verification outcome. What the mirror then did is separate. */
|
|
1259
872
|
outcome: Schema.String,
|
|
1260
873
|
reason: Schema.String,
|
|
1261
874
|
chain_id: Schema.Number,
|
|
1262
|
-
retry_count: Schema.Number
|
|
875
|
+
retry_count: Schema.Number,
|
|
876
|
+
/**
|
|
877
|
+
* #1960 R02, consumed by R03. A verified receipt is not an applied Permission:
|
|
878
|
+
* these two optional fields let the producer say what the applying mutation
|
|
879
|
+
* actually returned, and which command it was, without either fact rewriting
|
|
880
|
+
* the receipt outcome above. Absent when application has not happened yet.
|
|
881
|
+
*/
|
|
882
|
+
application_result: Schema.optional(Schema.Literals([
|
|
883
|
+
"applied",
|
|
884
|
+
"replayed",
|
|
885
|
+
"conflicting_replay",
|
|
886
|
+
"revision_mismatch"
|
|
887
|
+
])),
|
|
888
|
+
command_id: OptionalString,
|
|
889
|
+
/**
|
|
890
|
+
* #1961 R03. The authorized stored row names the Permission it changed; the
|
|
891
|
+
* verified receipt names the chain facts that prove it. Every field is
|
|
892
|
+
* optional because a pending or provider-failed verification has neither an
|
|
893
|
+
* application result nor a receipt to report.
|
|
894
|
+
*/
|
|
895
|
+
permission_id: OptionalString,
|
|
896
|
+
permission_assignment_id: OptionalString,
|
|
897
|
+
permission_operation: Schema.optional(Schema.Literals([
|
|
898
|
+
"create",
|
|
899
|
+
"change",
|
|
900
|
+
"assign",
|
|
901
|
+
"revoke",
|
|
902
|
+
"replace"
|
|
903
|
+
])),
|
|
904
|
+
revision: Schema.optional(Schema.Number),
|
|
905
|
+
user_op_hash: OptionalString,
|
|
906
|
+
transaction_hash: OptionalString,
|
|
907
|
+
block_number: Schema.optional(Schema.Number),
|
|
908
|
+
log_index: Schema.optional(Schema.Number)
|
|
1263
909
|
});
|
|
1264
910
|
const MovementScanWindowProps = Schema.Struct({
|
|
1265
911
|
...TelemetryEnvelopeProps,
|
|
@@ -1285,6 +931,33 @@ const MovementScanIncidentProps = Schema.Struct({
|
|
|
1285
931
|
incident_kind: Schema.String,
|
|
1286
932
|
anchor_block_number: Schema.Number
|
|
1287
933
|
});
|
|
934
|
+
/**
|
|
935
|
+
* One durable row the reconciliation job corrected against Ponder (SPEC D9).
|
|
936
|
+
*
|
|
937
|
+
* Both block fields are optional and for the same reason: a correction INTO
|
|
938
|
+
* drift (a Payment settled in Convex whose Ponder fact a reorg removed) has no
|
|
939
|
+
* current block, and a correction that confirms a later fact has one.
|
|
940
|
+
*
|
|
941
|
+
* `projection_kind` is closed. A later ticket that reconciles a deploy, a
|
|
942
|
+
* bootstrap or a grant outcome adds its kind here in the same change; an
|
|
943
|
+
* unknown kind must not decode.
|
|
944
|
+
*/
|
|
945
|
+
const IndexerDriftCorrectedProps = Schema.Struct({
|
|
946
|
+
...TelemetryEnvelopeProps,
|
|
947
|
+
projection_kind: Schema.Literals([
|
|
948
|
+
"member_authority",
|
|
949
|
+
"payment_settlement",
|
|
950
|
+
"permission_assignment"
|
|
951
|
+
]),
|
|
952
|
+
previous_state: Schema.String,
|
|
953
|
+
current_state: Schema.String,
|
|
954
|
+
previous_block: Schema.optional(Schema.Number),
|
|
955
|
+
current_block: Schema.optional(Schema.Number),
|
|
956
|
+
logical_event_id: Schema.optional(Schema.String),
|
|
957
|
+
scope_kind: Schema.optional(Schema.Literals(["account", "organization"])),
|
|
958
|
+
account_id: OptionalAccountId,
|
|
959
|
+
reference_id: OptionalString
|
|
960
|
+
});
|
|
1288
961
|
const AuthOtpRequestedTelemetryEventSchema = Schema.Struct({
|
|
1289
962
|
name: Schema.Literal("auth_otp_requested"),
|
|
1290
963
|
props: AuthOtpRequestedProps
|
|
@@ -1305,6 +978,10 @@ const AuthFailedTelemetryEventSchema = Schema.Struct({
|
|
|
1305
978
|
name: Schema.Literal("auth_failed"),
|
|
1306
979
|
props: AuthFailedProps
|
|
1307
980
|
});
|
|
981
|
+
const IdentityRefusedTelemetryEventSchema = Schema.Struct({
|
|
982
|
+
name: Schema.Literal("identity_refused"),
|
|
983
|
+
props: IdentityRefusedProps
|
|
984
|
+
});
|
|
1308
985
|
const AuthSignedOutTelemetryEventSchema = Schema.Struct({
|
|
1309
986
|
name: Schema.Literal("auth_signed_out"),
|
|
1310
987
|
props: AuthSignedOutProps
|
|
@@ -1485,6 +1162,13 @@ const MovementScanIncidentTelemetryEventSchema = Schema.Struct({
|
|
|
1485
1162
|
name: Schema.Literal("movement_scan_incident"),
|
|
1486
1163
|
props: MovementScanIncidentProps
|
|
1487
1164
|
});
|
|
1165
|
+
const IndexerDriftCorrectedTelemetryEventSchema = Schema.Struct({
|
|
1166
|
+
name: Schema.Literal("indexer_drift_corrected"),
|
|
1167
|
+
props: IndexerDriftCorrectedProps
|
|
1168
|
+
});
|
|
1169
|
+
/** The one spelling of "whose scope did this happen in" across every surface. */
|
|
1170
|
+
const ScopeKindSchema = Schema.Literals(["account", "organization"]);
|
|
1171
|
+
const OptionalReasonCode = Schema.optional(Schema.Literals(CAPXUL_ERROR_CODES));
|
|
1488
1172
|
const ActivityReferenceProps = {
|
|
1489
1173
|
reference_kind: Schema.Literals(["payment", "movement"]),
|
|
1490
1174
|
reference_id: Schema.String
|
|
@@ -1515,8 +1199,8 @@ const ActivityFilterProps = {
|
|
|
1515
1199
|
};
|
|
1516
1200
|
const ActivityActionProps = {
|
|
1517
1201
|
...TelemetryEnvelopeProps,
|
|
1518
|
-
scope_kind:
|
|
1519
|
-
reason_code:
|
|
1202
|
+
scope_kind: ScopeKindSchema,
|
|
1203
|
+
reason_code: OptionalReasonCode
|
|
1520
1204
|
};
|
|
1521
1205
|
const ContactRelationshipChangedTelemetryEventSchema = Schema.Struct({
|
|
1522
1206
|
name: Schema.Literal("contact_relationship_changed"),
|
|
@@ -1528,7 +1212,7 @@ const ContactRelationshipChangedTelemetryEventSchema = Schema.Struct({
|
|
|
1528
1212
|
"hidden",
|
|
1529
1213
|
"restored"
|
|
1530
1214
|
]),
|
|
1531
|
-
scope_kind:
|
|
1215
|
+
scope_kind: ScopeKindSchema,
|
|
1532
1216
|
scope_id: Schema.String,
|
|
1533
1217
|
owner_party_id: Schema.String,
|
|
1534
1218
|
party_id: Schema.String,
|
|
@@ -1544,10 +1228,25 @@ const ContactRelationshipChangedTelemetryEventSchema = Schema.Struct({
|
|
|
1544
1228
|
});
|
|
1545
1229
|
const ContactActionProps = {
|
|
1546
1230
|
...TelemetryEnvelopeProps,
|
|
1547
|
-
scope_kind:
|
|
1231
|
+
scope_kind: ScopeKindSchema,
|
|
1548
1232
|
party_id: OptionalString,
|
|
1549
|
-
reason_code:
|
|
1233
|
+
reason_code: OptionalReasonCode
|
|
1550
1234
|
};
|
|
1235
|
+
/** One completed online CLI diagnostic. No command input or provider text. */
|
|
1236
|
+
const CliDiagnosticCompletedTelemetryEventSchema = Schema.Struct({
|
|
1237
|
+
name: Schema.Literal("cli_diagnostic_completed"),
|
|
1238
|
+
props: Schema.Struct({
|
|
1239
|
+
...TelemetryEnvelopeProps,
|
|
1240
|
+
outcome: Schema.Literals([
|
|
1241
|
+
"succeeded",
|
|
1242
|
+
"refused",
|
|
1243
|
+
"failed",
|
|
1244
|
+
"cancelled"
|
|
1245
|
+
]),
|
|
1246
|
+
invocation_id: Schema.String.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u)),
|
|
1247
|
+
cli_version: Schema.String.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/u))
|
|
1248
|
+
})
|
|
1249
|
+
});
|
|
1551
1250
|
const UiContactActionCompletedTelemetryEventSchema = Schema.Struct({
|
|
1552
1251
|
name: Schema.Literal("ui_contact_action_completed"),
|
|
1553
1252
|
props: Schema.Union([
|
|
@@ -1573,7 +1272,7 @@ const ActivityAnnotationSavedTelemetryEventSchema = Schema.Struct({
|
|
|
1573
1272
|
props: Schema.Struct({
|
|
1574
1273
|
...TelemetryEnvelopeProps,
|
|
1575
1274
|
...ActivityReferenceProps,
|
|
1576
|
-
scope_kind:
|
|
1275
|
+
scope_kind: ScopeKindSchema,
|
|
1577
1276
|
scope_id: Schema.String,
|
|
1578
1277
|
occurred_at: Schema.Number
|
|
1579
1278
|
})
|
|
@@ -1581,6 +1280,16 @@ const ActivityAnnotationSavedTelemetryEventSchema = Schema.Struct({
|
|
|
1581
1280
|
const UiActivityActionCompletedTelemetryEventSchema = Schema.Struct({
|
|
1582
1281
|
name: Schema.Literal("ui_activity_action_completed"),
|
|
1583
1282
|
props: Schema.Union([
|
|
1283
|
+
Schema.Struct({
|
|
1284
|
+
...ActivityActionProps,
|
|
1285
|
+
action: Schema.Literal("read"),
|
|
1286
|
+
outcome: Schema.Literals(["partial_displayed", "recovered"]),
|
|
1287
|
+
surface: Schema.Literals([
|
|
1288
|
+
"transactions",
|
|
1289
|
+
"recent",
|
|
1290
|
+
"summary"
|
|
1291
|
+
])
|
|
1292
|
+
}),
|
|
1584
1293
|
Schema.Struct({
|
|
1585
1294
|
...ActivityActionProps,
|
|
1586
1295
|
...ActivityFilterProps,
|
|
@@ -1628,9 +1337,237 @@ const UiActivityActionCompletedTelemetryEventSchema = Schema.Struct({
|
|
|
1628
1337
|
})
|
|
1629
1338
|
])
|
|
1630
1339
|
});
|
|
1340
|
+
/**
|
|
1341
|
+
* Reliability closeout (#1960 R02) — the shape every explicit UI observation
|
|
1342
|
+
* below shares. `scope_kind` says whose surface the person was looking at,
|
|
1343
|
+
* `organization_id` is the verified Organization the producer resolved (absent
|
|
1344
|
+
* on a personal action), and `reason_code` is a catalog error code, never copy.
|
|
1345
|
+
*/
|
|
1346
|
+
const UiStepProps = {
|
|
1347
|
+
...TelemetryEnvelopeProps,
|
|
1348
|
+
scope_kind: ScopeKindSchema,
|
|
1349
|
+
organization_id: OptionalOrgId,
|
|
1350
|
+
reason_code: OptionalReasonCode
|
|
1351
|
+
};
|
|
1352
|
+
const AccessRecoveryCompletedProps = Schema.Union([Schema.Struct({
|
|
1353
|
+
...TelemetryEnvelopeProps,
|
|
1354
|
+
recovery: Schema.Literal("session_restoration"),
|
|
1355
|
+
outcome: Schema.Literals([
|
|
1356
|
+
"restored",
|
|
1357
|
+
"absent",
|
|
1358
|
+
"failed"
|
|
1359
|
+
]),
|
|
1360
|
+
reason_code: OptionalReasonCode,
|
|
1361
|
+
organization_id: OptionalOrgId
|
|
1362
|
+
}), Schema.Struct({
|
|
1363
|
+
...TelemetryEnvelopeProps,
|
|
1364
|
+
recovery: Schema.Literal("signer_readiness"),
|
|
1365
|
+
outcome: Schema.Literals(["ready", "unavailable"]),
|
|
1366
|
+
reason_code: OptionalReasonCode,
|
|
1367
|
+
organization_id: OptionalOrgId
|
|
1368
|
+
})]);
|
|
1369
|
+
const AccessRecoveryCompletedTelemetryEventSchema = Schema.Struct({
|
|
1370
|
+
name: Schema.Literal("access_recovery_completed"),
|
|
1371
|
+
props: AccessRecoveryCompletedProps
|
|
1372
|
+
});
|
|
1373
|
+
/**
|
|
1374
|
+
* R05 (#1963) wired three of these steps at the app's dashboard Access
|
|
1375
|
+
* boundary: `dashboard_granted` on the commit of the granted content,
|
|
1376
|
+
* `gate_error_displayed` on the mounted error surface, and `retry_selected` on
|
|
1377
|
+
* the actual selection. `redirect_completed` stays RESERVED and unproduced —
|
|
1378
|
+
* asking for a navigation is not arriving, and the destination page's own
|
|
1379
|
+
* normalized pageview already carries the arrival on the same journey, so a
|
|
1380
|
+
* second event would add no fact. `capability_refusal_displayed` and
|
|
1381
|
+
* `signer_refusal_displayed` belong to the screens that draw those refusals
|
|
1382
|
+
* (Recipients, Invoice, Payroll, Quick Pay); Access publishes the contract and
|
|
1383
|
+
* the `CanReason` those owners report, and produces neither itself.
|
|
1384
|
+
*/
|
|
1385
|
+
const UiAccessStepCompletedTelemetryEventSchema = Schema.Struct({
|
|
1386
|
+
name: Schema.Literal("ui_access_step_completed"),
|
|
1387
|
+
props: Schema.Struct({
|
|
1388
|
+
...UiStepProps,
|
|
1389
|
+
step: Schema.Literals([
|
|
1390
|
+
"dashboard_granted",
|
|
1391
|
+
"redirect_completed",
|
|
1392
|
+
"gate_error_displayed",
|
|
1393
|
+
"retry_selected",
|
|
1394
|
+
"capability_refusal_displayed",
|
|
1395
|
+
"signer_refusal_displayed"
|
|
1396
|
+
]),
|
|
1397
|
+
capability: Schema.optional(Schema.Literals(["spend", "managePeople"])),
|
|
1398
|
+
probe: Schema.optional(Schema.Literals([
|
|
1399
|
+
"session",
|
|
1400
|
+
"membership",
|
|
1401
|
+
"lifecycle"
|
|
1402
|
+
])),
|
|
1403
|
+
reason: Schema.optional(Schema.Literals([
|
|
1404
|
+
"loading",
|
|
1405
|
+
"no-permission",
|
|
1406
|
+
"org-unavailable"
|
|
1407
|
+
]))
|
|
1408
|
+
})
|
|
1409
|
+
});
|
|
1410
|
+
/**
|
|
1411
|
+
* R06 (#1964) wired three of the four progress words to the durable writer that
|
|
1412
|
+
* commits each one. `account_ready` comes from `org/memberLifecycle.ts`, for
|
|
1413
|
+
* every membership row a claimed personal Account actually advanced.
|
|
1414
|
+
* `permission_applied` and `membership_activated` come from
|
|
1415
|
+
* `permission/mirror.ts`: the first only when the mirror wrote a NEW Permission
|
|
1416
|
+
* state, the second only when that call flipped a `pending_grant` row to
|
|
1417
|
+
* `active`. A replay of an applied command writes neither, so it reports
|
|
1418
|
+
* neither. `revoked` stays RESERVED and unproduced — no writer revokes a
|
|
1419
|
+
* membership yet, and #1459 owns that ceremony.
|
|
1420
|
+
*/
|
|
1421
|
+
const OrgInviteProgressedTelemetryEventSchema = Schema.Struct({
|
|
1422
|
+
name: Schema.Literal("org_invite_progressed"),
|
|
1423
|
+
props: Schema.Struct({
|
|
1424
|
+
...TelemetryEnvelopeProps,
|
|
1425
|
+
organization_id: OrgIdTelemetrySchema,
|
|
1426
|
+
progress: Schema.Literals([
|
|
1427
|
+
"account_ready",
|
|
1428
|
+
"permission_applied",
|
|
1429
|
+
"membership_activated",
|
|
1430
|
+
"revoked"
|
|
1431
|
+
]),
|
|
1432
|
+
/** The invited Party. The initiating actor stays on the envelope's identity. */
|
|
1433
|
+
member_party_id: Schema.String,
|
|
1434
|
+
occurred_at: Schema.Number
|
|
1435
|
+
})
|
|
1436
|
+
});
|
|
1437
|
+
const InvoiceIssuedTelemetryEventSchema = Schema.Struct({
|
|
1438
|
+
name: Schema.Literal("invoice_issued"),
|
|
1439
|
+
props: Schema.Struct({
|
|
1440
|
+
...TelemetryEnvelopeProps,
|
|
1441
|
+
request_id: Schema.String,
|
|
1442
|
+
issuer_scope_kind: ScopeKindSchema,
|
|
1443
|
+
issuer_scope_id: Schema.String,
|
|
1444
|
+
payer_party_id: OptionalString,
|
|
1445
|
+
occurred_at: Schema.Number
|
|
1446
|
+
})
|
|
1447
|
+
});
|
|
1448
|
+
const InvoiceRequestTransitionedTelemetryEventSchema = Schema.Struct({
|
|
1449
|
+
name: Schema.Literal("invoice_request_transitioned"),
|
|
1450
|
+
props: Schema.Struct({
|
|
1451
|
+
...TelemetryEnvelopeProps,
|
|
1452
|
+
request_id: Schema.String,
|
|
1453
|
+
transition: Schema.Literals([
|
|
1454
|
+
"approval_prepared",
|
|
1455
|
+
"declined",
|
|
1456
|
+
"cancelled"
|
|
1457
|
+
]),
|
|
1458
|
+
actor_scope_kind: ScopeKindSchema,
|
|
1459
|
+
actor_scope_id: Schema.String,
|
|
1460
|
+
occurred_at: Schema.Number
|
|
1461
|
+
})
|
|
1462
|
+
});
|
|
1463
|
+
const UiInvoiceStepCompletedTelemetryEventSchema = Schema.Struct({
|
|
1464
|
+
name: Schema.Literal("ui_invoice_step_completed"),
|
|
1465
|
+
props: Schema.Struct({
|
|
1466
|
+
...UiStepProps,
|
|
1467
|
+
step: Schema.Literals([
|
|
1468
|
+
"opened",
|
|
1469
|
+
"previewed",
|
|
1470
|
+
"dismissed",
|
|
1471
|
+
"submitted",
|
|
1472
|
+
"result_displayed",
|
|
1473
|
+
"refusal_displayed",
|
|
1474
|
+
"retry_selected"
|
|
1475
|
+
]),
|
|
1476
|
+
request_id: OptionalString
|
|
1477
|
+
})
|
|
1478
|
+
});
|
|
1479
|
+
const UiTreasuryStepCompletedTelemetryEventSchema = Schema.Struct({
|
|
1480
|
+
name: Schema.Literal("ui_treasury_step_completed"),
|
|
1481
|
+
props: Schema.Struct({
|
|
1482
|
+
...UiStepProps,
|
|
1483
|
+
step: Schema.Literals([
|
|
1484
|
+
"balance_displayed",
|
|
1485
|
+
"read_refusal_displayed",
|
|
1486
|
+
"retry_selected",
|
|
1487
|
+
"recovery_completed"
|
|
1488
|
+
]),
|
|
1489
|
+
account_kind: Schema.optional(AccountKindSchema)
|
|
1490
|
+
})
|
|
1491
|
+
});
|
|
1492
|
+
const UiReceiveStepCompletedTelemetryEventSchema = Schema.Struct({
|
|
1493
|
+
name: Schema.Literal("ui_receive_step_completed"),
|
|
1494
|
+
props: Schema.Struct({
|
|
1495
|
+
...UiStepProps,
|
|
1496
|
+
step: Schema.Literals([
|
|
1497
|
+
"instructions_displayed",
|
|
1498
|
+
"address_copied",
|
|
1499
|
+
"copy_failed",
|
|
1500
|
+
"refusal_displayed",
|
|
1501
|
+
"retry_selected"
|
|
1502
|
+
]),
|
|
1503
|
+
account_kind: Schema.optional(AccountKindSchema)
|
|
1504
|
+
})
|
|
1505
|
+
});
|
|
1506
|
+
const PayrollGroupChangedTelemetryEventSchema = Schema.Struct({
|
|
1507
|
+
name: Schema.Literal("payroll_group_changed"),
|
|
1508
|
+
props: Schema.Struct({
|
|
1509
|
+
...TelemetryEnvelopeProps,
|
|
1510
|
+
organization_id: OrgIdTelemetrySchema,
|
|
1511
|
+
change: Schema.Literals([
|
|
1512
|
+
"created",
|
|
1513
|
+
"updated",
|
|
1514
|
+
"deleted"
|
|
1515
|
+
]),
|
|
1516
|
+
group_id: Schema.String,
|
|
1517
|
+
member_count: Schema.Number,
|
|
1518
|
+
occurred_at: Schema.Number
|
|
1519
|
+
})
|
|
1520
|
+
});
|
|
1521
|
+
const PayrollRunTransitionedTelemetryEventSchema = Schema.Struct({
|
|
1522
|
+
name: Schema.Literal("payroll_run_transitioned"),
|
|
1523
|
+
props: Schema.Struct({
|
|
1524
|
+
...TelemetryEnvelopeProps,
|
|
1525
|
+
organization_id: OrgIdTelemetrySchema,
|
|
1526
|
+
transition: Schema.Literals([
|
|
1527
|
+
"prepared",
|
|
1528
|
+
"authorized",
|
|
1529
|
+
"settled"
|
|
1530
|
+
]),
|
|
1531
|
+
run_id: Schema.String,
|
|
1532
|
+
/**
|
|
1533
|
+
* The `paymentCommands` row at `payrollRuns.batchRef` — the durable owner of
|
|
1534
|
+
* this run's Payment membership. `payment_count` counts THAT command's
|
|
1535
|
+
* `paymentIds`, so an unrelated Payment quoting the run id changes neither.
|
|
1536
|
+
*/
|
|
1537
|
+
command_id: OptionalString,
|
|
1538
|
+
payment_count: Schema.optional(Schema.Number),
|
|
1539
|
+
occurred_at: Schema.Number
|
|
1540
|
+
})
|
|
1541
|
+
});
|
|
1542
|
+
const UiPayrollActionCompletedTelemetryEventSchema = Schema.Struct({
|
|
1543
|
+
name: Schema.Literal("ui_payroll_action_completed"),
|
|
1544
|
+
props: Schema.Struct({
|
|
1545
|
+
...UiStepProps,
|
|
1546
|
+
action: Schema.Literals([
|
|
1547
|
+
"opened",
|
|
1548
|
+
"refusal_displayed",
|
|
1549
|
+
"recovery_completed",
|
|
1550
|
+
"cancelled",
|
|
1551
|
+
"submitted_displayed"
|
|
1552
|
+
]),
|
|
1553
|
+
run_id: OptionalString
|
|
1554
|
+
})
|
|
1555
|
+
});
|
|
1631
1556
|
const TELEMETRY_EVENT_SCHEMAS = {
|
|
1632
1557
|
contact_relationship_changed: ContactRelationshipChangedTelemetryEventSchema,
|
|
1558
|
+
access_recovery_completed: AccessRecoveryCompletedTelemetryEventSchema,
|
|
1559
|
+
ui_access_step_completed: UiAccessStepCompletedTelemetryEventSchema,
|
|
1560
|
+
org_invite_progressed: OrgInviteProgressedTelemetryEventSchema,
|
|
1561
|
+
invoice_issued: InvoiceIssuedTelemetryEventSchema,
|
|
1562
|
+
invoice_request_transitioned: InvoiceRequestTransitionedTelemetryEventSchema,
|
|
1563
|
+
ui_invoice_step_completed: UiInvoiceStepCompletedTelemetryEventSchema,
|
|
1564
|
+
ui_treasury_step_completed: UiTreasuryStepCompletedTelemetryEventSchema,
|
|
1565
|
+
ui_receive_step_completed: UiReceiveStepCompletedTelemetryEventSchema,
|
|
1566
|
+
payroll_group_changed: PayrollGroupChangedTelemetryEventSchema,
|
|
1567
|
+
payroll_run_transitioned: PayrollRunTransitionedTelemetryEventSchema,
|
|
1568
|
+
ui_payroll_action_completed: UiPayrollActionCompletedTelemetryEventSchema,
|
|
1633
1569
|
ui_contact_action_completed: UiContactActionCompletedTelemetryEventSchema,
|
|
1570
|
+
cli_diagnostic_completed: CliDiagnosticCompletedTelemetryEventSchema,
|
|
1634
1571
|
activity_annotation_saved: ActivityAnnotationSavedTelemetryEventSchema,
|
|
1635
1572
|
ui_activity_action_completed: UiActivityActionCompletedTelemetryEventSchema,
|
|
1636
1573
|
auth_otp_requested: AuthOtpRequestedTelemetryEventSchema,
|
|
@@ -1638,6 +1575,7 @@ const TELEMETRY_EVENT_SCHEMAS = {
|
|
|
1638
1575
|
auth_otp_expired: AuthOtpExpiredTelemetryEventSchema,
|
|
1639
1576
|
auth_verified: AuthVerifiedTelemetryEventSchema,
|
|
1640
1577
|
auth_failed: AuthFailedTelemetryEventSchema,
|
|
1578
|
+
identity_refused: IdentityRefusedTelemetryEventSchema,
|
|
1641
1579
|
auth_signed_out: AuthSignedOutTelemetryEventSchema,
|
|
1642
1580
|
onboarding_intent_selected: OnboardingIntentSelectedTelemetryEventSchema,
|
|
1643
1581
|
onboarding_profile_submitted: OnboardingProfileSubmittedTelemetryEventSchema,
|
|
@@ -1682,7 +1620,8 @@ const TELEMETRY_EVENT_SCHEMAS = {
|
|
|
1682
1620
|
permission_mirror_verification: PermissionMirrorVerificationTelemetryEventSchema,
|
|
1683
1621
|
movement_scan_window: MovementScanWindowTelemetryEventSchema,
|
|
1684
1622
|
movement_scan_checkpoint: MovementScanCheckpointTelemetryEventSchema,
|
|
1685
|
-
movement_scan_incident: MovementScanIncidentTelemetryEventSchema
|
|
1623
|
+
movement_scan_incident: MovementScanIncidentTelemetryEventSchema,
|
|
1624
|
+
indexer_drift_corrected: IndexerDriftCorrectedTelemetryEventSchema
|
|
1686
1625
|
};
|
|
1687
1626
|
const FINANCIAL_OPS_TARGET_TELEMETRY_PRODUCERS = [];
|
|
1688
1627
|
/**
|
|
@@ -1707,7 +1646,12 @@ const BROWSER_GATED_TELEMETRY_EVENTS = [
|
|
|
1707
1646
|
"onboarding_organization_submitted",
|
|
1708
1647
|
"onboarding_dashboard_reached",
|
|
1709
1648
|
"ui_activity_action_completed",
|
|
1710
|
-
"ui_contact_action_completed"
|
|
1649
|
+
"ui_contact_action_completed",
|
|
1650
|
+
"ui_access_step_completed",
|
|
1651
|
+
"ui_invoice_step_completed",
|
|
1652
|
+
"ui_treasury_step_completed",
|
|
1653
|
+
"ui_receive_step_completed",
|
|
1654
|
+
"ui_payroll_action_completed"
|
|
1711
1655
|
];
|
|
1712
1656
|
let trackHandler = () => {};
|
|
1713
1657
|
function setTrackHandler(handler) {
|
|
@@ -1740,17 +1684,17 @@ function redactTelemetryProps(name, props, options = {}) {
|
|
|
1740
1684
|
* property before transport. Browser applications may carry emails, draft ids,
|
|
1741
1685
|
* or other capabilities in the URL; those values must never leave the origin.
|
|
1742
1686
|
*
|
|
1743
|
-
* The callback
|
|
1744
|
-
*
|
|
1687
|
+
* The callback replaces the event's data with a sanitized copy. Nested values
|
|
1688
|
+
* can refer to live clients or configuration; observation must never mutate them.
|
|
1745
1689
|
*/
|
|
1746
1690
|
function sanitizePostHogBrowserEvent(event, urlPolicy = "path-only") {
|
|
1747
1691
|
if (event === null) return event;
|
|
1748
1692
|
const transportToken = event.properties.token;
|
|
1749
|
-
const seen = /* @__PURE__ */ new
|
|
1750
|
-
sanitizePostHogBrowserValue(event.properties, seen, urlPolicy);
|
|
1693
|
+
const seen = /* @__PURE__ */ new WeakMap();
|
|
1694
|
+
event.properties = sanitizePostHogBrowserValue(event.properties, seen, urlPolicy);
|
|
1751
1695
|
if (transportToken !== void 0) event.properties.token = transportToken;
|
|
1752
|
-
if (event.$set !== void 0) sanitizePostHogBrowserValue(event.$set, seen, urlPolicy);
|
|
1753
|
-
if (event.$set_once !== void 0) sanitizePostHogBrowserValue(event.$set_once, seen, urlPolicy);
|
|
1696
|
+
if (event.$set !== void 0) event.$set = sanitizePostHogBrowserValue(event.$set, seen, urlPolicy);
|
|
1697
|
+
if (event.$set_once !== void 0) event.$set_once = sanitizePostHogBrowserValue(event.$set_once, seen, urlPolicy);
|
|
1754
1698
|
return event;
|
|
1755
1699
|
}
|
|
1756
1700
|
/**
|
|
@@ -1949,22 +1893,21 @@ function createPostHogBrowserPageviewTracker(client) {
|
|
|
1949
1893
|
};
|
|
1950
1894
|
}
|
|
1951
1895
|
function sanitizePostHogBrowserValue(value, seen, urlPolicy) {
|
|
1952
|
-
if (typeof value !== "object" || value === null ||
|
|
1953
|
-
seen.
|
|
1896
|
+
if (typeof value !== "object" || value === null || value instanceof Date) return value;
|
|
1897
|
+
if (seen.has(value)) return seen.get(value);
|
|
1954
1898
|
if (Array.isArray(value)) {
|
|
1899
|
+
const copy = [];
|
|
1900
|
+
seen.set(value, copy);
|
|
1955
1901
|
for (let index = 0; index < value.length; index++) {
|
|
1956
1902
|
const item = value[index];
|
|
1957
|
-
|
|
1958
|
-
else sanitizePostHogBrowserValue(item, seen, urlPolicy);
|
|
1903
|
+
copy[index] = typeof item === "string" ? maskNetworkText(item) : sanitizePostHogBrowserValue(item, seen, urlPolicy);
|
|
1959
1904
|
}
|
|
1960
|
-
return;
|
|
1905
|
+
return copy;
|
|
1961
1906
|
}
|
|
1962
|
-
const properties =
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
continue;
|
|
1967
|
-
}
|
|
1907
|
+
const properties = Object.create(null);
|
|
1908
|
+
seen.set(value, properties);
|
|
1909
|
+
for (const [key, nestedValue] of Object.entries(value)) {
|
|
1910
|
+
if (isPostHogQueryDerivedProperty(key)) continue;
|
|
1968
1911
|
if (isCredentialField(key)) {
|
|
1969
1912
|
properties[key] = "[REDACTED]";
|
|
1970
1913
|
continue;
|
|
@@ -1973,8 +1916,9 @@ function sanitizePostHogBrowserValue(value, seen, urlPolicy) {
|
|
|
1973
1916
|
properties[key] = isPostHogUrlProperty(key) ? urlPolicy === "path-only" ? stripUrlQueryAndFragment(nestedValue) : redactUrlSecrets(nestedValue) : maskNetworkText(nestedValue);
|
|
1974
1917
|
continue;
|
|
1975
1918
|
}
|
|
1976
|
-
sanitizePostHogBrowserValue(nestedValue, seen, urlPolicy);
|
|
1919
|
+
properties[key] = sanitizePostHogBrowserValue(nestedValue, seen, urlPolicy);
|
|
1977
1920
|
}
|
|
1921
|
+
return properties;
|
|
1978
1922
|
}
|
|
1979
1923
|
const POSTHOG_QUERY_DERIVED_PROPERTY_NAMES = [
|
|
1980
1924
|
"utm_source",
|
|
@@ -2289,4 +2233,4 @@ function rotr(value, bits) {
|
|
|
2289
2233
|
return value >>> bits | value << 32 - bits;
|
|
2290
2234
|
}
|
|
2291
2235
|
//#endregion
|
|
2292
|
-
export { AccountBalanceFailedTelemetryEventSchema, AccountBalanceReadTelemetryEventSchema, ActivityAnnotationSavedTelemetryEventSchema, AuthFailedTelemetryEventSchema, AuthOtpDeliveredTelemetryEventSchema, AuthOtpExpiredTelemetryEventSchema, AuthOtpRequestedTelemetryEventSchema, AuthSignedOutTelemetryEventSchema, AuthVerifiedTelemetryEventSchema, BROWSER_GATED_TELEMETRY_EVENTS, BootstrapFailedTelemetryEventSchema, BootstrapResolvedTelemetryEventSchema, BundlerErrorTelemetryEventSchema, CAPXUL_ENVS, CAPXUL_OPERATIONS, CONTRACT_FIRST_TELEMETRY_EVENTS, ChainAttemptSchema, ChainUpstreamFallbackTelemetryEventSchema, ChainUpstreamSchema, ContactRelationshipChangedTelemetryEventSchema, DepositInitiatedTelemetryEventSchema, DepositSettledTelemetryEventSchema, FINANCIAL_OPS_TARGET_TELEMETRY_PRODUCERS, FailureModeSchema, FaucetConfirmedTelemetryEventSchema, FaucetFailedTelemetryEventSchema, FaucetRequestedTelemetryEventSchema, InMemoryTelemetryBusAdapter, MemberActivationFailedTelemetryEventSchema, MemberActivationReadyTelemetryEventSchema, MemberActivationStartedTelemetryEventSchema, MovementScanCheckpointTelemetryEventSchema, MovementScanIncidentTelemetryEventSchema, MovementScanWindowTelemetryEventSchema, OnboardingDashboardReachedTelemetryEventSchema, OnboardingIntentSelectedTelemetryEventSchema, OnboardingOrganizationSubmittedTelemetryEventSchema, OnboardingProfileSubmittedTelemetryEventSchema, OperationRetriedTelemetryEventSchema, OrgCreateFailedTelemetryEventSchema, OrgCreateStartedTelemetryEventSchema, OrgCreatedTelemetryEventSchema, OrgInviteAcceptedTelemetryEventSchema, OrgInviteExpiredTelemetryEventSchema, OrgInviteSentTelemetryEventSchema, OrgRolesSeededTelemetryEventSchema, OrgSafeConfirmedTelemetryEventSchema, OrgSafeCreatedTelemetryEventSchema, OrganizationCreationFailedTelemetryEventSchema, OrganizationCreationReadyTelemetryEventSchema, OrganizationCreationStartedTelemetryEventSchema, PII, PRODUCT_MAPPER_GATED_TELEMETRY_EVENTS, PaymentFailedTelemetryEventSchema, PaymentInitiatedTelemetryEventSchema, PaymentLifecycleTransitionTelemetryEventSchema, PaymentSettledTelemetryEventSchema, PaymentVerificationRetryTelemetryEventSchema, PermissionMirrorVerificationTelemetryEventSchema, PostHogTelemetryAdapter, ProvisioningSafeConfirmedTelemetryEventSchema, ProvisioningSafeCreatedTelemetryEventSchema, QuickPayExternalAddressAcknowledgedTelemetryEventSchema, ReceiptPendingTelemetryEventSchema, RecordingTelemetryAdapter, ResponseHeadersSchema, SYNCABLE_CAPXUL_ENVS, TELEMETRY_EVENT_NAMES, TELEMETRY_EVENT_SCHEMAS, TELEMETRY_JOURNEYS, TELEMETRY_PRODUCERS, UiActivityActionCompletedTelemetryEventSchema, UiContactActionCompletedTelemetryEventSchema, createCapxulBeforeSend, createPostHogBrowserPageviewTracker, getTrackHandler, initializeCapxulBrowserAnalytics, initializePostHogBrowserAnalytics, isCapxulOperation, maskCapturedNetworkRequest, normalizeCapxulOperation, productAppAnalytics, redactTelemetryEvent, redactTelemetryProps, sanitizePostHogBrowserEvent, setTrackHandler, stampTelemetryEnvelope, track, utilityAppAnalytics };
|
|
2236
|
+
export { AccessRecoveryCompletedTelemetryEventSchema, AccountBalanceFailedTelemetryEventSchema, AccountBalanceReadTelemetryEventSchema, ActivityAnnotationSavedTelemetryEventSchema, AuthFailedTelemetryEventSchema, AuthOtpDeliveredTelemetryEventSchema, AuthOtpExpiredTelemetryEventSchema, AuthOtpRequestedTelemetryEventSchema, AuthSignedOutTelemetryEventSchema, AuthVerifiedTelemetryEventSchema, BROWSER_GATED_TELEMETRY_EVENTS, BootstrapFailedTelemetryEventSchema, BootstrapResolvedTelemetryEventSchema, BundlerErrorTelemetryEventSchema, CAPXUL_ENVS, CAPXUL_OPERATIONS, CONTRACT_FIRST_TELEMETRY_EVENTS, ChainAttemptSchema, ChainUpstreamFallbackTelemetryEventSchema, ChainUpstreamSchema, CliDiagnosticCompletedTelemetryEventSchema, ContactRelationshipChangedTelemetryEventSchema, DepositInitiatedTelemetryEventSchema, DepositSettledTelemetryEventSchema, FINANCIAL_OPS_TARGET_TELEMETRY_PRODUCERS, FailureModeSchema, FaucetConfirmedTelemetryEventSchema, FaucetFailedTelemetryEventSchema, FaucetRequestedTelemetryEventSchema, IdentityRefusedTelemetryEventSchema, InMemoryTelemetryBusAdapter, IndexerDriftCorrectedTelemetryEventSchema, InvoiceIssuedTelemetryEventSchema, InvoiceRequestTransitionedTelemetryEventSchema, MemberActivationFailedTelemetryEventSchema, MemberActivationReadyTelemetryEventSchema, MemberActivationStartedTelemetryEventSchema, MovementScanCheckpointTelemetryEventSchema, MovementScanIncidentTelemetryEventSchema, MovementScanWindowTelemetryEventSchema, OnboardingDashboardReachedTelemetryEventSchema, OnboardingIntentSelectedTelemetryEventSchema, OnboardingOrganizationSubmittedTelemetryEventSchema, OnboardingProfileSubmittedTelemetryEventSchema, OperationRetriedTelemetryEventSchema, OrgCreateFailedTelemetryEventSchema, OrgCreateStartedTelemetryEventSchema, OrgCreatedTelemetryEventSchema, OrgInviteAcceptedTelemetryEventSchema, OrgInviteExpiredTelemetryEventSchema, OrgInviteProgressedTelemetryEventSchema, OrgInviteSentTelemetryEventSchema, OrgRolesSeededTelemetryEventSchema, OrgSafeConfirmedTelemetryEventSchema, OrgSafeCreatedTelemetryEventSchema, OrganizationCreationFailedTelemetryEventSchema, OrganizationCreationReadyTelemetryEventSchema, OrganizationCreationStartedTelemetryEventSchema, PII, PRODUCT_MAPPER_GATED_TELEMETRY_EVENTS, PaymentFailedTelemetryEventSchema, PaymentInitiatedTelemetryEventSchema, PaymentLifecycleTransitionTelemetryEventSchema, PaymentSettledTelemetryEventSchema, PaymentVerificationRetryTelemetryEventSchema, PayrollGroupChangedTelemetryEventSchema, PayrollRunTransitionedTelemetryEventSchema, PermissionMirrorVerificationTelemetryEventSchema, PostHogTelemetryAdapter, ProvisioningSafeConfirmedTelemetryEventSchema, ProvisioningSafeCreatedTelemetryEventSchema, QuickPayExternalAddressAcknowledgedTelemetryEventSchema, ReceiptPendingTelemetryEventSchema, RecordingTelemetryAdapter, ResponseHeadersSchema, SYNCABLE_CAPXUL_ENVS, TELEMETRY_EVENT_NAMES, TELEMETRY_EVENT_SCHEMAS, TELEMETRY_JOURNEYS, TELEMETRY_PRODUCERS, UiAccessStepCompletedTelemetryEventSchema, UiActivityActionCompletedTelemetryEventSchema, UiContactActionCompletedTelemetryEventSchema, UiInvoiceStepCompletedTelemetryEventSchema, UiPayrollActionCompletedTelemetryEventSchema, UiReceiveStepCompletedTelemetryEventSchema, UiTreasuryStepCompletedTelemetryEventSchema, createCapxulBeforeSend, createPostHogBrowserPageviewTracker, getTrackHandler, initializeCapxulBrowserAnalytics, initializePostHogBrowserAnalytics, isCapxulOperation, maskCapturedNetworkRequest, normalizeCapxulOperation, productAppAnalytics, redactTelemetryEvent, redactTelemetryProps, sanitizePostHogBrowserEvent, setTrackHandler, stampTelemetryEnvelope, track, utilityAppAnalytics };
|