@synoikia/core 0.15.0 → 0.17.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.
Files changed (88) hide show
  1. package/dist/app.d.ts +8 -0
  2. package/dist/app.js +7 -5
  3. package/dist/app.js.map +1 -1
  4. package/dist/approvals/grants.d.ts +4 -1
  5. package/dist/approvals/grants.js +4 -4
  6. package/dist/approvals/grants.js.map +1 -1
  7. package/dist/approvals/service.d.ts +28 -10
  8. package/dist/approvals/service.js +5 -2
  9. package/dist/approvals/service.js.map +1 -1
  10. package/dist/auth/external-cloudflare.js +5 -3
  11. package/dist/auth/external-cloudflare.js.map +1 -1
  12. package/dist/auth/external.d.ts +6 -2
  13. package/dist/auth/external.js.map +1 -1
  14. package/dist/auth/mcp-auth.js +1 -1
  15. package/dist/auth/mcp-auth.js.map +1 -1
  16. package/dist/auth/oidc.d.ts +4 -3
  17. package/dist/auth/oidc.js +18 -6
  18. package/dist/auth/oidc.js.map +1 -1
  19. package/dist/auth/sessions.d.ts +2 -2
  20. package/dist/auth/sessions.js +2 -2
  21. package/dist/auth/sessions.js.map +1 -1
  22. package/dist/auth/throttle.d.ts +2 -1
  23. package/dist/auth/throttle.js +16 -6
  24. package/dist/auth/throttle.js.map +1 -1
  25. package/dist/auth/users.d.ts +19 -1
  26. package/dist/auth/users.js +45 -11
  27. package/dist/auth/users.js.map +1 -1
  28. package/dist/catalog/role-levels.d.ts +1 -1
  29. package/dist/catalog/role-levels.js +5 -3
  30. package/dist/catalog/role-levels.js.map +1 -1
  31. package/dist/errors.d.ts +10 -2
  32. package/dist/errors.js +12 -0
  33. package/dist/errors.js.map +1 -1
  34. package/dist/gate/pipeline.d.ts +2 -2
  35. package/dist/gate/pipeline.js +53 -18
  36. package/dist/gate/pipeline.js.map +1 -1
  37. package/dist/http/admin/auth.js +64 -28
  38. package/dist/http/admin/auth.js.map +1 -1
  39. package/dist/http/admin/system.js +3 -3
  40. package/dist/http/admin/system.js.map +1 -1
  41. package/dist/http/common.d.ts +1 -1
  42. package/dist/http/mcp/approval-routes.js +2 -1
  43. package/dist/http/mcp/approval-routes.js.map +1 -1
  44. package/dist/http/mcp/endpoint.js +5 -5
  45. package/dist/http/mcp/endpoint.js.map +1 -1
  46. package/dist/http/mcp/oauth-routes.js +16 -7
  47. package/dist/http/mcp/oauth-routes.js.map +1 -1
  48. package/dist/instances/manager.d.ts +3 -0
  49. package/dist/instances/manager.js +30 -13
  50. package/dist/instances/manager.js.map +1 -1
  51. package/dist/notify/service.d.ts +32 -2
  52. package/dist/notify/service.js +40 -12
  53. package/dist/notify/service.js.map +1 -1
  54. package/dist/testing/compliance/config.d.ts +19 -0
  55. package/dist/testing/compliance/config.js +50 -0
  56. package/dist/testing/compliance/config.js.map +1 -0
  57. package/dist/testing/compliance/index.d.ts +5 -0
  58. package/dist/testing/compliance/index.js +3 -0
  59. package/dist/testing/compliance/index.js.map +1 -0
  60. package/dist/testing/compliance/profile.d.ts +62 -0
  61. package/dist/testing/compliance/profile.js +58 -0
  62. package/dist/testing/compliance/profile.js.map +1 -0
  63. package/dist/testing/compliance/run.d.ts +19 -0
  64. package/dist/testing/compliance/run.js +12 -0
  65. package/dist/testing/compliance/run.js.map +1 -0
  66. package/dist/testing/compliance/steps.d.ts +1 -0
  67. package/dist/testing/compliance/steps.js +465 -0
  68. package/dist/testing/compliance/steps.js.map +1 -0
  69. package/dist/testing/compliance/suite/access.feature +20 -0
  70. package/dist/testing/compliance/suite/catalog.feature +19 -0
  71. package/dist/testing/compliance/suite/connection-secrets.feature +10 -0
  72. package/dist/testing/compliance/suite/guides.feature +11 -0
  73. package/dist/testing/compliance/suite/lock-cases.feature +10 -0
  74. package/dist/testing/compliance/suite/locks.feature +21 -0
  75. package/dist/testing/compliance/suite/secrets.feature +24 -0
  76. package/dist/testing/compliance/verdict.d.ts +12 -0
  77. package/dist/testing/compliance/verdict.js +56 -0
  78. package/dist/testing/compliance/verdict.js.map +1 -0
  79. package/dist/testing/index.d.ts +2 -2
  80. package/dist/testing/index.js +1 -1
  81. package/dist/testing/index.js.map +1 -1
  82. package/dist/testing/repository.d.ts +2 -0
  83. package/dist/testing/repository.js +1 -1
  84. package/dist/testing/repository.js.map +1 -1
  85. package/package.json +29 -4
  86. package/dist/testing/contract.d.ts +0 -25
  87. package/dist/testing/contract.js +0 -81
  88. package/dist/testing/contract.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ @id:compliance-catalog
2
+ Feature: A valid catalog
3
+ Core lists, classifies and describes each operation of the plugin from the catalog that the plugin syncs.
4
+ An admin sets the access level of an operation by its key, and an agent finds it by its description.
5
+
6
+ Rule: The plugin starts in core and syncs a valid catalog
7
+
8
+ Scenario: The plugin starts and syncs a catalog with operations
9
+ When core starts the plugin
10
+ Then the catalog of the plugin has operations
11
+
12
+ Scenario: Each operation has a description
13
+ Given core synced the catalog of the plugin
14
+ Then each operation has a description
15
+
16
+ Scenario: Each lock of plugin.yaml names an operation of the catalog
17
+ Given core synced the catalog of the plugin
18
+ When core reads the locks of plugin.yaml
19
+ Then each lock names an operation of the catalog
@@ -0,0 +1,10 @@
1
+ @id:compliance-connection-secrets
2
+ Feature: Connection secrets
3
+ An admin types a connection secret once. Core keeps it encrypted, never shows it again and keeps it out of results.
4
+ Core knows a secret field only from the manifest of the plugin.
5
+
6
+ Rule: The manifest marks each secret field of the connection
7
+
8
+ Scenario: Each secret field is write-only, hidden and sensitive
9
+ When core reads the manifest of the plugin
10
+ Then each secret field is write-only, uses the secret widget and is a sensitive key
@@ -0,0 +1,11 @@
1
+ @id:compliance-guides
2
+ Feature: Best-practice guides
3
+ An operation can require that the agent reads its guide before the agent calls it.
4
+ The plugin gives core the guide of each such operation.
5
+
6
+ Rule: The plugin provides the guide of each operation that requires one
7
+
8
+ Scenario: The agent reads the guide of each operation that requires one
9
+ Given core synced the catalog of the plugin
10
+ When the agent reads the guide of each operation that requires one
11
+ Then each guide has content
@@ -0,0 +1,10 @@
1
+ @id:compliance-lock-cases
2
+ Feature: A case for each locked operation
3
+ Core runs a locked operation only after a human types its confirmation.
4
+ The suite proves this for each locked operation, so the profile needs a case for each one.
5
+
6
+ Rule: The profile has a case for each locked operation of the catalog
7
+
8
+ Scenario: Each locked operation of the synced catalog has a case in the profile
9
+ Given core synced the catalog of the plugin
10
+ Then the profile has a case for each locked operation
@@ -0,0 +1,21 @@
1
+ @id:compliance-locks
2
+ Feature: Locked operations
3
+ A locked operation can delete or move data that core cannot restore. Core runs it only after a human types its confirmation.
4
+ The plugin locks the operation, names its target in the approval and gives core the literal to type.
5
+
6
+ Rule: A locked operation runs only with its typed confirmation
7
+
8
+ Scenario: Each locked operation is off at the level of its group
9
+ Given the groups of the locked operations are at level write
10
+ When the agent makes the call of each lock case
11
+ Then core refuses each call, because the operation is off
12
+
13
+ Scenario: Each locked operation asks to type the literal of its case
14
+ Given each locked operation is at level ask
15
+ When the agent makes the call of each lock case, and the human types a wrong literal and then the right one
16
+ Then core refused the wrong literal and ran the call with the literal of its case
17
+
18
+ Scenario: The approval of each locked operation names its target
19
+ Given each locked operation is at level ask
20
+ When the agent makes the call of each lock case, and the human reads the approval
21
+ Then the approval shows the target of each lock case
@@ -0,0 +1,24 @@
1
+ @id:compliance-secrets
2
+ Feature: Secrets stay hidden
3
+ Core redacts each secret that it knows before a result reaches the agent, the approver or the audit log.
4
+ Core knows a secret only when the plugin declares it, so a secret that the plugin does not declare can leak.
5
+
6
+ Rule: No secret reaches the agent, the approver or the audit log
7
+
8
+ Scenario: The secret values of the fake do not reach the agent
9
+ Given the groups of the secret reads are at level read
10
+ When the agent makes each secret read
11
+ Then no secret value of the profile reaches the agent or the audit log
12
+
13
+ Scenario: No secret value reaches the approver of a write
14
+ Given the groups of the sample writes are at level ask
15
+ When the agent makes each sample write, and the human reads the approval
16
+ Then no secret value of the profile reaches the approval
17
+
18
+ Scenario: The connection test refuses wrong credentials
19
+ When an admin tests the connection with the wrong credentials of the profile
20
+ Then the connection test fails
21
+
22
+ Scenario: The manifest names the hosts that the plugin connects to
23
+ When core reads the manifest of the plugin
24
+ Then the manifest names at least one network host
@@ -0,0 +1,12 @@
1
+ import type { Reporter, TestModule, Vitest } from 'vitest/node';
2
+ /** The line a failed step of the suite gives for each broken rule. */
3
+ export declare const FAILED_RULE = "Failed rule: ";
4
+ /** Prints core's verdict once the run ends: fit for production only when every scenario of the suite passed. */
5
+ export declare class VerdictReporter implements Reporter {
6
+ private readonly pluginDir;
7
+ private readonly suiteDir;
8
+ private vitest?;
9
+ constructor(pluginDir: string, suiteDir: string);
10
+ onInit(vitest: Vitest): void;
11
+ onTestRunEnd(testModules: ReadonlyArray<TestModule>): void;
12
+ }
@@ -0,0 +1,56 @@
1
+ import { globSync, readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ /** The line a failed step of the suite gives for each broken rule. */
4
+ export const FAILED_RULE = 'Failed rule: ';
5
+ /** Prints core's verdict once the run ends: fit for production only when every scenario of the suite passed. */
6
+ export class VerdictReporter {
7
+ pluginDir;
8
+ suiteDir;
9
+ vitest;
10
+ constructor(pluginDir, suiteDir) {
11
+ this.pluginDir = pluginDir;
12
+ this.suiteDir = suiteDir;
13
+ }
14
+ onInit(vitest) {
15
+ this.vitest = vitest;
16
+ }
17
+ onTestRunEnd(testModules) {
18
+ const manifest = JSON.parse(readFileSync(path.join(this.pluginDir, 'manifest.json'), 'utf8'));
19
+ const suite = testModules.filter((m) => m.moduleId.startsWith(this.suiteDir + path.sep));
20
+ const failures = new Set();
21
+ // A filtered run is not a verdict: each suite file must run, and each of its scenarios.
22
+ const loaded = new Set(suite.map((m) => path.basename(m.moduleId)));
23
+ for (const file of globSync('*.feature', { cwd: this.suiteDir }))
24
+ if (!loaded.has(file))
25
+ failures.add(`the suite file ${file} did not run`);
26
+ let ran = 0;
27
+ for (const module of suite) {
28
+ for (const error of module.errors())
29
+ failures.add(`${path.basename(module.moduleId)}: ${error.message}`);
30
+ for (const test of module.children.allTests()) {
31
+ const result = test.result();
32
+ if (result.state === 'skipped' || result.state === 'pending') {
33
+ failures.add(`${test.name} did not run`);
34
+ continue;
35
+ }
36
+ ran++;
37
+ if (result.state !== 'failed')
38
+ continue;
39
+ const lines = (result.errors ?? []).flatMap((e) => (e.message ?? '').split('\n'));
40
+ const rules = lines.filter((l) => l.startsWith(FAILED_RULE)).map((l) => l.slice(FAILED_RULE.length));
41
+ for (const rule of rules.length ? rules : [`${test.name}: ${lines[0] ?? 'failed'}`])
42
+ failures.add(rule);
43
+ }
44
+ }
45
+ if (ran === 0 && failures.size === 0)
46
+ failures.add('the compliance suite did not run');
47
+ const name = `${manifest.name} ${manifest.version}`;
48
+ const log = (line) => (this.vitest ? this.vitest.logger.log(line) : console.log(line));
49
+ if (failures.size === 0)
50
+ return log(`\n${name} is fit for production.`);
51
+ log(`\n${name} is not fit for production.`);
52
+ for (const failure of failures)
53
+ log(`${FAILED_RULE}${failure}`);
54
+ }
55
+ }
56
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../../src/testing/compliance/verdict.ts"],"names":[],"mappings":"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"}
@@ -77,5 +77,5 @@ export { verifyPluginRepository } from './repository.js';
77
77
  export type { VerifiedPlugin, VerifyRepositoryOptions } from './repository.js';
78
78
  export { startFakeHttp } from './fake-http.js';
79
79
  export type { FakeHttp, FakeHttpOptions, FakeRequest, FakeResponse, FakeRoute } from './fake-http.js';
80
- export { checkPluginContract } from './contract.js';
81
- export type { ContractCall, PluginContractOptions } from './contract.js';
80
+ export { complianceSubject } from './compliance/run.js';
81
+ export type { ComplianceSubject } from './compliance/run.js';
@@ -185,5 +185,5 @@ function splitConnection(manifest, connection) {
185
185
  }
186
186
  export { verifyPluginRepository } from './repository.js';
187
187
  export { startFakeHttp } from './fake-http.js';
188
- export { checkPluginContract } from './contract.js';
188
+ export { complianceSubject } from './compliance/run.js';
189
189
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -14,3 +14,5 @@ export interface VerifiedPlugin {
14
14
  /** Checks a repository before publishing: installs the newest version of each plugin as core would
15
15
  * (pinned key, sha256, signature, archive checks) and starts each bundle. Throws on the first failure. */
16
16
  export declare function verifyPluginRepository(opts: VerifyRepositoryOptions): Promise<VerifiedPlugin[]>;
17
+ /** Starts an installed bundle as core does and asks it to shut down (no `init`, so no upstream). */
18
+ export declare function startsAndAnswers(dir: string, entry: string, label: string): Promise<void>;
@@ -58,7 +58,7 @@ export async function verifyPluginRepository(opts) {
58
58
  }
59
59
  }
60
60
  /** Starts an installed bundle as core does and asks it to shut down (no `init`, so no upstream). */
61
- async function startsAndAnswers(dir, entry, label) {
61
+ export async function startsAndAnswers(dir, entry, label) {
62
62
  const proc = new PluginProcess({ dir, entry, instanceId: 'repository-check', defaultTimeoutMs: 10_000 });
63
63
  const stderr = [];
64
64
  proc.on('log', (level, message) => level === 'error' && stderr.push(message));
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/testing/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/testing/repository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synoikia/core",
3
- "version": "0.15.0",
3
+ "version": "0.17.0",
4
4
  "description": "Core process: MCP endpoints, Admin API, plugin host, permission gate",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -16,6 +16,11 @@
16
16
  "types": "./dist/testing/index.d.ts",
17
17
  "import": "./dist/testing/index.js"
18
18
  },
19
+ "./testing/compliance": {
20
+ "synoikia-source": "./src/testing/compliance/index.ts",
21
+ "types": "./dist/testing/compliance/index.d.ts",
22
+ "import": "./dist/testing/compliance/index.js"
23
+ },
19
24
  "./package.json": "./package.json"
20
25
  },
21
26
  "dependencies": {
@@ -33,12 +38,31 @@
33
38
  "semver": "^7.8.5",
34
39
  "tar": "^7.5.22",
35
40
  "zod": "^4.6.5",
36
- "@synoikia/plugin-sdk": "^0.5.0"
41
+ "@synoikia/plugin-sdk": "^0.6.0"
37
42
  },
38
43
  "devDependencies": {
39
44
  "@types/better-sqlite3": "^9.6.0",
40
45
  "@types/semver": "^7.8.0",
41
- "drizzle-kit": "^0.31.11"
46
+ "drizzle-kit": "^0.31.11",
47
+ "quickpickle": "1.11.2",
48
+ "vitest": "^5.0.2",
49
+ "yaml": "^2.9.1"
50
+ },
51
+ "peerDependencies": {
52
+ "quickpickle": "^1.11.2",
53
+ "vitest": "^5.0.0",
54
+ "yaml": "^2.9.1"
55
+ },
56
+ "peerDependenciesMeta": {
57
+ "quickpickle": {
58
+ "optional": true
59
+ },
60
+ "vitest": {
61
+ "optional": true
62
+ },
63
+ "yaml": {
64
+ "optional": true
65
+ }
42
66
  },
43
67
  "files": [
44
68
  "dist",
@@ -48,10 +72,11 @@
48
72
  "access": "public"
49
73
  },
50
74
  "scripts": {
51
- "build": "tsc -p tsconfig.build.json",
75
+ "build": "tsc -p tsconfig.build.json && node -e \"require('node:fs').cpSync('src/testing/compliance/suite','dist/testing/compliance/suite',{recursive:true})\"",
52
76
  "typecheck": "tsc -p tsconfig.json --noEmit",
53
77
  "test": "vitest run",
54
78
  "test:coverage": "vitest run --coverage",
79
+ "test:features": "vitest run --project features",
55
80
  "db:generate": "drizzle-kit generate"
56
81
  }
57
82
  }
@@ -1,25 +0,0 @@
1
- import type { PluginHarness } from './index.js';
2
- /** The end-to-end checks every plugin repeats (read, refused write, locked with literal, secrets kept
3
- * out, audit): `expect(await checkPluginContract(h, …)).toEqual([])`. Leaves those groups at Read. */
4
- export interface ContractCall {
5
- /** Sandbox code that makes the call and returns its result, e.g. `return await acme.call('x');`. */
6
- code: string;
7
- /** The catalog key the call resolves to. */
8
- key: string;
9
- }
10
- export interface PluginContractOptions {
11
- /** A read, run with its group at Read. */
12
- read: ContractCall;
13
- /** A write, refused while its group is at Read. */
14
- write: ContractCall;
15
- /** A locked operation; approved by typing `confirm`, after checking a wrong literal is refused. */
16
- locked?: ContractCall & {
17
- confirm: string;
18
- };
19
- /** A read whose upstream response holds these secret values; none may reach the sandbox. */
20
- secrets?: {
21
- code: string;
22
- values: string[];
23
- };
24
- }
25
- export declare function checkPluginContract(h: PluginHarness, opts: PluginContractOptions): Promise<string[]>;
@@ -1,81 +0,0 @@
1
- const groupOf = (h, key) => h.operation(key).pluginGroup;
2
- export async function checkPluginContract(h, opts) {
3
- const issues = [];
4
- const setLevel = (key, level) => h.setGroupLevel(groupOf(h, key), level);
5
- if (h.instance()?.lastSyncStatus !== 'ok')
6
- issues.push(`sync: status is ${h.instance()?.lastSyncStatus}`);
7
- if (h.operations().length === 0)
8
- issues.push('sync: the catalog is empty');
9
- for (const [name, call] of Object.entries({ read: opts.read, write: opts.write, locked: opts.locked })) {
10
- if (!call)
11
- continue;
12
- try {
13
- const op = h.operation(call.key);
14
- if (name === 'read' && op.classification !== 'read')
15
- issues.push(`${call.key}: expected a read`);
16
- if (name !== 'read' && op.classification !== 'write')
17
- issues.push(`${call.key}: expected a write`);
18
- if (name === 'locked' && !op.locked)
19
- issues.push(`${call.key}: expected locked`);
20
- }
21
- catch (err) {
22
- issues.push(`${name}: ${err.message}`);
23
- return issues;
24
- }
25
- }
26
- setLevel(opts.read.key, 'read');
27
- const read = await h.execute(opts.read.code);
28
- if (!read.ok)
29
- issues.push(`read ${opts.read.key}: failed at Read (${JSON.stringify(read.error)})`);
30
- setLevel(opts.write.key, 'read');
31
- const write = await h.execute(opts.write.code);
32
- if (write.ok || write.error?.code !== 'OPERATION_DISABLED')
33
- issues.push(`write ${opts.write.key}: expected OPERATION_DISABLED at Read, got ${JSON.stringify(write.ok ? 'ok' : write.error)}`);
34
- if (opts.locked) {
35
- const locked = opts.locked;
36
- // A locked operation is off until enabled on its own; Ask is the level that allows it with a human.
37
- h.setOperationLevel(locked.key, 'ask');
38
- const without = await h.execute(locked.code);
39
- if (without.ok)
40
- issues.push(`locked ${locked.key}: ran without an approval`);
41
- const before = h.approvalErrors.length;
42
- let wrongRefused = false;
43
- let literal = null;
44
- const approved = await h.execute(locked.code, {
45
- onApproval: (a) => {
46
- literal = a.pending.confirmLiteral;
47
- try {
48
- a.approve(`${locked.confirm} (wrong)`);
49
- }
50
- catch {
51
- wrongRefused = true;
52
- a.approve(locked.confirm);
53
- }
54
- },
55
- });
56
- if (!wrongRefused)
57
- issues.push(`locked ${locked.key}: a wrong confirmation literal was accepted`);
58
- if (literal !== locked.confirm)
59
- issues.push(`locked ${locked.key}: confirmation literal is ${JSON.stringify(literal)}, expected ${JSON.stringify(locked.confirm)}`);
60
- if (!approved.ok)
61
- issues.push(`locked ${locked.key}: failed after approval (${JSON.stringify(approved.error)})`);
62
- if (h.approvalErrors.length > before)
63
- issues.push(`locked ${locked.key}: approval errors ${h.approvalErrors.slice(before).map(String).join('; ')}`);
64
- h.setOperationLevel(locked.key, null);
65
- }
66
- if (opts.secrets) {
67
- const result = await h.execute(opts.secrets.code);
68
- const text = JSON.stringify(result);
69
- if (!result.ok)
70
- issues.push(`secrets: the call failed (${JSON.stringify(result.error)})`);
71
- for (const value of opts.secrets.values)
72
- if (text.includes(value))
73
- issues.push(`secrets: ${JSON.stringify(value.slice(0, 4))}… reached the sandbox`);
74
- }
75
- for (const call of [opts.read, opts.write, opts.locked]) {
76
- if (call && h.audit({ operationKey: call.key }).length === 0)
77
- issues.push(`audit: no entry for ${call.key}`);
78
- }
79
- return issues;
80
- }
81
- //# sourceMappingURL=contract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/testing/contract.ts"],"names":[],"mappings":"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"}