@capxul/sandbox 4.20.0-beta.27 → 4.20.0-beta.29

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.
Files changed (2) hide show
  1. package/dist/main.mjs +147 -82
  2. package/package.json +4 -4
package/dist/main.mjs CHANGED
@@ -8853,28 +8853,28 @@ function formatCheck(check) {
8853
8853
  * @since 4.0.0
8854
8854
  */
8855
8855
  function makeFormatterDefault() {
8856
- return (issue) => formatIssue(issue, "");
8856
+ return (issue) => formatIssue$1(issue, "");
8857
8857
  }
8858
8858
  /** @internal */
8859
8859
  const defaultFormatter = /*#__PURE__*/ makeFormatterDefault();
8860
- function formatIssue(issue, path) {
8860
+ function formatIssue$1(issue, path) {
8861
8861
  let message;
8862
8862
  switch (issue._tag) {
8863
8863
  case "Filter": {
8864
8864
  const annotated = defaultCheckHook(issue);
8865
8865
  if (annotated !== void 0) message = annotated;
8866
8866
  else {
8867
- if (issue.issue._tag !== "InvalidValue") return formatIssue(issue.issue, path);
8867
+ if (issue.issue._tag !== "InvalidValue") return formatIssue$1(issue.issue, path);
8868
8868
  const expected = findExpected(issue.issue);
8869
8869
  message = expected === void 0 ? getExpectedMessage(formatCheck(issue.filter), issue) : getExpectedMessage(expected, issue.issue);
8870
8870
  }
8871
8871
  break;
8872
8872
  }
8873
- case "Encoding": return formatIssue(issue.issue, path);
8874
- case "Pointer": return formatIssue(issue.issue, path + formatPath(issue.path));
8873
+ case "Encoding": return formatIssue$1(issue.issue, path);
8874
+ case "Pointer": return formatIssue$1(issue.issue, path + formatPath(issue.path));
8875
8875
  case "Composite":
8876
8876
  case "AnyOf":
8877
- if (issue._tag === "Composite" || issue.issues.length > 0) return issue.issues.map((issue) => formatIssue(issue, path)).join("\n");
8877
+ if (issue._tag === "Composite" || issue.issues.length > 0) return issue.issues.map((issue) => formatIssue$1(issue, path)).join("\n");
8878
8878
  message = findMessage(issue) ?? getExpectedMessage(getExpected(issue.ast), issue);
8879
8879
  break;
8880
8880
  default: message = defaultLeafHook(issue);
@@ -16086,7 +16086,9 @@ const OrganizationPaymentExecutionItemSchema = Struct({
16086
16086
  "invoice",
16087
16087
  "payroll",
16088
16088
  "reimbursement"
16089
- ]))
16089
+ ])),
16090
+ /** When the recipient gets it: instant (the default), or held until a date or over a period. */
16091
+ timing: optional(PaymentTiming)
16090
16092
  }).check(makeFilter((value) => is(PaymentDocumentOptionsSchema)(value)));
16091
16093
  const PrepareOrganizationPaymentExecutionInputSchema = Struct({
16092
16094
  orgId: nonEmpty("orgId"),
@@ -16196,11 +16198,20 @@ const PreparedPaymentCommandExecutionSchema = Struct({
16196
16198
  //#region ../../packages/protocol/src/accounts/approval-schema.ts
16197
16199
  const APPROVAL_ID_RE = /^approval_[0-9A-HJKMNP-TV-Z]{26}$/u;
16198
16200
  const ApprovalIdSchema = String$1.pipe(refine((value) => APPROVAL_ID_RE.test(value), { message: "must be approval_ plus a ULID" }));
16199
- /** What is being approved. */
16201
+ /**
16202
+ * What is being approved. A `permission_change` creates, changes, assigns,
16203
+ * revokes or replaces an Organization's Permissions; an `invitation` sets up
16204
+ * the rights an invitation offers. Neither moves money. A `payment_cancel`
16205
+ * returns a held Payment to whoever funded it; a `payment_redirect` sends it
16206
+ * to someone else.
16207
+ */
16200
16208
  const APPROVAL_KINDS = [
16201
16209
  "payment",
16202
16210
  "payroll_run",
16211
+ "payment_cancel",
16212
+ "payment_redirect",
16203
16213
  "permission_change",
16214
+ "invitation",
16204
16215
  "bank_payout"
16205
16216
  ];
16206
16217
  /**
@@ -16424,8 +16435,7 @@ const approvals = {
16424
16435
  errors: [
16425
16436
  ...CALL$10,
16426
16437
  ...DEFECTS,
16427
- "WRONG_STATE",
16428
- "NOT_IMPLEMENTED"
16438
+ "WRONG_STATE"
16429
16439
  ]
16430
16440
  }),
16431
16441
  /** The approval as the person reads it, with its state judged against its expiry. */
@@ -16926,6 +16936,15 @@ const probes = {
16926
16936
  })
16927
16937
  };
16928
16938
  //#endregion
16939
+ //#region ../../packages/protocol/src/evm/role-dsl.ts
16940
+ /**
16941
+ * How a capped Budget's allowance refills (#2298). `monthly` refills the
16942
+ * allowance to its cap every 30 days. Roles v2 counts fixed periods from the
16943
+ * moment the allowance is set; it has no calendar month. Absent means `none`:
16944
+ * the cap is one pot that spending drains for good.
16945
+ */
16946
+ const ORG_BUDGET_REFILLS = ["monthly", "none"];
16947
+ //#endregion
16929
16948
  //#region ../../packages/protocol/src/permissions/permission-schema.ts
16930
16949
  /**
16931
16950
  * One stored `setAllowance` call inside a command's expected authority set.
@@ -16964,12 +16983,19 @@ const BudgetScopeSchema = Struct({
16964
16983
  })]),
16965
16984
  actions: NonEmptyArray(Literals(["pay", "commitments"]))
16966
16985
  }).pipe(refine((scope) => new Set(scope.actions).size === scope.actions.length && (scope.recipients.type === "anyone" || scope.recipients.accounts.length >= 1 && scope.recipients.accounts.length <= 32 && new Set(scope.recipients.accounts).size === scope.recipients.accounts.length), { message: "Budget scope requires unique actions and one to 32 unique allowed Accounts" }));
16986
+ /**
16987
+ * How a capped Budget refills (#2298): `monthly` tops the cap back up every 30
16988
+ * days (a fixed Roles v2 period, not a calendar month); `none` never refills.
16989
+ * Absent means `none`, and writers store only `monthly`.
16990
+ */
16991
+ const BudgetRefillSchema = Literals(ORG_BUDGET_REFILLS);
16967
16992
  /** The accepted product policy stored with one Permission revision. */
16968
16993
  const CurrentPolicySchema = Union([Struct({
16969
16994
  type: Literal("budget"),
16970
16995
  asset: AssetIdSchema,
16971
16996
  limit: NullOr(String$1),
16972
- scope: BudgetScopeSchema
16997
+ scope: BudgetScopeSchema,
16998
+ refill: optional(BudgetRefillSchema)
16973
16999
  }), Struct({ type: Literal("managePeople") })]);
16974
17000
  const BudgetIntentSchema = CurrentPolicySchema.pipe(refine((value) => {
16975
17001
  if (value.type !== "budget") return false;
@@ -16991,6 +17017,15 @@ const PermissionSchema = Struct({
16991
17017
  limitRaw: optional(WeiAmountSchema$1),
16992
17018
  allowanceKey: optional(AllowanceKeySchema)
16993
17019
  });
17020
+ /**
17021
+ * A refilling Budget's refill (#2439): how much each one adds, every how many
17022
+ * days, and when the next one is due.
17023
+ */
17024
+ const BudgetNextRefillSchema = Struct({
17025
+ amount: AssetAmountSchema,
17026
+ everyDays: Finite,
17027
+ nextAt: EpochMsSchema$1
17028
+ });
16994
17029
  const PermissionAssignmentSchema = Struct({
16995
17030
  permissionAssignmentId: PermissionAssignmentIdSchema,
16996
17031
  permissionId: PermissionIdSchema,
@@ -17034,7 +17069,8 @@ const ResolvedPermissionBudgetPolicySchema = Struct({
17034
17069
  "send",
17035
17070
  "sendBatch",
17036
17071
  "createCommitment"
17037
- ]))
17072
+ ])),
17073
+ refill: optional(BudgetRefillSchema)
17038
17074
  });
17039
17075
  const PermissionRecipientBindingSchema = Struct({
17040
17076
  accountId: AccountIdSchema$1,
@@ -17046,14 +17082,16 @@ const StoredPermissionIntentSchema = Union([Struct({
17046
17082
  type: Literal("budget"),
17047
17083
  asset: AssetIdSchema,
17048
17084
  limit: NullOr(AssetAmountSchema),
17049
- scope: optional(BudgetScopeSchema)
17085
+ scope: optional(BudgetScopeSchema),
17086
+ refill: optional(BudgetRefillSchema)
17050
17087
  }).pipe(refine((intent) => intent.limit === null || intent.limit.asset === intent.asset, { message: "Budget limit must use the Budget asset" })), Struct({ type: Literal("managePeople") })]);
17051
17088
  /** Writes state every granted right and use a finite positive AssetAmount cap. */
17052
17089
  const PermissionIntentSchema = Union([Struct({
17053
17090
  type: Literal("budget"),
17054
17091
  asset: AssetIdSchema,
17055
17092
  limit: AssetAmountSchema,
17056
- scope: BudgetScopeSchema
17093
+ scope: BudgetScopeSchema,
17094
+ refill: optional(BudgetRefillSchema)
17057
17095
  }).pipe(refine((intent) => intent.limit.asset === intent.asset && /[1-9]/u.test(intent.limit.value), { message: "Budget cap must be positive and use the Budget asset" })), Struct({ type: Literal("managePeople") })]);
17058
17096
  //#endregion
17059
17097
  //#region ../../packages/protocol/src/permissions/replacement-schema.ts
@@ -17254,7 +17292,7 @@ const InvitePreviewRequestSchema = Struct({
17254
17292
  Struct({
17255
17293
  type: Literal("new_budget"),
17256
17294
  label: String$1.pipe(refine((value) => value.trim().length >= 1 && value.trim().length <= 128)),
17257
- intent: BudgetIntentSchema
17295
+ intent: BudgetIntentSchema.pipe(refine((intent) => intent.refill !== "monthly", { message: "An invitation's new Budget cannot refill; change it once granted" }))
17258
17296
  })
17259
17297
  ])).pipe(refine((grants) => {
17260
17298
  if (grants.length < 1 || grants.length > 16) return false;
@@ -19813,6 +19851,30 @@ const authorities = {
19813
19851
  "ROLE_PERMISSION_DENIED"
19814
19852
  ]
19815
19853
  }),
19854
+ /**
19855
+ * What one active Budget can still spend now: its Roles allowance, read on
19856
+ * chain at the latest block as the payment gate reads it. `left` is null for
19857
+ * a Budget with no allowance (no cap). `refill` names a refilling Budget's
19858
+ * refill and when the next one is due; null for a one-off or uncapped Budget
19859
+ * (#2439). For a participant of the Organization.
19860
+ */
19861
+ budgetLeft: Operation.action("permissions.authorities.budgetLeft", {
19862
+ input: Struct({
19863
+ orgId: OrgId,
19864
+ budgetId: PermissionIdSchema
19865
+ }),
19866
+ output: Struct({
19867
+ budgetId: PermissionIdSchema,
19868
+ left: NullOr(AssetAmountSchema),
19869
+ refill: optionalKey(NullOr(BudgetNextRefillSchema))
19870
+ }),
19871
+ errors: [
19872
+ ...CALL$2,
19873
+ ...DEFECTS,
19874
+ ...CHAIN$1,
19875
+ "ROLE_PERMISSION_DENIED"
19876
+ ]
19877
+ }),
19816
19878
  /** Whether the caller's Account may spend this amount from this Budget right now. */
19817
19879
  authorize: Operation.query("permissions.authorities.authorize", {
19818
19880
  input: MoneyAuthorizationRequestSchema,
@@ -20587,7 +20649,9 @@ const PEOPLE_OPERATIONS = {
20587
20649
  emitSafeConfirmed: "accounts.safes.emitSafeConfirmed",
20588
20650
  readSafe: "accounts.safes.readSafe",
20589
20651
  recordDeployment: "accounts.safes.recordDeployment"
20590
- }
20652
+ },
20653
+ /** The home's requests to pay and Payments to retry, read in one query. */
20654
+ summaries: { loadNeedsYou: "accounts.summaries.loadNeedsYou" }
20591
20655
  },
20592
20656
  /** The host observer's names for `client.approvals.*`. */
20593
20657
  approvals: {
@@ -20701,6 +20765,7 @@ const ORGANIZATION_OPERATIONS = {
20701
20765
  payment: "org.payment",
20702
20766
  permissions: {
20703
20767
  assign: "org.permissions.assign",
20768
+ budgetLeft: "org.permissions.budgetLeft",
20704
20769
  change: "org.permissions.change",
20705
20770
  create: "org.permissions.create",
20706
20771
  get: "org.permissions.get",
@@ -20846,7 +20911,9 @@ emitSaved: "activity.annotations.emitSaved" },
20846
20911
  pay: "organizationPayments.pay",
20847
20912
  payBatch: "organizationPayments.payBatch",
20848
20913
  prepareExecution: "organizationPayments.prepareExecution",
20849
- retry: "organizationPayments.retry"
20914
+ retry: "organizationPayments.retry",
20915
+ cancel: "organizationPayments.cancel",
20916
+ redirect: "organizationPayments.redirect"
20850
20917
  },
20851
20918
  /**
20852
20919
  * Payments' internal functions and the client's own method names; its public
@@ -20868,7 +20935,9 @@ emitSaved: "activity.annotations.emitSaved" },
20868
20935
  loadContext: "payments.commands.loadContext",
20869
20936
  loadExecutionContext: "payments.commands.loadExecutionContext",
20870
20937
  /** The capped Budget a prepared Organization command spends from, before its allowance is read on chain. */
20871
- loadBudgetAllowance: "payments.commands.loadBudgetAllowance"
20938
+ loadBudgetAllowance: "payments.commands.loadBudgetAllowance",
20939
+ /** What a new Payment command would spend and from which Safe, read before it is born. */
20940
+ loadBirthFunding: "payments.commands.loadBirthFunding"
20872
20941
  },
20873
20942
  lifecycles: { prepareIntent: "payments.lifecycles.prepareIntent" },
20874
20943
  /** The stored UserOperation of every money command: Payment, Permission and configuration. */
@@ -20943,6 +21012,9 @@ emitChanged: "payroll.groups.emitChanged" }
20943
21012
  },
20944
21013
  /** Permissions' internal functions; its public rows join from `OPERATIONS`. */
20945
21014
  permissions: {
21015
+ authorities: {
21016
+ /** The Budget-left read's participant check and the Budget's stored allowance. */
21017
+ loadBudgetLeft: "permissions.authorities.loadBudgetLeft" },
20946
21018
  commands: {
20947
21019
  /** The prepare action's transaction: authorize, plan and save the command. */
20948
21020
  prepareIntent: "permissions.commands.prepareIntent",
@@ -21299,6 +21371,42 @@ const UiStepProps = {
21299
21371
  organization_id: OptionalOrgId,
21300
21372
  reason_code: OptionalReasonCode
21301
21373
  };
21374
+ /**
21375
+ * A journey's variants (`JOURNEYS`): the way a person came into a journey, or
21376
+ * the way they took through it. A variant is a property of the journey's step
21377
+ * events, never a journey of its own, so each journey funnel breaks down by
21378
+ * it. A step event takes only the variants that a journey contract names on
21379
+ * it, picked one by one; the analytics plan test checks both directions.
21380
+ * `pay_path` and `funding_source` have no carrier until their Phase 2 events.
21381
+ * `payment_*` events already carry `recipient_is_capxul_account`, and
21382
+ * `invoice_issued` carries `issuer_scope_kind`; neither is repeated here.
21383
+ */
21384
+ const JourneyVariantProps = {
21385
+ /** How a person came to Get started: by themselves, an invite, money that waited, or an invoice. */
21386
+ entry_path: optional(Literals([
21387
+ "signup",
21388
+ "invite",
21389
+ "claim",
21390
+ "invoice"
21391
+ ])),
21392
+ /** Where the person acted. `agent` is an AI agent driving the CLI. */
21393
+ surface: optional(Literals([
21394
+ "web",
21395
+ "cli",
21396
+ "agent"
21397
+ ])),
21398
+ /** Who pays: a person from their own account, or an Organization from a Budget. */
21399
+ payer_kind: optional(Literals(["person", "organization"])),
21400
+ /** How a request was paid: from the payer's inbox, or by its link at checkout. */
21401
+ pay_path: optional(Literals(["inbox", "link"])),
21402
+ /** Where an account's first money came from. `bank` is the planned on-ramp. */
21403
+ funding_source: optional(Literals([
21404
+ "deposit",
21405
+ "payment",
21406
+ "claim",
21407
+ "bank"
21408
+ ]))
21409
+ };
21302
21410
  //#endregion
21303
21411
  //#region ../../packages/observability/src/events/money.ts
21304
21412
  /**
@@ -21388,6 +21496,8 @@ const PaymentInitiatedProps = Struct({
21388
21496
  execution_id: OptionalString,
21389
21497
  payment_lifecycle_id: OptionalString,
21390
21498
  ...TelemetryEnvelopeProps,
21499
+ payer_kind: JourneyVariantProps.payer_kind,
21500
+ surface: JourneyVariantProps.surface,
21391
21501
  ...RecipientTelemetryProps,
21392
21502
  kind: String$1,
21393
21503
  payment_id: String$1
@@ -21403,6 +21513,8 @@ const PaymentLifecycleProps = {
21403
21513
  const PaymentSettledL2Props = Struct({
21404
21514
  ...PaymentLifecycleProps,
21405
21515
  ...TelemetryEnvelopeProps,
21516
+ payer_kind: JourneyVariantProps.payer_kind,
21517
+ surface: JourneyVariantProps.surface,
21406
21518
  ...RecipientTelemetryProps,
21407
21519
  kind: String$1,
21408
21520
  chain_id: Finite,
@@ -21610,6 +21722,7 @@ const OrganizationCreationStartedProps = Struct({
21610
21722
  });
21611
21723
  const OrganizationCreationReadyProps = Struct({
21612
21724
  ...TelemetryEnvelopeProps,
21725
+ surface: JourneyVariantProps.surface,
21613
21726
  $insert_id: String$1,
21614
21727
  organization_id: OrgIdTelemetrySchema,
21615
21728
  attempt_number: AttemptNumberSchema,
@@ -21634,45 +21747,6 @@ const OrganizationCreationFailedProps = Struct({
21634
21747
  ...ORGANIZATION_SETUP_REASONS
21635
21748
  ]))
21636
21749
  });
21637
- const OrgCreateStartedProps = Struct({
21638
- ...TelemetryEnvelopeProps,
21639
- org_id: OptionalOrgId,
21640
- email_domain: OptionalString,
21641
- template: OptionalString
21642
- });
21643
- const OrgSafeCreatedProps = Struct({
21644
- ...TelemetryEnvelopeProps,
21645
- org_id: OptionalOrgId,
21646
- chainId: OptionalChainId,
21647
- safe_address: OptionalAddress
21648
- });
21649
- const OrgSafeConfirmedProps = Struct({
21650
- ...TelemetryEnvelopeProps,
21651
- org_id: OptionalOrgId,
21652
- chainId: OptionalChainId,
21653
- safe_address: OptionalAddress,
21654
- durationMs: OptionalDurationMs
21655
- });
21656
- const OrgRolesSeededProps = Struct({
21657
- ...TelemetryEnvelopeProps,
21658
- org_id: OptionalOrgId,
21659
- chainId: OptionalChainId,
21660
- role: OptionalString,
21661
- txHash: OptionalTxHash
21662
- });
21663
- const OrgCreatedProps = Struct({
21664
- ...TelemetryEnvelopeProps,
21665
- org_id: OptionalOrgId,
21666
- chainId: OptionalChainId,
21667
- safe_address: OptionalAddress,
21668
- durationMs: OptionalDurationMs
21669
- });
21670
- const OrgCreateFailedProps = Struct({
21671
- ...TelemetryEnvelopeProps,
21672
- ...ChainCauseTelemetryProps,
21673
- org_id: OptionalOrgId,
21674
- reason: OptionalString
21675
- });
21676
21750
  const OrgInviteSentProps = Struct({
21677
21751
  ...TelemetryEnvelopeProps,
21678
21752
  org_id: OptionalOrgId,
@@ -21717,30 +21791,6 @@ Struct({
21717
21791
  name: Literal("organization_creation_failed"),
21718
21792
  props: OrganizationCreationFailedProps
21719
21793
  });
21720
- Struct({
21721
- name: Literal("org_create_started"),
21722
- props: OrgCreateStartedProps
21723
- });
21724
- Struct({
21725
- name: Literal("org_safe_created"),
21726
- props: OrgSafeCreatedProps
21727
- });
21728
- Struct({
21729
- name: Literal("org_safe_confirmed"),
21730
- props: OrgSafeConfirmedProps
21731
- });
21732
- Struct({
21733
- name: Literal("org_roles_seeded"),
21734
- props: OrgRolesSeededProps
21735
- });
21736
- Struct({
21737
- name: Literal("org_created"),
21738
- props: OrgCreatedProps
21739
- });
21740
- Struct({
21741
- name: Literal("org_create_failed"),
21742
- props: OrgCreateFailedProps
21743
- });
21744
21794
  Struct({
21745
21795
  name: Literal("org_invite_sent"),
21746
21796
  props: OrgInviteSentProps
@@ -22126,6 +22176,14 @@ Struct({
22126
22176
  account_kind: optional(AccountKindSchema)
22127
22177
  })
22128
22178
  });
22179
+ Struct({
22180
+ name: Literal("ui_approval_sign_in_required"),
22181
+ props: Struct({
22182
+ ...TelemetryEnvelopeProps,
22183
+ approval_id: String$1,
22184
+ reason: Literals(["signed_out", "wrong_account"])
22185
+ })
22186
+ });
22129
22187
  Struct({
22130
22188
  name: Literal("payroll_group_changed"),
22131
22189
  props: Struct({
@@ -22381,6 +22439,8 @@ const CLI_COMMAND_NAMES = [
22381
22439
  "payment.get",
22382
22440
  "payment.wait",
22383
22441
  "payment.retry",
22442
+ "payment.cancel",
22443
+ "payment.redirect",
22384
22444
  "inbox",
22385
22445
  CAPXUL_OPERATIONS.inbox.list,
22386
22446
  "inbox.get",
@@ -22614,10 +22674,14 @@ const BootstrapFailedProps = Struct({
22614
22674
  });
22615
22675
  const MemberActivationStartedProps = Struct({
22616
22676
  ...TelemetryEnvelopeProps,
22677
+ entry_path: JourneyVariantProps.entry_path,
22678
+ surface: JourneyVariantProps.surface,
22617
22679
  $insert_id: String$1
22618
22680
  });
22619
22681
  const MemberActivationReadyProps = Struct({
22620
22682
  ...TelemetryEnvelopeProps,
22683
+ entry_path: JourneyVariantProps.entry_path,
22684
+ surface: JourneyVariantProps.surface,
22621
22685
  $insert_id: String$1,
22622
22686
  duration_ms: DurationMsSchema
22623
22687
  });
@@ -22775,7 +22839,7 @@ const FIELD_RULES = {
22775
22839
  },
22776
22840
  anonymousId: {
22777
22841
  maxLength: 128,
22778
- pattern: /^anon_[A-Za-z0-9-]+$/u
22842
+ pattern: /^(?:anon_[A-Za-z0-9-]+|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/u
22779
22843
  },
22780
22844
  traceparent: {
22781
22845
  maxLength: 55,
@@ -24530,6 +24594,7 @@ function paymentsV2Signature(name) {
24530
24594
  paymentsV2Signature("send");
24531
24595
  paymentsV2Signature("sendBatch");
24532
24596
  paymentsV2Signature("createCommitment");
24597
+ paymentsV2Signature("cancel"), paymentsV2Signature("redirect");
24533
24598
  //#endregion
24534
24599
  //#region ../../packages/protocol/src/evm/organization-payments.ts
24535
24600
  /** Supported Organization permission identities, newest first. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capxul/sandbox",
3
- "version": "4.20.0-beta.27",
3
+ "version": "4.20.0-beta.29",
4
4
  "private": false,
5
5
  "description": "Capxul sandbox CLI for canonical quickstart keys and testnet faucet funds.",
6
6
  "keywords": [
@@ -42,9 +42,9 @@
42
42
  "typescript": "npm:@typescript/typescript6@6.0.2",
43
43
  "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0",
44
44
  "vite-plus": "1.0.0",
45
- "@capxul/observability": "4.20.0-beta.27",
46
- "@capxul/protocol": "0.2.0-beta.1",
47
- "@capxul/sdk": "4.20.0-beta.27",
45
+ "@capxul/observability": "4.20.0-beta.29",
46
+ "@capxul/protocol": "0.2.0-beta.3",
47
+ "@capxul/sdk": "4.20.0-beta.29",
48
48
  "@capxul/typescript-config": "0.0.0"
49
49
  },
50
50
  "scripts": {