@credibledata/cred-cli 0.0.103 → 0.0.105
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 +106 -1
- package/dist/agent-contract.spec.js +548 -0
- package/dist/agent-contract.spec.js.map +1 -0
- package/dist/browser.js +72 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.spec.js +125 -0
- package/dist/browser.spec.js.map +1 -0
- package/dist/client/api.js +4137 -1159
- package/dist/client/api.js.map +1 -1
- package/dist/client-codeassist/api.js +476 -0
- package/dist/client-codeassist/api.js.map +1 -0
- package/dist/client-codeassist/base.js +69 -0
- package/dist/client-codeassist/base.js.map +1 -0
- package/dist/client-codeassist/common.js +162 -0
- package/dist/client-codeassist/common.js.map +1 -0
- package/dist/client-codeassist/configuration.js +44 -0
- package/dist/client-codeassist/configuration.js.map +1 -0
- package/dist/client-codeassist/index.js +32 -0
- package/dist/client-codeassist/index.js.map +1 -0
- package/dist/clientconfiguration.js +17 -289
- package/dist/clientconfiguration.js.map +1 -1
- package/dist/clientconfiguration.spec.js +35 -96
- package/dist/clientconfiguration.spec.js.map +1 -1
- package/dist/commands/add.js +103 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.spec.js +113 -0
- package/dist/commands/add.spec.js.map +1 -0
- package/dist/commands/connection/createconnections.js +104 -7
- package/dist/commands/connection/createconnections.js.map +1 -1
- package/dist/commands/connection/createconnections.spec.js +35 -1
- package/dist/commands/connection/createconnections.spec.js.map +1 -1
- package/dist/commands/connection/deleteconnection.js +4 -2
- package/dist/commands/connection/deleteconnection.js.map +1 -1
- package/dist/commands/connection/deleteconnection.spec.js +6 -1
- package/dist/commands/connection/deleteconnection.spec.js.map +1 -1
- package/dist/commands/connection/listconnections.js +2 -0
- package/dist/commands/connection/listconnections.js.map +1 -1
- package/dist/commands/connection/updateconnection.js +365 -0
- package/dist/commands/connection/updateconnection.js.map +1 -0
- package/dist/commands/connection/updateconnection.spec.js +625 -0
- package/dist/commands/connection/updateconnection.spec.js.map +1 -0
- package/dist/commands/database/createdatabase.js +52 -0
- package/dist/commands/database/createdatabase.js.map +1 -0
- package/dist/commands/database/database.spec.js +267 -0
- package/dist/commands/database/database.spec.js.map +1 -0
- package/dist/commands/database/deletedatabase.js +91 -0
- package/dist/commands/database/deletedatabase.js.map +1 -0
- package/dist/commands/database/getdatabase.js +97 -0
- package/dist/commands/database/getdatabase.js.map +1 -0
- package/dist/commands/database/listdatabases.js +36 -0
- package/dist/commands/database/listdatabases.js.map +1 -0
- package/dist/commands/database/shared.js +125 -0
- package/dist/commands/database/shared.js.map +1 -0
- package/dist/commands/database/shared.spec.js +109 -0
- package/dist/commands/database/shared.spec.js.map +1 -0
- package/dist/commands/database/updatedatabase.js +39 -0
- package/dist/commands/database/updatedatabase.js.map +1 -0
- package/dist/commands/environment/createenvironment.js +59 -28
- package/dist/commands/environment/createenvironment.js.map +1 -1
- package/dist/commands/environment/createenvironment.spec.js +29 -0
- package/dist/commands/environment/createenvironment.spec.js.map +1 -1
- package/dist/commands/environment/deleteenvironment.js +3 -2
- package/dist/commands/environment/deleteenvironment.js.map +1 -1
- package/dist/commands/environment/deleteenvironment.spec.js +5 -1
- package/dist/commands/environment/deleteenvironment.spec.js.map +1 -1
- package/dist/commands/environment/getenvironment.js +1 -0
- package/dist/commands/environment/getenvironment.js.map +1 -1
- package/dist/commands/environment/listenvironments.js +40 -8
- package/dist/commands/environment/listenvironments.js.map +1 -1
- package/dist/commands/environment/listenvironments.spec.js +41 -2
- package/dist/commands/environment/listenvironments.spec.js.map +1 -1
- package/dist/commands/environment/setenvironment.js +145 -6
- package/dist/commands/environment/setenvironment.js.map +1 -1
- package/dist/commands/environment/setenvironment.spec.js +256 -8
- package/dist/commands/environment/setenvironment.spec.js.map +1 -1
- package/dist/commands/environment/updateenvironment.js +12 -8
- package/dist/commands/environment/updateenvironment.js.map +1 -1
- package/dist/commands/environment/updateenvironment.spec.js +36 -2
- package/dist/commands/environment/updateenvironment.spec.js.map +1 -1
- package/dist/commands/get.js +64 -1
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/group/addmember.js +3 -1
- package/dist/commands/group/addmember.js.map +1 -1
- package/dist/commands/group/addmember.spec.js +7 -2
- package/dist/commands/group/addmember.spec.js.map +1 -1
- package/dist/commands/group/creategroup.js +2 -0
- package/dist/commands/group/creategroup.js.map +1 -1
- package/dist/commands/group/deletegroup.js +3 -1
- package/dist/commands/group/deletegroup.js.map +1 -1
- package/dist/commands/group/deletegroup.spec.js +7 -1
- package/dist/commands/group/deletegroup.spec.js.map +1 -1
- package/dist/commands/group/getgroup.js +2 -0
- package/dist/commands/group/getgroup.js.map +1 -1
- package/dist/commands/group/listgroups.js +2 -0
- package/dist/commands/group/listgroups.js.map +1 -1
- package/dist/commands/group/removemember.js +3 -1
- package/dist/commands/group/removemember.js.map +1 -1
- package/dist/commands/group/removemember.spec.js +7 -2
- package/dist/commands/group/removemember.spec.js.map +1 -1
- package/dist/commands/groupaccesstoken/deleteToken.js +2 -1
- package/dist/commands/groupaccesstoken/deleteToken.js.map +1 -1
- package/dist/commands/groupaccesstoken/groupContainer.js +2 -0
- package/dist/commands/groupaccesstoken/groupContainer.js.map +1 -1
- package/dist/commands/list.js +24 -4
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/materialization/cancelrun.js +3 -1
- package/dist/commands/materialization/cancelrun.js.map +1 -1
- package/dist/commands/materialization/getindex.js +2 -0
- package/dist/commands/materialization/getindex.js.map +1 -1
- package/dist/commands/materialization/getmaterialization.js +2 -0
- package/dist/commands/materialization/getmaterialization.js.map +1 -1
- package/dist/commands/materialization/getpreaggregate.js +2 -0
- package/dist/commands/materialization/getpreaggregate.js.map +1 -1
- package/dist/commands/materialization/getrun.js +2 -0
- package/dist/commands/materialization/getrun.js.map +1 -1
- package/dist/commands/materialization/listindexes.js +2 -0
- package/dist/commands/materialization/listindexes.js.map +1 -1
- package/dist/commands/materialization/listmaterializations.js +2 -0
- package/dist/commands/materialization/listmaterializations.js.map +1 -1
- package/dist/commands/materialization/listpreaggregates.js +2 -0
- package/dist/commands/materialization/listpreaggregates.js.map +1 -1
- package/dist/commands/materialization/listruns.js +3 -1
- package/dist/commands/materialization/listruns.js.map +1 -1
- package/dist/commands/materialization/rerun.js +3 -1
- package/dist/commands/materialization/rerun.js.map +1 -1
- package/dist/commands/misc/inquirerHost.js +87 -0
- package/dist/commands/misc/inquirerHost.js.map +1 -0
- package/dist/commands/misc/inquirerHost.spec.js +91 -0
- package/dist/commands/misc/inquirerHost.spec.js.map +1 -0
- package/dist/commands/misc/login.js +348 -58
- package/dist/commands/misc/login.js.map +1 -1
- package/dist/commands/misc/login.spec.js +525 -7
- package/dist/commands/misc/login.spec.js.map +1 -1
- package/dist/commands/misc/logout.js +26 -3
- package/dist/commands/misc/logout.js.map +1 -1
- package/dist/commands/misc/logout.spec.js +52 -12
- package/dist/commands/misc/logout.spec.js.map +1 -1
- package/dist/commands/misc/resolveLoginTarget.spec.js +90 -0
- package/dist/commands/misc/resolveLoginTarget.spec.js.map +1 -0
- package/dist/commands/misc/scope.spec.js +108 -0
- package/dist/commands/misc/scope.spec.js.map +1 -0
- package/dist/commands/misc/set-access-token.js +1 -1
- package/dist/commands/misc/set-access-token.js.map +1 -1
- package/dist/commands/misc/set-access-token.spec.js +13 -2
- package/dist/commands/misc/set-access-token.spec.js.map +1 -1
- package/dist/commands/misc/setup.js +819 -0
- package/dist/commands/misc/setup.js.map +1 -0
- package/dist/commands/misc/setup.spec.js +783 -0
- package/dist/commands/misc/setup.spec.js.map +1 -0
- package/dist/commands/misc/status.js +168 -0
- package/dist/commands/misc/status.js.map +1 -0
- package/dist/commands/misc/status.spec.js +301 -0
- package/dist/commands/misc/status.spec.js.map +1 -0
- package/dist/commands/misc/token.js +57 -0
- package/dist/commands/misc/token.js.map +1 -0
- package/dist/commands/misc/token.spec.js +92 -0
- package/dist/commands/misc/token.spec.js.map +1 -0
- package/dist/commands/package/deletepackage.js +4 -2
- package/dist/commands/package/deletepackage.js.map +1 -1
- package/dist/commands/package/deletepackage.spec.js +7 -1
- package/dist/commands/package/deletepackage.spec.js.map +1 -1
- package/dist/commands/package/getpackage.js +142 -0
- package/dist/commands/package/getpackage.js.map +1 -0
- package/dist/commands/package/getpackage.spec.js +246 -0
- package/dist/commands/package/getpackage.spec.js.map +1 -0
- package/dist/commands/package/listpackages.js +2 -0
- package/dist/commands/package/listpackages.js.map +1 -1
- package/dist/commands/package/publish.archive.spec.js +570 -0
- package/dist/commands/package/publish.archive.spec.js.map +1 -0
- package/dist/commands/package/publish.js +780 -49
- package/dist/commands/package/publish.js.map +1 -1
- package/dist/commands/package/publish.spec.js +451 -8
- package/dist/commands/package/publish.spec.js.map +1 -1
- package/dist/commands/package/updatepackage.js +22 -19
- package/dist/commands/package/updatepackage.js.map +1 -1
- package/dist/commands/package/updatepackage.spec.js +36 -1
- package/dist/commands/package/updatepackage.spec.js.map +1 -1
- package/dist/commands/permission/createpermission.js +3 -1
- package/dist/commands/permission/createpermission.js.map +1 -1
- package/dist/commands/permission/deletepermission.js +6 -3
- package/dist/commands/permission/deletepermission.js.map +1 -1
- package/dist/commands/permission/getpermission.js +2 -0
- package/dist/commands/permission/getpermission.js.map +1 -1
- package/dist/commands/permission/listpermissions.js +2 -0
- package/dist/commands/permission/listpermissions.js.map +1 -1
- package/dist/commands/rm.js +21 -0
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/set.js +40 -6
- package/dist/commands/set.js.map +1 -1
- package/dist/commands/set.spec.js +123 -0
- package/dist/commands/set.spec.js.map +1 -0
- package/dist/commands/table/addtable.js +155 -0
- package/dist/commands/table/addtable.js.map +1 -0
- package/dist/commands/table/deletetable.js +45 -0
- package/dist/commands/table/deletetable.js.map +1 -0
- package/dist/commands/table/gettable.js +32 -0
- package/dist/commands/table/gettable.js.map +1 -0
- package/dist/commands/table/listtables.js +36 -0
- package/dist/commands/table/listtables.js.map +1 -0
- package/dist/commands/table/table.spec.js +304 -0
- package/dist/commands/table/table.spec.js.map +1 -0
- package/dist/commands/table/tablefile.js +195 -0
- package/dist/commands/table/tablefile.js.map +1 -0
- package/dist/commands/table/tablefile.spec.js +158 -0
- package/dist/commands/table/tablefile.spec.js.map +1 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.js +4 -2
- package/dist/commands/version/archive-unarchive-version.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.spec.js +6 -1
- package/dist/commands/version/archive-unarchive-version.spec.js.map +1 -1
- package/dist/commands/version/listversions.js +2 -0
- package/dist/commands/version/listversions.js.map +1 -1
- package/dist/common/UserGroupId.js +9 -4
- package/dist/common/UserGroupId.js.map +1 -1
- package/dist/common/UserGroupId.spec.js +5 -0
- package/dist/common/UserGroupId.spec.js.map +1 -1
- package/dist/constants.js +37 -143
- package/dist/constants.js.map +1 -1
- package/dist/index.js +487 -90
- package/dist/index.js.map +1 -1
- package/dist/logger.js +42 -9
- package/dist/logger.js.map +1 -1
- package/dist/session.js +56 -0
- package/dist/session.js.map +1 -0
- package/dist/session.spec.js +103 -0
- package/dist/session.spec.js.map +1 -0
- package/dist/setup-core/briefing.js +176 -0
- package/dist/setup-core/briefing.js.map +1 -0
- package/dist/setup-core/credstore.js +415 -0
- package/dist/setup-core/credstore.js.map +1 -0
- package/dist/setup-core/credstore.spec.js +238 -0
- package/dist/setup-core/credstore.spec.js.map +1 -0
- package/dist/setup-core/environments.js +267 -0
- package/dist/setup-core/environments.js.map +1 -0
- package/dist/setup-core/flow.e2e.js +165 -0
- package/dist/setup-core/flow.e2e.js.map +1 -0
- package/dist/setup-core/flow.js +765 -0
- package/dist/setup-core/flow.js.map +1 -0
- package/dist/setup-core/flow.spec.js +1348 -0
- package/dist/setup-core/flow.spec.js.map +1 -0
- package/dist/setup-core/folderconfig.js +283 -0
- package/dist/setup-core/folderconfig.js.map +1 -0
- package/dist/setup-core/git.js +97 -0
- package/dist/setup-core/git.js.map +1 -0
- package/dist/setup-core/host.js +77 -0
- package/dist/setup-core/host.js.map +1 -0
- package/dist/setup-core/importconnections.js +470 -0
- package/dist/setup-core/importconnections.js.map +1 -0
- package/dist/setup-core/importconnections.spec.js +594 -0
- package/dist/setup-core/importconnections.spec.js.map +1 -0
- package/dist/setup-core/liveness.js +94 -0
- package/dist/setup-core/liveness.js.map +1 -0
- package/dist/setup-core/liveness.spec.js +59 -0
- package/dist/setup-core/liveness.spec.js.map +1 -0
- package/dist/setup-core/localpublisherconfig.js +26 -0
- package/dist/setup-core/localpublisherconfig.js.map +1 -0
- package/dist/setup-core/localpublisherconfig.spec.js +29 -0
- package/dist/setup-core/localpublisherconfig.spec.js.map +1 -0
- package/dist/setup-core/mcpconfig.js +198 -0
- package/dist/setup-core/mcpconfig.js.map +1 -0
- package/dist/setup-core/mcpconfig.spec.js +205 -0
- package/dist/setup-core/mcpconfig.spec.js.map +1 -0
- package/dist/setup-core/packagemanifest.js +55 -0
- package/dist/setup-core/packagemanifest.js.map +1 -0
- package/dist/setup-core/ports.js +182 -0
- package/dist/setup-core/ports.js.map +1 -0
- package/dist/setup-core/ports.spec.js +173 -0
- package/dist/setup-core/ports.spec.js.map +1 -0
- package/dist/setup-core/publisherconfig.js +268 -0
- package/dist/setup-core/publisherconfig.js.map +1 -0
- package/dist/setup-core/publisherconfig.oracle.js +166 -0
- package/dist/setup-core/publisherconfig.oracle.js.map +1 -0
- package/dist/setup-core/publisherconfig.spec.js +277 -0
- package/dist/setup-core/publisherconfig.spec.js.map +1 -0
- package/dist/setup-core/publisherversion.js +26 -0
- package/dist/setup-core/publisherversion.js.map +1 -0
- package/dist/setup-core/readiness.spec.js +161 -0
- package/dist/setup-core/readiness.spec.js.map +1 -0
- package/dist/setup-core/readylines.js +169 -0
- package/dist/setup-core/readylines.js.map +1 -0
- package/dist/setup-core/readylines.spec.js +70 -0
- package/dist/setup-core/readylines.spec.js.map +1 -0
- package/dist/setup-core/refresh.js +348 -0
- package/dist/setup-core/refresh.js.map +1 -0
- package/dist/setup-core/refresh.spec.js +501 -0
- package/dist/setup-core/refresh.spec.js.map +1 -0
- package/dist/setup-core/skills.js +279 -0
- package/dist/setup-core/skills.js.map +1 -0
- package/dist/setup-core/skills.spec.js +334 -0
- package/dist/setup-core/skills.spec.js.map +1 -0
- package/dist/setup-core/supervisor.js +879 -0
- package/dist/setup-core/supervisor.js.map +1 -0
- package/dist/setup-core/supervisor.spec.js +833 -0
- package/dist/setup-core/supervisor.spec.js.map +1 -0
- package/dist/setup-core/writefile.js +61 -0
- package/dist/setup-core/writefile.js.map +1 -0
- package/dist/setup-core/writefile.spec.js +68 -0
- package/dist/setup-core/writefile.spec.js.map +1 -0
- package/dist/utils.js +409 -3
- package/dist/utils.js.map +1 -1
- package/dist/utils.spec.js +373 -2
- package/dist/utils.spec.js.map +1 -1
- package/dist/versioncheck-refresh.js +18 -0
- package/dist/versioncheck-refresh.js.map +1 -0
- package/dist/versioncheck.js +324 -0
- package/dist/versioncheck.js.map +1 -0
- package/dist/versioncheck.spec.js +587 -0
- package/dist/versioncheck.spec.js.map +1 -0
- package/node_modules/@credibledata/cli-auth/dist/index.d.ts +86 -0
- package/node_modules/@credibledata/cli-auth/dist/index.js +102 -0
- package/node_modules/@credibledata/cli-auth/package.json +19 -0
- package/package.json +18 -6
- package/.github/workflows/build.yml +0 -23
- package/.mocharc.json +0 -10
- package/.prettierignore +0 -2
- package/.prettierrc +0 -4
- package/README-DEV.md +0 -40
- package/coverage/coverage-summary.json +0 -40
- package/coverage/tmp/coverage-2152-1789496974457-0.json +0 -1
- package/coverage/tmp/coverage-2153-1789496954404-0.json +0 -1
- package/docker/Dockerfile.ci +0 -18
- package/docker-compose.yml +0 -18
- package/eslint.config.mjs +0 -45
- package/generate-client.sh +0 -27
- package/mocha.setup.ts +0 -4
- package/openapitools.json +0 -10
- package/src/client/.openapi-generator/FILES +0 -9
- package/src/client/.openapi-generator/VERSION +0 -1
- package/src/client/.openapi-generator-ignore +0 -23
- package/src/client/api.ts +0 -15999
- package/src/client/base.ts +0 -86
- package/src/client/common.ts +0 -150
- package/src/client/configuration.ts +0 -110
- package/src/client/git_push.sh +0 -57
- package/src/client/index.ts +0 -18
- package/src/clientconfiguration.spec.ts +0 -615
- package/src/clientconfiguration.ts +0 -364
- package/src/commands/add.ts +0 -191
- package/src/commands/connection/createconnections.spec.ts +0 -413
- package/src/commands/connection/createconnections.ts +0 -109
- package/src/commands/connection/deleteconnection.spec.ts +0 -189
- package/src/commands/connection/deleteconnection.ts +0 -57
- package/src/commands/connection/listconnections.spec.ts +0 -132
- package/src/commands/connection/listconnections.ts +0 -58
- package/src/commands/environment/createenvironment.spec.ts +0 -249
- package/src/commands/environment/createenvironment.ts +0 -73
- package/src/commands/environment/deleteenvironment.spec.ts +0 -152
- package/src/commands/environment/deleteenvironment.ts +0 -48
- package/src/commands/environment/getenvironment.spec.ts +0 -110
- package/src/commands/environment/getenvironment.ts +0 -43
- package/src/commands/environment/listenvironments.spec.ts +0 -123
- package/src/commands/environment/listenvironments.ts +0 -67
- package/src/commands/environment/setenvironment.spec.ts +0 -63
- package/src/commands/environment/setenvironment.ts +0 -14
- package/src/commands/environment/updateenvironment.spec.ts +0 -386
- package/src/commands/environment/updateenvironment.ts +0 -168
- package/src/commands/get.ts +0 -153
- package/src/commands/group/addmember.spec.ts +0 -257
- package/src/commands/group/addmember.ts +0 -85
- package/src/commands/group/creategroup.spec.ts +0 -146
- package/src/commands/group/creategroup.ts +0 -54
- package/src/commands/group/deletegroup.spec.ts +0 -120
- package/src/commands/group/deletegroup.ts +0 -45
- package/src/commands/group/getgroup.spec.ts +0 -129
- package/src/commands/group/getgroup.ts +0 -47
- package/src/commands/group/listgroups.spec.ts +0 -137
- package/src/commands/group/listgroups.ts +0 -45
- package/src/commands/group/removemember.spec.ts +0 -224
- package/src/commands/group/removemember.ts +0 -75
- package/src/commands/groupaccesstoken/createToken.spec.ts +0 -211
- package/src/commands/groupaccesstoken/createToken.ts +0 -72
- package/src/commands/groupaccesstoken/deleteToken.spec.ts +0 -147
- package/src/commands/groupaccesstoken/deleteToken.ts +0 -29
- package/src/commands/groupaccesstoken/groupContainer.ts +0 -83
- package/src/commands/groupaccesstoken/listTokens.spec.ts +0 -147
- package/src/commands/groupaccesstoken/listTokens.ts +0 -29
- package/src/commands/legacy.ts +0 -5
- package/src/commands/list.ts +0 -326
- package/src/commands/materialization/cancelrun.ts +0 -70
- package/src/commands/materialization/getindex.ts +0 -55
- package/src/commands/materialization/getmaterialization.ts +0 -57
- package/src/commands/materialization/getpreaggregate.ts +0 -58
- package/src/commands/materialization/getrun.ts +0 -55
- package/src/commands/materialization/listindexes.ts +0 -69
- package/src/commands/materialization/listmaterializations.ts +0 -53
- package/src/commands/materialization/listpreaggregates.ts +0 -74
- package/src/commands/materialization/listruns.ts +0 -77
- package/src/commands/materialization/rerun.ts +0 -123
- package/src/commands/misc/login.spec.ts +0 -371
- package/src/commands/misc/login.ts +0 -343
- package/src/commands/misc/logout.spec.ts +0 -32
- package/src/commands/misc/logout.ts +0 -9
- package/src/commands/misc/loopbackOAuth.ts +0 -127
- package/src/commands/misc/set-access-token.spec.ts +0 -95
- package/src/commands/misc/set-access-token.ts +0 -32
- package/src/commands/package/deletepackage.spec.ts +0 -164
- package/src/commands/package/deletepackage.ts +0 -58
- package/src/commands/package/listpackages.spec.ts +0 -163
- package/src/commands/package/listpackages.ts +0 -74
- package/src/commands/package/publish.spec.ts +0 -642
- package/src/commands/package/publish.ts +0 -236
- package/src/commands/package/updatepackage.spec.ts +0 -319
- package/src/commands/package/updatepackage.ts +0 -95
- package/src/commands/permission/createpermission.spec.ts +0 -507
- package/src/commands/permission/createpermission.ts +0 -181
- package/src/commands/permission/deletepermission.ts +0 -117
- package/src/commands/permission/getpermission.ts +0 -115
- package/src/commands/permission/listpermissions.ts +0 -101
- package/src/commands/permission/scope.ts +0 -180
- package/src/commands/rm.ts +0 -146
- package/src/commands/set.ts +0 -25
- package/src/commands/update.ts +0 -107
- package/src/commands/version/archive-unarchive-version.spec.ts +0 -456
- package/src/commands/version/archive-unarchive-version.ts +0 -108
- package/src/commands/version/listversions.spec.ts +0 -138
- package/src/commands/version/listversions.ts +0 -45
- package/src/common/UserGroupId.spec.ts +0 -115
- package/src/common/UserGroupId.ts +0 -137
- package/src/constants.spec.ts +0 -111
- package/src/constants.ts +0 -228
- package/src/index.ts +0 -378
- package/src/logger.spec.ts +0 -158
- package/src/logger.ts +0 -90
- package/src/polyfills/file.polyfill.ts +0 -6
- package/src/utils.spec.ts +0 -135
- package/src/utils.ts +0 -115
- package/src/validator.spec.ts +0 -51
- package/src/validator.ts +0 -44
- package/tsconfig.json +0 -17
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = require("chai");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const environments_1 = require("./environments");
|
|
11
|
+
const host_1 = require("./host");
|
|
12
|
+
const publisherconfig_1 = require("./publisherconfig");
|
|
13
|
+
describe("buildPublisherConfig", () => {
|
|
14
|
+
const base = {
|
|
15
|
+
deployment: "production",
|
|
16
|
+
organization: "acme",
|
|
17
|
+
credibleEnvironment: "prod-bars",
|
|
18
|
+
packageLocation: "/home/me/models",
|
|
19
|
+
};
|
|
20
|
+
it("emits the server's NESTED connection shape, not the Malloy extension's flat one", () => {
|
|
21
|
+
// The VS Code extension writes `{is: "publisher", connectionUri, ...}`
|
|
22
|
+
// into malloy-config.json. The Publisher server requires
|
|
23
|
+
// `{name, type, publisherConnection: {...}}` and rejects the flat form at
|
|
24
|
+
// config-load. Porting the object literal instead of the logic is the
|
|
25
|
+
// mistake this test exists to catch.
|
|
26
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "warehouse" }] }));
|
|
27
|
+
const [warehouse] = config.environments[0].connections;
|
|
28
|
+
(0, chai_1.expect)(warehouse).to.eql({
|
|
29
|
+
name: "warehouse",
|
|
30
|
+
type: "publisher",
|
|
31
|
+
publisherConnection: {
|
|
32
|
+
connectionUri: "https://acme.data.credibledata.com/api/v0/environments/prod-bars/connections/warehouse",
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
(0, chai_1.expect)(warehouse).to.not.have.property("is");
|
|
36
|
+
});
|
|
37
|
+
it("writes no access token to disk", () => {
|
|
38
|
+
// The token is short-lived and the server has no refresh hook, so one
|
|
39
|
+
// written at setup time is stale before it is used — and setup tells the
|
|
40
|
+
// user to commit this file.
|
|
41
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "warehouse" }] }));
|
|
42
|
+
const serialized = JSON.stringify(config);
|
|
43
|
+
(0, chai_1.expect)(serialized).to.not.contain("accessToken");
|
|
44
|
+
});
|
|
45
|
+
it("never emits an environment-level connection named duckdb", () => {
|
|
46
|
+
// The server reserves that name for per-package sandboxes and reacts by
|
|
47
|
+
// skipping the WHOLE environment - while still binding both ports and
|
|
48
|
+
// printing both listening lines. Copying the VS Code extension's
|
|
49
|
+
// always-inject-duckdb habit here produced a server that booted happily
|
|
50
|
+
// and served nothing. Caught by booting the real server, not by a unit
|
|
51
|
+
// test, which is why the oracle test exists alongside these.
|
|
52
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [] }));
|
|
53
|
+
(0, chai_1.expect)(config.environments[0].connections).to.eql([]);
|
|
54
|
+
});
|
|
55
|
+
it("refuses to build when a Credible connection collides with the reserved name", () => {
|
|
56
|
+
// Not skippable and not renameable. Skipping would leave models that say
|
|
57
|
+
// `duckdb` resolving to the per-package sandbox rather than the warehouse
|
|
58
|
+
// - the same query quietly returning different data. Renaming would break
|
|
59
|
+
// every model already referring to it. So the collision is the user's to
|
|
60
|
+
// resolve, and setup's job is to say exactly that.
|
|
61
|
+
let thrown;
|
|
62
|
+
try {
|
|
63
|
+
(0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "duckdb" }] }));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
thrown = error;
|
|
67
|
+
}
|
|
68
|
+
(0, chai_1.expect)(thrown, "expected a SetupError").to.be.instanceOf(host_1.SetupError);
|
|
69
|
+
(0, chai_1.expect)(thrown.message).to.contain("reserves");
|
|
70
|
+
(0, chai_1.expect)(thrown.message).to.contain("rename the connection");
|
|
71
|
+
// The consequence of ignoring it has to be in the message: without it a
|
|
72
|
+
// user reasonably concludes this is pedantry and works around it.
|
|
73
|
+
(0, chai_1.expect)(thrown.message).to.contain("silently read the local sandbox");
|
|
74
|
+
});
|
|
75
|
+
it("skips a connection the control plane returned without a name", () => {
|
|
76
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{}, { name: "real" }] }));
|
|
77
|
+
(0, chai_1.expect)(config.environments[0].connections.map((c) => c.name)).to.eql([
|
|
78
|
+
"real",
|
|
79
|
+
]);
|
|
80
|
+
});
|
|
81
|
+
it("emits the absolute package location it was given", () => {
|
|
82
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [] }));
|
|
83
|
+
(0, chai_1.expect)(config.environments[0].packages).to.eql([
|
|
84
|
+
{ name: "prod-bars", location: "/home/me/models" },
|
|
85
|
+
]);
|
|
86
|
+
});
|
|
87
|
+
it("refuses a relative package location", () => {
|
|
88
|
+
// "." and bare names are rejected by the server with "Invalid package
|
|
89
|
+
// path", and it skips the environment rather than failing the boot - so
|
|
90
|
+
// the server still reports both ports listening while serving nothing.
|
|
91
|
+
for (const location of [".", "./models", "models", "../models"]) {
|
|
92
|
+
(0, chai_1.expect)(() => (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { packageLocation: location, connections: [] }))).to.throw(host_1.SetupError, /not absolute/);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
it("decides absoluteness the way the running platform does", () => {
|
|
96
|
+
// `path.resolve` returns `C:\\models` on win32, which no leading-slash
|
|
97
|
+
// check calls absolute — so the old string test threw
|
|
98
|
+
// SetupError("not absolute") on every `cred init` there, on a platform
|
|
99
|
+
// `supervisor.ts` and `inquirerHost.ts` both carry win32 branches for.
|
|
100
|
+
//
|
|
101
|
+
// The contract is that this agrees with `path.isAbsolute`, so the table
|
|
102
|
+
// below asserts a different half on each platform: on POSIX it pins the
|
|
103
|
+
// rejection set (the drive-letter form is genuinely not absolute there),
|
|
104
|
+
// and on win32 it pins that the drive-letter form builds.
|
|
105
|
+
for (const location of [
|
|
106
|
+
"/home/me/models",
|
|
107
|
+
"C:\\models",
|
|
108
|
+
".",
|
|
109
|
+
"./models",
|
|
110
|
+
"models",
|
|
111
|
+
"../models",
|
|
112
|
+
]) {
|
|
113
|
+
const build = () => (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { packageLocation: location, connections: [] }));
|
|
114
|
+
if (path_1.default.isAbsolute(location)) {
|
|
115
|
+
(0, chai_1.expect)(build().environments[0].packages[0].location).to.equal(location);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
(0, chai_1.expect)(build).to.throw(host_1.SetupError, /not absolute/);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
it("leaves frozenConfig false so the server accepts config changes", () => {
|
|
123
|
+
(0, chai_1.expect)((0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [] })).frozenConfig).to.equal(false);
|
|
124
|
+
});
|
|
125
|
+
it("refuses to build without an organization, and says how to fix it", () => {
|
|
126
|
+
(0, chai_1.expect)(() => (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { organization: "", connections: [] })))
|
|
127
|
+
.to.throw(host_1.SetupError)
|
|
128
|
+
.with.property("message")
|
|
129
|
+
.that.contains("cred login");
|
|
130
|
+
});
|
|
131
|
+
it("refuses to build without a Credible environment, and says how to fix it", () => {
|
|
132
|
+
(0, chai_1.expect)(() => (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { credibleEnvironment: "", connections: [] })))
|
|
133
|
+
.to.throw(host_1.SetupError)
|
|
134
|
+
.with.property("message")
|
|
135
|
+
.that.contains("cred set environment");
|
|
136
|
+
});
|
|
137
|
+
describe("connectionUriFor", () => {
|
|
138
|
+
it("uses the right data-plane host per deployment env", () => {
|
|
139
|
+
(0, chai_1.expect)((0, publisherconfig_1.connectionUriFor)("production", "acme", "e", "c")).to.contain("https://acme.data.credibledata.com/");
|
|
140
|
+
(0, chai_1.expect)((0, publisherconfig_1.connectionUriFor)("staging", "acme", "e", "c")).to.contain("https://acme.staging-data.credibledata.com/");
|
|
141
|
+
(0, chai_1.expect)((0, publisherconfig_1.connectionUriFor)("dev", "acme", "e", "c")).to.contain("https://acme.dev-data.credibledata.com/");
|
|
142
|
+
// The omission that once left videoamp pointing at the GCP host.
|
|
143
|
+
(0, chai_1.expect)((0, publisherconfig_1.connectionUriFor)("videoamp", "acme", "e", "c")).to.contain("videoamp-aws-us-east-1");
|
|
144
|
+
});
|
|
145
|
+
// A cell answers http:// with a redirect to https://, and fetch drops the
|
|
146
|
+
// Authorization header when a redirect changes the scheme — so an http
|
|
147
|
+
// URL for a hosted cell reaches the router with no token and 401s.
|
|
148
|
+
it("uses https for every hosted cell; plain http only for a local stack", () => {
|
|
149
|
+
for (const deployment of environments_1.ALL_ENVIRONMENTS) {
|
|
150
|
+
const uri = (0, publisherconfig_1.connectionUriFor)(deployment, "acme", "e", "c");
|
|
151
|
+
const local = deployment === "localhost" || deployment === "e2e-test";
|
|
152
|
+
(0, chai_1.expect)(uri, deployment).to.match(local ? /^http:\/\// : /^https:\/\//);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
it("uses the /environments/ path form", () => {
|
|
156
|
+
// db-publisher issues its own requests against the legacy /projects/
|
|
157
|
+
// facade; publisher-server appends verbatim to this form. The router
|
|
158
|
+
// serves both, but this is the form we write.
|
|
159
|
+
(0, chai_1.expect)((0, publisherconfig_1.connectionUriFor)("production", "acme", "prod", "wh")).to.equal("https://acme.data.credibledata.com/api/v0/environments/prod/connections/wh");
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe("stampAccessToken", () => {
|
|
163
|
+
it("sets the token on publisher connections only", () => {
|
|
164
|
+
var _a;
|
|
165
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "warehouse" }] }));
|
|
166
|
+
const stamped = (0, publisherconfig_1.stampAccessToken)(config, "jwt-abc");
|
|
167
|
+
const [warehouse] = stamped.environments[0].connections;
|
|
168
|
+
(0, chai_1.expect)((_a = warehouse.publisherConnection) === null || _a === void 0 ? void 0 : _a.accessToken).to.equal("jwt-abc");
|
|
169
|
+
});
|
|
170
|
+
it("does not mutate the token-free config it was given", () => {
|
|
171
|
+
// The unstamped config is what stays on disk between runs; a mutation
|
|
172
|
+
// here would leak a credential into the file setup wrote.
|
|
173
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "warehouse" }] }));
|
|
174
|
+
(0, publisherconfig_1.stampAccessToken)(config, "jwt-abc");
|
|
175
|
+
(0, chai_1.expect)(JSON.stringify(config)).to.not.contain("jwt-abc");
|
|
176
|
+
});
|
|
177
|
+
// The supervisor restamps at every token renewal; a stamp that dropped
|
|
178
|
+
// the block would turn the LLM off an hour into a session.
|
|
179
|
+
it("keeps the retrieval block", () => {
|
|
180
|
+
const retrieval = { llm: { provider: "ollama", model: "llama3" } };
|
|
181
|
+
const config = (0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [{ name: "warehouse" }], retrieval }));
|
|
182
|
+
(0, chai_1.expect)((0, publisherconfig_1.stampAccessToken)(config, "jwt-abc").retrieval).to.eql(retrieval);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe("retrieval", () => {
|
|
186
|
+
it("passes the block through unchanged", () => {
|
|
187
|
+
const retrieval = {
|
|
188
|
+
llm: { provider: "anthropic", model: "m", maxCallsPerRequest: 5 },
|
|
189
|
+
embedding: { provider: "openai" },
|
|
190
|
+
};
|
|
191
|
+
(0, chai_1.expect)((0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [], retrieval }))
|
|
192
|
+
.retrieval).to.eql(retrieval);
|
|
193
|
+
});
|
|
194
|
+
it("writes no retrieval key when there is none to pass", () => {
|
|
195
|
+
(0, chai_1.expect)(Object.keys((0, publisherconfig_1.buildPublisherConfig)(Object.assign(Object.assign({}, base), { connections: [] })))).to.eql(["frozenConfig", "environments"]);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe("readLocalRetrieval", () => {
|
|
200
|
+
let dir;
|
|
201
|
+
beforeEach(() => {
|
|
202
|
+
dir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), "retrieval-"));
|
|
203
|
+
});
|
|
204
|
+
afterEach(() => {
|
|
205
|
+
fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
206
|
+
});
|
|
207
|
+
const write = (contents) => fs_1.default.writeFileSync(path_1.default.join(dir, "publisher.config.json"), contents);
|
|
208
|
+
it("returns the retrieval block of the directory's publisher.config.json", () => {
|
|
209
|
+
write(JSON.stringify({
|
|
210
|
+
environments: [],
|
|
211
|
+
retrieval: { llm: { provider: "anthropic", model: "m" } },
|
|
212
|
+
}));
|
|
213
|
+
(0, chai_1.expect)((0, publisherconfig_1.readLocalRetrieval)(dir)).to.eql({
|
|
214
|
+
settings: { llm: { provider: "anthropic", model: "m" } },
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
it("returns nothing with no file, a file that is not JSON, or no retrieval key", () => {
|
|
218
|
+
(0, chai_1.expect)((0, publisherconfig_1.readLocalRetrieval)(dir)).to.equal(undefined);
|
|
219
|
+
write("{ not json");
|
|
220
|
+
(0, chai_1.expect)((0, publisherconfig_1.readLocalRetrieval)(dir)).to.equal(undefined);
|
|
221
|
+
write(JSON.stringify({ environments: [] }));
|
|
222
|
+
(0, chai_1.expect)((0, publisherconfig_1.readLocalRetrieval)(dir)).to.equal(undefined);
|
|
223
|
+
});
|
|
224
|
+
it('treats "retrieval": null as turned off, not as a mistake', () => {
|
|
225
|
+
write(JSON.stringify({ environments: [], retrieval: null }));
|
|
226
|
+
(0, chai_1.expect)((0, publisherconfig_1.readLocalRetrieval)(dir)).to.equal(undefined);
|
|
227
|
+
});
|
|
228
|
+
it("reports a retrieval that is not an object, naming the file and the fix", () => {
|
|
229
|
+
for (const bad of ["anthropic", [], 3]) {
|
|
230
|
+
write(JSON.stringify({ retrieval: bad }));
|
|
231
|
+
const result = (0, publisherconfig_1.readLocalRetrieval)(dir);
|
|
232
|
+
(0, chai_1.expect)(result, JSON.stringify(bad)).to.have.property("problem");
|
|
233
|
+
const problem = result.problem;
|
|
234
|
+
(0, chai_1.expect)(problem).to.contain(path_1.default.join(dir, "publisher.config.json"));
|
|
235
|
+
(0, chai_1.expect)(problem).to.contain(`got ${JSON.stringify(bad)}`);
|
|
236
|
+
(0, chai_1.expect)(problem).to.contain('Fix: { "retrieval": { "llm"');
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
describe("localEnvironmentName", () => {
|
|
241
|
+
it("is the Credible environment's name with -local", () => {
|
|
242
|
+
(0, chai_1.expect)((0, publisherconfig_1.localEnvironmentName)("analytics")).to.equal("analytics-local");
|
|
243
|
+
});
|
|
244
|
+
// Credible allows spaces in environment names; the publisher does not.
|
|
245
|
+
it("cleans a name the publisher would refuse", () => {
|
|
246
|
+
(0, chai_1.expect)((0, publisherconfig_1.localEnvironmentName)("Sales Team")).to.equal("Sales-Team-local");
|
|
247
|
+
(0, chai_1.expect)((0, publisherconfig_1.localEnvironmentName)(" ")).to.equal("local");
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe("packageNameFromDirectory", () => {
|
|
251
|
+
it("keeps a name the server already accepts", () => {
|
|
252
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("sales-models")).to.equal("sales-models");
|
|
253
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("Sales_v2.1")).to.equal("Sales_v2.1");
|
|
254
|
+
});
|
|
255
|
+
it("substitutes characters the server rejects rather than failing setup", () => {
|
|
256
|
+
// The user did not choose this string as a package name - it is the
|
|
257
|
+
// folder they happened to be standing in - so failing over a space would
|
|
258
|
+
// punish them for our choice of default.
|
|
259
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("my models")).to.equal("my-models");
|
|
260
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("sales@2026")).to.equal("sales-2026");
|
|
261
|
+
});
|
|
262
|
+
it("strips a leading dot, which the server forbids", () => {
|
|
263
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)(".hidden")).to.equal("hidden");
|
|
264
|
+
});
|
|
265
|
+
it("falls back when nothing usable survives", () => {
|
|
266
|
+
// A directory named ".." or "@@@" leaves an empty string, and an empty
|
|
267
|
+
// package name is not a name the server will load either.
|
|
268
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("..")).to.equal("models");
|
|
269
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("@@@")).to.equal("models");
|
|
270
|
+
(0, chai_1.expect)((0, publisherconfig_1.packageNameFromDirectory)("")).to.equal("models");
|
|
271
|
+
});
|
|
272
|
+
it("caps the length where the server and the filesystem both still accept it", () => {
|
|
273
|
+
const name = (0, publisherconfig_1.packageNameFromDirectory)("a".repeat(400));
|
|
274
|
+
(0, chai_1.expect)(name.length).to.equal(255 - ".malloy".length);
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
//# sourceMappingURL=publisherconfig.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisherconfig.spec.js","sourceRoot":"","sources":["../../src/setup-core/publisherconfig.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PUBLISHER_VERSION = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The Publisher release `cred init` and `cred dev` run.
|
|
6
|
+
*
|
|
7
|
+
* DO NOT EDIT BY HAND. This is a derived value: the repo's one human-authored
|
|
8
|
+
* Publisher version is `publisher_version` in
|
|
9
|
+
* `infrastructure/malloy-versions.json`, and `npm run sync-malloy-versions`
|
|
10
|
+
* writes this constant from it. `npm run check-malloy-versions` (CI job
|
|
11
|
+
* `validate-malloy-versions`) fails if the two disagree. To bump the publisher,
|
|
12
|
+
* edit the manifest and run sync — see
|
|
13
|
+
* `docs/practices/malloy-version-lockstep.md`.
|
|
14
|
+
*
|
|
15
|
+
* It is a checked-in constant rather than a read of the manifest at runtime
|
|
16
|
+
* because the CLI ships to npm as `@credibledata/cred-cli`, without the repo
|
|
17
|
+
* around it. Pinning rather than taking `@latest` also means a session is
|
|
18
|
+
* reproducible and a publisher bump is a deliberate, reviewable change.
|
|
19
|
+
*
|
|
20
|
+
* It lives in `setup-core/` rather than next to the command because the two
|
|
21
|
+
* real-publisher harnesses (`publisherconfig.oracle.ts`, `flow.e2e.ts`) need it
|
|
22
|
+
* too, and the setup-core boundary bans them from importing up into
|
|
23
|
+
* `../commands/`. One definition, imported by all three.
|
|
24
|
+
*/
|
|
25
|
+
exports.PUBLISHER_VERSION = "0.11.1";
|
|
26
|
+
//# sourceMappingURL=publisherversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisherversion.js","sourceRoot":"","sources":["../../src/setup-core/publisherversion.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACU,QAAA,iBAAiB,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const readylines_1 = require("./readylines");
|
|
5
|
+
/**
|
|
6
|
+
* Fixtures from real runs of `@malloy-publisher/server@0.0.248`, which is when
|
|
7
|
+
* they were captured, not the version pinned now. The failing one
|
|
8
|
+
* is the run that caught our `duckdb` bug: both ports bound, both listening
|
|
9
|
+
* lines printed, and zero packages served.
|
|
10
|
+
*/
|
|
11
|
+
const HEALTHY = "PUBLISHER_READY url=http://127.0.0.1:4000 mcp=http://127.0.0.1:4040 environments=1 packages=1 load_errors=0";
|
|
12
|
+
const EMPTY_SERVER = "PUBLISHER_READY url=http://127.0.0.1:4000 mcp=http://127.0.0.1:4040 environments=0 packages=0 load_errors=1";
|
|
13
|
+
/**
|
|
14
|
+
* Captured from a real `cred init` run: the environment loaded with two
|
|
15
|
+
* connections and the package failed to compile, because the model referenced a
|
|
16
|
+
* `bq_demo` connection that environment does not have.
|
|
17
|
+
*/
|
|
18
|
+
const MODEL_WONT_COMPILE = "PUBLISHER_READY url=http://127.0.0.1:4000 mcp=http://127.0.0.1:4040 environments=1 packages=0 load_errors=1";
|
|
19
|
+
describe("readiness signals", () => {
|
|
20
|
+
describe("parseReadinessLine", () => {
|
|
21
|
+
it("reads the URLs and the counts", () => {
|
|
22
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)(HEALTHY)).to.eql({
|
|
23
|
+
url: "http://127.0.0.1:4000",
|
|
24
|
+
mcpUrl: "http://127.0.0.1:4040",
|
|
25
|
+
environments: 1,
|
|
26
|
+
packages: 1,
|
|
27
|
+
loadErrors: 0,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
// Unanchored, `url=` also matched inside a field that ends in it.
|
|
31
|
+
it("reads each field by its whole name", () => {
|
|
32
|
+
var _a;
|
|
33
|
+
(0, chai_1.expect)((_a = (0, readylines_1.parseReadinessLine)("PUBLISHER_READY mcp_url=http://wrong:1 url=http://127.0.0.1:4000 mcp=http://127.0.0.1:4040 environments=1 packages=1 load_errors=0")) === null || _a === void 0 ? void 0 : _a.url).to.equal("http://127.0.0.1:4000");
|
|
34
|
+
});
|
|
35
|
+
it("ignores lines that are not the readiness line", () => {
|
|
36
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)("info: Publisher server listening at http://x:1")).to.equal(undefined);
|
|
37
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)("")).to.equal(undefined);
|
|
38
|
+
});
|
|
39
|
+
it("returns undefined rather than NaN counts for a truncated line", () => {
|
|
40
|
+
// A partially-flushed line must not read as "zero problems".
|
|
41
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)("PUBLISHER_READY url=http://127.0.0.1:4000")).to.equal(undefined);
|
|
42
|
+
});
|
|
43
|
+
// The same failure in its other form: a field that is present but is not
|
|
44
|
+
// a count. `Number("n/a")` is NaN, and every comparison in
|
|
45
|
+
// `readinessVerdict` is false for NaN — so without a numeric check at the
|
|
46
|
+
// parse boundary this falls through every guard to "serving" and points
|
|
47
|
+
// an agent at a server that loaded nothing. Upstream is another project's
|
|
48
|
+
// stdout, so a format change (`packages=1,234`) is the realistic trigger,
|
|
49
|
+
// and it has to break loudly rather than quietly succeed.
|
|
50
|
+
it("returns undefined for a count that is present but not a number", () => {
|
|
51
|
+
for (const line of [
|
|
52
|
+
"PUBLISHER_READY url=http://a mcp=http://b environments=one packages=two load_errors=three",
|
|
53
|
+
"PUBLISHER_READY url=http://a mcp=http://b environments=1 packages=1,234 load_errors=0",
|
|
54
|
+
"PUBLISHER_READY url=http://a mcp=http://b environments=1 packages=n/a load_errors=0",
|
|
55
|
+
]) {
|
|
56
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)(line), line).to.equal(undefined);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
it("returns undefined for a negative count", () => {
|
|
60
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)("PUBLISHER_READY url=http://a mcp=http://b environments=-1 packages=-1 load_errors=-1")).to.equal(undefined);
|
|
61
|
+
});
|
|
62
|
+
// Zero is a real count, and it is the one the fatal verdict is built on —
|
|
63
|
+
// so a guard that tightens the parse must not drop it.
|
|
64
|
+
it("keeps zero counts, which are the fatal case", () => {
|
|
65
|
+
(0, chai_1.expect)((0, readylines_1.parseReadinessLine)(EMPTY_SERVER)).to.eql({
|
|
66
|
+
url: "http://127.0.0.1:4000",
|
|
67
|
+
mcpUrl: "http://127.0.0.1:4040",
|
|
68
|
+
environments: 0,
|
|
69
|
+
packages: 0,
|
|
70
|
+
loadErrors: 1,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe("readinessVerdict", () => {
|
|
75
|
+
it("is serving for a healthy server", () => {
|
|
76
|
+
(0, chai_1.expect)((0, readylines_1.readinessVerdict)((0, readylines_1.parseReadinessLine)(HEALTHY)).kind).to.equal("serving");
|
|
77
|
+
});
|
|
78
|
+
// A reserved connection name makes the server skip the whole environment.
|
|
79
|
+
// Both listening lines still print, so anything watching only for those
|
|
80
|
+
// reports success. Nothing a user edits in a `.malloy` file fixes it, and
|
|
81
|
+
// the server has no connections, so there is no session worth keeping.
|
|
82
|
+
it("is fatal when no environment loaded", () => {
|
|
83
|
+
const verdict = (0, readylines_1.readinessVerdict)((0, readylines_1.parseReadinessLine)(EMPTY_SERVER));
|
|
84
|
+
(0, chai_1.expect)(verdict.kind).to.equal("fatal");
|
|
85
|
+
(0, chai_1.expect)(verdict)
|
|
86
|
+
.to.have.property("reason")
|
|
87
|
+
.that.contains("no environment loaded");
|
|
88
|
+
});
|
|
89
|
+
// Captured from a real run: the environment and its two connections came
|
|
90
|
+
// up, and the package failed to compile because the model referenced a
|
|
91
|
+
// connection that environment does not have. This must NOT be fatal — it
|
|
92
|
+
// is the state a model is in while being written, watch mode is active,
|
|
93
|
+
// and killing the server means a model that does not compile cannot be
|
|
94
|
+
// worked on at all.
|
|
95
|
+
it("is degraded, not fatal, when the environment is up but a package failed to compile", () => {
|
|
96
|
+
const verdict = (0, readylines_1.readinessVerdict)((0, readylines_1.parseReadinessLine)(MODEL_WONT_COMPILE));
|
|
97
|
+
(0, chai_1.expect)(verdict.kind).to.equal("degraded");
|
|
98
|
+
(0, chai_1.expect)(verdict)
|
|
99
|
+
.to.have.property("reason")
|
|
100
|
+
.that.contains("failed to compile");
|
|
101
|
+
});
|
|
102
|
+
it("does not describe a package failure as an environment failure", () => {
|
|
103
|
+
const verdict = (0, readylines_1.readinessVerdict)((0, readylines_1.parseReadinessLine)(MODEL_WONT_COMPILE));
|
|
104
|
+
// The old message said "1 configured environment failed to load" for
|
|
105
|
+
// this line, which is false: environments=1 loaded.
|
|
106
|
+
(0, chai_1.expect)(verdict)
|
|
107
|
+
.to.have.property("reason")
|
|
108
|
+
.that.does.not.contain("environment failed");
|
|
109
|
+
});
|
|
110
|
+
it("is degraded when nothing errored but no package is served", () => {
|
|
111
|
+
const verdict = (0, readylines_1.readinessVerdict)({
|
|
112
|
+
url: "u",
|
|
113
|
+
mcpUrl: "m",
|
|
114
|
+
environments: 1,
|
|
115
|
+
packages: 0,
|
|
116
|
+
loadErrors: 0,
|
|
117
|
+
});
|
|
118
|
+
(0, chai_1.expect)(verdict.kind).to.equal("degraded");
|
|
119
|
+
(0, chai_1.expect)(verdict)
|
|
120
|
+
.to.have.property("reason")
|
|
121
|
+
.that.contains("no package is being served");
|
|
122
|
+
});
|
|
123
|
+
it("pluralises the package count correctly", () => {
|
|
124
|
+
const one = (0, readylines_1.readinessVerdict)({
|
|
125
|
+
url: "u",
|
|
126
|
+
mcpUrl: "m",
|
|
127
|
+
environments: 1,
|
|
128
|
+
packages: 0,
|
|
129
|
+
loadErrors: 1,
|
|
130
|
+
});
|
|
131
|
+
(0, chai_1.expect)(one)
|
|
132
|
+
.to.have.property("reason")
|
|
133
|
+
.that.contains("1 package failed");
|
|
134
|
+
const two = (0, readylines_1.readinessVerdict)({
|
|
135
|
+
url: "u",
|
|
136
|
+
mcpUrl: "m",
|
|
137
|
+
environments: 1,
|
|
138
|
+
packages: 0,
|
|
139
|
+
loadErrors: 2,
|
|
140
|
+
});
|
|
141
|
+
(0, chai_1.expect)(two)
|
|
142
|
+
.to.have.property("reason")
|
|
143
|
+
.that.contains("2 packages failed");
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe("parseInitFailedLine", () => {
|
|
147
|
+
it("decodes the JSON-encoded error the server writes to stderr", () => {
|
|
148
|
+
(0, chai_1.expect)((0, readylines_1.parseInitFailedLine)("PUBLISHER_INIT_FAILED error=\"Invalid publisher connection 'wh': missing connectionUri\"")).to.equal("Invalid publisher connection 'wh': missing connectionUri");
|
|
149
|
+
});
|
|
150
|
+
it("survives an error message containing a newline", () => {
|
|
151
|
+
(0, chai_1.expect)((0, readylines_1.parseInitFailedLine)('PUBLISHER_INIT_FAILED error="line one\\nline two"')).to.equal("line one\nline two");
|
|
152
|
+
});
|
|
153
|
+
it("still reports something when the payload is not decodable", () => {
|
|
154
|
+
(0, chai_1.expect)((0, readylines_1.parseInitFailedLine)("PUBLISHER_INIT_FAILED error=")).to.equal("the server did not say why");
|
|
155
|
+
});
|
|
156
|
+
it("ignores unrelated lines", () => {
|
|
157
|
+
(0, chai_1.expect)((0, readylines_1.parseInitFailedLine)("info: all good")).to.equal(undefined);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=readiness.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.spec.js","sourceRoot":"","sources":["../../src/setup-core/readiness.spec.ts"],"names":[],"mappings":"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"}
|