@capxul/sandbox 4.20.0-beta.26 → 4.20.0-beta.28

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 +114 -88
  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);
@@ -16221,10 +16221,19 @@ const ApprovalNetworkSchema = Struct({
16221
16221
  name: String$1,
16222
16222
  explorerUrl: String$1
16223
16223
  });
16224
+ /**
16225
+ * Whose money the operation moves: the person's own, or an Organization's,
16226
+ * which a reader follows through that Organization's scope.
16227
+ */
16228
+ const ApprovalActorSchema = Union([Struct({ kind: Literal("personal") }), Struct({
16229
+ kind: Literal("organization"),
16230
+ orgId: NonEmptyString
16231
+ })]);
16224
16232
  /** What the person reads before they sign. */
16225
16233
  const ApprovalSummarySchema = Struct({
16226
16234
  title: String$1,
16227
16235
  from: Struct({
16236
+ kind: Literals(["personal", "organization"]),
16228
16237
  label: String$1,
16229
16238
  address: AddressSchema$1
16230
16239
  }),
@@ -16246,6 +16255,7 @@ const ApprovalSchema = Struct({
16246
16255
  url: String$1,
16247
16256
  kind: Literals(APPROVAL_KINDS),
16248
16257
  state: Literals(APPROVAL_STATES),
16258
+ actor: ApprovalActorSchema,
16249
16259
  summary: ApprovalSummarySchema,
16250
16260
  operation: ApprovalOperationSchema,
16251
16261
  /** Who must sign: the owner key of the paying Safe. */
@@ -16916,6 +16926,15 @@ const probes = {
16916
16926
  })
16917
16927
  };
16918
16928
  //#endregion
16929
+ //#region ../../packages/protocol/src/evm/role-dsl.ts
16930
+ /**
16931
+ * How a capped Budget's allowance refills (#2298). `monthly` refills the
16932
+ * allowance to its cap every 30 days. Roles v2 counts fixed periods from the
16933
+ * moment the allowance is set; it has no calendar month. Absent means `none`:
16934
+ * the cap is one pot that spending drains for good.
16935
+ */
16936
+ const ORG_BUDGET_REFILLS = ["monthly", "none"];
16937
+ //#endregion
16919
16938
  //#region ../../packages/protocol/src/permissions/permission-schema.ts
16920
16939
  /**
16921
16940
  * One stored `setAllowance` call inside a command's expected authority set.
@@ -16954,12 +16973,19 @@ const BudgetScopeSchema = Struct({
16954
16973
  })]),
16955
16974
  actions: NonEmptyArray(Literals(["pay", "commitments"]))
16956
16975
  }).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" }));
16976
+ /**
16977
+ * How a capped Budget refills (#2298): `monthly` tops the cap back up every 30
16978
+ * days (a fixed Roles v2 period, not a calendar month); `none` never refills.
16979
+ * Absent means `none`, and writers store only `monthly`.
16980
+ */
16981
+ const BudgetRefillSchema = Literals(ORG_BUDGET_REFILLS);
16957
16982
  /** The accepted product policy stored with one Permission revision. */
16958
16983
  const CurrentPolicySchema = Union([Struct({
16959
16984
  type: Literal("budget"),
16960
16985
  asset: AssetIdSchema,
16961
16986
  limit: NullOr(String$1),
16962
- scope: BudgetScopeSchema
16987
+ scope: BudgetScopeSchema,
16988
+ refill: optional(BudgetRefillSchema)
16963
16989
  }), Struct({ type: Literal("managePeople") })]);
16964
16990
  const BudgetIntentSchema = CurrentPolicySchema.pipe(refine((value) => {
16965
16991
  if (value.type !== "budget") return false;
@@ -17024,7 +17050,8 @@ const ResolvedPermissionBudgetPolicySchema = Struct({
17024
17050
  "send",
17025
17051
  "sendBatch",
17026
17052
  "createCommitment"
17027
- ]))
17053
+ ])),
17054
+ refill: optional(BudgetRefillSchema)
17028
17055
  });
17029
17056
  const PermissionRecipientBindingSchema = Struct({
17030
17057
  accountId: AccountIdSchema$1,
@@ -17036,14 +17063,16 @@ const StoredPermissionIntentSchema = Union([Struct({
17036
17063
  type: Literal("budget"),
17037
17064
  asset: AssetIdSchema,
17038
17065
  limit: NullOr(AssetAmountSchema),
17039
- scope: optional(BudgetScopeSchema)
17066
+ scope: optional(BudgetScopeSchema),
17067
+ refill: optional(BudgetRefillSchema)
17040
17068
  }).pipe(refine((intent) => intent.limit === null || intent.limit.asset === intent.asset, { message: "Budget limit must use the Budget asset" })), Struct({ type: Literal("managePeople") })]);
17041
17069
  /** Writes state every granted right and use a finite positive AssetAmount cap. */
17042
17070
  const PermissionIntentSchema = Union([Struct({
17043
17071
  type: Literal("budget"),
17044
17072
  asset: AssetIdSchema,
17045
17073
  limit: AssetAmountSchema,
17046
- scope: BudgetScopeSchema
17074
+ scope: BudgetScopeSchema,
17075
+ refill: optional(BudgetRefillSchema)
17047
17076
  }).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") })]);
17048
17077
  //#endregion
17049
17078
  //#region ../../packages/protocol/src/permissions/replacement-schema.ts
@@ -17244,7 +17273,7 @@ const InvitePreviewRequestSchema = Struct({
17244
17273
  Struct({
17245
17274
  type: Literal("new_budget"),
17246
17275
  label: String$1.pipe(refine((value) => value.trim().length >= 1 && value.trim().length <= 128)),
17247
- intent: BudgetIntentSchema
17276
+ intent: BudgetIntentSchema.pipe(refine((intent) => intent.refill !== "monthly", { message: "An invitation's new Budget cannot refill; change it once granted" }))
17248
17277
  })
17249
17278
  ])).pipe(refine((grants) => {
17250
17279
  if (grants.length < 1 || grants.length > 16) return false;
@@ -20577,7 +20606,9 @@ const PEOPLE_OPERATIONS = {
20577
20606
  emitSafeConfirmed: "accounts.safes.emitSafeConfirmed",
20578
20607
  readSafe: "accounts.safes.readSafe",
20579
20608
  recordDeployment: "accounts.safes.recordDeployment"
20580
- }
20609
+ },
20610
+ /** The home's requests to pay and Payments to retry, read in one query. */
20611
+ summaries: { loadNeedsYou: "accounts.summaries.loadNeedsYou" }
20581
20612
  },
20582
20613
  /** The host observer's names for `client.approvals.*`. */
20583
20614
  approvals: {
@@ -20758,7 +20789,11 @@ const ORGANIZATION_OPERATIONS = {
20758
20789
  seedNativeReadiness: "operator.fixtures.seedNativeReadiness",
20759
20790
  seedPrerequisites: "operator.fixtures.seedPrerequisites"
20760
20791
  },
20761
- identities: { purgeByEmail: "operator.identities.purgeByEmail" }
20792
+ identities: {
20793
+ purgeByEmail: "operator.identities.purgeByEmail",
20794
+ /** One Account and every row that refers to it, unless it has Payments or an Organization tie. */
20795
+ purgeAccount: "operator.identities.purgeAccount"
20796
+ }
20762
20797
  },
20763
20798
  /** Organizations' internal functions; its public rows join from `OPERATIONS`. */
20764
20799
  organizations: {
@@ -20832,7 +20867,9 @@ emitSaved: "activity.annotations.emitSaved" },
20832
20867
  pay: "organizationPayments.pay",
20833
20868
  payBatch: "organizationPayments.payBatch",
20834
20869
  prepareExecution: "organizationPayments.prepareExecution",
20835
- retry: "organizationPayments.retry"
20870
+ retry: "organizationPayments.retry",
20871
+ cancel: "organizationPayments.cancel",
20872
+ redirect: "organizationPayments.redirect"
20836
20873
  },
20837
20874
  /**
20838
20875
  * Payments' internal functions and the client's own method names; its public
@@ -20854,7 +20891,9 @@ emitSaved: "activity.annotations.emitSaved" },
20854
20891
  loadContext: "payments.commands.loadContext",
20855
20892
  loadExecutionContext: "payments.commands.loadExecutionContext",
20856
20893
  /** The capped Budget a prepared Organization command spends from, before its allowance is read on chain. */
20857
- loadBudgetAllowance: "payments.commands.loadBudgetAllowance"
20894
+ loadBudgetAllowance: "payments.commands.loadBudgetAllowance",
20895
+ /** What a new Payment command would spend and from which Safe, read before it is born. */
20896
+ loadBirthFunding: "payments.commands.loadBirthFunding"
20858
20897
  },
20859
20898
  lifecycles: { prepareIntent: "payments.lifecycles.prepareIntent" },
20860
20899
  /** The stored UserOperation of every money command: Payment, Permission and configuration. */
@@ -21008,7 +21047,11 @@ const PLATFORM_OPERATIONS = {
21008
21047
  recordUse: "applications.bootstraps.recordUse",
21009
21048
  resolve: "applications.bootstraps.resolve"
21010
21049
  },
21011
- keys: { issue: "applications.keys.issue" },
21050
+ keys: {
21051
+ issue: "applications.keys.issue",
21052
+ /** Operator-only: revoke one key by its id, whoever owns it. */
21053
+ revokeById: "applications.keys.revokeById"
21054
+ },
21012
21055
  quickstarts: {
21013
21056
  claim: "applications.quickstarts.claim",
21014
21057
  mint: "applications.quickstarts.mint"
@@ -21281,6 +21324,42 @@ const UiStepProps = {
21281
21324
  organization_id: OptionalOrgId,
21282
21325
  reason_code: OptionalReasonCode
21283
21326
  };
21327
+ /**
21328
+ * A journey's variants (`JOURNEYS`): the way a person came into a journey, or
21329
+ * the way they took through it. A variant is a property of the journey's step
21330
+ * events, never a journey of its own, so each journey funnel breaks down by
21331
+ * it. A step event takes only the variants that a journey contract names on
21332
+ * it, picked one by one; the analytics plan test checks both directions.
21333
+ * `pay_path` and `funding_source` have no carrier until their Phase 2 events.
21334
+ * `payment_*` events already carry `recipient_is_capxul_account`, and
21335
+ * `invoice_issued` carries `issuer_scope_kind`; neither is repeated here.
21336
+ */
21337
+ const JourneyVariantProps = {
21338
+ /** How a person came to Get started: by themselves, an invite, money that waited, or an invoice. */
21339
+ entry_path: optional(Literals([
21340
+ "signup",
21341
+ "invite",
21342
+ "claim",
21343
+ "invoice"
21344
+ ])),
21345
+ /** Where the person acted. `agent` is an AI agent driving the CLI. */
21346
+ surface: optional(Literals([
21347
+ "web",
21348
+ "cli",
21349
+ "agent"
21350
+ ])),
21351
+ /** Who pays: a person from their own account, or an Organization from a Budget. */
21352
+ payer_kind: optional(Literals(["person", "organization"])),
21353
+ /** How a request was paid: from the payer's inbox, or by its link at checkout. */
21354
+ pay_path: optional(Literals(["inbox", "link"])),
21355
+ /** Where an account's first money came from. `bank` is the planned on-ramp. */
21356
+ funding_source: optional(Literals([
21357
+ "deposit",
21358
+ "payment",
21359
+ "claim",
21360
+ "bank"
21361
+ ]))
21362
+ };
21284
21363
  //#endregion
21285
21364
  //#region ../../packages/observability/src/events/money.ts
21286
21365
  /**
@@ -21370,6 +21449,8 @@ const PaymentInitiatedProps = Struct({
21370
21449
  execution_id: OptionalString,
21371
21450
  payment_lifecycle_id: OptionalString,
21372
21451
  ...TelemetryEnvelopeProps,
21452
+ payer_kind: JourneyVariantProps.payer_kind,
21453
+ surface: JourneyVariantProps.surface,
21373
21454
  ...RecipientTelemetryProps,
21374
21455
  kind: String$1,
21375
21456
  payment_id: String$1
@@ -21385,6 +21466,8 @@ const PaymentLifecycleProps = {
21385
21466
  const PaymentSettledL2Props = Struct({
21386
21467
  ...PaymentLifecycleProps,
21387
21468
  ...TelemetryEnvelopeProps,
21469
+ payer_kind: JourneyVariantProps.payer_kind,
21470
+ surface: JourneyVariantProps.surface,
21388
21471
  ...RecipientTelemetryProps,
21389
21472
  kind: String$1,
21390
21473
  chain_id: Finite,
@@ -21592,6 +21675,7 @@ const OrganizationCreationStartedProps = Struct({
21592
21675
  });
21593
21676
  const OrganizationCreationReadyProps = Struct({
21594
21677
  ...TelemetryEnvelopeProps,
21678
+ surface: JourneyVariantProps.surface,
21595
21679
  $insert_id: String$1,
21596
21680
  organization_id: OrgIdTelemetrySchema,
21597
21681
  attempt_number: AttemptNumberSchema,
@@ -21616,45 +21700,6 @@ const OrganizationCreationFailedProps = Struct({
21616
21700
  ...ORGANIZATION_SETUP_REASONS
21617
21701
  ]))
21618
21702
  });
21619
- const OrgCreateStartedProps = Struct({
21620
- ...TelemetryEnvelopeProps,
21621
- org_id: OptionalOrgId,
21622
- email_domain: OptionalString,
21623
- template: OptionalString
21624
- });
21625
- const OrgSafeCreatedProps = Struct({
21626
- ...TelemetryEnvelopeProps,
21627
- org_id: OptionalOrgId,
21628
- chainId: OptionalChainId,
21629
- safe_address: OptionalAddress
21630
- });
21631
- const OrgSafeConfirmedProps = Struct({
21632
- ...TelemetryEnvelopeProps,
21633
- org_id: OptionalOrgId,
21634
- chainId: OptionalChainId,
21635
- safe_address: OptionalAddress,
21636
- durationMs: OptionalDurationMs
21637
- });
21638
- const OrgRolesSeededProps = Struct({
21639
- ...TelemetryEnvelopeProps,
21640
- org_id: OptionalOrgId,
21641
- chainId: OptionalChainId,
21642
- role: OptionalString,
21643
- txHash: OptionalTxHash
21644
- });
21645
- const OrgCreatedProps = Struct({
21646
- ...TelemetryEnvelopeProps,
21647
- org_id: OptionalOrgId,
21648
- chainId: OptionalChainId,
21649
- safe_address: OptionalAddress,
21650
- durationMs: OptionalDurationMs
21651
- });
21652
- const OrgCreateFailedProps = Struct({
21653
- ...TelemetryEnvelopeProps,
21654
- ...ChainCauseTelemetryProps,
21655
- org_id: OptionalOrgId,
21656
- reason: OptionalString
21657
- });
21658
21703
  const OrgInviteSentProps = Struct({
21659
21704
  ...TelemetryEnvelopeProps,
21660
21705
  org_id: OptionalOrgId,
@@ -21699,30 +21744,6 @@ Struct({
21699
21744
  name: Literal("organization_creation_failed"),
21700
21745
  props: OrganizationCreationFailedProps
21701
21746
  });
21702
- Struct({
21703
- name: Literal("org_create_started"),
21704
- props: OrgCreateStartedProps
21705
- });
21706
- Struct({
21707
- name: Literal("org_safe_created"),
21708
- props: OrgSafeCreatedProps
21709
- });
21710
- Struct({
21711
- name: Literal("org_safe_confirmed"),
21712
- props: OrgSafeConfirmedProps
21713
- });
21714
- Struct({
21715
- name: Literal("org_roles_seeded"),
21716
- props: OrgRolesSeededProps
21717
- });
21718
- Struct({
21719
- name: Literal("org_created"),
21720
- props: OrgCreatedProps
21721
- });
21722
- Struct({
21723
- name: Literal("org_create_failed"),
21724
- props: OrgCreateFailedProps
21725
- });
21726
21747
  Struct({
21727
21748
  name: Literal("org_invite_sent"),
21728
21749
  props: OrgInviteSentProps
@@ -22596,10 +22617,14 @@ const BootstrapFailedProps = Struct({
22596
22617
  });
22597
22618
  const MemberActivationStartedProps = Struct({
22598
22619
  ...TelemetryEnvelopeProps,
22620
+ entry_path: JourneyVariantProps.entry_path,
22621
+ surface: JourneyVariantProps.surface,
22599
22622
  $insert_id: String$1
22600
22623
  });
22601
22624
  const MemberActivationReadyProps = Struct({
22602
22625
  ...TelemetryEnvelopeProps,
22626
+ entry_path: JourneyVariantProps.entry_path,
22627
+ surface: JourneyVariantProps.surface,
22603
22628
  $insert_id: String$1,
22604
22629
  duration_ms: DurationMsSchema
22605
22630
  });
@@ -22757,7 +22782,7 @@ const FIELD_RULES = {
22757
22782
  },
22758
22783
  anonymousId: {
22759
22784
  maxLength: 128,
22760
- pattern: /^anon_[A-Za-z0-9-]+$/u
22785
+ 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
22761
22786
  },
22762
22787
  traceparent: {
22763
22788
  maxLength: 55,
@@ -24512,6 +24537,7 @@ function paymentsV2Signature(name) {
24512
24537
  paymentsV2Signature("send");
24513
24538
  paymentsV2Signature("sendBatch");
24514
24539
  paymentsV2Signature("createCommitment");
24540
+ paymentsV2Signature("cancel"), paymentsV2Signature("redirect");
24515
24541
  //#endregion
24516
24542
  //#region ../../packages/protocol/src/evm/organization-payments.ts
24517
24543
  /** Supported Organization permission identities, newest first. */
@@ -24667,6 +24693,14 @@ function statusFromAccount(account, requirement) {
24667
24693
  }
24668
24694
  };
24669
24695
  }
24696
+ Struct({
24697
+ permissionId: AuthorizePayrollRunExecutionInputSchema.fields.permissionId,
24698
+ asset: AuthorizePayrollRunExecutionInputSchema.fields.asset,
24699
+ period: AuthorizePayrollRunExecutionInputSchema.fields.period,
24700
+ items: AuthorizePayrollRunExecutionInputSchema.fields.items,
24701
+ requestKey: optional(AuthorizePayrollRunExecutionInputSchema.fields.requestKey)
24702
+ });
24703
+ runs.authorize.name;
24670
24704
  //#endregion
24671
24705
  //#region ../../packages/sdk/src/platform/transport/wire.ts
24672
24706
  /**
@@ -33576,14 +33610,6 @@ Roles__factory.createInterface();
33576
33610
  toFunctionSelector("setAllowance(bytes32,uint128,uint128,uint128,uint64,uint64)");
33577
33611
  toFunctionSelector("setTransactionUnwrapper(address,bytes4,address)");
33578
33612
  toFunctionSelector("assignRoles(address,bytes32[],bool[])");
33579
- Struct({
33580
- permissionId: AuthorizePayrollRunExecutionInputSchema.fields.permissionId,
33581
- asset: AuthorizePayrollRunExecutionInputSchema.fields.asset,
33582
- period: AuthorizePayrollRunExecutionInputSchema.fields.period,
33583
- items: AuthorizePayrollRunExecutionInputSchema.fields.items,
33584
- requestKey: optional(AuthorizePayrollRunExecutionInputSchema.fields.requestKey)
33585
- });
33586
- runs.authorize.name;
33587
33613
  Struct({
33588
33614
  token: optional(NullOr(String$1)),
33589
33615
  session: optional(NullOr(Struct({ token: optional(NullOr(String$1)) })))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capxul/sandbox",
3
- "version": "4.20.0-beta.26",
3
+ "version": "4.20.0-beta.28",
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.26",
46
- "@capxul/protocol": "0.2.0-beta.0",
47
- "@capxul/sdk": "4.20.0-beta.26",
45
+ "@capxul/observability": "4.20.0-beta.28",
46
+ "@capxul/protocol": "0.2.0-beta.2",
47
+ "@capxul/sdk": "4.20.0-beta.28",
48
48
  "@capxul/typescript-config": "0.0.0"
49
49
  },
50
50
  "scripts": {