@webiny/api-core 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.b9b64acb6d

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 (168) hide show
  1. package/ApiCoreFeature.js +2 -0
  2. package/ApiCoreFeature.js.map +1 -1
  3. package/exports/api/{buildParams.js → build-params.js} +1 -1
  4. package/exports/api/build-params.js.map +1 -0
  5. package/exports/api/{eventPublisher.js → event-publisher.js} +1 -1
  6. package/exports/api/event-publisher.js.map +1 -0
  7. package/exports/api/{keyValueStore.js → key-value-store.js} +1 -1
  8. package/exports/api/key-value-store.js.map +1 -0
  9. package/exports/api/security/{apiKey.js → api-key.js} +1 -1
  10. package/exports/api/security/api-key.js.map +1 -0
  11. package/features/featureFlags/FeatureFlags.d.ts +12 -0
  12. package/features/featureFlags/FeatureFlags.js +18 -0
  13. package/features/featureFlags/FeatureFlags.js.map +1 -0
  14. package/features/featureFlags/abstractions.d.ts +8 -0
  15. package/features/featureFlags/abstractions.js +4 -0
  16. package/features/featureFlags/abstractions.js.map +1 -0
  17. package/features/featureFlags/feature.d.ts +1 -0
  18. package/features/featureFlags/feature.js +10 -0
  19. package/features/featureFlags/feature.js.map +1 -0
  20. package/features/security/IdentityContext/IdentityContext.js +1 -1
  21. package/features/security/IdentityContext/IdentityContext.js.map +1 -1
  22. package/features/security/permissions/createPermissions.d.ts +8 -0
  23. package/features/security/permissions/createPermissions.js +240 -0
  24. package/features/security/permissions/createPermissions.js.map +1 -0
  25. package/features/security/permissions/index.d.ts +2 -0
  26. package/features/security/permissions/index.js +3 -0
  27. package/features/security/permissions/index.js.map +1 -0
  28. package/features/security/permissions/types.d.ts +137 -0
  29. package/features/security/permissions/types.js +3 -0
  30. package/features/security/permissions/types.js.map +1 -0
  31. package/features/wcp/WcpContext/WcpContext.d.ts +2 -0
  32. package/features/wcp/WcpContext/WcpContext.js +6 -0
  33. package/features/wcp/WcpContext/WcpContext.js.map +1 -1
  34. package/features/wcp/WcpContext/abstractions.d.ts +1 -0
  35. package/features/wcp/WcpContext/abstractions.js.map +1 -1
  36. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +79 -0
  37. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +121 -0
  38. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -0
  39. package/features/wcp/WcpFeature.js +2 -0
  40. package/features/wcp/WcpFeature.js.map +1 -1
  41. package/graphql/wcp/graphql.js +1 -1
  42. package/graphql/wcp/graphql.js.map +1 -1
  43. package/legacy/wcp/LegacyWcpContext.d.ts +2 -0
  44. package/legacy/wcp/LegacyWcpContext.js +6 -0
  45. package/legacy/wcp/LegacyWcpContext.js.map +1 -1
  46. package/package.json +18 -19
  47. package/exports/api/buildParams.js.map +0 -1
  48. package/exports/api/eventPublisher.js.map +0 -1
  49. package/exports/api/keyValueStore.js.map +0 -1
  50. package/exports/api/security/apiKey.js.map +0 -1
  51. package/extensions/BuildParam.d.ts +0 -11
  52. package/extensions/BuildParam.js +0 -119
  53. package/extensions/BuildParam.js.map +0 -1
  54. package/extensions/GenericExtension.d.ts +0 -10
  55. package/extensions/GenericExtension.js +0 -7
  56. package/extensions/GenericExtension.js.map +0 -1
  57. package/extensions/eventHandlers/AfterAuthentication.d.ts +0 -10
  58. package/extensions/eventHandlers/AfterAuthentication.js +0 -9
  59. package/extensions/eventHandlers/AfterAuthentication.js.map +0 -1
  60. package/extensions/eventHandlers/ApiKeyAfterCreate.d.ts +0 -10
  61. package/extensions/eventHandlers/ApiKeyAfterCreate.js +0 -9
  62. package/extensions/eventHandlers/ApiKeyAfterCreate.js.map +0 -1
  63. package/extensions/eventHandlers/ApiKeyAfterDelete.d.ts +0 -10
  64. package/extensions/eventHandlers/ApiKeyAfterDelete.js +0 -9
  65. package/extensions/eventHandlers/ApiKeyAfterDelete.js.map +0 -1
  66. package/extensions/eventHandlers/ApiKeyAfterUpdate.d.ts +0 -10
  67. package/extensions/eventHandlers/ApiKeyAfterUpdate.js +0 -9
  68. package/extensions/eventHandlers/ApiKeyAfterUpdate.js.map +0 -1
  69. package/extensions/eventHandlers/ApiKeyBeforeCreate.d.ts +0 -10
  70. package/extensions/eventHandlers/ApiKeyBeforeCreate.js +0 -9
  71. package/extensions/eventHandlers/ApiKeyBeforeCreate.js.map +0 -1
  72. package/extensions/eventHandlers/ApiKeyBeforeDelete.d.ts +0 -10
  73. package/extensions/eventHandlers/ApiKeyBeforeDelete.js +0 -9
  74. package/extensions/eventHandlers/ApiKeyBeforeDelete.js.map +0 -1
  75. package/extensions/eventHandlers/ApiKeyBeforeUpdate.d.ts +0 -10
  76. package/extensions/eventHandlers/ApiKeyBeforeUpdate.js +0 -9
  77. package/extensions/eventHandlers/ApiKeyBeforeUpdate.js.map +0 -1
  78. package/extensions/eventHandlers/BeforeAuthentication.d.ts +0 -10
  79. package/extensions/eventHandlers/BeforeAuthentication.js +0 -9
  80. package/extensions/eventHandlers/BeforeAuthentication.js.map +0 -1
  81. package/extensions/eventHandlers/RoleAfterCreate.d.ts +0 -10
  82. package/extensions/eventHandlers/RoleAfterCreate.js +0 -9
  83. package/extensions/eventHandlers/RoleAfterCreate.js.map +0 -1
  84. package/extensions/eventHandlers/RoleAfterDelete.d.ts +0 -10
  85. package/extensions/eventHandlers/RoleAfterDelete.js +0 -9
  86. package/extensions/eventHandlers/RoleAfterDelete.js.map +0 -1
  87. package/extensions/eventHandlers/RoleAfterUpdate.d.ts +0 -10
  88. package/extensions/eventHandlers/RoleAfterUpdate.js +0 -9
  89. package/extensions/eventHandlers/RoleAfterUpdate.js.map +0 -1
  90. package/extensions/eventHandlers/RoleBeforeCreate.d.ts +0 -10
  91. package/extensions/eventHandlers/RoleBeforeCreate.js +0 -9
  92. package/extensions/eventHandlers/RoleBeforeCreate.js.map +0 -1
  93. package/extensions/eventHandlers/RoleBeforeDelete.d.ts +0 -10
  94. package/extensions/eventHandlers/RoleBeforeDelete.js +0 -9
  95. package/extensions/eventHandlers/RoleBeforeDelete.js.map +0 -1
  96. package/extensions/eventHandlers/RoleBeforeUpdate.d.ts +0 -10
  97. package/extensions/eventHandlers/RoleBeforeUpdate.js +0 -9
  98. package/extensions/eventHandlers/RoleBeforeUpdate.js.map +0 -1
  99. package/extensions/eventHandlers/SystemInstalled.d.ts +0 -10
  100. package/extensions/eventHandlers/SystemInstalled.js +0 -9
  101. package/extensions/eventHandlers/SystemInstalled.js.map +0 -1
  102. package/extensions/eventHandlers/TeamAfterCreate.d.ts +0 -10
  103. package/extensions/eventHandlers/TeamAfterCreate.js +0 -9
  104. package/extensions/eventHandlers/TeamAfterCreate.js.map +0 -1
  105. package/extensions/eventHandlers/TeamAfterDelete.d.ts +0 -10
  106. package/extensions/eventHandlers/TeamAfterDelete.js +0 -9
  107. package/extensions/eventHandlers/TeamAfterDelete.js.map +0 -1
  108. package/extensions/eventHandlers/TeamAfterUpdate.d.ts +0 -10
  109. package/extensions/eventHandlers/TeamAfterUpdate.js +0 -9
  110. package/extensions/eventHandlers/TeamAfterUpdate.js.map +0 -1
  111. package/extensions/eventHandlers/TeamBeforeCreate.d.ts +0 -10
  112. package/extensions/eventHandlers/TeamBeforeCreate.js +0 -9
  113. package/extensions/eventHandlers/TeamBeforeCreate.js.map +0 -1
  114. package/extensions/eventHandlers/TeamBeforeDelete.d.ts +0 -10
  115. package/extensions/eventHandlers/TeamBeforeDelete.js +0 -9
  116. package/extensions/eventHandlers/TeamBeforeDelete.js.map +0 -1
  117. package/extensions/eventHandlers/TeamBeforeUpdate.d.ts +0 -10
  118. package/extensions/eventHandlers/TeamBeforeUpdate.js +0 -9
  119. package/extensions/eventHandlers/TeamBeforeUpdate.js.map +0 -1
  120. package/extensions/eventHandlers/TenantAfterCreate.d.ts +0 -10
  121. package/extensions/eventHandlers/TenantAfterCreate.js +0 -9
  122. package/extensions/eventHandlers/TenantAfterCreate.js.map +0 -1
  123. package/extensions/eventHandlers/TenantAfterDelete.d.ts +0 -10
  124. package/extensions/eventHandlers/TenantAfterDelete.js +0 -9
  125. package/extensions/eventHandlers/TenantAfterDelete.js.map +0 -1
  126. package/extensions/eventHandlers/TenantAfterUpdate.d.ts +0 -10
  127. package/extensions/eventHandlers/TenantAfterUpdate.js +0 -9
  128. package/extensions/eventHandlers/TenantAfterUpdate.js.map +0 -1
  129. package/extensions/eventHandlers/TenantBeforeCreate.d.ts +0 -10
  130. package/extensions/eventHandlers/TenantBeforeCreate.js +0 -9
  131. package/extensions/eventHandlers/TenantBeforeCreate.js.map +0 -1
  132. package/extensions/eventHandlers/TenantBeforeDelete.d.ts +0 -10
  133. package/extensions/eventHandlers/TenantBeforeDelete.js +0 -9
  134. package/extensions/eventHandlers/TenantBeforeDelete.js.map +0 -1
  135. package/extensions/eventHandlers/TenantBeforeUpdate.d.ts +0 -10
  136. package/extensions/eventHandlers/TenantBeforeUpdate.js +0 -9
  137. package/extensions/eventHandlers/TenantBeforeUpdate.js.map +0 -1
  138. package/extensions/eventHandlers/TenantInstalled.d.ts +0 -10
  139. package/extensions/eventHandlers/TenantInstalled.js +0 -9
  140. package/extensions/eventHandlers/TenantInstalled.js.map +0 -1
  141. package/extensions/eventHandlers/UserAfterCreate.d.ts +0 -10
  142. package/extensions/eventHandlers/UserAfterCreate.js +0 -9
  143. package/extensions/eventHandlers/UserAfterCreate.js.map +0 -1
  144. package/extensions/eventHandlers/UserAfterDelete.d.ts +0 -10
  145. package/extensions/eventHandlers/UserAfterDelete.js +0 -9
  146. package/extensions/eventHandlers/UserAfterDelete.js.map +0 -1
  147. package/extensions/eventHandlers/UserAfterUpdate.d.ts +0 -10
  148. package/extensions/eventHandlers/UserAfterUpdate.js +0 -9
  149. package/extensions/eventHandlers/UserAfterUpdate.js.map +0 -1
  150. package/extensions/eventHandlers/UserBeforeCreate.d.ts +0 -10
  151. package/extensions/eventHandlers/UserBeforeCreate.js +0 -9
  152. package/extensions/eventHandlers/UserBeforeCreate.js.map +0 -1
  153. package/extensions/eventHandlers/UserBeforeDelete.d.ts +0 -10
  154. package/extensions/eventHandlers/UserBeforeDelete.js +0 -9
  155. package/extensions/eventHandlers/UserBeforeDelete.js.map +0 -1
  156. package/extensions/eventHandlers/UserBeforeUpdate.d.ts +0 -10
  157. package/extensions/eventHandlers/UserBeforeUpdate.js +0 -9
  158. package/extensions/eventHandlers/UserBeforeUpdate.js.map +0 -1
  159. package/extensions/eventHandlers/index.d.ts +0 -34
  160. package/extensions/eventHandlers/index.js +0 -49
  161. package/extensions/eventHandlers/index.js.map +0 -1
  162. package/extensions/index.d.ts +0 -58
  163. package/extensions/index.js +0 -49
  164. package/extensions/index.js.map +0 -1
  165. /package/exports/api/{buildParams.d.ts → build-params.d.ts} +0 -0
  166. /package/exports/api/{eventPublisher.d.ts → event-publisher.d.ts} +0 -0
  167. /package/exports/api/{keyValueStore.d.ts → key-value-store.d.ts} +0 -0
  168. /package/exports/api/security/{apiKey.d.ts → api-key.d.ts} +0 -0
package/ApiCoreFeature.js CHANGED
@@ -8,6 +8,7 @@ import { AdminUsersFeature } from "./features/users/AdminUsersFeature.js";
8
8
  import { IdpAuthenticatorFeature } from "./idp/feature.js";
9
9
  import { KeyValueStoreFeature } from "./features/keyValueStore/feature.js";
10
10
  import { BuildParamsFeature } from "./features/buildParams/feature.js";
11
+ import { FeatureFlagsFeature } from "./features/featureFlags/feature.js";
11
12
  export const ApiCoreFeature = createFeature({
12
13
  name: "ApiCore",
13
14
  register(container, config) {
@@ -15,6 +16,7 @@ export const ApiCoreFeature = createFeature({
15
16
  LoggerFeature.register(container);
16
17
  EventPublisherFeature.register(container);
17
18
  BuildParamsFeature.register(container);
19
+ FeatureFlagsFeature.register(container);
18
20
  TenancyFeature.register(container, config.tenancyStorageOperations);
19
21
  SecurityFeature.register(container, config.securityStorageOperations);
20
22
  AdminUsersFeature.register(container, config.usersStorageOperations);
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","EventPublisherFeature","LoggerFeature","SecurityFeature","SystemFeature","TenancyFeature","AdminUsersFeature","IdpAuthenticatorFeature","KeyValueStoreFeature","BuildParamsFeature","ApiCoreFeature","name","register","container","config","tenancyStorageOperations","securityStorageOperations","usersStorageOperations","keyValueStorageOperations"],"sources":["ApiCoreFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { Container } from \"@webiny/di\";\nimport { EventPublisherFeature } from \"~/features/eventPublisher/feature.js\";\nimport { LoggerFeature } from \"~/features/logger/feature.js\";\nimport { SecurityFeature } from \"~/features/security/SecurityFeature.js\";\nimport { SystemFeature } from \"~/features/system/SystemFeature.js\";\nimport { TenancyFeature } from \"./features/tenancy/TenancyFeature.js\";\nimport { AdminUsersFeature } from \"~/features/users/AdminUsersFeature.js\";\nimport type { ApiCoreStorageOperations } from \"~/types/core.js\";\nimport { IdpAuthenticatorFeature } from \"~/idp/feature.js\";\nimport { KeyValueStoreFeature } from \"~/features/keyValueStore/feature.js\";\nimport { BuildParamsFeature } from \"~/features/buildParams/feature.js\";\n\nexport const ApiCoreFeature = createFeature({\n name: \"ApiCore\",\n register(container: Container, config: ApiCoreStorageOperations) {\n // Register features\n LoggerFeature.register(container);\n EventPublisherFeature.register(container);\n BuildParamsFeature.register(container);\n TenancyFeature.register(container, config.tenancyStorageOperations);\n SecurityFeature.register(container, config.securityStorageOperations);\n AdminUsersFeature.register(container, config.usersStorageOperations);\n KeyValueStoreFeature.register(container, config.keyValueStorageOperations);\n SystemFeature.register(container);\n IdpAuthenticatorFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AAEnD,SAASC,qBAAqB;AAC9B,SAASC,aAAa;AACtB,SAASC,eAAe;AACxB,SAASC,aAAa;AACtB,SAASC,cAAc;AACvB,SAASC,iBAAiB;AAE1B,SAASC,uBAAuB;AAChC,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,cAAc,GAAGV,aAAa,CAAC;EACxCW,IAAI,EAAE,SAAS;EACfC,QAAQA,CAACC,SAAoB,EAAEC,MAAgC,EAAE;IAC7D;IACAZ,aAAa,CAACU,QAAQ,CAACC,SAAS,CAAC;IACjCZ,qBAAqB,CAACW,QAAQ,CAACC,SAAS,CAAC;IACzCJ,kBAAkB,CAACG,QAAQ,CAACC,SAAS,CAAC;IACtCR,cAAc,CAACO,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACC,wBAAwB,CAAC;IACnEZ,eAAe,CAACS,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACE,yBAAyB,CAAC;IACrEV,iBAAiB,CAACM,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACG,sBAAsB,CAAC;IACpET,oBAAoB,CAACI,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACI,yBAAyB,CAAC;IAC1Ed,aAAa,CAACQ,QAAQ,CAACC,SAAS,CAAC;IACjCN,uBAAuB,CAACK,QAAQ,CAACC,SAAS,CAAC;EAC/C;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createFeature","EventPublisherFeature","LoggerFeature","SecurityFeature","SystemFeature","TenancyFeature","AdminUsersFeature","IdpAuthenticatorFeature","KeyValueStoreFeature","BuildParamsFeature","FeatureFlagsFeature","ApiCoreFeature","name","register","container","config","tenancyStorageOperations","securityStorageOperations","usersStorageOperations","keyValueStorageOperations"],"sources":["ApiCoreFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { Container } from \"@webiny/di\";\nimport { EventPublisherFeature } from \"~/features/eventPublisher/feature.js\";\nimport { LoggerFeature } from \"~/features/logger/feature.js\";\nimport { SecurityFeature } from \"~/features/security/SecurityFeature.js\";\nimport { SystemFeature } from \"~/features/system/SystemFeature.js\";\nimport { TenancyFeature } from \"./features/tenancy/TenancyFeature.js\";\nimport { AdminUsersFeature } from \"~/features/users/AdminUsersFeature.js\";\nimport type { ApiCoreStorageOperations } from \"~/types/core.js\";\nimport { IdpAuthenticatorFeature } from \"~/idp/feature.js\";\nimport { KeyValueStoreFeature } from \"~/features/keyValueStore/feature.js\";\nimport { BuildParamsFeature } from \"~/features/buildParams/feature.js\";\nimport { FeatureFlagsFeature } from \"~/features/featureFlags/feature.js\";\n\nexport const ApiCoreFeature = createFeature({\n name: \"ApiCore\",\n register(container: Container, config: ApiCoreStorageOperations) {\n // Register features\n LoggerFeature.register(container);\n EventPublisherFeature.register(container);\n BuildParamsFeature.register(container);\n FeatureFlagsFeature.register(container);\n TenancyFeature.register(container, config.tenancyStorageOperations);\n SecurityFeature.register(container, config.securityStorageOperations);\n AdminUsersFeature.register(container, config.usersStorageOperations);\n KeyValueStoreFeature.register(container, config.keyValueStorageOperations);\n SystemFeature.register(container);\n IdpAuthenticatorFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AAEnD,SAASC,qBAAqB;AAC9B,SAASC,aAAa;AACtB,SAASC,eAAe;AACxB,SAASC,aAAa;AACtB,SAASC,cAAc;AACvB,SAASC,iBAAiB;AAE1B,SAASC,uBAAuB;AAChC,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;AAE5B,OAAO,MAAMC,cAAc,GAAGX,aAAa,CAAC;EACxCY,IAAI,EAAE,SAAS;EACfC,QAAQA,CAACC,SAAoB,EAAEC,MAAgC,EAAE;IAC7D;IACAb,aAAa,CAACW,QAAQ,CAACC,SAAS,CAAC;IACjCb,qBAAqB,CAACY,QAAQ,CAACC,SAAS,CAAC;IACzCL,kBAAkB,CAACI,QAAQ,CAACC,SAAS,CAAC;IACtCJ,mBAAmB,CAACG,QAAQ,CAACC,SAAS,CAAC;IACvCT,cAAc,CAACQ,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACC,wBAAwB,CAAC;IACnEb,eAAe,CAACU,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACE,yBAAyB,CAAC;IACrEX,iBAAiB,CAACO,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACG,sBAAsB,CAAC;IACpEV,oBAAoB,CAACK,QAAQ,CAACC,SAAS,EAAEC,MAAM,CAACI,yBAAyB,CAAC;IAC1Ef,aAAa,CAACS,QAAQ,CAACC,SAAS,CAAC;IACjCP,uBAAuB,CAACM,QAAQ,CAACC,SAAS,CAAC;EAC/C;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  export { BuildParam, BuildParams } from "../../features/buildParams/index.js";
2
2
 
3
- //# sourceMappingURL=buildParams.js.map
3
+ //# sourceMappingURL=build-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BuildParam","BuildParams"],"sources":["build-params.ts"],"sourcesContent":["export { BuildParam, BuildParams } from \"~/features/buildParams/index.js\";\n"],"mappings":"AAAA,SAASA,UAAU,EAAEC,WAAW","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  export { DomainEvent, EventPublisher } from "../../features/eventPublisher/index.js";
2
2
 
3
- //# sourceMappingURL=eventPublisher.js.map
3
+ //# sourceMappingURL=event-publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DomainEvent","EventPublisher"],"sources":["event-publisher.ts"],"sourcesContent":["export { DomainEvent, EventPublisher } from \"~/features/eventPublisher/index.js\";\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,cAAc","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  export { GlobalKeyValueStore, KeyValueStore } from "../../features/keyValueStore/index.js";
2
2
 
3
- //# sourceMappingURL=keyValueStore.js.map
3
+ //# sourceMappingURL=key-value-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GlobalKeyValueStore","KeyValueStore"],"sources":["key-value-store.ts"],"sourcesContent":["export { GlobalKeyValueStore, KeyValueStore } from \"~/features/keyValueStore/index.js\";\n"],"mappings":"AAAA,SAASA,mBAAmB,EAAEC,aAAa","ignoreList":[]}
@@ -6,4 +6,4 @@ export { ListApiKeysUseCase } from "../../../features/security/apiKeys/ListApiKe
6
6
  export { ApiKeyAfterUpdateHandler, ApiKeyBeforeUpdateHandler, UpdateApiKeyUseCase } from "../../../features/security/apiKeys/UpdateApiKey/index.js";
7
7
  export { ApiKeyFactory } from "../../../features/security/apiKeys/shared/abstractions.js";
8
8
 
9
- //# sourceMappingURL=apiKey.js.map
9
+ //# sourceMappingURL=api-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ApiKeyAfterCreateHandler","ApiKeyBeforeCreateHandler","CreateApiKeyUseCase","ApiKeyAfterDeleteHandler","ApiKeyBeforeDeleteHandler","DeleteApiKeyUseCase","GetApiKeyUseCase","GetApiKeyByTokenUseCase","ListApiKeysUseCase","ApiKeyAfterUpdateHandler","ApiKeyBeforeUpdateHandler","UpdateApiKeyUseCase","ApiKeyFactory"],"sources":["api-key.ts"],"sourcesContent":["export {\n ApiKeyAfterCreateHandler,\n ApiKeyBeforeCreateHandler,\n CreateApiKeyUseCase\n} from \"~/features/security/apiKeys/CreateApiKey/index.js\";\n\nexport {\n ApiKeyAfterDeleteHandler,\n ApiKeyBeforeDeleteHandler,\n DeleteApiKeyUseCase\n} from \"~/features/security/apiKeys/DeleteApiKey/index.js\";\n\nexport { GetApiKeyUseCase } from \"~/features/security/apiKeys/GetApiKey/index.js\";\nexport { GetApiKeyByTokenUseCase } from \"~/features/security/apiKeys/GetApiKeyByToken/index.js\";\nexport { ListApiKeysUseCase } from \"~/features/security/apiKeys/ListApiKeys/index.js\";\nexport {\n ApiKeyAfterUpdateHandler,\n ApiKeyBeforeUpdateHandler,\n UpdateApiKeyUseCase\n} from \"~/features/security/apiKeys/UpdateApiKey/index.js\";\nexport { ApiKeyFactory } from \"~/features/security/apiKeys/shared/abstractions.js\";\n"],"mappings":"AAAA,SACIA,wBAAwB,EACxBC,yBAAyB,EACzBC,mBAAmB;AAGvB,SACIC,wBAAwB,EACxBC,yBAAyB,EACzBC,mBAAmB;AAGvB,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAChC,SAASC,kBAAkB;AAC3B,SACIC,wBAAwB,EACxBC,yBAAyB,EACzBC,mBAAmB;AAEvB,SAASC,aAAa","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import { FeatureFlags as FeatureFlagsAbstraction } from "./abstractions.js";
2
+ import { BuildParams } from "../buildParams/abstractions.js";
3
+ import { FeatureFlags as FeatureFlagsClass } from "@webiny/feature-flags";
4
+ declare class FeatureFlagsImpl implements FeatureFlagsAbstraction.Interface {
5
+ private buildParams;
6
+ constructor(buildParams: BuildParams.Interface);
7
+ get(): FeatureFlagsClass;
8
+ }
9
+ export declare const FeatureFlags: typeof FeatureFlagsImpl & {
10
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IFeatureFlagsAbstraction>;
11
+ };
12
+ export {};
@@ -0,0 +1,18 @@
1
+ import { FeatureFlags as FeatureFlagsAbstraction } from "./abstractions.js";
2
+ import { BuildParams } from "../buildParams/abstractions.js";
3
+ import { FeatureFlags as FeatureFlagsClass } from "@webiny/feature-flags";
4
+ class FeatureFlagsImpl {
5
+ constructor(buildParams) {
6
+ this.buildParams = buildParams;
7
+ }
8
+ get() {
9
+ const raw = this.buildParams.get("FeatureFlags") ?? {};
10
+ return FeatureFlagsClass.fromDto(raw);
11
+ }
12
+ }
13
+ export const FeatureFlags = FeatureFlagsAbstraction.createImplementation({
14
+ implementation: FeatureFlagsImpl,
15
+ dependencies: [BuildParams]
16
+ });
17
+
18
+ //# sourceMappingURL=FeatureFlags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FeatureFlags","FeatureFlagsAbstraction","BuildParams","FeatureFlagsClass","FeatureFlagsImpl","constructor","buildParams","get","raw","fromDto","createImplementation","implementation","dependencies"],"sources":["FeatureFlags.ts"],"sourcesContent":["import { FeatureFlags as FeatureFlagsAbstraction } from \"./abstractions.js\";\nimport { BuildParams } from \"../buildParams/abstractions.js\";\nimport { FeatureFlags as FeatureFlagsClass } from \"@webiny/feature-flags\";\nimport type { IFeatureFlagsDto } from \"@webiny/feature-flags\";\n\nclass FeatureFlagsImpl implements FeatureFlagsAbstraction.Interface {\n constructor(private buildParams: BuildParams.Interface) {}\n\n get(): FeatureFlagsClass {\n const raw = this.buildParams.get<IFeatureFlagsDto>(\"FeatureFlags\") ?? {};\n return FeatureFlagsClass.fromDto(raw);\n }\n}\n\nexport const FeatureFlags = FeatureFlagsAbstraction.createImplementation({\n implementation: FeatureFlagsImpl,\n dependencies: [BuildParams]\n});\n"],"mappings":"AAAA,SAASA,YAAY,IAAIC,uBAAuB;AAChD,SAASC,WAAW;AACpB,SAASF,YAAY,IAAIG,iBAAiB,QAAQ,uBAAuB;AAGzE,MAAMC,gBAAgB,CAA8C;EAChEC,WAAWA,CAASC,WAAkC,EAAE;IAAA,KAApCA,WAAkC,GAAlCA,WAAkC;EAAG;EAEzDC,GAAGA,CAAA,EAAsB;IACrB,MAAMC,GAAG,GAAG,IAAI,CAACF,WAAW,CAACC,GAAG,CAAmB,cAAc,CAAC,IAAI,CAAC,CAAC;IACxE,OAAOJ,iBAAiB,CAACM,OAAO,CAACD,GAAG,CAAC;EACzC;AACJ;AAEA,OAAO,MAAMR,YAAY,GAAGC,uBAAuB,CAACS,oBAAoB,CAAC;EACrEC,cAAc,EAAEP,gBAAgB;EAChCQ,YAAY,EAAE,CAACV,WAAW;AAC9B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import { FeatureFlags as FeatureFlagsClass } from "@webiny/feature-flags";
2
+ export interface IFeatureFlagsAbstraction {
3
+ get(): FeatureFlagsClass;
4
+ }
5
+ export declare const FeatureFlags: import("@webiny/di").Abstraction<IFeatureFlagsAbstraction>;
6
+ export declare namespace FeatureFlags {
7
+ type Interface = IFeatureFlagsAbstraction;
8
+ }
@@ -0,0 +1,4 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const FeatureFlags = createAbstraction("FeatureFlags");
3
+
4
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","FeatureFlags"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { FeatureFlags as FeatureFlagsClass } from \"@webiny/feature-flags\";\n\nexport interface IFeatureFlagsAbstraction {\n get(): FeatureFlagsClass;\n}\n\nexport const FeatureFlags = createAbstraction<IFeatureFlagsAbstraction>(\"FeatureFlags\");\n\nexport namespace FeatureFlags {\n export type Interface = IFeatureFlagsAbstraction;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAOvD,OAAO,MAAMC,YAAY,GAAGD,iBAAiB,CAA2B,cAAc,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const FeatureFlagsFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,10 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { FeatureFlags } from "./FeatureFlags.js";
3
+ export const FeatureFlagsFeature = createFeature({
4
+ name: "FeatureFlags",
5
+ register(container) {
6
+ container.register(FeatureFlags);
7
+ }
8
+ });
9
+
10
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","FeatureFlags","FeatureFlagsFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { FeatureFlags } from \"./FeatureFlags.js\";\n\nexport const FeatureFlagsFeature = createFeature({\n name: \"FeatureFlags\",\n register(container: Container) {\n container.register(FeatureFlags);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AAEnD,SAASC,YAAY;AAErB,OAAO,MAAMC,mBAAmB,GAAGF,aAAa,CAAC;EAC7CG,IAAI,EAAE,cAAc;EACpBC,QAAQA,CAACC,SAAoB,EAAE;IAC3BA,SAAS,CAACD,QAAQ,CAACH,YAAY,CAAC;EACpC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { AsyncLocalStorage } from "async_hooks";
2
- import minimatch from "minimatch";
2
+ import { minimatch } from "minimatch";
3
3
  import { createImplementation } from "@webiny/di";
4
4
  import { IdentityContext as Abstraction } from "./abstractions.js";
5
5
  import { AnonymousIdentity } from "./AnonymousIdentity.js";
@@ -1 +1 @@
1
- {"version":3,"names":["AsyncLocalStorage","minimatch","createImplementation","IdentityContext","Abstraction","AnonymousIdentity","AuthorizationContext","filterOutCustomWbyAppsPermissions","WcpContext","identityStorage","IdentityContextImpl","identity","constructor","authorizationContext","wcpContext","getIdentity","override","getStore","undefined","setIdentity","clearPermissionsCache","withIdentity","cb","run","withoutAuthorization","isAuthorizationEnabled","getPermission","name","permissions","listPermissions","exactMatch","find","p","patternMatch","getPermissions","filter","loadPermissions","applyAaclLogic","hasFullAccess","some","aaclEnabled","canUseAacl","teamsEnabled","canUseTeams","teams","abstraction","implementation","dependencies"],"sources":["IdentityContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport minimatch from \"minimatch\";\nimport { createImplementation } from \"@webiny/di\";\nimport { IdentityContext as Abstraction } from \"./abstractions.js\";\nimport { Identity } from \"./Identity.js\";\nimport { AnonymousIdentity } from \"./AnonymousIdentity.js\";\nimport { AuthorizationContext } from \"../authorization/AuthorizationContext/index.js\";\nimport { filterOutCustomWbyAppsPermissions } from \"../utils/filterOutCustomWbyAppsPermissions.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport type { AaclPermission } from \"../../wcp/WcpContext/types.js\";\nimport { WcpContext } from \"../../wcp/WcpContext/index.js\";\n\nconst identityStorage = new AsyncLocalStorage<Identity | undefined>();\n\nclass IdentityContextImpl implements Abstraction.Interface {\n private identity: Identity = new AnonymousIdentity();\n\n constructor(\n private authorizationContext: AuthorizationContext.Interface,\n private wcpContext: WcpContext.Interface\n ) {}\n\n // ========================================================================\n // Identity Methods\n // ========================================================================\n\n getIdentity(): Identity {\n // Check for identity override first (from withIdentity())\n const override = identityStorage.getStore();\n if (override !== undefined) {\n return override;\n }\n return this.identity;\n }\n\n setIdentity(identity: Identity | undefined): void {\n // If undefined, set to anonymous identity\n this.identity = identity ?? new AnonymousIdentity();\n\n // Clear permissions cache when identity changes\n this.authorizationContext.clearPermissionsCache();\n }\n\n withIdentity<T>(identity: Identity | undefined, cb: () => Promise<T>): Promise<T> {\n return identityStorage.run(identity, cb);\n }\n\n // ========================================================================\n // Authorization State Methods\n // ========================================================================\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return this.authorizationContext.withoutAuthorization(cb);\n }\n\n isAuthorizationEnabled(): boolean {\n return this.authorizationContext.isAuthorizationEnabled();\n }\n\n // ========================================================================\n // Permission Methods\n // ========================================================================\n\n async getPermission<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission | null> {\n if (!this.isAuthorizationEnabled()) {\n return { name: \"*\" } as TPermission;\n }\n\n const permissions = await this.listPermissions();\n\n // Try exact match first\n const exactMatch = permissions.find(p => p.name === name);\n if (exactMatch) {\n return exactMatch as TPermission;\n }\n\n // Try pattern matching\n const patternMatch = permissions.find(p => minimatch(name, p.name));\n if (patternMatch) {\n return patternMatch as TPermission;\n }\n\n return null;\n }\n\n async getPermissions<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission[]> {\n if (!this.isAuthorizationEnabled()) {\n return [{ name: \"*\" }] as TPermission[];\n }\n\n const permissions = await this.listPermissions();\n\n return permissions.filter(p => {\n if (p.name === name) {\n return true;\n }\n return minimatch(name, p.name);\n }) as TPermission[];\n }\n\n async listPermissions(): Promise<SecurityPermission[]> {\n const permissions = await this.authorizationContext.loadPermissions(this.getIdentity());\n // TODO: extract this into a decorator\n return this.applyAaclLogic(permissions);\n }\n\n async hasFullAccess(): Promise<boolean> {\n const permissions = await this.listPermissions();\n return permissions.some(p => p.name === \"*\");\n }\n\n // ========================================================================\n // Private Helper Methods\n // ========================================================================\n\n private applyAaclLogic(permissions: SecurityPermission[]): SecurityPermission[] {\n const aaclEnabled = this.wcpContext.canUseAacl();\n const teamsEnabled = this.wcpContext.canUseTeams();\n\n if (aaclEnabled) {\n // Add AACL metadata permission\n return [\n ...permissions,\n {\n name: \"aacl\",\n teams: teamsEnabled\n } as AaclPermission\n ];\n }\n\n // If AACL is not enabled, filter out custom Webiny apps permissions\n return filterOutCustomWbyAppsPermissions(permissions);\n }\n}\n\nexport const IdentityContext = createImplementation({\n abstraction: Abstraction,\n implementation: IdentityContextImpl,\n dependencies: [AuthorizationContext, WcpContext]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AsyncLocalStorage","minimatch","createImplementation","IdentityContext","Abstraction","AnonymousIdentity","AuthorizationContext","filterOutCustomWbyAppsPermissions","WcpContext","identityStorage","IdentityContextImpl","identity","constructor","authorizationContext","wcpContext","getIdentity","override","getStore","undefined","setIdentity","clearPermissionsCache","withIdentity","cb","run","withoutAuthorization","isAuthorizationEnabled","getPermission","name","permissions","listPermissions","exactMatch","find","p","patternMatch","getPermissions","filter","loadPermissions","applyAaclLogic","hasFullAccess","some","aaclEnabled","canUseAacl","teamsEnabled","canUseTeams","teams","abstraction","implementation","dependencies"],"sources":["IdentityContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { minimatch } from \"minimatch\";\nimport { createImplementation } from \"@webiny/di\";\nimport { IdentityContext as Abstraction } from \"./abstractions.js\";\nimport { Identity } from \"./Identity.js\";\nimport { AnonymousIdentity } from \"./AnonymousIdentity.js\";\nimport { AuthorizationContext } from \"../authorization/AuthorizationContext/index.js\";\nimport { filterOutCustomWbyAppsPermissions } from \"../utils/filterOutCustomWbyAppsPermissions.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport type { AaclPermission } from \"../../wcp/WcpContext/types.js\";\nimport { WcpContext } from \"../../wcp/WcpContext/index.js\";\n\nconst identityStorage = new AsyncLocalStorage<Identity | undefined>();\n\nclass IdentityContextImpl implements Abstraction.Interface {\n private identity: Identity = new AnonymousIdentity();\n\n constructor(\n private authorizationContext: AuthorizationContext.Interface,\n private wcpContext: WcpContext.Interface\n ) {}\n\n // ========================================================================\n // Identity Methods\n // ========================================================================\n\n getIdentity(): Identity {\n // Check for identity override first (from withIdentity())\n const override = identityStorage.getStore();\n if (override !== undefined) {\n return override;\n }\n return this.identity;\n }\n\n setIdentity(identity: Identity | undefined): void {\n // If undefined, set to anonymous identity\n this.identity = identity ?? new AnonymousIdentity();\n\n // Clear permissions cache when identity changes\n this.authorizationContext.clearPermissionsCache();\n }\n\n withIdentity<T>(identity: Identity | undefined, cb: () => Promise<T>): Promise<T> {\n return identityStorage.run(identity, cb);\n }\n\n // ========================================================================\n // Authorization State Methods\n // ========================================================================\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return this.authorizationContext.withoutAuthorization(cb);\n }\n\n isAuthorizationEnabled(): boolean {\n return this.authorizationContext.isAuthorizationEnabled();\n }\n\n // ========================================================================\n // Permission Methods\n // ========================================================================\n\n async getPermission<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission | null> {\n if (!this.isAuthorizationEnabled()) {\n return { name: \"*\" } as TPermission;\n }\n\n const permissions = await this.listPermissions();\n\n // Try exact match first\n const exactMatch = permissions.find(p => p.name === name);\n if (exactMatch) {\n return exactMatch as TPermission;\n }\n\n // Try pattern matching\n const patternMatch = permissions.find(p => minimatch(name, p.name));\n if (patternMatch) {\n return patternMatch as TPermission;\n }\n\n return null;\n }\n\n async getPermissions<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission[]> {\n if (!this.isAuthorizationEnabled()) {\n return [{ name: \"*\" }] as TPermission[];\n }\n\n const permissions = await this.listPermissions();\n\n return permissions.filter(p => {\n if (p.name === name) {\n return true;\n }\n return minimatch(name, p.name);\n }) as TPermission[];\n }\n\n async listPermissions(): Promise<SecurityPermission[]> {\n const permissions = await this.authorizationContext.loadPermissions(this.getIdentity());\n // TODO: extract this into a decorator\n return this.applyAaclLogic(permissions);\n }\n\n async hasFullAccess(): Promise<boolean> {\n const permissions = await this.listPermissions();\n return permissions.some(p => p.name === \"*\");\n }\n\n // ========================================================================\n // Private Helper Methods\n // ========================================================================\n\n private applyAaclLogic(permissions: SecurityPermission[]): SecurityPermission[] {\n const aaclEnabled = this.wcpContext.canUseAacl();\n const teamsEnabled = this.wcpContext.canUseTeams();\n\n if (aaclEnabled) {\n // Add AACL metadata permission\n return [\n ...permissions,\n {\n name: \"aacl\",\n teams: teamsEnabled\n } as AaclPermission\n ];\n }\n\n // If AACL is not enabled, filter out custom Webiny apps permissions\n return filterOutCustomWbyAppsPermissions(permissions);\n }\n}\n\nexport const IdentityContext = createImplementation({\n abstraction: Abstraction,\n implementation: IdentityContextImpl,\n dependencies: [AuthorizationContext, WcpContext]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import type { PermissionSchemaConfig } from "./types.js";
2
+ import type { Permissions } from "./types.js";
3
+ export declare function createPermissions<const S extends PermissionSchemaConfig>(schema: S): {
4
+ Abstraction: import("@webiny/di").Abstraction<Permissions<S>>;
5
+ Implementation: import("@webiny/di").Constructor<Permissions<S>> & {
6
+ __abstraction: import("@webiny/di").Abstraction<Permissions<S>>;
7
+ };
8
+ };
@@ -0,0 +1,240 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ import { IdentityContext } from "../IdentityContext/index.js";
3
+ function buildEntityMap(schema) {
4
+ const map = new Map();
5
+ for (const entity of schema.entities ?? []) {
6
+ const actions = new Set();
7
+ for (const action of entity.actions ?? []) {
8
+ actions.add(action.name);
9
+ }
10
+ map.set(entity.id, {
11
+ permission: entity.permission,
12
+ actions,
13
+ hasOwn: entity.scopes.includes("own")
14
+ });
15
+ }
16
+ return map;
17
+ }
18
+ function getEntity(entityMap, entityId) {
19
+ const entity = entityMap.get(entityId);
20
+ if (!entity) {
21
+ throw new Error(`Unknown entity "${entityId}" in permission schema.`);
22
+ }
23
+ return entity;
24
+ }
25
+ export function createPermissions(schema) {
26
+ const entityMap = buildEntityMap(schema);
27
+ const fullAccessName = `${schema.prefix}.*`;
28
+ class SchemaPermissions {
29
+ constructor(identityContext) {
30
+ this.identityContext = identityContext;
31
+ }
32
+ async canAccess(entityId, item) {
33
+ if (await this.identityContext.hasFullAccess()) {
34
+ return true;
35
+ }
36
+ if (await this.hasFullSchemaAccess()) {
37
+ return true;
38
+ }
39
+ const entity = getEntity(entityMap, entityId);
40
+ const permissions = await this.getEntityPermissions(entity.permission);
41
+ if (!permissions.length) {
42
+ return false;
43
+ }
44
+ // No item — just check entity-level access.
45
+ if (item === undefined) {
46
+ return true;
47
+ }
48
+ // Item provided — if all permissions require own, verify ownership.
49
+ const ownOnly = !permissions.some(p => !p.own);
50
+ if (!ownOnly) {
51
+ return true;
52
+ }
53
+ const identity = this.identityContext.getIdentity();
54
+ return item.createdBy?.id === identity.id;
55
+ }
56
+ async onlyOwnRecords(entityId) {
57
+ if (await this.identityContext.hasFullAccess()) {
58
+ return false;
59
+ }
60
+ if (await this.hasFullSchemaAccess()) {
61
+ return false;
62
+ }
63
+ const entity = getEntity(entityMap, entityId);
64
+ const permissions = await this.getEntityPermissions(entity.permission);
65
+ if (!permissions.length) {
66
+ return false;
67
+ }
68
+ return !permissions.some(p => !p.own);
69
+ }
70
+ async canRead(entityId) {
71
+ if (await this.identityContext.hasFullAccess()) {
72
+ return true;
73
+ }
74
+ if (await this.hasFullSchemaAccess()) {
75
+ return true;
76
+ }
77
+ const entity = getEntity(entityMap, entityId);
78
+ const permissions = await this.getEntityPermissions(entity.permission);
79
+ if (!permissions.length) {
80
+ return false;
81
+ }
82
+ return permissions.some(permission => {
83
+ if (typeof permission.rwd !== "string") {
84
+ return true;
85
+ }
86
+ return permission.rwd.includes("r");
87
+ });
88
+ }
89
+ async canCreate(entityId) {
90
+ if (await this.identityContext.hasFullAccess()) {
91
+ return true;
92
+ }
93
+ if (await this.hasFullSchemaAccess()) {
94
+ return true;
95
+ }
96
+ const entity = getEntity(entityMap, entityId);
97
+ const permissions = await this.getEntityPermissions(entity.permission);
98
+ if (!permissions.length) {
99
+ return false;
100
+ }
101
+ return permissions.some(permission => {
102
+ if (typeof permission.rwd !== "string") {
103
+ return true;
104
+ }
105
+ return permission.rwd.includes("w");
106
+ });
107
+ }
108
+ async canEdit(entityId, item) {
109
+ if (await this.identityContext.hasFullAccess()) {
110
+ return true;
111
+ }
112
+ if (await this.hasFullSchemaAccess()) {
113
+ return true;
114
+ }
115
+ const entity = getEntity(entityMap, entityId);
116
+ const permissions = await this.getEntityPermissions(entity.permission);
117
+ if (!permissions.length) {
118
+ return false;
119
+ }
120
+ const identity = this.identityContext.getIdentity();
121
+ return permissions.some(permission => {
122
+ if (permission.own) {
123
+ // No item provided (new/unsaved) — allow access.
124
+ if (!item?.createdBy) {
125
+ return true;
126
+ }
127
+ return item.createdBy.id === identity.id;
128
+ }
129
+ if (typeof permission.rwd !== "string") {
130
+ return true;
131
+ }
132
+ return permission.rwd.includes("w");
133
+ });
134
+ }
135
+ async canDelete(entityId, item) {
136
+ if (await this.identityContext.hasFullAccess()) {
137
+ return true;
138
+ }
139
+ if (await this.hasFullSchemaAccess()) {
140
+ return true;
141
+ }
142
+ const entity = getEntity(entityMap, entityId);
143
+ const permissions = await this.getEntityPermissions(entity.permission);
144
+ if (!permissions.length) {
145
+ return false;
146
+ }
147
+ const identity = this.identityContext.getIdentity();
148
+ return permissions.some(permission => {
149
+ if (permission.own) {
150
+ return item?.createdBy?.id === identity.id;
151
+ }
152
+ if (typeof permission.rwd !== "string") {
153
+ return true;
154
+ }
155
+ return permission.rwd.includes("d");
156
+ });
157
+ }
158
+ async canPublish(entityId) {
159
+ if (await this.identityContext.hasFullAccess()) {
160
+ return true;
161
+ }
162
+ if (await this.hasFullSchemaAccess()) {
163
+ return true;
164
+ }
165
+ const entity = getEntity(entityMap, entityId);
166
+ const permissions = await this.getEntityPermissions(entity.permission);
167
+ if (!permissions.length) {
168
+ return false;
169
+ }
170
+ return permissions.some(permission => {
171
+ return permission.pw?.includes("p");
172
+ });
173
+ }
174
+ async canUnpublish(entityId) {
175
+ if (await this.identityContext.hasFullAccess()) {
176
+ return true;
177
+ }
178
+ if (await this.hasFullSchemaAccess()) {
179
+ return true;
180
+ }
181
+ const entity = getEntity(entityMap, entityId);
182
+ const permissions = await this.getEntityPermissions(entity.permission);
183
+ if (!permissions.length) {
184
+ return false;
185
+ }
186
+ return permissions.some(permission => {
187
+ return permission.pw?.includes("u");
188
+ });
189
+ }
190
+ async canAction(action, entityId) {
191
+ if (await this.identityContext.hasFullAccess()) {
192
+ return true;
193
+ }
194
+ if (await this.hasFullSchemaAccess()) {
195
+ return true;
196
+ }
197
+ const entity = getEntity(entityMap, entityId);
198
+ const permissions = await this.getEntityPermissions(entity.permission);
199
+ if (!permissions.length) {
200
+ return false;
201
+ }
202
+ return permissions.some(permission => {
203
+ return permission[action] === true;
204
+ });
205
+ }
206
+ async getEntityPermissions(entityPermission) {
207
+ const permissions = await this.identityContext.getPermissions(entityPermission);
208
+ if (permissions.length) {
209
+ return permissions;
210
+ }
211
+ // Fall back to the schema wildcard (e.g. "test.*") — its flags apply to all entities.
212
+ const wildcard = await this.identityContext.getPermission(fullAccessName);
213
+ return wildcard ? [wildcard] : [];
214
+ }
215
+ async hasFullSchemaAccess() {
216
+ const permission = await this.identityContext.getPermission(fullAccessName);
217
+ if (!permission) {
218
+ return false;
219
+ }
220
+ // Only treat as full access if the permission has no `rwd` flag.
221
+ // A permission like { name: "wb.*", rwd: "r" } should NOT grant full access.
222
+ const keys = Object.keys(permission).filter(k => k !== "name");
223
+ const hasRwd = keys.includes("rwd");
224
+
225
+ // It's full-access only if there's no `rwd` flag.
226
+ return !hasRwd;
227
+ }
228
+ }
229
+ const Abstraction = createAbstraction(`${schema.prefix}:Permissions`);
230
+ const Implementation = Abstraction.createImplementation({
231
+ implementation: SchemaPermissions,
232
+ dependencies: [IdentityContext]
233
+ });
234
+ return {
235
+ Abstraction,
236
+ Implementation
237
+ };
238
+ }
239
+
240
+ //# sourceMappingURL=createPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","IdentityContext","buildEntityMap","schema","map","Map","entity","entities","actions","Set","action","add","name","set","id","permission","hasOwn","scopes","includes","getEntity","entityMap","entityId","get","Error","createPermissions","fullAccessName","prefix","SchemaPermissions","constructor","identityContext","canAccess","item","hasFullAccess","hasFullSchemaAccess","permissions","getEntityPermissions","length","undefined","ownOnly","some","p","own","identity","getIdentity","createdBy","onlyOwnRecords","canRead","rwd","canCreate","canEdit","canDelete","canPublish","pw","canUnpublish","canAction","entityPermission","getPermissions","wildcard","getPermission","keys","Object","filter","k","hasRwd","Abstraction","Implementation","createImplementation","implementation","dependencies"],"sources":["createPermissions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { OwnableItem } from \"./types.js\";\nimport type { Permissions } from \"./types.js\";\n\ninterface EntityLookup {\n permission: string;\n actions: Set<string>;\n hasOwn: boolean;\n}\n\nfunction buildEntityMap(schema: PermissionSchemaConfig): Map<string, EntityLookup> {\n const map = new Map<string, EntityLookup>();\n for (const entity of schema.entities ?? []) {\n const actions = new Set<string>();\n for (const action of entity.actions ?? []) {\n actions.add(action.name);\n }\n map.set(entity.id, {\n permission: entity.permission,\n actions,\n hasOwn: entity.scopes.includes(\"own\")\n });\n }\n return map;\n}\n\nfunction getEntity(entityMap: Map<string, EntityLookup>, entityId: string): EntityLookup {\n const entity = entityMap.get(entityId);\n if (!entity) {\n throw new Error(`Unknown entity \"${entityId}\" in permission schema.`);\n }\n return entity;\n}\n\nexport function createPermissions<const S extends PermissionSchemaConfig>(schema: S) {\n const entityMap = buildEntityMap(schema);\n const fullAccessName = `${schema.prefix}.*`;\n\n class SchemaPermissions {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async canAccess(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n // No item — just check entity-level access.\n if (item === undefined) {\n return true;\n }\n // Item provided — if all permissions require own, verify ownership.\n const ownOnly = !permissions.some(p => !p.own);\n if (!ownOnly) {\n return true;\n }\n const identity = this.identityContext.getIdentity();\n return item.createdBy?.id === identity.id;\n }\n\n async onlyOwnRecords(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return false;\n }\n if (await this.hasFullSchemaAccess()) {\n return false;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return !permissions.some(p => !p.own);\n }\n\n async canRead(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"r\");\n });\n }\n\n async canCreate(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canEdit(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n // No item provided (new/unsaved) — allow access.\n if (!item?.createdBy) {\n return true;\n }\n return item.createdBy.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n }\n\n async canDelete(entityId: string, item?: OwnableItem): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n const identity = this.identityContext.getIdentity();\n return permissions.some(permission => {\n if (permission.own) {\n return item?.createdBy?.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"d\");\n });\n }\n\n async canPublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"p\");\n });\n }\n\n async canUnpublish(entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"u\");\n });\n }\n\n async canAction(action: string, entityId: string): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n if (await this.hasFullSchemaAccess()) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = await this.getEntityPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission[action] === true;\n });\n }\n\n private async getEntityPermissions(entityPermission: string): Promise<any[]> {\n const permissions = await this.identityContext.getPermissions(entityPermission);\n if (permissions.length) {\n return permissions;\n }\n // Fall back to the schema wildcard (e.g. \"test.*\") — its flags apply to all entities.\n const wildcard = await this.identityContext.getPermission(fullAccessName);\n return wildcard ? [wildcard] : [];\n }\n\n private async hasFullSchemaAccess(): Promise<boolean> {\n const permission = await this.identityContext.getPermission(fullAccessName);\n if (!permission) {\n return false;\n }\n // Only treat as full access if the permission has no `rwd` flag.\n // A permission like { name: \"wb.*\", rwd: \"r\" } should NOT grant full access.\n const keys = Object.keys(permission).filter(k => k !== \"name\");\n\n const hasRwd = keys.includes(\"rwd\");\n\n // It's full-access only if there's no `rwd` flag.\n return !hasRwd;\n }\n }\n\n const Abstraction = createAbstraction<Permissions<S>>(`${schema.prefix}:Permissions`);\n\n const Implementation = Abstraction.createImplementation({\n implementation: SchemaPermissions,\n dependencies: [IdentityContext]\n } as any);\n\n return { Abstraction, Implementation };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { createPermissions } from "./createPermissions.js";
2
+ export type { ActionDefinition, EntityDefinition, PermissionSchemaConfig, OwnableItem, Permissions, AllEntityIds, RwdEntityId, PwEntityId, CustomActionNames } from "./types.js";
@@ -0,0 +1,3 @@
1
+ export { createPermissions } from "./createPermissions.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPermissions"],"sources":["index.ts"],"sourcesContent":["export { createPermissions } from \"./createPermissions.js\";\nexport type {\n ActionDefinition,\n EntityDefinition,\n PermissionSchemaConfig,\n OwnableItem,\n Permissions,\n AllEntityIds,\n RwdEntityId,\n PwEntityId,\n CustomActionNames\n} from \"./types.js\";\n"],"mappings":"AAAA,SAASA,iBAAiB","ignoreList":[]}