@xano/sdk 1.0.12 → 1.0.13
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/CHANGELOG.md +13 -0
- package/README.md +8 -8
- package/dist/.build-fingerprint +1 -1
- package/dist/{agent-file-refresh-YM5VRRHE.js → agent-file-refresh-DAFGNMQX.js} +4 -4
- package/dist/{agent-skill-command-GVVCBAGF.js → agent-skill-command-6M46ZGOL.js} +13 -13
- package/dist/{backend-dir-NZOLU7TL.js → backend-dir-J2J7JNS6.js} +4 -4
- package/dist/bin.js +13 -13
- package/dist/{branch-commands-Q46PCVHU.js → branch-commands-BUKVE637.js} +3 -3
- package/dist/{chunk-2PAVJ3QD.js → chunk-5ONWBQ2C.js} +2 -2
- package/dist/{chunk-ETMP7SJ3.js → chunk-5SMUND4J.js} +3 -3
- package/dist/{chunk-UZ55F3UK.js → chunk-5XDKKE5Y.js} +2 -2
- package/dist/{chunk-WXLZCBPG.js → chunk-6HTXQAMG.js} +2 -2
- package/dist/{chunk-PBIV4DE2.js → chunk-6OOZJQJK.js} +39 -39
- package/dist/{chunk-2RDZDDPR.js → chunk-CGZSF756.js} +12 -12
- package/dist/{chunk-G3A3XKCS.js → chunk-DPSR5GRE.js} +20 -20
- package/dist/{chunk-DH32QXVI.js → chunk-EKS7SAZS.js} +16 -16
- package/dist/{chunk-2K2G5TSR.js → chunk-ENAUSLMP.js} +3 -3
- package/dist/{chunk-5RSPMSSQ.js → chunk-ENBGJJJH.js} +3 -3
- package/dist/{chunk-5SZSLAAC.js → chunk-FBWMKHLO.js} +1 -1
- package/dist/{chunk-MFEO3EHL.js → chunk-GRWYO2MS.js} +2 -2
- package/dist/{chunk-OKR66IGL.js → chunk-H6VVSGKN.js} +2 -2
- package/dist/{chunk-SAKWZG5I.js → chunk-HDANNK4A.js} +2 -2
- package/dist/{chunk-RNVGXJJZ.js → chunk-HEMWBHQS.js} +7 -7
- package/dist/{chunk-HA5Y645X.js → chunk-MLKJUEG3.js} +12 -12
- package/dist/{chunk-ANBIMJPM.js → chunk-NMHTB346.js} +3 -3
- package/dist/{chunk-RFB4EXM5.js → chunk-O6PWEJUV.js} +2 -2
- package/dist/{chunk-CPFWVB3V.js → chunk-P6HXDOFG.js} +6 -6
- package/dist/{chunk-7XOQXZ6W.js → chunk-QWWQM4XZ.js} +2 -2
- package/dist/{chunk-OK7CBTFW.js → chunk-RAGFXELQ.js} +2 -2
- package/dist/{chunk-4GSXWOBS.js → chunk-RQHXYL77.js} +2 -2
- package/dist/{chunk-HJSAGGHU.js → chunk-SBS2IYTN.js} +2 -2
- package/dist/{chunk-AMHAGMJM.js → chunk-TANWE2ZY.js} +53 -53
- package/dist/{chunk-EC5P4W2D.js → chunk-U4BGBU3R.js} +15 -15
- package/dist/{chunk-4COXXP55.js → chunk-UDCKYLBW.js} +2 -2
- package/dist/{chunk-EMAFZROF.js → chunk-UECNKDDA.js} +2 -2
- package/dist/{chunk-6IOBEJWA.js → chunk-UKC65HBQ.js} +2 -2
- package/dist/{chunk-JPAUQ7MK.js → chunk-VFRL4G72.js} +2 -2
- package/dist/{chunk-74NRFGL7.js → chunk-WQZCFVAD.js} +2 -2
- package/dist/{chunk-TOW4EJON.js → chunk-XL7EA62X.js} +2 -2
- package/dist/{chunk-SAYHY2N3.js → chunk-XYVPF63S.js} +2 -2
- package/dist/{chunk-WQNN6WLB.js → chunk-ZACMAKZE.js} +5 -5
- package/dist/{chunk-U5CTYBAN.js → chunk-ZGNWMGN3.js} +4 -4
- package/dist/{chunk-3XZ44H2E.js → chunk-ZISPEBNM.js} +5 -2
- package/dist/{chunk-LDSZPRGV.js → chunk-ZSMHS7BU.js} +2 -2
- package/dist/cli.js +12 -12
- package/dist/{codegen-command-H3HO7UFA.js → codegen-command-BAFON45M.js} +19 -19
- package/dist/{deploy-command-7PWQJ4VV.js → deploy-command-JW7R3BPW.js} +16 -16
- package/dist/{deploy-source-CJHEVGOS.js → deploy-source-ZUPLAL7L.js} +7 -7
- package/dist/{dev-env-sync-VVLYQUPR.js → dev-env-sync-W7OTV7OD.js} +13 -13
- package/dist/{env-example-refresh-GLFC2FTE.js → env-example-refresh-TS7WBVZQ.js} +20 -20
- package/dist/{env-pull-command-OY3SXNJC.js → env-pull-command-5IYXQ2WK.js} +13 -13
- package/dist/{env-target-PDDDAA5I.js → env-target-TQBPLU2S.js} +2 -2
- package/dist/{env-var-command-UTYDJN24.js → env-var-command-AKCWYZPB.js} +13 -13
- package/dist/{ephemeral-command-ALIHUF7G.js → ephemeral-command-SJYH6XRS.js} +14 -14
- package/dist/{generate-command-S37XFYPD.js → generate-command-FSCFZPOJ.js} +23 -23
- package/dist/{gitignore-DKDWGWPS.js → gitignore-6IJ66XME.js} +6 -6
- package/dist/{impersonate-command-HPCSKJAV.js → impersonate-command-IH4HMSS3.js} +9 -9
- package/dist/{init-command-RWXBXJPG.js → init-command-STB4YSAK.js} +15 -15
- package/dist/{init-modules-LFLW2PQC.js → init-modules-YIZYPCMM.js} +2 -2
- package/dist/internal.js +4 -4
- package/dist/{keep-data-merge-7JGGZKDM.js → keep-data-merge-VRKS64JK.js} +4 -4
- package/dist/{landing-record-QJV7KNS4.js → landing-record-5EFK7RI6.js} +5 -5
- package/dist/{local-engine-choice-NNSHE5FO.js → local-engine-choice-TRTEJVMV.js} +8 -8
- package/dist/{local-engine-command-UGIZ4UO6.js → local-engine-command-2FK2PE2P.js} +9 -9
- package/dist/{local-engine-mcp-command-YUSZC7MF.js → local-engine-mcp-command-FB7EOGG6.js} +9 -9
- package/dist/{lock-commands-VT4R2DEE.js → lock-commands-7PBZIRWR.js} +13 -13
- package/dist/{login-command-4D3KPQUY.js → login-command-2O6GRMTH.js} +9 -9
- package/dist/{logout-command-ALKHCJKS.js → logout-command-RZXGW3O2.js} +3 -3
- package/dist/{marketplace-command-64TE2NGV.js → marketplace-command-NCMLGIMS.js} +13 -13
- package/dist/{meta-client-7MLLUZB4.js → meta-client-DYYM5F5G.js} +2 -2
- package/dist/node.js +14 -14
- package/dist/{operation-outcome-TYAOVNOM.js → operation-outcome-SHNROAFA.js} +4 -4
- package/dist/{output-target-63ECBUX2.js → output-target-PSSR3E4N.js} +7 -7
- package/dist/plugin.d.ts +2 -1
- package/dist/{preflight-command-OUVAX5IJ.js → preflight-command-6F7JF3YQ.js} +18 -18
- package/dist/{profile-command-NUO5U2HQ.js → profile-command-5AOGD6GV.js} +10 -10
- package/dist/{promote-command-MGLAYQDY.js → promote-command-O2NRRFLK.js} +26 -26
- package/dist/{publish-command-KVGNFBSU.js → publish-command-6VVSJPLI.js} +16 -16
- package/dist/{pull-command-OVXIMVUB.js → pull-command-GE2WUEUF.js} +21 -21
- package/dist/{release-command-E54WUJKB.js → release-command-55RTR674.js} +18 -18
- package/dist/{release-ns-command-SLRL3O3W.js → release-ns-command-5XPZ2B6N.js} +31 -31
- package/dist/{routes-manifest-file-IX4TOZCO.js → routes-manifest-file-42FTJHRY.js} +2 -2
- package/dist/{secrets-file-4NQWGCJG.js → secrets-file-N5IF265R.js} +5 -5
- package/dist/{secrets-fill-command-5NNHSYFX.js → secrets-fill-command-35WKBURT.js} +15 -15
- package/dist/{source-resolve-HSJSVKUC.js → source-resolve-JXGOVJD3.js} +3 -3
- package/dist/{status-command-UFIMW7SZ.js → status-command-G3DFRMU7.js} +12 -12
- package/dist/{sync-contributions-35ZAYBUH.js → sync-contributions-7T4CSPVQ.js} +2 -2
- package/dist/{tables-command-TISOU6DR.js → tables-command-7NUOZBHX.js} +10 -10
- package/dist/{tenant-command-ITCPN43T.js → tenant-command-JGEHRKN7.js} +32 -32
- package/dist/{test-command-7SFAJ6HX.js → test-command-2LNEA6GK.js} +10 -10
- package/dist/{token-OXGOA6WE.js → token-DWNH44NW.js} +2 -2
- package/dist/{toolchain-modules-Q3Z6APPF.js → toolchain-modules-F4DUMWTO.js} +2 -2
- package/dist/{tracked-backend-IYTIZZYV.js → tracked-backend-ZFXVLBBJ.js} +9 -9
- package/dist/{update-check-LSCQRDRR.js → update-check-KBHT63GJ.js} +14 -14
- package/dist/{upgrade-command-RQEQJO5Y.js → upgrade-command-CI543AZP.js} +16 -16
- package/dist/{whoami-command-NT3FVBZM.js → whoami-command-77DXENWD.js} +4 -4
- package/dist/{workspace-5RHOJC7K.js → workspace-RI5C77BZ.js} +2 -2
- package/dist/{workspace-binding-YUU6KB53.js → workspace-binding-PR57NBGH.js} +3 -3
- package/dist/{workspace-command-QSJHX5RS.js → workspace-command-6HHVFQKW.js} +27 -27
- package/dist/{workspace-env-M7RYVJB3.js → workspace-env-2APJEASO.js} +5 -5
- package/dist/{xanosdk-import-4TLNYFKC.js → xanosdk-import-HBQH3ZBS.js} +2 -2
- package/dist/{xanosdk-project-4NH6332J.js → xanosdk-project-W45IR3Q7.js} +5 -5
- package/guides/authoring.md +13 -7
- package/guides/bundle.md +1 -1
- package/guides/cli.md +28 -18
- package/guides/codegen.md +3 -2
- package/guides/coverage.md +4 -3
- package/guides/deploying.md +17 -10
- package/guides/environment.md +12 -12
- package/guides/marketplace.md +12 -6
- package/guides/module-contract.md +11 -6
- package/guides/object-kinds.md +8 -5
- package/guides/scaffold.md +24 -12
- package/guides/typed-frontend.md +7 -6
- package/llms/kinds-knowledge.md +2 -2
- package/llms/object-kinds.md +2 -2
- package/llms-full.txt +6 -6
- package/llms.txt +2 -2
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/skills/xano-backend/SKILL.md +2 -2
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
} from "./chunk-UFFIU57H.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchWorkspaceBundle
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-U4BGBU3R.js";
|
|
8
|
+
import "./chunk-EKS7SAZS.js";
|
|
9
|
+
import "./chunk-RAGFXELQ.js";
|
|
10
10
|
import "./chunk-BXVNRUDB.js";
|
|
11
11
|
import "./chunk-U4DSFCH5.js";
|
|
12
12
|
import "./chunk-JFPLHK6Y.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-5SMUND4J.js";
|
|
14
14
|
import {
|
|
15
15
|
confirm
|
|
16
16
|
} from "./chunk-XFQAA2SU.js";
|
|
@@ -29,38 +29,38 @@ import {
|
|
|
29
29
|
reachableWorkspaces,
|
|
30
30
|
refuseUnreachableWorkspace,
|
|
31
31
|
unreachableWorkspaceMessage
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-5ONWBQ2C.js";
|
|
33
|
+
import "./chunk-WQZCFVAD.js";
|
|
34
34
|
import "./chunk-RZABQ4YH.js";
|
|
35
35
|
import "./chunk-2TFRR6JV.js";
|
|
36
36
|
import {
|
|
37
37
|
resolveOutputTarget,
|
|
38
38
|
secretsPhrase,
|
|
39
39
|
writeExportFile
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-VFRL4G72.js";
|
|
41
41
|
import {
|
|
42
42
|
secretsCarriedBy
|
|
43
43
|
} from "./chunk-JHQAVWHW.js";
|
|
44
|
-
import "./chunk-
|
|
44
|
+
import "./chunk-ZSMHS7BU.js";
|
|
45
45
|
import {
|
|
46
46
|
assertBundleFile,
|
|
47
47
|
assertBundleInput,
|
|
48
48
|
assertEntryFile,
|
|
49
49
|
assertValueFiles,
|
|
50
50
|
loadBundleText
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-TANWE2ZY.js";
|
|
52
52
|
import "./chunk-K6BQPFRS.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-ENBGJJJH.js";
|
|
54
|
+
import "./chunk-HEMWBHQS.js";
|
|
55
55
|
import "./chunk-POZ6V4MU.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-6HTXQAMG.js";
|
|
57
57
|
import "./chunk-H7GMGZHI.js";
|
|
58
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-UKC65HBQ.js";
|
|
59
59
|
import "./chunk-6QJORUHC.js";
|
|
60
60
|
import {
|
|
61
61
|
getAccessToken
|
|
62
|
-
} from "./chunk-
|
|
63
|
-
import "./chunk-
|
|
62
|
+
} from "./chunk-NMHTB346.js";
|
|
63
|
+
import "./chunk-QWWQM4XZ.js";
|
|
64
64
|
import "./chunk-5Y5HWQ2P.js";
|
|
65
65
|
import "./chunk-F3IA3YWI.js";
|
|
66
66
|
import "./chunk-LCOCRJ4K.js";
|
|
@@ -69,9 +69,9 @@ import "./chunk-7NNLRNXE.js";
|
|
|
69
69
|
import "./chunk-2MNLRIOX.js";
|
|
70
70
|
import "./chunk-XVOODRNK.js";
|
|
71
71
|
import "./chunk-CJDPSCMX.js";
|
|
72
|
-
import "./chunk-
|
|
72
|
+
import "./chunk-RQHXYL77.js";
|
|
73
73
|
import "./chunk-DZUNF7IH.js";
|
|
74
|
-
import "./chunk-
|
|
74
|
+
import "./chunk-UDCKYLBW.js";
|
|
75
75
|
import "./chunk-OBRMA2VK.js";
|
|
76
76
|
import "./chunk-ZYJP6BOO.js";
|
|
77
77
|
import "./chunk-QO6BVGS5.js";
|
|
@@ -86,9 +86,9 @@ import {
|
|
|
86
86
|
} from "./chunk-A3CT26GX.js";
|
|
87
87
|
import "./chunk-P5JF3U65.js";
|
|
88
88
|
import "./chunk-EUUUMY7J.js";
|
|
89
|
-
import "./chunk-
|
|
90
|
-
import "./chunk-
|
|
91
|
-
import "./chunk-
|
|
89
|
+
import "./chunk-GRWYO2MS.js";
|
|
90
|
+
import "./chunk-ZISPEBNM.js";
|
|
91
|
+
import "./chunk-HDANNK4A.js";
|
|
92
92
|
import "./chunk-JKGRQW6D.js";
|
|
93
93
|
import "./chunk-ZFDZKNGG.js";
|
|
94
94
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -203,7 +203,7 @@ async function runWorkspaceCommand(args) {
|
|
|
203
203
|
case "reset-tables":
|
|
204
204
|
return runResetTables(args);
|
|
205
205
|
case "branch": {
|
|
206
|
-
const { runBranchCommand } = await import("./branch-commands-
|
|
206
|
+
const { runBranchCommand } = await import("./branch-commands-BUKVE637.js");
|
|
207
207
|
return runBranchCommand(args);
|
|
208
208
|
}
|
|
209
209
|
default:
|
|
@@ -232,7 +232,7 @@ async function runDetails(args) {
|
|
|
232
232
|
const auth = await getAccessToken(args);
|
|
233
233
|
const workspaceId = auth.workspaceId;
|
|
234
234
|
const all = await fetchWorkspaces(auth).catch(async (err) => {
|
|
235
|
-
const { unansweredRead } = await import("./source-resolve-
|
|
235
|
+
const { unansweredRead } = await import("./source-resolve-JXGOVJD3.js");
|
|
236
236
|
throw unansweredRead(err, "read the workspace list", "workspace");
|
|
237
237
|
});
|
|
238
238
|
const match = all.find((w) => w.id === workspaceId);
|
|
@@ -292,7 +292,7 @@ async function runExport(args) {
|
|
|
292
292
|
var EXIT_DIFF_MISMATCH = 2;
|
|
293
293
|
async function runDiff(args) {
|
|
294
294
|
if (args.file === void 0 && args.bundle === void 0) {
|
|
295
|
-
const { resolveProjectEntry } = await import("./deploy-source-
|
|
295
|
+
const { resolveProjectEntry } = await import("./deploy-source-ZUPLAL7L.js");
|
|
296
296
|
const entry = resolveProjectEntry(process.cwd());
|
|
297
297
|
if (entry !== void 0) args = { ...args, file: entry };
|
|
298
298
|
}
|
|
@@ -305,11 +305,11 @@ async function runDiff(args) {
|
|
|
305
305
|
try {
|
|
306
306
|
live = await fetchWorkspaceBundle(auth, args.branch);
|
|
307
307
|
} catch (err) {
|
|
308
|
-
const { unansweredRead } = await import("./source-resolve-
|
|
308
|
+
const { unansweredRead } = await import("./source-resolve-JXGOVJD3.js");
|
|
309
309
|
throw unansweredRead(err, "read the workspace to compare", "workspace");
|
|
310
310
|
}
|
|
311
311
|
const { SETTINGS_LABEL } = await import("./live-diff-HARRGFV4.js");
|
|
312
|
-
const { codePinnedCanonicals, releaseCanonicalLock } = await import("./release-command-
|
|
312
|
+
const { codePinnedCanonicals, releaseCanonicalLock } = await import("./release-command-55RTR674.js");
|
|
313
313
|
const pinned = codePinnedCanonicals(local.bundle, releaseCanonicalLock(args), args.file !== void 0);
|
|
314
314
|
const listed = await listBranches(auth, { baseUrl: auth.instance, workspaceId: auth.workspaceId }).catch(
|
|
315
315
|
() => void 0
|
|
@@ -317,7 +317,7 @@ async function runDiff(args) {
|
|
|
317
317
|
const liveLabel = listed?.find((b) => b.live)?.label;
|
|
318
318
|
const comparedLabel = args.branch ?? liveLabel;
|
|
319
319
|
const comparedIsLive = args.branch === void 0 ? true : liveLabel === void 0 ? null : args.branch === liveLabel;
|
|
320
|
-
const { landingLockPath } = await import("./landing-record-
|
|
320
|
+
const { landingLockPath } = await import("./landing-record-5EFK7RI6.js");
|
|
321
321
|
const { readSyncBaseline, storedBranchLabel } = await import("./sync-record-ILWS44DG.js");
|
|
322
322
|
const { directedComparison } = await import("./sync-baseline-JGAAOS25.js");
|
|
323
323
|
const syncLabel = storedBranchLabel(listed, args.branch);
|
|
@@ -560,4 +560,4 @@ export {
|
|
|
560
560
|
EXIT_DIFF_MISMATCH,
|
|
561
561
|
runWorkspaceCommand
|
|
562
562
|
};
|
|
563
|
-
//# sourceMappingURL=workspace-command-
|
|
563
|
+
//# sourceMappingURL=workspace-command-6HHVFQKW.js.map
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
renderWorkspaceEnvFile,
|
|
15
15
|
valueProblem,
|
|
16
16
|
workspaceEnvPathIn
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-ENBGJJJH.js";
|
|
18
|
+
import "./chunk-GRWYO2MS.js";
|
|
19
|
+
import "./chunk-ZISPEBNM.js";
|
|
20
|
+
import "./chunk-HDANNK4A.js";
|
|
21
21
|
import "./chunk-JKGRQW6D.js";
|
|
22
22
|
import "./chunk-ZFDZKNGG.js";
|
|
23
23
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -68,4 +68,4 @@ export {
|
|
|
68
68
|
valueProblem,
|
|
69
69
|
workspaceEnvPathIn
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=workspace-env-
|
|
71
|
+
//# sourceMappingURL=workspace-env-2APJEASO.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
resetXanoSdkImportDetection,
|
|
14
14
|
withDefaultBranchPointer,
|
|
15
15
|
xanosdkImport
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-5XDKKE5Y.js";
|
|
17
17
|
import "./chunk-3DRXWLJ5.js";
|
|
18
18
|
import "./chunk-X4DVXBFY.js";
|
|
19
19
|
import "./chunk-6QJORUHC.js";
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
withDefaultBranchPointer,
|
|
54
54
|
xanosdkImport
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=xanosdk-import-
|
|
56
|
+
//# sourceMappingURL=xanosdk-import-HBQH3ZBS.js.map
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
enterProjectRoot,
|
|
4
4
|
isProjectDir,
|
|
5
5
|
projectDirFrom
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UKC65HBQ.js";
|
|
7
7
|
import "./chunk-EUUUMY7J.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-GRWYO2MS.js";
|
|
9
|
+
import "./chunk-ZISPEBNM.js";
|
|
10
|
+
import "./chunk-HDANNK4A.js";
|
|
11
11
|
import "./chunk-JKGRQW6D.js";
|
|
12
12
|
import "./chunk-ZFDZKNGG.js";
|
|
13
13
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -39,4 +39,4 @@ export {
|
|
|
39
39
|
isProjectDir,
|
|
40
40
|
projectDirFrom
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=xanosdk-project-
|
|
42
|
+
//# sourceMappingURL=xanosdk-project-W45IR3Q7.js.map
|
package/guides/authoring.md
CHANGED
|
@@ -553,9 +553,11 @@ query({
|
|
|
553
553
|
happened by the time the override lands.
|
|
554
554
|
- A `resultStrategy: "replace"` middleware attached `post` rewrites the response at runtime,
|
|
555
555
|
which `InferResponse` can't see — declare `responseShape` on the endpoint.
|
|
556
|
-
- `workspaceConfig` also carries `realtime`, `documentation`, and `swagger
|
|
557
|
-
server-shaped and carried verbatim rather than authored
|
|
558
|
-
workspace-level block, not the realtime primitives you author.
|
|
556
|
+
- `workspaceConfig` also carries `realtime`, `documentation`, and `swagger`. `realtime` is
|
|
557
|
+
server-shaped and carried verbatim rather than authored — it is the **legacy**
|
|
558
|
+
workspace-level block, not the realtime primitives you author. `documentation` is the
|
|
559
|
+
authored gate on the hosted docs (omit it to leave the target's alone), and `swagger` is a
|
|
560
|
+
boolean (default `false`).
|
|
559
561
|
|
|
560
562
|
**The canonical rate-limit middleware.** Build the per-user key with the filter chain
|
|
561
563
|
(`"prefix" + auth("id")` doesn't exist):
|
|
@@ -651,7 +653,8 @@ workspaceConfig({ name: "my-app", env: { STRIPE_KEY: "" } });
|
|
|
651
653
|
|
|
652
654
|
```bash
|
|
653
655
|
# xano/.env — gitignored, preserved across a pull, and read with no flag by every
|
|
654
|
-
# command that compiles a bundle (deploy, export, preflight
|
|
656
|
+
# command that compiles a bundle (deploy, export, preflight, workspace diff,
|
|
657
|
+
# workspace reset-tables, and release create's comparison).
|
|
655
658
|
STRIPE_KEY=sk_live_...
|
|
656
659
|
```
|
|
657
660
|
|
|
@@ -886,9 +889,12 @@ with `allRows: true`, which wipes the table and returns the deleted count — th
|
|
|
886
889
|
longer be reached by forgetting an argument. Reach for `s.db.truncate({ table, reset: true })`
|
|
887
890
|
when the id sequence should restart too.
|
|
888
891
|
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
+
A deploy without `--keep-data` is a full replace, so it re-seeds cleanly — no duplicate
|
|
893
|
+
rows. The scaffolded `xano:deploy` passes `--keep-data`, which merges and leaves table rows
|
|
894
|
+
alone (`--reset` forces the replace and re-seed). A `--to` merge writes seed rows only with
|
|
895
|
+
`--seed`, and `workspace reset-tables` puts named tables back to their seeds. Seed data
|
|
896
|
+
travels only in the deploy package (resolved at deploy time); it never enters the compiled
|
|
897
|
+
workspace bundle.
|
|
892
898
|
|
|
893
899
|
For data in a file, use `seedFile`:
|
|
894
900
|
|
package/guides/bundle.md
CHANGED
package/guides/cli.md
CHANGED
|
@@ -53,8 +53,10 @@ xanosdk deploy ./xano/index.ts --ephemeral --expires-hours 8 # the ephemeral's
|
|
|
53
53
|
xanosdk deploy ./xano/index.ts --ephemeral --keep-data --static ./frontend/dist --static-host docs # publish to a named static host — merge only: a replace deletes it, and a deploy creates only `default` (create `docs` in the dashboard first)
|
|
54
54
|
xanosdk deploy ./xano/index.ts --ephemeral --static ./frontend/dist --static-routing spa # override URL resolution, spa|multipage (inferred from the bundle; rarely needed)
|
|
55
55
|
xanosdk deploy ./xano/index.ts --keep-data # redeploy but keep table rows (merge instead of replace; seeds aren't re-written)
|
|
56
|
+
xanosdk env pull --from workspace # fill xano/.env from a running backend (default: last deployed); lists what changes and confirms over an existing file (--yes off a terminal)
|
|
56
57
|
xanosdk env set STRIPE_KEY --to workspace --yes # set ONE env var on a running backend, value piped on stdin (no deploy; never printed)
|
|
57
58
|
xanosdk env unset STRIPE_KEY --to local # clear one (--to workspace|ephemeral[:<name>]|local[:<name>]|tenant:<name>, default: last deployed)
|
|
59
|
+
xanosdk secrets fill # mint a token in xano/.secrets.json for every documentation gate that has none (never replaces one)
|
|
58
60
|
xanosdk publish ./frontend/dist # publish a built frontend alone — no compile, no backend import (default: last deployed)
|
|
59
61
|
xanosdk publish ./frontend/dist --to ephemeral # …or onto an ephemeral instead (after a local deploy, bare publish goes to the engine)
|
|
60
62
|
xanosdk deploy ./xano/index.ts --static ./frontend/dist # on the Xano Engine, the engine serves the build at http://<prefix>.localhost:<port>
|
|
@@ -117,6 +119,7 @@ xanosdk ephemeral export <name> --format multidoc --path - # …stream
|
|
|
117
119
|
xanosdk workspace details # which workspace your token is scoped to (instance, id, name)
|
|
118
120
|
xanosdk workspace export --path ws.json # your REAL workspace as a JSON bundle (`--path -` streams to stdout)
|
|
119
121
|
xanosdk workspace diff ./xano/index.ts --branch staging # did my release land? which objects on the branch differ from your compile, are missing, or are unexpected (default: live), and which side changed each since the last sync (`changedThere`/`changedHere`/`changedBoth`); exits 2 when anything declared differs or is missing
|
|
122
|
+
xanosdk workspace reset-tables ./xano/index.ts --table <guid> --write # put named tables back to the seed rows your project compiles (a dry run without --write; every other table is left alone)
|
|
120
123
|
xanosdk workspace branch list # its branches, and which one is live
|
|
121
124
|
xanosdk workspace branch set-live staging # promote a branch (also the way back after --backup-branch)
|
|
122
125
|
xanosdk workspace branch delete staging --yes # remove a non-live branch (a label padded with spaces is found by the trimmed one; one not there exits 0, alreadyGone; the live branch exits 2, SDK_BRANCH_LIVE)
|
|
@@ -193,28 +196,31 @@ or needs `--yes` off a terminal; an ephemeral or Xano Engine never asks.
|
|
|
193
196
|
|
|
194
197
|
## Bundle key names vs. the names everything else uses
|
|
195
198
|
|
|
196
|
-
A bundle's `payload` arrays are keyed by the engine's **storage** name, which for
|
|
197
|
-
is not the name
|
|
198
|
-
|
|
199
|
+
A bundle's `payload` arrays are keyed by the engine's **storage** name, which for eight kinds
|
|
200
|
+
is not the name you author it with or the name the CLI prints for it. Scripting against a
|
|
201
|
+
bundle means translating:
|
|
199
202
|
|
|
200
|
-
| You author / the
|
|
203
|
+
| You author / the CLI prints | `payload` array |
|
|
201
204
|
|---|---|
|
|
202
205
|
| `table` | `payload.dbo` |
|
|
203
|
-
| `
|
|
206
|
+
| `apiGroup` | `payload.app` |
|
|
207
|
+
| `workflowTest` | `payload.workflow_test` |
|
|
208
|
+
| `realtimeServer` | `payload.realtime_server` |
|
|
209
|
+
| `realtimeChannel` | `payload.channel` |
|
|
210
|
+
| `realtimeMessage` | `payload.message` |
|
|
204
211
|
| `agent` | `payload.toolset` |
|
|
205
|
-
| `
|
|
206
|
-
| `toolset` | `payload.tool` |
|
|
207
|
-
| `realtime_channel` | `payload.channel` |
|
|
208
|
-
| `realtime_message` | `payload.message` |
|
|
212
|
+
| `mcpServer` | `payload.toolset` |
|
|
209
213
|
|
|
210
|
-
|
|
211
|
-
|
|
214
|
+
A trigger is printed as the factory that authored it (`tableTrigger`, `realtimeTrigger`, …)
|
|
215
|
+
and stored in `payload.trigger`; `workspaceConfig` is stored in `payload.workspace`.
|
|
216
|
+
Everything else (`query`, `function`, `task`, `middleware`, `microservice`, `addon`, `tool`,
|
|
217
|
+
`knowledge`, `prompt`, `resource`) is keyed the same on both sides. CLI input accepts either
|
|
218
|
+
spelling.
|
|
212
219
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
`payload.tool`; matching on the word alone will pick the wrong array.
|
|
220
|
+
The trap worth naming: `agent` and `mcpServer` both land in `payload.toolset`, told apart
|
|
221
|
+
only by each row's `type`, while a `tool` lands in `payload.tool`; matching on the word
|
|
222
|
+
"toolset" alone picks the wrong array. A file format keeps the stored spelling too, so a
|
|
223
|
+
`xano.lock` key is `dbo:users`, not `table:users`.
|
|
218
224
|
|
|
219
225
|
This is also the format `xanosdk lock import` reads, so both directions are user-facing.
|
|
220
226
|
|
|
@@ -461,9 +467,13 @@ import { emitBundle } from "@xano/sdk"; // pure string — browser-safe
|
|
|
461
467
|
import { writeBundle } from "@xano/sdk/node"; // writes a file — Node only
|
|
462
468
|
```
|
|
463
469
|
|
|
464
|
-
**
|
|
470
|
+
**Several entry points, and only the first is the authoring API.** `@xano/sdk` is what you
|
|
465
471
|
define a workspace with; `@xano/sdk/node` adds the filesystem half; `@xano/sdk/codegen`
|
|
466
|
-
is what a generated tree imports;
|
|
472
|
+
is what a generated tree imports; `@xano/sdk/bundle` reads a compiled bundle back
|
|
473
|
+
([Reading a compiled bundle](bundle.md)); `@xano/sdk/scaffold` is the theme and framework choices
|
|
474
|
+
`init` accepts, as data; `@xano/sdk/plugin` is the contract a toolchain module compiles against; `@xano/sdk/sveltekit` is the SvelteKit adapter;
|
|
475
|
+
`@xano/sdk/lambda-globals` types the globals a lambda body sees; and `@xano/sdk/internal`
|
|
476
|
+
holds the compiler machinery —
|
|
467
477
|
the per-kind encoders, the kind and statement registries, the bundle serializer, the
|
|
468
478
|
`xano.lock` model. Nothing on `/internal` is needed to author anything, and it is kept off
|
|
469
479
|
the root so an agent scanning the package's exports sees the surface rather than the guts.
|
package/guides/codegen.md
CHANGED
|
@@ -20,8 +20,9 @@ or a bundle path. Unlike most commands it has no default: a pull names its sourc
|
|
|
20
20
|
|
|
21
21
|
Everything else about the project is unchanged: `--framework` (`react`, `svelte` or `none`), the
|
|
22
22
|
theme flags, `--no-agents-md` and `--web` mean the same thing here as they do without `--from`.
|
|
23
|
-
The
|
|
24
|
-
are refused without it rather than silently ignored
|
|
23
|
+
The flags that describe the pull itself — `--report`, `--skip-roundtrip`, `--branch`,
|
|
24
|
+
`--no-secrets` and `--origin` — are refused without it rather than silently ignored, as is
|
|
25
|
+
`--yes` without `--from` or `--force`.
|
|
25
26
|
|
|
26
27
|
The target directory decides what is written around `xano/`, as it does for a plain
|
|
27
28
|
[`init`](scaffold.md#no-frontend-and-existing-apps):
|
package/guides/coverage.md
CHANGED
|
@@ -40,7 +40,7 @@ runtime (Xano SDK only compiles), and generating engine-side numeric ids/timesta
|
|
|
40
40
|
|
|
41
41
|
**Deferred (by design)** — folder auto-discovery, and the `service` / `vault` / `branch`
|
|
42
42
|
payload sections. (Round-trip decompile is no longer deferred: that is
|
|
43
|
-
`xanosdk init --from`, in
|
|
43
|
+
`xanosdk init --from`, in [Pulling an existing workspace](codegen.md); nor is `workflow_test` — it is a
|
|
44
44
|
first-class kind, see `workflowTest` in [Object kinds](object-kinds.md).) `InferResponse`
|
|
45
45
|
auto-derivation covers the object-literal and single-`db`-variable cases (matching the engine's
|
|
46
46
|
static walk), and follows a CALL into the object it invokes (`s.function.call`/`.run`,
|
|
@@ -59,8 +59,9 @@ can learn the SDK without reading source:
|
|
|
59
59
|
--help` and the `cli` array in `manifest.json` do, from the same registry that generates
|
|
60
60
|
the shell completions. The written version is the [CLI guide](cli.md).
|
|
61
61
|
- **`llms/*.md`** — one file per surface (object def shapes, statements, values, fields,
|
|
62
|
-
filters, lambda bodies,
|
|
63
|
-
|
|
62
|
+
filters, lambda bodies, triggers, saved tests, the lock file, toolchain modules, what a
|
|
63
|
+
client pays to import a def, an index of exact error strings, and the legacy names a
|
|
64
|
+
pulled workspace carries), read only when that surface
|
|
64
65
|
is in play. **`llms-full.txt`** is all
|
|
65
66
|
of them concatenated, for a reader that wants one file rather than two.
|
|
66
67
|
- **`manifest.json`** — the exhaustive reference tier, reached by targeted lookup (grep or
|
package/guides/deploying.md
CHANGED
|
@@ -127,7 +127,7 @@ as JSON, while the human-readable progress (and the live URLs) echoes to stderr:
|
|
|
127
127
|
}
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
Present only when they apply: `
|
|
130
|
+
Present only when they apply: `engine` (in place of `ephemeral`), `keepDataSkipped` and the
|
|
131
131
|
merge lists (see [Keeping your data between deploys](#keeping-your-data-between-deploys)),
|
|
132
132
|
`static` (`url`; `canonical`, the build's identity, and `verified` when the frontend was
|
|
133
133
|
confirmed live serving it; `staticEnv` — `{ injected, keys, documents, skipped?, reason? }` — when config was
|
|
@@ -529,7 +529,6 @@ and `omittedInsertsFail` / `setInsertsFail` when inserts fail; see below),
|
|
|
529
529
|
`notNullKept`, `pairedColumns` (`{ table, dropped, added }`: a drop beside an add, not a rename),
|
|
530
530
|
`narrowedEnums` (`{ table, column, removed }`), `retargetedRefs` (`{ table, column, from, to }`),
|
|
531
531
|
`indexChanges` (`{ table, index, action, unique }`), `notNullTightened` (`{ table, column, type }`),
|
|
532
|
-
`storageChanges` (`{ table, from, to }`: the table's `useXdo` before and after),
|
|
533
532
|
`removed`, `unseededTables` (new tables whose seed rows the merge did not
|
|
534
533
|
write), `renamedTables` (each `{ from, to }`: renamed through `xanosdk lock rename`, rows kept),
|
|
535
534
|
`unchangedEnv` and `canonicalChanges` (each `{ kind, name, from, to }`: a public URL slug a
|
|
@@ -599,9 +598,12 @@ the environment keeps its data. Each refusal is exit 2 and names its remedy:
|
|
|
599
598
|
refused for every table, empty or seeded — the instance cannot convert a table back to JSON
|
|
600
599
|
storage, and nothing is sent. A `deploy --replace` rebuilds the tables, so it switches either way.
|
|
601
600
|
|
|
602
|
-
A keep-data refusal's `details` carries `refused` (the reason, a string)
|
|
601
|
+
A keep-data refusal's `details` carries `refused` (the reason, a string). For `identityConflict`,
|
|
602
|
+
`renamePending`, `pruneOutOfScope` and `uniqueViolation` it also carries `conflicts`, `renames`
|
|
603
603
|
and `outOfScope` (each a list, empty when it does not apply), `serverCode` when the environment
|
|
604
|
-
itself refused, and `warnings` when the run had some.
|
|
604
|
+
itself refused, and `warnings` when the run had some. The others carry `landed: false` and their
|
|
605
|
+
own list: `tableTrigger` names `triggers`, `storageModeChange` names `tables`, and
|
|
606
|
+
`importInProgress` carries `serverCode` and, when there is one, `rerun`. A `--keep-data` deploy never falls back to a replace.
|
|
605
607
|
|
|
606
608
|
Another import already running on the instance is not a refusal of the project: any deploy
|
|
607
609
|
(`--keep-data`, a replace, `--to`) exits 8 with `SDK_IMPORT_REFUSED`, `details.refused:
|
|
@@ -664,7 +666,8 @@ answering its result and logs. It never changes a primitive: tables, endpoints,
|
|
|
664
666
|
every other object change in `xano/` and ship with `xanosdk deploy`.
|
|
665
667
|
|
|
666
668
|
`xanosdk init` connects Claude Code (`.mcp.json`) and Cursor (`.cursor/mcp.json`) to it with one
|
|
667
|
-
server, `xano-local`, that launches a bridge
|
|
669
|
+
server, `xano-local`, that launches a bridge. This is the Claude Code `.mcp.json` entry; Cursor's
|
|
670
|
+
appends `--project ${workspaceFolder}`, since Cursor does not promise to launch it inside the project:
|
|
668
671
|
|
|
669
672
|
```json
|
|
670
673
|
{ "mcpServers": { "xano-local": { "command": "npx", "args": ["--yes", "--package", "@xano/sdk", "xanosdk", "local", "mcp", "--stdio"] } } }
|
|
@@ -777,7 +780,7 @@ pin for your own runs instead of editing `package.json`:
|
|
|
777
780
|
|
|
778
781
|
- `--local=<value>` for one deploy;
|
|
779
782
|
- `XANOSDK_ENGINE_OVERRIDE=<value>` for every deploy in this shell, including
|
|
780
|
-
`npm run xano:deploy`, which
|
|
783
|
+
`npm run xano:deploy`, which names no engine.
|
|
781
784
|
|
|
782
785
|
Both take a **version** (`v0.1.8`, or `0.1.8`: that release from the release manager), an
|
|
783
786
|
**`https` URL** to an engine archive, or the **path** to an engine archive on this machine. A
|
|
@@ -1148,6 +1151,7 @@ publishes beside the merge, but not under `--dry-run`; `--skip-liveness` needs `
|
|
|
1148
1151
|
| `--backup-branch[=<label>]` | Snapshot the live branch's logic first. Switching back restores logic only — see below. |
|
|
1149
1152
|
| `--allow-shared-schema-changes` | Proceed even though table and microservice changes reach every branch. |
|
|
1150
1153
|
| `--allow-branch-deletion` | Proceed even though `--replace` permanently deletes the workspace's other branches. |
|
|
1154
|
+
| `--overwrite` | Deploy over objects changed in Xano since the last deploy or pull, instead of refusing with `SDK_WORKSPACE_CHANGED`. See below. |
|
|
1151
1155
|
|
|
1152
1156
|
#### `--replace` clears by workspace, not by branch
|
|
1153
1157
|
|
|
@@ -1359,7 +1363,7 @@ xanosdk workspace branch set-live staging # promote when you are happy
|
|
|
1359
1363
|
```
|
|
1360
1364
|
|
|
1361
1365
|
A promote **always** lands on a branch, named or not: without `--branch` the label is derived
|
|
1362
|
-
from the release and the moment (`v1-20260910T200511Z
|
|
1366
|
+
from the release and the moment (`v1-20260910T200511Z-3f2a`, four random hex digits last), and the run prints it. There is no
|
|
1363
1367
|
unnamed landing — a branch the engine leaves unlabelled cannot be selected, promoted or
|
|
1364
1368
|
deleted afterwards, so the CLI names it rather than letting that happen.
|
|
1365
1369
|
|
|
@@ -1445,10 +1449,13 @@ either way, and `dryRun` says which it was:
|
|
|
1445
1449
|
| `renamedTables`, `droppedColumns`, `retypedColumns`, `narrowedEnums`, `retargetedRefs`, `indexChanges`, `notNullKept`, `notNullTightened`, `storageChanges` | the table effects (see [What a landing does to tables](#what-a-landing-does-to-tables)); `tenant deploy` and `promote` carry the same keys, plus `droppedTables` (`{ table, rows }`), under `tableEffects`. |
|
|
1446
1450
|
| `unchangedEnv`, `droppedEnv`, `unappliedDocumentation`, `workspaceRename` | the rest of what the plan cannot say. |
|
|
1447
1451
|
| `workspaceSettingsNotApplied` | workspace settings a `--branch` landing held back (`[]` otherwise). |
|
|
1452
|
+
| `syncBaseline` | always present: the sync baseline recorded for the branch it landed on — `null` on a dry run, for a tenant or ephemeral, and when there is no `xano.lock`. |
|
|
1448
1453
|
|
|
1449
|
-
Present only when they apply: `branchDeletion`, `unnamedPublicUrls`, `staticRemoved`,
|
|
1450
|
-
|
|
1451
|
-
and `
|
|
1454
|
+
Present only when they apply: `branchDeletion`, `unnamedPublicUrls`, `staticRemoved`,
|
|
1455
|
+
`sharedSchemaChanges` (with `--branch`), on a dry run `seedRows` (under `--seed`: each table's
|
|
1456
|
+
seed rows and how many overwrite a live row) and `changedInXano` (objects changed in Xano that the
|
|
1457
|
+
real run would refuse to overwrite without `--overwrite`), and on a real run `setLive` (with
|
|
1458
|
+
`--branch`), `backupBranch`, `liveRestored` and `static`.
|
|
1452
1459
|
|
|
1453
1460
|
The comparison is deliberately one-sided: a false "changed" costs one import that was
|
|
1454
1461
|
happening anyway, while a false "unchanged" would silently skip a real release. So anything
|
package/guides/environment.md
CHANGED
|
@@ -23,13 +23,13 @@ are what you get when the variable is unset.
|
|
|
23
23
|
| `XANO_ORIGIN` | OAuth host to sign in against, instead of the default — the same thing `--origin` does. An origin only (`https://host`): a path, query or fragment is refused. |
|
|
24
24
|
| `XANO_NO_BROWSER` | Set to anything non-empty and `xanosdk login` will **not** launch a browser; it prints the authorize URL to stderr for you to open yourself. The loopback server still runs and still waits for the redirect, so the flow completes only if the browser you open it in can reach this machine's `127.0.0.1`. For a machine that has no browser to launch. When the browser is on a **different** machine, that redirect cannot arrive — use `xanosdk login --paste` instead. |
|
|
25
25
|
|
|
26
|
-
**`xanosdk preflight`** —
|
|
26
|
+
**`xanosdk preflight`** — an optional override target. With none of these set, `preflight` uses the stored login credential and creates its ephemeral under the workspace that credential pins
|
|
27
27
|
|
|
28
28
|
| Variable | What it does |
|
|
29
29
|
|---|---|
|
|
30
|
-
| `XANO_VALIDATE_INSTANCE` | Base URL of the instance to validate against (`https://your-instance.xano.io`, or `http://localhost:8080` for local Docker).
|
|
31
|
-
| `XANO_VALIDATE_TOKEN` | Meta API bearer token for that instance. Required. |
|
|
32
|
-
| `XANO_VALIDATE_WORKSPACE_ID` | Parent workspace the run's throwaway environment is created under. Defaults to `1`. |
|
|
30
|
+
| `XANO_VALIDATE_INSTANCE` | Base URL of the instance to validate against (`https://your-instance.xano.io`, or `http://localhost:8080` for local Docker). Optional; when any `XANO_VALIDATE_*` is set (or `--instance <url>`, which overrides it) the pair takes over from the login, and both must then be present. |
|
|
31
|
+
| `XANO_VALIDATE_TOKEN` | Meta API bearer token for that instance. Required once the override is in use. |
|
|
32
|
+
| `XANO_VALIDATE_WORKSPACE_ID` | Parent workspace the run's throwaway environment is created under, when the override is in use. Defaults to `1`. |
|
|
33
33
|
|
|
34
34
|
**Output & diagnostics**
|
|
35
35
|
|
|
@@ -95,7 +95,7 @@ checked-out project never holds a secret it did not fetch on purpose.
|
|
|
95
95
|
|
|
96
96
|
| Path | What it is |
|
|
97
97
|
|---|---|
|
|
98
|
-
| `xano/.env` | Where the values live. Gitignored by the scaffold, and preserved across a `xanosdk pull` rather than rewritten. Read with no flag by the commands that compile a bundle: `deploy`, `export`, `preflight`, and `release create
|
|
98
|
+
| `xano/.env` | Where the values live. Gitignored by the scaffold, and preserved across a `xanosdk pull` rather than rewritten. Read with no flag by the commands that compile a bundle: `deploy`, `export`, `preflight`, and `release create`, whose convergence comparison compiles the entry unless `--bundle` names one. |
|
|
99
99
|
| `xano/.env.example` | Generated beside it, listing the declared names as commented lines. Committed. Copy it to `xano/.env` on a fresh clone and fill in the values. The lines stay commented on purpose, so an unedited copy meets the refusal below rather than sending empty strings to your backend. |
|
|
100
100
|
|
|
101
101
|
`xano/` is the scaffold's backend directory. The file is read from the directory of the
|
|
@@ -165,7 +165,7 @@ update it too if the change should outlive the next deploy.
|
|
|
165
165
|
| `--env-var KEY=VALUE` | One value, for this process only. Never written to `xano/.env`, never printed back. Repeatable. Highest precedence: it beats whichever file supplied values, the default `xano/.env` or an explicit `--backend-env-file`. On `export` the value is still compiled into the bundle that command writes. A secret on the command line also lands in shell history and the process table, so prefer `--backend-env-file` in CI. |
|
|
166
166
|
| `--backend-env-file <path>` | Read values from this dotenv-style file **instead of** `xano/.env`. It replaces the default rather than layering over it, so pointing at a CI secret mount cannot also ship a developer's local file. The flip side: a name that only `xano/.env` had is now unsupplied. |
|
|
167
167
|
| `--allow-empty-env=NAME[,NAME]` | Send these declared names empty on purpose, **clearing whatever the target holds for them**. Per-name only; there is deliberately no bare form. |
|
|
168
|
-
| `--allow-empty-doc-token
|
|
168
|
+
| `--allow-empty-doc-token=<scope>` | The same, for a documentation token — but it **opens** something: the target's doc-site gate is cleared and those docs become publicly readable. The scope is `workspace` or an API group's name; it is not comma-split, so repeat the flag for more than one. No bare form. |
|
|
169
169
|
|
|
170
170
|
**A deploy replaces the workspace's env set.** So a declared name left empty in the config
|
|
171
171
|
that no file and no flag supplies would clear the live value, and `deploy` refuses instead,
|
|
@@ -287,9 +287,9 @@ a rename, or to adopt an existing workspace object into code.
|
|
|
287
287
|
**`xano.lock`** freezes the whole workspace's identities at once — every auto-derived guid,
|
|
288
288
|
plus the `canonical` URL tokens of API groups and toolsets (which the engine otherwise
|
|
289
289
|
randomizes, giving the same code different public URLs per environment). Every command that
|
|
290
|
-
compiles an entry file writes it — `export`, `deploy`, `
|
|
290
|
+
compiles an entry file writes it — `export`, `deploy`, `preflight`, with no flag —
|
|
291
291
|
and updates it on every build, atomically, before the bundle. **Commit it next to your code.**
|
|
292
|
-
`npm run xano:check` is the CI guard (`xanosdk export ./xano/index.ts --check --strict`, which implies
|
|
292
|
+
`npm run xano:check` is the CI guard (the `routes --strict` freshness check, then the project typecheck, then `xanosdk export ./xano/index.ts --check --strict`, which implies
|
|
293
293
|
`--frozen-lock`, writes nothing, and needs neither `xano/.env` nor `xano/.secrets.json`): it fails rather than change the lock,
|
|
294
294
|
so an uncommitted identity change is caught in review instead of on a deploy. It also fails
|
|
295
295
|
while the lock carries an entry no exported object matches. That entry is how a rename looks
|
|
@@ -333,7 +333,7 @@ explicitly with `--lock=<path>`.
|
|
|
333
333
|
Precedence at emit is always **explicit in-code value → lock entry → name derivation**.
|
|
334
334
|
|
|
335
335
|
**When the lock is actually load-bearing.** Because the default derivation is deterministic
|
|
336
|
-
— `md5("<
|
|
336
|
+
— `md5("<payloadKey>:<name>")` (the bundle's payload key: `dbo` for a table, `toolset` for an agent or MCP server), and `md5("query:<group>|<verb>|<name>")` for a query — a project
|
|
337
337
|
that created all of its own objects can regenerate a
|
|
338
338
|
byte-identical lock from its own source. Delete that lock, release again, and the same guids
|
|
339
339
|
come back: the objects match and update in place. For that project the lock is a *cache*, and
|
|
@@ -375,7 +375,7 @@ xanosdk lock rename --entry=xano/index.ts table stock goods # moves stock's i
|
|
|
375
375
|
xanosdk lock prune --identity-only --yes table:stock --lock=xano/xano.lock # or just drop it
|
|
376
376
|
```
|
|
377
377
|
|
|
378
|
-
`rename`/`
|
|
378
|
+
`rename`/`import` take no entry file, so on their own they look for `xano.lock` in the
|
|
379
379
|
**current directory**. Pass `--entry=<path>` to derive it beside the entry the way
|
|
380
380
|
`export`/`deploy`/`prune` do, or `--lock=<path>` to name the file outright. They never
|
|
381
381
|
reach for a lock you did not point them at — when they spot one next door they say so and
|
|
@@ -392,8 +392,8 @@ real engine `packageExport`, capturing the live workspace's random guids by `(ty
|
|
|
392
392
|
so code takes over an existing workspace and the first sync updates in place instead of
|
|
393
393
|
duplicating.
|
|
394
394
|
|
|
395
|
-
**CI** —
|
|
396
|
-
check an export runs and writes nothing, so it needs no secrets. It implies `--frozen-lock`, which
|
|
395
|
+
**CI** — the scaffolded `npm run xano:check` runs the `routes --strict` freshness check, the project typecheck, and
|
|
396
|
+
`xanosdk export ./xano/index.ts --check --strict`, which runs every check an export runs and writes nothing, so it needs no secrets. It implies `--frozen-lock`, which
|
|
397
397
|
fails instead of changing the lock, so a canonical
|
|
398
398
|
minted in a throwaway container can never silently diverge public URLs. Mint locally, commit
|
|
399
399
|
the lock. It fails on an entry no exported object matches too, which is the state a rename
|
package/guides/marketplace.md
CHANGED
|
@@ -48,7 +48,11 @@ is compiled or a workspace is checked.
|
|
|
48
48
|
|
|
49
49
|
```
|
|
50
50
|
✓ Installed @xano-sdk/auth.
|
|
51
|
-
|
|
51
|
+
Not registered yet.
|
|
52
|
+
Add to xano/index.ts:
|
|
53
|
+
import { registerAuth } from "@xano-sdk/auth";
|
|
54
|
+
registerAuth(app, { canonical: "authn" });
|
|
55
|
+
Then run `npx xanosdk export ./xano/index.ts --out /dev/null && npm run xano:routes` to bring xano.lock and the route manifest up to date.
|
|
52
56
|
```
|
|
53
57
|
|
|
54
58
|
```
|
|
@@ -116,7 +120,7 @@ The rendering has a fixed shape, filled from the module's own catalogue record:
|
|
|
116
120
|
```
|
|
117
121
|
|
|
118
122
|
The `Installs` rows carry one of `table`, `endpoint`, `function`, `task`, `trigger`, `agent`,
|
|
119
|
-
`mcp`, `middleware`. A toolchain module lists none of them, because it puts nothing on the
|
|
123
|
+
`tool`, `mcp`, `middleware`. A toolchain module lists none of them, because it puts nothing on the
|
|
120
124
|
workspace.
|
|
121
125
|
|
|
122
126
|
`--prompt` emits the publisher's own wiring instructions, raw and alone, written to be piped
|
|
@@ -273,6 +277,7 @@ A module also contributes lines to your `.gitattributes`, in its own marked bloc
|
|
|
273
277
|
```
|
|
274
278
|
# xanosdk:begin @xano-sdk/xanoscript
|
|
275
279
|
# xanosdk 1.2.0 — generated; edits inside this block are overwritten
|
|
280
|
+
|
|
276
281
|
xanoscript/** linguist-generated
|
|
277
282
|
# xanosdk:end @xano-sdk/xanoscript
|
|
278
283
|
```
|
|
@@ -362,10 +367,11 @@ run. A `--frozen-lock` run in that state exits 0 having verified less than it di
|
|
|
362
367
|
and says nothing. Only the next `install`, `reinstall` or `remove` drops the stale block.
|
|
363
368
|
|
|
364
369
|
The state that does fail **every** `--frozen-lock` run is the other one: a module still
|
|
365
|
-
declared in `dependencies`
|
|
366
|
-
--no-save`, a deleted `node_modules/<pkg>` or a
|
|
367
|
-
project still says the module is expected, so its
|
|
368
|
-
away
|
|
370
|
+
declared in `dependencies` and configured in the `"xanosdk"` block but missing from
|
|
371
|
+
`node_modules`, which is what `npm uninstall --no-save`, a deleted `node_modules/<pkg>` or a
|
|
372
|
+
drifted lockfile leaves behind. There the project still says the module is expected, so its
|
|
373
|
+
absence is reported rather than assumed away (an unconfigured dependency that is missing is
|
|
374
|
+
an ordinary package as far as the loader can tell, and is not reported):
|
|
369
375
|
|
|
370
376
|
```
|
|
371
377
|
A toolchain module could not be loaded, so whatever it checks was not checked — and
|