@jigx/sdk-tools 1.1.0-rc → 1.1.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +30 -51
  2. package/dist/auth/cognito-auth.d.ts +26 -0
  3. package/dist/auth/cognito-auth.d.ts.map +1 -0
  4. package/dist/auth/cognito-auth.js +150 -0
  5. package/dist/auth/cognito-auth.js.map +1 -0
  6. package/dist/auth/cognito-config.d.ts +10 -0
  7. package/dist/auth/cognito-config.d.ts.map +1 -0
  8. package/dist/auth/cognito-config.js +17 -0
  9. package/dist/auth/cognito-config.js.map +1 -0
  10. package/dist/auth/credentials-store.d.ts +34 -0
  11. package/dist/auth/credentials-store.d.ts.map +1 -0
  12. package/dist/auth/credentials-store.js +116 -0
  13. package/dist/auth/credentials-store.js.map +1 -0
  14. package/dist/auth/errors.d.ts +23 -0
  15. package/dist/auth/errors.d.ts.map +1 -0
  16. package/dist/auth/errors.js +39 -0
  17. package/dist/auth/errors.js.map +1 -0
  18. package/dist/auth/identity-client.d.ts +19 -0
  19. package/dist/auth/identity-client.d.ts.map +1 -0
  20. package/dist/auth/identity-client.js +70 -0
  21. package/dist/auth/identity-client.js.map +1 -0
  22. package/dist/auth/index.d.ts +12 -0
  23. package/dist/auth/index.d.ts.map +1 -0
  24. package/dist/auth/index.js +7 -0
  25. package/dist/auth/index.js.map +1 -0
  26. package/dist/auth/jigx-config-store.d.ts +27 -0
  27. package/dist/auth/jigx-config-store.d.ts.map +1 -0
  28. package/dist/auth/jigx-config-store.js +76 -0
  29. package/dist/auth/jigx-config-store.js.map +1 -0
  30. package/dist/cli.js +138 -14
  31. package/dist/cli.js.map +1 -1
  32. package/dist/deployer/deploy-to-strata.js +2 -2
  33. package/dist/deployer/deploy-to-strata.js.map +1 -1
  34. package/dist/deployer/deploy.d.ts +17 -0
  35. package/dist/deployer/deploy.d.ts.map +1 -1
  36. package/dist/deployer/deploy.js +90 -4
  37. package/dist/deployer/deploy.js.map +1 -1
  38. package/dist/deployer/index.d.ts +1 -1
  39. package/dist/deployer/index.d.ts.map +1 -1
  40. package/dist/deployer/index.js +1 -1
  41. package/dist/deployer/index.js.map +1 -1
  42. package/dist/index.d.ts +8 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +4 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/init/index.d.ts +2 -0
  47. package/dist/init/index.d.ts.map +1 -0
  48. package/dist/init/index.js +2 -0
  49. package/dist/init/index.js.map +1 -0
  50. package/dist/init/init.d.ts +45 -0
  51. package/dist/init/init.d.ts.map +1 -0
  52. package/dist/init/init.js +125 -0
  53. package/dist/init/init.js.map +1 -0
  54. package/dist/login/index.d.ts +3 -0
  55. package/dist/login/index.d.ts.map +1 -0
  56. package/dist/login/index.js +2 -0
  57. package/dist/login/index.js.map +1 -0
  58. package/dist/login/login.d.ts +19 -0
  59. package/dist/login/login.d.ts.map +1 -0
  60. package/dist/login/login.js +58 -0
  61. package/dist/login/login.js.map +1 -0
  62. package/dist/logout/index.d.ts +3 -0
  63. package/dist/logout/index.d.ts.map +1 -0
  64. package/dist/logout/index.js +2 -0
  65. package/dist/logout/index.js.map +1 -0
  66. package/dist/logout/logout.d.ts +26 -0
  67. package/dist/logout/logout.d.ts.map +1 -0
  68. package/dist/logout/logout.js +100 -0
  69. package/dist/logout/logout.js.map +1 -0
  70. package/dist/scaffolder/scaffold.d.ts.map +1 -1
  71. package/dist/scaffolder/scaffold.js +1 -4
  72. package/dist/scaffolder/scaffold.js.map +1 -1
  73. package/dist/scaffolder/templates.d.ts +0 -1
  74. package/dist/scaffolder/templates.d.ts.map +1 -1
  75. package/dist/scaffolder/templates.js +23 -47
  76. package/dist/scaffolder/templates.js.map +1 -1
  77. package/dist/whoami/index.d.ts +3 -0
  78. package/dist/whoami/index.d.ts.map +1 -0
  79. package/dist/whoami/index.js +2 -0
  80. package/dist/whoami/index.js.map +1 -0
  81. package/dist/whoami/whoami.d.ts +27 -0
  82. package/dist/whoami/whoami.d.ts.map +1 -0
  83. package/dist/whoami/whoami.js +52 -0
  84. package/dist/whoami/whoami.js.map +1 -0
  85. package/package.json +19 -3
  86. package/CHANGELOG.md +0 -15
  87. package/dist/builder/__tests__/build.test.d.ts +0 -2
  88. package/dist/builder/__tests__/build.test.d.ts.map +0 -1
  89. package/dist/builder/__tests__/build.test.js +0 -88
  90. package/dist/builder/__tests__/build.test.js.map +0 -1
  91. package/dist/builder/__tests__/extract-to-folder.test.d.ts +0 -2
  92. package/dist/builder/__tests__/extract-to-folder.test.d.ts.map +0 -1
  93. package/dist/builder/__tests__/extract-to-folder.test.js +0 -198
  94. package/dist/builder/__tests__/extract-to-folder.test.js.map +0 -1
  95. package/dist/builder/__tests__/fixtures/sample-application.d.ts +0 -2
  96. package/dist/builder/__tests__/fixtures/sample-application.d.ts.map +0 -1
  97. package/dist/builder/__tests__/fixtures/sample-application.js +0 -56
  98. package/dist/builder/__tests__/fixtures/sample-application.js.map +0 -1
  99. package/dist/creator/__tests__/create.test.d.ts +0 -2
  100. package/dist/creator/__tests__/create.test.d.ts.map +0 -1
  101. package/dist/creator/__tests__/create.test.js +0 -93
  102. package/dist/creator/__tests__/create.test.js.map +0 -1
  103. package/dist/deployer/__tests__/deploy-to-strata.test.d.ts +0 -2
  104. package/dist/deployer/__tests__/deploy-to-strata.test.d.ts.map +0 -1
  105. package/dist/deployer/__tests__/deploy-to-strata.test.js +0 -174
  106. package/dist/deployer/__tests__/deploy-to-strata.test.js.map +0 -1
  107. package/dist/deployer/__tests__/deploy.test.d.ts +0 -2
  108. package/dist/deployer/__tests__/deploy.test.d.ts.map +0 -1
  109. package/dist/deployer/__tests__/deploy.test.js +0 -116
  110. package/dist/deployer/__tests__/deploy.test.js.map +0 -1
  111. package/dist/env-loader/__tests__/load-env.test.d.ts +0 -2
  112. package/dist/env-loader/__tests__/load-env.test.d.ts.map +0 -1
  113. package/dist/env-loader/__tests__/load-env.test.js +0 -46
  114. package/dist/env-loader/__tests__/load-env.test.js.map +0 -1
  115. package/dist/env-loader/index.d.ts +0 -3
  116. package/dist/env-loader/index.d.ts.map +0 -1
  117. package/dist/env-loader/index.js +0 -2
  118. package/dist/env-loader/index.js.map +0 -1
  119. package/dist/env-loader/load-env.d.ts +0 -12
  120. package/dist/env-loader/load-env.d.ts.map +0 -1
  121. package/dist/env-loader/load-env.js +0 -50
  122. package/dist/env-loader/load-env.js.map +0 -1
  123. package/dist/scaffolder/__tests__/scaffold.test.d.ts +0 -2
  124. package/dist/scaffolder/__tests__/scaffold.test.d.ts.map +0 -1
  125. package/dist/scaffolder/__tests__/scaffold.test.js +0 -124
  126. package/dist/scaffolder/__tests__/scaffold.test.js.map +0 -1
  127. package/dist/slug/__tests__/validate.test.d.ts +0 -2
  128. package/dist/slug/__tests__/validate.test.d.ts.map +0 -1
  129. package/dist/slug/__tests__/validate.test.js +0 -51
  130. package/dist/slug/__tests__/validate.test.js.map +0 -1
@@ -1,15 +1,101 @@
1
1
  import { readFile } from 'node:fs/promises';
2
+ import { COGNITO_CONFIG, CognitoAuth, CredentialsStore, JigxConfigStore, RefreshExpiredError, } from '../auth/index.js';
2
3
  import { build } from '../builder/index.js';
3
- import { loadEnv } from '../env-loader/index.js';
4
+ import { init as defaultInit } from '../init/index.js';
5
+ import { login as defaultLogin } from '../login/index.js';
4
6
  import { deployToStrata, } from './deploy-to-strata.js';
7
+ export class MissingOrganizationError extends Error {
8
+ environment;
9
+ constructor(environment) {
10
+ super(`No Organization configured for env "${environment}". Run jigx init --env ${environment}.`);
11
+ this.name = 'MissingOrganizationError';
12
+ this.environment = environment;
13
+ }
14
+ }
15
+ export class MissingRefreshTokenError extends Error {
16
+ environment;
17
+ constructor(environment) {
18
+ super(`Not authenticated. Run jigx login --env ${environment}.`);
19
+ this.name = 'MissingRefreshTokenError';
20
+ this.environment = environment;
21
+ }
22
+ }
23
+ async function resolveOrganizationId(options) {
24
+ const { projectRoot, environment, configStore, isTTY, initFn } = options;
25
+ const existing = await configStore.getEnvironment({ projectRoot, environment });
26
+ if (existing)
27
+ return existing.organizationId;
28
+ if (!isTTY)
29
+ throw new MissingOrganizationError(environment);
30
+ console.log(`No Organization configured for env "${environment}". Running jigx init...`);
31
+ await initFn({ projectRoot, environment });
32
+ const after = await configStore.getEnvironment({ projectRoot, environment });
33
+ if (!after)
34
+ throw new MissingOrganizationError(environment);
35
+ return after.organizationId;
36
+ }
37
+ async function refreshIdTokenOrNull(options) {
38
+ const { environment, credentialsStore, cognitoAuth } = options;
39
+ const cached = await credentialsStore.readUserHome({
40
+ environment,
41
+ userPoolId: COGNITO_CONFIG[environment].userPoolId,
42
+ });
43
+ if (!cached)
44
+ return null;
45
+ try {
46
+ const refreshed = await cognitoAuth.refreshSession({
47
+ refreshToken: cached.refreshToken,
48
+ environment,
49
+ username: cached.userId,
50
+ });
51
+ return refreshed.idToken;
52
+ }
53
+ catch (error) {
54
+ if (error instanceof RefreshExpiredError)
55
+ return null;
56
+ throw error;
57
+ }
58
+ }
59
+ async function resolveIdToken(options) {
60
+ const { environment, credentialsStore, cognitoAuth, isTTY, loginFn } = options;
61
+ const idToken = await refreshIdTokenOrNull({ environment, credentialsStore, cognitoAuth });
62
+ if (idToken)
63
+ return idToken;
64
+ if (!isTTY)
65
+ throw new MissingRefreshTokenError(environment);
66
+ console.log(`Not authenticated for env "${environment}". Running jigx login...`);
67
+ await loginFn({ environment });
68
+ const retried = await refreshIdTokenOrNull({ environment, credentialsStore, cognitoAuth });
69
+ if (!retried)
70
+ throw new MissingRefreshTokenError(environment);
71
+ return retried;
72
+ }
5
73
  export async function deploy(options) {
6
- const { projectRoot, environment } = options;
74
+ const { projectRoot, environment, isTTY = process.stdin.isTTY, cognitoAuth = new CognitoAuth(), credentialsStore = new CredentialsStore(), configStore = new JigxConfigStore(), initFn = defaultInit, loginFn = defaultLogin, } = options;
7
75
  const buildResult = await build({ projectRoot });
8
- const { apiKey, organizationId } = await loadEnv({ projectRoot });
9
76
  const applicationContent = JSON.parse(await readFile(buildResult.outputJsonPath, 'utf8'));
10
77
  if (!applicationContent.name) {
11
78
  throw new Error(`Built Application is missing a name. Set .name on your ApplicationBuilder in src/app.ts.`);
12
79
  }
13
- return deployToStrata({ applicationContent, organizationId, apiKey, environment });
80
+ const organizationId = await resolveOrganizationId({
81
+ projectRoot,
82
+ environment,
83
+ configStore,
84
+ isTTY,
85
+ initFn,
86
+ });
87
+ const idToken = await resolveIdToken({
88
+ environment,
89
+ credentialsStore,
90
+ cognitoAuth,
91
+ isTTY,
92
+ loginFn,
93
+ });
94
+ return deployToStrata({
95
+ applicationContent,
96
+ organizationId,
97
+ apiKey: idToken,
98
+ environment,
99
+ });
14
100
  }
15
101
  //# sourceMappingURL=deploy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deployer/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAIL,cAAc,GACf,MAAM,uBAAuB,CAAA;AAY9B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB,EAAyB;IAC1E,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;IAE5C,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;IAChD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;IAEjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CACnC,MAAM,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAC7B,CAAA;IAEvB,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;IACH,CAAC;IAED,OAAO,cAAc,CAAC,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;AAAA,CACnF"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deployer/deploy.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { deploy } from './deploy.js';
1
+ export { deploy, MissingOrganizationError, MissingRefreshTokenError } from './deploy.js';
2
2
  export type { DeployOptions } from './deploy.js';
3
3
  export { deployToStrata, DeployError } from './deploy-to-strata.js';
4
4
  export type { ApplicationContent, DeployEnvironment, DeployToStrataOptions, DeployResult, } from './deploy-to-strata.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deployer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GACb,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deployer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACxF,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GACb,MAAM,uBAAuB,CAAA"}
@@ -1,3 +1,3 @@
1
- export { deploy } from './deploy.js';
1
+ export { deploy, MissingOrganizationError, MissingRefreshTokenError } from './deploy.js';
2
2
  export { deployToStrata, DeployError } from './deploy-to-strata.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deployer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deployer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/index.d.ts CHANGED
@@ -4,8 +4,14 @@ export { create, InstallFailedError, NpmTokenMissingError } from './creator/inde
4
4
  export type { CreateOptions, CreateResult, InstallFn, InstallSpawnResult } from './creator/index.js';
5
5
  export { deploy, deployToStrata, DeployError } from './deployer/index.js';
6
6
  export type { ApplicationContent, DeployEnvironment, DeployOptions, DeployToStrataOptions, DeployResult, } from './deployer/index.js';
7
- export { loadEnv, EnvMissingError } from './env-loader/index.js';
8
- export type { LoadEnvOptions, LoadedEnv } from './env-loader/index.js';
7
+ export { AuthHttpError, COGNITO_CONFIG, CognitoAuth, CredentialsSchemaError, CredentialsStore, IdentityClient, InvalidCredentialsError, JigxConfigStore, NetworkError, RefreshExpiredError, } from './auth/index.js';
8
+ export type { ClearUserHomeOptions, ClearUserHomeResult, CognitoEnvironmentConfig, IdentityGetMeOptions, IdentityGetMeResult, IdentityOrganizationSummary, JigxConfig, JigxConfigEnvironment, ReadUserHomeOptions, RefreshSessionOptions, RefreshSessionResult, SignInOptions, SignInResult, UserHomeRefreshToken, WriteUserHomeOptions, } from './auth/index.js';
9
+ export { login, LoginCancelledError } from './login/index.js';
10
+ export type { LoginOptions, LoginResult } from './login/index.js';
11
+ export { logout, LogoutCancelledError } from './logout/index.js';
12
+ export type { LogoutEnvOutcome, LogoutOptions, LogoutResult, LogoutScope } from './logout/index.js';
13
+ export { whoami } from './whoami/index.js';
14
+ export type { WhoamiOptions, WhoamiProjectOrganization, WhoamiResult, WhoamiUser, } from './whoami/index.js';
9
15
  export { PromptCancelledError, runCreatePrompts } from './prompts/index.js';
10
16
  export type { CreatePromptAnswers } from './prompts/index.js';
11
17
  export { scaffold, ScaffoldError } from './scaffolder/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAChE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/D,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnG,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/D,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
1
  export { build } from './builder/index.js';
2
2
  export { create, InstallFailedError, NpmTokenMissingError } from './creator/index.js';
3
3
  export { deploy, deployToStrata, DeployError } from './deployer/index.js';
4
- export { loadEnv, EnvMissingError } from './env-loader/index.js';
4
+ export { AuthHttpError, COGNITO_CONFIG, CognitoAuth, CredentialsSchemaError, CredentialsStore, IdentityClient, InvalidCredentialsError, JigxConfigStore, NetworkError, RefreshExpiredError, } from './auth/index.js';
5
+ export { login, LoginCancelledError } from './login/index.js';
6
+ export { logout, LogoutCancelledError } from './logout/index.js';
7
+ export { whoami } from './whoami/index.js';
5
8
  export { PromptCancelledError, runCreatePrompts } from './prompts/index.js';
6
9
  export { scaffold, ScaffoldError } from './scaffolder/index.js';
7
10
  export { slugifyTitle, validateApplicationName } from './slug/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAGrF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AASzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAGhE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG3E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAQ/D,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAGrF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AASzE,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAmBxB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG7D,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAQ1C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG3E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAQ/D,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { init, InitCancelledError, NoOrganizationsError, NotAuthenticatedError, OrganizationOverrideMismatchError, } from './init.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iCAAiC,GAClC,MAAM,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { init, InitCancelledError, NoOrganizationsError, NotAuthenticatedError, OrganizationOverrideMismatchError, } from './init.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iCAAiC,GAClC,MAAM,WAAW,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { CognitoAuth, CredentialsStore, IdentityClient, JigxConfigStore, type IdentityOrganizationSummary } from '../auth/index.js';
2
+ import type { DeployEnvironment } from '../deployer/index.js';
3
+ interface InitOptions {
4
+ readonly projectRoot: string;
5
+ readonly environment: DeployEnvironment;
6
+ readonly organizationIdOverride?: string;
7
+ readonly cognitoAuth?: CognitoAuth;
8
+ readonly identityClient?: IdentityClient;
9
+ readonly credentialsStore?: CredentialsStore;
10
+ readonly configStore?: JigxConfigStore;
11
+ readonly promptOrganization?: (organizations: readonly IdentityOrganizationSummary[]) => Promise<IdentityOrganizationSummary>;
12
+ readonly promptOverwrite?: (options: {
13
+ readonly environment: DeployEnvironment;
14
+ readonly currentOrganizationId: string;
15
+ readonly nextOrganizationId: string;
16
+ }) => Promise<boolean>;
17
+ }
18
+ interface InitResult {
19
+ readonly environment: DeployEnvironment;
20
+ readonly userId: string;
21
+ readonly fullName: string;
22
+ readonly organization: IdentityOrganizationSummary;
23
+ readonly overwritten: boolean;
24
+ }
25
+ export declare class InitCancelledError extends Error {
26
+ constructor();
27
+ }
28
+ export declare class NotAuthenticatedError extends Error {
29
+ readonly environment: DeployEnvironment;
30
+ constructor(environment: DeployEnvironment);
31
+ }
32
+ export declare class NoOrganizationsError extends Error {
33
+ constructor(message: string);
34
+ }
35
+ export declare class OrganizationOverrideMismatchError extends Error {
36
+ readonly override: string;
37
+ readonly available: readonly string[];
38
+ constructor(options: {
39
+ readonly override: string;
40
+ readonly available: readonly string[];
41
+ });
42
+ }
43
+ export declare function init(options: InitOptions): Promise<InitResult>;
44
+ export {};
45
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,KAAK,2BAA2B,EAEjC,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAExC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,aAAa,EAAE,SAAS,2BAA2B,EAAE,KAClD,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE;QACnC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;QACvC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;QACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KACpC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACvB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,cAGC;CACF;AAGD,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IAEvC,YAAY,WAAW,EAAE,iBAAiB,EAIzC;CACF;AAGD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAGD,qBAAa,iCAAkC,SAAQ,KAAK;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAErC,YAAY,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAQxF;CACF;AAiFD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDpE"}
@@ -0,0 +1,125 @@
1
+ import { cancel, confirm, isCancel, select } from '@clack/prompts';
2
+ import { COGNITO_CONFIG, CognitoAuth, CredentialsStore, IdentityClient, JigxConfigStore, } from '../auth/index.js';
3
+ export class InitCancelledError extends Error {
4
+ constructor() {
5
+ super('Init cancelled.');
6
+ this.name = 'InitCancelledError';
7
+ }
8
+ }
9
+ export class NotAuthenticatedError extends Error {
10
+ environment;
11
+ constructor(environment) {
12
+ super(`Run jigx login --env ${environment} first.`);
13
+ this.name = 'NotAuthenticatedError';
14
+ this.environment = environment;
15
+ }
16
+ }
17
+ export class NoOrganizationsError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = 'NoOrganizationsError';
21
+ }
22
+ }
23
+ export class OrganizationOverrideMismatchError extends Error {
24
+ override;
25
+ available;
26
+ constructor(options) {
27
+ const { override, available } = options;
28
+ super(`--org "${override}" did not match any Organization for this account. Available: ${available.join(', ')}.`);
29
+ this.name = 'OrganizationOverrideMismatchError';
30
+ this.override = override;
31
+ this.available = available;
32
+ }
33
+ }
34
+ function ensureNotCancelled(value) {
35
+ if (isCancel(value)) {
36
+ cancel('Init cancelled.');
37
+ throw new InitCancelledError();
38
+ }
39
+ return value;
40
+ }
41
+ async function defaultPromptOrganization(organizations) {
42
+ const choice = ensureNotCancelled(await select({
43
+ message: 'Choose Organization',
44
+ options: organizations.map((org) => ({
45
+ value: org.organizationId,
46
+ label: `${org.organizationName} (${org.organizationId})`,
47
+ })),
48
+ }));
49
+ const found = organizations.find((org) => org.organizationId === choice);
50
+ if (!found)
51
+ throw new InitCancelledError();
52
+ return found;
53
+ }
54
+ async function defaultPromptOverwrite(options) {
55
+ const { environment, currentOrganizationId, nextOrganizationId } = options;
56
+ const answer = ensureNotCancelled(await confirm({
57
+ message: `jigx.json already binds env "${environment}" to ${currentOrganizationId}. Overwrite with ${nextOrganizationId}?`,
58
+ initialValue: false,
59
+ }));
60
+ return answer;
61
+ }
62
+ function pickOrganization(options) {
63
+ const { organizations, override, prompt } = options;
64
+ if (organizations.length === 0) {
65
+ throw new NoOrganizationsError('No Organizations found for this account on the selected environment. Verify in the manage UI that the User has Organization access.');
66
+ }
67
+ if (override) {
68
+ const found = organizations.find((org) => org.organizationId === override);
69
+ if (!found) {
70
+ throw new OrganizationOverrideMismatchError({
71
+ override,
72
+ available: organizations.map((o) => o.organizationId),
73
+ });
74
+ }
75
+ return Promise.resolve(found);
76
+ }
77
+ if (organizations.length === 1)
78
+ return Promise.resolve(organizations[0]);
79
+ return prompt(organizations);
80
+ }
81
+ export async function init(options) {
82
+ const { projectRoot, environment, organizationIdOverride, cognitoAuth = new CognitoAuth(), identityClient = new IdentityClient(), credentialsStore = new CredentialsStore(), configStore = new JigxConfigStore(), promptOrganization = defaultPromptOrganization, promptOverwrite = defaultPromptOverwrite, } = options;
83
+ const cached = await credentialsStore.readUserHome({
84
+ environment,
85
+ userPoolId: COGNITO_CONFIG[environment].userPoolId,
86
+ });
87
+ if (!cached)
88
+ throw new NotAuthenticatedError(environment);
89
+ const { idToken } = await cognitoAuth.refreshSession({
90
+ refreshToken: cached.refreshToken,
91
+ environment,
92
+ username: cached.userId,
93
+ });
94
+ const me = await identityClient.getMe({ environment, idToken });
95
+ const organization = await pickOrganization({
96
+ organizations: me.organizations,
97
+ override: organizationIdOverride,
98
+ prompt: promptOrganization,
99
+ });
100
+ const existing = await configStore.getEnvironment({ projectRoot, environment });
101
+ let overwritten = false;
102
+ if (existing && existing.organizationId !== organization.organizationId) {
103
+ const ok = await promptOverwrite({
104
+ environment,
105
+ currentOrganizationId: existing.organizationId,
106
+ nextOrganizationId: organization.organizationId,
107
+ });
108
+ if (!ok)
109
+ throw new InitCancelledError();
110
+ overwritten = true;
111
+ }
112
+ await configStore.setEnvironment({
113
+ projectRoot,
114
+ environment,
115
+ organizationId: organization.organizationId,
116
+ });
117
+ return {
118
+ environment,
119
+ userId: me.userId,
120
+ fullName: me.fullName,
121
+ organization,
122
+ overwritten,
123
+ };
124
+ }
125
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { login, LoginCancelledError } from './login.js';
2
+ export type { LoginOptions, LoginResult } from './login.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { login, LoginCancelledError } from './login.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { CognitoAuth, CredentialsStore } from '../auth/index.js';
2
+ import type { DeployEnvironment } from '../deployer/index.js';
3
+ export interface LoginOptions {
4
+ readonly environment: DeployEnvironment;
5
+ readonly cognitoAuth?: CognitoAuth;
6
+ readonly credentialsStore?: CredentialsStore;
7
+ readonly promptEmail?: () => Promise<string>;
8
+ readonly promptPassword?: () => Promise<string>;
9
+ }
10
+ export interface LoginResult {
11
+ readonly userId: string;
12
+ readonly fullName: string;
13
+ readonly environment: DeployEnvironment;
14
+ }
15
+ export declare class LoginCancelledError extends Error {
16
+ constructor();
17
+ }
18
+ export declare function login(options: LoginOptions): Promise<LoginResult>;
19
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/login/login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAS7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IAEvC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAE5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;CACxC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAGC;CACF;AA2CD,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA2BvE"}
@@ -0,0 +1,58 @@
1
+ import { cancel, isCancel, password, text } from '@clack/prompts';
2
+ import { COGNITO_CONFIG, CognitoAuth, CredentialsStore } from '../auth/index.js';
3
+ const REFRESH_TOKEN_TTL_MS = 15 * 24 * 60 * 60 * 1000;
4
+ export class LoginCancelledError extends Error {
5
+ constructor() {
6
+ super('Login cancelled.');
7
+ this.name = 'LoginCancelledError';
8
+ }
9
+ }
10
+ function ensureNotCancelled(value) {
11
+ if (isCancel(value)) {
12
+ cancel('Login cancelled.');
13
+ throw new LoginCancelledError();
14
+ }
15
+ return value;
16
+ }
17
+ async function defaultPromptEmail() {
18
+ return ensureNotCancelled(await text({
19
+ message: 'Email',
20
+ validate: (value) => {
21
+ if (!value || value.trim().length === 0)
22
+ return 'Email is required.';
23
+ if (!value.includes('@'))
24
+ return 'Enter a valid email address.';
25
+ return undefined;
26
+ },
27
+ }));
28
+ }
29
+ async function defaultPromptPassword() {
30
+ return ensureNotCancelled(await password({
31
+ message: 'Password',
32
+ validate: (value) => {
33
+ if (!value || value.length === 0)
34
+ return 'Password is required.';
35
+ return undefined;
36
+ },
37
+ }));
38
+ }
39
+ export async function login(options) {
40
+ const { environment, cognitoAuth = new CognitoAuth(), credentialsStore = new CredentialsStore(), promptEmail = defaultPromptEmail, promptPassword = defaultPromptPassword, } = options;
41
+ const email = await promptEmail();
42
+ const passwordValue = await promptPassword();
43
+ const session = await cognitoAuth.signIn({ email, password: passwordValue, environment });
44
+ const expiresAt = new Date(Date.now() + REFRESH_TOKEN_TTL_MS).toISOString();
45
+ await credentialsStore.writeUserHome({
46
+ environment,
47
+ userPoolId: COGNITO_CONFIG[environment].userPoolId,
48
+ refreshToken: session.refreshToken,
49
+ userId: session.userId,
50
+ expiresAt,
51
+ });
52
+ return {
53
+ userId: session.userId,
54
+ fullName: session.fullName,
55
+ environment,
56
+ };
57
+ }
58
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/login/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAQhF,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAkBrD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,cAAc;QACZ,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IAAA,CAClC;CACF;AAED,SAAS,kBAAkB,CAAI,KAAiB,EAAK;IACnD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC1B,MAAM,IAAI,mBAAmB,EAAE,CAAA;IACjC,CAAC;IACD,OAAO,KAAK,CAAA;AAAA,CACb;AAED,KAAK,UAAU,kBAAkB,GAAoB;IACnD,OAAO,kBAAkB,CACvB,MAAM,IAAI,CAAC;QACT,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,oBAAoB,CAAA;YACpE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,8BAA8B,CAAA;YAC/D,OAAO,SAAS,CAAA;QAAA,CACjB;KACF,CAAC,CACH,CAAA;AAAA,CACF;AAED,KAAK,UAAU,qBAAqB,GAAoB;IACtD,OAAO,kBAAkB,CACvB,MAAM,QAAQ,CAAC;QACb,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,uBAAuB,CAAA;YAChE,OAAO,SAAS,CAAA;QAAA,CACjB;KACF,CAAC,CACH,CAAA;AAAA,CACF;AAUD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAwB;IACvE,MAAM,EACJ,WAAW,EACX,WAAW,GAAG,IAAI,WAAW,EAAE,EAC/B,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,EACzC,WAAW,GAAG,kBAAkB,EAChC,cAAc,GAAG,qBAAqB,GACvC,GAAG,OAAO,CAAA;IAEX,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAA;IACjC,MAAM,aAAa,GAAG,MAAM,cAAc,EAAE,CAAA;IAC5C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAA;IAEzF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3E,MAAM,gBAAgB,CAAC,aAAa,CAAC;QACnC,WAAW;QACX,UAAU,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU;QAClD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS;KACV,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW;KACZ,CAAA;AAAA,CACF"}
@@ -0,0 +1,3 @@
1
+ export { logout, LogoutCancelledError, LogoutFlagConflictError } from './logout.js';
2
+ export type { LogoutEnvOutcome, LogoutOptions, LogoutResult, LogoutScope } from './logout.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACnF,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { logout, LogoutCancelledError, LogoutFlagConflictError } from './logout.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { CredentialsStore } from '../auth/index.js';
2
+ import type { DeployEnvironment } from '../deployer/index.js';
3
+ export type LogoutScope = DeployEnvironment | 'all';
4
+ export interface LogoutOptions {
5
+ readonly environment?: DeployEnvironment;
6
+ readonly all?: boolean;
7
+ readonly credentialsStore?: CredentialsStore;
8
+ readonly promptScope?: (active: readonly DeployEnvironment[]) => Promise<LogoutScope>;
9
+ }
10
+ export interface LogoutEnvOutcome {
11
+ readonly environment: DeployEnvironment;
12
+ readonly refreshTokenCleared: boolean;
13
+ }
14
+ export interface LogoutResult {
15
+ readonly scope: LogoutScope | 'none';
16
+ readonly outcomes: readonly LogoutEnvOutcome[];
17
+ readonly formatted: string;
18
+ }
19
+ export declare class LogoutCancelledError extends Error {
20
+ constructor();
21
+ }
22
+ export declare class LogoutFlagConflictError extends Error {
23
+ constructor();
24
+ }
25
+ export declare function logout(options: LogoutOptions): Promise<LogoutResult>;
26
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/logout/logout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,KAAK,CAAA;AAEnD,MAAM,WAAW,aAAa;IAE5B,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAExC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IAEtB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAK5C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;CACtF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IAEvC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAE9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,cAGC;CACF;AAGD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,cAGC;CACF;AA8FD,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B1E"}