@pikku/addon-console 0.12.26 → 0.12.27

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 (200) hide show
  1. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  2. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  3. package/dist/.pikku/addon/pikku-package.gen.js +2 -2
  4. package/dist/.pikku/addon/pikku-package.gen.js.map +1 -1
  5. package/dist/.pikku/agent/pikku-agent-map.gen.d.ts +1 -1
  6. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  7. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts.map +1 -1
  8. package/dist/.pikku/agent/pikku-agent-types.gen.js.map +1 -1
  9. package/dist/.pikku/auth/auth.types.d.ts +1 -1
  10. package/dist/.pikku/auth/auth.types.js +1 -1
  11. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  12. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  13. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  14. package/dist/.pikku/function/pikku-function-types.gen.d.ts +9 -15
  15. package/dist/.pikku/function/pikku-function-types.gen.d.ts.map +1 -1
  16. package/dist/.pikku/function/pikku-function-types.gen.js +3 -12
  17. package/dist/.pikku/function/pikku-function-types.gen.js.map +1 -1
  18. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  19. package/dist/.pikku/function/pikku-functions-meta.gen.json +368 -175
  20. package/dist/.pikku/function/pikku-functions.gen.js +27 -13
  21. package/dist/.pikku/function/pikku-functions.gen.js.map +1 -1
  22. package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -24
  23. package/dist/.pikku/http/pikku-http-types.gen.d.ts.map +1 -1
  24. package/dist/.pikku/http/pikku-http-types.gen.js +2 -24
  25. package/dist/.pikku/http/pikku-http-types.gen.js.map +1 -1
  26. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  27. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  28. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  29. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  30. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  31. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  32. package/dist/.pikku/pikku-services.gen.d.ts +6 -4
  33. package/dist/.pikku/pikku-services.gen.d.ts.map +1 -1
  34. package/dist/.pikku/pikku-services.gen.js +4 -2
  35. package/dist/.pikku/pikku-services.gen.js.map +1 -1
  36. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  37. package/dist/.pikku/pikku-types.gen.d.ts.map +1 -1
  38. package/dist/.pikku/pikku-types.gen.js +3 -1
  39. package/dist/.pikku/pikku-types.gen.js.map +1 -1
  40. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  41. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  42. package/dist/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +43 -20
  43. package/dist/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +43 -20
  44. package/dist/.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +200 -0
  45. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  46. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +13 -6
  47. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  48. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  49. package/dist/.pikku/schemas/register.gen.js +49 -23
  50. package/dist/.pikku/schemas/register.gen.js.map +1 -1
  51. package/dist/.pikku/schemas/schemas/AddonPackageInfo.schema.json +1 -1
  52. package/dist/.pikku/schemas/schemas/AllMeta.schema.json +1 -1
  53. package/dist/.pikku/schemas/schemas/GetAddonInstancesInput.schema.json +1 -0
  54. package/dist/.pikku/schemas/schemas/GetAddonInstancesOutput.schema.json +1 -0
  55. package/dist/.pikku/schemas/schemas/GetAddonMetaOutput.schema.json +1 -1
  56. package/dist/.pikku/schemas/schemas/GetFunctionsMetaOutput.schema.json +1 -1
  57. package/dist/.pikku/schemas/schemas/GetOpenapisOutput.schema.json +1 -1
  58. package/dist/.pikku/schemas/schemas/GetWebhookDeliveryInput.schema.json +1 -0
  59. package/dist/.pikku/schemas/schemas/GetWorkflowMetaByIdOutput.schema.json +1 -1
  60. package/dist/.pikku/schemas/schemas/ListWebhookDeliveriesInput.schema.json +1 -0
  61. package/dist/.pikku/schemas/schemas/ListWebhookDeliveriesOutput.schema.json +1 -0
  62. package/dist/.pikku/schemas/schemas/ScopeAddScopeToUserInput.schema.json +1 -0
  63. package/dist/.pikku/schemas/schemas/ScopeAddScopeToUserOutput.schema.json +1 -0
  64. package/dist/.pikku/schemas/schemas/ScopeAddUserToRoleInput.schema.json +1 -0
  65. package/dist/.pikku/schemas/schemas/ScopeAddUserToRoleOutput.schema.json +1 -0
  66. package/dist/.pikku/schemas/schemas/ScopeCreateRoleInput.schema.json +1 -0
  67. package/dist/.pikku/schemas/schemas/ScopeCreateRoleOutput.schema.json +1 -0
  68. package/dist/.pikku/schemas/schemas/ScopeDeleteRoleInput.schema.json +1 -0
  69. package/dist/.pikku/schemas/schemas/ScopeDeleteRoleOutput.schema.json +1 -0
  70. package/dist/.pikku/schemas/schemas/ScopeListDeclaredOutput.schema.json +1 -0
  71. package/dist/.pikku/schemas/schemas/ScopeListRolesOutput.schema.json +1 -0
  72. package/dist/.pikku/schemas/schemas/ScopeListUserRolesInput.schema.json +1 -0
  73. package/dist/.pikku/schemas/schemas/ScopeListUserRolesOutput.schema.json +1 -0
  74. package/dist/.pikku/schemas/schemas/ScopeRemoveScopeFromUserInput.schema.json +1 -0
  75. package/dist/.pikku/schemas/schemas/ScopeRemoveScopeFromUserOutput.schema.json +1 -0
  76. package/dist/.pikku/schemas/schemas/ScopeRemoveUserFromRoleInput.schema.json +1 -0
  77. package/dist/.pikku/schemas/schemas/ScopeRemoveUserFromRoleOutput.schema.json +1 -0
  78. package/dist/.pikku/schemas/schemas/ScopeSetRoleScopesInput.schema.json +1 -0
  79. package/dist/.pikku/schemas/schemas/ScopeSetRoleScopesOutput.schema.json +1 -0
  80. package/dist/.pikku/schemas/schemas/WebhookDeliveryWithAttempts.schema.json +1 -0
  81. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +6 -0
  82. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts.map +1 -0
  83. package/dist/.pikku/scopes/pikku-scope-types.gen.js +5 -0
  84. package/dist/.pikku/scopes/pikku-scope-types.gen.js.map +1 -0
  85. package/dist/.pikku/scopes/pikku-scopes-meta.gen.json +21 -0
  86. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +36 -0
  87. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts.map +1 -0
  88. package/dist/.pikku/scopes/pikku-scopes.gen.js +30 -0
  89. package/dist/.pikku/scopes/pikku-scopes.gen.js.map +1 -0
  90. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  91. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  92. package/dist/.pikku/secrets/pikku-secrets-meta.gen.json +1 -0
  93. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +11 -1
  94. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts.map +1 -1
  95. package/dist/.pikku/secrets/pikku-secrets.gen.js +11 -1
  96. package/dist/.pikku/secrets/pikku-secrets.gen.js.map +1 -1
  97. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  98. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  99. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  100. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  101. package/dist/.pikku/variables/pikku-variables-meta.gen.json +1 -0
  102. package/dist/.pikku/variables/pikku-variables.gen.d.ts +11 -1
  103. package/dist/.pikku/variables/pikku-variables.gen.d.ts.map +1 -1
  104. package/dist/.pikku/variables/pikku-variables.gen.js +13 -3
  105. package/dist/.pikku/variables/pikku-variables.gen.js.map +1 -1
  106. package/dist/.pikku/workflow/pikku-workflow-map.gen.d.ts +1 -1
  107. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +17 -8
  108. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts.map +1 -1
  109. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  110. package/dist/.pikku/workflow/pikku-workflow-types.gen.js.map +1 -1
  111. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  112. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  113. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  114. package/dist/src/functions/get-addon-instances.function.d.ts +25 -0
  115. package/dist/src/functions/get-addon-instances.function.d.ts.map +1 -0
  116. package/dist/src/functions/get-addon-instances.function.js +30 -0
  117. package/dist/src/functions/get-addon-instances.function.js.map +1 -0
  118. package/dist/src/functions/get-installed-package.function.d.ts.map +1 -1
  119. package/dist/src/functions/get-installed-package.function.js +13 -13
  120. package/dist/src/functions/get-installed-package.function.js.map +1 -1
  121. package/dist/src/functions/get-openapi-detail.function.d.ts.map +1 -1
  122. package/dist/src/functions/get-openapi-detail.function.js +3 -9
  123. package/dist/src/functions/get-openapi-detail.function.js.map +1 -1
  124. package/dist/src/functions/get-openapis.function.d.ts +3 -3
  125. package/dist/src/functions/get-openapis.function.d.ts.map +1 -1
  126. package/dist/src/functions/get-openapis.function.js +3 -12
  127. package/dist/src/functions/get-openapis.function.js.map +1 -1
  128. package/dist/src/functions/get-webhook-delivery.function.d.ts +9 -0
  129. package/dist/src/functions/get-webhook-delivery.function.d.ts.map +1 -0
  130. package/dist/src/functions/get-webhook-delivery.function.js +14 -0
  131. package/dist/src/functions/get-webhook-delivery.function.js.map +1 -0
  132. package/dist/src/functions/install-addon.function.d.ts.map +1 -1
  133. package/dist/src/functions/install-addon.function.js +65 -11
  134. package/dist/src/functions/install-addon.function.js.map +1 -1
  135. package/dist/src/functions/list-webhook-deliveries.function.d.ts +12 -0
  136. package/dist/src/functions/list-webhook-deliveries.function.d.ts.map +1 -0
  137. package/dist/src/functions/list-webhook-deliveries.function.js +14 -0
  138. package/dist/src/functions/list-webhook-deliveries.function.js.map +1 -0
  139. package/dist/src/functions/scope-add-scope-to-user.function.d.ts +17 -0
  140. package/dist/src/functions/scope-add-scope-to-user.function.d.ts.map +1 -0
  141. package/dist/src/functions/scope-add-scope-to-user.function.js +16 -0
  142. package/dist/src/functions/scope-add-scope-to-user.function.js.map +1 -0
  143. package/dist/src/functions/scope-add-user-to-role.function.d.ts +17 -0
  144. package/dist/src/functions/scope-add-user-to-role.function.d.ts.map +1 -0
  145. package/dist/src/functions/scope-add-user-to-role.function.js +16 -0
  146. package/dist/src/functions/scope-add-user-to-role.function.js.map +1 -0
  147. package/dist/src/functions/scope-create-role.function.d.ts +20 -0
  148. package/dist/src/functions/scope-create-role.function.d.ts.map +1 -0
  149. package/dist/src/functions/scope-create-role.function.js +18 -0
  150. package/dist/src/functions/scope-create-role.function.js.map +1 -0
  151. package/dist/src/functions/scope-delete-role.function.d.ts +14 -0
  152. package/dist/src/functions/scope-delete-role.function.d.ts.map +1 -0
  153. package/dist/src/functions/scope-delete-role.function.js +16 -0
  154. package/dist/src/functions/scope-delete-role.function.js.map +1 -0
  155. package/dist/src/functions/scope-list-declared.function.d.ts +18 -0
  156. package/dist/src/functions/scope-list-declared.function.d.ts.map +1 -0
  157. package/dist/src/functions/scope-list-declared.function.js +15 -0
  158. package/dist/src/functions/scope-list-declared.function.js.map +1 -0
  159. package/dist/src/functions/scope-list-roles.function.d.ts +9 -0
  160. package/dist/src/functions/scope-list-roles.function.d.ts.map +1 -0
  161. package/dist/src/functions/scope-list-roles.function.js +14 -0
  162. package/dist/src/functions/scope-list-roles.function.js.map +1 -0
  163. package/dist/src/functions/scope-list-user-roles.function.d.ts +20 -0
  164. package/dist/src/functions/scope-list-user-roles.function.d.ts.map +1 -0
  165. package/dist/src/functions/scope-list-user-roles.function.js +23 -0
  166. package/dist/src/functions/scope-list-user-roles.function.js.map +1 -0
  167. package/dist/src/functions/scope-remove-scope-from-user.function.d.ts +17 -0
  168. package/dist/src/functions/scope-remove-scope-from-user.function.d.ts.map +1 -0
  169. package/dist/src/functions/scope-remove-scope-from-user.function.js +16 -0
  170. package/dist/src/functions/scope-remove-scope-from-user.function.js.map +1 -0
  171. package/dist/src/functions/scope-remove-user-from-role.function.d.ts +17 -0
  172. package/dist/src/functions/scope-remove-user-from-role.function.d.ts.map +1 -0
  173. package/dist/src/functions/scope-remove-user-from-role.function.js +16 -0
  174. package/dist/src/functions/scope-remove-user-from-role.function.js.map +1 -0
  175. package/dist/src/functions/scope-set-role-scopes.function.d.ts +17 -0
  176. package/dist/src/functions/scope-set-role-scopes.function.d.ts.map +1 -0
  177. package/dist/src/functions/scope-set-role-scopes.function.js +16 -0
  178. package/dist/src/functions/scope-set-role-scopes.function.js.map +1 -0
  179. package/dist/src/lib/derive-instance-overrides.d.ts +31 -0
  180. package/dist/src/lib/derive-instance-overrides.d.ts.map +1 -0
  181. package/dist/src/lib/derive-instance-overrides.js +72 -0
  182. package/dist/src/lib/derive-instance-overrides.js.map +1 -0
  183. package/dist/src/lib/derive-instance-overrides.test.d.ts +2 -0
  184. package/dist/src/lib/derive-instance-overrides.test.d.ts.map +1 -0
  185. package/dist/src/lib/derive-instance-overrides.test.js +59 -0
  186. package/dist/src/lib/derive-instance-overrides.test.js.map +1 -0
  187. package/dist/src/scopes.d.ts +2 -0
  188. package/dist/src/scopes.d.ts.map +1 -0
  189. package/dist/src/scopes.js +29 -0
  190. package/dist/src/scopes.js.map +1 -0
  191. package/dist/src/services/addon.service.d.ts +37 -0
  192. package/dist/src/services/addon.service.d.ts.map +1 -1
  193. package/dist/src/services/addon.service.js +24 -0
  194. package/dist/src/services/addon.service.js.map +1 -1
  195. package/dist/src/services/addon.service.test.js +17 -0
  196. package/dist/src/services/addon.service.test.js.map +1 -1
  197. package/dist/src/services.d.ts.map +1 -1
  198. package/dist/src/services.js +3 -4
  199. package/dist/src/services.js.map +1 -1
  200. package/package.json +4 -4
@@ -1,24 +1,25 @@
1
- import { LocalEnvironmentOnlyError } from '@pikku/core/errors';
1
+ import { BadRequestError, ConflictError, LocalEnvironmentOnlyError, } from '@pikku/core/errors';
2
2
  import { pikkuSessionlessFunc } from '#pikku';
3
3
  import { findProjectRoot } from '../lib/find-project-root.js';
4
+ import { deriveInstanceOverrides, readAddonDeclaredNames, } from '../lib/derive-instance-overrides.js';
4
5
  export const installAddon = pikkuSessionlessFunc({
5
6
  title: 'Install Addon',
6
7
  description: 'Installs a community addon package and creates the wiring file.',
7
8
  expose: true,
8
9
  auth: false,
9
10
  func: async ({ metaService }, { packageName, namespace, version }) => {
10
- const { readFile, writeFile, mkdir } = await import('node:fs/promises');
11
+ const { readFile, writeFile, mkdir, readdir } = await import('node:fs/promises');
11
12
  const { join, dirname } = await import('node:path');
12
13
  const { existsSync } = await import('node:fs');
13
14
  const validPkg = /^(@[a-z0-9-]+\/)?[a-z0-9._-]+$/;
14
15
  if (!validPkg.test(packageName)) {
15
- throw new Error(`Invalid package name: ${packageName}`);
16
+ throw new BadRequestError(`Invalid package name: ${packageName}`);
16
17
  }
17
18
  if (!/^[a-z0-9-]+$/.test(namespace)) {
18
- throw new Error(`Invalid namespace: ${namespace}`);
19
+ throw new BadRequestError(`Invalid namespace: ${namespace}`);
19
20
  }
20
21
  if (version && !/^[a-z0-9._^~><=|-]+$/i.test(version)) {
21
- throw new Error(`Invalid version: ${version}`);
22
+ throw new BadRequestError(`Invalid version: ${version}`);
22
23
  }
23
24
  const metaBasePath = metaService?.basePath;
24
25
  if (!metaBasePath) {
@@ -38,7 +39,7 @@ export const installAddon = pikkuSessionlessFunc({
38
39
  await mkdir(addonDir, { recursive: true });
39
40
  const wiringFile = join(addonDir, `${namespace}.addon.ts`);
40
41
  if (existsSync(wiringFile)) {
41
- throw new Error(`Addon wiring file already exists: ${wiringFile}`);
42
+ throw new ConflictError(`An addon is already installed under the name "${namespace}". Pick a different instance name.`);
42
43
  }
43
44
  const pkg = version ? `${packageName}@${version}` : packageName;
44
45
  const pmLock = {
@@ -63,12 +64,23 @@ export const installAddon = pikkuSessionlessFunc({
63
64
  const cp = 'node:child_process';
64
65
  const { execFileSync } = await import(cp);
65
66
  execFileSync(pm, installArgs[pm], { cwd: rootDir, stdio: 'pipe' });
66
- const typesImport = config.scaffold?.pikkuDir
67
- ? `../${config.scaffold.pikkuDir.split('/').pop()}/pikku-types.gen.js`
68
- : '../../.pikku/pikku-types.gen.js';
69
- const wiringContent = `import { wireAddon } from '${typesImport}'
67
+ // A second-or-later instance of the SAME package would otherwise resolve to
68
+ // the same secrets/variables/credentials as the first — namespace-scope the
69
+ // new one so the two instances stay isolated. The first instance keeps the
70
+ // package's documented logical names (no overrides). Overrides are a
71
+ // sensible default only; the user owns this file and can drop or edit them.
72
+ const alreadyWired = await packageIsAlreadyWired(addonDir, packageName, readdir, readFile);
73
+ const overrides = alreadyWired
74
+ ? deriveInstanceOverrides(namespace, packageName, await readAddonDeclaredNames(rootDir, packageName))
75
+ : {};
76
+ // Import via the project's `#pikku` subpath alias, not a computed relative
77
+ // path: every pikku project defines `#pikku/*`, and it resolves to the
78
+ // generated types regardless of where the addon wiring physically sits (a
79
+ // relative guess breaks the moment scaffold.pikkuDir and the real .pikku
80
+ // location diverge).
81
+ const wiringContent = `import { wireAddon } from '#pikku/pikku-types.gen.js'
70
82
 
71
- wireAddon({ name: '${namespace}', package: '${packageName}' })
83
+ wireAddon(${serializeWireAddon(namespace, packageName, overrides)})
72
84
  `;
73
85
  await writeFile(wiringFile, wiringContent, 'utf-8');
74
86
  return {
@@ -77,4 +89,46 @@ wireAddon({ name: '${namespace}', package: '${packageName}' })
77
89
  };
78
90
  },
79
91
  });
92
+ /** True if any existing `*.addon.ts` in the addons dir already wires this
93
+ * package — i.e. this install is a second-or-later instance. */
94
+ async function packageIsAlreadyWired(addonDir, packageName, readdir, readFile) {
95
+ let entries;
96
+ try {
97
+ entries = await readdir(addonDir);
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ for (const entry of entries) {
103
+ if (!entry.endsWith('.addon.ts'))
104
+ continue;
105
+ const content = await readFile(`${addonDir}/${entry}`, 'utf-8').catch(() => '');
106
+ // Match `package: 'x'` / `package: "x"` for this exact package name.
107
+ if (new RegExp(`package:\\s*['"]${packageName.replace(/[.*+?^${}()|[\]\\/-]/g, '\\$&')}['"]`).test(content)) {
108
+ return true;
109
+ }
110
+ }
111
+ return false;
112
+ }
113
+ /** Serialize the `wireAddon({...})` argument. A plain instance stays a compact
114
+ * one-liner; an instance with overrides expands to a readable multi-line form. */
115
+ function serializeWireAddon(namespace, packageName, overrides) {
116
+ const maps = Object.entries(overrides).filter(([, m]) => m && Object.keys(m).length > 0);
117
+ if (maps.length === 0) {
118
+ return `{ name: '${namespace}', package: '${packageName}' }`;
119
+ }
120
+ const lines = [
121
+ `{`,
122
+ ` name: '${namespace}',`,
123
+ ` package: '${packageName}',`,
124
+ ...maps.map(([kind, map]) => {
125
+ const pairs = Object.entries(map)
126
+ .map(([k, v]) => `'${k}': '${v}'`)
127
+ .join(', ');
128
+ return ` ${kind}: { ${pairs} },`;
129
+ }),
130
+ `}`,
131
+ ];
132
+ return lines.join('\n');
133
+ }
80
134
  //# sourceMappingURL=install-addon.function.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-addon.function.js","sourceRoot":"","sources":["../../../src/functions/install-addon.function.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-addon.function.js","sourceRoot":"","sources":["../../../src/functions/install-addon.function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { WebhookDeliveryRecord } from '@pikku/core/services';
2
+ export declare const listWebhookDeliveries: import("#pikku").PikkuFunctionConfig<{
3
+ organizationId?: string;
4
+ limit?: number;
5
+ }, WebhookDeliveryRecord[], "rpc" | "session", import("#pikku").PikkuFunction<{
6
+ organizationId?: string;
7
+ limit?: number;
8
+ }, WebhookDeliveryRecord[], "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
9
+ organizationId?: string;
10
+ limit?: number;
11
+ }, WebhookDeliveryRecord[], "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
12
+ //# sourceMappingURL=list-webhook-deliveries.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-webhook-deliveries.function.d.ts","sourceRoot":"","sources":["../../../src/functions/list-webhook-deliveries.function.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGjE,eAAO,MAAM,qBAAqB;qBACb,MAAM;YAAU,MAAM;;qBAAtB,MAAM;YAAU,MAAM;;qBAAtB,MAAM;YAAU,MAAM;gGAazC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const listWebhookDeliveries = pikkuFunc({
4
+ title: 'List Webhook Deliveries',
5
+ description: 'Lists outgoing webhook deliveries (most recent first), optionally scoped to an organization.',
6
+ expose: true,
7
+ func: async ({ webhookService }, input) => {
8
+ if (!webhookService) {
9
+ throw new MissingServiceError('webhookService is not configured');
10
+ }
11
+ return webhookService.listDeliveries(input ?? undefined);
12
+ },
13
+ });
14
+ //# sourceMappingURL=list-webhook-deliveries.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-webhook-deliveries.function.js","sourceRoot":"","sources":["../../../src/functions/list-webhook-deliveries.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAG5C;IACA,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,8FAA8F;IAChG,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,EAAE;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,mBAAmB,CAAC,kCAAkC,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,cAAc,CAAC,cAAc,CAAC,KAAK,IAAI,SAAS,CAAC,CAAA;IAC1D,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ export declare const scopeAddScopeToUser: import("#pikku").PikkuFunctionConfig<{
2
+ userId: string;
3
+ scope: string;
4
+ }, {
5
+ success: boolean;
6
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
7
+ userId: string;
8
+ scope: string;
9
+ }, {
10
+ success: boolean;
11
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
12
+ userId: string;
13
+ scope: string;
14
+ }, {
15
+ success: boolean;
16
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ //# sourceMappingURL=scope-add-scope-to-user.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-add-scope-to-user.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-add-scope-to-user.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB;YACpB,MAAM;WAAS,MAAM;;aACpB,OAAO;;YADR,MAAM;WAAS,MAAM;;aACpB,OAAO;;YADR,MAAM;WAAS,MAAM;;aACpB,OAAO;uEAclB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeAddScopeToUser = pikkuFunc({
4
+ title: 'Grant Scope',
5
+ description: 'Grants a scope directly to a user, outside of any role. Takes effect on their next request — no re-login.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { userId, scope }, { session }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.addScopeToUser(userId, scope, session?.userId);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-add-scope-to-user.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-add-scope-to-user.function.js","sourceRoot":"","sources":["../../../src/functions/scope-add-scope-to-user.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAG1C;IACA,KAAK,EAAE,aAAa;IACpB,WAAW,EACT,2GAA2G;IAC7G,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ export declare const scopeAddUserToRole: import("#pikku").PikkuFunctionConfig<{
2
+ userId: string;
3
+ role: string;
4
+ }, {
5
+ success: boolean;
6
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
7
+ userId: string;
8
+ role: string;
9
+ }, {
10
+ success: boolean;
11
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
12
+ userId: string;
13
+ role: string;
14
+ }, {
15
+ success: boolean;
16
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ //# sourceMappingURL=scope-add-user-to-role.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-add-user-to-role.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-add-user-to-role.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;YACnB,MAAM;UAAQ,MAAM;;aACnB,OAAO;;YADR,MAAM;UAAQ,MAAM;;aACnB,OAAO;;YADR,MAAM;UAAQ,MAAM;;aACnB,OAAO;uEAclB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeAddUserToRole = pikkuFunc({
4
+ title: 'Grant Role',
5
+ description: 'Grants a role to a user. Takes effect on their next request — no re-login.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { userId, role }, { session }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.addUserToRole(userId, role, session?.userId);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-add-user-to-role.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-add-user-to-role.function.js","sourceRoot":"","sources":["../../../src/functions/scope-add-user-to-role.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAGzC;IACA,KAAK,EAAE,YAAY;IACnB,WAAW,EACT,4EAA4E;IAC9E,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ export declare const scopeCreateRole: import("#pikku").PikkuFunctionConfig<{
2
+ name: string;
3
+ description?: string;
4
+ scopes: string[];
5
+ }, {
6
+ success: boolean;
7
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
8
+ name: string;
9
+ description?: string;
10
+ scopes: string[];
11
+ }, {
12
+ success: boolean;
13
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
14
+ name: string;
15
+ description?: string;
16
+ scopes: string[];
17
+ }, {
18
+ success: boolean;
19
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
20
+ //# sourceMappingURL=scope-create-role.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-create-role.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-create-role.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;UAClB,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;aAC3C,OAAO;;UADV,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;aAC3C,OAAO;;UADV,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;aAC3C,OAAO;uEAelB,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeCreateRole = pikkuFunc({
4
+ title: 'Create Role',
5
+ description: 'Creates a role granting the given scopes.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { name, description, scopes }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ // An undeclared scope is rejected by the pikku_scopes foreign key, so the
13
+ // database is the one enforcing the vocabulary — not this function.
14
+ await scopeService.createRole({ name, description, scopes });
15
+ return { success: true };
16
+ },
17
+ });
18
+ //# sourceMappingURL=scope-create-role.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-create-role.function.js","sourceRoot":"","sources":["../../../src/functions/scope-create-role.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAGtC;IACA,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,2CAA2C;IACxD,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export declare const scopeDeleteRole: import("#pikku").PikkuFunctionConfig<{
2
+ name: string;
3
+ }, {
4
+ success: boolean;
5
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
6
+ name: string;
7
+ }, {
8
+ success: boolean;
9
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
10
+ name: string;
11
+ }, {
12
+ success: boolean;
13
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
14
+ //# sourceMappingURL=scope-delete-role.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-delete-role.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-delete-role.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;UAClB,MAAM;;aACH,OAAO;;UADV,MAAM;;aACH,OAAO;;UADV,MAAM;;aACH,OAAO;uEAalB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeDeleteRole = pikkuFunc({
4
+ title: 'Delete Role',
5
+ description: 'Deletes a role, revoking it from every user who holds it.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { name }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.deleteRole(name);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-delete-role.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-delete-role.function.js","sourceRoot":"","sources":["../../../src/functions/scope-delete-role.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAGtC;IACA,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,2DAA2D;IACxE,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ export type DeclaredScopeEntry = {
2
+ id: string;
3
+ description?: string;
4
+ /**
5
+ * False for a scope still in the store but no longer declared in code. It
6
+ * authorizes nothing — no function can require it — and is awaiting
7
+ * `pikku scopes prune`.
8
+ */
9
+ declared: boolean;
10
+ };
11
+ export declare const scopeListDeclared: import("#pikku").PikkuFunctionConfig<null, {
12
+ scopes: DeclaredScopeEntry[];
13
+ }, "rpc" | "session", import("#pikku").PikkuFunction<null, {
14
+ scopes: DeclaredScopeEntry[];
15
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<null, {
16
+ scopes: DeclaredScopeEntry[];
17
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
18
+ //# sourceMappingURL=scope-list-declared.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-declared.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-list-declared.function.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,iBAAiB;YAElB,kBAAkB,EAAE;;YAApB,kBAAkB,EAAE;;YAApB,kBAAkB,EAAE;uEAe9B,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { pikkuFunc } from '#pikku';
2
+ export const scopeListDeclared = pikkuFunc({
3
+ title: 'List Declared Scopes',
4
+ description: 'Lists the scope vocabulary a role can be composed from, flagging any that are no longer declared in code.',
5
+ expose: true,
6
+ scopes: ['pikku:scopes:read'],
7
+ func: async ({ scopeService }) => {
8
+ if (!scopeService) {
9
+ return { scopes: [] };
10
+ }
11
+ const scopes = await scopeService.listScopes();
12
+ return { scopes: scopes.sort((a, b) => a.id.localeCompare(b.id)) };
13
+ },
14
+ });
15
+ //# sourceMappingURL=scope-list-declared.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-declared.function.js","sourceRoot":"","sources":["../../../src/functions/scope-list-declared.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAalC,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAGxC;IACA,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EACT,2GAA2G;IAC7G,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;QAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACpE,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { Role } from '@pikku/core/services';
2
+ export declare const scopeListRoles: import("#pikku").PikkuFunctionConfig<null, {
3
+ roles: Role[];
4
+ }, "rpc" | "session", import("#pikku").PikkuFunction<null, {
5
+ roles: Role[];
6
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<null, {
7
+ roles: Role[];
8
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
9
+ //# sourceMappingURL=scope-list-roles.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-roles.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-list-roles.function.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,eAAO,MAAM,cAAc;WAA4B,IAAI,EAAE;;WAAN,IAAI,EAAE;;WAAN,IAAI,EAAE;uEAW3D,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { pikkuFunc } from '#pikku';
2
+ export const scopeListRoles = pikkuFunc({
3
+ title: 'List Roles',
4
+ description: 'Lists every role and the scopes it grants.',
5
+ expose: true,
6
+ scopes: ['pikku:scopes:read'],
7
+ func: async ({ scopeService }) => {
8
+ if (!scopeService) {
9
+ return { roles: [] };
10
+ }
11
+ return { roles: await scopeService.listRoles() };
12
+ },
13
+ });
14
+ //# sourceMappingURL=scope-list-roles.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-roles.function.js","sourceRoot":"","sources":["../../../src/functions/scope-list-roles.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGlC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAA0B;IAC/D,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,4CAA4C;IACzD,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QACtB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,CAAA;IAClD,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ export declare const scopeListUserRoles: import("#pikku").PikkuFunctionConfig<{
2
+ userId: string;
3
+ }, {
4
+ roles: string[];
5
+ scopes: string[];
6
+ directScopes: string[];
7
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
8
+ userId: string;
9
+ }, {
10
+ roles: string[];
11
+ scopes: string[];
12
+ directScopes: string[];
13
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
14
+ userId: string;
15
+ }, {
16
+ roles: string[];
17
+ scopes: string[];
18
+ directScopes: string[];
19
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
20
+ //# sourceMappingURL=scope-list-user-roles.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-user-roles.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-list-user-roles.function.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB;YACnB,MAAM;;WACP,MAAM,EAAE;YAAU,MAAM,EAAE;kBAAgB,MAAM,EAAE;;YADjD,MAAM;;WACP,MAAM,EAAE;YAAU,MAAM,EAAE;kBAAgB,MAAM,EAAE;;YADjD,MAAM;;WACP,MAAM,EAAE;YAAU,MAAM,EAAE;kBAAgB,MAAM,EAAE;uEAwB3D,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { pikkuFunc } from '#pikku';
2
+ export const scopeListUserRoles = pikkuFunc({
3
+ title: 'List User Roles',
4
+ description: 'Lists the roles a user holds, the scopes granted to them directly, and the full set those resolve to.',
5
+ expose: true,
6
+ scopes: ['pikku:scopes:read'],
7
+ func: async ({ scopeService }, { userId }) => {
8
+ if (!scopeService) {
9
+ return { roles: [], scopes: [], directScopes: [] };
10
+ }
11
+ const [roles, scopes, directScopes] = await Promise.all([
12
+ scopeService.listUserRoles(userId),
13
+ scopeService.resolveScopes(userId),
14
+ scopeService.listUserScopes(userId),
15
+ ]);
16
+ return {
17
+ roles: roles.sort(),
18
+ scopes: scopes.sort(),
19
+ directScopes: directScopes.sort(),
20
+ };
21
+ },
22
+ });
23
+ //# sourceMappingURL=scope-list-user-roles.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-list-user-roles.function.js","sourceRoot":"","sources":["../../../src/functions/scope-list-user-roles.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAGzC;IACA,KAAK,EAAE,iBAAiB;IACxB,WAAW,EACT,uGAAuG;IACzG,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;QACpD,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;YAClC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;YAClC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC;SACpC,CAAC,CAAA;QAEF,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;YACnB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE;SAClC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ export declare const scopeRemoveScopeFromUser: import("#pikku").PikkuFunctionConfig<{
2
+ userId: string;
3
+ scope: string;
4
+ }, {
5
+ success: boolean;
6
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
7
+ userId: string;
8
+ scope: string;
9
+ }, {
10
+ success: boolean;
11
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
12
+ userId: string;
13
+ scope: string;
14
+ }, {
15
+ success: boolean;
16
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ //# sourceMappingURL=scope-remove-scope-from-user.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-remove-scope-from-user.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-remove-scope-from-user.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB;YACzB,MAAM;WAAS,MAAM;;aACpB,OAAO;;YADR,MAAM;WAAS,MAAM;;aACpB,OAAO;;YADR,MAAM;WAAS,MAAM;;aACpB,OAAO;uEAclB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeRemoveScopeFromUser = pikkuFunc({
4
+ title: 'Revoke Scope',
5
+ description: 'Revokes a directly-granted scope from a user. Takes effect on their next request — no re-login.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { userId, scope }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.removeScopeFromUser(userId, scope);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-remove-scope-from-user.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-remove-scope-from-user.function.js","sourceRoot":"","sources":["../../../src/functions/scope-remove-scope-from-user.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAG/C;IACA,KAAK,EAAE,cAAc;IACrB,WAAW,EACT,iGAAiG;IACnG,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ export declare const scopeRemoveUserFromRole: import("#pikku").PikkuFunctionConfig<{
2
+ userId: string;
3
+ role: string;
4
+ }, {
5
+ success: boolean;
6
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
7
+ userId: string;
8
+ role: string;
9
+ }, {
10
+ success: boolean;
11
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
12
+ userId: string;
13
+ role: string;
14
+ }, {
15
+ success: boolean;
16
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ //# sourceMappingURL=scope-remove-user-from-role.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-remove-user-from-role.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-remove-user-from-role.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB;YACxB,MAAM;UAAQ,MAAM;;aACnB,OAAO;;YADR,MAAM;UAAQ,MAAM;;aACnB,OAAO;;YADR,MAAM;UAAQ,MAAM;;aACnB,OAAO;uEAclB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeRemoveUserFromRole = pikkuFunc({
4
+ title: 'Revoke Role',
5
+ description: 'Revokes a role from a user. Takes effect on their next request — no re-login.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { userId, role }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.removeUserFromRole(userId, role);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-remove-user-from-role.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-remove-user-from-role.function.js","sourceRoot":"","sources":["../../../src/functions/scope-remove-user-from-role.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAG9C;IACA,KAAK,EAAE,aAAa;IACpB,WAAW,EACT,+EAA+E;IACjF,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,qBAAqB,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ export declare const scopeSetRoleScopes: import("#pikku").PikkuFunctionConfig<{
2
+ name: string;
3
+ scopes: string[];
4
+ }, {
5
+ success: boolean;
6
+ }, "rpc" | "session", import("#pikku").PikkuFunction<{
7
+ name: string;
8
+ scopes: string[];
9
+ }, {
10
+ success: boolean;
11
+ }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunctionSessionless<{
12
+ name: string;
13
+ scopes: string[];
14
+ }, {
15
+ success: boolean;
16
+ }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ //# sourceMappingURL=scope-set-role-scopes.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-set-role-scopes.function.d.ts","sourceRoot":"","sources":["../../../src/functions/scope-set-role-scopes.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;UACrB,MAAM;YAAU,MAAM,EAAE;;aACrB,OAAO;;UADV,MAAM;YAAU,MAAM,EAAE;;aACrB,OAAO;;UADV,MAAM;YAAU,MAAM,EAAE;;aACrB,OAAO;uEAclB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { MissingServiceError } from '@pikku/core/errors';
2
+ import { pikkuFunc } from '#pikku';
3
+ export const scopeSetRoleScopes = pikkuFunc({
4
+ title: 'Set Role Scopes',
5
+ description: 'Replaces the scopes a role grants. Users holding it see the change on their next request.',
6
+ expose: true,
7
+ scopes: ['pikku:scopes:manage'],
8
+ func: async ({ scopeService }, { name, scopes }) => {
9
+ if (!scopeService) {
10
+ throw new MissingServiceError('ScopeService is not configured');
11
+ }
12
+ await scopeService.setRoleScopes(name, scopes);
13
+ return { success: true };
14
+ },
15
+ });
16
+ //# sourceMappingURL=scope-set-role-scopes.function.js.map