@workos-inc/node 8.0.0-rc.6 → 8.0.0-rc.8
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/README.md +54 -0
- package/lib/api-keys/api-keys.cjs +3 -0
- package/lib/api-keys/api-keys.cjs.map +1 -1
- package/lib/api-keys/api-keys.d.cts +2 -1
- package/lib/api-keys/api-keys.d.ts +2 -1
- package/lib/api-keys/api-keys.js +3 -0
- package/lib/api-keys/api-keys.js.map +1 -1
- package/lib/api-keys/interfaces/create-organization-api-key-options.interface.cjs +0 -0
- package/lib/api-keys/interfaces/create-organization-api-key-options.interface.d.cts +16 -0
- package/lib/api-keys/interfaces/create-organization-api-key-options.interface.d.ts +16 -0
- package/lib/api-keys/interfaces/create-organization-api-key-options.interface.js +1 -0
- package/lib/api-keys/interfaces/created-api-key.interface.cjs +0 -0
- package/lib/api-keys/interfaces/created-api-key.interface.d.cts +34 -0
- package/lib/api-keys/interfaces/created-api-key.interface.d.ts +34 -0
- package/lib/api-keys/interfaces/created-api-key.interface.js +1 -0
- package/lib/api-keys/interfaces/index.cjs +0 -0
- package/lib/api-keys/interfaces/index.d.cts +6 -0
- package/lib/api-keys/interfaces/index.d.ts +6 -0
- package/lib/api-keys/interfaces/index.js +1 -0
- package/lib/api-keys/interfaces/list-organization-api-keys-options.interface.cjs +0 -0
- package/lib/api-keys/interfaces/list-organization-api-keys-options.interface.d.cts +9 -0
- package/lib/api-keys/interfaces/list-organization-api-keys-options.interface.d.ts +9 -0
- package/lib/api-keys/interfaces/list-organization-api-keys-options.interface.js +1 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.cjs +12 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.cjs.map +1 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.d.cts +7 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.d.ts +7 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.js +11 -0
- package/lib/api-keys/serializers/create-organization-api-key-options.serializer.js.map +1 -0
- package/lib/api-keys/serializers/created-api-key.serializer.cjs +20 -0
- package/lib/api-keys/serializers/created-api-key.serializer.cjs.map +1 -0
- package/lib/api-keys/serializers/created-api-key.serializer.d.cts +7 -0
- package/lib/api-keys/serializers/created-api-key.serializer.d.ts +7 -0
- package/lib/api-keys/serializers/created-api-key.serializer.js +19 -0
- package/lib/api-keys/serializers/created-api-key.serializer.js.map +1 -0
- package/lib/api-keys/serializers/index.cjs +9 -0
- package/lib/api-keys/serializers/index.d.cts +5 -0
- package/lib/api-keys/serializers/index.d.ts +5 -0
- package/lib/api-keys/serializers/index.js +6 -0
- package/lib/common/crypto/seal.cjs +7 -7
- package/lib/common/crypto/seal.cjs.map +1 -1
- package/lib/common/crypto/seal.js +1 -1
- package/lib/common/exceptions/api-key-required.exception.cjs +15 -0
- package/lib/common/exceptions/api-key-required.exception.cjs.map +1 -0
- package/lib/common/exceptions/api-key-required.exception.d.cts +10 -0
- package/lib/common/exceptions/api-key-required.exception.d.ts +10 -0
- package/lib/common/exceptions/api-key-required.exception.js +14 -0
- package/lib/common/exceptions/api-key-required.exception.js.map +1 -0
- package/lib/common/exceptions/index.cjs +2 -0
- package/lib/common/exceptions/index.d.cts +2 -1
- package/lib/common/exceptions/index.d.ts +2 -1
- package/lib/common/exceptions/index.js +2 -1
- package/lib/common/interfaces/event.interface.d.cts +28 -3
- package/lib/common/interfaces/event.interface.d.ts +28 -3
- package/lib/common/interfaces/get-options.interface.d.cts +2 -0
- package/lib/common/interfaces/get-options.interface.d.ts +2 -0
- package/lib/common/interfaces/index.d.cts +2 -2
- package/lib/common/interfaces/index.d.ts +2 -2
- package/lib/common/interfaces/post-options.interface.d.cts +2 -0
- package/lib/common/interfaces/post-options.interface.d.ts +2 -0
- package/lib/common/interfaces/put-options.interface.d.cts +2 -0
- package/lib/common/interfaces/put-options.interface.d.ts +2 -0
- package/lib/common/interfaces/workos-options.interface.d.cts +1 -0
- package/lib/common/interfaces/workos-options.interface.d.ts +1 -0
- package/lib/common/net/http-client.cjs.map +1 -1
- package/lib/common/net/http-client.js.map +1 -1
- package/lib/common/serializers/event.serializer.cjs +13 -5
- package/lib/common/serializers/event.serializer.cjs.map +1 -1
- package/lib/common/serializers/event.serializer.js +13 -5
- package/lib/common/serializers/event.serializer.js.map +1 -1
- package/lib/directory-sync/directory-sync.cjs +1 -1
- package/lib/directory-sync/directory-sync.js +1 -1
- package/lib/factory.cjs +10 -0
- package/lib/factory.cjs.map +1 -0
- package/lib/factory.d.cts +83 -0
- package/lib/factory.d.ts +83 -0
- package/lib/factory.js +10 -0
- package/lib/factory.js.map +1 -0
- package/lib/feature-flags/feature-flags.cjs +37 -0
- package/lib/feature-flags/feature-flags.cjs.map +1 -0
- package/lib/feature-flags/feature-flags.d.cts +21 -0
- package/lib/feature-flags/feature-flags.d.ts +21 -0
- package/lib/feature-flags/feature-flags.js +37 -0
- package/lib/feature-flags/feature-flags.js.map +1 -0
- package/lib/feature-flags/interfaces/add-flag-target-options.interface.cjs +0 -0
- package/lib/feature-flags/interfaces/add-flag-target-options.interface.d.cts +8 -0
- package/lib/feature-flags/interfaces/add-flag-target-options.interface.d.ts +8 -0
- package/lib/feature-flags/interfaces/add-flag-target-options.interface.js +1 -0
- package/lib/feature-flags/interfaces/feature-flag.interface.d.cts +8 -2
- package/lib/feature-flags/interfaces/feature-flag.interface.d.ts +8 -2
- package/lib/feature-flags/interfaces/index.d.cts +4 -1
- package/lib/feature-flags/interfaces/index.d.ts +4 -1
- package/lib/feature-flags/interfaces/list-feature-flags-options.interface.cjs +0 -0
- package/lib/feature-flags/interfaces/list-feature-flags-options.interface.d.cts +7 -0
- package/lib/feature-flags/interfaces/list-feature-flags-options.interface.d.ts +7 -0
- package/lib/feature-flags/interfaces/list-feature-flags-options.interface.js +1 -0
- package/lib/feature-flags/interfaces/remove-flag-target-options.interface.cjs +0 -0
- package/lib/feature-flags/interfaces/remove-flag-target-options.interface.d.cts +8 -0
- package/lib/feature-flags/interfaces/remove-flag-target-options.interface.d.ts +8 -0
- package/lib/feature-flags/interfaces/remove-flag-target-options.interface.js +1 -0
- package/lib/feature-flags/serializers/feature-flag.serializer.cjs +3 -0
- package/lib/feature-flags/serializers/feature-flag.serializer.cjs.map +1 -1
- package/lib/feature-flags/serializers/feature-flag.serializer.js +3 -0
- package/lib/feature-flags/serializers/feature-flag.serializer.js.map +1 -1
- package/lib/feature-flags/serializers/index.cjs +3 -0
- package/lib/feature-flags/serializers/index.d.cts +2 -0
- package/lib/feature-flags/serializers/index.d.ts +2 -0
- package/lib/feature-flags/serializers/index.js +3 -0
- package/lib/fga/serializers/query-result.serializer.cjs.map +1 -1
- package/lib/fga/serializers/query-result.serializer.js.map +1 -1
- package/lib/index.cjs +18 -9
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +18 -5
- package/lib/index.d.ts +18 -5
- package/lib/index.js +16 -10
- package/lib/index.js.map +1 -1
- package/lib/index.worker.cjs +15 -9
- package/lib/index.worker.cjs.map +1 -1
- package/lib/index.worker.d.cts +10 -5
- package/lib/index.worker.d.ts +10 -5
- package/lib/index.worker.js +13 -10
- package/lib/index.worker.js.map +1 -1
- package/lib/node_modules/iron-webcrypto/index.cjs +218 -0
- package/lib/node_modules/iron-webcrypto/index.cjs.map +1 -0
- package/lib/node_modules/iron-webcrypto/index.js +216 -0
- package/lib/node_modules/iron-webcrypto/index.js.map +1 -0
- package/lib/node_modules/uint8array-extras/index.cjs +55 -0
- package/lib/node_modules/uint8array-extras/index.cjs.map +1 -0
- package/lib/node_modules/uint8array-extras/index.js +52 -0
- package/lib/node_modules/uint8array-extras/index.js.map +1 -0
- package/lib/organizations/organizations.cjs +14 -2
- package/lib/organizations/organizations.cjs.map +1 -1
- package/lib/organizations/organizations.d.cts +6 -0
- package/lib/organizations/organizations.d.ts +6 -0
- package/lib/organizations/organizations.js +14 -2
- package/lib/organizations/organizations.js.map +1 -1
- package/lib/organizations/serializers/index.cjs +1 -1
- package/lib/organizations/serializers/index.js +1 -1
- package/lib/pkce/pkce.cjs +54 -0
- package/lib/pkce/pkce.cjs.map +1 -0
- package/lib/pkce/pkce.d.cts +38 -0
- package/lib/pkce/pkce.d.ts +38 -0
- package/lib/pkce/pkce.js +53 -0
- package/lib/pkce/pkce.js.map +1 -0
- package/lib/sso/interfaces/authorization-url-options.interface.d.cts +34 -8
- package/lib/sso/interfaces/authorization-url-options.interface.d.ts +34 -8
- package/lib/sso/interfaces/get-profile-and-token-options.interface.d.cts +6 -0
- package/lib/sso/interfaces/get-profile-and-token-options.interface.d.ts +6 -0
- package/lib/sso/interfaces/index.d.cts +2 -2
- package/lib/sso/interfaces/index.d.ts +2 -2
- package/lib/sso/sso.cjs +90 -8
- package/lib/sso/sso.cjs.map +1 -1
- package/lib/sso/sso.d.cts +41 -2
- package/lib/sso/sso.d.ts +41 -2
- package/lib/sso/sso.js +90 -8
- package/lib/sso/sso.js.map +1 -1
- package/lib/user-management/interfaces/authenticate-with-code-and-verifier-options.interface.d.cts +2 -2
- package/lib/user-management/interfaces/authenticate-with-code-and-verifier-options.interface.d.ts +2 -2
- package/lib/user-management/interfaces/authenticate-with-options-base.interface.d.cts +19 -3
- package/lib/user-management/interfaces/authenticate-with-options-base.interface.d.ts +19 -3
- package/lib/user-management/interfaces/authenticate-with-refresh-token-public-client-options.interface.cjs +0 -0
- package/lib/user-management/interfaces/authenticate-with-refresh-token-public-client-options.interface.d.cts +16 -0
- package/lib/user-management/interfaces/authenticate-with-refresh-token-public-client-options.interface.d.ts +16 -0
- package/lib/user-management/interfaces/authenticate-with-refresh-token-public-client-options.interface.js +1 -0
- package/lib/user-management/interfaces/authorization-url-options.interface.d.cts +30 -5
- package/lib/user-management/interfaces/authorization-url-options.interface.d.ts +30 -5
- package/lib/user-management/interfaces/index.d.cts +5 -3
- package/lib/user-management/interfaces/index.d.ts +5 -3
- package/lib/user-management/interfaces/logout-url-options.interface.cjs +0 -0
- package/lib/user-management/interfaces/logout-url-options.interface.d.cts +8 -0
- package/lib/user-management/interfaces/logout-url-options.interface.d.ts +8 -0
- package/lib/user-management/interfaces/logout-url-options.interface.js +1 -0
- package/lib/user-management/serializers/authenticate-with-code-and-verifier-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-code-and-verifier-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-code-and-verifier-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-code-and-verifier-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-code-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-code-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-code-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-code-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-email-verification.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-email-verification.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-email-verification.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-email-verification.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-magic-auth-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-magic-auth-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-magic-auth-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-magic-auth-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-organization-selection-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-organization-selection-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-organization-selection-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-organization-selection-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-password-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-password-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-password-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-password-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.cjs +14 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.cjs.map +1 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.d.cts +8 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.d.ts +8 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.js +13 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token-public-client-options.serializer.js.map +1 -0
- package/lib/user-management/serializers/authenticate-with-refresh-token.options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-refresh-token.options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-refresh-token.options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-refresh-token.options.serializer.js.map +1 -1
- package/lib/user-management/serializers/authenticate-with-totp-options.serializer.cjs.map +1 -1
- package/lib/user-management/serializers/authenticate-with-totp-options.serializer.d.cts +2 -1
- package/lib/user-management/serializers/authenticate-with-totp-options.serializer.d.ts +2 -1
- package/lib/user-management/serializers/authenticate-with-totp-options.serializer.js.map +1 -1
- package/lib/user-management/serializers/index.cjs +2 -0
- package/lib/user-management/serializers/index.d.cts +2 -1
- package/lib/user-management/serializers/index.d.ts +2 -1
- package/lib/user-management/serializers/index.js +2 -1
- package/lib/user-management/session.cjs +3 -10
- package/lib/user-management/session.cjs.map +1 -1
- package/lib/user-management/session.js +3 -10
- package/lib/user-management/session.js.map +1 -1
- package/lib/user-management/user-management.cjs +186 -31
- package/lib/user-management/user-management.cjs.map +1 -1
- package/lib/user-management/user-management.d.cts +71 -2
- package/lib/user-management/user-management.d.ts +71 -2
- package/lib/user-management/user-management.js +186 -31
- package/lib/user-management/user-management.js.map +1 -1
- package/lib/vault/vault.cjs +4 -0
- package/lib/vault/vault.cjs.map +1 -1
- package/lib/vault/vault.d.cts +1 -0
- package/lib/vault/vault.d.ts +1 -0
- package/lib/vault/vault.js +4 -0
- package/lib/vault/vault.js.map +1 -1
- package/lib/webhooks/webhooks.cjs +1 -1
- package/lib/webhooks/webhooks.js +1 -1
- package/lib/workos.cjs +68 -26
- package/lib/workos.cjs.map +1 -1
- package/lib/workos.d.cts +37 -8
- package/lib/workos.d.ts +37 -8
- package/lib/workos.js +68 -26
- package/lib/workos.js.map +1 -1
- package/package.json +4 -21
- package/lib/_virtual/rolldown_runtime.cjs +0 -19
- package/lib/_virtual/rolldown_runtime.js +0 -18
- package/lib/client/index.cjs +0 -15
- package/lib/client/index.d.cts +0 -3
- package/lib/client/index.d.ts +0 -3
- package/lib/client/index.js +0 -4
- package/lib/client/sso.cjs +0 -40
- package/lib/client/sso.cjs.map +0 -1
- package/lib/client/sso.d.cts +0 -21
- package/lib/client/sso.d.ts +0 -21
- package/lib/client/sso.js +0 -34
- package/lib/client/sso.js.map +0 -1
- package/lib/client/user-management.cjs +0 -80
- package/lib/client/user-management.cjs.map +0 -1
- package/lib/client/user-management.d.cts +0 -58
- package/lib/client/user-management.d.ts +0 -58
- package/lib/client/user-management.js +0 -72
- package/lib/client/user-management.js.map +0 -1
- package/lib/index.client.cjs +0 -15
- package/lib/index.client.d.cts +0 -3
- package/lib/index.client.d.ts +0 -3
- package/lib/index.client.js +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../node_modules/uint8array-extras/index.js"],"sourcesContent":["const objectToString = Object.prototype.toString;\nconst uint8ArrayStringified = '[object Uint8Array]';\nconst arrayBufferStringified = '[object ArrayBuffer]';\n\nfunction isType(value, typeConstructor, typeStringified) {\n\tif (!value) {\n\t\treturn false;\n\t}\n\n\tif (value.constructor === typeConstructor) {\n\t\treturn true;\n\t}\n\n\treturn objectToString.call(value) === typeStringified;\n}\n\nexport function isUint8Array(value) {\n\treturn isType(value, Uint8Array, uint8ArrayStringified);\n}\n\nfunction isArrayBuffer(value) {\n\treturn isType(value, ArrayBuffer, arrayBufferStringified);\n}\n\nfunction isUint8ArrayOrArrayBuffer(value) {\n\treturn isUint8Array(value) || isArrayBuffer(value);\n}\n\nexport function assertUint8Array(value) {\n\tif (!isUint8Array(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function assertUint8ArrayOrArrayBuffer(value) {\n\tif (!isUint8ArrayOrArrayBuffer(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function toUint8Array(value) {\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\n\tthrow new TypeError(`Unsupported value, got \\`${typeof value}\\`.`);\n}\n\nexport function concatUint8Arrays(arrays, totalLength) {\n\tif (arrays.length === 0) {\n\t\treturn new Uint8Array(0);\n\t}\n\n\ttotalLength ??= arrays.reduce((accumulator, currentValue) => accumulator + currentValue.length, 0);\n\n\tconst returnValue = new Uint8Array(totalLength);\n\n\tlet offset = 0;\n\tfor (const array of arrays) {\n\t\tassertUint8Array(array);\n\t\treturnValue.set(array, offset);\n\t\toffset += array.length;\n\t}\n\n\treturn returnValue;\n}\n\nexport function areUint8ArraysEqual(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\t// eslint-disable-next-line unicorn/no-for-loop\n\tfor (let index = 0; index < a.length; index++) {\n\t\tif (a[index] !== b[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function compareUint8Arrays(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tconst length = Math.min(a.length, b.length);\n\n\tfor (let index = 0; index < length; index++) {\n\t\tconst diff = a[index] - b[index];\n\t\tif (diff !== 0) {\n\t\t\treturn Math.sign(diff);\n\t\t}\n\t}\n\n\t// At this point, all the compared elements are equal.\n\t// The shorter array should come first if the arrays are of different lengths.\n\treturn Math.sign(a.length - b.length);\n}\n\nconst cachedDecoders = {\n\tutf8: new globalThis.TextDecoder('utf8'),\n};\n\nexport function uint8ArrayToString(array, encoding = 'utf8') {\n\tassertUint8ArrayOrArrayBuffer(array);\n\tcachedDecoders[encoding] ??= new globalThis.TextDecoder(encoding);\n\treturn cachedDecoders[encoding].decode(array);\n}\n\nfunction assertString(value) {\n\tif (typeof value !== 'string') {\n\t\tthrow new TypeError(`Expected \\`string\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nconst cachedEncoder = new globalThis.TextEncoder();\n\nexport function stringToUint8Array(string) {\n\tassertString(string);\n\treturn cachedEncoder.encode(string);\n}\n\nfunction base64ToBase64Url(base64) {\n\treturn base64.replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');\n}\n\nfunction base64UrlToBase64(base64url) {\n\tconst base64 = base64url.replaceAll('-', '+').replaceAll('_', '/');\n\tconst padding = (4 - (base64.length % 4)) % 4;\n\treturn base64 + '='.repeat(padding);\n}\n\n// Reference: https://phuoc.ng/collection/this-vs-that/concat-vs-push/\n// Important: Keep this value divisible by 3 so intermediate chunks produce no Base64 padding.\nconst MAX_BLOCK_SIZE = 65_535;\n\nexport function uint8ArrayToBase64(array, {urlSafe = false} = {}) {\n\tassertUint8Array(array);\n\n\tlet base64 = '';\n\n\tfor (let index = 0; index < array.length; index += MAX_BLOCK_SIZE) {\n\t\tconst chunk = array.subarray(index, index + MAX_BLOCK_SIZE);\n\t\t// Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n\t\tbase64 += globalThis.btoa(String.fromCodePoint.apply(undefined, chunk));\n\t}\n\n\treturn urlSafe ? base64ToBase64Url(base64) : base64;\n}\n\nexport function base64ToUint8Array(base64String) {\n\tassertString(base64String);\n\treturn Uint8Array.from(globalThis.atob(base64UrlToBase64(base64String)), x => x.codePointAt(0));\n}\n\nexport function stringToBase64(string, {urlSafe = false} = {}) {\n\tassertString(string);\n\treturn uint8ArrayToBase64(stringToUint8Array(string), {urlSafe});\n}\n\nexport function base64ToString(base64String) {\n\tassertString(base64String);\n\treturn uint8ArrayToString(base64ToUint8Array(base64String));\n}\n\nconst byteToHexLookupTable = Array.from({length: 256}, (_, index) => index.toString(16).padStart(2, '0'));\n\nexport function uint8ArrayToHex(array) {\n\tassertUint8Array(array);\n\n\t// Concatenating a string is faster than using an array.\n\tlet hexString = '';\n\n\t// eslint-disable-next-line unicorn/no-for-loop -- Max performance is critical.\n\tfor (let index = 0; index < array.length; index++) {\n\t\thexString += byteToHexLookupTable[array[index]];\n\t}\n\n\treturn hexString;\n}\n\nconst hexToDecimalLookupTable = {\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n\ta: 10,\n\tb: 11,\n\tc: 12,\n\td: 13,\n\te: 14,\n\tf: 15,\n\tA: 10,\n\tB: 11,\n\tC: 12,\n\tD: 13,\n\tE: 14,\n\tF: 15,\n};\n\nexport function hexToUint8Array(hexString) {\n\tassertString(hexString);\n\n\tif (hexString.length % 2 !== 0) {\n\t\tthrow new Error('Invalid Hex string length.');\n\t}\n\n\tconst resultLength = hexString.length / 2;\n\tconst bytes = new Uint8Array(resultLength);\n\n\tfor (let index = 0; index < resultLength; index++) {\n\t\tconst highNibble = hexToDecimalLookupTable[hexString[index * 2]];\n\t\tconst lowNibble = hexToDecimalLookupTable[hexString[(index * 2) + 1]];\n\n\t\tif (highNibble === undefined || lowNibble === undefined) {\n\t\t\tthrow new Error(`Invalid Hex character encountered at position ${index * 2}`);\n\t\t}\n\n\t\tbytes[index] = (highNibble << 4) | lowNibble; // eslint-disable-line no-bitwise\n\t}\n\n\treturn bytes;\n}\n\n/**\n@param {DataView} view\n@returns {number}\n*/\nexport function getUintBE(view) {\n\tconst {byteLength} = view;\n\n\tif (byteLength === 6) {\n\t\treturn (view.getUint16(0) * (2 ** 32)) + view.getUint32(2);\n\t}\n\n\tif (byteLength === 5) {\n\t\treturn (view.getUint8(0) * (2 ** 32)) + view.getUint32(1);\n\t}\n\n\tif (byteLength === 4) {\n\t\treturn view.getUint32(0);\n\t}\n\n\tif (byteLength === 3) {\n\t\treturn (view.getUint8(0) * (2 ** 16)) + view.getUint16(1);\n\t}\n\n\tif (byteLength === 2) {\n\t\treturn view.getUint16(0);\n\t}\n\n\tif (byteLength === 1) {\n\t\treturn view.getUint8(0);\n\t}\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {number}\n*/\nexport function indexOf(array, value) {\n\tconst arrayLength = array.length;\n\tconst valueLength = value.length;\n\n\tif (valueLength === 0) {\n\t\treturn -1;\n\t}\n\n\tif (valueLength > arrayLength) {\n\t\treturn -1;\n\t}\n\n\tconst validOffsetLength = arrayLength - valueLength;\n\n\tfor (let index = 0; index <= validOffsetLength; index++) {\n\t\tlet isMatch = true;\n\t\tfor (let index2 = 0; index2 < valueLength; index2++) {\n\t\t\tif (array[index + index2] !== value[index2]) {\n\t\t\t\tisMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (isMatch) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {boolean}\n*/\nexport function includes(array, value) {\n\treturn indexOf(array, value) !== -1;\n}\n"],"x_google_ignoreList":[0],"mappings":";AAAA,MAAM,iBAAiB,OAAO,UAAU;AACxC,MAAM,wBAAwB;AAG9B,SAAS,OAAO,OAAO,iBAAiB,iBAAiB;AACxD,KAAI,CAAC,MACJ,QAAO;AAGR,KAAI,MAAM,gBAAgB,gBACzB,QAAO;AAGR,QAAO,eAAe,KAAK,MAAM,KAAK;;AAGvC,SAAgB,aAAa,OAAO;AACnC,QAAO,OAAO,OAAO,YAAY,sBAAsB;;AAWxD,SAAgB,iBAAiB,OAAO;AACvC,KAAI,CAAC,aAAa,MAAM,CACvB,OAAM,IAAI,UAAU,kCAAkC,OAAO,MAAM,IAAI;;AAiFzE,MAAM,iBAAiB,EACtB,MAAM,IAAI,WAAW,YAAY,OAAO,EACxC;AAQD,SAAS,aAAa,OAAO;AAC5B,KAAI,OAAO,UAAU,SACpB,OAAM,IAAI,UAAU,8BAA8B,OAAO,MAAM,IAAI;;AAIrE,MAAM,gBAAgB,IAAI,WAAW,aAAa;AAOlD,SAAS,kBAAkB,QAAQ;AAClC,QAAO,OAAO,WAAW,KAAK,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,OAAO,GAAG;;AAG3E,SAAS,kBAAkB,WAAW;CACrC,MAAM,SAAS,UAAU,WAAW,KAAK,IAAI,CAAC,WAAW,KAAK,IAAI;CAClE,MAAM,WAAW,IAAK,OAAO,SAAS,KAAM;AAC5C,QAAO,SAAS,IAAI,OAAO,QAAQ;;AAKpC,MAAM,iBAAiB;AAEvB,SAAgB,mBAAmB,OAAO,EAAC,UAAU,UAAS,EAAE,EAAE;AACjE,kBAAiB,MAAM;CAEvB,IAAI,SAAS;AAEb,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,gBAAgB;EAClE,MAAM,QAAQ,MAAM,SAAS,OAAO,QAAQ,eAAe;AAE3D,YAAU,WAAW,KAAK,OAAO,cAAc,MAAM,QAAW,MAAM,CAAC;;AAGxE,QAAO,UAAU,kBAAkB,OAAO,GAAG;;AAG9C,SAAgB,mBAAmB,cAAc;AAChD,cAAa,aAAa;AAC1B,QAAO,WAAW,KAAK,WAAW,KAAK,kBAAkB,aAAa,CAAC,GAAE,MAAK,EAAE,YAAY,EAAE,CAAC;;AAahG,MAAM,uBAAuB,MAAM,KAAK,EAAC,QAAQ,KAAI,GAAG,GAAG,UAAU,MAAM,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAEzG,SAAgB,gBAAgB,OAAO;AACtC,kBAAiB,MAAM;CAGvB,IAAI,YAAY;AAGhB,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,QACzC,cAAa,qBAAqB,MAAM;AAGzC,QAAO"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_api_keys_serializers_api_key_serializer = require('../api-keys/serializers/api-key.serializer.cjs');
|
|
2
|
+
const require_common_utils_pagination = require('../common/utils/pagination.cjs');
|
|
2
3
|
const require_organizations_serializers_create_organization_options_serializer = require('./serializers/create-organization-options.serializer.cjs');
|
|
4
|
+
const require_organizations_serializers_organization_serializer = require('./serializers/organization.serializer.cjs');
|
|
3
5
|
const require_organizations_serializers_update_organization_options_serializer = require('./serializers/update-organization-options.serializer.cjs');
|
|
4
|
-
const require_common_utils_pagination = require('../common/utils/pagination.cjs');
|
|
5
6
|
const require_common_utils_fetch_and_deserialize = require('../common/utils/fetch-and-deserialize.cjs');
|
|
6
7
|
const require_roles_serializers_role_serializer = require('../roles/serializers/role.serializer.cjs');
|
|
7
8
|
const require_feature_flags_serializers_feature_flag_serializer = require('../feature-flags/serializers/feature-flag.serializer.cjs');
|
|
9
|
+
const require_api_keys_serializers_create_organization_api_key_options_serializer = require('../api-keys/serializers/create-organization-api-key-options.serializer.cjs');
|
|
10
|
+
const require_api_keys_serializers_created_api_key_serializer = require('../api-keys/serializers/created-api-key.serializer.cjs');
|
|
8
11
|
|
|
9
12
|
//#region src/organizations/organizations.ts
|
|
10
13
|
var Organizations = class {
|
|
@@ -46,6 +49,15 @@ var Organizations = class {
|
|
|
46
49
|
const { organizationId, ...paginationOptions } = options;
|
|
47
50
|
return new require_common_utils_pagination.AutoPaginatable(await require_common_utils_fetch_and_deserialize.fetchAndDeserialize(this.workos, `/organizations/${organizationId}/feature-flags`, require_feature_flags_serializers_feature_flag_serializer.deserializeFeatureFlag, paginationOptions), (params) => require_common_utils_fetch_and_deserialize.fetchAndDeserialize(this.workos, `/organizations/${organizationId}/feature-flags`, require_feature_flags_serializers_feature_flag_serializer.deserializeFeatureFlag, params), options);
|
|
48
51
|
}
|
|
52
|
+
async listOrganizationApiKeys(options) {
|
|
53
|
+
const { organizationId, ...paginationOptions } = options;
|
|
54
|
+
return new require_common_utils_pagination.AutoPaginatable(await require_common_utils_fetch_and_deserialize.fetchAndDeserialize(this.workos, `/organizations/${organizationId}/api_keys`, require_api_keys_serializers_api_key_serializer.deserializeApiKey, paginationOptions), (params) => require_common_utils_fetch_and_deserialize.fetchAndDeserialize(this.workos, `/organizations/${organizationId}/api_keys`, require_api_keys_serializers_api_key_serializer.deserializeApiKey, params), paginationOptions);
|
|
55
|
+
}
|
|
56
|
+
async createOrganizationApiKey(options, requestOptions = {}) {
|
|
57
|
+
const { organizationId } = options;
|
|
58
|
+
const { data } = await this.workos.post(`/organizations/${organizationId}/api_keys`, require_api_keys_serializers_create_organization_api_key_options_serializer.serializeCreateOrganizationApiKeyOptions(options), requestOptions);
|
|
59
|
+
return require_api_keys_serializers_created_api_key_serializer.deserializeCreatedApiKey(data);
|
|
60
|
+
}
|
|
49
61
|
};
|
|
50
62
|
|
|
51
63
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.cjs","names":["workos: WorkOS","AutoPaginatable","fetchAndDeserialize","deserializeOrganization","serializeCreateOrganizationOptions","serializeUpdateOrganizationOptions","deserializeRole","deserializeFeatureFlag"],"sources":["../../src/organizations/organizations.ts"],"sourcesContent":["import { AutoPaginatable } from '../common/utils/pagination';\nimport { WorkOS } from '../workos';\nimport {\n CreateOrganizationOptions,\n CreateOrganizationRequestOptions,\n ListOrganizationsOptions,\n Organization,\n OrganizationResponse,\n UpdateOrganizationOptions,\n} from './interfaces';\nimport {\n FeatureFlag,\n FeatureFlagResponse,\n} from '../feature-flags/interfaces/feature-flag.interface';\nimport {\n deserializeOrganization,\n serializeCreateOrganizationOptions,\n serializeUpdateOrganizationOptions,\n} from './serializers';\n\nimport { fetchAndDeserialize } from '../common/utils/fetch-and-deserialize';\nimport { ListOrganizationRolesResponse, RoleList } from '../roles/interfaces';\nimport { deserializeRole } from '../roles/serializers/role.serializer';\nimport { ListOrganizationRolesOptions } from './interfaces/list-organization-roles-options.interface';\nimport { ListOrganizationFeatureFlagsOptions } from './interfaces/list-organization-feature-flags-options.interface';\nimport { deserializeFeatureFlag } from '../feature-flags/serializers/
|
|
1
|
+
{"version":3,"file":"organizations.cjs","names":["workos: WorkOS","AutoPaginatable","fetchAndDeserialize","deserializeOrganization","serializeCreateOrganizationOptions","serializeUpdateOrganizationOptions","deserializeRole","deserializeFeatureFlag","deserializeApiKey","serializeCreateOrganizationApiKeyOptions","deserializeCreatedApiKey"],"sources":["../../src/organizations/organizations.ts"],"sourcesContent":["import { AutoPaginatable } from '../common/utils/pagination';\nimport { WorkOS } from '../workos';\nimport {\n CreateOrganizationOptions,\n CreateOrganizationRequestOptions,\n ListOrganizationsOptions,\n Organization,\n OrganizationResponse,\n UpdateOrganizationOptions,\n} from './interfaces';\nimport {\n FeatureFlag,\n FeatureFlagResponse,\n} from '../feature-flags/interfaces/feature-flag.interface';\nimport {\n deserializeOrganization,\n serializeCreateOrganizationOptions,\n serializeUpdateOrganizationOptions,\n} from './serializers';\n\nimport { fetchAndDeserialize } from '../common/utils/fetch-and-deserialize';\nimport { ListOrganizationRolesResponse, RoleList } from '../roles/interfaces';\nimport { deserializeRole } from '../roles/serializers/role.serializer';\nimport { ListOrganizationRolesOptions } from './interfaces/list-organization-roles-options.interface';\nimport { ListOrganizationFeatureFlagsOptions } from './interfaces/list-organization-feature-flags-options.interface';\nimport { deserializeFeatureFlag } from '../feature-flags/serializers';\nimport {\n ApiKey,\n SerializedApiKey,\n ListOrganizationApiKeysOptions,\n CreateOrganizationApiKeyOptions,\n CreateOrganizationApiKeyRequestOptions,\n CreatedApiKey,\n SerializedCreatedApiKey,\n} from '../api-keys/interfaces';\nimport {\n deserializeApiKey,\n serializeCreateOrganizationApiKeyOptions,\n deserializeCreatedApiKey,\n} from '../api-keys/serializers';\n\nexport class Organizations {\n constructor(private readonly workos: WorkOS) {}\n\n async listOrganizations(\n options?: ListOrganizationsOptions,\n ): Promise<AutoPaginatable<Organization, ListOrganizationsOptions>> {\n return new AutoPaginatable(\n await fetchAndDeserialize<OrganizationResponse, Organization>(\n this.workos,\n '/organizations',\n deserializeOrganization,\n options,\n ),\n (params) =>\n fetchAndDeserialize<OrganizationResponse, Organization>(\n this.workos,\n '/organizations',\n deserializeOrganization,\n params,\n ),\n options,\n );\n }\n\n async createOrganization(\n payload: CreateOrganizationOptions,\n requestOptions: CreateOrganizationRequestOptions = {},\n ): Promise<Organization> {\n const { data } = await this.workos.post<OrganizationResponse>(\n '/organizations',\n serializeCreateOrganizationOptions(payload),\n requestOptions,\n );\n\n return deserializeOrganization(data);\n }\n\n async deleteOrganization(id: string) {\n await this.workos.delete(`/organizations/${id}`);\n }\n\n async getOrganization(id: string): Promise<Organization> {\n const { data } = await this.workos.get<OrganizationResponse>(\n `/organizations/${id}`,\n );\n\n return deserializeOrganization(data);\n }\n\n async getOrganizationByExternalId(externalId: string): Promise<Organization> {\n const { data } = await this.workos.get<OrganizationResponse>(\n `/organizations/external_id/${externalId}`,\n );\n\n return deserializeOrganization(data);\n }\n\n async updateOrganization(\n options: UpdateOrganizationOptions,\n ): Promise<Organization> {\n const { organization: organizationId, ...payload } = options;\n\n const { data } = await this.workos.put<OrganizationResponse>(\n `/organizations/${organizationId}`,\n serializeUpdateOrganizationOptions(payload),\n );\n\n return deserializeOrganization(data);\n }\n\n async listOrganizationRoles(\n options: ListOrganizationRolesOptions,\n ): Promise<RoleList> {\n const { organizationId } = options;\n\n const { data: response } =\n await this.workos.get<ListOrganizationRolesResponse>(\n `/organizations/${organizationId}/roles`,\n );\n\n return {\n object: 'list',\n data: response.data.map((role) => deserializeRole(role)),\n };\n }\n\n async listOrganizationFeatureFlags(\n options: ListOrganizationFeatureFlagsOptions,\n ): Promise<\n AutoPaginatable<FeatureFlag, ListOrganizationFeatureFlagsOptions>\n > {\n const { organizationId, ...paginationOptions } = options;\n\n return new AutoPaginatable(\n await fetchAndDeserialize<FeatureFlagResponse, FeatureFlag>(\n this.workos,\n `/organizations/${organizationId}/feature-flags`,\n deserializeFeatureFlag,\n paginationOptions,\n ),\n (params) =>\n fetchAndDeserialize<FeatureFlagResponse, FeatureFlag>(\n this.workos,\n `/organizations/${organizationId}/feature-flags`,\n deserializeFeatureFlag,\n params,\n ),\n options,\n );\n }\n\n async listOrganizationApiKeys(\n options: ListOrganizationApiKeysOptions,\n ): Promise<AutoPaginatable<ApiKey>> {\n const { organizationId, ...paginationOptions } = options;\n\n return new AutoPaginatable(\n await fetchAndDeserialize<SerializedApiKey, ApiKey>(\n this.workos,\n `/organizations/${organizationId}/api_keys`,\n deserializeApiKey,\n paginationOptions,\n ),\n (params) =>\n fetchAndDeserialize<SerializedApiKey, ApiKey>(\n this.workos,\n `/organizations/${organizationId}/api_keys`,\n deserializeApiKey,\n params,\n ),\n paginationOptions,\n );\n }\n\n async createOrganizationApiKey(\n options: CreateOrganizationApiKeyOptions,\n requestOptions: CreateOrganizationApiKeyRequestOptions = {},\n ): Promise<CreatedApiKey> {\n const { organizationId } = options;\n\n const { data } = await this.workos.post<SerializedCreatedApiKey>(\n `/organizations/${organizationId}/api_keys`,\n serializeCreateOrganizationApiKeyOptions(options),\n requestOptions,\n );\n\n return deserializeCreatedApiKey(data);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAyCA,IAAa,gBAAb,MAA2B;CACzB,YAAY,AAAiBA,QAAgB;EAAhB;;CAE7B,MAAM,kBACJ,SACkE;AAClE,SAAO,IAAIC,gDACT,MAAMC,+DACJ,KAAK,QACL,kBACAC,mFACA,QACD,GACA,WACCD,+DACE,KAAK,QACL,kBACAC,mFACA,OACD,EACH,QACD;;CAGH,MAAM,mBACJ,SACA,iBAAmD,EAAE,EAC9B;EACvB,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KACjC,kBACAC,4GAAmC,QAAQ,EAC3C,eACD;AAED,SAAOD,kFAAwB,KAAK;;CAGtC,MAAM,mBAAmB,IAAY;AACnC,QAAM,KAAK,OAAO,OAAO,kBAAkB,KAAK;;CAGlD,MAAM,gBAAgB,IAAmC;EACvD,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,kBAAkB,KACnB;AAED,SAAOA,kFAAwB,KAAK;;CAGtC,MAAM,4BAA4B,YAA2C;EAC3E,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,8BAA8B,aAC/B;AAED,SAAOA,kFAAwB,KAAK;;CAGtC,MAAM,mBACJ,SACuB;EACvB,MAAM,EAAE,cAAc,gBAAgB,GAAG,YAAY;EAErD,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,kBAAkB,kBAClBE,4GAAmC,QAAQ,CAC5C;AAED,SAAOF,kFAAwB,KAAK;;CAGtC,MAAM,sBACJ,SACmB;EACnB,MAAM,EAAE,mBAAmB;EAE3B,MAAM,EAAE,MAAM,aACZ,MAAM,KAAK,OAAO,IAChB,kBAAkB,eAAe,QAClC;AAEH,SAAO;GACL,QAAQ;GACR,MAAM,SAAS,KAAK,KAAK,SAASG,0DAAgB,KAAK,CAAC;GACzD;;CAGH,MAAM,6BACJ,SAGA;EACA,MAAM,EAAE,gBAAgB,GAAG,sBAAsB;AAEjD,SAAO,IAAIL,gDACT,MAAMC,+DACJ,KAAK,QACL,kBAAkB,eAAe,iBACjCK,kFACA,kBACD,GACA,WACCL,+DACE,KAAK,QACL,kBAAkB,eAAe,iBACjCK,kFACA,OACD,EACH,QACD;;CAGH,MAAM,wBACJ,SACkC;EAClC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB;AAEjD,SAAO,IAAIN,gDACT,MAAMC,+DACJ,KAAK,QACL,kBAAkB,eAAe,YACjCM,mEACA,kBACD,GACA,WACCN,+DACE,KAAK,QACL,kBAAkB,eAAe,YACjCM,mEACA,OACD,EACH,kBACD;;CAGH,MAAM,yBACJ,SACA,iBAAyD,EAAE,EACnC;EACxB,MAAM,EAAE,mBAAmB;EAE3B,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KACjC,kBAAkB,eAAe,YACjCC,qHAAyC,QAAQ,EACjD,eACD;AAED,SAAOC,iFAAyB,KAAK"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { RoleList } from "../roles/interfaces/role.interface.cjs";
|
|
2
|
+
import { ApiKey } from "../api-keys/interfaces/api-key.interface.cjs";
|
|
3
|
+
import { CreateOrganizationApiKeyOptions, CreateOrganizationApiKeyRequestOptions } from "../api-keys/interfaces/create-organization-api-key-options.interface.cjs";
|
|
4
|
+
import { CreatedApiKey } from "../api-keys/interfaces/created-api-key.interface.cjs";
|
|
5
|
+
import { ListOrganizationApiKeysOptions } from "../api-keys/interfaces/list-organization-api-keys-options.interface.cjs";
|
|
2
6
|
import { CreateOrganizationOptions, CreateOrganizationRequestOptions } from "./interfaces/create-organization-options.interface.cjs";
|
|
3
7
|
import { ListOrganizationFeatureFlagsOptions } from "./interfaces/list-organization-feature-flags-options.interface.cjs";
|
|
4
8
|
import { ListOrganizationsOptions } from "./interfaces/list-organizations-options.interface.cjs";
|
|
@@ -21,6 +25,8 @@ declare class Organizations {
|
|
|
21
25
|
updateOrganization(options: UpdateOrganizationOptions): Promise<Organization>;
|
|
22
26
|
listOrganizationRoles(options: ListOrganizationRolesOptions): Promise<RoleList>;
|
|
23
27
|
listOrganizationFeatureFlags(options: ListOrganizationFeatureFlagsOptions): Promise<AutoPaginatable<FeatureFlag, ListOrganizationFeatureFlagsOptions>>;
|
|
28
|
+
listOrganizationApiKeys(options: ListOrganizationApiKeysOptions): Promise<AutoPaginatable<ApiKey>>;
|
|
29
|
+
createOrganizationApiKey(options: CreateOrganizationApiKeyOptions, requestOptions?: CreateOrganizationApiKeyRequestOptions): Promise<CreatedApiKey>;
|
|
24
30
|
}
|
|
25
31
|
//#endregion
|
|
26
32
|
export { Organizations };
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { RoleList } from "../roles/interfaces/role.interface.js";
|
|
2
|
+
import { ApiKey } from "../api-keys/interfaces/api-key.interface.js";
|
|
3
|
+
import { CreateOrganizationApiKeyOptions, CreateOrganizationApiKeyRequestOptions } from "../api-keys/interfaces/create-organization-api-key-options.interface.js";
|
|
4
|
+
import { CreatedApiKey } from "../api-keys/interfaces/created-api-key.interface.js";
|
|
5
|
+
import { ListOrganizationApiKeysOptions } from "../api-keys/interfaces/list-organization-api-keys-options.interface.js";
|
|
2
6
|
import { CreateOrganizationOptions, CreateOrganizationRequestOptions } from "./interfaces/create-organization-options.interface.js";
|
|
3
7
|
import { ListOrganizationFeatureFlagsOptions } from "./interfaces/list-organization-feature-flags-options.interface.js";
|
|
4
8
|
import { ListOrganizationsOptions } from "./interfaces/list-organizations-options.interface.js";
|
|
@@ -21,6 +25,8 @@ declare class Organizations {
|
|
|
21
25
|
updateOrganization(options: UpdateOrganizationOptions): Promise<Organization>;
|
|
22
26
|
listOrganizationRoles(options: ListOrganizationRolesOptions): Promise<RoleList>;
|
|
23
27
|
listOrganizationFeatureFlags(options: ListOrganizationFeatureFlagsOptions): Promise<AutoPaginatable<FeatureFlag, ListOrganizationFeatureFlagsOptions>>;
|
|
28
|
+
listOrganizationApiKeys(options: ListOrganizationApiKeysOptions): Promise<AutoPaginatable<ApiKey>>;
|
|
29
|
+
createOrganizationApiKey(options: CreateOrganizationApiKeyOptions, requestOptions?: CreateOrganizationApiKeyRequestOptions): Promise<CreatedApiKey>;
|
|
24
30
|
}
|
|
25
31
|
//#endregion
|
|
26
32
|
export { Organizations };
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { deserializeApiKey } from "../api-keys/serializers/api-key.serializer.js";
|
|
2
|
+
import { AutoPaginatable } from "../common/utils/pagination.js";
|
|
2
3
|
import { serializeCreateOrganizationOptions } from "./serializers/create-organization-options.serializer.js";
|
|
4
|
+
import { deserializeOrganization } from "./serializers/organization.serializer.js";
|
|
3
5
|
import { serializeUpdateOrganizationOptions } from "./serializers/update-organization-options.serializer.js";
|
|
4
|
-
import { AutoPaginatable } from "../common/utils/pagination.js";
|
|
5
6
|
import { fetchAndDeserialize } from "../common/utils/fetch-and-deserialize.js";
|
|
6
7
|
import { deserializeRole } from "../roles/serializers/role.serializer.js";
|
|
7
8
|
import { deserializeFeatureFlag } from "../feature-flags/serializers/feature-flag.serializer.js";
|
|
9
|
+
import { serializeCreateOrganizationApiKeyOptions } from "../api-keys/serializers/create-organization-api-key-options.serializer.js";
|
|
10
|
+
import { deserializeCreatedApiKey } from "../api-keys/serializers/created-api-key.serializer.js";
|
|
8
11
|
|
|
9
12
|
//#region src/organizations/organizations.ts
|
|
10
13
|
var Organizations = class {
|
|
@@ -46,6 +49,15 @@ var Organizations = class {
|
|
|
46
49
|
const { organizationId, ...paginationOptions } = options;
|
|
47
50
|
return new AutoPaginatable(await fetchAndDeserialize(this.workos, `/organizations/${organizationId}/feature-flags`, deserializeFeatureFlag, paginationOptions), (params) => fetchAndDeserialize(this.workos, `/organizations/${organizationId}/feature-flags`, deserializeFeatureFlag, params), options);
|
|
48
51
|
}
|
|
52
|
+
async listOrganizationApiKeys(options) {
|
|
53
|
+
const { organizationId, ...paginationOptions } = options;
|
|
54
|
+
return new AutoPaginatable(await fetchAndDeserialize(this.workos, `/organizations/${organizationId}/api_keys`, deserializeApiKey, paginationOptions), (params) => fetchAndDeserialize(this.workos, `/organizations/${organizationId}/api_keys`, deserializeApiKey, params), paginationOptions);
|
|
55
|
+
}
|
|
56
|
+
async createOrganizationApiKey(options, requestOptions = {}) {
|
|
57
|
+
const { organizationId } = options;
|
|
58
|
+
const { data } = await this.workos.post(`/organizations/${organizationId}/api_keys`, serializeCreateOrganizationApiKeyOptions(options), requestOptions);
|
|
59
|
+
return deserializeCreatedApiKey(data);
|
|
60
|
+
}
|
|
49
61
|
};
|
|
50
62
|
|
|
51
63
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.js","names":["workos: WorkOS"],"sources":["../../src/organizations/organizations.ts"],"sourcesContent":["import { AutoPaginatable } from '../common/utils/pagination';\nimport { WorkOS } from '../workos';\nimport {\n CreateOrganizationOptions,\n CreateOrganizationRequestOptions,\n ListOrganizationsOptions,\n Organization,\n OrganizationResponse,\n UpdateOrganizationOptions,\n} from './interfaces';\nimport {\n FeatureFlag,\n FeatureFlagResponse,\n} from '../feature-flags/interfaces/feature-flag.interface';\nimport {\n deserializeOrganization,\n serializeCreateOrganizationOptions,\n serializeUpdateOrganizationOptions,\n} from './serializers';\n\nimport { fetchAndDeserialize } from '../common/utils/fetch-and-deserialize';\nimport { ListOrganizationRolesResponse, RoleList } from '../roles/interfaces';\nimport { deserializeRole } from '../roles/serializers/role.serializer';\nimport { ListOrganizationRolesOptions } from './interfaces/list-organization-roles-options.interface';\nimport { ListOrganizationFeatureFlagsOptions } from './interfaces/list-organization-feature-flags-options.interface';\nimport { deserializeFeatureFlag } from '../feature-flags/serializers/
|
|
1
|
+
{"version":3,"file":"organizations.js","names":["workos: WorkOS"],"sources":["../../src/organizations/organizations.ts"],"sourcesContent":["import { AutoPaginatable } from '../common/utils/pagination';\nimport { WorkOS } from '../workos';\nimport {\n CreateOrganizationOptions,\n CreateOrganizationRequestOptions,\n ListOrganizationsOptions,\n Organization,\n OrganizationResponse,\n UpdateOrganizationOptions,\n} from './interfaces';\nimport {\n FeatureFlag,\n FeatureFlagResponse,\n} from '../feature-flags/interfaces/feature-flag.interface';\nimport {\n deserializeOrganization,\n serializeCreateOrganizationOptions,\n serializeUpdateOrganizationOptions,\n} from './serializers';\n\nimport { fetchAndDeserialize } from '../common/utils/fetch-and-deserialize';\nimport { ListOrganizationRolesResponse, RoleList } from '../roles/interfaces';\nimport { deserializeRole } from '../roles/serializers/role.serializer';\nimport { ListOrganizationRolesOptions } from './interfaces/list-organization-roles-options.interface';\nimport { ListOrganizationFeatureFlagsOptions } from './interfaces/list-organization-feature-flags-options.interface';\nimport { deserializeFeatureFlag } from '../feature-flags/serializers';\nimport {\n ApiKey,\n SerializedApiKey,\n ListOrganizationApiKeysOptions,\n CreateOrganizationApiKeyOptions,\n CreateOrganizationApiKeyRequestOptions,\n CreatedApiKey,\n SerializedCreatedApiKey,\n} from '../api-keys/interfaces';\nimport {\n deserializeApiKey,\n serializeCreateOrganizationApiKeyOptions,\n deserializeCreatedApiKey,\n} from '../api-keys/serializers';\n\nexport class Organizations {\n constructor(private readonly workos: WorkOS) {}\n\n async listOrganizations(\n options?: ListOrganizationsOptions,\n ): Promise<AutoPaginatable<Organization, ListOrganizationsOptions>> {\n return new AutoPaginatable(\n await fetchAndDeserialize<OrganizationResponse, Organization>(\n this.workos,\n '/organizations',\n deserializeOrganization,\n options,\n ),\n (params) =>\n fetchAndDeserialize<OrganizationResponse, Organization>(\n this.workos,\n '/organizations',\n deserializeOrganization,\n params,\n ),\n options,\n );\n }\n\n async createOrganization(\n payload: CreateOrganizationOptions,\n requestOptions: CreateOrganizationRequestOptions = {},\n ): Promise<Organization> {\n const { data } = await this.workos.post<OrganizationResponse>(\n '/organizations',\n serializeCreateOrganizationOptions(payload),\n requestOptions,\n );\n\n return deserializeOrganization(data);\n }\n\n async deleteOrganization(id: string) {\n await this.workos.delete(`/organizations/${id}`);\n }\n\n async getOrganization(id: string): Promise<Organization> {\n const { data } = await this.workos.get<OrganizationResponse>(\n `/organizations/${id}`,\n );\n\n return deserializeOrganization(data);\n }\n\n async getOrganizationByExternalId(externalId: string): Promise<Organization> {\n const { data } = await this.workos.get<OrganizationResponse>(\n `/organizations/external_id/${externalId}`,\n );\n\n return deserializeOrganization(data);\n }\n\n async updateOrganization(\n options: UpdateOrganizationOptions,\n ): Promise<Organization> {\n const { organization: organizationId, ...payload } = options;\n\n const { data } = await this.workos.put<OrganizationResponse>(\n `/organizations/${organizationId}`,\n serializeUpdateOrganizationOptions(payload),\n );\n\n return deserializeOrganization(data);\n }\n\n async listOrganizationRoles(\n options: ListOrganizationRolesOptions,\n ): Promise<RoleList> {\n const { organizationId } = options;\n\n const { data: response } =\n await this.workos.get<ListOrganizationRolesResponse>(\n `/organizations/${organizationId}/roles`,\n );\n\n return {\n object: 'list',\n data: response.data.map((role) => deserializeRole(role)),\n };\n }\n\n async listOrganizationFeatureFlags(\n options: ListOrganizationFeatureFlagsOptions,\n ): Promise<\n AutoPaginatable<FeatureFlag, ListOrganizationFeatureFlagsOptions>\n > {\n const { organizationId, ...paginationOptions } = options;\n\n return new AutoPaginatable(\n await fetchAndDeserialize<FeatureFlagResponse, FeatureFlag>(\n this.workos,\n `/organizations/${organizationId}/feature-flags`,\n deserializeFeatureFlag,\n paginationOptions,\n ),\n (params) =>\n fetchAndDeserialize<FeatureFlagResponse, FeatureFlag>(\n this.workos,\n `/organizations/${organizationId}/feature-flags`,\n deserializeFeatureFlag,\n params,\n ),\n options,\n );\n }\n\n async listOrganizationApiKeys(\n options: ListOrganizationApiKeysOptions,\n ): Promise<AutoPaginatable<ApiKey>> {\n const { organizationId, ...paginationOptions } = options;\n\n return new AutoPaginatable(\n await fetchAndDeserialize<SerializedApiKey, ApiKey>(\n this.workos,\n `/organizations/${organizationId}/api_keys`,\n deserializeApiKey,\n paginationOptions,\n ),\n (params) =>\n fetchAndDeserialize<SerializedApiKey, ApiKey>(\n this.workos,\n `/organizations/${organizationId}/api_keys`,\n deserializeApiKey,\n params,\n ),\n paginationOptions,\n );\n }\n\n async createOrganizationApiKey(\n options: CreateOrganizationApiKeyOptions,\n requestOptions: CreateOrganizationApiKeyRequestOptions = {},\n ): Promise<CreatedApiKey> {\n const { organizationId } = options;\n\n const { data } = await this.workos.post<SerializedCreatedApiKey>(\n `/organizations/${organizationId}/api_keys`,\n serializeCreateOrganizationApiKeyOptions(options),\n requestOptions,\n );\n\n return deserializeCreatedApiKey(data);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAyCA,IAAa,gBAAb,MAA2B;CACzB,YAAY,AAAiBA,QAAgB;EAAhB;;CAE7B,MAAM,kBACJ,SACkE;AAClE,SAAO,IAAI,gBACT,MAAM,oBACJ,KAAK,QACL,kBACA,yBACA,QACD,GACA,WACC,oBACE,KAAK,QACL,kBACA,yBACA,OACD,EACH,QACD;;CAGH,MAAM,mBACJ,SACA,iBAAmD,EAAE,EAC9B;EACvB,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KACjC,kBACA,mCAAmC,QAAQ,EAC3C,eACD;AAED,SAAO,wBAAwB,KAAK;;CAGtC,MAAM,mBAAmB,IAAY;AACnC,QAAM,KAAK,OAAO,OAAO,kBAAkB,KAAK;;CAGlD,MAAM,gBAAgB,IAAmC;EACvD,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,kBAAkB,KACnB;AAED,SAAO,wBAAwB,KAAK;;CAGtC,MAAM,4BAA4B,YAA2C;EAC3E,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,8BAA8B,aAC/B;AAED,SAAO,wBAAwB,KAAK;;CAGtC,MAAM,mBACJ,SACuB;EACvB,MAAM,EAAE,cAAc,gBAAgB,GAAG,YAAY;EAErD,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,IACjC,kBAAkB,kBAClB,mCAAmC,QAAQ,CAC5C;AAED,SAAO,wBAAwB,KAAK;;CAGtC,MAAM,sBACJ,SACmB;EACnB,MAAM,EAAE,mBAAmB;EAE3B,MAAM,EAAE,MAAM,aACZ,MAAM,KAAK,OAAO,IAChB,kBAAkB,eAAe,QAClC;AAEH,SAAO;GACL,QAAQ;GACR,MAAM,SAAS,KAAK,KAAK,SAAS,gBAAgB,KAAK,CAAC;GACzD;;CAGH,MAAM,6BACJ,SAGA;EACA,MAAM,EAAE,gBAAgB,GAAG,sBAAsB;AAEjD,SAAO,IAAI,gBACT,MAAM,oBACJ,KAAK,QACL,kBAAkB,eAAe,iBACjC,wBACA,kBACD,GACA,WACC,oBACE,KAAK,QACL,kBAAkB,eAAe,iBACjC,wBACA,OACD,EACH,QACD;;CAGH,MAAM,wBACJ,SACkC;EAClC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB;AAEjD,SAAO,IAAI,gBACT,MAAM,oBACJ,KAAK,QACL,kBAAkB,eAAe,YACjC,mBACA,kBACD,GACA,WACC,oBACE,KAAK,QACL,kBAAkB,eAAe,YACjC,mBACA,OACD,EACH,kBACD;;CAGH,MAAM,yBACJ,SACA,iBAAyD,EAAE,EACnC;EACxB,MAAM,EAAE,mBAAmB;EAE3B,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KACjC,kBAAkB,eAAe,YACjC,yCAAyC,QAAQ,EACjD,eACD;AAED,SAAO,yBAAyB,KAAK"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_organizations_serializers_organization_serializer = require('./organization.serializer.cjs');
|
|
2
1
|
const require_organizations_serializers_create_organization_options_serializer = require('./create-organization-options.serializer.cjs');
|
|
2
|
+
const require_organizations_serializers_organization_serializer = require('./organization.serializer.cjs');
|
|
3
3
|
const require_organizations_serializers_update_organization_options_serializer = require('./update-organization-options.serializer.cjs');
|
|
4
4
|
|
|
5
5
|
exports.deserializeOrganization = require_organizations_serializers_organization_serializer.deserializeOrganization;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { deserializeOrganization } from "./organization.serializer.js";
|
|
2
1
|
import { serializeCreateOrganizationOptions } from "./create-organization-options.serializer.js";
|
|
2
|
+
import { deserializeOrganization } from "./organization.serializer.js";
|
|
3
3
|
import { serializeUpdateOrganizationOptions } from "./update-organization-options.serializer.js";
|
|
4
4
|
|
|
5
5
|
export { deserializeOrganization, serializeCreateOrganizationOptions, serializeUpdateOrganizationOptions };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/pkce/pkce.ts
|
|
3
|
+
/**
|
|
4
|
+
* PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.
|
|
5
|
+
*
|
|
6
|
+
* Implements RFC 7636 for secure authorization code exchange without a client secret.
|
|
7
|
+
* Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.
|
|
8
|
+
*/
|
|
9
|
+
var PKCE = class {
|
|
10
|
+
/**
|
|
11
|
+
* Generate a cryptographically random code verifier.
|
|
12
|
+
*
|
|
13
|
+
* @param length - Length of verifier (43-128, default 43)
|
|
14
|
+
* @returns RFC 7636 compliant code verifier
|
|
15
|
+
*/
|
|
16
|
+
generateCodeVerifier(length = 43) {
|
|
17
|
+
if (length < 43 || length > 128) throw new RangeError(`Code verifier length must be between 43 and 128, got ${length}`);
|
|
18
|
+
const byteLength = Math.ceil(length * 3 / 4);
|
|
19
|
+
const randomBytes = new Uint8Array(byteLength);
|
|
20
|
+
crypto.getRandomValues(randomBytes);
|
|
21
|
+
return this.base64UrlEncode(randomBytes).slice(0, length);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate S256 code challenge from a verifier.
|
|
25
|
+
*
|
|
26
|
+
* @param verifier - The code verifier
|
|
27
|
+
* @returns Base64URL-encoded SHA256 hash
|
|
28
|
+
*/
|
|
29
|
+
async generateCodeChallenge(verifier) {
|
|
30
|
+
const data = new TextEncoder().encode(verifier);
|
|
31
|
+
const hash = await crypto.subtle.digest("SHA-256", data);
|
|
32
|
+
return this.base64UrlEncode(new Uint8Array(hash));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate a complete PKCE pair (verifier + challenge).
|
|
36
|
+
*
|
|
37
|
+
* @returns Code verifier, challenge, and method ('S256')
|
|
38
|
+
*/
|
|
39
|
+
async generate() {
|
|
40
|
+
const codeVerifier = this.generateCodeVerifier();
|
|
41
|
+
return {
|
|
42
|
+
codeVerifier,
|
|
43
|
+
codeChallenge: await this.generateCodeChallenge(codeVerifier),
|
|
44
|
+
codeChallengeMethod: "S256"
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
base64UrlEncode(buffer) {
|
|
48
|
+
return btoa(String.fromCharCode(...buffer)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
exports.PKCE = PKCE;
|
|
54
|
+
//# sourceMappingURL=pkce.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.cjs","names":[],"sources":["../../src/pkce/pkce.ts"],"sourcesContent":["export interface PKCEPair {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: 'S256';\n}\n\n/**\n * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.\n *\n * Implements RFC 7636 for secure authorization code exchange without a client secret.\n * Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.\n */\nexport class PKCE {\n /**\n * Generate a cryptographically random code verifier.\n *\n * @param length - Length of verifier (43-128, default 43)\n * @returns RFC 7636 compliant code verifier\n */\n generateCodeVerifier(length: number = 43): string {\n if (length < 43 || length > 128) {\n throw new RangeError(\n `Code verifier length must be between 43 and 128, got ${length}`,\n );\n }\n\n const byteLength = Math.ceil((length * 3) / 4);\n const randomBytes = new Uint8Array(byteLength);\n crypto.getRandomValues(randomBytes);\n\n return this.base64UrlEncode(randomBytes).slice(0, length);\n }\n\n /**\n * Generate S256 code challenge from a verifier.\n *\n * @param verifier - The code verifier\n * @returns Base64URL-encoded SHA256 hash\n */\n async generateCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(verifier);\n const hash = await crypto.subtle.digest('SHA-256', data);\n return this.base64UrlEncode(new Uint8Array(hash));\n }\n\n /**\n * Generate a complete PKCE pair (verifier + challenge).\n *\n * @returns Code verifier, challenge, and method ('S256')\n */\n async generate(): Promise<PKCEPair> {\n const codeVerifier = this.generateCodeVerifier();\n const codeChallenge = await this.generateCodeChallenge(codeVerifier);\n return { codeVerifier, codeChallenge, codeChallengeMethod: 'S256' };\n }\n\n private base64UrlEncode(buffer: Uint8Array): string {\n const base64 = btoa(String.fromCharCode(...buffer));\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAa,OAAb,MAAkB;;;;;;;CAOhB,qBAAqB,SAAiB,IAAY;AAChD,MAAI,SAAS,MAAM,SAAS,IAC1B,OAAM,IAAI,WACR,wDAAwD,SACzD;EAGH,MAAM,aAAa,KAAK,KAAM,SAAS,IAAK,EAAE;EAC9C,MAAM,cAAc,IAAI,WAAW,WAAW;AAC9C,SAAO,gBAAgB,YAAY;AAEnC,SAAO,KAAK,gBAAgB,YAAY,CAAC,MAAM,GAAG,OAAO;;;;;;;;CAS3D,MAAM,sBAAsB,UAAmC;EAE7D,MAAM,OADU,IAAI,aAAa,CACZ,OAAO,SAAS;EACrC,MAAM,OAAO,MAAM,OAAO,OAAO,OAAO,WAAW,KAAK;AACxD,SAAO,KAAK,gBAAgB,IAAI,WAAW,KAAK,CAAC;;;;;;;CAQnD,MAAM,WAA8B;EAClC,MAAM,eAAe,KAAK,sBAAsB;AAEhD,SAAO;GAAE;GAAc,eADD,MAAM,KAAK,sBAAsB,aAAa;GAC9B,qBAAqB;GAAQ;;CAGrE,AAAQ,gBAAgB,QAA4B;AAElD,SADe,KAAK,OAAO,aAAa,GAAG,OAAO,CAAC,CACrC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/pkce/pkce.d.ts
|
|
2
|
+
interface PKCEPair {
|
|
3
|
+
codeVerifier: string;
|
|
4
|
+
codeChallenge: string;
|
|
5
|
+
codeChallengeMethod: 'S256';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.
|
|
9
|
+
*
|
|
10
|
+
* Implements RFC 7636 for secure authorization code exchange without a client secret.
|
|
11
|
+
* Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.
|
|
12
|
+
*/
|
|
13
|
+
declare class PKCE {
|
|
14
|
+
/**
|
|
15
|
+
* Generate a cryptographically random code verifier.
|
|
16
|
+
*
|
|
17
|
+
* @param length - Length of verifier (43-128, default 43)
|
|
18
|
+
* @returns RFC 7636 compliant code verifier
|
|
19
|
+
*/
|
|
20
|
+
generateCodeVerifier(length?: number): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate S256 code challenge from a verifier.
|
|
23
|
+
*
|
|
24
|
+
* @param verifier - The code verifier
|
|
25
|
+
* @returns Base64URL-encoded SHA256 hash
|
|
26
|
+
*/
|
|
27
|
+
generateCodeChallenge(verifier: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a complete PKCE pair (verifier + challenge).
|
|
30
|
+
*
|
|
31
|
+
* @returns Code verifier, challenge, and method ('S256')
|
|
32
|
+
*/
|
|
33
|
+
generate(): Promise<PKCEPair>;
|
|
34
|
+
private base64UrlEncode;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { PKCE, PKCEPair };
|
|
38
|
+
//# sourceMappingURL=pkce.d.cts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/pkce/pkce.d.ts
|
|
2
|
+
interface PKCEPair {
|
|
3
|
+
codeVerifier: string;
|
|
4
|
+
codeChallenge: string;
|
|
5
|
+
codeChallengeMethod: 'S256';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.
|
|
9
|
+
*
|
|
10
|
+
* Implements RFC 7636 for secure authorization code exchange without a client secret.
|
|
11
|
+
* Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.
|
|
12
|
+
*/
|
|
13
|
+
declare class PKCE {
|
|
14
|
+
/**
|
|
15
|
+
* Generate a cryptographically random code verifier.
|
|
16
|
+
*
|
|
17
|
+
* @param length - Length of verifier (43-128, default 43)
|
|
18
|
+
* @returns RFC 7636 compliant code verifier
|
|
19
|
+
*/
|
|
20
|
+
generateCodeVerifier(length?: number): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate S256 code challenge from a verifier.
|
|
23
|
+
*
|
|
24
|
+
* @param verifier - The code verifier
|
|
25
|
+
* @returns Base64URL-encoded SHA256 hash
|
|
26
|
+
*/
|
|
27
|
+
generateCodeChallenge(verifier: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a complete PKCE pair (verifier + challenge).
|
|
30
|
+
*
|
|
31
|
+
* @returns Code verifier, challenge, and method ('S256')
|
|
32
|
+
*/
|
|
33
|
+
generate(): Promise<PKCEPair>;
|
|
34
|
+
private base64UrlEncode;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { PKCE, PKCEPair };
|
|
38
|
+
//# sourceMappingURL=pkce.d.ts.map
|
package/lib/pkce/pkce.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/pkce/pkce.ts
|
|
2
|
+
/**
|
|
3
|
+
* PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.
|
|
4
|
+
*
|
|
5
|
+
* Implements RFC 7636 for secure authorization code exchange without a client secret.
|
|
6
|
+
* Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.
|
|
7
|
+
*/
|
|
8
|
+
var PKCE = class {
|
|
9
|
+
/**
|
|
10
|
+
* Generate a cryptographically random code verifier.
|
|
11
|
+
*
|
|
12
|
+
* @param length - Length of verifier (43-128, default 43)
|
|
13
|
+
* @returns RFC 7636 compliant code verifier
|
|
14
|
+
*/
|
|
15
|
+
generateCodeVerifier(length = 43) {
|
|
16
|
+
if (length < 43 || length > 128) throw new RangeError(`Code verifier length must be between 43 and 128, got ${length}`);
|
|
17
|
+
const byteLength = Math.ceil(length * 3 / 4);
|
|
18
|
+
const randomBytes = new Uint8Array(byteLength);
|
|
19
|
+
crypto.getRandomValues(randomBytes);
|
|
20
|
+
return this.base64UrlEncode(randomBytes).slice(0, length);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate S256 code challenge from a verifier.
|
|
24
|
+
*
|
|
25
|
+
* @param verifier - The code verifier
|
|
26
|
+
* @returns Base64URL-encoded SHA256 hash
|
|
27
|
+
*/
|
|
28
|
+
async generateCodeChallenge(verifier) {
|
|
29
|
+
const data = new TextEncoder().encode(verifier);
|
|
30
|
+
const hash = await crypto.subtle.digest("SHA-256", data);
|
|
31
|
+
return this.base64UrlEncode(new Uint8Array(hash));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate a complete PKCE pair (verifier + challenge).
|
|
35
|
+
*
|
|
36
|
+
* @returns Code verifier, challenge, and method ('S256')
|
|
37
|
+
*/
|
|
38
|
+
async generate() {
|
|
39
|
+
const codeVerifier = this.generateCodeVerifier();
|
|
40
|
+
return {
|
|
41
|
+
codeVerifier,
|
|
42
|
+
codeChallenge: await this.generateCodeChallenge(codeVerifier),
|
|
43
|
+
codeChallengeMethod: "S256"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
base64UrlEncode(buffer) {
|
|
47
|
+
return btoa(String.fromCharCode(...buffer)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { PKCE };
|
|
53
|
+
//# sourceMappingURL=pkce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","names":[],"sources":["../../src/pkce/pkce.ts"],"sourcesContent":["export interface PKCEPair {\n codeVerifier: string;\n codeChallenge: string;\n codeChallengeMethod: 'S256';\n}\n\n/**\n * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0 public clients.\n *\n * Implements RFC 7636 for secure authorization code exchange without a client secret.\n * Used by Electron apps, React Native/mobile apps, CLI tools, and other public clients.\n */\nexport class PKCE {\n /**\n * Generate a cryptographically random code verifier.\n *\n * @param length - Length of verifier (43-128, default 43)\n * @returns RFC 7636 compliant code verifier\n */\n generateCodeVerifier(length: number = 43): string {\n if (length < 43 || length > 128) {\n throw new RangeError(\n `Code verifier length must be between 43 and 128, got ${length}`,\n );\n }\n\n const byteLength = Math.ceil((length * 3) / 4);\n const randomBytes = new Uint8Array(byteLength);\n crypto.getRandomValues(randomBytes);\n\n return this.base64UrlEncode(randomBytes).slice(0, length);\n }\n\n /**\n * Generate S256 code challenge from a verifier.\n *\n * @param verifier - The code verifier\n * @returns Base64URL-encoded SHA256 hash\n */\n async generateCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(verifier);\n const hash = await crypto.subtle.digest('SHA-256', data);\n return this.base64UrlEncode(new Uint8Array(hash));\n }\n\n /**\n * Generate a complete PKCE pair (verifier + challenge).\n *\n * @returns Code verifier, challenge, and method ('S256')\n */\n async generate(): Promise<PKCEPair> {\n const codeVerifier = this.generateCodeVerifier();\n const codeChallenge = await this.generateCodeChallenge(codeVerifier);\n return { codeVerifier, codeChallenge, codeChallengeMethod: 'S256' };\n }\n\n private base64UrlEncode(buffer: Uint8Array): string {\n const base64 = btoa(String.fromCharCode(...buffer));\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n }\n}\n"],"mappings":";;;;;;;AAYA,IAAa,OAAb,MAAkB;;;;;;;CAOhB,qBAAqB,SAAiB,IAAY;AAChD,MAAI,SAAS,MAAM,SAAS,IAC1B,OAAM,IAAI,WACR,wDAAwD,SACzD;EAGH,MAAM,aAAa,KAAK,KAAM,SAAS,IAAK,EAAE;EAC9C,MAAM,cAAc,IAAI,WAAW,WAAW;AAC9C,SAAO,gBAAgB,YAAY;AAEnC,SAAO,KAAK,gBAAgB,YAAY,CAAC,MAAM,GAAG,OAAO;;;;;;;;CAS3D,MAAM,sBAAsB,UAAmC;EAE7D,MAAM,OADU,IAAI,aAAa,CACZ,OAAO,SAAS;EACrC,MAAM,OAAO,MAAM,OAAO,OAAO,OAAO,WAAW,KAAK;AACxD,SAAO,KAAK,gBAAgB,IAAI,WAAW,KAAK,CAAC;;;;;;;CAQnD,MAAM,WAA8B;EAClC,MAAM,eAAe,KAAK,sBAAsB;AAEhD,SAAO;GAAE;GAAc,eADD,MAAM,KAAK,sBAAsB,aAAa;GAC9B,qBAAqB;GAAQ;;CAGrE,AAAQ,gBAAgB,QAA4B;AAElD,SADe,KAAK,OAAO,aAAa,GAAG,OAAO,CAAC,CACrC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
//#region src/sso/interfaces/authorization-url-options.interface.d.ts
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* PKCE fields must be provided together or not at all.
|
|
4
|
+
* Use workos.pkce.generate() to create a valid pair.
|
|
5
|
+
*/
|
|
6
|
+
type PKCEFields = {
|
|
7
|
+
codeChallenge?: never;
|
|
8
|
+
codeChallengeMethod?: never;
|
|
9
|
+
} | {
|
|
10
|
+
codeChallenge: string;
|
|
11
|
+
codeChallengeMethod: 'S256';
|
|
12
|
+
};
|
|
13
|
+
interface SSOAuthorizationURLBaseFields {
|
|
3
14
|
clientId: string;
|
|
4
15
|
domainHint?: string;
|
|
5
16
|
loginHint?: string;
|
|
@@ -8,22 +19,37 @@ interface SSOAuthorizationURLBase {
|
|
|
8
19
|
redirectUri: string;
|
|
9
20
|
state?: string;
|
|
10
21
|
}
|
|
11
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Result of getAuthorizationUrlWithPKCE() containing the URL,
|
|
24
|
+
* state, and PKCE code verifier.
|
|
25
|
+
*
|
|
26
|
+
* The codeVerifier must be stored securely and passed to
|
|
27
|
+
* getProfileAndToken() during token exchange.
|
|
28
|
+
*/
|
|
29
|
+
interface SSOPKCEAuthorizationURLResult {
|
|
30
|
+
/** The complete authorization URL to redirect the user to */
|
|
31
|
+
url: string;
|
|
32
|
+
/** The state parameter (auto-generated) */
|
|
33
|
+
state: string;
|
|
34
|
+
/** The PKCE code verifier. Store securely and pass to getProfileAndToken(). */
|
|
35
|
+
codeVerifier: string;
|
|
36
|
+
}
|
|
37
|
+
type SSOWithConnection = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
12
38
|
connection: string;
|
|
13
39
|
organization?: never;
|
|
14
40
|
provider?: never;
|
|
15
|
-
}
|
|
16
|
-
|
|
41
|
+
};
|
|
42
|
+
type SSOWithOrganization = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
17
43
|
organization: string;
|
|
18
44
|
connection?: never;
|
|
19
45
|
provider?: never;
|
|
20
|
-
}
|
|
21
|
-
|
|
46
|
+
};
|
|
47
|
+
type SSOWithProvider = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
22
48
|
provider: string;
|
|
23
49
|
connection?: never;
|
|
24
50
|
organization?: never;
|
|
25
|
-
}
|
|
51
|
+
};
|
|
26
52
|
type SSOAuthorizationURLOptions = SSOWithConnection | SSOWithOrganization | SSOWithProvider;
|
|
27
53
|
//#endregion
|
|
28
|
-
export { SSOAuthorizationURLOptions };
|
|
54
|
+
export { SSOAuthorizationURLOptions, SSOPKCEAuthorizationURLResult };
|
|
29
55
|
//# sourceMappingURL=authorization-url-options.interface.d.cts.map
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
//#region src/sso/interfaces/authorization-url-options.interface.d.ts
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* PKCE fields must be provided together or not at all.
|
|
4
|
+
* Use workos.pkce.generate() to create a valid pair.
|
|
5
|
+
*/
|
|
6
|
+
type PKCEFields = {
|
|
7
|
+
codeChallenge?: never;
|
|
8
|
+
codeChallengeMethod?: never;
|
|
9
|
+
} | {
|
|
10
|
+
codeChallenge: string;
|
|
11
|
+
codeChallengeMethod: 'S256';
|
|
12
|
+
};
|
|
13
|
+
interface SSOAuthorizationURLBaseFields {
|
|
3
14
|
clientId: string;
|
|
4
15
|
domainHint?: string;
|
|
5
16
|
loginHint?: string;
|
|
@@ -8,22 +19,37 @@ interface SSOAuthorizationURLBase {
|
|
|
8
19
|
redirectUri: string;
|
|
9
20
|
state?: string;
|
|
10
21
|
}
|
|
11
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Result of getAuthorizationUrlWithPKCE() containing the URL,
|
|
24
|
+
* state, and PKCE code verifier.
|
|
25
|
+
*
|
|
26
|
+
* The codeVerifier must be stored securely and passed to
|
|
27
|
+
* getProfileAndToken() during token exchange.
|
|
28
|
+
*/
|
|
29
|
+
interface SSOPKCEAuthorizationURLResult {
|
|
30
|
+
/** The complete authorization URL to redirect the user to */
|
|
31
|
+
url: string;
|
|
32
|
+
/** The state parameter (auto-generated) */
|
|
33
|
+
state: string;
|
|
34
|
+
/** The PKCE code verifier. Store securely and pass to getProfileAndToken(). */
|
|
35
|
+
codeVerifier: string;
|
|
36
|
+
}
|
|
37
|
+
type SSOWithConnection = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
12
38
|
connection: string;
|
|
13
39
|
organization?: never;
|
|
14
40
|
provider?: never;
|
|
15
|
-
}
|
|
16
|
-
|
|
41
|
+
};
|
|
42
|
+
type SSOWithOrganization = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
17
43
|
organization: string;
|
|
18
44
|
connection?: never;
|
|
19
45
|
provider?: never;
|
|
20
|
-
}
|
|
21
|
-
|
|
46
|
+
};
|
|
47
|
+
type SSOWithProvider = SSOAuthorizationURLBaseFields & PKCEFields & {
|
|
22
48
|
provider: string;
|
|
23
49
|
connection?: never;
|
|
24
50
|
organization?: never;
|
|
25
|
-
}
|
|
51
|
+
};
|
|
26
52
|
type SSOAuthorizationURLOptions = SSOWithConnection | SSOWithOrganization | SSOWithProvider;
|
|
27
53
|
//#endregion
|
|
28
|
-
export { SSOAuthorizationURLOptions };
|
|
54
|
+
export { SSOAuthorizationURLOptions, SSOPKCEAuthorizationURLResult };
|
|
29
55
|
//# sourceMappingURL=authorization-url-options.interface.d.ts.map
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
interface GetProfileAndTokenOptions {
|
|
3
3
|
clientId: string;
|
|
4
4
|
code: string;
|
|
5
|
+
/**
|
|
6
|
+
* PKCE code verifier for public clients.
|
|
7
|
+
* Pass the codeVerifier that was generated with getAuthorizationUrlWithPKCE().
|
|
8
|
+
* When provided, client_secret is not sent (public client mode).
|
|
9
|
+
*/
|
|
10
|
+
codeVerifier?: string;
|
|
5
11
|
}
|
|
6
12
|
//#endregion
|
|
7
13
|
export { GetProfileAndTokenOptions };
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
interface GetProfileAndTokenOptions {
|
|
3
3
|
clientId: string;
|
|
4
4
|
code: string;
|
|
5
|
+
/**
|
|
6
|
+
* PKCE code verifier for public clients.
|
|
7
|
+
* Pass the codeVerifier that was generated with getAuthorizationUrlWithPKCE().
|
|
8
|
+
* When provided, client_secret is not sent (public client mode).
|
|
9
|
+
*/
|
|
10
|
+
codeVerifier?: string;
|
|
5
11
|
}
|
|
6
12
|
//#endregion
|
|
7
13
|
export { GetProfileAndTokenOptions };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SSOAuthorizationURLOptions } from "./authorization-url-options.interface.cjs";
|
|
1
|
+
import { SSOAuthorizationURLOptions, SSOPKCEAuthorizationURLResult } from "./authorization-url-options.interface.cjs";
|
|
2
2
|
import { ConnectionType } from "./connection-type.enum.cjs";
|
|
3
3
|
import { Connection, ConnectionDomain, ConnectionResponse } from "./connection.interface.cjs";
|
|
4
4
|
import { GetProfileOptions } from "./get-profile-options.interface.cjs";
|
|
@@ -6,4 +6,4 @@ import { GetProfileAndTokenOptions } from "./get-profile-and-token-options.inter
|
|
|
6
6
|
import { ListConnectionsOptions, SerializedListConnectionsOptions } from "./list-connections-options.interface.cjs";
|
|
7
7
|
import { Profile, ProfileResponse } from "./profile.interface.cjs";
|
|
8
8
|
import { ProfileAndToken, ProfileAndTokenResponse } from "./profile-and-token.interface.cjs";
|
|
9
|
-
export { Connection, ConnectionDomain, ConnectionResponse, ConnectionType, GetProfileAndTokenOptions, GetProfileOptions, ListConnectionsOptions, Profile, ProfileAndToken, ProfileAndTokenResponse, ProfileResponse, SSOAuthorizationURLOptions, SerializedListConnectionsOptions };
|
|
9
|
+
export { Connection, ConnectionDomain, ConnectionResponse, ConnectionType, GetProfileAndTokenOptions, GetProfileOptions, ListConnectionsOptions, Profile, ProfileAndToken, ProfileAndTokenResponse, ProfileResponse, SSOAuthorizationURLOptions, type SSOPKCEAuthorizationURLResult, SerializedListConnectionsOptions };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SSOAuthorizationURLOptions } from "./authorization-url-options.interface.js";
|
|
1
|
+
import { SSOAuthorizationURLOptions, SSOPKCEAuthorizationURLResult } from "./authorization-url-options.interface.js";
|
|
2
2
|
import { ConnectionType } from "./connection-type.enum.js";
|
|
3
3
|
import { Connection, ConnectionDomain, ConnectionResponse } from "./connection.interface.js";
|
|
4
4
|
import { GetProfileOptions } from "./get-profile-options.interface.js";
|
|
@@ -6,4 +6,4 @@ import { GetProfileAndTokenOptions } from "./get-profile-and-token-options.inter
|
|
|
6
6
|
import { ListConnectionsOptions, SerializedListConnectionsOptions } from "./list-connections-options.interface.js";
|
|
7
7
|
import { Profile, ProfileResponse } from "./profile.interface.js";
|
|
8
8
|
import { ProfileAndToken, ProfileAndTokenResponse } from "./profile-and-token.interface.js";
|
|
9
|
-
export { Connection, ConnectionDomain, ConnectionResponse, ConnectionType, GetProfileAndTokenOptions, GetProfileOptions, ListConnectionsOptions, Profile, ProfileAndToken, ProfileAndTokenResponse, ProfileResponse, SSOAuthorizationURLOptions, SerializedListConnectionsOptions };
|
|
9
|
+
export { Connection, ConnectionDomain, ConnectionResponse, ConnectionType, GetProfileAndTokenOptions, GetProfileOptions, ListConnectionsOptions, Profile, ProfileAndToken, ProfileAndTokenResponse, ProfileResponse, SSOAuthorizationURLOptions, type SSOPKCEAuthorizationURLResult, SerializedListConnectionsOptions };
|