@fntio/infra-client 0.0.0-stage → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +193 -0
- package/LICENSE +93 -0
- package/README.md +875 -2
- package/assets/acl-reconciler/index.js +1604 -0
- package/assets/api/index.js +9857 -0
- package/assets/api/package.json +9 -0
- package/assets/api/vendor_modules/.package-lock.json +857 -0
- package/assets/api/vendor_modules/accepts/HISTORY.md +243 -0
- package/assets/api/vendor_modules/accepts/LICENSE +23 -0
- package/assets/api/vendor_modules/accepts/README.md +140 -0
- package/assets/api/vendor_modules/accepts/index.js +238 -0
- package/assets/api/vendor_modules/accepts/package.json +47 -0
- package/assets/api/vendor_modules/array-flatten/LICENSE +21 -0
- package/assets/api/vendor_modules/array-flatten/README.md +43 -0
- package/assets/api/vendor_modules/array-flatten/array-flatten.js +64 -0
- package/assets/api/vendor_modules/array-flatten/package.json +39 -0
- package/assets/api/vendor_modules/aws-jwt-verify/LICENSE +175 -0
- package/assets/api/vendor_modules/aws-jwt-verify/README.md +1033 -0
- package/assets/api/vendor_modules/aws-jwt-verify/asn1.d.ts +20 -0
- package/assets/api/vendor_modules/aws-jwt-verify/assert.d.ts +41 -0
- package/assets/api/vendor_modules/aws-jwt-verify/cognito-verifier.d.ts +183 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/asn1.js +301 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/assert.js +108 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/cognito-verifier.js +158 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/error.js +131 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/https-common.js +29 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/https-node.js +89 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/https.js +52 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/index.js +9 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/jwk.js +221 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/jwt-model.js +10 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/jwt-rsa.js +397 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/jwt.js +161 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/node-web-compat-node.js +48 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/node-web-compat-web.js +78 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/node-web-compat.js +11 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/package.json +1 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/safe-json-parse.js +34 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/cjs/typing-util.js +6 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/asn1.js +296 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/assert.js +101 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/cognito-verifier.js +153 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/error.js +101 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/https-common.js +25 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/https-node.js +85 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/https.js +48 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/index.js +4 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/jwk.js +208 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/jwt-model.js +7 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/jwt-rsa.js +389 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/jwt.js +156 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/node-web-compat-node.js +45 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/node-web-compat-web.js +75 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/node-web-compat.js +10 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/package.json +1 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/safe-json-parse.js +29 -0
- package/assets/api/vendor_modules/aws-jwt-verify/dist/esm/typing-util.js +5 -0
- package/assets/api/vendor_modules/aws-jwt-verify/error.d.ts +108 -0
- package/assets/api/vendor_modules/aws-jwt-verify/https-common.d.ts +9 -0
- package/assets/api/vendor_modules/aws-jwt-verify/https-node.d.ts +20 -0
- package/assets/api/vendor_modules/aws-jwt-verify/https.d.ts +35 -0
- package/assets/api/vendor_modules/aws-jwt-verify/index.d.ts +2 -0
- package/assets/api/vendor_modules/aws-jwt-verify/jwk.d.ts +76 -0
- package/assets/api/vendor_modules/aws-jwt-verify/jwt-model.d.ts +78 -0
- package/assets/api/vendor_modules/aws-jwt-verify/jwt-rsa.d.ts +348 -0
- package/assets/api/vendor_modules/aws-jwt-verify/jwt.d.ts +51 -0
- package/assets/api/vendor_modules/aws-jwt-verify/package.json +136 -0
- package/assets/api/vendor_modules/aws-jwt-verify/safe-json-parse.d.ts +18 -0
- package/assets/api/vendor_modules/aws-jwt-verify/typing-util.d.ts +38 -0
- package/assets/api/vendor_modules/body-parser/HISTORY.md +703 -0
- package/assets/api/vendor_modules/body-parser/LICENSE +23 -0
- package/assets/api/vendor_modules/body-parser/README.md +476 -0
- package/assets/api/vendor_modules/body-parser/index.js +156 -0
- package/assets/api/vendor_modules/body-parser/lib/read.js +205 -0
- package/assets/api/vendor_modules/body-parser/lib/types/json.js +247 -0
- package/assets/api/vendor_modules/body-parser/lib/types/raw.js +105 -0
- package/assets/api/vendor_modules/body-parser/lib/types/text.js +125 -0
- package/assets/api/vendor_modules/body-parser/lib/types/urlencoded.js +303 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/.editorconfig +46 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/.github/SECURITY.md +11 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/.github/THREAT_MODEL.md +80 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/.nycrc +13 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/CHANGELOG.md +872 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/LICENSE.md +29 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/README.md +804 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/dist/qs.js +141 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/eslint.config.mjs +57 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/lib/formats.js +23 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/lib/index.js +11 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/lib/parse.js +503 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/lib/stringify.js +378 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/lib/utils.js +512 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/package.json +95 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/test/empty-keys-cases.js +267 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/test/parse.js +2296 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/test/stringify.js +1995 -0
- package/assets/api/vendor_modules/body-parser/node_modules/qs/test/utils.js +822 -0
- package/assets/api/vendor_modules/body-parser/package.json +55 -0
- package/assets/api/vendor_modules/bytes/History.md +97 -0
- package/assets/api/vendor_modules/bytes/LICENSE +23 -0
- package/assets/api/vendor_modules/bytes/Readme.md +152 -0
- package/assets/api/vendor_modules/bytes/index.js +170 -0
- package/assets/api/vendor_modules/bytes/package.json +42 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/.eslintrc +17 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/.nycrc +9 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/README.md +62 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/index.js +15 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/package.json +85 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/test/index.js +63 -0
- package/assets/api/vendor_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/assets/api/vendor_modules/call-bound/.eslintrc +13 -0
- package/assets/api/vendor_modules/call-bound/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/call-bound/.nycrc +9 -0
- package/assets/api/vendor_modules/call-bound/CHANGELOG.md +42 -0
- package/assets/api/vendor_modules/call-bound/LICENSE +21 -0
- package/assets/api/vendor_modules/call-bound/README.md +53 -0
- package/assets/api/vendor_modules/call-bound/index.d.ts +94 -0
- package/assets/api/vendor_modules/call-bound/index.js +19 -0
- package/assets/api/vendor_modules/call-bound/package.json +99 -0
- package/assets/api/vendor_modules/call-bound/test/index.js +61 -0
- package/assets/api/vendor_modules/call-bound/tsconfig.json +10 -0
- package/assets/api/vendor_modules/content-disposition/HISTORY.md +60 -0
- package/assets/api/vendor_modules/content-disposition/LICENSE +22 -0
- package/assets/api/vendor_modules/content-disposition/README.md +142 -0
- package/assets/api/vendor_modules/content-disposition/index.js +458 -0
- package/assets/api/vendor_modules/content-disposition/package.json +44 -0
- package/assets/api/vendor_modules/content-type/HISTORY.md +29 -0
- package/assets/api/vendor_modules/content-type/LICENSE +22 -0
- package/assets/api/vendor_modules/content-type/README.md +94 -0
- package/assets/api/vendor_modules/content-type/index.js +225 -0
- package/assets/api/vendor_modules/content-type/package.json +42 -0
- package/assets/api/vendor_modules/cookie/LICENSE +24 -0
- package/assets/api/vendor_modules/cookie/README.md +317 -0
- package/assets/api/vendor_modules/cookie/SECURITY.md +25 -0
- package/assets/api/vendor_modules/cookie/index.js +335 -0
- package/assets/api/vendor_modules/cookie/package.json +44 -0
- package/assets/api/vendor_modules/cookie-signature/History.md +42 -0
- package/assets/api/vendor_modules/cookie-signature/Readme.md +42 -0
- package/assets/api/vendor_modules/cookie-signature/index.js +51 -0
- package/assets/api/vendor_modules/cookie-signature/package.json +18 -0
- package/assets/api/vendor_modules/debug/.coveralls.yml +1 -0
- package/assets/api/vendor_modules/debug/.eslintrc +11 -0
- package/assets/api/vendor_modules/debug/.travis.yml +14 -0
- package/assets/api/vendor_modules/debug/CHANGELOG.md +362 -0
- package/assets/api/vendor_modules/debug/LICENSE +19 -0
- package/assets/api/vendor_modules/debug/Makefile +50 -0
- package/assets/api/vendor_modules/debug/README.md +312 -0
- package/assets/api/vendor_modules/debug/component.json +19 -0
- package/assets/api/vendor_modules/debug/karma.conf.js +70 -0
- package/assets/api/vendor_modules/debug/node.js +1 -0
- package/assets/api/vendor_modules/debug/package.json +49 -0
- package/assets/api/vendor_modules/debug/src/browser.js +185 -0
- package/assets/api/vendor_modules/debug/src/debug.js +202 -0
- package/assets/api/vendor_modules/debug/src/index.js +10 -0
- package/assets/api/vendor_modules/debug/src/inspector-log.js +15 -0
- package/assets/api/vendor_modules/debug/src/node.js +248 -0
- package/assets/api/vendor_modules/depd/History.md +103 -0
- package/assets/api/vendor_modules/depd/LICENSE +22 -0
- package/assets/api/vendor_modules/depd/Readme.md +280 -0
- package/assets/api/vendor_modules/depd/index.js +538 -0
- package/assets/api/vendor_modules/depd/lib/browser/index.js +77 -0
- package/assets/api/vendor_modules/depd/package.json +45 -0
- package/assets/api/vendor_modules/destroy/LICENSE +23 -0
- package/assets/api/vendor_modules/destroy/README.md +63 -0
- package/assets/api/vendor_modules/destroy/index.js +209 -0
- package/assets/api/vendor_modules/destroy/package.json +48 -0
- package/assets/api/vendor_modules/dunder-proto/.eslintrc +5 -0
- package/assets/api/vendor_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/dunder-proto/.nycrc +13 -0
- package/assets/api/vendor_modules/dunder-proto/CHANGELOG.md +24 -0
- package/assets/api/vendor_modules/dunder-proto/LICENSE +21 -0
- package/assets/api/vendor_modules/dunder-proto/README.md +54 -0
- package/assets/api/vendor_modules/dunder-proto/get.d.ts +5 -0
- package/assets/api/vendor_modules/dunder-proto/get.js +30 -0
- package/assets/api/vendor_modules/dunder-proto/package.json +76 -0
- package/assets/api/vendor_modules/dunder-proto/set.d.ts +5 -0
- package/assets/api/vendor_modules/dunder-proto/set.js +35 -0
- package/assets/api/vendor_modules/dunder-proto/test/get.js +34 -0
- package/assets/api/vendor_modules/dunder-proto/test/index.js +4 -0
- package/assets/api/vendor_modules/dunder-proto/test/set.js +50 -0
- package/assets/api/vendor_modules/dunder-proto/tsconfig.json +9 -0
- package/assets/api/vendor_modules/ee-first/LICENSE +22 -0
- package/assets/api/vendor_modules/ee-first/README.md +80 -0
- package/assets/api/vendor_modules/ee-first/index.js +95 -0
- package/assets/api/vendor_modules/ee-first/package.json +29 -0
- package/assets/api/vendor_modules/encodeurl/LICENSE +22 -0
- package/assets/api/vendor_modules/encodeurl/README.md +109 -0
- package/assets/api/vendor_modules/encodeurl/index.js +60 -0
- package/assets/api/vendor_modules/encodeurl/package.json +40 -0
- package/assets/api/vendor_modules/es-define-property/.eslintrc +13 -0
- package/assets/api/vendor_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/es-define-property/.nycrc +9 -0
- package/assets/api/vendor_modules/es-define-property/CHANGELOG.md +29 -0
- package/assets/api/vendor_modules/es-define-property/LICENSE +21 -0
- package/assets/api/vendor_modules/es-define-property/README.md +49 -0
- package/assets/api/vendor_modules/es-define-property/index.d.ts +3 -0
- package/assets/api/vendor_modules/es-define-property/index.js +14 -0
- package/assets/api/vendor_modules/es-define-property/package.json +81 -0
- package/assets/api/vendor_modules/es-define-property/test/index.js +56 -0
- package/assets/api/vendor_modules/es-define-property/tsconfig.json +10 -0
- package/assets/api/vendor_modules/es-errors/.eslintrc +5 -0
- package/assets/api/vendor_modules/es-errors/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/es-errors/CHANGELOG.md +40 -0
- package/assets/api/vendor_modules/es-errors/LICENSE +21 -0
- package/assets/api/vendor_modules/es-errors/README.md +55 -0
- package/assets/api/vendor_modules/es-errors/eval.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/eval.js +4 -0
- package/assets/api/vendor_modules/es-errors/index.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/index.js +4 -0
- package/assets/api/vendor_modules/es-errors/package.json +80 -0
- package/assets/api/vendor_modules/es-errors/range.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/range.js +4 -0
- package/assets/api/vendor_modules/es-errors/ref.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/ref.js +4 -0
- package/assets/api/vendor_modules/es-errors/syntax.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/syntax.js +4 -0
- package/assets/api/vendor_modules/es-errors/test/index.js +19 -0
- package/assets/api/vendor_modules/es-errors/tsconfig.json +49 -0
- package/assets/api/vendor_modules/es-errors/type.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/type.js +4 -0
- package/assets/api/vendor_modules/es-errors/uri.d.ts +3 -0
- package/assets/api/vendor_modules/es-errors/uri.js +4 -0
- package/assets/api/vendor_modules/es-object-atoms/.eslintrc +16 -0
- package/assets/api/vendor_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/es-object-atoms/CHANGELOG.md +44 -0
- package/assets/api/vendor_modules/es-object-atoms/LICENSE +21 -0
- package/assets/api/vendor_modules/es-object-atoms/README.md +63 -0
- package/assets/api/vendor_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/assets/api/vendor_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/assets/api/vendor_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/assets/api/vendor_modules/es-object-atoms/ToObject.js +10 -0
- package/assets/api/vendor_modules/es-object-atoms/index.d.ts +3 -0
- package/assets/api/vendor_modules/es-object-atoms/index.js +4 -0
- package/assets/api/vendor_modules/es-object-atoms/isObject.d.ts +3 -0
- package/assets/api/vendor_modules/es-object-atoms/isObject.js +6 -0
- package/assets/api/vendor_modules/es-object-atoms/package.json +79 -0
- package/assets/api/vendor_modules/es-object-atoms/test/index.js +38 -0
- package/assets/api/vendor_modules/es-object-atoms/tsconfig.json +7 -0
- package/assets/api/vendor_modules/escape-html/LICENSE +24 -0
- package/assets/api/vendor_modules/escape-html/Readme.md +43 -0
- package/assets/api/vendor_modules/escape-html/index.js +78 -0
- package/assets/api/vendor_modules/escape-html/package.json +24 -0
- package/assets/api/vendor_modules/etag/HISTORY.md +83 -0
- package/assets/api/vendor_modules/etag/LICENSE +22 -0
- package/assets/api/vendor_modules/etag/README.md +159 -0
- package/assets/api/vendor_modules/etag/index.js +131 -0
- package/assets/api/vendor_modules/etag/package.json +47 -0
- package/assets/api/vendor_modules/express/History.md +3676 -0
- package/assets/api/vendor_modules/express/LICENSE +24 -0
- package/assets/api/vendor_modules/express/Readme.md +260 -0
- package/assets/api/vendor_modules/express/index.js +11 -0
- package/assets/api/vendor_modules/express/lib/application.js +661 -0
- package/assets/api/vendor_modules/express/lib/express.js +116 -0
- package/assets/api/vendor_modules/express/lib/middleware/init.js +43 -0
- package/assets/api/vendor_modules/express/lib/middleware/query.js +47 -0
- package/assets/api/vendor_modules/express/lib/request.js +525 -0
- package/assets/api/vendor_modules/express/lib/response.js +1179 -0
- package/assets/api/vendor_modules/express/lib/router/index.js +673 -0
- package/assets/api/vendor_modules/express/lib/router/layer.js +181 -0
- package/assets/api/vendor_modules/express/lib/router/route.js +230 -0
- package/assets/api/vendor_modules/express/lib/utils.js +304 -0
- package/assets/api/vendor_modules/express/lib/view.js +182 -0
- package/assets/api/vendor_modules/express/package.json +102 -0
- package/assets/api/vendor_modules/finalhandler/HISTORY.md +216 -0
- package/assets/api/vendor_modules/finalhandler/LICENSE +22 -0
- package/assets/api/vendor_modules/finalhandler/README.md +147 -0
- package/assets/api/vendor_modules/finalhandler/SECURITY.md +25 -0
- package/assets/api/vendor_modules/finalhandler/index.js +341 -0
- package/assets/api/vendor_modules/finalhandler/package.json +47 -0
- package/assets/api/vendor_modules/forwarded/HISTORY.md +21 -0
- package/assets/api/vendor_modules/forwarded/LICENSE +22 -0
- package/assets/api/vendor_modules/forwarded/README.md +57 -0
- package/assets/api/vendor_modules/forwarded/index.js +90 -0
- package/assets/api/vendor_modules/forwarded/package.json +45 -0
- package/assets/api/vendor_modules/fresh/HISTORY.md +70 -0
- package/assets/api/vendor_modules/fresh/LICENSE +23 -0
- package/assets/api/vendor_modules/fresh/README.md +119 -0
- package/assets/api/vendor_modules/fresh/index.js +137 -0
- package/assets/api/vendor_modules/fresh/package.json +46 -0
- package/assets/api/vendor_modules/function-bind/.eslintrc +21 -0
- package/assets/api/vendor_modules/function-bind/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/function-bind/.github/SECURITY.md +3 -0
- package/assets/api/vendor_modules/function-bind/.nycrc +13 -0
- package/assets/api/vendor_modules/function-bind/CHANGELOG.md +136 -0
- package/assets/api/vendor_modules/function-bind/LICENSE +20 -0
- package/assets/api/vendor_modules/function-bind/README.md +46 -0
- package/assets/api/vendor_modules/function-bind/implementation.js +84 -0
- package/assets/api/vendor_modules/function-bind/index.js +5 -0
- package/assets/api/vendor_modules/function-bind/package.json +87 -0
- package/assets/api/vendor_modules/function-bind/test/.eslintrc +9 -0
- package/assets/api/vendor_modules/function-bind/test/index.js +252 -0
- package/assets/api/vendor_modules/get-intrinsic/.eslintrc +42 -0
- package/assets/api/vendor_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/get-intrinsic/.nycrc +9 -0
- package/assets/api/vendor_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/assets/api/vendor_modules/get-intrinsic/LICENSE +21 -0
- package/assets/api/vendor_modules/get-intrinsic/README.md +71 -0
- package/assets/api/vendor_modules/get-intrinsic/index.js +378 -0
- package/assets/api/vendor_modules/get-intrinsic/package.json +97 -0
- package/assets/api/vendor_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- package/assets/api/vendor_modules/get-proto/.eslintrc +10 -0
- package/assets/api/vendor_modules/get-proto/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/get-proto/.nycrc +9 -0
- package/assets/api/vendor_modules/get-proto/CHANGELOG.md +21 -0
- package/assets/api/vendor_modules/get-proto/LICENSE +21 -0
- package/assets/api/vendor_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/assets/api/vendor_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/assets/api/vendor_modules/get-proto/README.md +50 -0
- package/assets/api/vendor_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/assets/api/vendor_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/assets/api/vendor_modules/get-proto/index.d.ts +5 -0
- package/assets/api/vendor_modules/get-proto/index.js +27 -0
- package/assets/api/vendor_modules/get-proto/package.json +81 -0
- package/assets/api/vendor_modules/get-proto/test/index.js +68 -0
- package/assets/api/vendor_modules/get-proto/tsconfig.json +9 -0
- package/assets/api/vendor_modules/gopd/.eslintrc +16 -0
- package/assets/api/vendor_modules/gopd/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/gopd/CHANGELOG.md +45 -0
- package/assets/api/vendor_modules/gopd/LICENSE +21 -0
- package/assets/api/vendor_modules/gopd/README.md +40 -0
- package/assets/api/vendor_modules/gopd/gOPD.d.ts +1 -0
- package/assets/api/vendor_modules/gopd/gOPD.js +4 -0
- package/assets/api/vendor_modules/gopd/index.d.ts +5 -0
- package/assets/api/vendor_modules/gopd/index.js +15 -0
- package/assets/api/vendor_modules/gopd/package.json +77 -0
- package/assets/api/vendor_modules/gopd/test/index.js +36 -0
- package/assets/api/vendor_modules/gopd/tsconfig.json +9 -0
- package/assets/api/vendor_modules/has-symbols/.eslintrc +11 -0
- package/assets/api/vendor_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/has-symbols/.nycrc +9 -0
- package/assets/api/vendor_modules/has-symbols/CHANGELOG.md +91 -0
- package/assets/api/vendor_modules/has-symbols/LICENSE +21 -0
- package/assets/api/vendor_modules/has-symbols/README.md +46 -0
- package/assets/api/vendor_modules/has-symbols/index.d.ts +3 -0
- package/assets/api/vendor_modules/has-symbols/index.js +14 -0
- package/assets/api/vendor_modules/has-symbols/package.json +111 -0
- package/assets/api/vendor_modules/has-symbols/shams.d.ts +3 -0
- package/assets/api/vendor_modules/has-symbols/shams.js +45 -0
- package/assets/api/vendor_modules/has-symbols/test/index.js +22 -0
- package/assets/api/vendor_modules/has-symbols/test/shams/core-js.js +29 -0
- package/assets/api/vendor_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- package/assets/api/vendor_modules/has-symbols/test/tests.js +58 -0
- package/assets/api/vendor_modules/has-symbols/tsconfig.json +10 -0
- package/assets/api/vendor_modules/hasown/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/hasown/.nycrc +13 -0
- package/assets/api/vendor_modules/hasown/CHANGELOG.md +58 -0
- package/assets/api/vendor_modules/hasown/LICENSE +21 -0
- package/assets/api/vendor_modules/hasown/README.md +40 -0
- package/assets/api/vendor_modules/hasown/eslint.config.mjs +6 -0
- package/assets/api/vendor_modules/hasown/index.d.ts +3 -0
- package/assets/api/vendor_modules/hasown/index.js +8 -0
- package/assets/api/vendor_modules/hasown/package.json +91 -0
- package/assets/api/vendor_modules/hasown/tsconfig.json +6 -0
- package/assets/api/vendor_modules/http-errors/HISTORY.md +186 -0
- package/assets/api/vendor_modules/http-errors/LICENSE +23 -0
- package/assets/api/vendor_modules/http-errors/README.md +169 -0
- package/assets/api/vendor_modules/http-errors/index.js +290 -0
- package/assets/api/vendor_modules/http-errors/package.json +54 -0
- package/assets/api/vendor_modules/iconv-lite/Changelog.md +162 -0
- package/assets/api/vendor_modules/iconv-lite/LICENSE +21 -0
- package/assets/api/vendor_modules/iconv-lite/README.md +156 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/index.js +22 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/internal.js +188 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/utf16.js +177 -0
- package/assets/api/vendor_modules/iconv-lite/encodings/utf7.js +290 -0
- package/assets/api/vendor_modules/iconv-lite/lib/bom-handling.js +52 -0
- package/assets/api/vendor_modules/iconv-lite/lib/extend-node.js +217 -0
- package/assets/api/vendor_modules/iconv-lite/lib/index.d.ts +24 -0
- package/assets/api/vendor_modules/iconv-lite/lib/index.js +153 -0
- package/assets/api/vendor_modules/iconv-lite/lib/streams.js +121 -0
- package/assets/api/vendor_modules/iconv-lite/package.json +46 -0
- package/assets/api/vendor_modules/inherits/LICENSE +16 -0
- package/assets/api/vendor_modules/inherits/README.md +42 -0
- package/assets/api/vendor_modules/inherits/inherits.js +9 -0
- package/assets/api/vendor_modules/inherits/inherits_browser.js +27 -0
- package/assets/api/vendor_modules/inherits/package.json +29 -0
- package/assets/api/vendor_modules/ipaddr.js/LICENSE +19 -0
- package/assets/api/vendor_modules/ipaddr.js/README.md +233 -0
- package/assets/api/vendor_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/assets/api/vendor_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/assets/api/vendor_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/assets/api/vendor_modules/ipaddr.js/package.json +35 -0
- package/assets/api/vendor_modules/math-intrinsics/.eslintrc +16 -0
- package/assets/api/vendor_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/assets/api/vendor_modules/math-intrinsics/LICENSE +21 -0
- package/assets/api/vendor_modules/math-intrinsics/README.md +50 -0
- package/assets/api/vendor_modules/math-intrinsics/abs.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/abs.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/assets/api/vendor_modules/math-intrinsics/floor.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/floor.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/isFinite.js +12 -0
- package/assets/api/vendor_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/isInteger.js +16 -0
- package/assets/api/vendor_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/isNaN.js +6 -0
- package/assets/api/vendor_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/assets/api/vendor_modules/math-intrinsics/max.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/max.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/min.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/min.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/mod.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/mod.js +9 -0
- package/assets/api/vendor_modules/math-intrinsics/package.json +86 -0
- package/assets/api/vendor_modules/math-intrinsics/pow.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/pow.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/round.d.ts +1 -0
- package/assets/api/vendor_modules/math-intrinsics/round.js +4 -0
- package/assets/api/vendor_modules/math-intrinsics/sign.d.ts +3 -0
- package/assets/api/vendor_modules/math-intrinsics/sign.js +11 -0
- package/assets/api/vendor_modules/math-intrinsics/test/index.js +192 -0
- package/assets/api/vendor_modules/math-intrinsics/tsconfig.json +3 -0
- package/assets/api/vendor_modules/media-typer/HISTORY.md +22 -0
- package/assets/api/vendor_modules/media-typer/LICENSE +22 -0
- package/assets/api/vendor_modules/media-typer/README.md +81 -0
- package/assets/api/vendor_modules/media-typer/index.js +270 -0
- package/assets/api/vendor_modules/media-typer/package.json +26 -0
- package/assets/api/vendor_modules/merge-descriptors/HISTORY.md +21 -0
- package/assets/api/vendor_modules/merge-descriptors/LICENSE +23 -0
- package/assets/api/vendor_modules/merge-descriptors/README.md +49 -0
- package/assets/api/vendor_modules/merge-descriptors/index.js +60 -0
- package/assets/api/vendor_modules/merge-descriptors/package.json +39 -0
- package/assets/api/vendor_modules/methods/HISTORY.md +29 -0
- package/assets/api/vendor_modules/methods/LICENSE +24 -0
- package/assets/api/vendor_modules/methods/README.md +51 -0
- package/assets/api/vendor_modules/methods/index.js +69 -0
- package/assets/api/vendor_modules/methods/package.json +36 -0
- package/assets/api/vendor_modules/mime/CHANGELOG.md +164 -0
- package/assets/api/vendor_modules/mime/LICENSE +21 -0
- package/assets/api/vendor_modules/mime/README.md +90 -0
- package/assets/api/vendor_modules/mime/cli.js +8 -0
- package/assets/api/vendor_modules/mime/mime.js +108 -0
- package/assets/api/vendor_modules/mime/package.json +44 -0
- package/assets/api/vendor_modules/mime/src/build.js +53 -0
- package/assets/api/vendor_modules/mime/src/test.js +60 -0
- package/assets/api/vendor_modules/mime/types.json +1 -0
- package/assets/api/vendor_modules/mime-db/HISTORY.md +507 -0
- package/assets/api/vendor_modules/mime-db/LICENSE +23 -0
- package/assets/api/vendor_modules/mime-db/README.md +100 -0
- package/assets/api/vendor_modules/mime-db/db.json +8519 -0
- package/assets/api/vendor_modules/mime-db/index.js +12 -0
- package/assets/api/vendor_modules/mime-db/package.json +60 -0
- package/assets/api/vendor_modules/mime-types/HISTORY.md +397 -0
- package/assets/api/vendor_modules/mime-types/LICENSE +23 -0
- package/assets/api/vendor_modules/mime-types/README.md +113 -0
- package/assets/api/vendor_modules/mime-types/index.js +188 -0
- package/assets/api/vendor_modules/mime-types/package.json +44 -0
- package/assets/api/vendor_modules/ms/index.js +152 -0
- package/assets/api/vendor_modules/ms/license.md +21 -0
- package/assets/api/vendor_modules/ms/package.json +37 -0
- package/assets/api/vendor_modules/ms/readme.md +51 -0
- package/assets/api/vendor_modules/negotiator/HISTORY.md +108 -0
- package/assets/api/vendor_modules/negotiator/LICENSE +24 -0
- package/assets/api/vendor_modules/negotiator/README.md +203 -0
- package/assets/api/vendor_modules/negotiator/index.js +82 -0
- package/assets/api/vendor_modules/negotiator/lib/charset.js +169 -0
- package/assets/api/vendor_modules/negotiator/lib/encoding.js +184 -0
- package/assets/api/vendor_modules/negotiator/lib/language.js +179 -0
- package/assets/api/vendor_modules/negotiator/lib/mediaType.js +294 -0
- package/assets/api/vendor_modules/negotiator/package.json +42 -0
- package/assets/api/vendor_modules/object-inspect/.eslintrc +53 -0
- package/assets/api/vendor_modules/object-inspect/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/object-inspect/.nycrc +13 -0
- package/assets/api/vendor_modules/object-inspect/CHANGELOG.md +424 -0
- package/assets/api/vendor_modules/object-inspect/LICENSE +21 -0
- package/assets/api/vendor_modules/object-inspect/example/all.js +23 -0
- package/assets/api/vendor_modules/object-inspect/example/circular.js +6 -0
- package/assets/api/vendor_modules/object-inspect/example/fn.js +5 -0
- package/assets/api/vendor_modules/object-inspect/example/inspect.js +10 -0
- package/assets/api/vendor_modules/object-inspect/index.js +544 -0
- package/assets/api/vendor_modules/object-inspect/package-support.json +20 -0
- package/assets/api/vendor_modules/object-inspect/package.json +105 -0
- package/assets/api/vendor_modules/object-inspect/readme.markdown +84 -0
- package/assets/api/vendor_modules/object-inspect/test/bigint.js +58 -0
- package/assets/api/vendor_modules/object-inspect/test/browser/dom.js +15 -0
- package/assets/api/vendor_modules/object-inspect/test/circular.js +16 -0
- package/assets/api/vendor_modules/object-inspect/test/deep.js +12 -0
- package/assets/api/vendor_modules/object-inspect/test/element.js +53 -0
- package/assets/api/vendor_modules/object-inspect/test/err.js +48 -0
- package/assets/api/vendor_modules/object-inspect/test/fakes.js +29 -0
- package/assets/api/vendor_modules/object-inspect/test/fn.js +76 -0
- package/assets/api/vendor_modules/object-inspect/test/global.js +17 -0
- package/assets/api/vendor_modules/object-inspect/test/has.js +15 -0
- package/assets/api/vendor_modules/object-inspect/test/holes.js +15 -0
- package/assets/api/vendor_modules/object-inspect/test/indent-option.js +271 -0
- package/assets/api/vendor_modules/object-inspect/test/inspect.js +139 -0
- package/assets/api/vendor_modules/object-inspect/test/lowbyte.js +12 -0
- package/assets/api/vendor_modules/object-inspect/test/number.js +58 -0
- package/assets/api/vendor_modules/object-inspect/test/quoteStyle.js +26 -0
- package/assets/api/vendor_modules/object-inspect/test/toStringTag.js +40 -0
- package/assets/api/vendor_modules/object-inspect/test/undef.js +12 -0
- package/assets/api/vendor_modules/object-inspect/test/values.js +261 -0
- package/assets/api/vendor_modules/object-inspect/test-core-js.js +26 -0
- package/assets/api/vendor_modules/object-inspect/util.inspect.js +1 -0
- package/assets/api/vendor_modules/on-finished/HISTORY.md +98 -0
- package/assets/api/vendor_modules/on-finished/LICENSE +23 -0
- package/assets/api/vendor_modules/on-finished/README.md +162 -0
- package/assets/api/vendor_modules/on-finished/index.js +234 -0
- package/assets/api/vendor_modules/on-finished/package.json +39 -0
- package/assets/api/vendor_modules/parseurl/HISTORY.md +58 -0
- package/assets/api/vendor_modules/parseurl/LICENSE +24 -0
- package/assets/api/vendor_modules/parseurl/README.md +133 -0
- package/assets/api/vendor_modules/parseurl/index.js +158 -0
- package/assets/api/vendor_modules/parseurl/package.json +40 -0
- package/assets/api/vendor_modules/path-to-regexp/LICENSE +21 -0
- package/assets/api/vendor_modules/path-to-regexp/Readme.md +35 -0
- package/assets/api/vendor_modules/path-to-regexp/index.js +158 -0
- package/assets/api/vendor_modules/path-to-regexp/package.json +30 -0
- package/assets/api/vendor_modules/proxy-addr/HISTORY.md +167 -0
- package/assets/api/vendor_modules/proxy-addr/LICENSE +22 -0
- package/assets/api/vendor_modules/proxy-addr/README.md +139 -0
- package/assets/api/vendor_modules/proxy-addr/index.js +359 -0
- package/assets/api/vendor_modules/proxy-addr/package.json +51 -0
- package/assets/api/vendor_modules/qs/.editorconfig +46 -0
- package/assets/api/vendor_modules/qs/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/qs/.github/SECURITY.md +11 -0
- package/assets/api/vendor_modules/qs/.github/THREAT_MODEL.md +78 -0
- package/assets/api/vendor_modules/qs/.nycrc +13 -0
- package/assets/api/vendor_modules/qs/CHANGELOG.md +833 -0
- package/assets/api/vendor_modules/qs/LICENSE.md +29 -0
- package/assets/api/vendor_modules/qs/README.md +758 -0
- package/assets/api/vendor_modules/qs/dist/qs.js +141 -0
- package/assets/api/vendor_modules/qs/eslint.config.mjs +57 -0
- package/assets/api/vendor_modules/qs/lib/formats.js +23 -0
- package/assets/api/vendor_modules/qs/lib/index.js +11 -0
- package/assets/api/vendor_modules/qs/lib/parse.js +414 -0
- package/assets/api/vendor_modules/qs/lib/stringify.js +363 -0
- package/assets/api/vendor_modules/qs/lib/utils.js +381 -0
- package/assets/api/vendor_modules/qs/package.json +95 -0
- package/assets/api/vendor_modules/qs/test/empty-keys-cases.js +267 -0
- package/assets/api/vendor_modules/qs/test/parse.js +1933 -0
- package/assets/api/vendor_modules/qs/test/stringify.js +1448 -0
- package/assets/api/vendor_modules/qs/test/utils.js +626 -0
- package/assets/api/vendor_modules/range-parser/HISTORY.md +56 -0
- package/assets/api/vendor_modules/range-parser/LICENSE +23 -0
- package/assets/api/vendor_modules/range-parser/README.md +84 -0
- package/assets/api/vendor_modules/range-parser/index.js +162 -0
- package/assets/api/vendor_modules/range-parser/package.json +44 -0
- package/assets/api/vendor_modules/raw-body/LICENSE +22 -0
- package/assets/api/vendor_modules/raw-body/README.md +223 -0
- package/assets/api/vendor_modules/raw-body/index.d.ts +87 -0
- package/assets/api/vendor_modules/raw-body/index.js +336 -0
- package/assets/api/vendor_modules/raw-body/package.json +47 -0
- package/assets/api/vendor_modules/safe-buffer/LICENSE +21 -0
- package/assets/api/vendor_modules/safe-buffer/README.md +584 -0
- package/assets/api/vendor_modules/safe-buffer/index.d.ts +187 -0
- package/assets/api/vendor_modules/safe-buffer/index.js +65 -0
- package/assets/api/vendor_modules/safe-buffer/package.json +51 -0
- package/assets/api/vendor_modules/safer-buffer/LICENSE +21 -0
- package/assets/api/vendor_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/assets/api/vendor_modules/safer-buffer/Readme.md +156 -0
- package/assets/api/vendor_modules/safer-buffer/dangerous.js +58 -0
- package/assets/api/vendor_modules/safer-buffer/package.json +34 -0
- package/assets/api/vendor_modules/safer-buffer/safer.js +77 -0
- package/assets/api/vendor_modules/safer-buffer/tests.js +406 -0
- package/assets/api/vendor_modules/send/HISTORY.md +538 -0
- package/assets/api/vendor_modules/send/LICENSE +23 -0
- package/assets/api/vendor_modules/send/README.md +327 -0
- package/assets/api/vendor_modules/send/SECURITY.md +24 -0
- package/assets/api/vendor_modules/send/index.js +1142 -0
- package/assets/api/vendor_modules/send/node_modules/ms/index.js +162 -0
- package/assets/api/vendor_modules/send/node_modules/ms/license.md +21 -0
- package/assets/api/vendor_modules/send/node_modules/ms/package.json +38 -0
- package/assets/api/vendor_modules/send/node_modules/ms/readme.md +59 -0
- package/assets/api/vendor_modules/send/package.json +62 -0
- package/assets/api/vendor_modules/serve-static/HISTORY.md +493 -0
- package/assets/api/vendor_modules/serve-static/LICENSE +25 -0
- package/assets/api/vendor_modules/serve-static/README.md +257 -0
- package/assets/api/vendor_modules/serve-static/index.js +209 -0
- package/assets/api/vendor_modules/serve-static/package.json +42 -0
- package/assets/api/vendor_modules/serverless-http/LICENSE.txt +33 -0
- package/assets/api/vendor_modules/serverless-http/README.md +117 -0
- package/assets/api/vendor_modules/serverless-http/lib/finish.js +42 -0
- package/assets/api/vendor_modules/serverless-http/lib/framework/get-framework.js +79 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/clean-up-event.js +98 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/create-request.js +110 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/format-response.js +45 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/index.js +15 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/is-binary.js +42 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/aws/sanitize-headers.js +21 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/clean-up-request.js +41 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/create-request.js +45 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/format-response.js +18 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/index.js +13 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/is-binary.js +42 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/sanitize-headers.js +23 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/azure/set-cookie.json +1 -0
- package/assets/api/vendor_modules/serverless-http/lib/provider/get-provider.js +17 -0
- package/assets/api/vendor_modules/serverless-http/lib/request.js +38 -0
- package/assets/api/vendor_modules/serverless-http/lib/response.js +135 -0
- package/assets/api/vendor_modules/serverless-http/package.json +93 -0
- package/assets/api/vendor_modules/serverless-http/serverless-http.d.ts +41 -0
- package/assets/api/vendor_modules/serverless-http/serverless-http.js +23 -0
- package/assets/api/vendor_modules/setprototypeof/LICENSE +13 -0
- package/assets/api/vendor_modules/setprototypeof/README.md +31 -0
- package/assets/api/vendor_modules/setprototypeof/index.d.ts +2 -0
- package/assets/api/vendor_modules/setprototypeof/index.js +17 -0
- package/assets/api/vendor_modules/setprototypeof/package.json +38 -0
- package/assets/api/vendor_modules/setprototypeof/test/index.js +24 -0
- package/assets/api/vendor_modules/side-channel/.editorconfig +9 -0
- package/assets/api/vendor_modules/side-channel/.eslintrc +12 -0
- package/assets/api/vendor_modules/side-channel/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/side-channel/.nycrc +13 -0
- package/assets/api/vendor_modules/side-channel/CHANGELOG.md +120 -0
- package/assets/api/vendor_modules/side-channel/LICENSE +21 -0
- package/assets/api/vendor_modules/side-channel/README.md +61 -0
- package/assets/api/vendor_modules/side-channel/index.d.ts +14 -0
- package/assets/api/vendor_modules/side-channel/index.js +46 -0
- package/assets/api/vendor_modules/side-channel/package.json +85 -0
- package/assets/api/vendor_modules/side-channel/test/index.js +120 -0
- package/assets/api/vendor_modules/side-channel/tsconfig.json +9 -0
- package/assets/api/vendor_modules/side-channel-list/.editorconfig +9 -0
- package/assets/api/vendor_modules/side-channel-list/.eslintrc +11 -0
- package/assets/api/vendor_modules/side-channel-list/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/side-channel-list/.nycrc +13 -0
- package/assets/api/vendor_modules/side-channel-list/CHANGELOG.md +36 -0
- package/assets/api/vendor_modules/side-channel-list/LICENSE +21 -0
- package/assets/api/vendor_modules/side-channel-list/README.md +62 -0
- package/assets/api/vendor_modules/side-channel-list/index.d.ts +13 -0
- package/assets/api/vendor_modules/side-channel-list/index.js +111 -0
- package/assets/api/vendor_modules/side-channel-list/list.d.ts +14 -0
- package/assets/api/vendor_modules/side-channel-list/package.json +77 -0
- package/assets/api/vendor_modules/side-channel-list/test/index.js +154 -0
- package/assets/api/vendor_modules/side-channel-list/tsconfig.json +9 -0
- package/assets/api/vendor_modules/side-channel-map/.editorconfig +9 -0
- package/assets/api/vendor_modules/side-channel-map/.eslintrc +11 -0
- package/assets/api/vendor_modules/side-channel-map/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/side-channel-map/.nycrc +13 -0
- package/assets/api/vendor_modules/side-channel-map/CHANGELOG.md +22 -0
- package/assets/api/vendor_modules/side-channel-map/LICENSE +21 -0
- package/assets/api/vendor_modules/side-channel-map/README.md +62 -0
- package/assets/api/vendor_modules/side-channel-map/index.d.ts +15 -0
- package/assets/api/vendor_modules/side-channel-map/index.js +68 -0
- package/assets/api/vendor_modules/side-channel-map/package.json +80 -0
- package/assets/api/vendor_modules/side-channel-map/test/index.js +114 -0
- package/assets/api/vendor_modules/side-channel-map/tsconfig.json +9 -0
- package/assets/api/vendor_modules/side-channel-weakmap/.editorconfig +9 -0
- package/assets/api/vendor_modules/side-channel-weakmap/.eslintrc +12 -0
- package/assets/api/vendor_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- package/assets/api/vendor_modules/side-channel-weakmap/.nycrc +13 -0
- package/assets/api/vendor_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- package/assets/api/vendor_modules/side-channel-weakmap/LICENSE +21 -0
- package/assets/api/vendor_modules/side-channel-weakmap/README.md +62 -0
- package/assets/api/vendor_modules/side-channel-weakmap/index.d.ts +15 -0
- package/assets/api/vendor_modules/side-channel-weakmap/index.js +84 -0
- package/assets/api/vendor_modules/side-channel-weakmap/package.json +87 -0
- package/assets/api/vendor_modules/side-channel-weakmap/test/index.js +114 -0
- package/assets/api/vendor_modules/side-channel-weakmap/tsconfig.json +9 -0
- package/assets/api/vendor_modules/statuses/HISTORY.md +87 -0
- package/assets/api/vendor_modules/statuses/LICENSE +23 -0
- package/assets/api/vendor_modules/statuses/README.md +139 -0
- package/assets/api/vendor_modules/statuses/codes.json +65 -0
- package/assets/api/vendor_modules/statuses/index.js +146 -0
- package/assets/api/vendor_modules/statuses/package.json +49 -0
- package/assets/api/vendor_modules/toidentifier/HISTORY.md +9 -0
- package/assets/api/vendor_modules/toidentifier/LICENSE +21 -0
- package/assets/api/vendor_modules/toidentifier/README.md +61 -0
- package/assets/api/vendor_modules/toidentifier/index.js +32 -0
- package/assets/api/vendor_modules/toidentifier/package.json +38 -0
- package/assets/api/vendor_modules/type-is/HISTORY.md +259 -0
- package/assets/api/vendor_modules/type-is/LICENSE +23 -0
- package/assets/api/vendor_modules/type-is/README.md +170 -0
- package/assets/api/vendor_modules/type-is/index.js +266 -0
- package/assets/api/vendor_modules/type-is/package.json +45 -0
- package/assets/api/vendor_modules/unpipe/HISTORY.md +4 -0
- package/assets/api/vendor_modules/unpipe/LICENSE +22 -0
- package/assets/api/vendor_modules/unpipe/README.md +43 -0
- package/assets/api/vendor_modules/unpipe/index.js +69 -0
- package/assets/api/vendor_modules/unpipe/package.json +27 -0
- package/assets/api/vendor_modules/utils-merge/LICENSE +20 -0
- package/assets/api/vendor_modules/utils-merge/README.md +34 -0
- package/assets/api/vendor_modules/utils-merge/index.js +23 -0
- package/assets/api/vendor_modules/utils-merge/package.json +40 -0
- package/assets/api/vendor_modules/vary/HISTORY.md +39 -0
- package/assets/api/vendor_modules/vary/LICENSE +22 -0
- package/assets/api/vendor_modules/vary/README.md +101 -0
- package/assets/api/vendor_modules/vary/index.js +149 -0
- package/assets/api/vendor_modules/vary/package.json +43 -0
- package/assets/federation-presignup/index.js +108 -0
- package/assets/firstadmin/index.js +361 -0
- package/assets/headscale-apikey/index.js +140 -0
- package/assets/invoke-relay/index.js +96 -0
- package/assets/issuer-canary/index.js +71 -0
- package/assets/issuer-publish/index.js +87 -0
- package/assets/keyminter/index.js +209 -0
- package/assets/plugin-authorizer/index.js +1740 -0
- package/assets/plugin-catalog/index.js +881 -0
- package/assets/reapproval/index.js +3761 -0
- package/assets/sg-manager/index.js +176 -0
- package/assets/tailnet-resolver/index.js +55 -0
- package/assets/web/chunk-2MOGDYK4.js +1 -0
- package/assets/web/chunk-2SO4BVIT.js +1 -0
- package/assets/web/chunk-2V6RSAAC.js +1 -0
- package/assets/web/chunk-32GNBTAL.js +1 -0
- package/assets/web/chunk-33SYY2JB.js +1 -0
- package/assets/web/chunk-3VWYT7AX.js +1 -0
- package/assets/web/chunk-4FG4DAWU.js +4 -0
- package/assets/web/chunk-4N2IUS6T.js +1 -0
- package/assets/web/chunk-4SK6XQ6C.js +1 -0
- package/assets/web/chunk-65WE5MXA.js +8 -0
- package/assets/web/chunk-6D7SSSJF.js +1 -0
- package/assets/web/chunk-6KFR7DYY.js +1 -0
- package/assets/web/chunk-A4WHI3ZG.js +8 -0
- package/assets/web/chunk-BNFKRZTP.js +1 -0
- package/assets/web/chunk-CG56PH3M.js +1 -0
- package/assets/web/chunk-CGO25AIM.js +1 -0
- package/assets/web/chunk-CP4XZPOA.js +1 -0
- package/assets/web/chunk-CV7EODPO.js +1 -0
- package/assets/web/chunk-D7TR2ORJ.js +1 -0
- package/assets/web/chunk-DCOFBAKJ.js +1 -0
- package/assets/web/chunk-DOLRLYW7.js +1 -0
- package/assets/web/chunk-EEJ3X466.js +1 -0
- package/assets/web/chunk-EQ4PF25J.js +1 -0
- package/assets/web/chunk-EVP5UVDQ.js +1 -0
- package/assets/web/chunk-EW2VMNHE.js +1 -0
- package/assets/web/chunk-FIUVIKAN.js +1 -0
- package/assets/web/chunk-GHEU25TG.js +1 -0
- package/assets/web/chunk-GK2T2SMO.js +1 -0
- package/assets/web/chunk-GKI3R2JB.js +1 -0
- package/assets/web/chunk-GPKKIOHD.js +2 -0
- package/assets/web/chunk-H4AVFUDM.js +1 -0
- package/assets/web/chunk-H5H727H6.js +1 -0
- package/assets/web/chunk-HGVFH6YM.js +1 -0
- package/assets/web/chunk-HHPIANBK.js +1 -0
- package/assets/web/chunk-HK56COCB.js +1 -0
- package/assets/web/chunk-HZUB7LFV.js +1 -0
- package/assets/web/chunk-I7NTNTBA.js +1 -0
- package/assets/web/chunk-IKK5DQ3Z.js +1 -0
- package/assets/web/chunk-IMH56UBX.js +1 -0
- package/assets/web/chunk-J3SSPCFV.js +1 -0
- package/assets/web/chunk-J4C7C5KO.js +1 -0
- package/assets/web/chunk-J57JB4MU.js +1 -0
- package/assets/web/chunk-JMBXRK3I.js +4 -0
- package/assets/web/chunk-KCCEQIXX.js +1 -0
- package/assets/web/chunk-KEBESIXR.js +1 -0
- package/assets/web/chunk-KPNHT4MK.js +1 -0
- package/assets/web/chunk-LMLXTVZG.js +1 -0
- package/assets/web/chunk-M6OAYNRE.js +1 -0
- package/assets/web/chunk-M7MGX5I4.js +1 -0
- package/assets/web/chunk-MU2VNTNY.js +1 -0
- package/assets/web/chunk-NABAVDRL.js +1 -0
- package/assets/web/chunk-NO5D6WDF.js +1 -0
- package/assets/web/chunk-O4QSFUXB.js +1 -0
- package/assets/web/chunk-OATVFQXO.js +1 -0
- package/assets/web/chunk-P5WRM37W.js +5 -0
- package/assets/web/chunk-PCP6D2SM.js +1 -0
- package/assets/web/chunk-PMMBJK7Q.js +1 -0
- package/assets/web/chunk-PSMER3HX.js +1 -0
- package/assets/web/chunk-QPBWZLCT.js +1 -0
- package/assets/web/chunk-QVABVDO5.js +1 -0
- package/assets/web/chunk-RI77LE5V.js +1 -0
- package/assets/web/chunk-RKGUEXZ2.js +1 -0
- package/assets/web/chunk-RMFH2YTZ.js +1 -0
- package/assets/web/chunk-RROPCBUH.js +1 -0
- package/assets/web/chunk-SJMLX5AT.js +1 -0
- package/assets/web/chunk-TKVALOE4.js +2 -0
- package/assets/web/chunk-TM43WUKM.js +1 -0
- package/assets/web/chunk-VKWV3ANT.js +1 -0
- package/assets/web/chunk-VTMYG6YW.js +1 -0
- package/assets/web/chunk-VWW4SA5R.js +1 -0
- package/assets/web/chunk-WEDAFMID.js +1 -0
- package/assets/web/chunk-WFIHWVQO.js +1 -0
- package/assets/web/chunk-XJM3HDJQ.js +1 -0
- package/assets/web/chunk-YVJV2RUY.js +1 -0
- package/assets/web/chunk-Z3KONI7L.js +1 -0
- package/assets/web/chunk-ZDCURXPS.js +1 -0
- package/assets/web/favicon.ico +0 -0
- package/assets/web/index.html +63 -0
- package/assets/web/main-S6E3BC5O.js +2 -0
- package/assets/web/polyfills-7RSNIJ6J.js +2 -0
- package/assets/web/styles-R6ZUWC6K.css +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +66 -0
- package/dist/lambdacode/api/services/brandingShapes.d.ts +5 -0
- package/dist/lambdacode/api/services/brandingShapes.js +15 -0
- package/dist/lambdacode/issuer/objects.d.ts +8 -0
- package/dist/lambdacode/issuer/objects.js +11 -0
- package/dist/lambdacode/network/naming.d.ts +52 -0
- package/dist/lambdacode/network/naming.js +67 -0
- package/dist/lib/access-portal-hub.d.ts +53 -0
- package/dist/lib/access-portal-hub.js +87 -0
- package/dist/lib/access-portal.d.ts +32 -0
- package/dist/lib/access-portal.js +174 -0
- package/dist/lib/audit-log.d.ts +18 -0
- package/dist/lib/audit-log.js +25 -0
- package/dist/lib/connector-stack.d.ts +28 -0
- package/dist/lib/connector-stack.js +81 -0
- package/dist/lib/constructs/app-function.d.ts +14 -0
- package/dist/lib/constructs/app-function.js +84 -0
- package/dist/lib/constructs/app-table.d.ts +12 -0
- package/dist/lib/constructs/app-table.js +58 -0
- package/dist/lib/constructs/mirrored-image.d.ts +12 -0
- package/dist/lib/constructs/mirrored-image.js +80 -0
- package/dist/lib/constructs/monitoring.d.ts +21 -0
- package/dist/lib/constructs/monitoring.js +133 -0
- package/dist/lib/constructs/oidc-issuer.d.ts +44 -0
- package/dist/lib/constructs/oidc-issuer.js +234 -0
- package/dist/lib/constructs/scratch-tmpfs.d.ts +5 -0
- package/dist/lib/constructs/scratch-tmpfs.js +48 -0
- package/dist/lib/constructs/sg-manager.d.ts +27 -0
- package/dist/lib/constructs/sg-manager.js +88 -0
- package/dist/lib/constructs/tailnet-connector.d.ts +29 -0
- package/dist/lib/constructs/tailnet-connector.js +177 -0
- package/dist/lib/constructs/tailnet-resolver.d.ts +30 -0
- package/dist/lib/constructs/tailnet-resolver.js +71 -0
- package/dist/lib/constructs/target-account-trust.d.ts +32 -0
- package/dist/lib/constructs/target-account-trust.js +81 -0
- package/dist/lib/constructs/vending-api.d.ts +103 -0
- package/dist/lib/constructs/vending-api.js +203 -0
- package/dist/lib/constructs/web-acl.d.ts +61 -0
- package/dist/lib/constructs/web-acl.js +213 -0
- package/dist/lib/constructs/web-identity.d.ts +49 -0
- package/dist/lib/constructs/web-identity.js +116 -0
- package/dist/lib/creds-stack.d.ts +151 -0
- package/dist/lib/creds-stack.js +592 -0
- package/dist/lib/data-stack.d.ts +53 -0
- package/dist/lib/data-stack.js +282 -0
- package/dist/lib/dimensions-validation.d.ts +20 -0
- package/dist/lib/dimensions-validation.js +51 -0
- package/dist/lib/federation.d.ts +113 -0
- package/dist/lib/federation.js +254 -0
- package/dist/lib/managed-login-branding.json +450 -0
- package/dist/lib/network-stack.d.ts +58 -0
- package/dist/lib/network-stack.js +776 -0
- package/dist/lib/network-validation.d.ts +54 -0
- package/dist/lib/network-validation.js +220 -0
- package/dist/lib/pkg-paths.d.ts +3 -0
- package/dist/lib/pkg-paths.js +51 -0
- package/dist/lib/plugins/plugin-api.d.ts +40 -0
- package/dist/lib/plugins/plugin-api.js +125 -0
- package/dist/lib/plugins/plugin-catalog-activation.d.ts +31 -0
- package/dist/lib/plugins/plugin-catalog-activation.js +109 -0
- package/dist/lib/plugins/registration.d.ts +41 -0
- package/dist/lib/plugins/registration.js +121 -0
- package/dist/lib/plugins/runtime.d.ts +10 -0
- package/dist/lib/plugins/runtime.js +17 -0
- package/dist/lib/project-config.d.ts +164 -0
- package/dist/lib/project-config.js +2 -0
- package/dist/lib/target-account-stack.d.ts +15 -0
- package/dist/lib/target-account-stack.js +59 -0
- package/dist/lib/target-account-template.d.ts +13 -0
- package/dist/lib/target-account-template.js +64 -0
- package/dist/lib/web-cert-stack.d.ts +30 -0
- package/dist/lib/web-cert-stack.js +90 -0
- package/dist/lib/web-stack.d.ts +103 -0
- package/dist/lib/web-stack.js +540 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/README.md +303 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/backend/context.d.ts +31 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/backend/context.js +58 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/backend/index.d.ts +9 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/backend/index.js +26 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/client.d.ts +59 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/client.js +290 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/errors.d.ts +14 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/errors.js +32 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/http.d.ts +72 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/http.js +170 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/index.d.ts +11 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/index.js +28 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/theme-apply.d.ts +22 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/browser/theme-apply.js +22 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/access.d.ts +14 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/access.js +41 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/authorizer.d.ts +17 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/authorizer.js +44 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/canonical.d.ts +2 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/canonical.js +21 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/catalog.d.ts +39 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/catalog.js +18 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/discovery.d.ts +78 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/discovery.js +48 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/fields.d.ts +7 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/fields.js +2 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/manifest.d.ts +59 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/manifest.js +19 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/messages.d.ts +111 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/messages.js +109 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/paths.d.ts +20 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/paths.js +49 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/theme.d.ts +21 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/theme.js +60 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/transport.d.ts +14 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/transport.js +10 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/validate.d.ts +27 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/contracts/validate.js +321 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/devHost.d.ts +61 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/devHost.js +99 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/fakeDocument.d.ts +12 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/fakeDocument.js +22 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/fakeWindows.d.ts +22 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/fakeWindows.js +46 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/index.d.ts +4 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/index.js +20 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/samples.d.ts +37 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/fixtures/samples.js +228 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/host/host.d.ts +47 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/host/host.js +121 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/host/index.d.ts +5 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/host/index.js +22 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/index.d.ts +10 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/dist/index.js +28 -0
- package/node_modules/@fntio/infra-client-plugin-sdk/package.json +99 -0
- package/openapi.yaml +4284 -0
- package/package.json +124 -4
package/README.md
CHANGED
|
@@ -1,3 +1,876 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @fntio/infra-client
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A self-hosted AWS access portal, delivered as CDK stacks and constructs. Your
|
|
4
|
+
team signs in to a web app under your own domain, gets short-lived credentials
|
|
5
|
+
for the AWS accounts and roles you allow, and optionally reaches private
|
|
6
|
+
resources (databases, internal web servers) over a built-in VPN. Everything
|
|
7
|
+
runs inside your own AWS accounts.
|
|
8
|
+
|
|
9
|
+
This package is the whole product. You write one small CDK app, point it at a
|
|
10
|
+
typed config object, and deploy. Nothing is built on your machine: the Lambda
|
|
11
|
+
code is prebundled and the web app is already compiled.
|
|
12
|
+
|
|
13
|
+
- [What is in the tarball](#what-is-in-the-tarball)
|
|
14
|
+
- [Requirements](#requirements)
|
|
15
|
+
- [Install](#install)
|
|
16
|
+
- [Your deployment project](#your-deployment-project)
|
|
17
|
+
- [The config file](#the-config-file)
|
|
18
|
+
- [The app file](#the-app-file)
|
|
19
|
+
- [Deploy](#deploy)
|
|
20
|
+
- [Upgrade](#upgrade)
|
|
21
|
+
- [Decisions you make once](#decisions-you-make-once)
|
|
22
|
+
- [Security Hub](#security-hub)
|
|
23
|
+
- [Activity log](#activity-log)
|
|
24
|
+
- [Public API](#public-api)
|
|
25
|
+
- [Plugins](#plugins)
|
|
26
|
+
- [Plugin permissions](#plugin-permissions)
|
|
27
|
+
- [Bring your own web build](#bring-your-own-web-build)
|
|
28
|
+
- [HTTP API](#http-api)
|
|
29
|
+
- [License](#license)
|
|
30
|
+
|
|
31
|
+
## What is in the tarball
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
fntio-infra-client-<version>.tgz
|
|
35
|
+
└── package/
|
|
36
|
+
├── package.json
|
|
37
|
+
├── README.md this file
|
|
38
|
+
├── CHANGELOG.md what each version changed
|
|
39
|
+
├── LICENSE Elastic License 2.0
|
|
40
|
+
├── openapi.yaml the portal's HTTP API contract (OpenAPI 3.1)
|
|
41
|
+
├── dist/ compiled stacks + constructs, with .d.ts types
|
|
42
|
+
│ └── index.js the import surface: import { ... } from "@fntio/infra-client"
|
|
43
|
+
└── assets/
|
|
44
|
+
├── api/ the portal API Lambda, prebundled
|
|
45
|
+
│ ├── index.js
|
|
46
|
+
│ └── vendor_modules/ its runtime dependencies (express and friends)
|
|
47
|
+
├── issuer-publish/ writes the OIDC discovery document + JWKS to the issuer bucket at deploy time
|
|
48
|
+
├── issuer-canary/ issuer health probe (alarms)
|
|
49
|
+
├── reapproval/ standing-access review sweeps
|
|
50
|
+
├── firstadmin/ creates the first admin during the deploy
|
|
51
|
+
├── federation-presignup/ SSO: Cognito pre-sign-up trigger that links a first federated sign-in to the invited user
|
|
52
|
+
├── plugin-authorizer/ plugins: the shared REQUEST authorizer on every plugin route
|
|
53
|
+
├── plugin-catalog/ plugins: writes each registered plugin's catalog record at deploy time
|
|
54
|
+
├── headscale-apikey/ VPN control-plane bootstrap
|
|
55
|
+
├── sg-manager/ VPN: per-resource security-group automation
|
|
56
|
+
├── tailnet-resolver/ VPN: in-VPC DNS for private names
|
|
57
|
+
├── keyminter/ VPN: device and connector key minting
|
|
58
|
+
├── acl-reconciler/ VPN: grants → network ACLs
|
|
59
|
+
├── invoke-relay/ VPN: the reconciler's relay to SG-managers and resolvers in another region
|
|
60
|
+
└── web/ the built web app (index.html, main-*.js, styles)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every Lambda folder is a single `index.js` that CDK uploads as-is when you
|
|
64
|
+
synthesize. `assets/web` is served by `WebStack`; the `config.json` the app
|
|
65
|
+
reads at runtime is generated from your config during the deploy, so the
|
|
66
|
+
tarball never contains another deployment's values.
|
|
67
|
+
|
|
68
|
+
Source code (`.ts`) is not in the package. The compiled stacks in `dist/`
|
|
69
|
+
are readable as shipped (browse them at
|
|
70
|
+
[unpkg.com/browse/@fntio/infra-client/](https://unpkg.com/browse/@fntio/infra-client/));
|
|
71
|
+
the target-account stack a security team usually wants to read is
|
|
72
|
+
`dist/lib/target-account-stack.js` with `dist/lib/constructs/target-account-trust.js`.
|
|
73
|
+
|
|
74
|
+
## Requirements
|
|
75
|
+
|
|
76
|
+
- **Node.js 20 or newer** and the AWS CDK CLI on the machine you deploy from.
|
|
77
|
+
- **`aws-cdk-lib` 2.263 or newer and `constructs` 10.x** in your project.
|
|
78
|
+
Both are peer dependencies; the install step below adds them.
|
|
79
|
+
- **A hub AWS account** with administrator credentials. The portal, sign-in,
|
|
80
|
+
credential issuer, and optional VPN control plane deploy here.
|
|
81
|
+
- **A Route 53 hosted zone** in the hub account for a domain or subdomain you
|
|
82
|
+
control, for example `access.acme.com`. The app, the sign-in page, the
|
|
83
|
+
issuer, and the VPN all get names under it.
|
|
84
|
+
- **CDK bootstrap in two regions** of the hub account: your deploy region and
|
|
85
|
+
`us-east-1`. CloudFront only accepts certificates and WAF web ACLs from
|
|
86
|
+
`us-east-1`, so a small certificate stack always deploys there (the
|
|
87
|
+
credential issuer's certificate lives in it).
|
|
88
|
+
- One workload account per set of roles you want to hand out, each with its
|
|
89
|
+
own credentials for the deploy.
|
|
90
|
+
|
|
91
|
+
Two AWS-side approvals take up to a day. File them before the first deploy:
|
|
92
|
+
|
|
93
|
+
- **Lambda concurrency raise** in the hub account. Fresh accounts cap
|
|
94
|
+
concurrent executions at 10, and the deploy's own custom resources can hit
|
|
95
|
+
that.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
aws service-quotas request-service-quota-increase \
|
|
99
|
+
--service-code lambda --quota-code L-B99A9384 --desired-value 1000
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- **SES production access** in the hub account, only if you set the `email`
|
|
103
|
+
block. In the SES sandbox, mail reaches verified addresses only, and the
|
|
104
|
+
first-admin invite is sent during the deploy.
|
|
105
|
+
|
|
106
|
+
## Install
|
|
107
|
+
|
|
108
|
+
### From npm
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
mkdir acme-access && cd acme-access
|
|
112
|
+
npm init -y
|
|
113
|
+
npm install @fntio/infra-client aws-cdk-lib constructs
|
|
114
|
+
npm install -D typescript ts-node @types/node aws-cdk
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Public package, no token. Pin the exact version in `package.json` if your
|
|
118
|
+
deployments are rolled out deliberately; `npm install @fntio/infra-client@<version>`
|
|
119
|
+
is the upgrade.
|
|
120
|
+
|
|
121
|
+
### From a tarball
|
|
122
|
+
|
|
123
|
+
Every version is also attached to its GitHub Release as
|
|
124
|
+
`fntio-infra-client-<version>.tgz` on
|
|
125
|
+
[FNTIO/aws-infrastructure-client](https://github.com/FNTIO/aws-infrastructure-client/releases),
|
|
126
|
+
for deployment repositories that vendor dependencies. Commit it and depend on
|
|
127
|
+
it with a `file:` spec; CI installs it like any other dependency.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
mkdir vendor && cp ~/Downloads/fntio-infra-client-<version>.tgz vendor/
|
|
131
|
+
npm install ./vendor/fntio-infra-client-<version>.tgz aws-cdk-lib constructs
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
`package.json` then carries
|
|
135
|
+
`"@fntio/infra-client": "file:vendor/fntio-infra-client-<version>.tgz"`.
|
|
136
|
+
Upgrading is replacing the file and the version in that line; moving to the
|
|
137
|
+
registry is swapping the `file:` spec for a semver range.
|
|
138
|
+
|
|
139
|
+
## Your deployment project
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
acme-access/
|
|
143
|
+
├── package.json
|
|
144
|
+
├── cdk.json
|
|
145
|
+
├── tsconfig.json
|
|
146
|
+
├── bin/app.ts the CDK app: hub stacks + one stack per workload account
|
|
147
|
+
├── config/project.ts everything specific to your deployment, typed
|
|
148
|
+
└── vendor/ the tarball, only if you vendor it
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`cdk.json`:
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"app": "npx ts-node --prefer-ts-exts bin/app.ts",
|
|
156
|
+
"context": {
|
|
157
|
+
"@aws-cdk/aws-iam:minimizePolicies": true,
|
|
158
|
+
"@aws-cdk/core:defaultCrossStackReferences": "strong"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
`tsconfig.json` needs `"module": "commonjs"`, `"target": "ES2022"`,
|
|
164
|
+
`"strict": true`, `"esModuleInterop": true`, and `"types": ["node"]`.
|
|
165
|
+
|
|
166
|
+
## The config file
|
|
167
|
+
|
|
168
|
+
`config/project.ts` is one exported `ProjectConfig` object. Every field is
|
|
169
|
+
typed and documented in your editor. Values that would fail at deploy time
|
|
170
|
+
(a trailing dot on a zone name, an account id that is not 12 digits, an
|
|
171
|
+
overlapping VPC range between two sites) fail at synth with a plain error.
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
// config/project.ts
|
|
175
|
+
import * as iam from "aws-cdk-lib/aws-iam";
|
|
176
|
+
import { InfraClientRoles, type ProjectConfig } from "@fntio/infra-client";
|
|
177
|
+
|
|
178
|
+
const ZONE = { hostedZoneId: "Z0ABC12DEF34GH", zoneName: "access.acme.com" };
|
|
179
|
+
|
|
180
|
+
export const PROJECT: ProjectConfig = {
|
|
181
|
+
projectName: "Acme Access",
|
|
182
|
+
|
|
183
|
+
// The hub account. Explicit on purpose: nothing depends on whose
|
|
184
|
+
// credentials run the synth.
|
|
185
|
+
env: { account: "111122223333", region: "eu-central-1" },
|
|
186
|
+
|
|
187
|
+
// true = tables (with point-in-time recovery and deletion protection), the
|
|
188
|
+
// user pool, and the issuer signing keys are RETAINED on teardown, and every
|
|
189
|
+
// hub stack gets termination protection. Use true for anything real.
|
|
190
|
+
prod: true,
|
|
191
|
+
|
|
192
|
+
// Ops alarms go here: one address or a list. AWS emails each address a
|
|
193
|
+
// subscription confirmation on the first deploy. Click it or alarms go nowhere.
|
|
194
|
+
alertEmail: "platform@acme.com",
|
|
195
|
+
|
|
196
|
+
// Optional. Prefix for every by-name cross-account resource, 15 chars max.
|
|
197
|
+
// SET ONCE before the first deploy; renaming later breaks all of them.
|
|
198
|
+
// Default "infra-client".
|
|
199
|
+
resourcePrefix: "acme-access",
|
|
200
|
+
|
|
201
|
+
// PERMANENT. https://<domainName> is baked into every workload account's
|
|
202
|
+
// trust policy. Changing it later breaks credential issuing everywhere.
|
|
203
|
+
// keyVersions / signerVersion default to [1] / 1; they exist for key rotation.
|
|
204
|
+
issuer: { ...ZONE, domainName: "issuer.access.acme.com" },
|
|
205
|
+
|
|
206
|
+
// Sign-in methods. Every field is listed so none is missed; the first three
|
|
207
|
+
// are the choices users see on the sign-in page.
|
|
208
|
+
loginMethods: {
|
|
209
|
+
password: true, // always on: Cognito requires it
|
|
210
|
+
passkey: true, // Touch ID / Windows Hello / security keys; needs the `web` block
|
|
211
|
+
emailOtp: true, // passwordless one-time code by email
|
|
212
|
+
mfa: "optional", // TOTP on password sign-ins, "optional" | "required"; a password-only pool must set it
|
|
213
|
+
threatProtection: false, // Cognito threat protection (PLUS plan, about $0.02 per active user); needs mfa
|
|
214
|
+
federation: [], // your own OIDC provider(s): wiki Runbooks-Users, "Federated sign-in (SSO)"
|
|
215
|
+
},
|
|
216
|
+
|
|
217
|
+
// Created in the admins group by the deploy and emailed a set-your-password
|
|
218
|
+
// link. Lowercase, a real mailbox. Bump `resend` to re-send an unclaimed invite.
|
|
219
|
+
firstAdmin: { email: "you@acme.com" },
|
|
220
|
+
|
|
221
|
+
// Optional. All portal mail (codes, invites, resets) from your own domain
|
|
222
|
+
// via SES; DKIM/SPF/DMARC records are created for you. fromAddress must be
|
|
223
|
+
// under zoneName. Omit to use Cognito's built-in sender (about 50/day).
|
|
224
|
+
email: {
|
|
225
|
+
...ZONE,
|
|
226
|
+
fromAddress: "no-reply@access.acme.com",
|
|
227
|
+
fromName: "Acme Access",
|
|
228
|
+
dmarcReportEmail: "platform@acme.com",
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
// Optional. The app on domainName, sign-in on authDomainName, which must be
|
|
232
|
+
// a child of domainName. Omit to run on the CloudFront and Cognito default hosts.
|
|
233
|
+
web: {
|
|
234
|
+
...ZONE,
|
|
235
|
+
domainName: "access.acme.com",
|
|
236
|
+
authDomainName: "auth.access.acme.com",
|
|
237
|
+
},
|
|
238
|
+
|
|
239
|
+
// Optional. WAF on CloudFront and the API. ON by default (about $26/month);
|
|
240
|
+
// rateLimit = /api/* requests per client IP per 5 minutes before a 429 (one
|
|
241
|
+
// office NAT is one IP, so size for the office); perTokenRateLimit = API
|
|
242
|
+
// requests per bearer token per 5 minutes — a ceiling on a runaway or
|
|
243
|
+
// leaked token, sized above the product's own bulk bursts.
|
|
244
|
+
waf: { enabled: true, rateLimit: 5000, perTokenRateLimit: 2000 },
|
|
245
|
+
|
|
246
|
+
// Optional. How long the activity log keeps each row (30–3650 days).
|
|
247
|
+
// Default 400, which outlasts the yearly access review.
|
|
248
|
+
audit: { retentionDays: 400 },
|
|
249
|
+
|
|
250
|
+
// First impression only. Admins can restyle in the app afterwards.
|
|
251
|
+
// brandShow: "logo" | "project" | "company" | "logo-and-project" | "logo-and-company".
|
|
252
|
+
branding: {
|
|
253
|
+
logoUrl: "https://acme.com/logo.svg", // or logoFile: "assets/logo.svg", a local file (no public URL)
|
|
254
|
+
primaryColor: "#0E7490",
|
|
255
|
+
accentColor: "#F59E0B",
|
|
256
|
+
companyName: "Acme",
|
|
257
|
+
brandShow: "logo-and-project",
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
// The roles users can get, per workload account. Deployed by
|
|
261
|
+
// TargetAccountStack (see the app file) and registered in the portal's
|
|
262
|
+
// Accounts page. Role names are pinned into trust policies: never rename.
|
|
263
|
+
rolesByAccount: {
|
|
264
|
+
"444455556666": [
|
|
265
|
+
InfraClientRoles.READ_ONLY,
|
|
266
|
+
InfraClientRoles.FULL_ADMIN,
|
|
267
|
+
{
|
|
268
|
+
...InfraClientRoles.READ_ONLY,
|
|
269
|
+
roleName: "InfraAuditor",
|
|
270
|
+
description: "Read-only for the external audit team.",
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
"777788889999": [
|
|
274
|
+
{
|
|
275
|
+
roleName: "BillingViewer",
|
|
276
|
+
managedPolicies: [
|
|
277
|
+
iam.ManagedPolicy.fromAwsManagedPolicyName("job-function/Billing"),
|
|
278
|
+
],
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
// Optional. The private network. Omit it and no VPN stack deploys and the
|
|
284
|
+
// portal shows no Network pages. One site = one routing domain; most
|
|
285
|
+
// deployments need exactly one. Site ids are PERMANENT once a device enrolls.
|
|
286
|
+
network: {
|
|
287
|
+
...ZONE,
|
|
288
|
+
subdomain: "network", // sites live at <site>.network.access.acme.com
|
|
289
|
+
// containerInsights: true, // CloudWatch Container Insights on the VPN cluster; defaults to `prod`
|
|
290
|
+
sites: {
|
|
291
|
+
main: {
|
|
292
|
+
displayName: "Acme",
|
|
293
|
+
// Every account belongs to exactly one site.
|
|
294
|
+
accounts: ["444455556666", "777788889999"],
|
|
295
|
+
// Accounts allowed to run a connector (machine keys only).
|
|
296
|
+
connectorAccounts: ["444455556666"],
|
|
297
|
+
// VPCs joined by ConnectorStack, keyed by account. Drives the deploy
|
|
298
|
+
// and the per-site CIDR overlap check. Add `region` for a VPC outside
|
|
299
|
+
// the hub's region.
|
|
300
|
+
connectorVpcs: {
|
|
301
|
+
"444455556666": { vpcId: "vpc-0abc1234def567890", routes: ["10.20.0.0/16"] },
|
|
302
|
+
// Several VPCs in one account: a list, every entry but one named — the
|
|
303
|
+
// name suffixes that connector's hostname, stack id and function names.
|
|
304
|
+
// "444455556666": [
|
|
305
|
+
// { vpcId: "vpc-0abc1234def567890", routes: ["10.20.0.0/16"] },
|
|
306
|
+
// { vpcId: "vpc-0def5678abc123456", routes: ["10.50.0.0/16"], name: "sandbox" },
|
|
307
|
+
// ],
|
|
308
|
+
},
|
|
309
|
+
// Private DNS names resolved inside that VPC (its resolver = CIDR base + 2).
|
|
310
|
+
splitDns: { "corp.internal": ["10.20.0.2"] },
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
The blocks at a glance:
|
|
318
|
+
|
|
319
|
+
| Block | Required | Changeable later | What it controls |
|
|
320
|
+
| --- | --- | --- | --- |
|
|
321
|
+
| `projectName`, `env`, `prod`, `alertEmail` | yes | `prod` and `alertEmail` yes; `env` no | Identity of the deployment |
|
|
322
|
+
| `resourcePrefix` | no | **no** | Names of every cross-account resource |
|
|
323
|
+
| `issuer` | yes | **no** (`keyVersions`/`signerVersion` yes) | The credential issuer host every account trusts |
|
|
324
|
+
| `loginMethods` | yes | yes | Password, passkey, email code, TOTP second factor, threat protection, federated sign-in |
|
|
325
|
+
| `firstAdmin` | no | yes | The admin account the deploy creates |
|
|
326
|
+
| `email` | no | yes | Portal mail from your own domain |
|
|
327
|
+
| `web` | no | add yes; change or remove **no** in practice | Custom app and sign-in domains; also the passkey relying-party id (a change orphans every registered passkey) and the us-east-1 certificate `WebStack` imports across regions |
|
|
328
|
+
| `waf` | no | yes | Web ACLs on CloudFront and the API |
|
|
329
|
+
| `audit` | no | yes (rows already written keep their retention) | Activity-log retention |
|
|
330
|
+
| `branding` | yes (may be `{}`) | yes | Logo and colors until an admin restyles in-app |
|
|
331
|
+
| `rolesByAccount` | yes | add yes, rename **no** | Roles per workload account |
|
|
332
|
+
| `network` | no | add sites yes, rename site ids **no** | The VPN |
|
|
333
|
+
| `plugins` | no | yes (remove registrations one deploy before turning it off) | The customer-plugin runtime |
|
|
334
|
+
|
|
335
|
+
## The app file
|
|
336
|
+
|
|
337
|
+
`bin/app.ts` turns the config into stacks. The hub stacks and one small stack
|
|
338
|
+
per workload account live in the same app; deploys pick stacks by name and
|
|
339
|
+
run with that account's credentials.
|
|
340
|
+
|
|
341
|
+
```ts
|
|
342
|
+
// bin/app.ts
|
|
343
|
+
import { App } from "aws-cdk-lib";
|
|
344
|
+
import {
|
|
345
|
+
addAccessPortal,
|
|
346
|
+
AccessPortalHub,
|
|
347
|
+
ConnectorStack,
|
|
348
|
+
DEFAULT_RESOURCE_PREFIX,
|
|
349
|
+
resolveSites,
|
|
350
|
+
TargetAccountStack,
|
|
351
|
+
} from "@fntio/infra-client";
|
|
352
|
+
import { PROJECT } from "../config/project";
|
|
353
|
+
|
|
354
|
+
const app = new App();
|
|
355
|
+
const resourcePrefix = PROJECT.resourcePrefix ?? DEFAULT_RESOURCE_PREFIX;
|
|
356
|
+
const { account, region } = PROJECT.env;
|
|
357
|
+
|
|
358
|
+
// Validates the sites (slugs, one site per account, CIDR overlap) and fails
|
|
359
|
+
// the synth with the reason. Required whenever `network` is set.
|
|
360
|
+
const sites = PROJECT.network ? resolveSites(PROJECT.network) : undefined;
|
|
361
|
+
|
|
362
|
+
// The hub: DataStack, CredsStack, WebCertStack (us-east-1), WebStack, and
|
|
363
|
+
// NetworkStack when `network` is set. Deploy these with hub credentials.
|
|
364
|
+
addAccessPortal(app, { project: PROJECT, resourcePrefix, sites });
|
|
365
|
+
|
|
366
|
+
// The same hub as cross-account stacks see it: every well-known name and ARN
|
|
367
|
+
// derives from these attributes, so you never assemble one by hand.
|
|
368
|
+
const hub = AccessPortalHub.fromAttributes({
|
|
369
|
+
account,
|
|
370
|
+
region,
|
|
371
|
+
resourcePrefix,
|
|
372
|
+
issuerDomain: PROJECT.issuer.domainName,
|
|
373
|
+
network: PROJECT.network
|
|
374
|
+
? { zoneName: PROJECT.network.zoneName, subdomain: PROJECT.network.subdomain }
|
|
375
|
+
: undefined,
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
// One stack per workload account: an OIDC provider trusting the hub's ISSUER
|
|
379
|
+
// (never the hub account) plus the listed roles. Nothing else. Deploy each
|
|
380
|
+
// with that account's credentials.
|
|
381
|
+
for (const [targetAccount, roles] of Object.entries(PROJECT.rolesByAccount)) {
|
|
382
|
+
new TargetAccountStack(app, `AccessTarget-${targetAccount}`, {
|
|
383
|
+
env: { account: targetAccount, region },
|
|
384
|
+
issuerUrl: hub.issuerUrl!,
|
|
385
|
+
roles,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// One stack per connector VPC (VPN only). The site decides its control plane
|
|
390
|
+
// and which key minter it may call.
|
|
391
|
+
for (const site of sites ?? []) {
|
|
392
|
+
for (const [connectorAccount, vpcs] of Object.entries(site.connectorVpcs)) {
|
|
393
|
+
for (const vpc of vpcs) {
|
|
394
|
+
const suffix = vpc.name ? `-${vpc.name}` : "";
|
|
395
|
+
new ConnectorStack(app, `Connector-${connectorAccount}${suffix}`, {
|
|
396
|
+
env: { account: connectorAccount, region: vpc.region ?? region },
|
|
397
|
+
hub,
|
|
398
|
+
site: site.id,
|
|
399
|
+
vpcId: vpc.vpcId,
|
|
400
|
+
routes: [...vpc.routes],
|
|
401
|
+
name: vpc.name,
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Prefer to build the IAM roles yourself? Skip `TargetAccountStack`: create the
|
|
409
|
+
provider once with `createIssuerProvider(scope, id, issuerUrl)` and use
|
|
410
|
+
`webIdentityPrincipal(provider, roleName)` as `assumedBy` on any `iam.Role`.
|
|
411
|
+
The role's `roleName` must equal the name passed to `webIdentityPrincipal`;
|
|
412
|
+
the trust policy pins it. The same applies to the VPN: `TailnetConnector` and
|
|
413
|
+
`SgManager` compose into a stack you already own instead of `ConnectorStack`.
|
|
414
|
+
|
|
415
|
+
## Deploy
|
|
416
|
+
|
|
417
|
+
### 1. Bootstrap the hub account, both regions
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
export AWS_PROFILE=acme-hub
|
|
421
|
+
npx cdk bootstrap aws://111122223333/eu-central-1
|
|
422
|
+
npx cdk bootstrap aws://111122223333/us-east-1
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### 2. Deploy the hub
|
|
426
|
+
|
|
427
|
+
Deploy by name. `--all` would also try the workload-account stacks with the
|
|
428
|
+
wrong credentials.
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
npx cdk deploy DataStack CredsStack WebStack # WebCertStack deploys as a dependency
|
|
432
|
+
npx cdk deploy NetworkStack # only with a `network` block
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
The first run takes 15 to 30 minutes; certificate issuing and DNS dominate.
|
|
436
|
+
While it runs, confirm the SNS subscription that lands in `alertEmail`.
|
|
437
|
+
|
|
438
|
+
When it finishes, read the outputs:
|
|
439
|
+
|
|
440
|
+
- `CredsStack.FirstAdminInviteSent`: `sent` means check the first admin's
|
|
441
|
+
inbox (the link is valid 7 days). `suppressed` means the account exists but
|
|
442
|
+
the mail could not go out, almost always SES still in its sandbox; get
|
|
443
|
+
production access or verify the address, then bump `firstAdmin.resend` and
|
|
444
|
+
redeploy. `already-active` means nothing to do.
|
|
445
|
+
- `WebStack.WebUrl`: your portal.
|
|
446
|
+
|
|
447
|
+
Sign in. The first admin is offered a theme wizard; anything set there
|
|
448
|
+
overrides the deploy-time `branding` without a redeploy.
|
|
449
|
+
|
|
450
|
+
### 3. Connect a workload account
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
export AWS_PROFILE=acme-sandbox
|
|
454
|
+
npx cdk bootstrap aws://444455556666/eu-central-1 # once per account
|
|
455
|
+
npx cdk deploy AccessTarget-444455556666
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Then, in the portal as an admin: **Accounts → Add account** with the account
|
|
459
|
+
number and a friendly name, and add the roles you just deployed. Role names
|
|
460
|
+
must match `rolesByAccount` exactly; the portal cannot verify them across
|
|
461
|
+
accounts. Grant yourself one role, click **Get credentials** on its card, and
|
|
462
|
+
run `aws sts get-caller-identity`. It should report the workload account.
|
|
463
|
+
|
|
464
|
+
### 4. Join a VPC to the VPN (optional)
|
|
465
|
+
|
|
466
|
+
```bash
|
|
467
|
+
export AWS_PROFILE=acme-sandbox
|
|
468
|
+
npx cdk deploy Connector-444455556666
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
The connector looks the VPC up at synth, so the command needs credentials for
|
|
472
|
+
that account. A VPC outside the hub's region (`connectorVpcs.<account>.region`)
|
|
473
|
+
deploys there, so bootstrap the account in that region first
|
|
474
|
+
(`npx cdk bootstrap aws://444455556666/eu-west-1`). An account's second VPC
|
|
475
|
+
carries a `name` in config and deploys as `Connector-444455556666-<name>`.
|
|
476
|
+
Back in the portal, register private resources (host and port)
|
|
477
|
+
on the **Network** page and grant them like roles. End users click
|
|
478
|
+
**Connect**; a guided setup installs the standard Tailscale client on first use.
|
|
479
|
+
|
|
480
|
+
### Tear down
|
|
481
|
+
|
|
482
|
+
`npx cdk destroy` per stack, in reverse order. With `prod: true` every hub
|
|
483
|
+
stack has termination protection and the VPN load balancer has deletion
|
|
484
|
+
protection, so lift both first:
|
|
485
|
+
|
|
486
|
+
```bash
|
|
487
|
+
aws cloudformation update-termination-protection --no-enable-termination-protection --stack-name <stack>
|
|
488
|
+
aws elbv2 modify-load-balancer-attributes --load-balancer-arn <arn> --attributes Key=deletion_protection.enabled,Value=false
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
The tables, user pool, and signing keys are retained and must be deleted by
|
|
492
|
+
hand (tables keep deletion protection until you turn it off), and so is the
|
|
493
|
+
VPN control plane's EFS file system (Headscale state): delete its mount
|
|
494
|
+
targets, then the file system. A removed VPN site also leaves its API-key
|
|
495
|
+
secret (`<prefix>/headscale-apikey-<site>`) in Secrets Manager on purpose;
|
|
496
|
+
delete it once nothing uses that site.
|
|
497
|
+
|
|
498
|
+
## Upgrade
|
|
499
|
+
|
|
500
|
+
```bash
|
|
501
|
+
npm install @fntio/infra-client@<version> # vendored: replace the .tgz and the file: spec, then npm install
|
|
502
|
+
npx cdk diff DataStack CredsStack WebStack # review before anything changes
|
|
503
|
+
npx cdk deploy DataStack CredsStack WebStack
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
Deploy the hub stacks together. The web app and the API version together, and
|
|
507
|
+
if one stack fails partway, some admin pages error until the failed stack
|
|
508
|
+
deploys cleanly. Browsers and the desktop app can keep an old web bundle
|
|
509
|
+
cached for a while; desktop users quit from the tray icon and relaunch.
|
|
510
|
+
|
|
511
|
+
Workload-account stacks rarely need redeploying. Their job is deliberately
|
|
512
|
+
frozen so hub upgrades do not cascade into every account. Redeploy one when
|
|
513
|
+
you add or change its roles.
|
|
514
|
+
|
|
515
|
+
### Upgrading to 0.1.17 — the activity log and pop-up notifications
|
|
516
|
+
|
|
517
|
+
Nothing to migrate: older vend rows are read in the new shape. The deploy
|
|
518
|
+
adds one index to the audit table (`byActor`); it rides the normal hub
|
|
519
|
+
deploy. The reconciler writes VPN session, firewall-rule and connector rows
|
|
520
|
+
only after a manual `NetworkStack` deploy (it needs the table and the
|
|
521
|
+
retention in its environment). Set `audit.retentionDays` if the 400-day
|
|
522
|
+
default is not what your policy says; rows already written keep the
|
|
523
|
+
retention they were written with. Desktop users get the pop-up changes
|
|
524
|
+
(Windows toasts, click-to-open, wake refresh, VPN-drop notice) with the next
|
|
525
|
+
desktop build; the web app works with older shells.
|
|
526
|
+
|
|
527
|
+
### Upgrading to 0.1.16 — several connector VPCs per account
|
|
528
|
+
|
|
529
|
+
`connectorVpcs.<account>` may be a list, every entry but one carrying a
|
|
530
|
+
`name`. A single VPC per account needs nothing. Deploy `NetworkStack` first
|
|
531
|
+
(its reconciler now addresses each VPC's SG-manager and resolver by name), and
|
|
532
|
+
when an account gains a second VPC redeploy its existing `Connector-<account>`
|
|
533
|
+
alongside the new `Connector-<account>-<name>`: the existing SG-manager learns
|
|
534
|
+
which VPC is its own and answers `other-vpc` for groups elsewhere.
|
|
535
|
+
|
|
536
|
+
### Upgrading to 0.1.8 — the issuer moves onto CloudFront
|
|
537
|
+
|
|
538
|
+
The credential issuer (`https://issuer.<your zone>`) is served from a
|
|
539
|
+
private S3 bucket behind CloudFront instead of an API Gateway HTTP API. The
|
|
540
|
+
hostname, the signing keys and every workload account's trust are unchanged;
|
|
541
|
+
the deploy migrates in one CloudFormation update (new endpoint first, DNS
|
|
542
|
+
flipped in place, the API deleted last — about 15 minutes). Before you
|
|
543
|
+
deploy it:
|
|
544
|
+
|
|
545
|
+
- `us-east-1` must be CDK-bootstrapped in the hub account even if you run
|
|
546
|
+
without `web` and with WAF off — the issuer's certificate now lives in
|
|
547
|
+
the us-east-1 companion stack. Step 1 of "Deploy" covers it.
|
|
548
|
+
- Do not combine it with a `keyVersions` / `signerVersion` change.
|
|
549
|
+
|
|
550
|
+
After it: fetch `https://issuer.<your zone>/.well-known/openid-configuration`
|
|
551
|
+
and `…/.well-known/jwks.json`, then get credentials for one role from the
|
|
552
|
+
portal — that is the real proof (STS read the new JWKS). Delete the old
|
|
553
|
+
regional ACM certificate if CloudFormation left it behind, and suppress the
|
|
554
|
+
new CloudFront.17 finding for the issuer distribution if you run Security
|
|
555
|
+
Hub ("Security Hub" below). With WAF on, a third web ACL `<prefix>-issuer`
|
|
556
|
+
appears — observe-only, it never blocks, about $8/month.
|
|
557
|
+
|
|
558
|
+
## Decisions you make once
|
|
559
|
+
|
|
560
|
+
| Value | Where | Why it is permanent |
|
|
561
|
+
| --- | --- | --- |
|
|
562
|
+
| Issuer hostname | `issuer.domainName` | In every workload account's trust policy |
|
|
563
|
+
| Resource prefix | `resourcePrefix` | Names every cross-account resource |
|
|
564
|
+
| Role names | `rolesByAccount[*].roleName` | Pinned into each role's trust condition |
|
|
565
|
+
| VPN site ids | keys of `network.sites` | The login hostname of every enrolled device and connector |
|
|
566
|
+
| Hub account and region | `env` | Everything else derives from it |
|
|
567
|
+
|
|
568
|
+
Everything else — branding, login methods, the list of sites and VPCs —
|
|
569
|
+
changes with a redeploy. The app's own web address (`web`) can be added
|
|
570
|
+
later, but changing or removing it orphans registered passkeys (see the
|
|
571
|
+
config table).
|
|
572
|
+
|
|
573
|
+
## Security Hub
|
|
574
|
+
|
|
575
|
+
Deployments pass the AWS Foundational Security Best Practices controls that
|
|
576
|
+
apply to their resources by construction, or with `prod: true`. A few are
|
|
577
|
+
deliberate cost trade-offs or by-design exceptions (CloudFront distributions
|
|
578
|
+
without origin failover or signed-URL key groups) that you suppress once per
|
|
579
|
+
account. The source repository's runbook lists every control and its status
|
|
580
|
+
under "Security posture" in the deployment README.
|
|
581
|
+
|
|
582
|
+
## Activity log
|
|
583
|
+
|
|
584
|
+
Every action that changes or uses access writes one row to the audit table:
|
|
585
|
+
who did it (a person, a service user, or `system:reapproval`,
|
|
586
|
+
`system:reconciler`, `system:deploy`, `system:expiry`), the action
|
|
587
|
+
(`object.verb`: `role.grant`, `request.approve`, `credentials.vend`,
|
|
588
|
+
`vpn.connect`, `admin.access`, …), whom or what it was about, the outcome
|
|
589
|
+
(`OK`, `DENIED`, `FAILED`) and a caller-safe reason. Group, cascade and bulk
|
|
590
|
+
changes also write derived rows per affected person (`access.gain`,
|
|
591
|
+
`access.lose`) from the same effective-access diff that produces the bell's
|
|
592
|
+
notices, linked to the primary row by a batch id — one per target, or one
|
|
593
|
+
per person carrying a `count` when a group or cascade change moves more than
|
|
594
|
+
five targets for them (the same threshold bundles the bell notice). The actor is bound per
|
|
595
|
+
request by the auth middleware and per job by the Lambda entry point; services
|
|
596
|
+
never take an actor parameter, so a row cannot name the wrong identity.
|
|
597
|
+
|
|
598
|
+
The log is advisory: nothing reads it to decide access. It is read by the
|
|
599
|
+
Activity page (`GET /admin/audit`, filters and a time cursor), by the yearly
|
|
600
|
+
review for a role's usage count, and by the setup checklist. Retention is
|
|
601
|
+
`audit.retentionDays` (30–3650, default 400). VPN sessions, firewall rules
|
|
602
|
+
and connector changes come from the reconciler's five-minute pass (five-minute granularity,
|
|
603
|
+
derived from Headscale's online state, so they cover every client). Refused
|
|
604
|
+
admin calls and refused plugin calls are rows too; anonymous 401s, reads and
|
|
605
|
+
preferences are not, and neither is a catalog or branding save that changes
|
|
606
|
+
nothing. A direct revoke whose access continues through a group names the
|
|
607
|
+
group(s) on its row. Name lists on a row (`affected`, `unchanged`) stop at 50
|
|
608
|
+
entries with the full count kept — the per-user rows carry every person;
|
|
609
|
+
reasons are cut at 300 characters and notes at 500. `GET /admin/access-report`
|
|
610
|
+
exports the current state the log explains: one CSV row per person and target
|
|
611
|
+
they hold.
|
|
612
|
+
|
|
613
|
+
## Public API
|
|
614
|
+
|
|
615
|
+
Everything a consuming CDK app needs is exported from the package root. Deep
|
|
616
|
+
imports into `dist/` are not part of the contract.
|
|
617
|
+
|
|
618
|
+
| Export | Kind | Use |
|
|
619
|
+
| --- | --- | --- |
|
|
620
|
+
| `ProjectConfig`, `SiteConfig` | types | Your config file |
|
|
621
|
+
| `addAccessPortal(scope, props)` | function | The hub stacks, written into your app |
|
|
622
|
+
| `AccessPortalHub.fromAttributes(attrs)` | class | The hub as cross-account stacks see it: `issuerUrl`, `controlUrl(site)`, `connectorKeyMinter(scope, site)`, `aclReconcilerPrincipal()`, `aclReconcilerRelayPrincipal()` (what an SG-manager or resolver outside the hub's region trusts) |
|
|
623
|
+
| `resolveSites(network)` | function | Validated, deploy-ready sites for `addAccessPortal` and `ConnectorStack` |
|
|
624
|
+
| `TargetAccountStack` | stack | Trust plus roles in a workload account |
|
|
625
|
+
| `InfraClientRoles`, `TargetRoleSpec` | constants, type | `READ_ONLY`, `POWER_USER`, `FULL_ADMIN`; plain data you can spread and tweak |
|
|
626
|
+
| `createIssuerProvider`, `webIdentityPrincipal` | functions | Hand-built roles trusting the issuer |
|
|
627
|
+
| `ConnectorStack` | stack | One VPC joined to the VPN (`name` tells an account's second VPC from its first) |
|
|
628
|
+
| `TailnetConnector`, `SgManager`, `TailnetResolver` | constructs | The connector pieces for a stack you already own |
|
|
629
|
+
| `DataStack`, `CredsStack`, `WebStack`, `WebCertStack`, `NetworkStack` | stacks | The hub stacks individually, if you need to reach into one |
|
|
630
|
+
| `WebAcl`, `WafConfig`, `WafLimits` | construct, types | The WAF pieces |
|
|
631
|
+
| `DEFAULT_RESOURCE_PREFIX`, `assertValidResourcePrefix`, the `*FnName` and `*RoleName` helpers | constants, functions | The raw by-name contracts, for consumers who need the names |
|
|
632
|
+
|
|
633
|
+
Opinionated only where the security model requires it: the trust conditions
|
|
634
|
+
(`aud` plus a role-scoped `sub` pin), role name equals the pinned name, the
|
|
635
|
+
`connector-<account>[-<name>]` hostname contract, and the well-known resource names.
|
|
636
|
+
Everything else is ordinary CDK. `TargetRoleSpec.maxSessionDuration` defaults
|
|
637
|
+
to 12 hours; the per-role session length an admin sets in the portal is the
|
|
638
|
+
effective limit.
|
|
639
|
+
|
|
640
|
+
## Plugins
|
|
641
|
+
|
|
642
|
+
Customer plugins are small apps a deployment bolts onto the portal: a
|
|
643
|
+
frontend of any framework shown in an iframe, Lambda routes behind the
|
|
644
|
+
portal's authorizer, and two permission levels (`user`, `admin`) granted from
|
|
645
|
+
the usual Users and Groups screens. The permission rules are in
|
|
646
|
+
[Plugin permissions](#plugin-permissions); this section is the deploy side.
|
|
647
|
+
|
|
648
|
+
**Trust model, before turning it on.** A plugin page is served from the
|
|
649
|
+
portal's own origin and framed without a sandbox (the design the epic
|
|
650
|
+
chose so the page can use the portal's session directly). That means an
|
|
651
|
+
installed plugin runs with the signed-in user's full authority: it could
|
|
652
|
+
read the portal's tokens, call any core API as that user, and on the
|
|
653
|
+
desktop reach the shell bridge. The `user`/`admin` permissions decide who
|
|
654
|
+
sees a plugin, not what its code may do. Install plugins you would trust
|
|
655
|
+
with the portal bundle itself, and review their dependencies the same way.
|
|
656
|
+
A Content-Security-Policy on `/plugin-assets/*` lets a plugin page load
|
|
657
|
+
from and talk to the portal only (no third-party scripts, no sending data
|
|
658
|
+
elsewhere); the app pages send their own enforced policy (the portal, the
|
|
659
|
+
region's Cognito API and the hosted-UI domain).
|
|
660
|
+
|
|
661
|
+
**Turn the feature on** with a `plugins` block in the config:
|
|
662
|
+
|
|
663
|
+
```ts
|
|
664
|
+
plugins: { enabled: true }, // discoveryRefreshSeconds: 60 by default (15–300)
|
|
665
|
+
accountDimensions: { enabled: true }, // tenant/project/stage off account names; labels + stage map optional (wiki: Configuration Reference)
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
`enabled: true` creates the `/api/plugins/…` route tree on the core API (the
|
|
669
|
+
core keeps every other `/api/*` path), the `/plugin-assets/*` CloudFront
|
|
670
|
+
behavior (same-origin framing allowed, no SPA rewrite), the discovery
|
|
671
|
+
settings the portal reads, and, per registered plugin, the asset upload and
|
|
672
|
+
the catalog record. Off or absent: none of that exists, and any plugin
|
|
673
|
+
permission rows stay dormant. The catalog table itself always exists, so
|
|
674
|
+
flipping the flag never adds or removes a cross-stack export. Registrations
|
|
675
|
+
passed while the flag is off fail at synth.
|
|
676
|
+
|
|
677
|
+
**Register a plugin** by passing `definePlugin(...)` results (from
|
|
678
|
+
`@fntio/infra-client-plugin-cdk`) to `addAccessPortal`:
|
|
679
|
+
|
|
680
|
+
```ts
|
|
681
|
+
addAccessPortal(app, { project, resourcePrefix, plugins: [parameters] });
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
Composing the stacks yourself? `resolvePlugins`, `PluginApi` and `PluginCatalogActivation` are exported; all
|
|
685
|
+
three live on the CredsStack side.
|
|
686
|
+
|
|
687
|
+
**What a deploy does, in order.** Handler factories run inside CredsStack and
|
|
688
|
+
each route becomes a gateway method under
|
|
689
|
+
`/api/plugins/<id>/accounts/{accountNumber}<path>`; the plugin's resource
|
|
690
|
+
carries the shared REQUEST authorizer as its default, so every method under it
|
|
691
|
+
is authorized by construction (result cache 0). The UI uploads to the plugin-assets bucket
|
|
692
|
+
(DataStack) under `<id>/<version>-<hash>/`, served as `/plugin-assets/…`; the
|
|
693
|
+
hash is the content hash, so changed bytes under the same version get a new
|
|
694
|
+
URL, and earlier revisions are never pruned. Last, a
|
|
695
|
+
`Custom::PluginCatalogRecord` in CredsStack writes the catalog row, after the
|
|
696
|
+
upload, the API stage and the plugin's methods. Because it depends on the
|
|
697
|
+
methods, CloudFormation also tombstones it *before* removing them. Rollback of
|
|
698
|
+
a failed activation restores the previous record through the same provider.
|
|
699
|
+
|
|
700
|
+
One routing fact to know. Express owns `/api/plugins` (every verb) and any
|
|
701
|
+
path under it that no registered method claims — an unknown plugin id, and an
|
|
702
|
+
unmatched path under a registered one, both reach the core app and get its
|
|
703
|
+
JSON 404. A plugin's handler is reachable only through a method it registered,
|
|
704
|
+
which is what stops an unknown route touching plugin code.
|
|
705
|
+
|
|
706
|
+
**Authorization.** The shared REQUEST authorizer
|
|
707
|
+
(`lambdacode/plugins/authorizer.ts`) runs on every plugin method with a zero
|
|
708
|
+
result cache. It verifies the bearer token with the verifier Express uses
|
|
709
|
+
(`services/tokenVerifier.ts`: a Cognito ID token for people; an access token
|
|
710
|
+
with the service scope plus a live registry row for service users, read
|
|
711
|
+
strongly consistently through `services/serviceUserRegistry.ts`), resolves the route
|
|
712
|
+
from the catalog by method and gateway resource template, takes the account
|
|
713
|
+
from the `{accountNumber}` path parameter, and asks `checkPluginPermission`.
|
|
714
|
+
Nothing the client names is trusted. Missing or invalid credentials: 401.
|
|
715
|
+
Authenticated but no available grant, an unknown route or method, a
|
|
716
|
+
malformed account or resource, a disabled or removed plugin: 403 (a `Deny`
|
|
717
|
+
on the invoked method ARN; `context.reason` says why). Signing keys or a
|
|
718
|
+
table unreachable: the gateway's 5xx. None of the three invokes the handler.
|
|
719
|
+
An allow is scoped to the exact method ARN and carries the typed context
|
|
720
|
+
(`PluginAuthorizerContextV1`: plugin, revision, route, account, required
|
|
721
|
+
permission, subject, principal type, correlation id), never a token. Every
|
|
722
|
+
decision is one JSON line in the authorizer's log group. Revocation limits:
|
|
723
|
+
a check that begins after a revoke completed sees it; a request already
|
|
724
|
+
authorized finishes; an accepted job runs until the plugin's own cancellation
|
|
725
|
+
rules stop it; there is no atomic snapshot across unrelated concurrent grant
|
|
726
|
+
edits.
|
|
727
|
+
|
|
728
|
+
Two more limits worth knowing. A deploy that adds a route makes the gateway
|
|
729
|
+
method live before the catalog record naming it: calls to the new route answer
|
|
730
|
+
403 `route-unknown` until the activation resource completes, which is why the
|
|
731
|
+
UI that uses a new route ships in the same deploy rather than ahead of it. And
|
|
732
|
+
the authorizer only reads, so a service user that calls nothing but plugin
|
|
733
|
+
routes never advances its `lastUsedAt`; the access reviews see it as unused
|
|
734
|
+
even while it works.
|
|
735
|
+
|
|
736
|
+
**Update, disable, remove, reinstall.** Changing the definition rewrites the
|
|
737
|
+
record with a new revision. `enabled: false` on a plugin keeps everything but
|
|
738
|
+
suppresses discovery and denies calls. Removing the registration tombstones
|
|
739
|
+
the record (labels kept, grant rows kept, holders noticed), then the routes
|
|
740
|
+
and assets go. Registering the same id again restores still-valid grants on
|
|
741
|
+
purpose. Records are owned by the CloudFormation stack that wrote them; a
|
|
742
|
+
different stack claiming an installed id fails the deploy with "already
|
|
743
|
+
installed by …" — if that is you after moving the activation to another stack,
|
|
744
|
+
delete the row from the catalog table by hand (`aws dynamodb delete-item`) and
|
|
745
|
+
redeploy. To switch the whole feature off, remove the registrations first (one
|
|
746
|
+
deploy), then set `enabled: false`; the table and bucket stay, with their
|
|
747
|
+
exports, so that second deploy cannot fail on an export in use.
|
|
748
|
+
|
|
749
|
+
**Handlers and IAM.** Plugin Lambdas live in the hub account and region and
|
|
750
|
+
run under the execution role you give them; core grants decide who may call
|
|
751
|
+
a route, your IAM decides what the handler may touch. Every Lambda that reads
|
|
752
|
+
the catalog also gets the Accounts table name and read access (the API
|
|
753
|
+
handler, the reapproval sweeper, the catalog provider) — `pluginRuntimeEnv`
|
|
754
|
+
and `grantPluginRuntimeRead` are exported for custom compositions.
|
|
755
|
+
|
|
756
|
+
**Packaging.** The compiled stacks import `@fntio/infra-client-plugin-sdk`,
|
|
757
|
+
which ships inside this package's tarball (bundled dependency), so a vendored
|
|
758
|
+
tarball install keeps working with no second package to fetch. A
|
|
759
|
+
plugin author's own code imports the SDK directly, so they install the plugin
|
|
760
|
+
tarballs too: every GitHub Release from v0.1.18 carries them beside this one.
|
|
761
|
+
|
|
762
|
+
### Troubleshooting
|
|
763
|
+
|
|
764
|
+
Five failures seen so far, each with its cause and the fix.
|
|
765
|
+
|
|
766
|
+
- **A route answers 403 with `context.reason` `route-unknown` while a deploy
|
|
767
|
+
runs.** The gateway method goes live before the catalog record that names
|
|
768
|
+
it (the activation resource depends on the methods, so it is written last).
|
|
769
|
+
Wait for the deploy to finish; ship the UI that calls a new route in the
|
|
770
|
+
same deploy as the route, never ahead of it.
|
|
771
|
+
- **Plugin assets answer 403.** `/plugin-assets/*` is CloudFront over the
|
|
772
|
+
private assets bucket with a GetObject-only policy and no SPA rewrite, so a
|
|
773
|
+
key that does not exist answers 403 — a real error, never `index.html`. The
|
|
774
|
+
object key must equal the URL path: the usual cause is a plugin registered
|
|
775
|
+
with its frontend not built (an empty or stale `ui.assets` directory) or an
|
|
776
|
+
`entry` that names a file outside it. Build the frontend before synth and
|
|
777
|
+
redeploy.
|
|
778
|
+
- **"This plugin was built for a different version of the portal."** The
|
|
779
|
+
frame speaks another message protocol version than the installed portal
|
|
780
|
+
(0.1.x pages against a 0.2.0 portal, or the reverse). Rebuild the plugin
|
|
781
|
+
against the plugin packages of the installed `@fntio/infra-client` version
|
|
782
|
+
and redeploy; see the SDK README's Versioning section.
|
|
783
|
+
- **"Its page loaded but never connected to the portal"** (the handshake
|
|
784
|
+
timeout). The page never posted `ready`: the `entry` path names the wrong
|
|
785
|
+
file, or the plugin-assets Content-Security-Policy blocked a script the
|
|
786
|
+
page needs — that policy allows the portal only, so a bundle that loads
|
|
787
|
+
anything from a third-party host never runs. Open the frame URL in a tab
|
|
788
|
+
and read the console for CSP violations; bundle every dependency.
|
|
789
|
+
- **Token refresh fails inside a frame.** The host owns the session; the
|
|
790
|
+
SDK never signs in itself. After an authentication-layer 401 it asks the
|
|
791
|
+
host to renew and retries exactly once; if that fails, the plugin surfaces
|
|
792
|
+
the error and the portal's own session-end flow applies (`sessionEnded`
|
|
793
|
+
with reason `expired` at the 12 h wall). A plugin Lambda that answers 401
|
|
794
|
+
for a business failure triggers the same retry, so answer domain 4xx codes
|
|
795
|
+
instead.
|
|
796
|
+
|
|
797
|
+
## Plugin permissions
|
|
798
|
+
|
|
799
|
+
Customer plugins (Epic 5) hold their grants in the same Access table as roles,
|
|
800
|
+
as `plugin#<pluginId>#<accountNumber>#<user|admin>` rows on users and groups.
|
|
801
|
+
What such a row *means* is decided in one place, `lambdacode/api/services/pluginAccess.ts`:
|
|
802
|
+
|
|
803
|
+
- **Availability.** A row authorizes only while the plugin's catalog record is
|
|
804
|
+
installed and enabled, the permission is declared by the plugin, and the
|
|
805
|
+
account is both bound by the plugin and registered in the Accounts catalog.
|
|
806
|
+
A row that fails any of these is *dormant*: visible and revocable in the
|
|
807
|
+
grant editor, never authorizing, never renewable.
|
|
808
|
+
- **Implication.** `admin` includes `user` only when the plugin declares
|
|
809
|
+
`user`. It is applied when capabilities are derived, never stored, so an
|
|
810
|
+
admin grant is stored as admin and a user capability may cite it.
|
|
811
|
+
- **No bypass.** App admins and service users are ordinary principals here;
|
|
812
|
+
a service user's grants live on its own `user#<clientId>` rows.
|
|
813
|
+
- **Notices.** Loss notices for plugins diff *available capabilities*, not
|
|
814
|
+
rows: revoking a user row while an admin row still implies it is silent;
|
|
815
|
+
a plugin going dormant is a `PLUGIN` revocation (`via: CASCADE`).
|
|
816
|
+
- **Retention.** Removing or disabling a plugin keeps its rows so that
|
|
817
|
+
re-enabling or reinstalling the same id deliberately restores still-valid
|
|
818
|
+
access; deleting an account removes that account's plugin rows (with
|
|
819
|
+
notices) like the role cascade does. The yearly review sweep raises
|
|
820
|
+
reviews only for available rows, but a review already open on a row that
|
|
821
|
+
went dormant still lapses, and approving a review of a dormant row is
|
|
822
|
+
refused (409).
|
|
823
|
+
- **Reads on the authorization path** are strongly consistent (catalog,
|
|
824
|
+
accounts, access), with unprocessed batch keys retried a bounded number of
|
|
825
|
+
times and never read as "no grant".
|
|
826
|
+
|
|
827
|
+
**Two discovery views, on purpose.** `GET /api/plugins` answers the signed-in
|
|
828
|
+
caller: only plugins where they hold an available capability, only the UI
|
|
829
|
+
entries whose own permission is available somewhere, and account names from the
|
|
830
|
+
Accounts catalog, so someone holding nothing but a plugin grant still sees the
|
|
831
|
+
account. It is per-caller and never cached. `GET /api/admin/plugins` answers the
|
|
832
|
+
grant editor: every definition, including disabled, unavailable and tombstoned
|
|
833
|
+
ones, independent of the admin's own plugin grants, so a binding nobody holds
|
|
834
|
+
yet is still assignable. Neither returns handler internals, and an empty list
|
|
835
|
+
always means empty — a storage failure is an error, never a fabricated empty
|
|
836
|
+
catalog.
|
|
837
|
+
|
|
838
|
+
**Assignment and review operations.** Admins assign and revoke on
|
|
839
|
+
`/api/admin/plugins/{pluginId}/accounts/{accountNumber}/grants`: `PUT` with a
|
|
840
|
+
principal (`{kind:"user",userId}` or `{kind:"group",groupId}`), a permission and
|
|
841
|
+
an optional `durationHours` for users; `DELETE` with the principal and
|
|
842
|
+
permission. Both are idempotent. Assignment refuses an unavailable binding (409),
|
|
843
|
+
an unknown plugin or unbound account (404), and an undeclared permission or a
|
|
844
|
+
group expiry (400). Revocation is unconditional on purpose, so a stale row on a
|
|
845
|
+
disabled or removed plugin stays removable. A user's plugin access has its own
|
|
846
|
+
view, `GET /api/admin/users/{userId}/plugin-grants`, alongside the resource-grants
|
|
847
|
+
one; a group carries its plugin references in the groups list. Either way one call
|
|
848
|
+
covers every plugin, so no page sweeps per-plugin endpoints, and a plugin problem
|
|
849
|
+
never takes a user's role grants down with it. Plugin rows join the
|
|
850
|
+
existing yearly review lifecycle: reviews are raised only for available rows,
|
|
851
|
+
approving a review of a dormant row is refused (409), and losing a capability
|
|
852
|
+
produces the usual revocation notice.
|
|
853
|
+
|
|
854
|
+
The catalog is deployment-written; how it gets there is [Plugins](#plugins).
|
|
855
|
+
|
|
856
|
+
## Bring your own web build
|
|
857
|
+
|
|
858
|
+
`addAccessPortal` accepts `webAssetPath`, a directory with an `index.html`,
|
|
859
|
+
to serve a web bundle other than the one baked into the package. The deploy
|
|
860
|
+
still generates `config.json` from your config, so the bundle must be a build
|
|
861
|
+
of this product's frontend, not an arbitrary site.
|
|
862
|
+
|
|
863
|
+
## HTTP API
|
|
864
|
+
|
|
865
|
+
`openapi.yaml` in the package root describes every route of the portal API
|
|
866
|
+
(OpenAPI 3.1): the two token kinds (a Cognito ID token for people, a
|
|
867
|
+
`client_credentials` access token for service users, who are admins),
|
|
868
|
+
request and response shapes, and status codes. The route inventory is
|
|
869
|
+
drift-tested against the mounted routes in the package's test suite; the
|
|
870
|
+
shapes are maintained by hand alongside the code. Requests go to
|
|
871
|
+
`https://<web domain>/api/…`.
|
|
872
|
+
|
|
873
|
+
## License
|
|
874
|
+
|
|
875
|
+
Elastic License 2.0. Commercial use is allowed; offering the product to
|
|
876
|
+
third parties as a managed or hosted service is not.
|