@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/dist/index.mjs CHANGED
@@ -1,41 +1,5 @@
1
- import { i as redactUrlSecrets, n as isCredentialField, r as redactSecrets, t as CAPXUL_ERROR_CODES } from "./src-CWfRYsBI.mjs";
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: Schema.Literals(["account", "organization"]),
1519
- reason_code: Schema.optional(Schema.Literals(CAPXUL_ERROR_CODES))
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: Schema.Literals(["account", "organization"]),
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: Schema.Literals(["account", "organization"]),
1231
+ scope_kind: ScopeKindSchema,
1548
1232
  party_id: OptionalString,
1549
- reason_code: Schema.optional(Schema.Literals(CAPXUL_ERROR_CODES))
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: Schema.Literals(["account", "organization"]),
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 mutates and returns the supplied event, matching PostHog's
1744
- * `before_send` contract while preserving the event's full structural type.
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 WeakSet();
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 || seen.has(value)) return;
1953
- seen.add(value);
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
- if (typeof item === "string") value[index] = maskNetworkText(item);
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 = value;
1963
- for (const [key, nestedValue] of Object.entries(properties)) {
1964
- if (isPostHogQueryDerivedProperty(key)) {
1965
- delete properties[key];
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 };