@lepsto/sdk-app 85.0.0 → 85.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,17 +1,49 @@
1
- # @lessly/sdk-app
1
+ # @lepsto/sdk-app
2
2
 
3
- The Lessly SDK for App is a TypeScript SDK that provides runtime bindings and type-safe generated code for interacting with Lessly Platform APIs and services. This package generates type definitions and client bindings from API catalogs, enabling developers to build applications that consume Lessly platform services with full type safety and autocompletion.
3
+ The Lepsto SDK for App is a TypeScript SDK that provides runtime bindings and type-safe generated code for interacting with Lepsto Platform APIs and services. This package generates type definitions and client bindings from API catalogs, enabling developers to build applications that consume Lepsto platform services with full type safety and autocompletion.
4
4
 
5
5
  **Note:** The `src/gen` directory contains generated SDK code and should not be edited by hand. Generated files are produced by running `npm run generate` with an API catalog.
6
6
 
7
7
  The committed `src/gen` is a **convenience snapshot** — it lets the repo type-check, test, and build offline. It is **not** the source of truth: canonical generation happens **at publish time**, when Cloud Build regenerates `src/gen` from the live catalog before publishing. The catalog is **mid-migration**, so the committed snapshot's namespaces (currently `organization` and `playground`) will **grow as platform extensions migrate to `@lessly-platform/tools`** — a namespace only appears once its tools carry a REST binding (tools without one are excluded until migrated). Regenerate the snapshot with `npx tsx scripts/generate.ts <catalog.json> src/gen && npm run sync-exports` against the live catalog (`https://api.lessly.dev/catalog/tools`).
8
8
 
9
+ ## Package name: `@lepsto/sdk-app` (and legacy `@lessly/sdk-app`)
10
+
11
+ ```sh
12
+ npm i @lepsto/sdk-app
13
+ ```
14
+
15
+ The package is published on public npmjs as **`@lepsto/sdk-app`** and, during the transition,
16
+ **also** as `@lessly/sdk-app` — same build, same version, identical `exports` map. The old name is
17
+ not deprecated.
18
+
19
+ `package.json` keeps `name: @lessly/sdk-app` on purpose: the dev-console SDK-rebuild Cloud Build
20
+ job derives `PKG` from it (`require('./package.json').name`) for its `npm view` probe and runs
21
+ `npm run publish:npmjs -- --tag <channel>`. The new name is the **derived** tarball.
22
+
23
+ | Script | Publishes | Contract |
24
+ | --- | --- | --- |
25
+ | `npm run publish:npmjs -- --tag <channel>` | `@lessly/sdk-app` | unchanged; token with write on `@lessly` |
26
+ | `npm run publish:npmjs:lepsto -- --tag <channel>` | `@lepsto/sdk-app` | same args as `publish:npmjs`; token with write on `@lepsto` |
27
+
28
+ `publish:npmjs:lepsto` (`scripts/publish-alias.ts`) builds once, `npm pack`s, rewrites `name` and `description`
29
+ (the Lepsto text; `package.json` keeps the legacy description for `@lessly/sdk-app`),
30
+ checks every `exports` target is in the tarball, and publishes with `--registry` and
31
+ `--@lepsto:registry` pinned. Run it after `publish:npmjs` against the same checkout so both names
32
+ carry the same version.
33
+
34
+ **Bootstrap** (`.github/workflows/publish-lepsto.yml`, manual): mirrors already-published legacy
35
+ tarballs instead of rebuilding — `npm pack @lessly/sdk-app@<v>`, rewrite `name` and `description`, drop
36
+ `publishConfig.registry`, publish as `@lepsto/sdk-app@<v>` (`tsx scripts/publish-alias.ts --mirror
37
+ 84.0.0:latest,85.0.0:next`). Versions that already exist are skipped. It uses `NPM_BOOTSTRAP_TOKEN`
38
+ and is ready for npm Trusted Publishing (`id-token: write`, npm >= 11.5.1, token only in the publish
39
+ step's env).
40
+
9
41
  ## Usage
10
42
 
11
43
  Create a client with `createLesslyApp`, then call operations through the Proxy namespace tree:
12
44
 
13
45
  ```ts
14
- import { createLesslyApp } from '@lessly/sdk-app';
46
+ import { createLesslyApp } from '@lepsto/sdk-app';
15
47
 
16
48
  const sdk = createLesslyApp({
17
49
  baseUrl: 'https://api.lessly.dev', // or a page-relative '/api' in the browser
@@ -52,7 +84,7 @@ operation as a **step**. `src/gen/manifest.gen.ts` exports the whole table, re-e
52
84
  package root:
53
85
 
54
86
  ```ts
55
- import { compositions } from '@lessly/sdk-app';
87
+ import { compositions } from '@lepsto/sdk-app';
56
88
 
57
89
  if ('mail_domain_create' in compositions) {
58
90
  const step = compositions['mail_domain_create'];
@@ -86,7 +118,7 @@ without the `lessly_csrf` cookie fail before the network with `status: 0` and
86
118
 
87
119
  ### TanStack Query
88
120
 
89
- Each namespace subpath (`@lessly/sdk-app/<namespace>`) also ships framework-agnostic
121
+ Each namespace subpath (`@lepsto/sdk-app/<namespace>`) also ships framework-agnostic
90
122
  query/mutation **option factories** — plain objects, not hooks — usable with any
91
123
  TanStack Query adapter (React, Solid, Vue, Svelte). You pass the `sdk` instance
92
124
  explicitly:
@@ -97,7 +129,7 @@ import { useQuery, useMutation } from '@tanstack/react-query';
97
129
  import {
98
130
  organizationConnectorsListQueryOptions,
99
131
  organizationProductCreateMutationOptions,
100
- } from '@lessly/sdk-app/organization';
132
+ } from '@lepsto/sdk-app/organization';
101
133
 
102
134
  function Connectors() {
103
135
  const { data } = useQuery(organizationConnectorsListQueryOptions(sdk, { productId: 'prod_123' }));
package/docs/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # Building a Lessly App
2
2
 
3
- This is the entry point for building a Lessly **App** with `@lessly/sdk-app`.
3
+ This is the entry point for building a Lessly **App** with `@lepsto/sdk-app`.
4
4
  Read this file first, then `rules.md`, then whichever recipe under `recipes/`
5
5
  matches the task in front of you.
6
6
 
7
7
  This path is stable: every scaffolded app's `AGENTS.md` points agents at
8
- `node_modules/@lessly/sdk-app/docs/README.md`. It will not move or be renamed.
8
+ `node_modules/@lepsto/sdk-app/docs/README.md` (or `node_modules/@lessly/sdk-app/docs/README.md` under the legacy name). It will not move or be renamed.
9
9
 
10
10
  ## What an App is
11
11
 
12
12
  A Lessly **App** is a pure-frontend Module Federation remote built on
13
- `@lessly/sdk-app`. It ships no backend, no database, and no MCP endpoint — all
13
+ `@lepsto/sdk-app`. It ships no backend, no database, and no MCP endpoint — all
14
14
  platform data access goes through the SDK, and all identity/session state is
15
15
  handed to it by the shell that hosts it.
16
16
 
@@ -25,7 +25,7 @@ does not apply.
25
25
 
26
26
  - **Frontend-only.** No server process, no database, no MCP endpoint ships with
27
27
  an App.
28
- - **Data only via `@lessly/sdk-app`.** All platform API calls go through the SDK
28
+ - **Data only via `@lepsto/sdk-app`.** All platform API calls go through the SDK
29
29
  client (`createLesslyApp`) or its generated query/mutation option factories.
30
30
  No direct `fetch` to a platform host, no other HTTP client for platform data.
31
31
  - **Auth is ambient.** The hosting shell owns tokens, login, refresh, and
@@ -78,11 +78,11 @@ you need to touch it directly.
78
78
 
79
79
  ## Keeping this guide current
80
80
 
81
- This guide ships inside `@lessly/sdk-app` itself, so updating the SDK updates
81
+ This guide ships inside `@lepsto/sdk-app` itself, so updating the SDK updates
82
82
  the guide in the same step:
83
83
 
84
84
  ```sh
85
- npm i @lessly/sdk-app@latest
85
+ npm i @lepsto/sdk-app@latest
86
86
  ```
87
87
 
88
88
  Always use the `@latest` form (not `npm update`) — see `rules.md` APP-007 for
@@ -15,7 +15,7 @@ is the authority. See APP-012 in `../rules.md`.
15
15
  Every client from `createLesslyApp` carries an `access` object:
16
16
 
17
17
  ```ts
18
- import { createLesslyApp } from '@lessly/sdk-app';
18
+ import { createLesslyApp } from '@lepsto/sdk-app';
19
19
 
20
20
  const app = createLesslyApp({ baseUrl: '/api', productId });
21
21
 
@@ -80,7 +80,7 @@ drift from the method it is meant to describe; the method cannot.
80
80
  ```tsx
81
81
  // src/App.tsx
82
82
  import { useEffect } from 'react';
83
- import { createLesslyApp } from '@lessly/sdk-app';
83
+ import { createLesslyApp } from '@lepsto/sdk-app';
84
84
  import { TooltipProvider } from '@lessly/ui';
85
85
 
86
86
  export default function App({ productId }: { productId: string }) {
@@ -117,8 +117,8 @@ refetched on a timer.
117
117
  ## 2. `useCan` on primary actions — disable, don't hide
118
118
 
119
119
  ```tsx
120
- import { accessReason } from '@lessly/sdk-app';
121
- import { useAccess, useCan } from '@lessly/sdk-app/react';
120
+ import { accessReason } from '@lepsto/sdk-app';
121
+ import { useAccess, useCan } from '@lepsto/sdk-app/react';
122
122
  import { Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@lessly/ui';
123
123
 
124
124
  function AddDomainButton({ app, onClick }: { app: App; onClick: () => void }) {
@@ -183,7 +183,7 @@ Every App says the same sentence, and both of its values come off the generated
183
183
  method:
184
184
 
185
185
  ```tsx
186
- import { accessReason } from '@lessly/sdk-app';
186
+ import { accessReason } from '@lepsto/sdk-app';
187
187
 
188
188
  accessReason(app.mail.domain.create);
189
189
  // "Requires level:admin (mail_domain_create). Ask an admin of this product."
@@ -225,12 +225,12 @@ from the catalog when the key is one the SDK knows, but a key with **no** catalo
225
225
  entry can only be matched by key pattern — no level grant reaches it, which is
226
226
  exactly what the gateway does with an uncatalogued key.
227
227
 
228
- > **On an older SDK.** `accessReason` ships from `@lessly/sdk-app`. On a version
228
+ > **On an older SDK.** `accessReason` ships from `@lepsto/sdk-app`. On a version
229
229
  > before it landed, define it locally with exactly this signature and body, then
230
230
  > replace it with the import when you upgrade:
231
231
  >
232
232
  > ```ts
233
- > import type { Operation } from '@lessly/sdk-app';
233
+ > import type { Operation } from '@lepsto/sdk-app';
234
234
  >
235
235
  > const ok = (v: unknown): v is string => typeof v === 'string' && v.trim() !== '';
236
236
  >
@@ -276,11 +276,11 @@ off the method.
276
276
 
277
277
  Sometimes there is no method to read `op.level` from: an App test double that has
278
278
  to answer `can()` for a key, a runtime probe over keys it was handed. The answer
279
- is still not a literal and still not a table in the App — `@lessly/sdk-app`
279
+ is still not a literal and still not a table in the App — `@lepsto/sdk-app`
280
280
  exports the catalog's own level map:
281
281
 
282
282
  ```ts
283
- import { operations, accessReason } from '@lessly/sdk-app';
283
+ import { operations, accessReason } from '@lepsto/sdk-app';
284
284
 
285
285
  operations['mail_domain_create']; // 'admin'
286
286
  operations['analytics_insight_delete']; // 'write'
@@ -346,7 +346,7 @@ if (state === 'loading') return <Spinner />;
346
346
  if (state === 'error') return <p>Could not load your permissions. <button onClick={reload}>Retry</button></p>;
347
347
  ```
348
348
 
349
- React is an **optional peer** of this package: `@lessly/sdk-app/react` is only
349
+ React is an **optional peer** of this package: `@lepsto/sdk-app/react` is only
350
350
  loaded if you import it, and installing the SDK does not pull React in.
351
351
 
352
352
  ### Actions without a button
@@ -594,9 +594,9 @@ change between the load and the click, and a screen can always be reached
594
594
  before the snapshot is.
595
595
 
596
596
  ```tsx
597
- import { isAccessDenied } from '@lessly/sdk-app';
597
+ import { isAccessDenied } from '@lepsto/sdk-app';
598
598
  import { useQuery } from '@tanstack/react-query';
599
- import { mailDomainListQueryOptions } from '@lessly/sdk-app/mail';
599
+ import { mailDomainListQueryOptions } from '@lepsto/sdk-app/mail';
600
600
 
601
601
  function DomainList({ app }: { app: App }) {
602
602
  const { data, error, isPending } = useQuery(mailDomainListQueryOptions(app, {}));
@@ -101,11 +101,11 @@ Update the SDK and `@lessly/app-dev` with the `@latest` form, never `npm
101
101
  update`:
102
102
 
103
103
  ```sh
104
- npm i @lessly/sdk-app@latest
104
+ npm i @lepsto/sdk-app@latest
105
105
  npm i @lessly/app-dev@latest
106
106
  ```
107
107
 
108
- `@lessly/sdk-app` and `@lessly/app-dev` are pre-1.0 and pinned with caret
108
+ `@lepsto/sdk-app` and `@lessly/app-dev` are pre-1.0 and pinned with caret
109
109
  ranges, so `npm update` never crosses a minor version — and since the SDK
110
110
  bumps its minor version whenever the platform ships a new tool, `npm update`
111
111
  would never actually deliver those updates (see APP-007).
@@ -1,7 +1,7 @@
1
1
  # Recipe: calling the platform API
2
2
 
3
3
  How to reach Lessly platform data from an App. The normative rule is APP-001
4
- (all platform data access goes through `@lessly/sdk-app`) and APP-006 (prefer
4
+ (all platform data access goes through `@lepsto/sdk-app`) and APP-006 (prefer
5
5
  the generated option factories) — this page shows the *how*.
6
6
 
7
7
  ## Create the client
@@ -10,7 +10,7 @@ Create one client with `createLesslyApp` and call operations through the
10
10
  Proxy namespace tree:
11
11
 
12
12
  ```ts
13
- import { createLesslyApp } from '@lessly/sdk-app';
13
+ import { createLesslyApp } from '@lepsto/sdk-app';
14
14
 
15
15
  const sdk = createLesslyApp({
16
16
  baseUrl: 'https://api.lessly.dev',
@@ -35,7 +35,7 @@ await sdk.organization.product.create({ name: 'Acme' });
35
35
  - **Page-relative** — `'/lessly-api'`, the path `pnpm dev` proxies through
36
36
  (see `recipes/local-dev.md`). It is resolved against the current document via
37
37
  `globalThis.location`, so it is **browser-only**: outside a browser the SDK
38
- throws a named error (`@lessly/sdk-app: relative baseUrl "/lessly-api" cannot
38
+ throws a named error (`@lepsto/sdk-app: relative baseUrl "/lessly-api" cannot
39
39
  be resolved outside a browser`) instead of an opaque `Invalid URL`. Tests and
40
40
  SSR must pass an absolute base.
41
41
 
@@ -56,7 +56,7 @@ Every failed call throws a typed `LesslyApiError` with `status`, `code`, and
56
56
  distinguish platform-defined failure reasons:
57
57
 
58
58
  ```ts
59
- import { LesslyApiError } from '@lessly/sdk-app';
59
+ import { LesslyApiError } from '@lepsto/sdk-app';
60
60
 
61
61
  try {
62
62
  await sdk.organization.product.create({ name: 'Acme' });
@@ -80,7 +80,7 @@ retry and no hidden token refresh — re-establish the session, or supply
80
80
 
81
81
  ## Prefer the generated query/mutation option factories
82
82
 
83
- Each namespace subpath (`@lessly/sdk-app/<namespace>`) ships framework-agnostic
83
+ Each namespace subpath (`@lepsto/sdk-app/<namespace>`) ships framework-agnostic
84
84
  query/mutation **option factories** — plain objects, not hooks — usable with
85
85
  any TanStack Query adapter (React, Solid, Vue, Svelte). You pass the `sdk`
86
86
  instance explicitly:
@@ -91,7 +91,7 @@ import { useQuery, useMutation } from '@tanstack/react-query';
91
91
  import {
92
92
  organizationConnectorsListQueryOptions,
93
93
  organizationProductCreateMutationOptions,
94
- } from '@lessly/sdk-app/organization';
94
+ } from '@lepsto/sdk-app/organization';
95
95
 
96
96
  function Connectors() {
97
97
  const { data } = useQuery(organizationConnectorsListQueryOptions(sdk, { productId: 'prod_123' }));
@@ -111,14 +111,14 @@ await queryClient.ensureQueryData(organizationConnectorsListQueryOptions(sdk, {
111
111
  Prefer these factories over hand-rolling calls against `sdk.<namespace>...`
112
112
  directly (APP-006): they keep query keys, request shapes, and cache
113
113
  invalidation consistent with the published API surface, and stay in sync with
114
- it automatically when you run `npm i @lessly/sdk-app@latest`.
114
+ it automatically when you run `npm i @lepsto/sdk-app@latest`.
115
115
 
116
116
  ## Namespaces and subpath imports
117
117
 
118
118
  The SDK is organized by namespace (currently `organization` and `playground`).
119
119
  Call operations off `sdk.<namespace>.<resource>.<action>(...)`, and import that
120
120
  namespace's option factories from the matching subpath,
121
- `@lessly/sdk-app/<namespace>` — not the package root. This keeps each App's
121
+ `@lepsto/sdk-app/<namespace>` — not the package root. This keeps each App's
122
122
  bundle limited to the namespaces it actually uses.
123
123
 
124
124
  Some operations belong to the namespace itself rather than to a resource under
@@ -130,7 +130,7 @@ autocomplete) for which shape a given operation takes.
130
130
 
131
131
  The available namespaces track the live catalog and **grow as platform
132
132
  extensions migrate to `@lessly-platform/tools`** — a namespace appears here only once its
133
- tools carry a REST binding. Run `npm i @lessly/sdk-app@latest` to pick up newly
133
+ tools carry a REST binding. Run `npm i @lepsto/sdk-app@latest` to pick up newly
134
134
  migrated namespaces. To see exactly what a given version exposes, check its
135
135
  subpaths in `package.json` `exports`, or the `manifest.gen.ts` namespace list.
136
136
 
@@ -143,8 +143,8 @@ stream from an App (APP-001) — it derives `ws(s)://` from your `baseUrl`, open
143
143
  the socket, and hands back a small handle:
144
144
 
145
145
  ```ts
146
- import { createLesslyApp } from '@lessly/sdk-app';
147
- import { playgroundWsEchoConnect } from '@lessly/sdk-app/playground';
146
+ import { createLesslyApp } from '@lepsto/sdk-app';
147
+ import { playgroundWsEchoConnect } from '@lepsto/sdk-app/playground';
148
148
 
149
149
  const sdk = createLesslyApp({ baseUrl: 'https://api.lessly.dev', productId: 'prod_123' });
150
150
 
package/docs/rules.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # App Rules
2
2
 
3
- Normative rules for building a Lessly App on `@lessly/sdk-app`. Read this
3
+ Normative rules for building a Lessly App on `@lepsto/sdk-app`. Read this
4
4
  before writing code; see `README.md` for the map of the rest of the guide.
5
5
 
6
6
  Severity (RFC 2119): **MUST** blocks merge, **SHOULD** is a strong
@@ -15,10 +15,10 @@ rationale, and examples.
15
15
 
16
16
  ---
17
17
 
18
- ### APP-001 (MUST) — All platform data access goes through `@lessly/sdk-app`
18
+ ### APP-001 (MUST) — All platform data access goes through `@lepsto/sdk-app`
19
19
 
20
20
  Every read or write to a Lessly platform API MUST go through a
21
- `@lessly/sdk-app` client created with `createLesslyApp`, or through the
21
+ `@lepsto/sdk-app` client created with `createLesslyApp`, or through the
22
22
  generated `*QueryOptions`/`*MutationOptions` factories built on top of it. An
23
23
  App MUST NOT `fetch` a platform host directly, and MUST NOT use any other HTTP
24
24
  client to reach platform data.
@@ -39,7 +39,7 @@ service the App integrates) is outside this rule.
39
39
  ### APP-002 (MUST) — Frontend-only
40
40
 
41
41
  An App MUST NOT ship a backend service, a database, or an MCP endpoint. All
42
- of its logic runs in the browser, built on `@lessly/sdk-app` and the Module
42
+ of its logic runs in the browser, built on `@lepsto/sdk-app` and the Module
43
43
  Federation contract below. If a feature needs server-side state or a
44
44
  service-to-service call, it belongs in an extension, not an App.
45
45
 
@@ -101,7 +101,7 @@ federation, through the `./App` props.
101
101
  ### APP-006 (SHOULD) — Use the generated query/mutation option factories
102
102
 
103
103
  Prefer the generated `*QueryOptions`/`*MutationOptions` factories
104
- (`@lessly/sdk-app/<namespace>`) over hand-rolling request paths against the
104
+ (`@lepsto/sdk-app/<namespace>`) over hand-rolling request paths against the
105
105
  SDK client directly. They keep query keys, request shapes, and cache
106
106
  invalidation consistent with the published API surface, and stay in sync with
107
107
  it automatically on upgrade.
@@ -112,10 +112,10 @@ Bump the manifest `version` on every release. Keep the SDK and this guide
112
112
  current with:
113
113
 
114
114
  ```sh
115
- npm i @lessly/sdk-app@latest
115
+ npm i @lepsto/sdk-app@latest
116
116
  ```
117
117
 
118
- Use this exact `@latest` form — not `npm update`. `@lessly/sdk-app` is
118
+ Use this exact `@latest` form — not `npm update`. `@lepsto/sdk-app` is
119
119
  pre-1.0 and pinned with a caret range, so `npm update` never crosses a minor
120
120
  version; since this SDK also bumps its minor version whenever the platform
121
121
  ships a new tool, `npm update` would never actually deliver those updates.
@@ -336,7 +336,7 @@ still fail registration.
336
336
 
337
337
  An App SHOULD reflect the caller's access in its UI: **disable, with a reason**
338
338
  (not hide) a primary action the caller cannot perform, using `useCan` from
339
- `@lessly/sdk-app/react` or `app.access.can()` directly, and render a 403 that
339
+ `@lepsto/sdk-app/react` or `app.access.can()` directly, and render a 403 that
340
340
  `isAccessDenied()` recognises as a **neutral empty state** rather than an error.
341
341
  That reason MUST live on a `Tooltip` wrapper around the disabled control, never
342
342
  on a native `title=` of the control itself: the base `buttonVariants` carry
@@ -353,7 +353,7 @@ That reason MUST be exactly one sentence, the same in every App:
353
353
 
354
354
  — e.g. `Requires level:admin (mail_domain_create). Ask an admin of this product.`
355
355
  Both values MUST be read from the generated method, never written as literals.
356
- `@lessly/sdk-app` exports `accessReason(op)`, which is that sentence; an App
356
+ `@lepsto/sdk-app` exports `accessReason(op)`, which is that sentence; an App
357
357
  SHOULD use it rather than assembling the text itself.
358
358
 
359
359
  Where a control has only an operation key and no generated method to point at,
@@ -383,7 +383,7 @@ the App, not a literal, and never a rule of thumb about verbs — `analytics_*_d
383
383
  is `write` while `mail_domain_create` is `admin`, and only the catalog knows.
384
384
 
385
385
  Where there is no method to read from — a test double, a runtime probe over keys
386
- it was handed — the App MUST NOT hand-type the level either. `@lessly/sdk-app`
386
+ it was handed — the App MUST NOT hand-type the level either. `@lepsto/sdk-app`
387
387
  exports `operations`, the catalog's own level map
388
388
  (`Readonly<Record<string, ToolLevel>>`, keyed by operation key), regenerated at
389
389
  publish time from the live catalog; read the level from it. A key it does not
package/package.json CHANGED
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "name": "@lepsto/sdk-app",
3
- "version": "85.0.0",
3
+ "description": "The Lepsto SDK for App is a TypeScript SDK that provides runtime bindings and type-safe generated code for interacting with Lepsto Platform APIs and services. This package generates type definitions and client bindings from API catalogs, enabling developers to build applications that consume Lepsto platform services with full type safety and autocompletion.",
4
+ "version": "85.0.1",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/lepsto/lepsto-sdk-app.git"
8
+ },
9
+ "homepage": "https://github.com/lepsto/lepsto-sdk-app#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/lepsto/lepsto-sdk-app/issues"
12
+ },
4
13
  "type": "module",
5
14
  "sideEffects": false,
6
15
  "engines": {
@@ -22,6 +31,7 @@
22
31
  "build": "npm run sync-exports && tsup && tsx scripts/emit-dts.ts",
23
32
  "prepublishOnly": "npm run build",
24
33
  "publish:npmjs": "npm publish --registry https://registry.npmjs.org/ --@lessly:registry=https://registry.npmjs.org/",
34
+ "publish:npmjs:lepsto": "tsx scripts/publish-alias.ts",
25
35
  "typecheck": "tsc --noEmit",
26
36
  "test": "vitest run"
27
37
  },