@ni-kismet/sl-webapp-nipkg 0.2.2 → 0.3.0

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/dist/cli.test.js CHANGED
@@ -7,8 +7,32 @@ const builderState = {
7
7
  lastOptions: undefined,
8
8
  buildCalls: 0,
9
9
  };
10
+ const deployerState = {
11
+ lastConfig: undefined,
12
+ lastOptions: undefined,
13
+ deployCalls: 0,
14
+ deleteWebAppCalls: 0,
15
+ };
16
+ vi.mock('./deployer.js', () => ({
17
+ // eslint-disable-next-line prefer-arrow-callback, func-names
18
+ SystemLinkWebAppDeployer: vi.fn(function (config, options) {
19
+ deployerState.lastConfig = config;
20
+ deployerState.lastOptions = options;
21
+ return {
22
+ deploy: async () => {
23
+ deployerState.deployCalls += 1;
24
+ await Promise.resolve();
25
+ },
26
+ deleteWebApp: async () => {
27
+ deployerState.deleteWebAppCalls += 1;
28
+ await Promise.resolve();
29
+ },
30
+ };
31
+ }),
32
+ }));
10
33
  vi.mock('./builder.js', () => ({
11
- SystemLinkNipkgBuilder: vi.fn().mockImplementation((config, options) => {
34
+ // eslint-disable-next-line prefer-arrow-callback, func-names
35
+ SystemLinkNipkgBuilder: vi.fn(function (config, options) {
12
36
  builderState.lastConfig = config;
13
37
  builderState.lastOptions = options;
14
38
  return {
@@ -52,6 +76,8 @@ const CLI_NODE = 'node';
52
76
  const CLI_SCRIPT = 'cli';
53
77
  const CLI_BUILD = 'build';
54
78
  const CLI_INIT = 'init';
79
+ const CLI_DEPLOY = 'deploy';
80
+ const CLI_DELETE = 'delete';
55
81
  const packageJsonStub = {
56
82
  version: '0.0.0',
57
83
  name: 'cli-test-app',
@@ -94,6 +120,10 @@ describe('CLI', () => {
94
120
  builderState.lastConfig = undefined;
95
121
  builderState.lastOptions = undefined;
96
122
  builderState.buildCalls = 0;
123
+ deployerState.lastConfig = undefined;
124
+ deployerState.lastOptions = undefined;
125
+ deployerState.deployCalls = 0;
126
+ deployerState.deleteWebAppCalls = 0;
97
127
  exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => undefined);
98
128
  // Default: package.json exists, nipkg.config.json does not
99
129
  fsMock.existsSync.mockReturnValue(false);
@@ -305,5 +335,279 @@ describe('CLI', () => {
305
335
  });
306
336
  });
307
337
  });
338
+ describe('deploy command', () => {
339
+ describe('option parsing', () => {
340
+ it('passes all deploy options to SystemLinkWebAppDeployer', async () => {
341
+ process.argv = [
342
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
343
+ '--nipkg', '/path/to/app.nipkg',
344
+ '--host', 'https://systemlink.example.com',
345
+ '--api-key', 'test-api-key',
346
+ '--name', 'My WebApp',
347
+ '--version', '1.2.3',
348
+ '--workspace-id', 'ws-uuid',
349
+ '--policy-ids', 'pol-1,pol-2',
350
+ '--properties', '{"version":"1.2.3","description":"My app"}',
351
+ '--timeout', '5000',
352
+ '--verbose',
353
+ ];
354
+ await runCli();
355
+ expect(exitSpy).not.toHaveBeenCalled();
356
+ expect(deployerState.deployCalls).toBe(1);
357
+ expect(deployerState.lastOptions).toMatchObject({
358
+ nipkg: '/path/to/app.nipkg',
359
+ host: 'https://systemlink.example.com',
360
+ apiKey: 'test-api-key',
361
+ name: 'My WebApp',
362
+ version: '1.2.3',
363
+ workspaceId: 'ws-uuid',
364
+ policyIds: 'pol-1,pol-2',
365
+ properties: { version: '1.2.3', description: 'My app' },
366
+ timeout: 5000,
367
+ verbose: true,
368
+ update: false,
369
+ latest: false,
370
+ skipCleanup: false,
371
+ });
372
+ });
373
+ it('defaults timeout to 30000 when not specified', async () => {
374
+ process.argv = [
375
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
376
+ '--nipkg', '/path/to/app.nipkg',
377
+ ];
378
+ await runCli();
379
+ expect(exitSpy).not.toHaveBeenCalled();
380
+ expect(deployerState.lastOptions?.timeout).toBe(30000);
381
+ });
382
+ it('forwards --update and --app-id for update mode', async () => {
383
+ process.argv = [
384
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
385
+ '--nipkg', '/path/to/app.nipkg',
386
+ '--update',
387
+ '--app-id', 'existing-app-uuid',
388
+ ];
389
+ await runCli();
390
+ expect(exitSpy).not.toHaveBeenCalled();
391
+ expect(deployerState.deployCalls).toBe(1);
392
+ expect(deployerState.lastOptions).toMatchObject({
393
+ update: true,
394
+ appId: 'existing-app-uuid',
395
+ });
396
+ });
397
+ it('forwards --latest flag as boolean', async () => {
398
+ process.argv = [
399
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
400
+ '--nipkg', '/path/to/app.nipkg',
401
+ '--latest',
402
+ ];
403
+ await runCli();
404
+ expect(exitSpy).not.toHaveBeenCalled();
405
+ expect(deployerState.lastOptions?.latest).toBe(true);
406
+ });
407
+ it('forwards --build-suffix and --skip-cleanup', async () => {
408
+ process.argv = [
409
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
410
+ '--build',
411
+ '--build-suffix', 'ci-42',
412
+ '--skip-cleanup',
413
+ ];
414
+ await runCli();
415
+ expect(exitSpy).not.toHaveBeenCalled();
416
+ expect(deployerState.lastOptions).toMatchObject({
417
+ build: true,
418
+ buildSuffix: 'ci-42',
419
+ skipCleanup: true,
420
+ });
421
+ });
422
+ });
423
+ describe('config loading', () => {
424
+ it('loads nipkg.config.json and passes it to the deployer', async () => {
425
+ mockFileExistence(PACKAGE_JSON, NIPKG_CONFIG_JSON);
426
+ mockReadJson({
427
+ [NIPKG_CONFIG_JSON]: { name: 'config-app', deployment: { host: 'https://config.host' } },
428
+ [PACKAGE_JSON]: packageJsonStub,
429
+ });
430
+ process.argv = [
431
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
432
+ '--nipkg', '/path/to/app.nipkg',
433
+ ];
434
+ await runCli();
435
+ expect(exitSpy).not.toHaveBeenCalled();
436
+ expect(deployerState.lastConfig).toEqual({
437
+ name: 'config-app',
438
+ deployment: { host: 'https://config.host' },
439
+ });
440
+ });
441
+ it('uses empty config when nipkg.config.json is absent', async () => {
442
+ // Default mocks: only package.json exists
443
+ process.argv = [
444
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
445
+ '--nipkg', '/path/to/app.nipkg',
446
+ ];
447
+ await runCli();
448
+ expect(exitSpy).not.toHaveBeenCalled();
449
+ expect(deployerState.lastConfig).toEqual({});
450
+ });
451
+ });
452
+ describe('error handling', () => {
453
+ it('exits with 1 when --properties is invalid JSON', async () => {
454
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
455
+ process.argv = [
456
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
457
+ '--nipkg', '/path/to/app.nipkg',
458
+ '--properties', 'not-valid-json',
459
+ ];
460
+ await runCli();
461
+ expect(exitSpy).toHaveBeenCalledWith(1);
462
+ expect(errorSpy).toHaveBeenCalledWith(expect.any(String), expect.stringContaining('Invalid properties JSON'));
463
+ expect(deployerState.deployCalls).toBe(0);
464
+ });
465
+ it('exits with 1 when --timeout is not a number', async () => {
466
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
467
+ process.argv = [
468
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
469
+ '--nipkg', '/path/to/app.nipkg',
470
+ '--timeout', 'abc',
471
+ ];
472
+ await runCli();
473
+ expect(exitSpy).toHaveBeenCalledWith(1);
474
+ expect(errorSpy).toHaveBeenCalledWith(expect.any(String), expect.stringContaining('Invalid timeout'));
475
+ expect(deployerState.deployCalls).toBe(0);
476
+ });
477
+ it('exits with 1 when a custom --config path does not exist', async () => {
478
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
479
+ process.argv = [
480
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
481
+ '--nipkg', '/path/to/app.nipkg',
482
+ '--config', MISSING_CONFIG_JSON,
483
+ ];
484
+ await runCli();
485
+ expect(exitSpy).toHaveBeenCalledWith(1);
486
+ expect(errorSpy).toHaveBeenCalled();
487
+ expect(deployerState.deployCalls).toBe(0);
488
+ });
489
+ it('exits with 1 when the deployer throws', async () => {
490
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
491
+ const { SystemLinkWebAppDeployer } = await import('./deployer.js');
492
+ // eslint-disable-next-line prefer-arrow-callback, func-names
493
+ vi.mocked(SystemLinkWebAppDeployer).mockImplementationOnce(function () {
494
+ return {
495
+ deploy: () => {
496
+ throw new Error('network error');
497
+ },
498
+ deleteWebApp: async () => {
499
+ await Promise.resolve();
500
+ },
501
+ };
502
+ });
503
+ process.argv = [
504
+ CLI_NODE, CLI_SCRIPT, CLI_DEPLOY,
505
+ '--nipkg', '/path/to/app.nipkg',
506
+ ];
507
+ await runCli();
508
+ expect(exitSpy).toHaveBeenCalledWith(1);
509
+ expect(errorSpy).toHaveBeenCalledWith(expect.any(String), expect.stringContaining('network error'));
510
+ });
511
+ });
512
+ });
513
+ describe('delete command', () => {
514
+ describe('option parsing', () => {
515
+ it('passes app-id, host, api-key, timeout, and verbose to the deployer', async () => {
516
+ process.argv = [
517
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
518
+ '--app-id', 'app-uuid-123',
519
+ '--host', 'https://systemlink.example.com',
520
+ '--api-key', 'delete-api-key',
521
+ '--timeout', '10000',
522
+ '--verbose',
523
+ ];
524
+ await runCli();
525
+ expect(exitSpy).not.toHaveBeenCalled();
526
+ expect(deployerState.deleteWebAppCalls).toBe(1);
527
+ expect(deployerState.lastOptions).toEqual({
528
+ appId: 'app-uuid-123',
529
+ host: 'https://systemlink.example.com',
530
+ apiKey: 'delete-api-key',
531
+ verbose: true,
532
+ timeout: 10000,
533
+ });
534
+ });
535
+ it('defaults timeout to 30000 when not specified', async () => {
536
+ process.argv = [
537
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
538
+ '--app-id', 'app-uuid-123',
539
+ ];
540
+ await runCli();
541
+ expect(exitSpy).not.toHaveBeenCalled();
542
+ expect(deployerState.lastOptions?.timeout).toBe(30000);
543
+ });
544
+ });
545
+ describe('config loading', () => {
546
+ it('loads nipkg.config.json and passes it to the deployer', async () => {
547
+ mockFileExistence(PACKAGE_JSON, NIPKG_CONFIG_JSON);
548
+ mockReadJson({
549
+ [NIPKG_CONFIG_JSON]: { deployment: { host: 'https://cfg.host' } },
550
+ [PACKAGE_JSON]: packageJsonStub,
551
+ });
552
+ process.argv = [
553
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
554
+ '--app-id', 'app-uuid-123',
555
+ ];
556
+ await runCli();
557
+ expect(exitSpy).not.toHaveBeenCalled();
558
+ expect(deployerState.lastConfig).toEqual({
559
+ deployment: { host: 'https://cfg.host' },
560
+ });
561
+ });
562
+ });
563
+ describe('error handling', () => {
564
+ it('exits with 1 when --timeout is not a number', async () => {
565
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
566
+ process.argv = [
567
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
568
+ '--app-id', 'app-uuid-123',
569
+ '--timeout', 'xyz',
570
+ ];
571
+ await runCli();
572
+ expect(exitSpy).toHaveBeenCalledWith(1);
573
+ expect(errorSpy).toHaveBeenCalledWith(expect.any(String), expect.stringContaining('Invalid timeout'));
574
+ expect(deployerState.deleteWebAppCalls).toBe(0);
575
+ });
576
+ it('exits with 1 when a custom --config path does not exist', async () => {
577
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
578
+ process.argv = [
579
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
580
+ '--app-id', 'app-uuid-123',
581
+ '--config', MISSING_CONFIG_JSON,
582
+ ];
583
+ await runCli();
584
+ expect(exitSpy).toHaveBeenCalledWith(1);
585
+ expect(errorSpy).toHaveBeenCalled();
586
+ expect(deployerState.deleteWebAppCalls).toBe(0);
587
+ });
588
+ it('exits with 1 when the deployer throws', async () => {
589
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
590
+ const { SystemLinkWebAppDeployer } = await import('./deployer.js');
591
+ // eslint-disable-next-line prefer-arrow-callback, func-names
592
+ vi.mocked(SystemLinkWebAppDeployer).mockImplementationOnce(function () {
593
+ return {
594
+ deploy: async () => {
595
+ await Promise.resolve();
596
+ },
597
+ deleteWebApp: () => {
598
+ throw new Error('delete failed');
599
+ },
600
+ };
601
+ });
602
+ process.argv = [
603
+ CLI_NODE, CLI_SCRIPT, CLI_DELETE,
604
+ '--app-id', 'app-uuid-123',
605
+ ];
606
+ await runCli();
607
+ expect(exitSpy).toHaveBeenCalledWith(1);
608
+ expect(errorSpy).toHaveBeenCalledWith(expect.any(String), expect.stringContaining('delete failed'));
609
+ });
610
+ });
611
+ });
308
612
  });
309
613
  //# sourceMappingURL=cli.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface StoredCredential {
2
+ apiKey: string;
3
+ savedAt: string;
4
+ }
5
+ /** Normalize a host URL: trim whitespace and strip trailing slashes. */
6
+ export declare function normalizeHost(host: string): string;
7
+ /** Return the stored credential for a given (normalized) host, or undefined if none. */
8
+ export declare function getCredential(host: string): Promise<StoredCredential | undefined>;
9
+ /** Persist an API key for a given (normalized) host. */
10
+ export declare function setCredential(host: string, apiKey: string): Promise<void>;
11
+ /**
12
+ * Remove the stored credential for a given (normalized) host.
13
+ * @returns `true` if an entry existed and was removed, `false` if nothing was stored.
14
+ */
15
+ export declare function deleteCredential(host: string): Promise<boolean>;
16
+ /** Return all stored hosts (normalized). */
17
+ export declare function listCredentials(): Promise<string[]>;
18
+ //# sourceMappingURL=credentialStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialStore.d.ts","sourceRoot":"","sources":["../src/credentialStore.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAiBD,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AA2BD,wFAAwF;AACxF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAGvF;AAED,wDAAwD;AACxD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrE;AAED,4CAA4C;AAC5C,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGzD"}
@@ -0,0 +1,68 @@
1
+ import fs from 'fs-extra';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import chalk from 'chalk';
5
+ const CREDENTIALS_SUBDIR = '.sl-webapp-nipkg';
6
+ const CREDENTIALS_FILENAME = 'credentials.json';
7
+ function getCredentialsDir() {
8
+ return process.env.SL_CREDENTIALS_DIR ?? path.join(os.homedir(), CREDENTIALS_SUBDIR);
9
+ }
10
+ function getCredentialsFile() {
11
+ return path.join(getCredentialsDir(), CREDENTIALS_FILENAME);
12
+ }
13
+ /** Normalize a host URL: trim whitespace and strip trailing slashes. */
14
+ export function normalizeHost(host) {
15
+ return host.trim().replace(/\/+$/, '');
16
+ }
17
+ async function loadStore() {
18
+ const credentialsFile = getCredentialsFile();
19
+ try {
20
+ return await fs.readJson(credentialsFile);
21
+ }
22
+ catch (error) {
23
+ if (error.code === 'ENOENT') {
24
+ return {};
25
+ }
26
+ throw new Error(`Failed to read credentials file (${credentialsFile}): ${error.message}`);
27
+ }
28
+ }
29
+ async function saveStore(store) {
30
+ const credentialsFile = getCredentialsFile();
31
+ await fs.outputJson(credentialsFile, store, { spaces: 2 });
32
+ // Restrict permissions to owner-only (effective on Unix; no-op on Windows)
33
+ await fs.chmod(credentialsFile, 0o600);
34
+ if (process.platform === 'win32') {
35
+ // eslint-disable-next-line no-console
36
+ console.warn(chalk.yellow(`⚠️ On Windows, credential file permissions cannot be restricted.\n Ensure only trusted users have access to: ${credentialsFile}`));
37
+ }
38
+ }
39
+ /** Return the stored credential for a given (normalized) host, or undefined if none. */
40
+ export async function getCredential(host) {
41
+ const store = await loadStore();
42
+ return store[host];
43
+ }
44
+ /** Persist an API key for a given (normalized) host. */
45
+ export async function setCredential(host, apiKey) {
46
+ const store = await loadStore();
47
+ store[host] = { apiKey, savedAt: new Date().toISOString() };
48
+ await saveStore(store);
49
+ }
50
+ /**
51
+ * Remove the stored credential for a given (normalized) host.
52
+ * @returns `true` if an entry existed and was removed, `false` if nothing was stored.
53
+ */
54
+ export async function deleteCredential(host) {
55
+ const store = await loadStore();
56
+ if (!(host in store)) {
57
+ return false;
58
+ }
59
+ const updated = Object.fromEntries(Object.entries(store).filter(([key]) => key !== host));
60
+ await saveStore(updated);
61
+ return true;
62
+ }
63
+ /** Return all stored hosts (normalized). */
64
+ export async function listCredentials() {
65
+ const store = await loadStore();
66
+ return Object.keys(store);
67
+ }
68
+ //# sourceMappingURL=credentialStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialStore.js","sourceRoot":"","sources":["../src/credentialStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=credentialStore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialStore.test.d.ts","sourceRoot":"","sources":["../src/credentialStore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import fs from 'fs-extra';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { getCredential, setCredential, deleteCredential, listCredentials, normalizeHost } from './credentialStore.js';
6
+ describe('normalizeHost', () => {
7
+ it('trims whitespace', () => {
8
+ expect(normalizeHost(' https://host.example.com ')).toBe('https://host.example.com');
9
+ });
10
+ it('strips trailing slashes', () => {
11
+ expect(normalizeHost('https://host.example.com///')).toBe('https://host.example.com');
12
+ });
13
+ it('leaves a clean URL unchanged', () => {
14
+ expect(normalizeHost('https://host.example.com')).toBe('https://host.example.com');
15
+ });
16
+ });
17
+ describe('credentialStore', () => {
18
+ let tmpDir;
19
+ let credentialsFile;
20
+ const hostA = 'https://host-a.example.com';
21
+ const hostB = 'https://host-b.example.com';
22
+ beforeEach(async () => {
23
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'sl-cred-test-'));
24
+ vi.stubEnv('SL_CREDENTIALS_DIR', tmpDir);
25
+ credentialsFile = path.join(tmpDir, 'credentials.json');
26
+ });
27
+ afterEach(async () => {
28
+ vi.unstubAllEnvs();
29
+ await fs.remove(tmpDir);
30
+ vi.restoreAllMocks();
31
+ });
32
+ it('returns undefined for an unknown host', async () => {
33
+ expect(await getCredential(hostA)).toBeUndefined();
34
+ });
35
+ it('stores and retrieves a credential', async () => {
36
+ await setCredential(hostA, 'my-api-key');
37
+ const stored = await getCredential(hostA);
38
+ expect(stored?.apiKey).toBe('my-api-key');
39
+ expect(stored?.savedAt).toBeTruthy();
40
+ });
41
+ it('overwrites a credential for the same host', async () => {
42
+ await setCredential(hostA, 'old-key');
43
+ await setCredential(hostA, 'new-key');
44
+ const stored = await getCredential(hostA);
45
+ expect(stored?.apiKey).toBe('new-key');
46
+ });
47
+ it('stores multiple hosts independently', async () => {
48
+ await setCredential(hostA, 'key-a');
49
+ await setCredential(hostB, 'key-b');
50
+ expect((await getCredential(hostA))?.apiKey).toBe('key-a');
51
+ expect((await getCredential(hostB))?.apiKey).toBe('key-b');
52
+ });
53
+ it('deletes a credential and returns true', async () => {
54
+ await setCredential(hostA, 'key-a');
55
+ const result = await deleteCredential(hostA);
56
+ expect(result).toBe(true);
57
+ expect(await getCredential(hostA)).toBeUndefined();
58
+ });
59
+ it('returns false when deleting a credential that does not exist', async () => {
60
+ const result = await deleteCredential(hostA);
61
+ expect(result).toBe(false);
62
+ });
63
+ it('deleting one host does not affect others', async () => {
64
+ await setCredential(hostA, 'key-a');
65
+ await setCredential(hostB, 'key-b');
66
+ await deleteCredential(hostA);
67
+ expect(await getCredential(hostA)).toBeUndefined();
68
+ expect((await getCredential(hostB))?.apiKey).toBe('key-b');
69
+ });
70
+ it('listCredentials returns all stored hosts', async () => {
71
+ await setCredential(hostA, 'key-a');
72
+ await setCredential(hostB, 'key-b');
73
+ const hosts = await listCredentials();
74
+ expect(hosts).toContain(hostA);
75
+ expect(hosts).toContain(hostB);
76
+ });
77
+ it('listCredentials returns empty array when store is empty', async () => {
78
+ expect(await listCredentials()).toEqual([]);
79
+ });
80
+ it('sets file permissions to 0o600 after writing', async () => {
81
+ const chmodSpy = vi.spyOn(fs, 'chmod');
82
+ await setCredential(hostA, 'key-a');
83
+ expect(chmodSpy).toHaveBeenCalledWith(credentialsFile, 0o600);
84
+ });
85
+ });
86
+ //# sourceMappingURL=credentialStore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialStore.test.js","sourceRoot":"","sources":["../src/credentialStore.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { DeployOptions, NipkgConfig } from './types.js';
2
+ export declare class SystemLinkWebAppDeployer {
3
+ private readonly fullConfig;
4
+ private readonly config;
5
+ private readonly options;
6
+ constructor(fullConfig?: NipkgConfig, options?: DeployOptions);
7
+ /**
8
+ * Deploy a nipkg file to SystemLink.
9
+ * Creates a new WebApp if update=false, or updates existing if update=true.
10
+ * Throws on any failure — callers are responsible for error handling.
11
+ */
12
+ deploy(): Promise<void>;
13
+ /**
14
+ * Delete a WebApp by ID.
15
+ * Throws on any failure — callers are responsible for error handling.
16
+ */
17
+ deleteWebApp(): Promise<void>;
18
+ private createApiClient;
19
+ /**
20
+ * Create a new WebApp in SystemLink. Returns the new WebApp ID.
21
+ */
22
+ private postWebApp;
23
+ /**
24
+ * Update WebApp metadata (name, workspace, policyIds, properties).
25
+ * Preserves existing values for any field not explicitly provided.
26
+ */
27
+ private putWebAppMetadata;
28
+ /**
29
+ * Upload nipkg content to a WebApp via streaming.
30
+ */
31
+ private putWebAppContent;
32
+ private resolveHost;
33
+ private resolveApiKey;
34
+ private resolveName;
35
+ private resolveWorkspaceId;
36
+ private resolvePolicyIds;
37
+ /**
38
+ * Resolve properties, auto-injecting `version` from package.json if absent.
39
+ */
40
+ private resolveProperties;
41
+ private resolveVersion;
42
+ private resolveTimeout;
43
+ private buildNipkg;
44
+ private discoverNipkgPath;
45
+ private pickNipkgFromDir;
46
+ }
47
+ //# sourceMappingURL=deployer.d.ts.map