@api-client/core 0.12.0 → 0.12.2

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 (187) hide show
  1. package/bin/plugins/sinon/assert.ts +29 -0
  2. package/bin/test.ts +2 -0
  3. package/build/src/amf/AmfShapeGenerator.js +3 -3
  4. package/build/src/amf/AmfShapeGenerator.js.map +1 -1
  5. package/build/src/amf/DataValueGenerator.d.ts.map +1 -1
  6. package/build/src/amf/DataValueGenerator.js +3 -2
  7. package/build/src/amf/DataValueGenerator.js.map +1 -1
  8. package/build/src/amf/models/AmfDataNode.d.ts.map +1 -1
  9. package/build/src/amf/models/AmfDataNode.js +2 -2
  10. package/build/src/amf/models/AmfDataNode.js.map +1 -1
  11. package/build/src/browser.d.ts +4 -0
  12. package/build/src/browser.d.ts.map +1 -1
  13. package/build/src/browser.js +3 -0
  14. package/build/src/browser.js.map +1 -1
  15. package/build/src/index.d.ts +4 -0
  16. package/build/src/index.d.ts.map +1 -1
  17. package/build/src/index.js +3 -0
  18. package/build/src/index.js.map +1 -1
  19. package/build/src/lib/uuid.d.ts +1 -1
  20. package/build/src/lib/uuid.js +1 -1
  21. package/build/src/lib/uuid.js.map +1 -1
  22. package/build/src/mocking/lib/History.js +8 -8
  23. package/build/src/mocking/lib/History.js.map +1 -1
  24. package/build/src/mocking/lib/HostRules.js +1 -1
  25. package/build/src/mocking/lib/HostRules.js.map +1 -1
  26. package/build/src/mocking/lib/User.js +2 -2
  27. package/build/src/mocking/lib/User.js.map +1 -1
  28. package/build/src/modeling/DataDomain.d.ts +4 -0
  29. package/build/src/modeling/DataDomain.d.ts.map +1 -1
  30. package/build/src/modeling/DataDomain.js +13 -3
  31. package/build/src/modeling/DataDomain.js.map +1 -1
  32. package/build/src/modeling/DomainAssociation.js +1 -1
  33. package/build/src/modeling/DomainAssociation.js.map +1 -1
  34. package/build/src/modeling/DomainEntity.d.ts +46 -0
  35. package/build/src/modeling/DomainEntity.d.ts.map +1 -1
  36. package/build/src/modeling/DomainEntity.js +71 -0
  37. package/build/src/modeling/DomainEntity.js.map +1 -1
  38. package/build/src/modeling/DomainFile.js +2 -2
  39. package/build/src/modeling/DomainFile.js.map +1 -1
  40. package/build/src/modeling/DomainImpactAnalysis.d.ts +31 -8
  41. package/build/src/modeling/DomainImpactAnalysis.d.ts.map +1 -1
  42. package/build/src/modeling/DomainImpactAnalysis.js +118 -46
  43. package/build/src/modeling/DomainImpactAnalysis.js.map +1 -1
  44. package/build/src/modeling/DomainProperty.js +1 -1
  45. package/build/src/modeling/DomainProperty.js.map +1 -1
  46. package/build/src/modeling/legacy/DataAssociation.js +3 -3
  47. package/build/src/modeling/legacy/DataAssociation.js.map +1 -1
  48. package/build/src/modeling/legacy/DataEntity.js +3 -3
  49. package/build/src/modeling/legacy/DataEntity.js.map +1 -1
  50. package/build/src/modeling/legacy/DataEntityBuilder.js +2 -2
  51. package/build/src/modeling/legacy/DataEntityBuilder.js.map +1 -1
  52. package/build/src/modeling/legacy/DataModel.js +3 -3
  53. package/build/src/modeling/legacy/DataModel.js.map +1 -1
  54. package/build/src/modeling/legacy/DataNamespace.js +3 -3
  55. package/build/src/modeling/legacy/DataNamespace.js.map +1 -1
  56. package/build/src/modeling/legacy/DataProperty.js +3 -3
  57. package/build/src/modeling/legacy/DataProperty.js.map +1 -1
  58. package/build/src/modeling/validation/association_validation.d.ts +38 -0
  59. package/build/src/modeling/validation/association_validation.d.ts.map +1 -0
  60. package/build/src/modeling/validation/association_validation.js +108 -0
  61. package/build/src/modeling/validation/association_validation.js.map +1 -0
  62. package/build/src/modeling/validation/entity_validation.d.ts +52 -0
  63. package/build/src/modeling/validation/entity_validation.d.ts.map +1 -0
  64. package/build/src/modeling/validation/entity_validation.js +241 -0
  65. package/build/src/modeling/validation/entity_validation.js.map +1 -0
  66. package/build/src/modeling/validation/postgresql.d.ts +2 -0
  67. package/build/src/modeling/validation/postgresql.d.ts.map +1 -0
  68. package/build/src/modeling/validation/postgresql.js +58 -0
  69. package/build/src/modeling/validation/postgresql.js.map +1 -0
  70. package/build/src/modeling/validation/property_validation.d.ts +29 -0
  71. package/build/src/modeling/validation/property_validation.d.ts.map +1 -0
  72. package/build/src/modeling/validation/property_validation.js +58 -0
  73. package/build/src/modeling/validation/property_validation.js.map +1 -0
  74. package/build/src/modeling/validation/rules.d.ts +55 -0
  75. package/build/src/modeling/validation/rules.d.ts.map +1 -0
  76. package/build/src/modeling/validation/rules.js +110 -0
  77. package/build/src/modeling/validation/rules.js.map +1 -0
  78. package/build/src/models/AuthorizationData.js +3 -3
  79. package/build/src/models/AuthorizationData.js.map +1 -1
  80. package/build/src/models/CertificateFile.js +2 -2
  81. package/build/src/models/CertificateFile.js.map +1 -1
  82. package/build/src/models/ClientCertificate.js +5 -5
  83. package/build/src/models/ClientCertificate.js.map +1 -1
  84. package/build/src/models/Environment.js +6 -6
  85. package/build/src/models/Environment.js.map +1 -1
  86. package/build/src/models/Folder.js +2 -2
  87. package/build/src/models/Folder.js.map +1 -1
  88. package/build/src/models/HostRule.js +4 -4
  89. package/build/src/models/HostRule.js.map +1 -1
  90. package/build/src/models/HttpProject.js +12 -12
  91. package/build/src/models/HttpProject.js.map +1 -1
  92. package/build/src/models/Project.d.ts.map +1 -1
  93. package/build/src/models/Project.js +2 -2
  94. package/build/src/models/Project.js.map +1 -1
  95. package/build/src/models/ProjectFolder.d.ts.map +1 -1
  96. package/build/src/models/ProjectFolder.js +6 -6
  97. package/build/src/models/ProjectFolder.js.map +1 -1
  98. package/build/src/models/ProjectRequest.d.ts.map +1 -1
  99. package/build/src/models/ProjectRequest.js +8 -8
  100. package/build/src/models/ProjectRequest.js.map +1 -1
  101. package/build/src/models/ProjectSchema.js +6 -6
  102. package/build/src/models/ProjectSchema.js.map +1 -1
  103. package/build/src/models/store/DataFile.js +2 -2
  104. package/build/src/models/store/DataFile.js.map +1 -1
  105. package/build/src/models/store/File.d.ts.map +1 -1
  106. package/build/src/models/store/File.js +3 -3
  107. package/build/src/models/store/File.js.map +1 -1
  108. package/build/src/models/store/Organization.js +3 -3
  109. package/build/src/models/store/Organization.js.map +1 -1
  110. package/build/src/models/store/Permission.js +7 -7
  111. package/build/src/models/store/Permission.js.map +1 -1
  112. package/build/src/models/store/UserIdentity.js +3 -3
  113. package/build/src/models/store/UserIdentity.js.map +1 -1
  114. package/build/src/models/transformers/ArcDexieTransformer.js +4 -4
  115. package/build/src/models/transformers/ArcDexieTransformer.js.map +1 -1
  116. package/build/src/models/transformers/ArcLegacyTransformer.js +3 -3
  117. package/build/src/models/transformers/ArcLegacyTransformer.js.map +1 -1
  118. package/build/src/models/transformers/ArcPouchTransformer.js +2 -2
  119. package/build/src/models/transformers/ArcPouchTransformer.js.map +1 -1
  120. package/build/src/models/transformers/PostmanV21Transformer.js +2 -2
  121. package/build/src/models/transformers/PostmanV21Transformer.js.map +1 -1
  122. package/build/src/models/transformers/PostmanV2Transformer.js +2 -2
  123. package/build/src/models/transformers/PostmanV2Transformer.js.map +1 -1
  124. package/build/src/patch/PatchClient.js +2 -2
  125. package/build/src/patch/PatchClient.js.map +1 -1
  126. package/build/src/runtime/store/FilesSdk.js +3 -3
  127. package/build/src/runtime/store/FilesSdk.js.map +1 -1
  128. package/data/models/example-generator-api.json +20 -20
  129. package/package.json +1 -1
  130. package/src/amf/AmfShapeGenerator.ts +3 -3
  131. package/src/amf/DataValueGenerator.ts +3 -2
  132. package/src/amf/models/AmfDataNode.ts +2 -2
  133. package/src/lib/uuid.ts +1 -1
  134. package/src/mocking/lib/History.ts +8 -8
  135. package/src/mocking/lib/HostRules.ts +1 -1
  136. package/src/mocking/lib/User.ts +2 -2
  137. package/src/modeling/DataDomain.ts +14 -3
  138. package/src/modeling/DomainAssociation.ts +1 -1
  139. package/src/modeling/DomainEntity.ts +75 -0
  140. package/src/modeling/DomainFile.ts +2 -2
  141. package/src/modeling/DomainImpactAnalysis.ts +144 -54
  142. package/src/modeling/DomainProperty.ts +1 -1
  143. package/src/modeling/legacy/DataAssociation.ts +3 -3
  144. package/src/modeling/legacy/DataEntity.ts +3 -3
  145. package/src/modeling/legacy/DataEntityBuilder.ts +2 -2
  146. package/src/modeling/legacy/DataModel.ts +3 -3
  147. package/src/modeling/legacy/DataNamespace.ts +3 -3
  148. package/src/modeling/legacy/DataProperty.ts +3 -3
  149. package/src/modeling/validation/association_validation.ts +109 -0
  150. package/src/modeling/validation/entity_validation.ts +246 -0
  151. package/src/modeling/validation/postgresql.ts +57 -0
  152. package/src/modeling/validation/property_validation.ts +58 -0
  153. package/src/modeling/validation/rules.ts +152 -0
  154. package/src/models/AuthorizationData.ts +3 -3
  155. package/src/models/CertificateFile.ts +2 -2
  156. package/src/models/ClientCertificate.ts +5 -5
  157. package/src/models/Environment.ts +6 -6
  158. package/src/models/Folder.ts +2 -2
  159. package/src/models/HostRule.ts +4 -4
  160. package/src/models/HttpProject.ts +12 -12
  161. package/src/models/Project.ts +2 -2
  162. package/src/models/ProjectFolder.ts +6 -6
  163. package/src/models/ProjectRequest.ts +8 -8
  164. package/src/models/ProjectSchema.ts +6 -6
  165. package/src/models/store/DataFile.ts +2 -2
  166. package/src/models/store/File.ts +3 -3
  167. package/src/models/store/Organization.ts +3 -3
  168. package/src/models/store/Permission.ts +7 -7
  169. package/src/models/store/UserIdentity.ts +3 -3
  170. package/src/models/transformers/ArcDexieTransformer.ts +4 -4
  171. package/src/models/transformers/ArcLegacyTransformer.ts +3 -3
  172. package/src/models/transformers/ArcPouchTransformer.ts +2 -2
  173. package/src/models/transformers/PostmanV21Transformer.ts +2 -2
  174. package/src/models/transformers/PostmanV2Transformer.ts +2 -2
  175. package/src/patch/PatchClient.ts +2 -2
  176. package/src/runtime/store/FilesSdk.ts +3 -3
  177. package/tests/unit/modeling/data_domain_associations.spec.ts +1 -1
  178. package/tests/unit/modeling/data_domain_property.spec.ts +1 -1
  179. package/tests/unit/modeling/domain.property.spec.ts +7 -7
  180. package/tests/unit/modeling/domain_asociation.spec.ts +3 -3
  181. package/tests/unit/modeling/domain_entity_associations.spec.ts +1 -1
  182. package/tests/unit/modeling/domain_entity_properties.spec.ts +2 -2
  183. package/tests/unit/modeling/domain_impact_analysis.spec.ts +138 -29
  184. package/tests/unit/modeling/validation/association_validation.spec.ts +140 -0
  185. package/tests/unit/modeling/validation/entity_validation.spec.ts +192 -0
  186. package/tests/unit/modeling/validation/property_validation.spec.ts +125 -0
  187. package/tests/unit/runtime/proxy/HttpProjectProxy.spec.ts +8 -8
@@ -1,4 +1,4 @@
1
- import v4 from '../lib/uuid.js';
1
+ import { nanoid } from 'nanoid';
2
2
  /**
3
3
  * Represents an auth data stored in API Client's data store to be retrieved
4
4
  * when the response status is 401.
@@ -23,7 +23,7 @@ export class AuthorizationData {
23
23
  }
24
24
  else {
25
25
  init = {
26
- key: v4(),
26
+ key: nanoid(),
27
27
  };
28
28
  }
29
29
  this.new(init);
@@ -34,7 +34,7 @@ export class AuthorizationData {
34
34
  * Note, this throws an error when the provider is not an API Client provider object.
35
35
  */
36
36
  new(init) {
37
- const { username, password, domain, key = v4() } = init;
37
+ const { username, password, domain, key = nanoid() } = init;
38
38
  this.username = username;
39
39
  this.password = password;
40
40
  this.domain = domain;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorizationData.js","sourceRoot":"","sources":["../../../src/models/AuthorizationData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAS/B;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAC5B,GAAG,GAAG,EAAE,CAAA;IACR,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,MAAM,CAAS;IAEf;;OAEG;IACH,YAAY,KAAmC;QAC7C,IAAI,IAAwB,CAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,GAAG,EAAE,EAAE,EAAE;aACV,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAwB;QAC1B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;QACvD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAuB;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import v4 from '../lib/uuid.js'\n\nexport interface IAuthorizationData {\n key: string\n username?: string\n password?: string\n domain?: string\n}\n\n/**\n * Represents an auth data stored in API Client's data store to be retrieved\n * when the response status is 401.\n *\n * Each entry represent a Basic or NTLM authorization.\n */\nexport class AuthorizationData {\n key = ''\n username?: string\n password?: string\n domain?: string\n\n /**\n * @param input The provider definition used to restore the state.\n */\n constructor(input?: string | IAuthorizationData) {\n let init: IAuthorizationData\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n key: v4(),\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new provider clearing anything that is so far defined.\n *\n * Note, this throws an error when the provider is not an API Client provider object.\n */\n new(init: IAuthorizationData): void {\n const { username, password, domain, key = v4() } = init\n this.username = username\n this.password = password\n this.domain = domain\n this.key = key\n }\n\n toJSON(): IAuthorizationData {\n const result: IAuthorizationData = {\n key: this.key,\n }\n if (this.username) {\n result.username = this.username\n }\n if (this.password) {\n result.password = this.password\n }\n if (this.domain) {\n result.domain = this.domain\n }\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"AuthorizationData.js","sourceRoot":"","sources":["../../../src/models/AuthorizationData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAS/B;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAC5B,GAAG,GAAG,EAAE,CAAA;IACR,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,MAAM,CAAS;IAEf;;OAEG;IACH,YAAY,KAAmC;QAC7C,IAAI,IAAwB,CAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,GAAG,EAAE,MAAM,EAAE;aACd,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAwB;QAC1B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAAA;QAC3D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAuB;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { nanoid } from 'nanoid'\n\nexport interface IAuthorizationData {\n key: string\n username?: string\n password?: string\n domain?: string\n}\n\n/**\n * Represents an auth data stored in API Client's data store to be retrieved\n * when the response status is 401.\n *\n * Each entry represent a Basic or NTLM authorization.\n */\nexport class AuthorizationData {\n key = ''\n username?: string\n password?: string\n domain?: string\n\n /**\n * @param input The provider definition used to restore the state.\n */\n constructor(input?: string | IAuthorizationData) {\n let init: IAuthorizationData\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n key: nanoid(),\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new provider clearing anything that is so far defined.\n *\n * Note, this throws an error when the provider is not an API Client provider object.\n */\n new(init: IAuthorizationData): void {\n const { username, password, domain, key = nanoid() } = init\n this.username = username\n this.password = password\n this.domain = domain\n this.key = key\n }\n\n toJSON(): IAuthorizationData {\n const result: IAuthorizationData = {\n key: this.key,\n }\n if (this.username) {\n result.username = this.username\n }\n if (this.password) {\n result.password = this.password\n }\n if (this.domain) {\n result.domain = this.domain\n }\n return result\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import v4 from '../lib/uuid.js';
1
+ import { nanoid } from 'nanoid';
2
2
  import { CertificateFileKind } from './kinds.js';
3
3
  import { File } from './store/File.js';
4
4
  import { Thing } from './Thing.js';
@@ -37,7 +37,7 @@ export class CertificateFile extends File {
37
37
  else {
38
38
  init = {
39
39
  kind: CertificateFileKind,
40
- key: v4(),
40
+ key: nanoid(),
41
41
  organization: '',
42
42
  info: Thing.fromName('').toJSON(),
43
43
  parents: [],
@@ -1 +1 @@
1
- {"version":3,"file":"CertificateFile.js","sourceRoot":"","sources":["../../../src/models/CertificateFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMlC,MAAM,OAAO,eAAgB,SAAQ,IAAI;IAC9B,IAAI,GAAG,mBAAmB,CAAA;IAEnC,MAAM,CAAC,eAAe,CACpB,WAAuC,EACvC,YAAoB,EACpB,KAAc;QAEd,MAAM,IAAI,GAAqB;YAC7B,IAAI,EAAE,mBAAmB;YACzB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,YAAY;YACZ,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAC/C,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACzD,KAAK;YACL,OAAO,EAAE,EAAE;YACX,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,EAAE;SAChB,CAAA;QACD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAU,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAc;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,CAAoB,CAAA;IAC1F,CAAC;IAED,YAAY,KAAiC;QAC3C,KAAK,EAAE,CAAA;QACP,IAAI,IAAsB,CAAA;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,mBAAmB;gBACzB,GAAG,EAAE,EAAE,EAAE;gBACT,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;aACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAEQ,GAAG,CAAC,IAAsB;QACjC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAc;QACjC,MAAM,KAAK,GAAG,KAAyB,CAAA;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACjD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAqB;YAC/B,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,mBAAmB;SAC1B,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import v4 from '../lib/uuid.js'\nimport { Certificate, ICertificate } from './ClientCertificate.js'\nimport { CertificateFileKind } from './kinds.js'\nimport { IFile, File } from './store/File.js'\nimport { Thing } from './Thing.js'\n\nexport interface ICertificateFile extends IFile {\n kind: typeof CertificateFileKind\n}\n\nexport class CertificateFile extends File {\n override kind = CertificateFileKind\n\n static fromCertificate(\n certificate: ICertificate | Certificate,\n organization: string,\n owner?: string\n ): CertificateFile {\n const init: ICertificateFile = {\n kind: CertificateFileKind,\n key: certificate.key,\n organization,\n info: Thing.fromName(certificate.name).toJSON(),\n lastModified: { user: owner || '', time: 0, byMe: false },\n owner,\n parents: [],\n permissionIds: [],\n permissions: [],\n }\n return new CertificateFile(init)\n }\n\n /**\n * @param name The name to set.\n * @param owner The user id that is the owner of the file.\n */\n static override fromName(name: string, organization: string, owner?: string): CertificateFile {\n return super.fromName(name, organization, owner, CertificateFileKind) as CertificateFile\n }\n\n constructor(input?: string | ICertificateFile) {\n super()\n let init: ICertificateFile\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: CertificateFileKind,\n key: v4(),\n organization: '',\n info: Thing.fromName('').toJSON(),\n parents: [],\n permissionIds: [],\n permissions: [],\n lastModified: { user: '', time: 0, byMe: false },\n }\n }\n this.new(init)\n }\n\n override new(init: ICertificateFile): this {\n if (!CertificateFile.isCertificate(init)) {\n throw new Error(`Not a certificate file.`)\n }\n super.new(init)\n this.kind = CertificateFileKind\n return this\n }\n\n static isCertificate(input: unknown): boolean {\n const typed = input as ICertificateFile\n if (!input || typed.kind !== CertificateFileKind) {\n return false\n }\n return true\n }\n\n override toJSON(): ICertificateFile {\n const result: ICertificateFile = {\n ...super.toJSON(),\n kind: CertificateFileKind,\n }\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"CertificateFile.js","sourceRoot":"","sources":["../../../src/models/CertificateFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMlC,MAAM,OAAO,eAAgB,SAAQ,IAAI;IAC9B,IAAI,GAAG,mBAAmB,CAAA;IAEnC,MAAM,CAAC,eAAe,CACpB,WAAuC,EACvC,YAAoB,EACpB,KAAc;QAEd,MAAM,IAAI,GAAqB;YAC7B,IAAI,EAAE,mBAAmB;YACzB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,YAAY;YACZ,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAC/C,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACzD,KAAK;YACL,OAAO,EAAE,EAAE;YACX,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,EAAE;SAChB,CAAA;QACD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAU,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAc;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,CAAoB,CAAA;IAC1F,CAAC;IAED,YAAY,KAAiC;QAC3C,KAAK,EAAE,CAAA;QACP,IAAI,IAAsB,CAAA;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,mBAAmB;gBACzB,GAAG,EAAE,MAAM,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;aACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAEQ,GAAG,CAAC,IAAsB;QACjC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAc;QACjC,MAAM,KAAK,GAAG,KAAyB,CAAA;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACjD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAqB;YAC/B,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,mBAAmB;SAC1B,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { nanoid } from 'nanoid'\nimport { Certificate, ICertificate } from './ClientCertificate.js'\nimport { CertificateFileKind } from './kinds.js'\nimport { IFile, File } from './store/File.js'\nimport { Thing } from './Thing.js'\n\nexport interface ICertificateFile extends IFile {\n kind: typeof CertificateFileKind\n}\n\nexport class CertificateFile extends File {\n override kind = CertificateFileKind\n\n static fromCertificate(\n certificate: ICertificate | Certificate,\n organization: string,\n owner?: string\n ): CertificateFile {\n const init: ICertificateFile = {\n kind: CertificateFileKind,\n key: certificate.key,\n organization,\n info: Thing.fromName(certificate.name).toJSON(),\n lastModified: { user: owner || '', time: 0, byMe: false },\n owner,\n parents: [],\n permissionIds: [],\n permissions: [],\n }\n return new CertificateFile(init)\n }\n\n /**\n * @param name The name to set.\n * @param owner The user id that is the owner of the file.\n */\n static override fromName(name: string, organization: string, owner?: string): CertificateFile {\n return super.fromName(name, organization, owner, CertificateFileKind) as CertificateFile\n }\n\n constructor(input?: string | ICertificateFile) {\n super()\n let init: ICertificateFile\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: CertificateFileKind,\n key: nanoid(),\n organization: '',\n info: Thing.fromName('').toJSON(),\n parents: [],\n permissionIds: [],\n permissions: [],\n lastModified: { user: '', time: 0, byMe: false },\n }\n }\n this.new(init)\n }\n\n override new(init: ICertificateFile): this {\n if (!CertificateFile.isCertificate(init)) {\n throw new Error(`Not a certificate file.`)\n }\n super.new(init)\n this.kind = CertificateFileKind\n return this\n }\n\n static isCertificate(input: unknown): boolean {\n const typed = input as ICertificateFile\n if (!input || typed.kind !== CertificateFileKind) {\n return false\n }\n return true\n }\n\n override toJSON(): ICertificateFile {\n const result: ICertificateFile = {\n ...super.toJSON(),\n kind: CertificateFileKind,\n }\n return result\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { base64ToBuffer, bufferToBase64 } from '../lib/Buffer.js';
2
- import v4 from '../lib/uuid.js';
2
+ import { nanoid } from 'nanoid';
3
3
  export const Kind = 'Core#Certificate';
4
4
  /**
5
5
  * A class that represents a certificate in the system
@@ -48,7 +48,7 @@ export class Certificate {
48
48
  certKey: {
49
49
  data: key,
50
50
  },
51
- key: v4(),
51
+ key: nanoid(),
52
52
  name,
53
53
  type: 'pem',
54
54
  created: Date.now(),
@@ -71,7 +71,7 @@ export class Certificate {
71
71
  cert: {
72
72
  data: cert,
73
73
  },
74
- key: v4(),
74
+ key: nanoid(),
75
75
  name,
76
76
  type: 'p12',
77
77
  created: Date.now(),
@@ -89,7 +89,7 @@ export class Certificate {
89
89
  * to its original format.
90
90
  */
91
91
  static fromLegacy(index, cert) {
92
- const { name = '', type, created = Date.now(), _id = v4() } = index;
92
+ const { name = '', type, created = Date.now(), _id = nanoid() } = index;
93
93
  if (type === 'pem') {
94
94
  const data = Array.isArray(cert.cert) ? cert.cert[0] : cert.cert;
95
95
  const key = Array.isArray(cert.key) ? cert.key[0] : cert.key;
@@ -122,7 +122,7 @@ export class Certificate {
122
122
  throw new Error(`Unable to create a certificate. Unknown type: ${type}.`);
123
123
  }
124
124
  constructor(certificate) {
125
- const { type, cert, key = v4(), name = '', created = Date.now() } = certificate;
125
+ const { type, cert, key = nanoid(), name = '', created = Date.now() } = certificate;
126
126
  this.key = key;
127
127
  this.name = name;
128
128
  this.type = type;
@@ -1 +1 @@
1
- {"version":3,"file":"ClientCertificate.js","sourceRoot":"","sources":["../../../src/models/ClientCertificate.ts"],"names":[],"mappings":"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","sourcesContent":["import { base64ToBuffer, bufferToBase64 } from '../lib/Buffer.js'\nimport v4 from '../lib/uuid.js'\nimport {\n Certificate as LegacyCertificate,\n ARCCertificateIndex,\n RequestCertificate,\n} from './legacy/models/ClientCertificate.js'\n\nexport type CertificateType = 'p12' | 'pem'\n\nexport const Kind = 'Core#Certificate'\n\nexport type CertificateDataFormat = string | ArrayBuffer | Uint8Array\n\n/**\n * Represents a single certificate object (cert/key)\n */\nexport interface ICertificateData {\n /**\n * The certificate to use.\n * The `p12` type certificate must be a Buffer.\n */\n data: CertificateDataFormat\n /**\n * A passphrase to use to unlock the certificate.\n */\n passphrase?: string\n /**\n * The original data type of the certificate. This is only used internally by the data store\n * to move between buffers and string values stored in the store.\n * Outside the internal procedure of the data store this\n * is always `undefined` and the `data` contains the original data format.\n */\n type?: 'buffer'\n}\n\nexport interface ICertificate {\n kind: typeof Kind\n /**\n * The data store key to refer.\n */\n key: string\n /**\n * The custom name of the certificate.\n */\n name: string\n /**\n * The timestamp when the certificate was inserted into the data store.\n * Required when returning a result. Auto-generated when inserting, if missing.\n */\n created?: number\n /**\n * Certificate type. Either `p12` or `pem`.\n */\n type: CertificateType\n /**\n * Certificate or list of certificates to use.\n */\n cert: ICertificateData\n}\n\nexport interface IP12Certificate extends ICertificate {\n type: 'p12'\n}\n\n/**\n * Represents a complete certificate configuration required to make\n * an HTTP request.\n */\nexport interface IPemCertificate extends ICertificate {\n type: 'pem'\n /**\n * The key for the `pem` type certificate.\n */\n certKey: ICertificateData\n}\n\nexport type HttpCertificate = IP12Certificate | IPemCertificate | ICertificate\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport interface IPemCreateOptions {\n type: 'p12'\n /**\n * The certificate contents.\n */\n cert: CertificateDataFormat\n /**\n * The key contents.\n */\n key: CertificateDataFormat\n /**\n * Optional name for the certificate.\n */\n name?: string\n /**\n * Optional passphrase for the key.\n */\n passphrase?: string\n}\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport interface IP12CreateOptions {\n type: 'pem'\n /**\n * The certificate contents.\n */\n cert: CertificateDataFormat\n /**\n * Optional name for the certificate.\n */\n name?: string\n /**\n * Optional passphrase for the certificate.\n */\n passphrase?: string\n}\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport type ICertificateCreateOptions = IPemCreateOptions | IP12CreateOptions\n\n/**\n * A class that represents a certificate in the system\n */\nexport class Certificate {\n kind = Kind\n /**\n * The data store key to refer.\n */\n key: string\n /**\n * Custom name of the certificate.\n */\n name: string\n /**\n * Timestamp when the certificate was inserted into the data store.\n * Required when returning a result. Auto-generated when inserting, if missing.\n */\n created = 0\n /**\n * Certificate type. Either `p12` or `pem`.\n */\n type: CertificateType\n /**\n * Certificate or list of certificates to use.\n */\n cert: ICertificateData\n /**\n * The key for the `pem` type certificate.\n */\n certKey?: ICertificateData\n\n /**\n * Creates a new certificate instance for a PEM key\n *\n * @param pem The certificate contents\n * @param key The key contents\n * @param name The certificate name\n * @param keyPassphrase The key passphrase\n */\n static fromPem(\n pem: CertificateDataFormat,\n key: CertificateDataFormat,\n name = 'New PEM certificate',\n keyPassphrase?: string\n ): Certificate {\n const init: IPemCertificate = {\n kind: Kind,\n cert: {\n data: pem,\n },\n certKey: {\n data: key,\n },\n key: v4(),\n name,\n type: 'pem',\n created: Date.now(),\n }\n if (keyPassphrase) {\n init.certKey.passphrase = keyPassphrase\n }\n return new Certificate(init)\n }\n\n /**\n * Creates a new certificate instance for a P12 key\n *\n * @param cert The certificate contents\n * @param name The certificate name\n * @param passphrase The key passphrase\n */\n static fromP12(cert: CertificateDataFormat, name = 'New P12 certificate', passphrase?: string): Certificate {\n const init: IP12Certificate = {\n kind: Kind,\n cert: {\n data: cert,\n },\n key: v4(),\n name,\n type: 'p12',\n created: Date.now(),\n }\n if (passphrase) {\n init.cert.passphrase = passphrase\n }\n return new Certificate(init)\n }\n\n /**\n * Creates a certificate object from the ARC's legacy certificate definition.\n *\n * @param index The legacy certificate index object. If it has set `_id` it will be used as the `key`.\n * @param index The certificate data object as read from the data store. Do not restore the data\n * to its original format.\n */\n static fromLegacy(index: ARCCertificateIndex, cert: RequestCertificate): Certificate {\n const { name = '', type, created = Date.now(), _id = v4() } = index\n if (type === 'pem') {\n const data = Array.isArray(cert.cert) ? cert.cert[0] : cert.cert\n const key = Array.isArray(cert.key) ? cert.key[0] : (cert.key as LegacyCertificate)\n if (!key) {\n throw new Error(`Unable to create a PEM certificate without the key.`)\n }\n const init: IPemCertificate = {\n kind: Kind,\n cert: data as ICertificateData, // these are compatible.\n certKey: key as ICertificateData,\n key: _id,\n name,\n type: 'pem',\n created,\n }\n return new Certificate(init)\n } else if (type === 'p12') {\n const data = Array.isArray(cert.cert) ? cert.cert[0] : cert.cert\n const init: IP12Certificate = {\n kind: Kind,\n cert: data as ICertificateData, // these are compatible.\n key: _id,\n name,\n type: 'p12',\n created,\n }\n return new Certificate(init)\n }\n throw new Error(`Unable to create a certificate. Unknown type: ${type}.`)\n }\n\n constructor(certificate: HttpCertificate) {\n const { type, cert, key = v4(), name = '', created = Date.now() } = certificate\n this.key = key\n this.name = name\n this.type = type\n this.cert = Certificate.fromStore(cert)\n this.created = created\n if (type === 'pem') {\n const typed = certificate as IPemCertificate\n this.certKey = Certificate.fromStore(typed.certKey)\n }\n }\n\n /**\n * When needed it reads the certificate's original format.\n * @param data The certificate data.\n * @returns The restored certificate.\n */\n static fromStore(data: ICertificateData): ICertificateData {\n if (data.type) {\n delete data.type\n const content = data.data as string\n data.data = base64ToBuffer(content)\n }\n return data\n }\n\n /**\n * Prepares certificate object to be stored in the data store.\n * If the `data` property is not string then it assumes buffer (either\n * Node's or ArrayBuffer). In this case it converts buffer to base64 string.\n * It also adds `type` property set to `buffer` for the `fromStore()`\n * function to recognize what to do with the data.\n *\n * Note, for optimization, PEM keys should be strings as the content of the\n * certificate is already a base62 string. To spare double base64 conversion\n * use string data.\n *\n * @param data The certificate data object.\n * @throws When data is not set\n */\n static toStore(data: ICertificateData): ICertificateData {\n if (!data) {\n throw new Error('Certificate data is missing.')\n }\n if (!data.data) {\n throw new Error('Certificate content not set.')\n }\n if (typeof data.data !== 'string') {\n data.type = 'buffer'\n const buff = data.data as ArrayBuffer | Uint8Array\n data.data = bufferToBase64(buff)\n }\n return data\n }\n\n toJSON(): HttpCertificate {\n const result: HttpCertificate = {\n kind: Kind,\n key: this.key,\n cert: Certificate.toStore(this.cert),\n name: this.name,\n type: this.type,\n created: this.created,\n }\n\n if (this.type === 'pem' && this.certKey) {\n const typed = result as unknown as IPemCertificate\n typed.certKey = Certificate.toStore(this.certKey)\n }\n\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"ClientCertificate.js","sourceRoot":"","sources":["../../../src/models/ClientCertificate.ts"],"names":[],"mappings":"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","sourcesContent":["import { base64ToBuffer, bufferToBase64 } from '../lib/Buffer.js'\nimport { nanoid } from 'nanoid'\nimport {\n Certificate as LegacyCertificate,\n ARCCertificateIndex,\n RequestCertificate,\n} from './legacy/models/ClientCertificate.js'\n\nexport type CertificateType = 'p12' | 'pem'\n\nexport const Kind = 'Core#Certificate'\n\nexport type CertificateDataFormat = string | ArrayBuffer | Uint8Array\n\n/**\n * Represents a single certificate object (cert/key)\n */\nexport interface ICertificateData {\n /**\n * The certificate to use.\n * The `p12` type certificate must be a Buffer.\n */\n data: CertificateDataFormat\n /**\n * A passphrase to use to unlock the certificate.\n */\n passphrase?: string\n /**\n * The original data type of the certificate. This is only used internally by the data store\n * to move between buffers and string values stored in the store.\n * Outside the internal procedure of the data store this\n * is always `undefined` and the `data` contains the original data format.\n */\n type?: 'buffer'\n}\n\nexport interface ICertificate {\n kind: typeof Kind\n /**\n * The data store key to refer.\n */\n key: string\n /**\n * The custom name of the certificate.\n */\n name: string\n /**\n * The timestamp when the certificate was inserted into the data store.\n * Required when returning a result. Auto-generated when inserting, if missing.\n */\n created?: number\n /**\n * Certificate type. Either `p12` or `pem`.\n */\n type: CertificateType\n /**\n * Certificate or list of certificates to use.\n */\n cert: ICertificateData\n}\n\nexport interface IP12Certificate extends ICertificate {\n type: 'p12'\n}\n\n/**\n * Represents a complete certificate configuration required to make\n * an HTTP request.\n */\nexport interface IPemCertificate extends ICertificate {\n type: 'pem'\n /**\n * The key for the `pem` type certificate.\n */\n certKey: ICertificateData\n}\n\nexport type HttpCertificate = IP12Certificate | IPemCertificate | ICertificate\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport interface IPemCreateOptions {\n type: 'p12'\n /**\n * The certificate contents.\n */\n cert: CertificateDataFormat\n /**\n * The key contents.\n */\n key: CertificateDataFormat\n /**\n * Optional name for the certificate.\n */\n name?: string\n /**\n * Optional passphrase for the key.\n */\n passphrase?: string\n}\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport interface IP12CreateOptions {\n type: 'pem'\n /**\n * The certificate contents.\n */\n cert: CertificateDataFormat\n /**\n * Optional name for the certificate.\n */\n name?: string\n /**\n * Optional passphrase for the certificate.\n */\n passphrase?: string\n}\n\n/**\n * @deprecated Do not use this type anymore. Create a cert instance instead.\n */\nexport type ICertificateCreateOptions = IPemCreateOptions | IP12CreateOptions\n\n/**\n * A class that represents a certificate in the system\n */\nexport class Certificate {\n kind = Kind\n /**\n * The data store key to refer.\n */\n key: string\n /**\n * Custom name of the certificate.\n */\n name: string\n /**\n * Timestamp when the certificate was inserted into the data store.\n * Required when returning a result. Auto-generated when inserting, if missing.\n */\n created = 0\n /**\n * Certificate type. Either `p12` or `pem`.\n */\n type: CertificateType\n /**\n * Certificate or list of certificates to use.\n */\n cert: ICertificateData\n /**\n * The key for the `pem` type certificate.\n */\n certKey?: ICertificateData\n\n /**\n * Creates a new certificate instance for a PEM key\n *\n * @param pem The certificate contents\n * @param key The key contents\n * @param name The certificate name\n * @param keyPassphrase The key passphrase\n */\n static fromPem(\n pem: CertificateDataFormat,\n key: CertificateDataFormat,\n name = 'New PEM certificate',\n keyPassphrase?: string\n ): Certificate {\n const init: IPemCertificate = {\n kind: Kind,\n cert: {\n data: pem,\n },\n certKey: {\n data: key,\n },\n key: nanoid(),\n name,\n type: 'pem',\n created: Date.now(),\n }\n if (keyPassphrase) {\n init.certKey.passphrase = keyPassphrase\n }\n return new Certificate(init)\n }\n\n /**\n * Creates a new certificate instance for a P12 key\n *\n * @param cert The certificate contents\n * @param name The certificate name\n * @param passphrase The key passphrase\n */\n static fromP12(cert: CertificateDataFormat, name = 'New P12 certificate', passphrase?: string): Certificate {\n const init: IP12Certificate = {\n kind: Kind,\n cert: {\n data: cert,\n },\n key: nanoid(),\n name,\n type: 'p12',\n created: Date.now(),\n }\n if (passphrase) {\n init.cert.passphrase = passphrase\n }\n return new Certificate(init)\n }\n\n /**\n * Creates a certificate object from the ARC's legacy certificate definition.\n *\n * @param index The legacy certificate index object. If it has set `_id` it will be used as the `key`.\n * @param index The certificate data object as read from the data store. Do not restore the data\n * to its original format.\n */\n static fromLegacy(index: ARCCertificateIndex, cert: RequestCertificate): Certificate {\n const { name = '', type, created = Date.now(), _id = nanoid() } = index\n if (type === 'pem') {\n const data = Array.isArray(cert.cert) ? cert.cert[0] : cert.cert\n const key = Array.isArray(cert.key) ? cert.key[0] : (cert.key as LegacyCertificate)\n if (!key) {\n throw new Error(`Unable to create a PEM certificate without the key.`)\n }\n const init: IPemCertificate = {\n kind: Kind,\n cert: data as ICertificateData, // these are compatible.\n certKey: key as ICertificateData,\n key: _id,\n name,\n type: 'pem',\n created,\n }\n return new Certificate(init)\n } else if (type === 'p12') {\n const data = Array.isArray(cert.cert) ? cert.cert[0] : cert.cert\n const init: IP12Certificate = {\n kind: Kind,\n cert: data as ICertificateData, // these are compatible.\n key: _id,\n name,\n type: 'p12',\n created,\n }\n return new Certificate(init)\n }\n throw new Error(`Unable to create a certificate. Unknown type: ${type}.`)\n }\n\n constructor(certificate: HttpCertificate) {\n const { type, cert, key = nanoid(), name = '', created = Date.now() } = certificate\n this.key = key\n this.name = name\n this.type = type\n this.cert = Certificate.fromStore(cert)\n this.created = created\n if (type === 'pem') {\n const typed = certificate as IPemCertificate\n this.certKey = Certificate.fromStore(typed.certKey)\n }\n }\n\n /**\n * When needed it reads the certificate's original format.\n * @param data The certificate data.\n * @returns The restored certificate.\n */\n static fromStore(data: ICertificateData): ICertificateData {\n if (data.type) {\n delete data.type\n const content = data.data as string\n data.data = base64ToBuffer(content)\n }\n return data\n }\n\n /**\n * Prepares certificate object to be stored in the data store.\n * If the `data` property is not string then it assumes buffer (either\n * Node's or ArrayBuffer). In this case it converts buffer to base64 string.\n * It also adds `type` property set to `buffer` for the `fromStore()`\n * function to recognize what to do with the data.\n *\n * Note, for optimization, PEM keys should be strings as the content of the\n * certificate is already a base62 string. To spare double base64 conversion\n * use string data.\n *\n * @param data The certificate data object.\n * @throws When data is not set\n */\n static toStore(data: ICertificateData): ICertificateData {\n if (!data) {\n throw new Error('Certificate data is missing.')\n }\n if (!data.data) {\n throw new Error('Certificate content not set.')\n }\n if (typeof data.data !== 'string') {\n data.type = 'buffer'\n const buff = data.data as ArrayBuffer | Uint8Array\n data.data = bufferToBase64(buff)\n }\n return data\n }\n\n toJSON(): HttpCertificate {\n const result: HttpCertificate = {\n kind: Kind,\n key: this.key,\n cert: Certificate.toStore(this.cert),\n name: this.name,\n type: this.type,\n created: this.created,\n }\n\n if (this.type === 'pem' && this.certKey) {\n const typed = result as unknown as IPemCertificate\n typed.certKey = Certificate.toStore(this.certKey)\n }\n\n return result\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Property } from './Property.js';
2
2
  import { Server } from './Server.js';
3
3
  import { Thing } from './Thing.js';
4
- import v4 from '../lib/uuid.js';
4
+ import { nanoid } from 'nanoid';
5
5
  import { RequestAuthorization } from './RequestAuthorization.js';
6
6
  export const Kind = 'Core#Environment';
7
7
  /**
@@ -44,7 +44,7 @@ export class Environment {
44
44
  * @param name The name to set.
45
45
  */
46
46
  static fromName(name) {
47
- const key = v4();
47
+ const key = nanoid();
48
48
  const info = Thing.fromName(name);
49
49
  const definition = new Environment({
50
50
  key,
@@ -55,7 +55,7 @@ export class Environment {
55
55
  return definition;
56
56
  }
57
57
  static fromLegacyVariables(name, variables) {
58
- const key = v4();
58
+ const key = nanoid();
59
59
  const info = Thing.fromName(name);
60
60
  const definition = new Environment({
61
61
  key,
@@ -85,7 +85,7 @@ export class Environment {
85
85
  else {
86
86
  init = {
87
87
  kind: Kind,
88
- key: v4(),
88
+ key: nanoid(),
89
89
  info: Thing.fromName('').toJSON(),
90
90
  variables: [],
91
91
  };
@@ -101,7 +101,7 @@ export class Environment {
101
101
  if (!Environment.isEnvironment(init)) {
102
102
  throw new Error(`Not an environment.`);
103
103
  }
104
- const { key = v4(), variables, info, server, encapsulated = false, authorization } = init;
104
+ const { key = nanoid(), variables, info, server, encapsulated = false, authorization } = init;
105
105
  this.kind = Kind;
106
106
  this.key = key;
107
107
  this.encapsulated = encapsulated;
@@ -210,7 +210,7 @@ export class Environment {
210
210
  clone(opts = {}) {
211
211
  const copy = new Environment(this.toJSON());
212
212
  if (!opts.withoutRevalidate) {
213
- copy.key = v4();
213
+ copy.key = nanoid();
214
214
  }
215
215
  return copy;
216
216
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Environment.js","sourceRoot":"","sources":["../../../src/models/Environment.ts"],"names":[],"mappings":"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","sourcesContent":["import { Property, IProperty } from './Property.js'\nimport { Server, IServer } from './Server.js'\nimport { IThing, Thing } from './Thing.js'\nimport v4 from '../lib/uuid.js'\nimport { ARCVariable } from './legacy/models/Variable.js'\nimport { IRequestAuthorization, RequestAuthorization } from './RequestAuthorization.js'\n\nexport const Kind = 'Core#Environment'\n\nexport interface IEnvironmentCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the environment.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\n/**\n * A project environment definition.\n */\nexport interface IEnvironment {\n kind: typeof Kind\n /**\n * The identifier of the environment.\n */\n key: string\n /**\n * The environment's meta info.\n */\n info: IThing\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: IServer\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: IProperty[]\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n */\n encapsulated?: boolean\n /**\n * The security to be applied to all requests that are going to this environment.\n */\n authorization?: IRequestAuthorization[]\n}\n\n/**\n * An environment is applied to a project or a folder.\n * It consists of a list of variables and a server configuration.\n * This allows to apply the runtime configuration just by changing the environment.\n */\nexport class Environment {\n kind = Kind\n key = ''\n /**\n * The name of the environment.\n */\n info: Thing = Thing.fromName('')\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: Property[] = []\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: Server\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n *\n * When encapsulation is disabled you can, for example, skip server definition and only overwrite variables.\n */\n encapsulated = false\n /**\n * The security to be applied to all requests that are going to this server.\n */\n authorization?: RequestAuthorization[]\n\n /**\n * Creates a new Environment object from a name.\n *\n * @param name The name to set.\n */\n static fromName(name: string): Environment {\n const key = v4()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n return definition\n }\n\n static fromLegacyVariables(name: string, variables: ARCVariable[]): Environment {\n const key = v4()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n variables.forEach((i) => {\n const name = i.variable || i.name\n const property = Property.fromApiType(i)\n property.name = name\n definition.variables.push(property)\n })\n return definition\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IEnvironment) {\n let init: IEnvironment\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: Kind,\n key: v4(),\n info: Thing.fromName('').toJSON(),\n variables: [],\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n *\n * Note, this throws an error when the environment is not an environment.\n */\n new(init: IEnvironment): void {\n if (!Environment.isEnvironment(init)) {\n throw new Error(`Not an environment.`)\n }\n const { key = v4(), variables, info, server, encapsulated = false, authorization } = init\n this.kind = Kind\n this.key = key\n this.encapsulated = encapsulated\n if (Array.isArray(authorization)) {\n this.authorization = authorization.map((i) => new RequestAuthorization(i))\n } else {\n this.authorization = undefined\n }\n if (Array.isArray(variables)) {\n this.variables = variables.map((i) => new Property(i))\n } else {\n this.variables = []\n }\n if (server) {\n this.server = new Server(server)\n } else {\n this.server = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n }\n\n /**\n * Checks whether the input is a definition of a environment.\n */\n static isEnvironment(input: unknown): boolean {\n const typed = input as IEnvironment\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n toJSON(): IEnvironment {\n const { variables = [], encapsulated = false, server } = this\n const result: IEnvironment = {\n kind: Kind,\n key: this.key,\n info: this.info.toJSON(),\n variables: variables.map((v) => v.toJSON()),\n encapsulated,\n }\n if (server) {\n result.server = server.toJSON()\n }\n if (Array.isArray(this.authorization)) {\n result.authorization = this.authorization.map((i) => i.toJSON())\n }\n return result\n }\n\n addVariable(name: string, value: unknown): Property\n addVariable(variable: IProperty): Property\n\n /**\n * Adds a new variable to the list of variables.\n * It makes sure the variables property is initialized.\n */\n addVariable(variableOrName: IProperty | string, value?: unknown): Property {\n if (!Array.isArray(this.variables)) {\n this.variables = []\n }\n let prop: Property\n if (typeof variableOrName === 'string') {\n prop = Property.fromType(variableOrName, value)\n } else {\n prop = new Property(variableOrName)\n }\n this.variables.push(prop)\n return prop\n }\n\n /**\n * Reads the server configuration.\n * @param force When set then it creates a server instance when missing.\n */\n getServer(force?: boolean): Server | undefined {\n if (!this.server && !force) {\n return undefined\n }\n\n if (!this.server) {\n this.server = new Server()\n }\n return this.server\n }\n\n /**\n * Adds a new server definition.\n * @param uriOrInfo Either URI to create the server from or the definition of the server.\n */\n addServer(uriOrInfo: string | IServer): Server {\n let srv: Server\n if (typeof uriOrInfo === 'string') {\n srv = Server.fromUri(uriOrInfo)\n } else {\n srv = new Server(uriOrInfo)\n }\n this.server = srv\n return srv\n }\n\n /**\n * Makes a copy of this environment\n * @param opts Cloning options.\n */\n clone(opts: IEnvironmentCloneOptions = {}): Environment {\n const copy = new Environment(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = v4()\n }\n return copy\n }\n\n /**\n * Creates a map of variables from this environment.\n *\n * @param readStrategy The read strategy. When `lastWins` (default) then a variable with the same name overwrites\n * the previously set variable. The `firstWins` stops overwriting values once a variable is set.\n * @returns An object containing variables defined in this environment\n */\n variablesMap(readStrategy: 'lastWins' | 'firstWins' = 'lastWins'): Record<string, string> {\n const result: Record<string, string> = {}\n const { variables = [] } = this\n variables.forEach((item) => {\n const { enabled, name, value } = item\n if (!enabled || !name || value === undefined) {\n return\n }\n if (readStrategy === 'firstWins' && name in result) {\n return\n }\n result[name] = value as string\n })\n return result\n }\n\n /**\n * @returns A list of unique properties. The last defined property wins (with the same name).\n */\n uniqueProperties(): Property[] {\n const flatProperties: Property[] = []\n if (this.variables) {\n for (const prop of this.variables) {\n const index = flatProperties.findIndex((i) => i.name === prop.name)\n if (index >= 0) {\n flatProperties.splice(index, 1)\n }\n flatProperties.push(prop)\n }\n }\n return flatProperties\n }\n}\n"]}
1
+ {"version":3,"file":"Environment.js","sourceRoot":"","sources":["../../../src/models/Environment.ts"],"names":[],"mappings":"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","sourcesContent":["import { Property, IProperty } from './Property.js'\nimport { Server, IServer } from './Server.js'\nimport { IThing, Thing } from './Thing.js'\nimport { nanoid } from 'nanoid'\nimport { ARCVariable } from './legacy/models/Variable.js'\nimport { IRequestAuthorization, RequestAuthorization } from './RequestAuthorization.js'\n\nexport const Kind = 'Core#Environment'\n\nexport interface IEnvironmentCloneOptions {\n /**\n * By default it revalidates (re-creates) keys in the environment.\n * Set this to true to not make any changes to the keys.\n */\n withoutRevalidate?: boolean\n}\n\n/**\n * A project environment definition.\n */\nexport interface IEnvironment {\n kind: typeof Kind\n /**\n * The identifier of the environment.\n */\n key: string\n /**\n * The environment's meta info.\n */\n info: IThing\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: IServer\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: IProperty[]\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n */\n encapsulated?: boolean\n /**\n * The security to be applied to all requests that are going to this environment.\n */\n authorization?: IRequestAuthorization[]\n}\n\n/**\n * An environment is applied to a project or a folder.\n * It consists of a list of variables and a server configuration.\n * This allows to apply the runtime configuration just by changing the environment.\n */\nexport class Environment {\n kind = Kind\n key = ''\n /**\n * The name of the environment.\n */\n info: Thing = Thing.fromName('')\n /**\n * The variables added to this project.\n * It overrides application defined variables.\n */\n variables: Property[] = []\n /**\n * The server's definition for the environment.\n * When a server is defined for the environment then all request that have no\n * absolute URL will inherit this server configuration.\n */\n server?: Server\n /**\n * When set this configuration does not allow to be extended by the parent object's environment configuration.\n * By default an environment can be extended by the parent object's values.\n *\n * When encapsulation is disabled you can, for example, skip server definition and only overwrite variables.\n */\n encapsulated = false\n /**\n * The security to be applied to all requests that are going to this server.\n */\n authorization?: RequestAuthorization[]\n\n /**\n * Creates a new Environment object from a name.\n *\n * @param name The name to set.\n */\n static fromName(name: string): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n return definition\n }\n\n static fromLegacyVariables(name: string, variables: ARCVariable[]): Environment {\n const key = nanoid()\n const info = Thing.fromName(name)\n const definition = new Environment({\n key,\n kind: Kind,\n info: info.toJSON(),\n variables: [],\n })\n variables.forEach((i) => {\n const name = i.variable || i.name\n const property = Property.fromApiType(i)\n property.name = name\n definition.variables.push(property)\n })\n return definition\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IEnvironment) {\n let init: IEnvironment\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: Kind,\n key: nanoid(),\n info: Thing.fromName('').toJSON(),\n variables: [],\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n *\n * Note, this throws an error when the environment is not an environment.\n */\n new(init: IEnvironment): void {\n if (!Environment.isEnvironment(init)) {\n throw new Error(`Not an environment.`)\n }\n const { key = nanoid(), variables, info, server, encapsulated = false, authorization } = init\n this.kind = Kind\n this.key = key\n this.encapsulated = encapsulated\n if (Array.isArray(authorization)) {\n this.authorization = authorization.map((i) => new RequestAuthorization(i))\n } else {\n this.authorization = undefined\n }\n if (Array.isArray(variables)) {\n this.variables = variables.map((i) => new Property(i))\n } else {\n this.variables = []\n }\n if (server) {\n this.server = new Server(server)\n } else {\n this.server = undefined\n }\n if (info) {\n this.info = new Thing(info)\n } else {\n this.info = Thing.fromName('')\n }\n }\n\n /**\n * Checks whether the input is a definition of a environment.\n */\n static isEnvironment(input: unknown): boolean {\n const typed = input as IEnvironment\n if (!input || typed.kind !== Kind) {\n return false\n }\n return true\n }\n\n toJSON(): IEnvironment {\n const { variables = [], encapsulated = false, server } = this\n const result: IEnvironment = {\n kind: Kind,\n key: this.key,\n info: this.info.toJSON(),\n variables: variables.map((v) => v.toJSON()),\n encapsulated,\n }\n if (server) {\n result.server = server.toJSON()\n }\n if (Array.isArray(this.authorization)) {\n result.authorization = this.authorization.map((i) => i.toJSON())\n }\n return result\n }\n\n addVariable(name: string, value: unknown): Property\n addVariable(variable: IProperty): Property\n\n /**\n * Adds a new variable to the list of variables.\n * It makes sure the variables property is initialized.\n */\n addVariable(variableOrName: IProperty | string, value?: unknown): Property {\n if (!Array.isArray(this.variables)) {\n this.variables = []\n }\n let prop: Property\n if (typeof variableOrName === 'string') {\n prop = Property.fromType(variableOrName, value)\n } else {\n prop = new Property(variableOrName)\n }\n this.variables.push(prop)\n return prop\n }\n\n /**\n * Reads the server configuration.\n * @param force When set then it creates a server instance when missing.\n */\n getServer(force?: boolean): Server | undefined {\n if (!this.server && !force) {\n return undefined\n }\n\n if (!this.server) {\n this.server = new Server()\n }\n return this.server\n }\n\n /**\n * Adds a new server definition.\n * @param uriOrInfo Either URI to create the server from or the definition of the server.\n */\n addServer(uriOrInfo: string | IServer): Server {\n let srv: Server\n if (typeof uriOrInfo === 'string') {\n srv = Server.fromUri(uriOrInfo)\n } else {\n srv = new Server(uriOrInfo)\n }\n this.server = srv\n return srv\n }\n\n /**\n * Makes a copy of this environment\n * @param opts Cloning options.\n */\n clone(opts: IEnvironmentCloneOptions = {}): Environment {\n const copy = new Environment(this.toJSON())\n if (!opts.withoutRevalidate) {\n copy.key = nanoid()\n }\n return copy\n }\n\n /**\n * Creates a map of variables from this environment.\n *\n * @param readStrategy The read strategy. When `lastWins` (default) then a variable with the same name overwrites\n * the previously set variable. The `firstWins` stops overwriting values once a variable is set.\n * @returns An object containing variables defined in this environment\n */\n variablesMap(readStrategy: 'lastWins' | 'firstWins' = 'lastWins'): Record<string, string> {\n const result: Record<string, string> = {}\n const { variables = [] } = this\n variables.forEach((item) => {\n const { enabled, name, value } = item\n if (!enabled || !name || value === undefined) {\n return\n }\n if (readStrategy === 'firstWins' && name in result) {\n return\n }\n result[name] = value as string\n })\n return result\n }\n\n /**\n * @returns A list of unique properties. The last defined property wins (with the same name).\n */\n uniqueProperties(): Property[] {\n const flatProperties: Property[] = []\n if (this.variables) {\n for (const prop of this.variables) {\n const index = flatProperties.findIndex((i) => i.name === prop.name)\n if (index >= 0) {\n flatProperties.splice(index, 1)\n }\n flatProperties.push(prop)\n }\n }\n return flatProperties\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { File } from './store/File.js';
2
- import v4 from '../lib/uuid.js';
2
+ import { nanoid } from 'nanoid';
3
3
  import { Thing } from './Thing.js';
4
4
  import { FolderKind } from './kinds.js';
5
5
  /**
@@ -31,7 +31,7 @@ export class Folder extends File {
31
31
  else {
32
32
  init = {
33
33
  kind: FolderKind,
34
- key: v4(),
34
+ key: nanoid(),
35
35
  organization: '',
36
36
  info: Thing.fromName('').toJSON(),
37
37
  parents: [],
@@ -1 +1 @@
1
- {"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../src/models/Folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AASvC;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,IAAI;IACrB,IAAI,GAAG,UAAU,CAAA;IAE1B;;;;;OAKG;IACH,MAAM,CAAU,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAc;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAW,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,YAAY,KAAwB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,IAAa,CAAA;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,EAAE,EAAE;gBACT,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;aACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;OAEG;IACM,GAAG,CAAC,IAAa;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAc;QAC5B,MAAM,KAAK,GAAG,KAAgB,CAAA;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAY;YACtB,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,UAAU;SACjB,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { IFile, File } from './store/File.js'\nimport v4 from '../lib/uuid.js'\nimport { Thing } from './Thing.js'\nimport { FolderKind } from './kinds.js'\n\n/**\n * A definition of a folder.\n */\nexport interface IFolder extends IFile {\n kind: typeof FolderKind\n}\n\n/**\n * A definition of a folder.\n */\nexport class Folder extends File {\n override kind = FolderKind\n\n /**\n * Creates a new Folder object from a name.\n *\n * @param name The name to set.\n * @param owner The user id that is the owner of the folder.\n */\n static override fromName(name: string, organization: string, owner?: string): Folder {\n return super.fromName(name, organization, owner, FolderKind) as Folder\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IFolder) {\n super()\n let init: IFolder\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: FolderKind,\n key: v4(),\n organization: '',\n info: Thing.fromName('').toJSON(),\n parents: [],\n permissionIds: [],\n permissions: [],\n lastModified: { user: '', time: 0, byMe: false },\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n */\n override new(init: IFolder): this {\n if (!Folder.isFolder(init)) {\n throw new Error(`Not a folder.`)\n }\n super.new(init)\n this.kind = FolderKind\n return this\n }\n\n /**\n * Checks whether the input is a definition of a folder.\n */\n static isFolder(input: unknown): boolean {\n const typed = input as IFolder\n if (!input || typed.kind !== FolderKind) {\n return false\n }\n return true\n }\n\n override toJSON(): IFolder {\n const result: IFolder = {\n ...super.toJSON(),\n kind: FolderKind,\n }\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../src/models/Folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AASvC;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,IAAI;IACrB,IAAI,GAAG,UAAU,CAAA;IAE1B;;;;;OAKG;IACH,MAAM,CAAU,QAAQ,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAc;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAW,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,YAAY,KAAwB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,IAAa,CAAA;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,MAAM,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;gBACjB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;aACjD,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED;;OAEG;IACM,GAAG,CAAC,IAAa;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAc;QAC5B,MAAM,KAAK,GAAG,KAAgB,CAAA;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAY;YACtB,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,UAAU;SACjB,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { IFile, File } from './store/File.js'\nimport { nanoid } from 'nanoid'\nimport { Thing } from './Thing.js'\nimport { FolderKind } from './kinds.js'\n\n/**\n * A definition of a folder.\n */\nexport interface IFolder extends IFile {\n kind: typeof FolderKind\n}\n\n/**\n * A definition of a folder.\n */\nexport class Folder extends File {\n override kind = FolderKind\n\n /**\n * Creates a new Folder object from a name.\n *\n * @param name The name to set.\n * @param owner The user id that is the owner of the folder.\n */\n static override fromName(name: string, organization: string, owner?: string): Folder {\n return super.fromName(name, organization, owner, FolderKind) as Folder\n }\n\n /**\n * @param input The environment definition used to restore the state.\n */\n constructor(input?: string | IFolder) {\n super()\n let init: IFolder\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n kind: FolderKind,\n key: nanoid(),\n organization: '',\n info: Thing.fromName('').toJSON(),\n parents: [],\n permissionIds: [],\n permissions: [],\n lastModified: { user: '', time: 0, byMe: false },\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new environment clearing anything that is so far defined.\n */\n override new(init: IFolder): this {\n if (!Folder.isFolder(init)) {\n throw new Error(`Not a folder.`)\n }\n super.new(init)\n this.kind = FolderKind\n return this\n }\n\n /**\n * Checks whether the input is a definition of a folder.\n */\n static isFolder(input: unknown): boolean {\n const typed = input as IFolder\n if (!input || typed.kind !== FolderKind) {\n return false\n }\n return true\n }\n\n override toJSON(): IFolder {\n const result: IFolder = {\n ...super.toJSON(),\n kind: FolderKind,\n }\n return result\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import v4 from '../lib/uuid.js';
1
+ import { nanoid } from 'nanoid';
2
2
  export const Kind = 'Core#HostRule';
3
3
  export class HostRule {
4
4
  /**
@@ -24,7 +24,7 @@ export class HostRule {
24
24
  comment;
25
25
  static fromValues(from, to) {
26
26
  const result = new HostRule({
27
- key: v4(),
27
+ key: nanoid(),
28
28
  kind: Kind,
29
29
  from,
30
30
  to,
@@ -45,7 +45,7 @@ export class HostRule {
45
45
  }
46
46
  else {
47
47
  init = {
48
- key: v4(),
48
+ key: nanoid(),
49
49
  kind: Kind,
50
50
  from: '',
51
51
  to: '',
@@ -62,7 +62,7 @@ export class HostRule {
62
62
  if (!HostRule.isHostRule(init)) {
63
63
  throw new Error(`Not a HostRule.`);
64
64
  }
65
- const { from = '', to = '', enabled, comment, key = v4() } = init;
65
+ const { from = '', to = '', enabled, comment, key = nanoid() } = init;
66
66
  this.kind = Kind;
67
67
  this.key = key;
68
68
  this.from = from;
@@ -1 +1 @@
1
- {"version":3,"file":"HostRule.js","sourceRoot":"","sources":["../../../src/models/HostRule.ts"],"names":[],"mappings":"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","sourcesContent":["import v4 from '../lib/uuid.js'\n\nexport const Kind = 'Core#HostRule'\n\n/**\n * API Client host rule definition.\n */\nexport interface IHostRule {\n /**\n * The key of the rule.\n */\n key: string\n\n kind?: typeof Kind\n /**\n * The from rule (may contain asterisks)\n */\n from: string\n /**\n * The replacement value\n */\n to: string\n /**\n * When false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n}\n\nexport class HostRule {\n /**\n * The key of the rule.\n */\n key = ''\n\n kind = Kind\n /**\n * The from rule (may contain asterisks)\n */\n from = ''\n /**\n * replacement value\n */\n to = ''\n /**\n * if false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n\n static fromValues(from: string, to: string): HostRule {\n const result = new HostRule({\n key: v4(),\n kind: Kind,\n from,\n to,\n enabled: true,\n })\n return result\n }\n\n /**\n * @param input The thing definition used to restore the state.\n */\n constructor(input?: string | IHostRule) {\n let init: IHostRule\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n key: v4(),\n kind: Kind,\n from: '',\n to: '',\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new thing clearing anything that is so far defined.\n *\n * Note, this throws an error when the server is not an API Client thing.\n */\n new(init: IHostRule): void {\n if (!HostRule.isHostRule(init)) {\n throw new Error(`Not a HostRule.`)\n }\n const { from = '', to = '', enabled, comment, key = v4() } = init\n this.kind = Kind\n this.key = key\n this.from = from\n this.to = to\n this.enabled = enabled\n this.comment = comment\n }\n\n /**\n * Checks whether the input is a definition of a host rule.\n */\n static isHostRule(input: unknown): boolean {\n const typed = input as IHostRule\n if (input && typed.kind && typed.kind === Kind) {\n return true\n }\n return false\n }\n\n toJSON(): IHostRule {\n const result: IHostRule = {\n kind: Kind,\n key: this.key,\n from: this.from,\n to: this.to,\n }\n if (typeof this.enabled === 'boolean') {\n result.enabled = this.enabled\n }\n if (this.comment) {\n result.comment = this.comment\n }\n return result\n }\n\n /**\n * Applies `hosts` rules to the URL.\n *\n * @param value An URL to apply the rules to\n * @param rules List of host rules. It is a list of objects containing `from` and `to` properties.\n * @return Evaluated URL with hosts rules.\n */\n static applyHosts(value: string, rules: HostRule[]): string {\n if (!rules || !rules.length) {\n return value\n }\n for (const rule of rules) {\n const result = HostRule.evaluateRule(value, rule)\n if (result) {\n value = result\n }\n }\n return value\n }\n\n /**\n * Evaluates hosts rule and applies it to the `url`.\n * @param {string} url The URL to evaluate\n * @param {HostRule} rule The host rule definition\n * @return {string} Processed url.\n */\n static evaluateRule(url: string, rule: HostRule): string | undefined {\n if (!rule || !rule.from || !rule.to) {\n return\n }\n const re = HostRule.createRuleRe(rule.from)\n if (!re.test(url)) {\n return\n }\n return url.replace(re, rule.to)\n }\n\n /**\n * @param input Rule body\n * @return Regular expression for the rule.\n */\n static createRuleRe(input: string): RegExp {\n input = input.replace(/\\*/g, '(.*)')\n return new RegExp(input, 'gi')\n }\n}\n"]}
1
+ {"version":3,"file":"HostRule.js","sourceRoot":"","sources":["../../../src/models/HostRule.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid'\n\nexport const Kind = 'Core#HostRule'\n\n/**\n * API Client host rule definition.\n */\nexport interface IHostRule {\n /**\n * The key of the rule.\n */\n key: string\n\n kind?: typeof Kind\n /**\n * The from rule (may contain asterisks)\n */\n from: string\n /**\n * The replacement value\n */\n to: string\n /**\n * When false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n}\n\nexport class HostRule {\n /**\n * The key of the rule.\n */\n key = ''\n\n kind = Kind\n /**\n * The from rule (may contain asterisks)\n */\n from = ''\n /**\n * replacement value\n */\n to = ''\n /**\n * if false the rule is ignored\n */\n enabled?: boolean\n /**\n * optional rule description\n */\n comment?: string\n\n static fromValues(from: string, to: string): HostRule {\n const result = new HostRule({\n key: nanoid(),\n kind: Kind,\n from,\n to,\n enabled: true,\n })\n return result\n }\n\n /**\n * @param input The thing definition used to restore the state.\n */\n constructor(input?: string | IHostRule) {\n let init: IHostRule\n if (typeof input === 'string') {\n init = JSON.parse(input)\n } else if (typeof input === 'object') {\n init = input\n } else {\n init = {\n key: nanoid(),\n kind: Kind,\n from: '',\n to: '',\n }\n }\n this.new(init)\n }\n\n /**\n * Creates a new thing clearing anything that is so far defined.\n *\n * Note, this throws an error when the server is not an API Client thing.\n */\n new(init: IHostRule): void {\n if (!HostRule.isHostRule(init)) {\n throw new Error(`Not a HostRule.`)\n }\n const { from = '', to = '', enabled, comment, key = nanoid() } = init\n this.kind = Kind\n this.key = key\n this.from = from\n this.to = to\n this.enabled = enabled\n this.comment = comment\n }\n\n /**\n * Checks whether the input is a definition of a host rule.\n */\n static isHostRule(input: unknown): boolean {\n const typed = input as IHostRule\n if (input && typed.kind && typed.kind === Kind) {\n return true\n }\n return false\n }\n\n toJSON(): IHostRule {\n const result: IHostRule = {\n kind: Kind,\n key: this.key,\n from: this.from,\n to: this.to,\n }\n if (typeof this.enabled === 'boolean') {\n result.enabled = this.enabled\n }\n if (this.comment) {\n result.comment = this.comment\n }\n return result\n }\n\n /**\n * Applies `hosts` rules to the URL.\n *\n * @param value An URL to apply the rules to\n * @param rules List of host rules. It is a list of objects containing `from` and `to` properties.\n * @return Evaluated URL with hosts rules.\n */\n static applyHosts(value: string, rules: HostRule[]): string {\n if (!rules || !rules.length) {\n return value\n }\n for (const rule of rules) {\n const result = HostRule.evaluateRule(value, rule)\n if (result) {\n value = result\n }\n }\n return value\n }\n\n /**\n * Evaluates hosts rule and applies it to the `url`.\n * @param {string} url The URL to evaluate\n * @param {HostRule} rule The host rule definition\n * @return {string} Processed url.\n */\n static evaluateRule(url: string, rule: HostRule): string | undefined {\n if (!rule || !rule.from || !rule.to) {\n return\n }\n const re = HostRule.createRuleRe(rule.from)\n if (!re.test(url)) {\n return\n }\n return url.replace(re, rule.to)\n }\n\n /**\n * @param input Rule body\n * @return Regular expression for the rule.\n */\n static createRuleRe(input: string): RegExp {\n input = input.replace(/\\*/g, '(.*)')\n return new RegExp(input, 'gi')\n }\n}\n"]}
@@ -11,7 +11,7 @@ import { ProjectFolder } from './ProjectFolder.js';
11
11
  import { ProjectRequest, Kind as ProjectRequestKind } from './ProjectRequest.js';
12
12
  import { ProjectSchema } from './ProjectSchema.js';
13
13
  import { Request } from './Request.js';
14
- import v4 from '../lib/uuid.js';
14
+ import { nanoid } from 'nanoid';
15
15
  import { PostmanDataTransformer } from './transformers/PostmanDataTransformer.js';
16
16
  import { Certificate } from './ClientCertificate.js';
17
17
  import { ProjectFolderKind } from './kinds.js';
@@ -122,7 +122,7 @@ export class HttpProject extends ProjectParent {
122
122
  else {
123
123
  init = {
124
124
  kind: Kind,
125
- key: v4(),
125
+ key: nanoid(),
126
126
  definitions: {},
127
127
  items: [],
128
128
  info: Thing.fromName('').toJSON(),
@@ -139,7 +139,7 @@ export class HttpProject extends ProjectParent {
139
139
  if (!init || !init.definitions || !init.items) {
140
140
  throw new Error(`Not a project.`);
141
141
  }
142
- const { key = v4(), definitions = {}, items, info, license, provider } = init;
142
+ const { key = nanoid(), definitions = {}, items, info, license, provider } = init;
143
143
  this.key = key;
144
144
  if (license) {
145
145
  this.license = new License(license);
@@ -477,7 +477,7 @@ export class HttpProject extends ProjectParent {
477
477
  finalRequest = new ProjectRequest(this, request);
478
478
  }
479
479
  if (!finalRequest.key) {
480
- finalRequest.key = v4();
480
+ finalRequest.key = nanoid();
481
481
  }
482
482
  let root;
483
483
  if (opts.parent) {
@@ -762,7 +762,7 @@ export class HttpProject extends ProjectParent {
762
762
  clone(opts = {}) {
763
763
  const copy = new HttpProject(this.toJSON());
764
764
  if (!opts.withoutRevalidate) {
765
- copy.key = v4();
765
+ copy.key = nanoid();
766
766
  HttpProject.regenerateKeys(copy);
767
767
  }
768
768
  return copy;
@@ -793,7 +793,7 @@ export class HttpProject extends ProjectParent {
793
793
  if (!indexObject) {
794
794
  return;
795
795
  }
796
- const newKey = v4();
796
+ const newKey = nanoid();
797
797
  indexObject.key = newKey;
798
798
  folder.key = newKey;
799
799
  });
@@ -803,15 +803,15 @@ export class HttpProject extends ProjectParent {
803
803
  if (!indexObject) {
804
804
  return;
805
805
  }
806
- const newKey = v4();
806
+ const newKey = nanoid();
807
807
  indexObject.key = newKey;
808
808
  request.key = newKey;
809
809
  });
810
810
  (definitions.schemas || []).forEach((schema) => {
811
- schema.key = v4();
811
+ schema.key = nanoid();
812
812
  });
813
813
  (definitions.certificates || []).forEach((cert) => {
814
- cert.key = v4();
814
+ cert.key = nanoid();
815
815
  });
816
816
  (definitions.environments || []).forEach((environment) => {
817
817
  const oldKey = environment.key;
@@ -819,7 +819,7 @@ export class HttpProject extends ProjectParent {
819
819
  if (!indexObject) {
820
820
  return;
821
821
  }
822
- const newKey = v4();
822
+ const newKey = nanoid();
823
823
  indexObject.key = newKey;
824
824
  environment.key = newKey;
825
825
  });
@@ -853,7 +853,7 @@ export class HttpProject extends ProjectParent {
853
853
  finalSchema = new ProjectSchema(schema);
854
854
  }
855
855
  if (!finalSchema.key) {
856
- finalSchema.key = v4();
856
+ finalSchema.key = nanoid();
857
857
  }
858
858
  const { index } = opts;
859
859
  const hasIndex = typeof index === 'number';
@@ -1042,7 +1042,7 @@ export class HttpProject extends ProjectParent {
1042
1042
  finalEnv = new Environment(env);
1043
1043
  }
1044
1044
  if (!finalEnv.key) {
1045
- finalEnv.key = v4();
1045
+ finalEnv.key = nanoid();
1046
1046
  }
1047
1047
  return finalEnv;
1048
1048
  }